reka-ui 2.9.5 → 2.9.7

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 (76) hide show
  1. package/dist/Listbox/ListboxRoot.cjs +2 -0
  2. package/dist/Listbox/ListboxRoot.cjs.map +1 -1
  3. package/dist/Listbox/ListboxRoot.js +2 -0
  4. package/dist/Listbox/ListboxRoot.js.map +1 -1
  5. package/dist/Menu/MenuContentImpl.cjs +2 -1
  6. package/dist/Menu/MenuContentImpl.cjs.map +1 -1
  7. package/dist/Menu/MenuContentImpl.js +2 -1
  8. package/dist/Menu/MenuContentImpl.js.map +1 -1
  9. package/dist/Menu/MenuItemImpl.cjs +3 -1
  10. package/dist/Menu/MenuItemImpl.cjs.map +1 -1
  11. package/dist/Menu/MenuItemImpl.js +3 -1
  12. package/dist/Menu/MenuItemImpl.js.map +1 -1
  13. package/dist/MonthPicker/MonthPickerRoot.cjs +10 -6
  14. package/dist/MonthPicker/MonthPickerRoot.cjs.map +1 -1
  15. package/dist/MonthPicker/MonthPickerRoot.js +10 -6
  16. package/dist/MonthPicker/MonthPickerRoot.js.map +1 -1
  17. package/dist/MonthPicker/useMonthPicker.cjs +16 -4
  18. package/dist/MonthPicker/useMonthPicker.cjs.map +1 -1
  19. package/dist/MonthPicker/useMonthPicker.js +16 -4
  20. package/dist/MonthPicker/useMonthPicker.js.map +1 -1
  21. package/dist/Tabs/TabsIndicator.cjs +2 -1
  22. package/dist/Tabs/TabsIndicator.cjs.map +1 -1
  23. package/dist/Tabs/TabsIndicator.js +3 -2
  24. package/dist/Tabs/TabsIndicator.js.map +1 -1
  25. package/dist/Toast/ToastAnnounce.cjs +13 -4
  26. package/dist/Toast/ToastAnnounce.cjs.map +1 -1
  27. package/dist/Toast/ToastAnnounce.js +15 -6
  28. package/dist/Toast/ToastAnnounce.js.map +1 -1
  29. package/dist/Toast/ToastRootImpl.cjs +3 -1
  30. package/dist/Toast/ToastRootImpl.cjs.map +1 -1
  31. package/dist/Toast/ToastRootImpl.js +4 -2
  32. package/dist/Toast/ToastRootImpl.js.map +1 -1
  33. package/dist/YearPicker/YearPickerRoot.cjs +13 -6
  34. package/dist/YearPicker/YearPickerRoot.cjs.map +1 -1
  35. package/dist/YearPicker/YearPickerRoot.js +13 -6
  36. package/dist/YearPicker/YearPickerRoot.js.map +1 -1
  37. package/dist/YearPicker/useYearPicker.cjs +8 -8
  38. package/dist/YearPicker/useYearPicker.cjs.map +1 -1
  39. package/dist/YearPicker/useYearPicker.js +8 -8
  40. package/dist/YearPicker/useYearPicker.js.map +1 -1
  41. package/dist/date/useDateField.cjs +1 -1
  42. package/dist/date/useDateField.cjs.map +1 -1
  43. package/dist/date/useDateField.js +1 -1
  44. package/dist/date/useDateField.js.map +1 -1
  45. package/dist/index.d.cts +2 -2
  46. package/dist/index.d.ts +2 -2
  47. package/dist/index2.d.cts.map +1 -1
  48. package/dist/index2.d.ts.map +1 -1
  49. package/dist/index3.d.cts +15 -15
  50. package/dist/index3.d.cts.map +1 -1
  51. package/dist/index3.d.ts +4 -4
  52. package/dist/index4.d.cts +644 -644
  53. package/dist/index4.d.cts.map +1 -1
  54. package/dist/index4.d.ts +641 -641
  55. package/dist/index4.d.ts.map +1 -1
  56. package/dist/internal.d.cts +2 -2
  57. package/dist/internal.d.cts.map +1 -1
  58. package/dist/internal.d.ts +2 -2
  59. package/dist/internal.d.ts.map +1 -1
  60. package/dist/shared.d.cts +2 -2
  61. package/dist/shared.d.ts +2 -2
  62. package/package.json +4 -4
  63. package/src/Listbox/ListboxRoot.vue +7 -0
  64. package/src/Menu/MenuContentImpl.vue +3 -2
  65. package/src/Menu/MenuItemImpl.vue +9 -1
  66. package/src/MonthPicker/MonthPickerRoot.vue +12 -6
  67. package/src/MonthPicker/useMonthPicker.ts +4 -4
  68. package/src/Tabs/TabsIndicator.vue +4 -2
  69. package/src/Toast/ToastAnnounce.vue +17 -6
  70. package/src/Toast/ToastRootImpl.vue +14 -1
  71. package/src/YearPicker/YearPickerRoot.vue +12 -6
  72. package/src/YearPicker/useYearPicker.ts +4 -4
  73. package/src/index.ts +7 -0
  74. package/src/shared/date/index.ts +1 -0
  75. package/src/shared/date/useDateField.ts +3 -1
  76. package/src/shared/index.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  import "./index2.cjs";
