From 3fead5b8dbbc6a730e2453a69c82a126f1584c03 Mon Sep 17 00:00:00 2001 From: Steven Boddez Date: Wed, 28 May 2025 11:16:09 -0600 Subject: [PATCH 1/2] feat: Add group-label and separator slots to Select and SelectMenu --- src/runtime/components/Select.vue | 17 ++- src/runtime/components/SelectMenu.vue | 17 ++- test/components/Select.spec.ts | 9 +- test/components/SelectMenu.spec.ts | 4 +- .../__snapshots__/Select-vue.spec.ts.snap | 132 ++++++++++++++++++ .../__snapshots__/Select.spec.ts.snap | 132 ++++++++++++++++++ .../__snapshots__/SelectMenu-vue.spec.ts.snap | 72 ++++++++++ .../__snapshots__/SelectMenu.spec.ts.snap | 72 ++++++++++ 8 files changed, 441 insertions(+), 14 deletions(-) diff --git a/src/runtime/components/Select.vue b/src/runtime/components/Select.vue index 1bccd608e0..7f4617c436 100644 --- a/src/runtime/components/Select.vue +++ b/src/runtime/components/Select.vue @@ -124,6 +124,8 @@ export interface SelectSlots< open: boolean ui: { [K in keyof Required]: (props?: Record) => string } }): any + 'group-label': SlotProps + 'separator': SlotProps 'item': SlotProps 'item-leading': SlotProps 'item-label': SlotProps @@ -193,7 +195,7 @@ const groups = computed(() => // eslint-disable-next-line vue/no-dupe-keys const items = computed(() => groups.value.flatMap(group => group) as T[]) -function displayValue(value: GetItemValue | GetItemValue[]): string | undefined { +function displayValue(value?: GetItemValue | GetItemValue[]): string | undefined { if (props.multiple && Array.isArray(value)) { const values = value.map(v => displayValue(v)).filter(Boolean) return values?.length ? values.join(', ') : undefined @@ -274,11 +276,14 @@ function isSelectItem(item: SelectItem): item is SelectItemBase {