From c6a93f71f2b0b9c2d3f89b1de2ae5ee254579ad0 Mon Sep 17 00:00:00 2001 From: plushdohn <59444760+plushdohn@users.noreply.github.com> Date: Wed, 24 Apr 2024 19:15:20 +0200 Subject: [PATCH] fix: dynamic slots autocomplete (#77) Co-authored-by: Benjamin Canac --- playground/pages/accordion.vue | 8 ++- playground/pages/breadcrumb.vue | 2 +- playground/pages/dropdown-menu.vue | 11 ++++ playground/pages/navigation-menu.vue | 11 +++- playground/pages/tabs.vue | 10 ++- src/runtime/components/Accordion.vue | 6 +- src/runtime/components/Breadcrumb.vue | 14 ++--- src/runtime/components/DropdownMenu.vue | 8 +-- .../components/DropdownMenuContent.vue | 62 +++++++++---------- src/runtime/components/NavigationMenu.vue | 22 +++---- src/runtime/components/Tabs.vue | 6 +- src/runtime/types/utils.d.ts | 3 + test/components/Tabs.spec.ts | 3 +- 13 files changed, 97 insertions(+), 69 deletions(-) diff --git a/playground/pages/accordion.vue b/playground/pages/accordion.vue index baf3973b..7b977061 100644 --- a/playground/pages/accordion.vue +++ b/playground/pages/accordion.vue @@ -22,7 +22,7 @@ const items = [{ content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.' }, { label: 'Utilities', - slot: 'toto', + slot: 'custom' as const, icon: 'i-heroicons-wrench-screwdriver', content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed neque elit, tristique placerat feugiat ac, facilisis vitae arcu. Proin eget egestas augue. Praesent ut sem nec arcu pellentesque aliquet. Duis dapibus diam vel metus tempus vulputate.' }] @@ -30,6 +30,10 @@ const items = [{ diff --git a/playground/pages/breadcrumb.vue b/playground/pages/breadcrumb.vue index 727d8ebc..6ee53117 100644 --- a/playground/pages/breadcrumb.vue +++ b/playground/pages/breadcrumb.vue @@ -3,7 +3,7 @@ const items = [{ label: 'Home', to: '/' }, { - slot: 'dropdown', + slot: 'dropdown' as const, icon: 'i-heroicons-ellipsis-horizontal', children: [{ label: 'Documentation' diff --git a/playground/pages/dropdown-menu.vue b/playground/pages/dropdown-menu.vue index 2c5ae0ce..08a176d9 100644 --- a/playground/pages/dropdown-menu.vue +++ b/playground/pages/dropdown-menu.vue @@ -1,4 +1,6 @@ diff --git a/src/runtime/components/Accordion.vue b/src/runtime/components/Accordion.vue index f3171533..4df29738 100644 --- a/src/runtime/components/Accordion.vue +++ b/src/runtime/components/Accordion.vue @@ -4,6 +4,7 @@ import type { AccordionRootProps, AccordionRootEmits, AccordionContentProps } fr import type { AppConfig } from '@nuxt/schema' import _appConfig from '#build/app.config' import theme from '#build/ui/accordion' +import type { DynamicSlots } from '#ui/types/utils' const appConfig = _appConfig as AppConfig & { ui: { accordion: Partial } } @@ -31,14 +32,13 @@ export interface AccordionEmits extends AccordionRootEmits {} type SlotProps = (props: { item: T, index: number }) => any -export type AccordionSlots = { +export type AccordionSlots = { default: SlotProps leading: SlotProps label: SlotProps trailing: SlotProps content: SlotProps - [key: string]: SlotProps -} +} & DynamicSlots> diff --git a/src/runtime/components/DropdownMenuContent.vue b/src/runtime/components/DropdownMenuContent.vue index a5923e8b..ff0aa9cc 100644 --- a/src/runtime/components/DropdownMenuContent.vue +++ b/src/runtime/components/DropdownMenuContent.vue @@ -16,7 +16,7 @@ interface DropdownMenuContentProps extends Omit extends DropdownMenuSlots {} +type DropdownMenuContentSlots = DropdownMenuSlots