diff --git a/packages/core/src/ColorSwatchPicker/ColorSwatchPickerItem.vue b/packages/core/src/ColorSwatchPicker/ColorSwatchPickerItem.vue index 0537da4b8b..3d184c096c 100644 --- a/packages/core/src/ColorSwatchPicker/ColorSwatchPickerItem.vue +++ b/packages/core/src/ColorSwatchPicker/ColorSwatchPickerItem.vue @@ -50,11 +50,12 @@ provideColorSwatchPickerItemContext({ diff --git a/packages/core/src/Combobox/ComboboxItem.vue b/packages/core/src/Combobox/ComboboxItem.vue index 888f12e1d5..e03273b270 100644 --- a/packages/core/src/Combobox/ComboboxItem.vue +++ b/packages/core/src/Combobox/ComboboxItem.vue @@ -26,6 +26,13 @@ import { ListboxItem } from '@/Listbox' const props = defineProps>() const emits = defineEmits>() +defineSlots<{ + default?: (props: { + /** Whether the item is currently selected */ + selected: boolean + }) => any +}>() + const id = useId(undefined, 'reka-combobox-item') const rootContext = injectComboboxRootContext() const groupContext = injectComboboxGroupContext(null) @@ -80,6 +87,7 @@ onUnmounted(() => { v-bind="props" :id="id" ref="primitiveElement" + v-slot="slotProps" :disabled="rootContext.disabled.value || disabled" @select="(event) => { emits('select', event as any) @@ -93,6 +101,8 @@ onUnmounted(() => { } }" > - {{ value }} + + {{ value }} + diff --git a/packages/core/src/ContextMenu/ContextMenuCheckboxItem.vue b/packages/core/src/ContextMenu/ContextMenuCheckboxItem.vue index e12254ff6e..f5d821dda0 100644 --- a/packages/core/src/ContextMenu/ContextMenuCheckboxItem.vue +++ b/packages/core/src/ContextMenu/ContextMenuCheckboxItem.vue @@ -21,7 +21,10 @@ useForwardExpose() diff --git a/packages/core/src/ContextMenu/ContextMenuRadioItem.vue b/packages/core/src/ContextMenu/ContextMenuRadioItem.vue index 0cdbcc2c04..f7bf31cd43 100644 --- a/packages/core/src/ContextMenu/ContextMenuRadioItem.vue +++ b/packages/core/src/ContextMenu/ContextMenuRadioItem.vue @@ -21,7 +21,10 @@ useForwardExpose() diff --git a/packages/core/src/DropdownMenu/DropdownMenuCheckboxItem.vue b/packages/core/src/DropdownMenu/DropdownMenuCheckboxItem.vue index ef7b4e49b4..031710c974 100644 --- a/packages/core/src/DropdownMenu/DropdownMenuCheckboxItem.vue +++ b/packages/core/src/DropdownMenu/DropdownMenuCheckboxItem.vue @@ -21,7 +21,10 @@ useForwardExpose() diff --git a/packages/core/src/DropdownMenu/DropdownMenuRadioItem.vue b/packages/core/src/DropdownMenu/DropdownMenuRadioItem.vue index dba6b7e508..11000f7047 100644 --- a/packages/core/src/DropdownMenu/DropdownMenuRadioItem.vue +++ b/packages/core/src/DropdownMenu/DropdownMenuRadioItem.vue @@ -21,7 +21,10 @@ useForwardExpose() diff --git a/packages/core/src/Listbox/ListboxItem.vue b/packages/core/src/Listbox/ListboxItem.vue index a2326dfe75..255ee2c179 100644 --- a/packages/core/src/Listbox/ListboxItem.vue +++ b/packages/core/src/Listbox/ListboxItem.vue @@ -39,6 +39,13 @@ const props = withDefaults(defineProps>(), { }) const emits = defineEmits>() +defineSlots<{ + default?: (props: { + /** Whether the item is currently selected */ + selected: boolean + }) => any +}>() + const id = useId(undefined, 'reka-listbox-item') const { CollectionItem } = useCollection() const { forwardRef, currentElement } = useForwardExpose() @@ -96,7 +103,7 @@ provideListboxItemContext({ rootContext.changeHighlight(currentElement, false) }" > - + diff --git a/packages/core/src/Listbox/ListboxItemIndicator.vue b/packages/core/src/Listbox/ListboxItemIndicator.vue index d834d784d1..4b8660ce6d 100644 --- a/packages/core/src/Listbox/ListboxItemIndicator.vue +++ b/packages/core/src/Listbox/ListboxItemIndicator.vue @@ -2,10 +2,17 @@ import type { PrimitiveProps } from '@/Primitive' import { useForwardExpose } from '@/shared' -export interface ListboxItemIndicatorProps extends PrimitiveProps {} +export interface ListboxItemIndicatorProps extends PrimitiveProps { + /** + * Used to force mounting when more control is needed. Useful when + * controlling animation with Vue animation libraries. + */ + forceMount?: boolean +} diff --git a/packages/core/src/Menu/MenuRadioItem.vue b/packages/core/src/Menu/MenuRadioItem.vue index 3310ac392f..b1334f4cb8 100644 --- a/packages/core/src/Menu/MenuRadioItem.vue +++ b/packages/core/src/Menu/MenuRadioItem.vue @@ -25,6 +25,12 @@ import { getCheckedState } from './utils' const props = defineProps() const emits = defineEmits() +defineSlots<{ + default?: (props: { + /** Current checked state */ + checked: boolean + }) => any +}>() const delegatedProps = reactiveOmit(props, ['value']) const forwarded = useForwardProps(delegatedProps) @@ -50,6 +56,6 @@ provideMenuItemIndicatorContext({ modelValue }) } " > - + diff --git a/packages/core/src/Menubar/MenubarCheckboxItem.vue b/packages/core/src/Menubar/MenubarCheckboxItem.vue index 10ea06ba78..8702a779cf 100644 --- a/packages/core/src/Menubar/MenubarCheckboxItem.vue +++ b/packages/core/src/Menubar/MenubarCheckboxItem.vue @@ -21,7 +21,10 @@ useForwardExpose() diff --git a/packages/core/src/Menubar/MenubarRadioItem.vue b/packages/core/src/Menubar/MenubarRadioItem.vue index 41ae1474d6..52250d41e3 100644 --- a/packages/core/src/Menubar/MenubarRadioItem.vue +++ b/packages/core/src/Menubar/MenubarRadioItem.vue @@ -21,7 +21,10 @@ useForwardExpose() diff --git a/packages/core/src/Select/SelectItem.vue b/packages/core/src/Select/SelectItem.vue index dcf1cfcd98..7d4376c61f 100644 --- a/packages/core/src/Select/SelectItem.vue +++ b/packages/core/src/Select/SelectItem.vue @@ -169,7 +169,7 @@ provideSelectItemContext({ @focus="isFocused = true" @blur="isFocused = false" @pointerup="handleSelectCustomEvent" - @pointerdown="(event) => { + @pointerdown="(event: PointerEvent) => { (event.currentTarget as HTMLElement).focus({ preventScroll: true }) }" @touchend.prevent.stop @@ -177,7 +177,7 @@ provideSelectItemContext({ @pointerleave="handlePointerLeave" @keydown="handleKeyDown" > - + diff --git a/packages/core/src/Select/SelectItemIndicator.vue b/packages/core/src/Select/SelectItemIndicator.vue index 18f3ca5364..eec6d445c0 100644 --- a/packages/core/src/Select/SelectItemIndicator.vue +++ b/packages/core/src/Select/SelectItemIndicator.vue @@ -1,10 +1,18 @@