reka-ui 2.6.0 → 2.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Accordion/AccordionItem.cjs +3 -2
- package/dist/Accordion/AccordionItem.cjs.map +1 -1
- package/dist/Accordion/AccordionItem.js +3 -2
- package/dist/Accordion/AccordionItem.js.map +1 -1
- package/dist/Calendar/useCalendar.cjs.map +1 -1
- package/dist/Calendar/useCalendar.js.map +1 -1
- package/dist/Combobox/ComboboxCancel.cjs +1 -1
- package/dist/Combobox/ComboboxCancel.cjs.map +1 -1
- package/dist/Combobox/ComboboxCancel.js +1 -1
- package/dist/Combobox/ComboboxCancel.js.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.cjs +3 -1
- package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.js +3 -1
- package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
- package/dist/Combobox/ComboboxInput.cjs +2 -2
- package/dist/Combobox/ComboboxInput.cjs.map +1 -1
- package/dist/Combobox/ComboboxInput.js +2 -2
- package/dist/Combobox/ComboboxInput.js.map +1 -1
- package/dist/Combobox/ComboboxRoot.cjs +7 -5
- package/dist/Combobox/ComboboxRoot.cjs.map +1 -1
- package/dist/Combobox/ComboboxRoot.js +7 -5
- package/dist/Combobox/ComboboxRoot.js.map +1 -1
- package/dist/Combobox/ComboboxVirtualizer.cjs +1 -1
- package/dist/Combobox/ComboboxVirtualizer.js +1 -1
- package/dist/DateField/DateFieldRoot.cjs +6 -1
- package/dist/DateField/DateFieldRoot.cjs.map +1 -1
- package/dist/DateField/DateFieldRoot.js +6 -1
- package/dist/DateField/DateFieldRoot.js.map +1 -1
- package/dist/DatePicker/DatePickerRoot.cjs +0 -8
- package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
- package/dist/DatePicker/DatePickerRoot.js +0 -8
- package/dist/DatePicker/DatePickerRoot.js.map +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.cjs +2 -1
- package/dist/DateRangeField/DateRangeFieldRoot.cjs.map +1 -1
- package/dist/DateRangeField/DateRangeFieldRoot.js +2 -1
- package/dist/DateRangeField/DateRangeFieldRoot.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.cjs +0 -8
- package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerRoot.js +0 -8
- package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
- package/dist/DismissableLayer/DismissableLayer.cjs +4 -3
- package/dist/DismissableLayer/DismissableLayer.cjs.map +1 -1
- package/dist/DismissableLayer/DismissableLayer.js +4 -3
- package/dist/DismissableLayer/DismissableLayer.js.map +1 -1
- package/dist/Editable/EditableRoot.cjs +1 -1
- package/dist/Editable/EditableRoot.js +1 -1
- package/dist/Listbox/ListboxVirtualizer.cjs +3 -2
- package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
- package/dist/Listbox/ListboxVirtualizer.js +3 -2
- package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.cjs.map +1 -1
- package/dist/NavigationMenu/NavigationMenuContentImpl.js.map +1 -1
- package/dist/PinInput/PinInputInput.cjs +3 -0
- package/dist/PinInput/PinInputInput.cjs.map +1 -1
- package/dist/PinInput/PinInputInput.js +3 -0
- package/dist/PinInput/PinInputInput.js.map +1 -1
- package/dist/PinInput/PinInputRoot.cjs +1 -1
- package/dist/PinInput/PinInputRoot.js +1 -1
- package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +3 -3
- package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarCellTrigger.js +3 -3
- package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.cjs +10 -8
- package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
- package/dist/RangeCalendar/RangeCalendarRoot.js +10 -8
- package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.cjs +1 -1
- package/dist/RangeCalendar/useRangeCalendar.cjs.map +1 -1
- package/dist/RangeCalendar/useRangeCalendar.js +1 -1
- package/dist/RangeCalendar/useRangeCalendar.js.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarImpl.cjs +3 -2
- package/dist/ScrollArea/ScrollAreaScrollbarImpl.cjs.map +1 -1
- package/dist/ScrollArea/ScrollAreaScrollbarImpl.js +3 -2
- package/dist/ScrollArea/ScrollAreaScrollbarImpl.js.map +1 -1
- package/dist/Select/SelectArrow.cjs +1 -3
- package/dist/Select/SelectArrow.cjs.map +1 -1
- package/dist/Select/SelectArrow.js +1 -3
- package/dist/Select/SelectArrow.js.map +1 -1
- package/dist/Select/SelectContent.cjs +4 -0
- package/dist/Select/SelectContent.cjs.map +1 -1
- package/dist/Select/SelectContent.js +4 -0
- package/dist/Select/SelectContent.js.map +1 -1
- package/dist/Select/SelectContentImpl.cjs +7 -2
- package/dist/Select/SelectContentImpl.cjs.map +1 -1
- package/dist/Select/SelectContentImpl.js +7 -2
- package/dist/Select/SelectContentImpl.js.map +1 -1
- package/dist/Select/SelectItem.cjs.map +1 -1
- package/dist/Select/SelectItem.js.map +1 -1
- package/dist/Splitter/SplitterGroup.cjs.map +1 -1
- package/dist/Splitter/SplitterGroup.js.map +1 -1
- package/dist/Tabs/TabsIndicator.cjs +18 -12
- package/dist/Tabs/TabsIndicator.cjs.map +1 -1
- package/dist/Tabs/TabsIndicator.js +19 -13
- package/dist/Tabs/TabsIndicator.js.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.cjs +2 -13
- package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
- package/dist/Tooltip/TooltipContentImpl.js +3 -14
- package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
- package/dist/Tree/TreeRoot.cjs +1 -1
- package/dist/Tree/TreeRoot.cjs.map +1 -1
- package/dist/Tree/TreeRoot.js +1 -1
- package/dist/Tree/TreeRoot.js.map +1 -1
- package/dist/Tree/TreeVirtualizer.cjs +3 -2
- package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
- package/dist/Tree/TreeVirtualizer.js +3 -2
- package/dist/Tree/TreeVirtualizer.js.map +1 -1
- package/dist/date/useDateField.cjs +5 -6
- package/dist/date/useDateField.cjs.map +1 -1
- package/dist/date/useDateField.js +5 -6
- package/dist/date/useDateField.js.map +1 -1
- package/dist/index.d.cts +824 -819
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +813 -808
- package/dist/index.d.ts.map +1 -1
- package/dist/shared/useFormControl.cjs +1 -1
- package/dist/shared/useFormControl.cjs.map +1 -1
- package/dist/shared/useFormControl.js +3 -3
- package/dist/shared/useFormControl.js.map +1 -1
- package/dist/shared/useForwardExpose.cjs +10 -1
- package/dist/shared/useForwardExpose.cjs.map +1 -1
- package/dist/shared/useForwardExpose.js +10 -1
- package/dist/shared/useForwardExpose.js.map +1 -1
- package/dist/shared/useGraceArea.cjs +3 -0
- package/dist/shared/useGraceArea.cjs.map +1 -1
- package/dist/shared/useGraceArea.js +4 -1
- package/dist/shared/useGraceArea.js.map +1 -1
- package/package.json +3 -3
- package/src/Accordion/AccordionItem.vue +7 -2
- package/src/Calendar/useCalendar.ts +3 -3
- package/src/Combobox/ComboboxCancel.vue +4 -3
- package/src/Combobox/ComboboxContentImpl.vue +3 -2
- package/src/Combobox/ComboboxInput.vue +3 -3
- package/src/Combobox/ComboboxRoot.vue +5 -6
- package/src/DateField/DateFieldRoot.vue +3 -0
- package/src/DatePicker/DatePickerRoot.vue +1 -1
- package/src/DateRangeField/DateRangeFieldRoot.vue +1 -0
- package/src/DateRangePicker/DateRangePickerRoot.vue +1 -1
- package/src/DismissableLayer/DismissableLayer.vue +5 -4
- package/src/Editable/EditableRoot.vue +1 -1
- package/src/Listbox/ListboxVirtualizer.vue +5 -2
- package/src/NavigationMenu/NavigationMenuContentImpl.vue +1 -1
- package/src/NumberField/NumberFieldRoot.vue +1 -1
- package/src/PinInput/PinInputInput.vue +6 -0
- package/src/PinInput/PinInputRoot.vue +3 -3
- package/src/Presence/usePresence.ts +1 -1
- package/src/Primitive/Primitive.ts +19 -19
- package/src/RangeCalendar/RangeCalendarCellTrigger.vue +8 -2
- package/src/RangeCalendar/RangeCalendarRoot.vue +10 -27
- package/src/RangeCalendar/useRangeCalendar.ts +1 -1
- package/src/ScrollArea/ScrollAreaScrollbarImpl.vue +4 -2
- package/src/ScrollArea/ScrollAreaScrollbarVisible.vue +1 -1
- package/src/Select/SelectArrow.vue +1 -3
- package/src/Select/SelectContentImpl.vue +6 -5
- package/src/Select/SelectItem.vue +1 -1
- package/src/Splitter/SplitterGroup.vue +7 -7
- package/src/Splitter/SplitterPanel.vue +1 -1
- package/src/Splitter/utils/registry.ts +1 -1
- package/src/Tabs/TabsIndicator.vue +18 -12
- package/src/Tooltip/TooltipContentImpl.vue +3 -20
- package/src/Tooltip/TooltipTrigger.vue +4 -4
- package/src/Tree/TreeRoot.vue +1 -1
- package/src/Tree/TreeVirtualizer.vue +5 -2
- package/src/index.ts +1 -0
- package/src/shared/date/useDateField.ts +12 -7
- package/src/shared/index.ts +1 -1
- package/src/shared/useFormControl.ts +2 -2
- package/src/shared/useForwardExpose.ts +17 -1
- package/src/shared/useGraceArea.ts +8 -2
- package/src/shared/useId.ts +1 -1
- package/src/shared/useStateMachine.ts +1 -1
- package/src/shared/withDefault.ts +1 -1
|
@@ -109,11 +109,13 @@ function handleSizeChange() {
|
|
|
109
109
|
viewport: rootContext.viewport.value?.offsetHeight ?? 0,
|
|
110
110
|
scrollbar: {
|
|
111
111
|
size: scrollbar.value?.clientHeight ?? 0,
|
|
112
|
-
paddingStart: toInt(getComputedStyle(scrollbar.value!).
|
|
113
|
-
paddingEnd: toInt(getComputedStyle(scrollbar.value!).
|
|
112
|
+
paddingStart: toInt(getComputedStyle(scrollbar.value!).paddingTop),
|
|
113
|
+
paddingEnd: toInt(getComputedStyle(scrollbar.value!).paddingBottom),
|
|
114
114
|
},
|
|
115
115
|
})
|
|
116
116
|
}
|
|
117
|
+
|
|
118
|
+
scrollbarVisibleContext.onThumbPositionChange()
|
|
117
119
|
}
|
|
118
120
|
|
|
119
121
|
useResizeObserver(scrollbar, handleSizeChange)
|
|
@@ -9,7 +9,7 @@ export interface ScrollAreaScrollbarVisibleContext {
|
|
|
9
9
|
handleWheelScroll: (event: WheelEvent, payload: number) => void
|
|
10
10
|
handleThumbDown: (
|
|
11
11
|
event: MouseEvent,
|
|
12
|
-
payload: { x: number, y: number }
|
|
12
|
+
payload: { x: number, y: number },
|
|
13
13
|
) => void
|
|
14
14
|
handleThumbUp: (event: MouseEvent) => void
|
|
15
15
|
handleSizeChange: (payload: Sizes) => void
|
|
@@ -7,20 +7,18 @@ export interface SelectArrowProps extends PopperArrowProps {}
|
|
|
7
7
|
<script setup lang="ts">
|
|
8
8
|
import { PopperArrow } from '@/Popper'
|
|
9
9
|
import { injectSelectContentContext, SelectContentDefaultContextValue } from './SelectContentImpl.vue'
|
|
10
|
-
import { injectSelectRootContext } from './SelectRoot.vue'
|
|
11
10
|
|
|
12
11
|
const props = withDefaults(defineProps<SelectArrowProps>(), {
|
|
13
12
|
width: 10,
|
|
14
13
|
height: 5,
|
|
15
14
|
as: 'svg',
|
|
16
15
|
})
|
|
17
|
-
const rootContext = injectSelectRootContext()
|
|
18
16
|
const contentContext = injectSelectContentContext(SelectContentDefaultContextValue)
|
|
19
17
|
</script>
|
|
20
18
|
|
|
21
19
|
<template>
|
|
22
20
|
<PopperArrow
|
|
23
|
-
v-if="
|
|
21
|
+
v-if="contentContext.position === 'popper'"
|
|
24
22
|
v-bind="props"
|
|
25
23
|
>
|
|
26
24
|
<slot />
|
|
@@ -3,7 +3,7 @@ import type {
|
|
|
3
3
|
ComponentPublicInstance,
|
|
4
4
|
Ref,
|
|
5
5
|
} from 'vue'
|
|
6
|
-
import type { PointerDownOutsideEvent } from '@/DismissableLayer'
|
|
6
|
+
import type { DismissableLayerProps, PointerDownOutsideEvent } from '@/DismissableLayer'
|
|
7
7
|
import type { PopperContentProps } from '@/Popper'
|
|
8
8
|
import type { AcceptableValue } from '@/shared/types'
|
|
9
9
|
import { useCollection } from '@/Collection'
|
|
@@ -24,14 +24,14 @@ export interface SelectContentContext {
|
|
|
24
24
|
itemRefCallback: (
|
|
25
25
|
node: HTMLElement | undefined,
|
|
26
26
|
value: AcceptableValue,
|
|
27
|
-
disabled: boolean
|
|
27
|
+
disabled: boolean,
|
|
28
28
|
) => void
|
|
29
29
|
selectedItem?: Ref<HTMLElement | undefined>
|
|
30
30
|
onItemLeave?: () => void
|
|
31
31
|
itemTextRefCallback: (
|
|
32
32
|
node: HTMLElement | undefined,
|
|
33
33
|
value: AcceptableValue,
|
|
34
|
-
disabled: boolean
|
|
34
|
+
disabled: boolean,
|
|
35
35
|
) => void
|
|
36
36
|
focusSelectedItem?: () => void
|
|
37
37
|
selectedItemText?: Ref<HTMLElement | undefined>
|
|
@@ -60,7 +60,7 @@ export type SelectContentImplEmits = {
|
|
|
60
60
|
pointerDownOutside: [event: PointerDownOutsideEvent]
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export interface SelectContentImplProps extends PopperContentProps {
|
|
63
|
+
export interface SelectContentImplProps extends PopperContentProps, DismissableLayerProps {
|
|
64
64
|
/**
|
|
65
65
|
* The positioning mode to use
|
|
66
66
|
*
|
|
@@ -99,6 +99,7 @@ const props = withDefaults(defineProps<SelectContentImplProps>(), {
|
|
|
99
99
|
align: 'start',
|
|
100
100
|
position: 'item-aligned',
|
|
101
101
|
bodyLock: true,
|
|
102
|
+
disableOutsidePointerEvents: true,
|
|
102
103
|
})
|
|
103
104
|
const emits = defineEmits<SelectContentImplEmits>()
|
|
104
105
|
|
|
@@ -285,7 +286,7 @@ provideSelectContentContext({
|
|
|
285
286
|
>
|
|
286
287
|
<DismissableLayer
|
|
287
288
|
as-child
|
|
288
|
-
disable-outside-pointer-events
|
|
289
|
+
:disable-outside-pointer-events="disableOutsidePointerEvents"
|
|
289
290
|
@focus-outside.prevent
|
|
290
291
|
@dismiss="rootContext.onOpenChange(false)"
|
|
291
292
|
@escape-key-down="emits('escapeKeyDown', $event)"
|
|
@@ -14,7 +14,7 @@ interface SelectItemContext<T = AcceptableValue> {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export const [injectSelectItemContext, provideSelectItemContext]
|
|
17
|
-
|
|
17
|
+
= createContext<SelectItemContext>('SelectItem')
|
|
18
18
|
|
|
19
19
|
export type SelectEvent<T> = CustomEvent<{ originalEvent: PointerEvent | KeyboardEvent, value?: T }>
|
|
20
20
|
|
|
@@ -532,8 +532,8 @@ function collapsePanel(panelData: PanelData) {
|
|
|
532
532
|
panelSizeBeforeCollapseRef.value.set(panelData.id, panelSize)
|
|
533
533
|
|
|
534
534
|
const isLastPanel
|
|
535
|
-
|
|
536
|
-
|
|
535
|
+
= findPanelDataIndex(panelDataArray, panelData)
|
|
536
|
+
=== panelDataArray.length - 1
|
|
537
537
|
const delta = isLastPanel
|
|
538
538
|
? panelSize - collapsedSize
|
|
539
539
|
: collapsedSize - panelSize
|
|
@@ -585,13 +585,13 @@ function expandPanel(panelData: PanelData) {
|
|
|
585
585
|
)
|
|
586
586
|
|
|
587
587
|
const baseSize
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
588
|
+
= prevPanelSize != null && prevPanelSize >= minSize
|
|
589
|
+
? prevPanelSize
|
|
590
|
+
: minSize
|
|
591
591
|
|
|
592
592
|
const isLastPanel
|
|
593
|
-
|
|
594
|
-
|
|
593
|
+
= findPanelDataIndex(panelDataArray, panelData)
|
|
594
|
+
=== panelDataArray.length - 1
|
|
595
595
|
const delta = isLastPanel ? panelSize - baseSize : baseSize - panelSize
|
|
596
596
|
|
|
597
597
|
const nextLayout = adjustLayoutByDelta({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { PrimitiveProps } from '@/Primitive'
|
|
3
|
-
import {
|
|
3
|
+
import { computed, ref, watch, watchPostEffect } from 'vue'
|
|
4
4
|
import { useForwardExpose } from '@/shared'
|
|
5
5
|
import { injectTabsRootContext } from './TabsRoot.vue'
|
|
6
6
|
|
|
@@ -13,41 +13,47 @@ import { Primitive } from '@/Primitive'
|
|
|
13
13
|
|
|
14
14
|
const props = defineProps<TabsIndicatorProps>()
|
|
15
15
|
const context = injectTabsRootContext()
|
|
16
|
+
defineExpose({
|
|
17
|
+
updateIndicatorStyle,
|
|
18
|
+
})
|
|
16
19
|
useForwardExpose()
|
|
17
20
|
|
|
18
21
|
interface IndicatorStyle {
|
|
19
22
|
size: number | null
|
|
20
23
|
position: number | null
|
|
21
24
|
}
|
|
22
|
-
const activeTab = ref<HTMLElement | null>()
|
|
23
25
|
const indicatorStyle = ref<IndicatorStyle>({
|
|
24
26
|
size: null,
|
|
25
27
|
position: null,
|
|
26
28
|
})
|
|
29
|
+
const tabs = ref<Array<HTMLElement>>([])
|
|
27
30
|
|
|
28
|
-
watch(() => [context.modelValue.value, context?.dir.value],
|
|
29
|
-
await nextTick()
|
|
31
|
+
watch(() => [context.modelValue.value, context?.dir.value], () => {
|
|
30
32
|
updateIndicatorStyle()
|
|
31
|
-
}, { immediate: true })
|
|
33
|
+
}, { immediate: true, flush: 'post' })
|
|
34
|
+
|
|
35
|
+
watchPostEffect(() => {
|
|
36
|
+
tabs.value = Array.from(context.tabsList.value?.querySelectorAll<HTMLElement>('[role="tab"]') || [])
|
|
37
|
+
})
|
|
32
38
|
|
|
33
|
-
useResizeObserver([context.tabsList,
|
|
39
|
+
useResizeObserver(computed(() => [context.tabsList.value, ...tabs.value]), updateIndicatorStyle)
|
|
34
40
|
|
|
35
41
|
function updateIndicatorStyle() {
|
|
36
|
-
activeTab
|
|
42
|
+
const activeTab = context.tabsList.value?.querySelector<HTMLButtonElement>('[role="tab"][data-state="active"]')
|
|
37
43
|
|
|
38
|
-
if (!activeTab
|
|
44
|
+
if (!activeTab)
|
|
39
45
|
return
|
|
40
46
|
|
|
41
47
|
if (context.orientation.value === 'horizontal') {
|
|
42
48
|
indicatorStyle.value = {
|
|
43
|
-
size: activeTab.
|
|
44
|
-
position: activeTab.
|
|
49
|
+
size: activeTab.offsetWidth,
|
|
50
|
+
position: activeTab.offsetLeft,
|
|
45
51
|
}
|
|
46
52
|
}
|
|
47
53
|
else {
|
|
48
54
|
indicatorStyle.value = {
|
|
49
|
-
size: activeTab.
|
|
50
|
-
position: activeTab.
|
|
55
|
+
size: activeTab.offsetHeight,
|
|
56
|
+
position: activeTab.offsetTop,
|
|
51
57
|
}
|
|
52
58
|
}
|
|
53
59
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import type { VNode } from 'vue'
|
|
3
2
|
import type { PopperContentProps } from '@/Popper'
|
|
4
3
|
import type { PrimitiveProps } from '@/Primitive'
|
|
5
4
|
import { useForwardExpose } from '@/shared'
|
|
@@ -42,7 +41,7 @@ export interface TooltipContentImplProps
|
|
|
42
41
|
|
|
43
42
|
<script setup lang="ts">
|
|
44
43
|
import { useEventListener } from '@vueuse/core'
|
|
45
|
-
import {
|
|
44
|
+
import { computed, onMounted } from 'vue'
|
|
46
45
|
import { DismissableLayer } from '@/DismissableLayer'
|
|
47
46
|
import { PopperContent } from '@/Popper'
|
|
48
47
|
import { VisuallyHidden } from '@/VisuallyHidden'
|
|
@@ -64,24 +63,8 @@ const emits = defineEmits<TooltipContentImplEmits>()
|
|
|
64
63
|
|
|
65
64
|
const rootContext = injectTooltipRootContext()
|
|
66
65
|
|
|
67
|
-
const { forwardRef } = useForwardExpose()
|
|
68
|
-
const
|
|
69
|
-
const defaultSlot = computed(() => slot.default?.({}))
|
|
70
|
-
const ariaLabel = computed(() => {
|
|
71
|
-
if (props.ariaLabel)
|
|
72
|
-
return props.ariaLabel
|
|
73
|
-
let content = ''
|
|
74
|
-
|
|
75
|
-
function recursiveTextSearch(node: VNode) {
|
|
76
|
-
if (typeof node.children === 'string' && node.type !== Comment)
|
|
77
|
-
content += node.children
|
|
78
|
-
else if (Array.isArray(node.children))
|
|
79
|
-
node.children.forEach(child => recursiveTextSearch(child as VNode))
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
defaultSlot.value?.forEach((node: VNode) => recursiveTextSearch(node))
|
|
83
|
-
return content
|
|
84
|
-
})
|
|
66
|
+
const { forwardRef, currentElement } = useForwardExpose()
|
|
67
|
+
const ariaLabel = computed(() => props.ariaLabel || currentElement.value?.textContent)
|
|
85
68
|
|
|
86
69
|
const popperContentProps = computed(() => {
|
|
87
70
|
const { ariaLabel: _, ...restProps } = props
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { useForwardExpose, useId } from '@/shared'
|
|
3
3
|
|
|
4
|
-
export type TooltipTriggerDataState
|
|
5
|
-
| 'closed'
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
export type TooltipTriggerDataState
|
|
5
|
+
= | 'closed'
|
|
6
|
+
| 'delayed-open'
|
|
7
|
+
| 'instant-open'
|
|
8
8
|
|
|
9
9
|
export interface TooltipTriggerProps extends PopperAnchorProps {}
|
|
10
10
|
</script>
|
package/src/Tree/TreeRoot.vue
CHANGED
|
@@ -254,7 +254,7 @@ provideTreeRootContext({
|
|
|
254
254
|
if (expanded.value.includes(key))
|
|
255
255
|
expanded.value = expanded.value.filter(val => val !== key)
|
|
256
256
|
else
|
|
257
|
-
expanded.value.
|
|
257
|
+
expanded.value = [...expanded.value, key]
|
|
258
258
|
},
|
|
259
259
|
getKey: props.getKey,
|
|
260
260
|
getChildren: props.getChildren,
|
|
@@ -3,7 +3,7 @@ export interface TreeVirtualizerProps {
|
|
|
3
3
|
/** Number of items rendered outside the visible area */
|
|
4
4
|
overscan?: number
|
|
5
5
|
/** Estimated size (in px) of each item */
|
|
6
|
-
estimateSize?: number
|
|
6
|
+
estimateSize?: number | ((index: number) => number)
|
|
7
7
|
/** Text content for each item to achieve type-ahead feature */
|
|
8
8
|
textContent?: (item: Record<string, any>) => string
|
|
9
9
|
}
|
|
@@ -79,7 +79,10 @@ const virtualizer = useVirtualizer(
|
|
|
79
79
|
getItemKey(index) {
|
|
80
80
|
return index + rootContext.getKey(rootContext.expandedItems.value[index].value)
|
|
81
81
|
},
|
|
82
|
-
estimateSize() {
|
|
82
|
+
estimateSize(index) {
|
|
83
|
+
if (typeof props.estimateSize === 'function')
|
|
84
|
+
return props.estimateSize(index)
|
|
85
|
+
|
|
83
86
|
return props.estimateSize ?? 28
|
|
84
87
|
},
|
|
85
88
|
getScrollElement() { return parentEl.value },
|
package/src/index.ts
CHANGED
|
@@ -46,7 +46,15 @@ function commonSegmentAttrs(props: SegmentAttrProps) {
|
|
|
46
46
|
function daySegmentAttrs(props: SegmentAttrProps) {
|
|
47
47
|
const { segmentValues, placeholder } = props
|
|
48
48
|
const isEmpty = segmentValues.day === null
|
|
49
|
-
|
|
49
|
+
|
|
50
|
+
// Include month from segmentValues to ensure correct max days calculation
|
|
51
|
+
const dateFields: { day?: number, month?: number } = {}
|
|
52
|
+
if (segmentValues.day)
|
|
53
|
+
dateFields.day = segmentValues.day
|
|
54
|
+
if (segmentValues.month)
|
|
55
|
+
dateFields.month = segmentValues.month
|
|
56
|
+
|
|
57
|
+
const date = Object.keys(dateFields).length > 0 ? placeholder.set(dateFields) : placeholder
|
|
50
58
|
|
|
51
59
|
const valueNow = date.day
|
|
52
60
|
const valueMin = 1
|
|
@@ -864,12 +872,9 @@ export function useDateField(props: UseDateFieldProps) {
|
|
|
864
872
|
if (Object.values(props.segmentValues.value).every(item => item !== null)) {
|
|
865
873
|
const updateObject = { ...props.segmentValues.value as Record<AnyExceptLiteral, number> }
|
|
866
874
|
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
const value = updateObject[part as AnyExceptLiteral]
|
|
871
|
-
dateRef = dateRef.set({ [part]: value })
|
|
872
|
-
})
|
|
875
|
+
// Set all date fields at once to avoid order-dependent constraints
|
|
876
|
+
// (e.g., setting day: 31 before month: 3 would incorrectly constrain the day)
|
|
877
|
+
const dateRef = props.placeholder.value.set(updateObject)
|
|
873
878
|
|
|
874
879
|
props.modelValue.value = dateRef.copy()
|
|
875
880
|
}
|
package/src/shared/index.ts
CHANGED
|
@@ -2,7 +2,7 @@ export * from './arrays'
|
|
|
2
2
|
export * from './browser'
|
|
3
3
|
export * from './clamp'
|
|
4
4
|
export { createContext } from './createContext'
|
|
5
|
-
export { type DateRange, type DateStep, type DateValue } from './date'
|
|
5
|
+
export { type DateRange, type DateStep, type DateValue, type SegmentPart } from './date'
|
|
6
6
|
export { getActiveElement } from './getActiveElement'
|
|
7
7
|
export { handleAndDispatchCustomEvent } from './handleAndDispatchCustomEvent'
|
|
8
8
|
export { isValidVNodeElement } from './isValidVNodeElement'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { MaybeElementRef } from '@vueuse/core'
|
|
2
|
-
import {
|
|
3
|
-
import { computed } from 'vue'
|
|
2
|
+
import { unrefElement } from '@vueuse/core'
|
|
3
|
+
import { computed, toValue } from 'vue'
|
|
4
4
|
|
|
5
5
|
export function useFormControl(el: MaybeElementRef) {
|
|
6
6
|
// We set this to true by default so that events bubble to forms without JS (SSR)
|
|
@@ -59,7 +59,23 @@ export function useForwardExpose<T extends ComponentPublicInstance>() {
|
|
|
59
59
|
get: () => (ref instanceof Element ? ref : ref.$el),
|
|
60
60
|
})
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
// ref not is Element
|
|
63
|
+
// and `useForwardExpose.test.ts > useForwardRef > should forward plain DOM element ref - 2` Passing in `$el`
|
|
64
|
+
if (!(ref instanceof Element) && !Object.hasOwn(ref, '$el')) {
|
|
65
|
+
// Retrieves the `exposed` data that has not been unwrapped by `vue` from `$.exposed`.
|
|
66
|
+
const childExposed = ref.$.exposed
|
|
67
|
+
const merged = Object.assign({}, ret)
|
|
68
|
+
|
|
69
|
+
for (const key in childExposed) {
|
|
70
|
+
Object.defineProperty(merged, key, {
|
|
71
|
+
enumerable: true,
|
|
72
|
+
configurable: true,
|
|
73
|
+
get: () => childExposed[key],
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
instance.exposed = merged
|
|
78
|
+
}
|
|
63
79
|
}
|
|
64
80
|
|
|
65
81
|
return { forwardRef, currentRef, currentElement }
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type { Ref } from 'vue'
|
|
2
2
|
import type { Side } from '@/Popper/utils'
|
|
3
|
-
import { createEventHook, refAutoReset } from '@vueuse/shared'
|
|
3
|
+
import { createEventHook, refAutoReset, tryOnScopeDispose } from '@vueuse/shared'
|
|
4
4
|
import { ref, watchEffect } from 'vue'
|
|
5
5
|
|
|
6
6
|
export function useGraceArea(triggerElement: Ref<HTMLElement | undefined>, containerElement: Ref<HTMLElement | undefined>) {
|
|
7
7
|
// Reset the inTransit state if idle/scrolled.
|
|
8
8
|
const isPointerInTransit = refAutoReset(false, 300)
|
|
9
|
+
// `refAutoReset` will clear timeout-based resets on scope dispose (e.g., component unmount),
|
|
10
|
+
// thus leaving the state as-is without resetting it.
|
|
11
|
+
// So we need to manually reset it in such cases.
|
|
12
|
+
tryOnScopeDispose(() => {
|
|
13
|
+
isPointerInTransit.value = false
|
|
14
|
+
})
|
|
9
15
|
|
|
10
16
|
const pointerGraceArea = ref<Polygon | null>(null)
|
|
11
17
|
const pointerExit = createEventHook<void>()
|
|
@@ -74,7 +80,7 @@ export function useGraceArea(triggerElement: Ref<HTMLElement | undefined>, conta
|
|
|
74
80
|
}
|
|
75
81
|
|
|
76
82
|
interface Point { x: number, y: number }
|
|
77
|
-
|
|
83
|
+
type Polygon = Point[]
|
|
78
84
|
|
|
79
85
|
function getExitSideFromRect(point: Point, rect: DOMRect): Side {
|
|
80
86
|
const top = Math.abs(rect.top - point.y)
|
package/src/shared/useId.ts
CHANGED
|
@@ -21,7 +21,7 @@ export function useId(deterministicId?: string | null | undefined, prefix = 'rek
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const configProviderContext = injectConfigProviderContext({ useId: undefined })
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
if (configProviderContext.useId) {
|
|
26
26
|
return `${prefix}-${configProviderContext.useId()}`
|
|
27
27
|
}
|
|
@@ -9,7 +9,7 @@ type MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>
|
|
|
9
9
|
|
|
10
10
|
// 🤯 https://fettblog.eu/typescript-union-to-intersection/
|
|
11
11
|
type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (
|
|
12
|
-
x: infer R
|
|
12
|
+
x: infer R,
|
|
13
13
|
) => any
|
|
14
14
|
? R
|
|
15
15
|
: never
|
|
@@ -41,7 +41,7 @@ export function withDefault<
|
|
|
41
41
|
P extends ComponentProps<C> = ComponentProps<C>,
|
|
42
42
|
>(
|
|
43
43
|
originalComponent: T,
|
|
44
|
-
options?: MountingOptions<P
|
|
44
|
+
options?: MountingOptions<P>,
|
|
45
45
|
): T
|
|
46
46
|
|
|
47
47
|
export function withDefault<T extends ComponentOptionsBase<{}, {}, {}, any, any, any, any, any>>(WrappedComponent: T, options?: MountingOptions<any>) {
|