Skip to content

Commit cd9f97c

Browse files
committed
fix(Modal): button side-effects when used within a button group
1 parent f0297e0 commit cd9f97c

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

src/runtime/components/Modal.vue

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ extendDevtoolsMeta({ example: 'ModalExample' })
7373
</script>
7474

7575
<script setup lang="ts">
76-
import { computed, toRef } from 'vue'
76+
import { computed, toRef, provide } from 'vue'
7777
import { DialogRoot, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, useForwardPropsEmits } from 'reka-ui'
7878
import { reactivePick } from '@vueuse/core'
7979
import { useAppConfig } from '#imports'
@@ -112,6 +112,9 @@ const ui = computed(() => modal({
112112
transition: props.transition,
113113
fullscreen: props.fullscreen
114114
}))
115+
116+
// Blocks ButtonGroup injections to avoid side-effects if the modal is within a button group.
117+
provide(buttonGroupInjectionKey, undefined)
115118
</script>
116119

117120
<template>

src/runtime/composables/useButtonGroup.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ import type { GetObjectField } from '../types/utils'
66
export const buttonGroupInjectionKey: InjectionKey<ComputedRef<{
77
size: ButtonGroupProps['size']
88
orientation: ButtonGroupProps['orientation']
9-
}>> = Symbol('nuxt-ui.button-group')
9+
}> | undefined> = Symbol('nuxt-ui.button-group')
1010

1111
type Props<T> = {
1212
size?: GetObjectField<T, 'size'>
1313
}
1414

1515
export function useButtonGroup<T>(props: Props<T>) {
1616
const buttonGroup = inject(buttonGroupInjectionKey, undefined)
17+
1718
return {
1819
orientation: computed(() => buttonGroup?.value.orientation),
1920
size: computed(() => props?.size ?? buttonGroup?.value.size)

0 commit comments

Comments
 (0)