Skip to content

Commit 0854504

Browse files
committed
feat(VTabs): slots for prev/next (#21976)
resolves #21969
1 parent 8d7afb4 commit 0854504

File tree

3 files changed

+24
-14
lines changed

3 files changed

+24
-14
lines changed

packages/docs/src/data/new-in.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,10 @@
259259
"VTabs": {
260260
"props": {
261261
"spaced": "3.10.0"
262+
},
263+
"slots": {
264+
"next": "3.11.0",
265+
"prev": "3.11.0"
262266
}
263267
},
264268
"VTextField": {

packages/vuetify/src/components/VSlideGroup/VSlideGroup.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ interface SlideGroupSlot {
4242
isSelected: GroupProvide['isSelected']
4343
}
4444

45-
type VSlideGroupSlots = {
45+
export type VSlideGroupSlots = {
4646
default: SlideGroupSlot
4747
prev: SlideGroupSlot
4848
next: SlideGroupSlot

packages/vuetify/src/components/VTabs/VTabs.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ export type VTabsSlots<T> = {
3535
tab: VTabsSlot<T>
3636
item: VTabsSlot<T>
3737
window: never
38+
prev: never
39+
next: never
3840
} & {
3941
[key: `tab.${string}`]: VTabsSlot<T>
4042
[key: `item.${string}`]: VTabsSlot<T>
@@ -144,19 +146,23 @@ export const VTabs = genericComponent<new <T = TabItem>(
144146
{ ...scopeId }
145147
{ ...attrs }
146148
>
147-
{ slots.default?.() ?? items.value.map(item => (
148-
slots.tab?.({ item }) ?? (
149-
<VTab
150-
{ ...item }
151-
key={ item.text }
152-
value={ item.value }
153-
spaced={ props.spaced }
154-
v-slots={{
155-
default: slots[`tab.${item.value}`] ? () => slots[`tab.${item.value}`]?.({ item }) : undefined,
156-
}}
157-
/>
158-
)
159-
))}
149+
{{
150+
default: slots.default ?? (() => items.value.map(item => (
151+
slots.tab?.({ item }) ?? (
152+
<VTab
153+
{ ...item }
154+
key={ item.text }
155+
value={ item.value }
156+
spaced={ props.spaced }
157+
v-slots={{
158+
default: slots[`tab.${item.value}`] ? () => slots[`tab.${item.value}`]?.({ item }) : undefined,
159+
}}
160+
/>
161+
)
162+
))),
163+
prev: slots.prev,
164+
next: slots.next,
165+
}}
160166
</VSlideGroup>
161167

162168
{ hasWindow && (

0 commit comments

Comments
 (0)