2
2
  import "./index3.cjs";
3
3
  import { MenuArrowProps, MenuCheckboxItemEmits, MenuCheckboxItemProps, MenuContentEmits, MenuContentProps, MenuEmits, MenuGroupProps, MenuItemEmits, MenuItemIndicatorProps, MenuItemProps, MenuLabelProps, MenuPortalProps, MenuProps, MenuRadioGroupEmits, MenuRadioGroupProps, MenuRadioItemEmits, MenuRadioItemProps, MenuSeparatorProps, MenuSubContentEmits, MenuSubContentProps, MenuSubEmits, MenuSubProps, MenuSubTriggerProps, PopperAnchorProps, _default$277 as _default$13, _default$278 as _default$8, _default$279 as _default, _default$280 as _default$6, _default$281 as _default$10, _default$282 as _default$3, _default$283 as _default$14, _default$284 as _default$12, _default$285 as _default$2, _default$286 as _default$1, _default$287 as _default$11, _default$288 as _default$7, _default$290 as _default$9, _default$291 as _default$4, _default$292 as _default$5, injectMenuContext, injectMenuRootContext } from "./index4.cjs";
4
- import * as vue13 from "vue";
4
+ import * as vue785 from "vue";
5
5
 
6
6
  //#region src/Menu/MenuAnchor.vue.d.ts
7
7
  interface MenuAnchorProps extends PopperAnchorProps {}
@@ -9,7 +9,7 @@ declare var __VLS_8: {};
9
9
  type __VLS_Slots = {} & {
10
10
  default?: (props: typeof __VLS_8) => any;
11
11
  };
12
- declare const __VLS_base: vue13.DefineComponent<MenuAnchorProps, {}, {}, {}, {}, vue13.ComponentOptionsMixin, vue13.ComponentOptionsMixin, {}, string, vue13.PublicProps, Readonly<MenuAnchorProps> & Readonly<{}>, {}, {}, {}, {}, string, vue13.ComponentProvideOptions, false, {}, any>;
12
+ declare const __VLS_base: vue785.DefineComponent<MenuAnchorProps, {}, {}, {}, {}, vue785.ComponentOptionsMixin, vue785.ComponentOptionsMixin, {}, string, vue785.PublicProps, Readonly<MenuAnchorProps> & Readonly<{}>, {}, {}, {}, {}, string, vue785.ComponentProvideOptions, false, {}, any>;
13
13
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
14
14
  declare const _default$15: typeof __VLS_export;
