From 7d20744f88e753b0536436c87579ac34f6a792d0 Mon Sep 17 00:00:00 2001 From: Jukka Raimovaara Date: Tue, 3 Jun 2025 15:32:44 +0300 Subject: [PATCH 1/2] fix(BTabs): correct id/index on ssr --- .../src/components/BTabs/BTab.vue | 11 ++-- .../src/components/BTabs/BTabs.vue | 53 +++++++++++++++---- packages/bootstrap-vue-next/src/utils/keys.ts | 2 +- 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/packages/bootstrap-vue-next/src/components/BTabs/BTab.vue b/packages/bootstrap-vue-next/src/components/BTabs/BTab.vue index 1df481035..22f723cc2 100644 --- a/packages/bootstrap-vue-next/src/components/BTabs/BTab.vue +++ b/packages/bootstrap-vue-next/src/components/BTabs/BTab.vue @@ -52,9 +52,11 @@ const activeModel = defineModel>('active }) const parentData = inject(tabsInjectionKey, null) -const computedId = useId(() => props.id, 'tabpane') + +const localId = ref(props.id) +const internalId = useId('', 'tabpane') +const computedId = computed(() => props.id ?? localId.value ?? internalId.value) const computedButtonId = useId(() => props.buttonId, 'tab') -const internalId = useId('', 'tab-internal') const lazyRenderCompleted = ref(false) const el = useTemplateRef('_el') @@ -68,7 +70,7 @@ const processedAttrs = computed(() => { function updateTab() { if (!parentData) return - parentData.registerTab( + const newId = parentData.registerTab( computed( () => ({ @@ -87,6 +89,9 @@ function updateTab() { }) as TabType ) ) + if (newId !== localId.value) { + localId.value = newId + } } if (parentData) { diff --git a/packages/bootstrap-vue-next/src/components/BTabs/BTabs.vue b/packages/bootstrap-vue-next/src/components/BTabs/BTabs.vue index a23b5bc50..7b5caec64 100644 --- a/packages/bootstrap-vue-next/src/components/BTabs/BTabs.vue +++ b/packages/bootstrap-vue-next/src/components/BTabs/BTabs.vue @@ -42,6 +42,7 @@ role="tab" :aria-controls="tab.id" :aria-selected="tab.active" + :disabled="tab.disabled" :tabindex="props.noKeyNav ? undefined : tab.active ? undefined : -1" v-bind="tab.titleLinkAttrs" @keydown.left.exact="!props.vertical && keynav($event, -1)" @@ -72,9 +73,21 @@