reka-ui 2.6.1 → 2.7.0

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.
Files changed (108) hide show
  1. package/dist/Calendar/useCalendar.cjs.map +1 -1
  2. package/dist/Calendar/useCalendar.js.map +1 -1
  3. package/dist/Combobox/ComboboxCancel.cjs +1 -1
  4. package/dist/Combobox/ComboboxCancel.cjs.map +1 -1
  5. package/dist/Combobox/ComboboxCancel.js +1 -1
  6. package/dist/Combobox/ComboboxCancel.js.map +1 -1
  7. package/dist/Combobox/ComboboxContentImpl.cjs +3 -1
  8. package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
  9. package/dist/Combobox/ComboboxContentImpl.js +3 -1
  10. package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
  11. package/dist/Combobox/ComboboxVirtualizer.cjs +1 -1
  12. package/dist/Combobox/ComboboxVirtualizer.js +1 -1
  13. package/dist/DatePicker/DatePickerRoot.cjs +0 -8
  14. package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
  15. package/dist/DatePicker/DatePickerRoot.js +0 -8
  16. package/dist/DatePicker/DatePickerRoot.js.map +1 -1
  17. package/dist/DateRangePicker/DateRangePickerRoot.cjs +0 -8
  18. package/dist/DateRangePicker/DateRangePickerRoot.cjs.map +1 -1
  19. package/dist/DateRangePicker/DateRangePickerRoot.js +0 -8
  20. package/dist/DateRangePicker/DateRangePickerRoot.js.map +1 -1
  21. package/dist/DismissableLayer/DismissableLayer.cjs +4 -3
  22. package/dist/DismissableLayer/DismissableLayer.cjs.map +1 -1
  23. package/dist/DismissableLayer/DismissableLayer.js +4 -3
  24. package/dist/DismissableLayer/DismissableLayer.js.map +1 -1
  25. package/dist/Listbox/ListboxVirtualizer.cjs +3 -2
  26. package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
  27. package/dist/Listbox/ListboxVirtualizer.js +3 -2
  28. package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
  29. package/dist/NavigationMenu/NavigationMenuContentImpl.cjs.map +1 -1
  30. package/dist/NavigationMenu/NavigationMenuContentImpl.js.map +1 -1
  31. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +2 -2
  32. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
  33. package/dist/RangeCalendar/RangeCalendarCellTrigger.js +2 -2
  34. package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
  35. package/dist/RangeCalendar/RangeCalendarRoot.cjs +10 -8
  36. package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
  37. package/dist/RangeCalendar/RangeCalendarRoot.js +10 -8
  38. package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
  39. package/dist/Select/SelectArrow.cjs +1 -3
  40. package/dist/Select/SelectArrow.cjs.map +1 -1
  41. package/dist/Select/SelectArrow.js +1 -3
  42. package/dist/Select/SelectArrow.js.map +1 -1
  43. package/dist/Select/SelectContent.cjs +4 -0
  44. package/dist/Select/SelectContent.cjs.map +1 -1
  45. package/dist/Select/SelectContent.js +4 -0
  46. package/dist/Select/SelectContent.js.map +1 -1
  47. package/dist/Select/SelectContentImpl.cjs +7 -2
  48. package/dist/Select/SelectContentImpl.cjs.map +1 -1
  49. package/dist/Select/SelectContentImpl.js +7 -2
  50. package/dist/Select/SelectContentImpl.js.map +1 -1
  51. package/dist/Select/SelectItem.cjs.map +1 -1
  52. package/dist/Select/SelectItem.js.map +1 -1
  53. package/dist/Splitter/SplitterGroup.cjs.map +1 -1
  54. package/dist/Splitter/SplitterGroup.js.map +1 -1
  55. package/dist/Tabs/TabsIndicator.cjs +18 -12
  56. package/dist/Tabs/TabsIndicator.cjs.map +1 -1
  57. package/dist/Tabs/TabsIndicator.js +19 -13
  58. package/dist/Tabs/TabsIndicator.js.map +1 -1
  59. package/dist/Tooltip/TooltipContentImpl.cjs +2 -13
  60. package/dist/Tooltip/TooltipContentImpl.cjs.map +1 -1
  61. package/dist/Tooltip/TooltipContentImpl.js +3 -14
  62. package/dist/Tooltip/TooltipContentImpl.js.map +1 -1
  63. package/dist/Tree/TreeVirtualizer.cjs +3 -2
  64. package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
  65. package/dist/Tree/TreeVirtualizer.js +3 -2
  66. package/dist/Tree/TreeVirtualizer.js.map +1 -1
  67. package/dist/index.d.cts +841 -839
  68. package/dist/index.d.cts.map +1 -1
  69. package/dist/index.d.ts +67 -65
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index2.d.cts.map +1 -1
  72. package/dist/shared/useForwardExpose.cjs +10 -1
  73. package/dist/shared/useForwardExpose.cjs.map +1 -1
  74. package/dist/shared/useForwardExpose.js +10 -1
  75. package/dist/shared/useForwardExpose.js.map +1 -1
  76. package/dist/shared/useGraceArea.cjs +3 -0
  77. package/dist/shared/useGraceArea.cjs.map +1 -1
  78. package/dist/shared/useGraceArea.js +4 -1
  79. package/dist/shared/useGraceArea.js.map +1 -1
  80. package/package.json +3 -3
  81. package/src/Calendar/useCalendar.ts +3 -3
  82. package/src/Combobox/ComboboxCancel.vue +4 -3
  83. package/src/Combobox/ComboboxContentImpl.vue +3 -2
  84. package/src/DatePicker/DatePickerRoot.vue +1 -1
  85. package/src/DateRangePicker/DateRangePickerRoot.vue +1 -1
  86. package/src/DismissableLayer/DismissableLayer.vue +5 -4
  87. package/src/Listbox/ListboxVirtualizer.vue +5 -2
  88. package/src/NavigationMenu/NavigationMenuContentImpl.vue +1 -1
  89. package/src/Presence/usePresence.ts +1 -1
  90. package/src/Primitive/Primitive.ts +19 -19
  91. package/src/RangeCalendar/RangeCalendarCellTrigger.vue +1 -1
  92. package/src/RangeCalendar/RangeCalendarRoot.vue +10 -27
  93. package/src/ScrollArea/ScrollAreaScrollbarVisible.vue +1 -1
  94. package/src/Select/SelectArrow.vue +1 -3
  95. package/src/Select/SelectContentImpl.vue +6 -5
  96. package/src/Select/SelectItem.vue +1 -1
  97. package/src/Splitter/SplitterGroup.vue +7 -7
  98. package/src/Splitter/SplitterPanel.vue +1 -1
  99. package/src/Splitter/utils/registry.ts +1 -1
  100. package/src/Tabs/TabsIndicator.vue +18 -12
  101. package/src/Tooltip/TooltipContentImpl.vue +3 -20
  102. package/src/Tooltip/TooltipTrigger.vue +4 -4
  103. package/src/Tree/TreeVirtualizer.vue +5 -2
  104. package/src/shared/useForwardExpose.ts +17 -1
  105. package/src/shared/useGraceArea.ts +8 -2
  106. package/src/shared/useId.ts +1 -1
  107. package/src/shared/useStateMachine.ts +1 -1
  108. package/src/shared/withDefault.ts +1 -1
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { PrimitiveProps } from '@/Primitive'
3
- import { nextTick, ref, watch } from 'vue'
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], async () => {
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, activeTab], updateIndicatorStyle)
39
+ useResizeObserver(computed(() => [context.tabsList.value, ...tabs.value]), updateIndicatorStyle)
34
40
 