15
15
  type __VLS_WithSlots<T, S> = T & {
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.cts","names":[],"sources":["../src/Menu/MenuAnchor.vue"],"sourcesContent":[],"mappings":";;;;;;UAoBU,eAAA,SAAwB;YAsC9B;KACC,WAAA;2BACwB;AA3CoB,CAAA;AAGE,cA2C7C,UALgB,EAKN,KAAA,CAAA,eALM,CAKN,eALM,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAKN,KAAA,CAAA,qBAAA,EAAA,KAAA,CAAA,qBAAA,EALM,CAAA,CAAA,EAAA,MAAA,EAKN,KAAA,CAAA,WAAA,EAAA,QALM,CAKN,eALM,CAAA,GAKN,QALM,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAKN,KAAA,CAAA,uBAAA,EALM,KAAA,EAAA,CAAA,CAAA,EAAA,GAAA,CAAA;AAAA,cAQhB,YAPU,EAOW,eANS,CAAA,OAMc,UANd,EAM0B,WAN1B,CAAA;AAAA,cAMM,WADxC,EAAA,OAE0B,YAF1B;KAGG,eALW,CAAA,CAAA,EAAA,CAAA,CAAA,GAKa,CALb,GAAA;EAAA,MAAA,EAAA;IAAA,MAAA,EAON,CAPM;EAAA,CAAA;CAAA"}
1
+ {"version":3,"file":"internal.d.cts","names":[],"sources":["../src/Menu/MenuAnchor.vue"],"sourcesContent":[],"mappings":";;;;;;UAoBU,eAAA,SAAwB;YAsC9B;KACC,WAAA;2BACwB;AA3CoB,CAAA;AAGE,cA2C7C,UALgB,EAKN,MAAA,CAAA,eALM,CAKN,eALM,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAKN,MAAA,CAAA,qBAAA,EAAA,MAAA,CAAA,qBAAA,EALM,CAAA,CAAA,EAAA,MAAA,EAKN,MAAA,CAAA,WAAA,EAAA,QALM,CAKN,eALM,CAAA,GAKN,QALM,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAKN,MAAA,CAAA,uBAAA,EALM,KAAA,EAAA,CAAA,CAAA,EAAA,GAAA,CAAA;AAAA,cAQhB,YAPU,EAOW,eANS,CAAA,OAMc,UANd,EAM0B,WAN1B,CAAA;AAAA,cAMM,WADxC,EAAA,OAE0B,YAF1B;KAGG,eALW,CAAA,CAAA,EAAA,CAAA,CAAA,GAKa,CALb,GAAA;EAAA,MAAA,EAAA;IAAA,MAAA,EAON,CAPM;EAAA,CAAA;CAAA"}
@@ -1,7 +1,7 @@
1
1
  import "./index2.js";
2
2
  import "./index3.js";
3
3
  import { MenuArrowProps, MenuCheckboxItemEmits, MenuCheckboxItemProps, MenuContentEmits, MenuContentProps, MenuEmits, MenuGroupProps, MenuItemEmits, MenuItemIndicatorProps, MenuItemProps, MenuLabelProps, MenuPortalProps, MenuProps, MenuRadioGroupEmits, MenuRadioGroupProps, MenuRadioItemEmits, MenuRadioItemProps, MenuSeparatorProps, MenuSubContentEmits, MenuSubContentProps, MenuSubEmits, MenuSubProps, MenuSubTriggerProps, PopperAnchorProps, _default$277 as _default$13, _default$278 as _default$8, _default$279 as _default, _default$280 as _default$6, _default$281 as _default$10, _default$282 as _default$3, _default$283 as _default$14, _default$284 as _default$12, _default$285 as _default$2, _default$286 as _default$1, _default$287 as _default$11, _default$288 as _default$7, _default$290 as _default$9, _default$291 as _default$4, _default$292 as _default$5, injectMenuContext, injectMenuRootContext } from "./index4.js";
4
- import * as vue18 from "vue";
4
+ import * as vue1111 from "vue";
5
5
 
6
6
  //#region src/Menu/MenuAnchor.vue.d.ts
7
7
  interface MenuAnchorProps extends PopperAnchorProps {}
@@ -9,7 +9,7 @@ declare var __VLS_8: {};
9
9
  type __VLS_Slots = {} & {
10
10
  default?: (props: typeof __VLS_8) => any;
11
11
  };
12
- declare const __VLS_base: vue18.DefineComponent<MenuAnchorProps, {}, {}, {}, {}, vue18.ComponentOptionsMixin, vue18.ComponentOptionsMixin, {}, string, vue18.PublicProps, Readonly<MenuAnchorProps> & Readonly<{}>, {}, {}, {}, {}, string, vue18.ComponentProvideOptions, false, {}, any>;
12
+ declare const __VLS_base: vue1111.DefineComponent<MenuAnchorProps, {}, {}, {}, {}, vue1111.ComponentOptionsMixin, vue1111.ComponentOptionsMixin, {}, string, vue1111.PublicProps, Readonly<MenuAnchorProps> & Readonly<{}>, {}, {}, {}, {}, string, vue1111.ComponentProvideOptions, false, {}, any>;
13
13
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
14
14
  declare const _default$15: typeof __VLS_export;
15
15
  type __VLS_WithSlots<T, S> = T & {
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","names":[],"sources":["../src/Menu/MenuAnchor.vue"],"sourcesContent":[],"mappings":";;;;;;UAoBU,eAAA,SAAwB;YAsC9B;KACC,WAAA;2BACwB;AA3CoB,CAAA;AAGE,cA2C7C,UALgB,EAKN,KAAA,CAAA,eALM,CAKN,eALM,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAKN,KAAA,CAAA,qBAAA,EAAA,KAAA,CAAA,qBAAA,EALM,CAAA,CAAA,EAAA,MAAA,EAKN,KAAA,CAAA,WAAA,EAAA,QALM,CAKN,eALM,CAAA,GAKN,QALM,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAKN,KAAA,CAAA,uBAAA,EALM,KAAA,EAAA,CAAA,CAAA,EAAA,GAAA,CAAA;AAAA,cAQhB,YAPU,EAOW,eANS,CAAA,OAMc,UANd,EAM0B,WAN1B,CAAA;AAAA,cAMM,WADxC,EAAA,OAE0B,YAF1B;KAGG,eALW,CAAA,CAAA,EAAA,CAAA,CAAA,GAKa,CALb,GAAA;EAAA,MAAA,EAAA;IAAA,MAAA,EAON,CAPM;EAAA,CAAA;CAAA"}
1
+ {"version":3,"file":"internal.d.ts","names":[],"sources":["../src/Menu/MenuAnchor.vue"],"sourcesContent":[],"mappings":";;;;;;UAoBU,eAAA,SAAwB;YAsC9B;KACC,WAAA;2BACwB;AA3CoB,CAAA;AAGE,cA2C7C,UALgB,EAKN,OAAA,CAAA,eALM,CAKN,eALM,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAKN,OAAA,CAAA,qBAAA,EAAA,OAAA,CAAA,qBAAA,EALM,CAAA,CAAA,EAAA,MAAA,EAKN,OAAA,CAAA,WAAA,EAAA,QALM,CAKN,eALM,CAAA,GAKN,QALM,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,MAAA,EAKN,OAAA,CAAA,uBAAA,EALM,KAAA,EAAA,CAAA,CAAA,EAAA,GAAA,CAAA;AAAA,cAQhB,YAPU,EAOW,eANS,CAAA,OAMc,UANd,EAM0B,WAN1B,CAAA;AAAA,cAMM,WADxC,EAAA,OAE0B,YAF1B;KAGG,eALW,CAAA,CAAA,EAAA,CAAA,CAAA,GAKa,CALb,GAAA;EAAA,MAAA,EAAA;IAAA,MAAA,EAON,CAPM;EAAA,CAAA;CAAA"}
package/dist/shared.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault } from "./index3.cjs";
2
- export { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault };
1
+ import { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeRange, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault } from "./index3.cjs";
2
+ export { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeRange, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault };
package/dist/shared.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault } from "./index3.js";
2
- export { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault };
1
+ import { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeRange, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault } from "./index3.js";
2
+ export { DateRange, DateStep, DateValue, Formatter, SegmentPart, TimeRange, TimeValue, areEqual, chunk, clamp, createContext, findValuesBetween, getActiveElement, handleAndDispatchCustomEvent, isBrowser, isNullish, isValidVNodeElement, isValueEqualOrExist, omit, onFocusOutside, pick, renderSlotFragments, roundToStepPrecision, snapValueToStep, trapFocus, useArrowNavigation, useBodyScrollLock, useDateFormatter, useDirection, useEmitAsProps, useFilter, useFocusGuards, useFormControl, useForwardExpose, useForwardProps, useForwardPropsEmits, useForwardRef, useGraceArea, useHideOthers, useId, useKbd, useLocale, useSelectionBehavior, useSize, useStateMachine, useTestKbd, useTypeahead, withDefault };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "reka-ui",
3
3
  "type": "module",