35
41
  function updateIndicatorStyle() {
36
- activeTab.value = context.tabsList.value?.querySelector<HTMLButtonElement>('[role="tab"][data-state="active"]')
42
+ const activeTab = context.tabsList.value?.querySelector<HTMLButtonElement>('[role="tab"][data-state="active"]')
37
43
 
38
- if (!activeTab.value)
44
+ if (!activeTab)
39
45
  return
40
46
 
41
47
  if (context.orientation.value === 'horizontal') {
42
48
  indicatorStyle.value = {
43
- size: activeTab.value.offsetWidth,
44
- position: activeTab.value.offsetLeft,
49
+ size: activeTab.offsetWidth,
50
+ position: activeTab.offsetLeft,
45
51
  }
46
52
  }
47
53
  else {
48
54
  indicatorStyle.value = {
49
- size: activeTab.value.offsetHeight,
50
- position: activeTab.value.offsetTop,
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 { Comment, computed, onMounted, useSlots } from 'vue'
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 slot = useSlots()
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
- | 'delayed-open'
7
- | 'instant-open'
4
+ export type TooltipTriggerDataState
5
+ = | 'closed'
6
+ | 'delayed-open'
7
+ | 'instant-open'
8
8
 
9
9
  export interface TooltipTriggerProps extends PopperAnchorProps {}
10
10
  </script>
@@ -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 },
@@ -59,7 +59,23 @@ export function useForwardExpose<T extends ComponentPublicInstance>() {
59
59
  get: () => (ref instanceof Element ? ref : ref.$el),
60
60
  })
61
61
 
62
- instance.exposed = ret
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
- type Polygon = Point[]
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)
@@ -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>) {