4
- "version": "2.9.5",
4
+ "version": "2.9.7",
5
5
  "description": "Vue port for Radix UI Primitives.",
6
6
  "author": "UnoVue Contributors (https://github.com/unovue)",
7
7
  "license": "MIT",
@@ -111,14 +111,14 @@
111
111
  "@tsconfig/node24": "^24.0.0",
112
112
  "@types/jsdom": "^28.0.0",
113
113
  "@types/node": "^24.0.13",
114
- "@vitejs/plugin-vue": "^6.0.5",
114
+ "@vitejs/plugin-vue": "^6.0.6",
115
115
  "@vitest/coverage-istanbul": "^3.2.4",
116
- "@vue/test-utils": "^2.4.6",
116
+ "@vue/test-utils": "^2.4.10",
117
117
  "@vue/tsconfig": "^0.7.0",
118
118
  "jsdom": "^26.1.0",
119
119
  "size-limit": "^12.0.1",
120
120
  "tsdown": "^0.12.9",
121
- "vite": "^8.0.5",
121
+ "vite": "^8.0.10",
122
122
  "vitest": "^3.2.4",
123
123
  "vitest-axe": "0.1.0",
124
124
  "vitest-canvas-mock": "^0.3.3",
@@ -79,6 +79,7 @@ export type ListboxRootEmits<T = AcceptableValue> = {
79
79
  import type { EventHook } from '@vueuse/core'
80
80
  import type { Ref } from 'vue'
81
81
  import { createEventHook, useVModel } from '@vueuse/core'
82
+ import { isClient } from '@vueuse/shared'
82
83
  import { nextTick, ref, toRefs, watch } from 'vue'
83
84
  import { useCollection } from '@/Collection'
84
85
  import { VisuallyHiddenInput } from '@/VisuallyHidden'
@@ -324,6 +325,12 @@ function handleMultipleReplace(event: KeyboardEvent, targetEl: HTMLElement) {
324
325
  }
325
326
 
326
327
  async function highlightSelected(event?: Event) {
328
+ // highlightSelected is called inside a watch with immediate set to true.
329
+ // This results in code execution during SSR.
330
+ // Ensure this code only runs in a browser environment, since it performs
331
+ // DOM-only side effects (focus, scrollIntoView, synthetic KeyboardEvent).
332
+ if (!isClient)
333
+ return
327
334
  await nextTick()
328
335
  if (isVirtual.value) {
329
336
  // Trigger on nextTick for Virtualizer to be mounted
@@ -24,7 +24,7 @@ import { useBodyScrollLock } from '@/shared/useBodyScrollLock'
24
24
 
25
25
  export interface MenuContentContext {
26
26
  onItemEnter: (event: PointerEvent) => boolean
27
- onItemLeave: (event: PointerEvent) => void
27
+ onItemLeave: (event: PointerEvent) => boolean
28
28
  onTriggerLeave: (event: PointerEvent) => boolean
29
29
  searchRef: Ref<string>
30
30
  highlightedElement: Ref<HTMLElement | undefined>
@@ -303,13 +303,14 @@ provideMenuContentContext({
303
303
  },
304
304
  onItemLeave: (event) => {
305
305
  if (isPointerMovingToSubmenu(event))
306
- return
306
+ return true
307
307
 
308
308
  const isInputFocused = ['INPUT', 'TEXTAREA'].includes(getActiveElement()?.tagName || '')
309
309
  if (!isInputFocused)
310
310
  contentElement.value?.focus()
311
311
 
312
312
  currentItemId.value = null
313
+ return false
313
314
  },
314
315
  onTriggerLeave: (event) => {
315
316
  // event.preventDefault() we can't prevent pointerLeave event
@@ -60,7 +60,15 @@ async function handlePointerLeave(event: PointerEvent) {
60
60
  if (!isMouseEvent(event))
61
61
  return
62
62
 
63
- contentContext.onItemLeave(event)
63
+ // If the highlight was already claimed by another element (e.g. the pointer moved
64
+ // directly onto another item, whose synchronous `pointermove` ran before this
65
+ // `nextTick` resolved), this leave is stale and must not reset focus/roving state.
66
+ if (contentContext.highlightedElement.value !== currentElement.value)
67
+ return
68
+
69
+ const isMovingToSubmenu = contentContext.onItemLeave(event)
70
+ if (!isMovingToSubmenu && contentContext.highlightedElement.value === currentElement.value)
71
+ contentContext.highlightedElement.value = undefined
64
72
  }
65
73
  </script>
66
74
 
@@ -205,23 +205,29 @@ watch(modelValue, (_modelValue) => {
205
205
  }
206
206
  })
207
207
 
208
+ function resolveMonthValue(value: DateValue, reference?: DateValue) {
209
+ if (!reference)
210
+ return value.copy()
211
+ return value.copy().set({ day: reference.day })
212
+ }
213
+
208
214
  function onMonthChange(value: DateValue) {
209
215
  if (!multiple.value) {
210
216
  if (!modelValue.value) {
211
- modelValue.value = value.copy()
217
+ modelValue.value = resolveMonthValue(value, placeholder.value)
212
218
  return
213
219
  }
214
220
 
215
221
  if (!preventDeselect.value && isSameYearMonth(modelValue.value as DateValue, value)) {
216
- placeholder.value = value.copy()
222
+ placeholder.value = resolveMonthValue(value, modelValue.value as DateValue)
217
223
  modelValue.value = undefined
218
224
  }
219
225
  else {
220
- modelValue.value = value.copy()
226
+ modelValue.value = resolveMonthValue(value, modelValue.value as DateValue)
221
227
  }
222
228
  }
223
229
  else if (!modelValue.value) {
224
- modelValue.value = [value.copy()]
230
+ modelValue.value = [resolveMonthValue(value, placeholder.value)]
225
231
  }
226
232
  else {
227
233
  const modelValueArray = Array.isArray(modelValue.value)
@@ -230,12 +236,12 @@ function onMonthChange(value: DateValue) {
230
236
 
231
237
  const index = modelValueArray.findIndex(date => isSameYearMonth(date, value))
232
238
  if (index === -1) {
233
- modelValue.value = [...modelValueArray, value.copy()]
239
+ modelValue.value = [...modelValueArray, resolveMonthValue(value, placeholder.value)]
234
240
  }
235
241
  else if (!preventDeselect.value) {
236
242
  const next = modelValueArray.filter(date => !isSameYearMonth(date, value))
237
243
  if (!next.length) {
238
- placeholder.value = value.copy()
244
+ placeholder.value = resolveMonthValue(value, modelValueArray[index])
239
245
  modelValue.value = undefined
240
246
  return
241
247
  }
@@ -134,13 +134,13 @@ export function useMonthPicker(props: UseMonthPickerProps) {
134
134
  if (nextPageFunc || props.nextPage.value) {
135
135
  const newDate = (nextPageFunc || props.nextPage.value)!(currentDate)
136
136
  grid.value = createMonthGrid({ dateObj: newDate })
137
- props.placeholder.value = newDate.set({ day: 1 })
137
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
138
138
  return
139
139
  }
140
140
 
141
141
  const newDate = currentDate.add({ years: 1 })
142
142
  grid.value = createMonthGrid({ dateObj: newDate })
143
- props.placeholder.value = newDate.set({ day: 1 })
143
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
144
144
  }
145
145
 
146
146
  const prevPage = (prevPageFunc?: (date: DateValue) => DateValue) => {
@@ -149,13 +149,13 @@ export function useMonthPicker(props: UseMonthPickerProps) {
149
149
  if (prevPageFunc || props.prevPage.value) {
150
150
  const newDate = (prevPageFunc || props.prevPage.value)!(currentDate)
151
151
  grid.value = createMonthGrid({ dateObj: newDate })
152
- props.placeholder.value = newDate.set({ day: 1 })
152
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
153
153
  return
154
154
  }
155
155
 
156
156
  const newDate = currentDate.subtract({ years: 1 })
157
157
  grid.value = createMonthGrid({ dateObj: newDate })
158
- props.placeholder.value = newDate.set({ day: 1 })
158
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
159
159
  }
160
160
 
161
161
  watch(props.placeholder, (value) => {
@@ -8,7 +8,7 @@ export interface TabsIndicatorProps extends PrimitiveProps {}
8
8
  </script>
9
9
 
10
10
  <script setup lang="ts">
11
- import { useResizeObserver } from '@vueuse/core'
11
+ import { useMounted, useResizeObserver } from '@vueuse/core'
12
12
  import { Primitive } from '@/Primitive'
13
13
 
14
14
  const props = defineProps<TabsIndicatorProps>()
@@ -18,6 +18,8 @@ defineExpose({
18
18
  })
19
19
  useForwardExpose()
20
20
 
21
+ const isMounted = useMounted()
22
+
21
23
  interface IndicatorStyle {
22
24
  size: number | null
23
25
  position: number | null
@@ -61,7 +63,7 @@ function updateIndicatorStyle() {
61
63
 
62
64
  <template>
63
65
  <Primitive
64
- v-if="typeof indicatorStyle.size === 'number'"
66
+ v-if="isMounted && typeof indicatorStyle.size === 'number'"
65
67
  v-bind="props"
66
68
  :style="{
67
69
  '--reka-tabs-indicator-size': `${indicatorStyle.size}px`,
@@ -1,7 +1,6 @@
1
1
  <script setup lang="ts">
2
- import { useRafFn } from '@vueuse/core'
3
- import { useTimeout } from '@vueuse/shared'
4
- import { ref } from 'vue'
2
+ import { isClient, useTimeout } from '@vueuse/shared'
3
+ import { onScopeDispose, ref } from 'vue'
5
4
  import { VisuallyHidden } from '@/VisuallyHidden'
6
5
  import { injectToastProviderContext } from './ToastProvider.vue'
7
6
 
@@ -10,9 +9,21 @@ const providerContext = injectToastProviderContext()
10
9
  const isAnnounced = useTimeout(1000)
11
10
  const renderAnnounceText = ref(false)
12
11
 
13
- useRafFn(() => {
14
- renderAnnounceText.value = true
15
- })
12
+ // Render text content in the next frame to ensure toast is announced in NVDA.
13
+ // Double rAF mirrors Radix UI's `useNextFrame` behavior.
14
+ let raf1 = 0
15
+ let raf2 = 0
16
+ if (isClient) {
17
+ raf1 = requestAnimationFrame(() => {
18
+ raf2 = requestAnimationFrame(() => {
19
+ renderAnnounceText.value = true
20
+ })
21
+ })
22
+ onScopeDispose(() => {
23
+ cancelAnimationFrame(raf1)
24
+ cancelAnimationFrame(raf2)
25
+ })
26
+ }
16
27
  </script>
17
28
 
18
29
  <template>
@@ -183,7 +183,20 @@ provideToastRootContext({ onClose: handleClose })
183
183
  role="alert"
184
184
  :aria-live="type === 'foreground' ? 'assertive' : 'polite'"
185
185
  >
186
- {{ announceTextContent }}
186
+ <!--
187
+ Render each chunk as its own text node so screen readers get the
188
+ natural pause break between nodes (see comment in utils.ts).
189
+ Interpolating the array directly with `{{ announceTextContent }}`
190
+ would route through Vue's `toDisplayString`, which JSON-stringifies
191
+ arrays — the live region would then announce literal `[`, quotes
192
+ and commas instead of the toast title and description.
193
+ -->
194
+ <template
195
+ v-for="(text, i) in announceTextContent"
196
+ :key="i"
197
+ >
198
+ {{ text }}
199
+ </template>
187
200
  </ToastAnnounce>
188
201
 
189
202
  <Teleport
@@ -211,33 +211,39 @@ watch(modelValue, (_modelValue) => {
211
211
  }
212
212
  })
213
213
 
214
+ function resolveYearValue(value: DateValue, reference?: DateValue) {
215
+ if (!reference)
216
+ return value.copy()
217
+ return value.copy().set({ month: reference.month, day: reference.day })
218
+ }
219
+
214
220
  function onYearChange(value: DateValue) {
215
221
  if (!multiple.value) {
216
222
  if (!modelValue.value) {
217
- modelValue.value = value.copy()
223
+ modelValue.value = resolveYearValue(value, placeholder.value)
218
224
  return
219
225
  }
220
226
 
221
227
  if (!preventDeselect.value && isSameYear(modelValue.value as DateValue, value)) {
222
- placeholder.value = value.copy()
228
+ placeholder.value = resolveYearValue(value, modelValue.value as DateValue)
223
229
  modelValue.value = undefined
224
230
  }
225
231
  else {
226
- modelValue.value = value.copy()
232
+ modelValue.value = resolveYearValue(value, modelValue.value as DateValue)
227
233
  }
228
234
  }
229
235
  else if (!modelValue.value) {
230
- modelValue.value = [value.copy()]
236
+ modelValue.value = [resolveYearValue(value, placeholder.value)]
231
237
  }
232
238
  else if (Array.isArray(modelValue.value)) {
233
239
  const index = modelValue.value.findIndex(date => isSameYear(date, value))
234
240
  if (index === -1) {
235
- modelValue.value = [...modelValue.value, value.copy()]
241
+ modelValue.value = [...modelValue.value, resolveYearValue(value, placeholder.value)]
236
242
  }
237
243
  else if (!preventDeselect.value) {
238
244
  const next = modelValue.value.filter(date => !isSameYear(date, value))
239
245
  if (!next.length) {
240
- placeholder.value = value.copy()
246
+ placeholder.value = resolveYearValue(value, modelValue.value[index])
241
247
  modelValue.value = undefined
242
248
  return
243
249
  }
@@ -138,13 +138,13 @@ export function useYearPicker(props: UseYearPickerProps) {
138
138
  if (nextPageFunc || props.nextPage.value) {
139
139
  const newDate = (nextPageFunc || props.nextPage.value)!(firstYearInGrid)
140
140
  grid.value = createYearGrid({ dateObj: newDate, yearsPerPage: props.yearsPerPage.value, decadeAligned: false })
141
- props.placeholder.value = newDate.set({ month: 1, day: 1 })
141
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
142
142
  return
143
143
  }
144
144
 
145
145
  const newDate = firstYearInGrid.add({ years: props.yearsPerPage.value })
146
146
  grid.value = createYearGrid({ dateObj: newDate, yearsPerPage: props.yearsPerPage.value, decadeAligned: false })
147
- props.placeholder.value = newDate.set({ month: 1, day: 1 })
147
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
148
148
  }
149
149
 
150
150
  const prevPage = (prevPageFunc?: (date: DateValue) => DateValue) => {
@@ -153,13 +153,13 @@ export function useYearPicker(props: UseYearPickerProps) {
153
153
  if (prevPageFunc || props.prevPage.value) {
154
154
  const newDate = (prevPageFunc || props.prevPage.value)!(firstYearInGrid)
155
155
  grid.value = createYearGrid({ dateObj: newDate, yearsPerPage: props.yearsPerPage.value, decadeAligned: false })
156
- props.placeholder.value = newDate.set({ month: 1, day: 1 })
156
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
157
157
  return
158
158
  }
159
159
 
160
160
  const newDate = firstYearInGrid.subtract({ years: props.yearsPerPage.value })
161
161
  grid.value = createYearGrid({ dateObj: newDate, yearsPerPage: props.yearsPerPage.value, decadeAligned: false })
162
- props.placeholder.value = newDate.set({ month: 1, day: 1 })
162
+ props.placeholder.value = newDate.set({ month: props.placeholder.value.month, day: props.placeholder.value.day })
163
163
  }
164
164
 
165
165
  watch(props.placeholder, (value) => {
package/src/index.ts CHANGED
@@ -96,7 +96,14 @@ export {
96
96
  } from './shared/color'
97
97
  export {
98
98
  type AcceptableValue,
99
+ type DataOrientation,
100
+ type Direction,
101
+ type FormFieldProps,
99
102
  type GenericComponentInstance,
103
+ type ScrollBodyOption,
104
+ type SingleOrMultipleProps,
105
+ type SingleOrMultipleType,
106
+ type StringOrNumber,
100
107
  } from './shared/types'
101
108
  export * from './Slider'
102
109
  export * from './Splitter'
@@ -35,6 +35,7 @@ export type {
35
35
  SegmentContentObj,
36
36
  SegmentPart,
37
37
  SegmentValueObj,
38
+ TimeRange,
38
39
  TimeSegmentObj,
39
40
  TimeSegmentPart,
40
41
  } from './types'
@@ -755,7 +755,9 @@ export function useDateField(props: UseDateFieldProps) {
755
755
 
756
756
  let displayPrev = prevValue
757
757
  if (is12Hour && prevValue !== null) {
758
- displayPrev = prevValue === 0 ? 12 : (prevValue > 12 ? prevValue - 12 : prevValue)
758
+ // 12 AM/PM should be treated as 0 internally even if it doesn't match the display
759
+ // otherwise repeatedly typing 0 will not advance to the next segment
760
+ displayPrev = prevValue % 12 === 0 ? 0 : (prevValue > 12 ? prevValue - 12 : prevValue)
759
761
  }
760
762
 
761
763
  const { value, moveToNext } = updateHour(max, num, displayPrev)
@@ -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, type SegmentPart, type TimeValue } from './date'
5
+ export { type DateRange, type DateStep, type DateValue, type SegmentPart, type TimeRange, type TimeValue } from './date'
6
6
  export { getActiveElement } from './getActiveElement'
7
7
  export { handleAndDispatchCustomEvent } from './handleAndDispatchCustomEvent'
8
8
  export { isValidVNodeElement } from './isValidVNodeElement'