reka-ui 2.1.0 → 2.1.1

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 (58) hide show
  1. package/dist/Calendar/CalendarCellTrigger.cjs +7 -5
  2. package/dist/Calendar/CalendarCellTrigger.cjs.map +1 -1
  3. package/dist/Calendar/CalendarCellTrigger.js +7 -5
  4. package/dist/Calendar/CalendarCellTrigger.js.map +1 -1
  5. package/dist/Combobox/ComboboxItem.cjs +0 -3
  6. package/dist/Combobox/ComboboxItem.cjs.map +1 -1
  7. package/dist/Combobox/ComboboxItem.js +1 -3
  8. package/dist/Combobox/ComboboxItem.js.map +1 -1
  9. package/dist/HoverCard/HoverCardRoot.cjs.map +1 -1
  10. package/dist/HoverCard/HoverCardRoot.js.map +1 -1
  11. package/dist/NavigationMenu/NavigationMenuSub.cjs +11 -1
  12. package/dist/NavigationMenu/NavigationMenuSub.cjs.map +1 -1
  13. package/dist/NavigationMenu/NavigationMenuSub.js +12 -2
  14. package/dist/NavigationMenu/NavigationMenuSub.js.map +1 -1
  15. package/dist/NavigationMenu/NavigationMenuViewport.cjs +1 -1
  16. package/dist/NavigationMenu/NavigationMenuViewport.cjs.map +1 -1
  17. package/dist/NavigationMenu/NavigationMenuViewport.js +1 -1
  18. package/dist/NavigationMenu/NavigationMenuViewport.js.map +1 -1
  19. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs +6 -4
  20. package/dist/RangeCalendar/RangeCalendarCellTrigger.cjs.map +1 -1
  21. package/dist/RangeCalendar/RangeCalendarCellTrigger.js +6 -4
  22. package/dist/RangeCalendar/RangeCalendarCellTrigger.js.map +1 -1
  23. package/dist/RangeCalendar/RangeCalendarRoot.cjs +3 -3
  24. package/dist/RangeCalendar/RangeCalendarRoot.cjs.map +1 -1
  25. package/dist/RangeCalendar/RangeCalendarRoot.js +3 -3
  26. package/dist/RangeCalendar/RangeCalendarRoot.js.map +1 -1
  27. package/dist/Select/SelectContentImpl.cjs +15 -5
  28. package/dist/Select/SelectContentImpl.cjs.map +1 -1
  29. package/dist/Select/SelectContentImpl.js +15 -5
  30. package/dist/Select/SelectContentImpl.js.map +1 -1
  31. package/dist/Slider/SliderRoot.cjs +1 -1
  32. package/dist/Slider/SliderRoot.cjs.map +1 -1
  33. package/dist/Slider/SliderRoot.js +1 -1
  34. package/dist/Slider/SliderRoot.js.map +1 -1
  35. package/dist/Slider/SliderThumb.cjs +1 -1
  36. package/dist/Slider/SliderThumb.cjs.map +1 -1
  37. package/dist/Slider/SliderThumb.js +1 -1
  38. package/dist/Slider/SliderThumb.js.map +1 -1
  39. package/dist/TagsInput/TagsInputItemDelete.cjs +2 -1
  40. package/dist/TagsInput/TagsInputItemDelete.cjs.map +1 -1
  41. package/dist/TagsInput/TagsInputItemDelete.js +2 -1
  42. package/dist/TagsInput/TagsInputItemDelete.js.map +1 -1
  43. package/dist/Toast/ToastClose.cjs +2 -2
  44. package/dist/Toast/ToastClose.cjs.map +1 -1
  45. package/dist/Toast/ToastClose.js +2 -2
  46. package/dist/Toast/ToastClose.js.map +1 -1
  47. package/dist/Toast/ToastRoot.cjs +3 -0
  48. package/dist/Toast/ToastRoot.cjs.map +1 -1
  49. package/dist/Toast/ToastRoot.js +3 -0
  50. package/dist/Toast/ToastRoot.js.map +1 -1
  51. package/dist/Toast/ToastRootImpl.cjs +6 -3
  52. package/dist/Toast/ToastRootImpl.cjs.map +1 -1
  53. package/dist/Toast/ToastRootImpl.js +6 -3
  54. package/dist/Toast/ToastRootImpl.js.map +1 -1
  55. package/dist/index.cjs +4 -4
  56. package/dist/index.d.ts +9 -10
  57. package/dist/index.js +2 -2
  58. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"RangeCalendarCellTrigger.cjs","sources":["../../src/RangeCalendar/RangeCalendarCellTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport {\n type DateValue,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n isToday,\n} from '@internationalized/date'\nimport { computed, nextTick } from 'vue'\nimport { useKbd } from '@/shared'\nimport { getDaysInMonth, isBetweenInclusive, toDate } from '@/date'\n\nexport interface RangeCalendarCellTriggerProps extends PrimitiveProps {\n day: DateValue\n month: DateValue\n}\n\nexport interface RangeCalendarCellTriggerSlot {\n default: (props: {\n /** Current day */\n dayValue: string\n /** Current disable state */\n disabled: boolean\n /** Current selected state */\n selected: boolean\n /** Current today state */\n today: boolean\n /** Current outside view state */\n outsideView: boolean\n /** Current outside visible view state */\n outsideVisibleView: boolean\n /** Current unavailable state */\n unavailable: boolean\n /** Current highlighted state */\n highlighted: boolean\n /** Current highlighted start state */\n highlightedStart: boolean\n /** Current highlighted end state */\n highlightedEnd: boolean\n /** Current selection start state */\n selectionStart: boolean\n /** Current selection end state */\n selectionEnd: boolean\n\n }) => any\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { injectRangeCalendarRootContext } from './RangeCalendarRoot.vue'\n\nconst props = withDefaults(defineProps<RangeCalendarCellTriggerProps>(), { as: 'div' })\ndefineSlots<RangeCalendarCellTriggerSlot>()\n\nconst rootContext = injectRangeCalendarRootContext()\n\nconst kbd = useKbd()\n\nconst { primitiveElement, currentElement } = usePrimitiveElement()\n\nconst labelText = computed(() => rootContext.formatter.custom(toDate(props.day), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n}))\n\nconst isDisabled = computed(() => rootContext.isDateDisabled(props.day))\nconst isUnavailable = computed(() => rootContext.isDateUnavailable?.(props.day) ?? false)\nconst isSelectedDate = computed(() => rootContext.isSelected(props.day))\nconst isSelectionStart = computed(() => rootContext.isSelectionStart(props.day))\nconst isSelectionEnd = computed(() => rootContext.isSelectionEnd(props.day))\nconst isHighlightStart = computed(() => rootContext.isHighlightedStart(props.day))\nconst isHighlightEnd = computed(() => rootContext.isHighlightedEnd(props.day))\nconst isHighlighted = computed(() => rootContext.highlightedRange.value\n ? isBetweenInclusive(props.day, rootContext.highlightedRange.value.start, rootContext.highlightedRange.value.end)\n : false)\n\nconst SELECTOR\n = '[data-reka-calendar-cell-trigger]:not([data-disabled]):not([data-outside-view]):not([data-outside-visible-view])'\n\nconst isDateToday = computed(() => {\n return isToday(props.day, getLocalTimeZone())\n})\nconst isOutsideView = computed(() => {\n return !isSameMonth(props.day, props.month)\n})\nconst isOutsideVisibleView = computed(() =>\n rootContext.isOutsideVisibleView(props.day),\n)\n\nconst dayValue = computed(() => props.day.day.toLocaleString(rootContext.locale.value))\n\nconst isFocusedDate = computed(() => {\n return !rootContext.disabled.value && isSameDay(props.day, rootContext.placeholder.value)\n})\n\nfunction changeDate(e: MouseEvent | KeyboardEvent, date: DateValue) {\n if (rootContext.readonly.value)\n return\n if (rootContext.isDateDisabled(date) || rootContext.isDateUnavailable?.(date))\n return\n\n rootContext.lastPressedDateValue.value = date.copy()\n\n if (rootContext.startValue.value && rootContext.highlightedRange.value === null) {\n if (isSameDay(date, rootContext.startValue.value) && !rootContext.preventDeselect.value && !rootContext.endValue.value) {\n rootContext.startValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n else if (!rootContext.endValue.value) {\n e.preventDefault()\n if (rootContext.lastPressedDateValue.value && isSameDay(rootContext.lastPressedDateValue.value, date))\n rootContext.startValue.value = date.copy()\n return\n }\n }\n\n if (rootContext.startValue.value && rootContext.endValue.value && isSameDay(rootContext.endValue.value, date) && !rootContext.preventDeselect.value) {\n rootContext.startValue.value = undefined\n rootContext.endValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n\n if (!rootContext.startValue.value) {\n rootContext.startValue.value = date.copy()\n }\n else if (!rootContext.endValue.value) {\n rootContext.endValue.value = date.copy()\n }\n else if (rootContext.endValue.value && rootContext.startValue.value) {\n rootContext.endValue.value = undefined\n rootContext.startValue.value = date.copy()\n }\n}\n\nfunction handleClick(e: MouseEvent) {\n changeDate(e, props.day)\n}\n\nfunction handleFocus() {\n if (rootContext.isDateDisabled(props.day) || rootContext.isDateUnavailable?.(props.day))\n return\n rootContext.focusedValue.value = props.day.copy()\n}\n\nfunction handleArrowKey(e: KeyboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n const parentElement = rootContext.parentElement.value!\n const allCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n const index = allCollectionItems.indexOf(currentElement.value)\n let newIndex = index\n const indexIncrementation = 7\n const sign = rootContext.dir.value === 'rtl' ? -1 : 1\n switch (e.code) {\n case kbd.ARROW_RIGHT:\n newIndex += sign\n break\n case kbd.ARROW_LEFT:\n newIndex -= sign\n break\n case kbd.ARROW_UP:\n newIndex -= indexIncrementation\n break\n case kbd.ARROW_DOWN:\n newIndex += indexIncrementation\n break\n case kbd.ENTER:\n case kbd.SPACE_CODE:\n changeDate(e, props.day)\n return\n default:\n return\n }\n\n if (newIndex >= 0 && newIndex < allCollectionItems.length) {\n allCollectionItems[newIndex].focus()\n return\n }\n\n if (newIndex < 0) {\n if (rootContext.isPrevButtonDisabled())\n return\n rootContext.prevPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n if (!rootContext.pagedNavigation.value) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(rootContext.placeholder.value)\n newCollectionItems[\n numberOfDays - Math.abs(newIndex)\n ].focus()\n return\n }\n newCollectionItems[\n newCollectionItems.length - Math.abs(newIndex)\n ].focus()\n })\n return\n }\n\n if (newIndex >= allCollectionItems.length) {\n if (rootContext.isNextButtonDisabled())\n return\n rootContext.nextPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n if (!rootContext.pagedNavigation.value) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(rootContext.placeholder.value.add({ months: rootContext.numberOfMonths.value - 1 }))\n newCollectionItems[newCollectionItems.length - numberOfDays + newIndex - allCollectionItems.length].focus()\n return\n }\n\n newCollectionItems[newIndex - allCollectionItems.length].focus()\n })\n }\n}\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n v-bind=\"props\"\n role=\"button\"\n :aria-label=\"labelText\"\n data-reka-calendar-cell-trigger\n :aria-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :aria-disabled=\"isDisabled || isUnavailable ? true : undefined\"\n :data-highlighted=\"isHighlighted && !isUnavailable ? '' : undefined\"\n :data-selection-start=\"isSelectionStart ? true : undefined\"\n :data-selection-end=\"isSelectionEnd ? true : undefined\"\n :data-highlighted-start=\"isHighlightStart ? true : undefined\"\n :data-highlighted-end=\"isHighlightEnd ? true : undefined\"\n :data-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :data-outside-visible-view=\"isOutsideVisibleView ? '' : undefined\"\n :data-value=\"day.toString()\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-unavailable=\"isUnavailable ? '' : undefined\"\n :data-today=\"isDateToday ? '' : undefined\"\n :data-outside-view=\"isOutsideView ? '' : undefined\"\n :data-focused=\"isFocusedDate ? '' : undefined\"\n :tabindex=\"isFocusedDate ? 0 : isOutsideView || isDisabled ? undefined : -1\"\n @click=\"handleClick\"\n @focusin=\"handleFocus\"\n @mouseenter=\"handleFocus\"\n @keydown.up.down.left.right.enter.space=\"handleArrowKey\"\n >\n <slot\n :day-value=\"dayValue\"\n :disabled=\"isDisabled\"\n :today=\"isDateToday\"\n :selected=\"isSelectedDate\"\n :outside-view=\"isOutsideView\"\n :outside-visible-view=\"isOutsideVisibleView\"\n :unavailable=\"isUnavailable\"\n :highlighted=\"isHighlighted && !isUnavailable\"\n :highlighted-start=\"isHighlightStart\"\n :highlighted-end=\"isHighlightEnd\"\n :selection-start=\"isSelectionStart\"\n :selection-end=\"isSelectionEnd\"\n >\n {{ dayValue }}\n </slot>\n </Primitive>\n</template>\n"],"names":["injectRangeCalendarRootContext","useKbd","usePrimitiveElement","computed","toDate","isBetweenInclusive","isToday","getLocalTimeZone","isSameMonth","isSameDay","date","nextTick","getDaysInMonth"],"mappings":"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"}
1
+ {"version":3,"file":"RangeCalendarCellTrigger.cjs","sources":["../../src/RangeCalendar/RangeCalendarCellTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport {\n type DateValue,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n isToday,\n} from '@internationalized/date'\nimport { computed, nextTick } from 'vue'\nimport { useKbd } from '@/shared'\nimport { getDaysInMonth, isBetweenInclusive, toDate } from '@/date'\n\nexport interface RangeCalendarCellTriggerProps extends PrimitiveProps {\n day: DateValue\n month: DateValue\n}\n\nexport interface RangeCalendarCellTriggerSlot {\n default: (props: {\n /** Current day */\n dayValue: string\n /** Current disable state */\n disabled: boolean\n /** Current selected state */\n selected: boolean\n /** Current today state */\n today: boolean\n /** Current outside view state */\n outsideView: boolean\n /** Current outside visible view state */\n outsideVisibleView: boolean\n /** Current unavailable state */\n unavailable: boolean\n /** Current highlighted state */\n highlighted: boolean\n /** Current highlighted start state */\n highlightedStart: boolean\n /** Current highlighted end state */\n highlightedEnd: boolean\n /** Current selection start state */\n selectionStart: boolean\n /** Current selection end state */\n selectionEnd: boolean\n\n }) => any\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { injectRangeCalendarRootContext } from './RangeCalendarRoot.vue'\n\nconst props = withDefaults(defineProps<RangeCalendarCellTriggerProps>(), { as: 'div' })\ndefineSlots<RangeCalendarCellTriggerSlot>()\n\nconst rootContext = injectRangeCalendarRootContext()\n\nconst kbd = useKbd()\n\nconst { primitiveElement, currentElement } = usePrimitiveElement()\n\nconst labelText = computed(() => rootContext.formatter.custom(toDate(props.day), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n}))\n\nconst isDisabled = computed(() => rootContext.isDateDisabled(props.day))\nconst isUnavailable = computed(() => rootContext.isDateUnavailable?.(props.day) ?? false)\nconst isSelectedDate = computed(() => rootContext.isSelected(props.day))\nconst isSelectionStart = computed(() => rootContext.isSelectionStart(props.day))\nconst isSelectionEnd = computed(() => rootContext.isSelectionEnd(props.day))\nconst isHighlightStart = computed(() => rootContext.isHighlightedStart(props.day))\nconst isHighlightEnd = computed(() => rootContext.isHighlightedEnd(props.day))\nconst isHighlighted = computed(() => rootContext.highlightedRange.value\n ? isBetweenInclusive(props.day, rootContext.highlightedRange.value.start, rootContext.highlightedRange.value.end)\n : false)\n\nconst SELECTOR\n = '[data-reka-calendar-cell-trigger]:not([data-disabled]):not([data-outside-view]):not([data-outside-visible-view])'\n\nconst isDateToday = computed(() => {\n return isToday(props.day, getLocalTimeZone())\n})\nconst isOutsideView = computed(() => {\n return !isSameMonth(props.day, props.month)\n})\nconst isOutsideVisibleView = computed(() =>\n rootContext.isOutsideVisibleView(props.day),\n)\n\nconst dayValue = computed(() => props.day.day.toLocaleString(rootContext.locale.value))\n\nconst isFocusedDate = computed(() => {\n return !rootContext.disabled.value && isSameDay(props.day, rootContext.placeholder.value)\n})\n\nfunction changeDate(e: MouseEvent | KeyboardEvent, date: DateValue) {\n if (rootContext.readonly.value)\n return\n if (rootContext.isDateDisabled(date) || rootContext.isDateUnavailable?.(date))\n return\n\n rootContext.lastPressedDateValue.value = date.copy()\n\n if (rootContext.startValue.value && rootContext.highlightedRange.value === null) {\n if (isSameDay(date, rootContext.startValue.value) && !rootContext.preventDeselect.value && !rootContext.endValue.value) {\n rootContext.startValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n else if (!rootContext.endValue.value) {\n e.preventDefault()\n if (rootContext.lastPressedDateValue.value && isSameDay(rootContext.lastPressedDateValue.value, date))\n rootContext.startValue.value = date.copy()\n return\n }\n }\n\n if (rootContext.startValue.value && rootContext.endValue.value && isSameDay(rootContext.endValue.value, date) && !rootContext.preventDeselect.value) {\n rootContext.startValue.value = undefined\n rootContext.endValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n\n if (!rootContext.startValue.value) {\n rootContext.startValue.value = date.copy()\n }\n else if (!rootContext.endValue.value) {\n rootContext.endValue.value = date.copy()\n }\n else if (rootContext.endValue.value && rootContext.startValue.value) {\n rootContext.endValue.value = undefined\n rootContext.startValue.value = date.copy()\n }\n}\n\nfunction handleClick(e: MouseEvent) {\n changeDate(e, props.day)\n}\n\nfunction handleFocus() {\n if (rootContext.isDateDisabled(props.day) || rootContext.isDateUnavailable?.(props.day))\n return\n rootContext.focusedValue.value = props.day.copy()\n}\n\nfunction handleArrowKey(e: KeyboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n const parentElement = rootContext.parentElement.value!\n const allCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n const index = allCollectionItems.indexOf(currentElement.value)\n let newIndex = index\n const indexIncrementation = 7\n const sign = rootContext.dir.value === 'rtl' ? -1 : 1\n switch (e.code) {\n case kbd.ARROW_RIGHT:\n newIndex += sign\n break\n case kbd.ARROW_LEFT:\n newIndex -= sign\n break\n case kbd.ARROW_UP:\n newIndex -= indexIncrementation\n break\n case kbd.ARROW_DOWN:\n newIndex += indexIncrementation\n break\n case kbd.ENTER:\n case kbd.SPACE_CODE:\n changeDate(e, props.day)\n return\n default:\n return\n }\n\n if (newIndex >= 0 && newIndex < allCollectionItems.length) {\n allCollectionItems[newIndex].focus()\n return\n }\n\n if (newIndex < 0) {\n if (rootContext.isPrevButtonDisabled())\n return\n rootContext.prevPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(rootContext.placeholder.value)\n newCollectionItems[\n numberOfDays - Math.abs(newIndex)\n ].focus()\n return\n }\n newCollectionItems[\n newCollectionItems.length - Math.abs(newIndex)\n ].focus()\n })\n return\n }\n\n if (newIndex >= allCollectionItems.length) {\n if (rootContext.isNextButtonDisabled())\n return\n rootContext.nextPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(\n rootContext.placeholder.value.add({ months: rootContext.numberOfMonths.value - 1 }),\n )\n newCollectionItems[newIndex - allCollectionItems.length + (newCollectionItems.length - numberOfDays)].focus()\n return\n }\n\n newCollectionItems[newIndex - allCollectionItems.length].focus()\n })\n }\n}\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n v-bind=\"props\"\n role=\"button\"\n :aria-label=\"labelText\"\n data-reka-calendar-cell-trigger\n :aria-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :aria-disabled=\"isDisabled || isUnavailable ? true : undefined\"\n :data-highlighted=\"isHighlighted && !isUnavailable ? '' : undefined\"\n :data-selection-start=\"isSelectionStart ? true : undefined\"\n :data-selection-end=\"isSelectionEnd ? true : undefined\"\n :data-highlighted-start=\"isHighlightStart ? true : undefined\"\n :data-highlighted-end=\"isHighlightEnd ? true : undefined\"\n :data-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :data-outside-visible-view=\"isOutsideVisibleView ? '' : undefined\"\n :data-value=\"day.toString()\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-unavailable=\"isUnavailable ? '' : undefined\"\n :data-today=\"isDateToday ? '' : undefined\"\n :data-outside-view=\"isOutsideView ? '' : undefined\"\n :data-focused=\"isFocusedDate ? '' : undefined\"\n :tabindex=\"isFocusedDate ? 0 : isOutsideView || isDisabled ? undefined : -1\"\n @click=\"handleClick\"\n @focusin=\"handleFocus\"\n @mouseenter=\"handleFocus\"\n @keydown.up.down.left.right.enter.space=\"handleArrowKey\"\n >\n <slot\n :day-value=\"dayValue\"\n :disabled=\"isDisabled\"\n :today=\"isDateToday\"\n :selected=\"isSelectedDate\"\n :outside-view=\"isOutsideView\"\n :outside-visible-view=\"isOutsideVisibleView\"\n :unavailable=\"isUnavailable\"\n :highlighted=\"isHighlighted && !isUnavailable\"\n :highlighted-start=\"isHighlightStart\"\n :highlighted-end=\"isHighlightEnd\"\n :selection-start=\"isSelectionStart\"\n :selection-end=\"isSelectionEnd\"\n >\n {{ dayValue }}\n </slot>\n </Primitive>\n</template>\n"],"names":["injectRangeCalendarRootContext","useKbd","usePrimitiveElement","computed","toDate","isBetweenInclusive","isToday","getLocalTimeZone","isSameMonth","isSameDay","date","nextTick","getDaysInMonth"],"mappings":"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"}
@@ -127,7 +127,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
127
127
  rootContext.prevPage();
128
128
  nextTick(() => {
129
129
  const newCollectionItems = parentElement ? Array.from(parentElement.querySelectorAll(SELECTOR)) : [];
130
- if (!rootContext.pagedNavigation.value) {
130
+ if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {
131
131
  const numberOfDays = getDaysInMonth(rootContext.placeholder.value);
132
132
  newCollectionItems[numberOfDays - Math.abs(newIndex)].focus();
133
133
  return;
@@ -142,9 +142,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
142
142
  rootContext.nextPage();
143
143
  nextTick(() => {
144
144
  const newCollectionItems = parentElement ? Array.from(parentElement.querySelectorAll(SELECTOR)) : [];
145
- if (!rootContext.pagedNavigation.value) {
146
- const numberOfDays = getDaysInMonth(rootContext.placeholder.value.add({ months: rootContext.numberOfMonths.value - 1 }));
147
- newCollectionItems[newCollectionItems.length - numberOfDays + newIndex - allCollectionItems.length].focus();
145
+ if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {
146
+ const numberOfDays = getDaysInMonth(
147
+ rootContext.placeholder.value.add({ months: rootContext.numberOfMonths.value - 1 })
148
+ );
149
+ newCollectionItems[newIndex - allCollectionItems.length + (newCollectionItems.length - numberOfDays)].focus();
148
150
  return;
149
151
  }
150
152
  newCollectionItems[newIndex - allCollectionItems.length].focus();
@@ -1 +1 @@
1
- {"version":3,"file":"RangeCalendarCellTrigger.js","sources":["../../src/RangeCalendar/RangeCalendarCellTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport {\n type DateValue,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n isToday,\n} from '@internationalized/date'\nimport { computed, nextTick } from 'vue'\nimport { useKbd } from '@/shared'\nimport { getDaysInMonth, isBetweenInclusive, toDate } from '@/date'\n\nexport interface RangeCalendarCellTriggerProps extends PrimitiveProps {\n day: DateValue\n month: DateValue\n}\n\nexport interface RangeCalendarCellTriggerSlot {\n default: (props: {\n /** Current day */\n dayValue: string\n /** Current disable state */\n disabled: boolean\n /** Current selected state */\n selected: boolean\n /** Current today state */\n today: boolean\n /** Current outside view state */\n outsideView: boolean\n /** Current outside visible view state */\n outsideVisibleView: boolean\n /** Current unavailable state */\n unavailable: boolean\n /** Current highlighted state */\n highlighted: boolean\n /** Current highlighted start state */\n highlightedStart: boolean\n /** Current highlighted end state */\n highlightedEnd: boolean\n /** Current selection start state */\n selectionStart: boolean\n /** Current selection end state */\n selectionEnd: boolean\n\n }) => any\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { injectRangeCalendarRootContext } from './RangeCalendarRoot.vue'\n\nconst props = withDefaults(defineProps<RangeCalendarCellTriggerProps>(), { as: 'div' })\ndefineSlots<RangeCalendarCellTriggerSlot>()\n\nconst rootContext = injectRangeCalendarRootContext()\n\nconst kbd = useKbd()\n\nconst { primitiveElement, currentElement } = usePrimitiveElement()\n\nconst labelText = computed(() => rootContext.formatter.custom(toDate(props.day), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n}))\n\nconst isDisabled = computed(() => rootContext.isDateDisabled(props.day))\nconst isUnavailable = computed(() => rootContext.isDateUnavailable?.(props.day) ?? false)\nconst isSelectedDate = computed(() => rootContext.isSelected(props.day))\nconst isSelectionStart = computed(() => rootContext.isSelectionStart(props.day))\nconst isSelectionEnd = computed(() => rootContext.isSelectionEnd(props.day))\nconst isHighlightStart = computed(() => rootContext.isHighlightedStart(props.day))\nconst isHighlightEnd = computed(() => rootContext.isHighlightedEnd(props.day))\nconst isHighlighted = computed(() => rootContext.highlightedRange.value\n ? isBetweenInclusive(props.day, rootContext.highlightedRange.value.start, rootContext.highlightedRange.value.end)\n : false)\n\nconst SELECTOR\n = '[data-reka-calendar-cell-trigger]:not([data-disabled]):not([data-outside-view]):not([data-outside-visible-view])'\n\nconst isDateToday = computed(() => {\n return isToday(props.day, getLocalTimeZone())\n})\nconst isOutsideView = computed(() => {\n return !isSameMonth(props.day, props.month)\n})\nconst isOutsideVisibleView = computed(() =>\n rootContext.isOutsideVisibleView(props.day),\n)\n\nconst dayValue = computed(() => props.day.day.toLocaleString(rootContext.locale.value))\n\nconst isFocusedDate = computed(() => {\n return !rootContext.disabled.value && isSameDay(props.day, rootContext.placeholder.value)\n})\n\nfunction changeDate(e: MouseEvent | KeyboardEvent, date: DateValue) {\n if (rootContext.readonly.value)\n return\n if (rootContext.isDateDisabled(date) || rootContext.isDateUnavailable?.(date))\n return\n\n rootContext.lastPressedDateValue.value = date.copy()\n\n if (rootContext.startValue.value && rootContext.highlightedRange.value === null) {\n if (isSameDay(date, rootContext.startValue.value) && !rootContext.preventDeselect.value && !rootContext.endValue.value) {\n rootContext.startValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n else if (!rootContext.endValue.value) {\n e.preventDefault()\n if (rootContext.lastPressedDateValue.value && isSameDay(rootContext.lastPressedDateValue.value, date))\n rootContext.startValue.value = date.copy()\n return\n }\n }\n\n if (rootContext.startValue.value && rootContext.endValue.value && isSameDay(rootContext.endValue.value, date) && !rootContext.preventDeselect.value) {\n rootContext.startValue.value = undefined\n rootContext.endValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n\n if (!rootContext.startValue.value) {\n rootContext.startValue.value = date.copy()\n }\n else if (!rootContext.endValue.value) {\n rootContext.endValue.value = date.copy()\n }\n else if (rootContext.endValue.value && rootContext.startValue.value) {\n rootContext.endValue.value = undefined\n rootContext.startValue.value = date.copy()\n }\n}\n\nfunction handleClick(e: MouseEvent) {\n changeDate(e, props.day)\n}\n\nfunction handleFocus() {\n if (rootContext.isDateDisabled(props.day) || rootContext.isDateUnavailable?.(props.day))\n return\n rootContext.focusedValue.value = props.day.copy()\n}\n\nfunction handleArrowKey(e: KeyboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n const parentElement = rootContext.parentElement.value!\n const allCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n const index = allCollectionItems.indexOf(currentElement.value)\n let newIndex = index\n const indexIncrementation = 7\n const sign = rootContext.dir.value === 'rtl' ? -1 : 1\n switch (e.code) {\n case kbd.ARROW_RIGHT:\n newIndex += sign\n break\n case kbd.ARROW_LEFT:\n newIndex -= sign\n break\n case kbd.ARROW_UP:\n newIndex -= indexIncrementation\n break\n case kbd.ARROW_DOWN:\n newIndex += indexIncrementation\n break\n case kbd.ENTER:\n case kbd.SPACE_CODE:\n changeDate(e, props.day)\n return\n default:\n return\n }\n\n if (newIndex >= 0 && newIndex < allCollectionItems.length) {\n allCollectionItems[newIndex].focus()\n return\n }\n\n if (newIndex < 0) {\n if (rootContext.isPrevButtonDisabled())\n return\n rootContext.prevPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n if (!rootContext.pagedNavigation.value) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(rootContext.placeholder.value)\n newCollectionItems[\n numberOfDays - Math.abs(newIndex)\n ].focus()\n return\n }\n newCollectionItems[\n newCollectionItems.length - Math.abs(newIndex)\n ].focus()\n })\n return\n }\n\n if (newIndex >= allCollectionItems.length) {\n if (rootContext.isNextButtonDisabled())\n return\n rootContext.nextPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n if (!rootContext.pagedNavigation.value) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(rootContext.placeholder.value.add({ months: rootContext.numberOfMonths.value - 1 }))\n newCollectionItems[newCollectionItems.length - numberOfDays + newIndex - allCollectionItems.length].focus()\n return\n }\n\n newCollectionItems[newIndex - allCollectionItems.length].focus()\n })\n }\n}\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n v-bind=\"props\"\n role=\"button\"\n :aria-label=\"labelText\"\n data-reka-calendar-cell-trigger\n :aria-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :aria-disabled=\"isDisabled || isUnavailable ? true : undefined\"\n :data-highlighted=\"isHighlighted && !isUnavailable ? '' : undefined\"\n :data-selection-start=\"isSelectionStart ? true : undefined\"\n :data-selection-end=\"isSelectionEnd ? true : undefined\"\n :data-highlighted-start=\"isHighlightStart ? true : undefined\"\n :data-highlighted-end=\"isHighlightEnd ? true : undefined\"\n :data-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :data-outside-visible-view=\"isOutsideVisibleView ? '' : undefined\"\n :data-value=\"day.toString()\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-unavailable=\"isUnavailable ? '' : undefined\"\n :data-today=\"isDateToday ? '' : undefined\"\n :data-outside-view=\"isOutsideView ? '' : undefined\"\n :data-focused=\"isFocusedDate ? '' : undefined\"\n :tabindex=\"isFocusedDate ? 0 : isOutsideView || isDisabled ? undefined : -1\"\n @click=\"handleClick\"\n @focusin=\"handleFocus\"\n @mouseenter=\"handleFocus\"\n @keydown.up.down.left.right.enter.space=\"handleArrowKey\"\n >\n <slot\n :day-value=\"dayValue\"\n :disabled=\"isDisabled\"\n :today=\"isDateToday\"\n :selected=\"isSelectedDate\"\n :outside-view=\"isOutsideView\"\n :outside-visible-view=\"isOutsideVisibleView\"\n :unavailable=\"isUnavailable\"\n :highlighted=\"isHighlighted && !isUnavailable\"\n :highlighted-start=\"isHighlightStart\"\n :highlighted-end=\"isHighlightEnd\"\n :selection-start=\"isSelectionStart\"\n :selection-end=\"isSelectionEnd\"\n >\n {{ dayValue }}\n </slot>\n </Primitive>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RangeCalendarCellTrigger.js","sources":["../../src/RangeCalendar/RangeCalendarCellTrigger.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport {\n type DateValue,\n getLocalTimeZone,\n isSameDay,\n isSameMonth,\n isToday,\n} from '@internationalized/date'\nimport { computed, nextTick } from 'vue'\nimport { useKbd } from '@/shared'\nimport { getDaysInMonth, isBetweenInclusive, toDate } from '@/date'\n\nexport interface RangeCalendarCellTriggerProps extends PrimitiveProps {\n day: DateValue\n month: DateValue\n}\n\nexport interface RangeCalendarCellTriggerSlot {\n default: (props: {\n /** Current day */\n dayValue: string\n /** Current disable state */\n disabled: boolean\n /** Current selected state */\n selected: boolean\n /** Current today state */\n today: boolean\n /** Current outside view state */\n outsideView: boolean\n /** Current outside visible view state */\n outsideVisibleView: boolean\n /** Current unavailable state */\n unavailable: boolean\n /** Current highlighted state */\n highlighted: boolean\n /** Current highlighted start state */\n highlightedStart: boolean\n /** Current highlighted end state */\n highlightedEnd: boolean\n /** Current selection start state */\n selectionStart: boolean\n /** Current selection end state */\n selectionEnd: boolean\n\n }) => any\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { injectRangeCalendarRootContext } from './RangeCalendarRoot.vue'\n\nconst props = withDefaults(defineProps<RangeCalendarCellTriggerProps>(), { as: 'div' })\ndefineSlots<RangeCalendarCellTriggerSlot>()\n\nconst rootContext = injectRangeCalendarRootContext()\n\nconst kbd = useKbd()\n\nconst { primitiveElement, currentElement } = usePrimitiveElement()\n\nconst labelText = computed(() => rootContext.formatter.custom(toDate(props.day), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n}))\n\nconst isDisabled = computed(() => rootContext.isDateDisabled(props.day))\nconst isUnavailable = computed(() => rootContext.isDateUnavailable?.(props.day) ?? false)\nconst isSelectedDate = computed(() => rootContext.isSelected(props.day))\nconst isSelectionStart = computed(() => rootContext.isSelectionStart(props.day))\nconst isSelectionEnd = computed(() => rootContext.isSelectionEnd(props.day))\nconst isHighlightStart = computed(() => rootContext.isHighlightedStart(props.day))\nconst isHighlightEnd = computed(() => rootContext.isHighlightedEnd(props.day))\nconst isHighlighted = computed(() => rootContext.highlightedRange.value\n ? isBetweenInclusive(props.day, rootContext.highlightedRange.value.start, rootContext.highlightedRange.value.end)\n : false)\n\nconst SELECTOR\n = '[data-reka-calendar-cell-trigger]:not([data-disabled]):not([data-outside-view]):not([data-outside-visible-view])'\n\nconst isDateToday = computed(() => {\n return isToday(props.day, getLocalTimeZone())\n})\nconst isOutsideView = computed(() => {\n return !isSameMonth(props.day, props.month)\n})\nconst isOutsideVisibleView = computed(() =>\n rootContext.isOutsideVisibleView(props.day),\n)\n\nconst dayValue = computed(() => props.day.day.toLocaleString(rootContext.locale.value))\n\nconst isFocusedDate = computed(() => {\n return !rootContext.disabled.value && isSameDay(props.day, rootContext.placeholder.value)\n})\n\nfunction changeDate(e: MouseEvent | KeyboardEvent, date: DateValue) {\n if (rootContext.readonly.value)\n return\n if (rootContext.isDateDisabled(date) || rootContext.isDateUnavailable?.(date))\n return\n\n rootContext.lastPressedDateValue.value = date.copy()\n\n if (rootContext.startValue.value && rootContext.highlightedRange.value === null) {\n if (isSameDay(date, rootContext.startValue.value) && !rootContext.preventDeselect.value && !rootContext.endValue.value) {\n rootContext.startValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n else if (!rootContext.endValue.value) {\n e.preventDefault()\n if (rootContext.lastPressedDateValue.value && isSameDay(rootContext.lastPressedDateValue.value, date))\n rootContext.startValue.value = date.copy()\n return\n }\n }\n\n if (rootContext.startValue.value && rootContext.endValue.value && isSameDay(rootContext.endValue.value, date) && !rootContext.preventDeselect.value) {\n rootContext.startValue.value = undefined\n rootContext.endValue.value = undefined\n rootContext.onPlaceholderChange(date)\n return\n }\n\n if (!rootContext.startValue.value) {\n rootContext.startValue.value = date.copy()\n }\n else if (!rootContext.endValue.value) {\n rootContext.endValue.value = date.copy()\n }\n else if (rootContext.endValue.value && rootContext.startValue.value) {\n rootContext.endValue.value = undefined\n rootContext.startValue.value = date.copy()\n }\n}\n\nfunction handleClick(e: MouseEvent) {\n changeDate(e, props.day)\n}\n\nfunction handleFocus() {\n if (rootContext.isDateDisabled(props.day) || rootContext.isDateUnavailable?.(props.day))\n return\n rootContext.focusedValue.value = props.day.copy()\n}\n\nfunction handleArrowKey(e: KeyboardEvent) {\n e.preventDefault()\n e.stopPropagation()\n const parentElement = rootContext.parentElement.value!\n const allCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n const index = allCollectionItems.indexOf(currentElement.value)\n let newIndex = index\n const indexIncrementation = 7\n const sign = rootContext.dir.value === 'rtl' ? -1 : 1\n switch (e.code) {\n case kbd.ARROW_RIGHT:\n newIndex += sign\n break\n case kbd.ARROW_LEFT:\n newIndex -= sign\n break\n case kbd.ARROW_UP:\n newIndex -= indexIncrementation\n break\n case kbd.ARROW_DOWN:\n newIndex += indexIncrementation\n break\n case kbd.ENTER:\n case kbd.SPACE_CODE:\n changeDate(e, props.day)\n return\n default:\n return\n }\n\n if (newIndex >= 0 && newIndex < allCollectionItems.length) {\n allCollectionItems[newIndex].focus()\n return\n }\n\n if (newIndex < 0) {\n if (rootContext.isPrevButtonDisabled())\n return\n rootContext.prevPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(rootContext.placeholder.value)\n newCollectionItems[\n numberOfDays - Math.abs(newIndex)\n ].focus()\n return\n }\n newCollectionItems[\n newCollectionItems.length - Math.abs(newIndex)\n ].focus()\n })\n return\n }\n\n if (newIndex >= allCollectionItems.length) {\n if (rootContext.isNextButtonDisabled())\n return\n rootContext.nextPage()\n nextTick(() => {\n const newCollectionItems: HTMLElement[] = parentElement\n ? Array.from(parentElement.querySelectorAll(SELECTOR))\n : []\n\n if (!rootContext.pagedNavigation.value && rootContext.numberOfMonths.value > 1) {\n // Placeholder is set to first month of the new page\n const numberOfDays = getDaysInMonth(\n rootContext.placeholder.value.add({ months: rootContext.numberOfMonths.value - 1 }),\n )\n newCollectionItems[newIndex - allCollectionItems.length + (newCollectionItems.length - numberOfDays)].focus()\n return\n }\n\n newCollectionItems[newIndex - allCollectionItems.length].focus()\n })\n }\n}\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n v-bind=\"props\"\n role=\"button\"\n :aria-label=\"labelText\"\n data-reka-calendar-cell-trigger\n :aria-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :aria-disabled=\"isDisabled || isUnavailable ? true : undefined\"\n :data-highlighted=\"isHighlighted && !isUnavailable ? '' : undefined\"\n :data-selection-start=\"isSelectionStart ? true : undefined\"\n :data-selection-end=\"isSelectionEnd ? true : undefined\"\n :data-highlighted-start=\"isHighlightStart ? true : undefined\"\n :data-highlighted-end=\"isHighlightEnd ? true : undefined\"\n :data-selected=\"isSelectedDate && !isUnavailable ? true : undefined\"\n :data-outside-visible-view=\"isOutsideVisibleView ? '' : undefined\"\n :data-value=\"day.toString()\"\n :data-disabled=\"isDisabled ? '' : undefined\"\n :data-unavailable=\"isUnavailable ? '' : undefined\"\n :data-today=\"isDateToday ? '' : undefined\"\n :data-outside-view=\"isOutsideView ? '' : undefined\"\n :data-focused=\"isFocusedDate ? '' : undefined\"\n :tabindex=\"isFocusedDate ? 0 : isOutsideView || isDisabled ? undefined : -1\"\n @click=\"handleClick\"\n @focusin=\"handleFocus\"\n @mouseenter=\"handleFocus\"\n @keydown.up.down.left.right.enter.space=\"handleArrowKey\"\n >\n <slot\n :day-value=\"dayValue\"\n :disabled=\"isDisabled\"\n :today=\"isDateToday\"\n :selected=\"isSelectedDate\"\n :outside-view=\"isOutsideView\"\n :outside-visible-view=\"isOutsideVisibleView\"\n :unavailable=\"isUnavailable\"\n :highlighted=\"isHighlighted && !isUnavailable\"\n :highlighted-start=\"isHighlightStart\"\n :highlighted-end=\"isHighlightEnd\"\n :selection-start=\"isSelectionStart\"\n :selection-end=\"isSelectionEnd\"\n >\n {{ dayValue }}\n </slot>\n </Primitive>\n</template>\n"],"names":[],"mappings":"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"}
@@ -146,11 +146,11 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
146
146
  focusedValue,
147
147
  allowNonContiguousRanges
148
148
  });
149
- vue.watch(modelValue, (_modelValue) => {
150
- if (!_modelValue || !_modelValue.start || startValue.value && !date.isEqualDay(_modelValue.start, startValue.value)) {
149
+ vue.watch(modelValue, (_modelValue, _prevValue) => {
150
+ if (!_prevValue.start && _modelValue?.start || !_modelValue || !_modelValue.start || startValue.value && !date.isEqualDay(_modelValue.start, startValue.value)) {
151
151
  startValue.value = _modelValue?.start?.copy?.();
152
152
  }
153
- if (!_modelValue || !_modelValue.end || endValue.value && !date.isEqualDay(_modelValue.end, endValue.value)) {
153
+ if (!_prevValue.end && _modelValue.end || !_modelValue || !_modelValue.end || endValue.value && !date.isEqualDay(_modelValue.end, endValue.value)) {
154
154
  endValue.value = _modelValue?.end?.copy?.();
155
155
  }
156
156
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RangeCalendarRoot.cjs","sources":["../../src/RangeCalendar/RangeCalendarRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { type DateValue, isEqualDay } from '@internationalized/date'\n\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { type Formatter, createContext, isNullish, useDirection, useKbd, useLocale } from '@/shared'\nimport { getDefaultDate, handleCalendarInitialFocus } from '@/shared/date'\nimport { type Grid, type Matcher, type WeekDayFormat, isBefore } from '@/date'\nimport type { DateRange } from '@/shared/date'\nimport { useRangeCalendarState } from './useRangeCalendar'\nimport { useCalendar } from '@/Calendar/useCalendar'\nimport type { Direction } from '@/shared/types'\n\ntype RangeCalendarRootContext = {\n modelValue: Ref<DateRange>\n startValue: Ref<DateValue | undefined>\n endValue: Ref<DateValue | undefined>\n locale: Ref<string>\n placeholder: Ref<DateValue>\n pagedNavigation: Ref<boolean>\n preventDeselect: Ref<boolean>\n weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>\n weekdayFormat: Ref<WeekDayFormat>\n fixedWeeks: Ref<boolean>\n numberOfMonths: Ref<number>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n initialFocus: Ref<boolean>\n onPlaceholderChange: (date: DateValue) => void\n fullCalendarLabel: Ref<string>\n parentElement: Ref<HTMLElement | undefined>\n headingValue: Ref<string>\n isInvalid: Ref<boolean>\n isDateDisabled: Matcher\n isDateUnavailable?: Matcher\n isOutsideVisibleView: (date: DateValue) => boolean\n highlightedRange: Ref<{ start: DateValue, end: DateValue } | null>\n focusedValue: Ref<DateValue | undefined>\n lastPressedDateValue: Ref<DateValue | undefined>\n isSelected: (date: DateValue) => boolean\n isSelectionEnd: (date: DateValue) => boolean\n isSelectionStart: (date: DateValue) => boolean\n isHighlightedStart: (date: DateValue) => boolean\n isHighlightedEnd: (date: DateValue) => boolean\n prevPage: (prevPageFunc?: (date: DateValue) => DateValue) => void\n nextPage: (nextPageFunc?: (date: DateValue) => DateValue) => void\n isNextButtonDisabled: (nextPageFunc?: (date: DateValue) => DateValue) => boolean\n isPrevButtonDisabled: (prevPageFunc?: (date: DateValue) => DateValue) => boolean\n formatter: Formatter\n dir: Ref<Direction>\n}\n\nexport interface RangeCalendarRootProps extends PrimitiveProps {\n /** The default placeholder date */\n defaultPlaceholder?: DateValue\n /** The default value for the calendar */\n defaultValue?: DateRange\n /** The controlled checked state of the calendar. Can be bound as `v-model`. */\n modelValue?: DateRange | null\n /** The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view */\n placeholder?: DateValue\n /** When combined with `isDateUnavailable`, determines whether non-contiguous ranges, i.e. ranges containing unavailable dates, may be selected. */\n allowNonContiguousRanges?: boolean\n /** This property causes the previous and next buttons to navigate by the number of months displayed at once, rather than one month */\n pagedNavigation?: boolean\n /** Whether or not to prevent the user from deselecting a date without selecting another date first */\n preventDeselect?: boolean\n /** The day of the week to start the calendar on */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The format to use for the weekday strings provided via the weekdays slot prop */\n weekdayFormat?: WeekDayFormat\n /** The accessible label for the calendar */\n calendarLabel?: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks?: boolean\n /** The maximum date that can be selected */\n maxValue?: DateValue\n /** The minimum date that can be selected */\n minValue?: DateValue\n /** The locale to use for formatting dates */\n locale?: string\n /** The number of months to display at once */\n numberOfMonths?: number\n /** Whether or not the calendar is disabled */\n disabled?: boolean\n /** Whether or not the calendar is readonly */\n readonly?: boolean\n /** If true, the calendar will focus the selected day, today, or the first day of the month depending on what is visible when the calendar is mounted */\n initialFocus?: boolean\n /** A function that returns whether or not a date is disabled */\n isDateDisabled?: Matcher\n /** A function that returns whether or not a date is unavailable */\n isDateUnavailable?: Matcher\n /** The reading direction of the calendar when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** A function that returns the next page of the calendar. It receives the current placeholder as an argument inside the component. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** A function that returns the previous page of the calendar. It receives the current placeholder as an argument inside the component. */\n prevPage?: (placeholder: DateValue) => DateValue\n}\n\nexport type RangeCalendarRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: DateRange]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: DateValue]\n /** Event handler called whenever the start value changes */\n 'update:startValue': [date: DateValue | undefined]\n}\n\nexport const [injectRangeCalendarRootContext, provideRangeCalendarRootContext]\n = createContext<RangeCalendarRootContext>('RangeCalendarRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, toRefs, watch } from 'vue'\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { useEventListener, useVModel } from '@vueuse/core'\n\nconst props = withDefaults(defineProps<RangeCalendarRootProps>(), {\n defaultValue: () => ({ start: undefined, end: undefined }),\n as: 'div',\n pagedNavigation: false,\n preventDeselect: false,\n weekStartsOn: 0,\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n disabled: false,\n readonly: false,\n initialFocus: false,\n placeholder: undefined,\n isDateDisabled: undefined,\n isDateUnavailable: undefined,\n allowNonContiguousRanges: false,\n})\nconst emits = defineEmits<RangeCalendarRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** The current date of the placeholder */\n date: DateValue\n /** The grid of dates */\n grid: Grid<DateValue>[]\n /** The days of the week */\n weekDays: string[]\n /** The start of the week */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The calendar locale */\n locale: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks: boolean\n /** The current date range */\n modelValue: DateRange\n }) => any\n}>()\n\nconst {\n disabled,\n readonly,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n preventDeselect,\n isDateUnavailable: propsIsDateUnavailable,\n isDateDisabled: propsIsDateDisabled,\n calendarLabel,\n maxValue,\n minValue,\n dir: propDir,\n locale: propLocale,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n allowNonContiguousRanges,\n} = toRefs(props)\n\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst dir = useDirection(propDir)\nconst locale = useLocale(propLocale)\n\nconst lastPressedDateValue = ref() as Ref<DateValue | undefined>\nconst focusedValue = ref() as Ref<DateValue | undefined>\nconst isEditing = ref(false)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? { start: undefined, end: undefined },\n passive: (props.modelValue === undefined) as false,\n}) as Ref<DateRange>\n\nconst currentModelValue = computed(() => isNullish(modelValue.value) ? { start: undefined, end: undefined } : modelValue.value)\n\nconst defaultDate = getDefaultDate({\n defaultPlaceholder: props.placeholder,\n defaultValue: currentModelValue.value.start,\n locale: props.locale,\n})\n\nconst startValue = ref(currentModelValue.value.start) as Ref<DateValue | undefined>\nconst endValue = ref(currentModelValue.value.end) as Ref<DateValue | undefined>\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<DateValue>\n\nfunction onPlaceholderChange(value: DateValue) {\n placeholder.value = value.copy()\n}\n\nconst {\n fullCalendarLabel,\n headingValue,\n isDateDisabled,\n isDateUnavailable,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n grid,\n weekdays,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n formatter,\n} = useCalendar({\n locale,\n placeholder,\n weekStartsOn,\n fixedWeeks,\n numberOfMonths,\n minValue,\n maxValue,\n disabled,\n weekdayFormat,\n pagedNavigation,\n isDateDisabled: propsIsDateDisabled.value,\n isDateUnavailable: propsIsDateUnavailable.value,\n calendarLabel,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n})\n\nconst {\n isInvalid,\n isSelected,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n} = useRangeCalendarState({\n start: startValue,\n end: endValue,\n isDateDisabled,\n isDateUnavailable,\n focusedValue,\n allowNonContiguousRanges,\n})\n\nwatch(modelValue, (_modelValue) => {\n if (!_modelValue || !_modelValue.start || (startValue.value && !isEqualDay(_modelValue.start, startValue.value))) {\n startValue.value = _modelValue?.start?.copy?.()\n }\n if (!_modelValue || !_modelValue.end || (endValue.value && !isEqualDay(_modelValue.end, endValue.value))) {\n endValue.value = _modelValue?.end?.copy?.()\n }\n})\n\nwatch(startValue, (_startValue) => {\n if (_startValue && !isEqualDay(_startValue, placeholder.value))\n onPlaceholderChange(_startValue)\n\n emits('update:startValue', _startValue)\n})\n\nwatch([startValue, endValue], ([_startValue, _endValue]) => {\n const value = currentModelValue.value\n\n if (value && value.start && value.end && _startValue && _endValue && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n\n isEditing.value = true\n if (_startValue && _endValue) {\n isEditing.value = false\n if (value.start && value.end && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n if (isBefore(_endValue, _startValue)) {\n modelValue.value = {\n start: _endValue.copy(),\n end: _startValue.copy(),\n }\n }\n else {\n modelValue.value = {\n start: _startValue.copy(),\n end: _endValue.copy(),\n }\n }\n }\n})\n\nconst kbd = useKbd()\nuseEventListener('keydown', (ev) => {\n if (ev.key === kbd.ESCAPE && isEditing.value) {\n // Abort start and end selection\n startValue.value = modelValue.value.start?.copy()\n endValue.value = modelValue.value.end?.copy()\n }\n})\n\nprovideRangeCalendarRootContext({\n isDateUnavailable,\n startValue,\n endValue,\n formatter,\n modelValue,\n placeholder,\n disabled,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n readonly,\n preventDeselect,\n fullCalendarLabel,\n headingValue,\n isInvalid,\n isDateDisabled,\n highlightedRange,\n focusedValue,\n lastPressedDateValue,\n isSelected,\n isSelectionEnd,\n isSelectionStart,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n parentElement,\n onPlaceholderChange,\n locale,\n dir,\n isHighlightedStart,\n isHighlightedEnd,\n})\n\nonMounted(() => {\n if (initialFocus.value)\n handleCalendarInitialFocus(parentElement.value)\n})\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n :as=\"as\"\n :as-child=\"asChild\"\n role=\"application\"\n :aria-label=\"fullCalendarLabel\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n >\n <div style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; white-space: nowrap; width: 1px;\">\n <div\n role=\"heading\"\n aria-level=\"2\"\n >\n {{ fullCalendarLabel }}\n </div>\n </div>\n\n <slot\n :date=\"placeholder\"\n :grid=\"grid\"\n :week-days=\"weekdays\"\n :week-starts-on=\"weekStartsOn\"\n :locale=\"locale\"\n :fixed-weeks=\"fixedWeeks\"\n :model-value=\"modelValue\"\n />\n </Primitive>\n</template>\n"],"names":["createContext","toRefs","usePrimitiveElement","useDirection","useLocale","ref","useVModel","computed","isNullish","getDefaultDate","useCalendar","useRangeCalendarState","watch","isEqualDay","isBefore","useKbd","useEventListener","onMounted","handleCalendarInitialFocus"],"mappings":"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"}
1
+ {"version":3,"file":"RangeCalendarRoot.cjs","sources":["../../src/RangeCalendar/RangeCalendarRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { type DateValue, isEqualDay } from '@internationalized/date'\n\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { type Formatter, createContext, isNullish, useDirection, useKbd, useLocale } from '@/shared'\nimport { getDefaultDate, handleCalendarInitialFocus } from '@/shared/date'\nimport { type Grid, type Matcher, type WeekDayFormat, isBefore } from '@/date'\nimport type { DateRange } from '@/shared/date'\nimport { useRangeCalendarState } from './useRangeCalendar'\nimport { useCalendar } from '@/Calendar/useCalendar'\nimport type { Direction } from '@/shared/types'\n\ntype RangeCalendarRootContext = {\n modelValue: Ref<DateRange>\n startValue: Ref<DateValue | undefined>\n endValue: Ref<DateValue | undefined>\n locale: Ref<string>\n placeholder: Ref<DateValue>\n pagedNavigation: Ref<boolean>\n preventDeselect: Ref<boolean>\n weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>\n weekdayFormat: Ref<WeekDayFormat>\n fixedWeeks: Ref<boolean>\n numberOfMonths: Ref<number>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n initialFocus: Ref<boolean>\n onPlaceholderChange: (date: DateValue) => void\n fullCalendarLabel: Ref<string>\n parentElement: Ref<HTMLElement | undefined>\n headingValue: Ref<string>\n isInvalid: Ref<boolean>\n isDateDisabled: Matcher\n isDateUnavailable?: Matcher\n isOutsideVisibleView: (date: DateValue) => boolean\n highlightedRange: Ref<{ start: DateValue, end: DateValue } | null>\n focusedValue: Ref<DateValue | undefined>\n lastPressedDateValue: Ref<DateValue | undefined>\n isSelected: (date: DateValue) => boolean\n isSelectionEnd: (date: DateValue) => boolean\n isSelectionStart: (date: DateValue) => boolean\n isHighlightedStart: (date: DateValue) => boolean\n isHighlightedEnd: (date: DateValue) => boolean\n prevPage: (prevPageFunc?: (date: DateValue) => DateValue) => void\n nextPage: (nextPageFunc?: (date: DateValue) => DateValue) => void\n isNextButtonDisabled: (nextPageFunc?: (date: DateValue) => DateValue) => boolean\n isPrevButtonDisabled: (prevPageFunc?: (date: DateValue) => DateValue) => boolean\n formatter: Formatter\n dir: Ref<Direction>\n}\n\nexport interface RangeCalendarRootProps extends PrimitiveProps {\n /** The default placeholder date */\n defaultPlaceholder?: DateValue\n /** The default value for the calendar */\n defaultValue?: DateRange\n /** The controlled checked state of the calendar. Can be bound as `v-model`. */\n modelValue?: DateRange | null\n /** The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view */\n placeholder?: DateValue\n /** When combined with `isDateUnavailable`, determines whether non-contiguous ranges, i.e. ranges containing unavailable dates, may be selected. */\n allowNonContiguousRanges?: boolean\n /** This property causes the previous and next buttons to navigate by the number of months displayed at once, rather than one month */\n pagedNavigation?: boolean\n /** Whether or not to prevent the user from deselecting a date without selecting another date first */\n preventDeselect?: boolean\n /** The day of the week to start the calendar on */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The format to use for the weekday strings provided via the weekdays slot prop */\n weekdayFormat?: WeekDayFormat\n /** The accessible label for the calendar */\n calendarLabel?: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks?: boolean\n /** The maximum date that can be selected */\n maxValue?: DateValue\n /** The minimum date that can be selected */\n minValue?: DateValue\n /** The locale to use for formatting dates */\n locale?: string\n /** The number of months to display at once */\n numberOfMonths?: number\n /** Whether or not the calendar is disabled */\n disabled?: boolean\n /** Whether or not the calendar is readonly */\n readonly?: boolean\n /** If true, the calendar will focus the selected day, today, or the first day of the month depending on what is visible when the calendar is mounted */\n initialFocus?: boolean\n /** A function that returns whether or not a date is disabled */\n isDateDisabled?: Matcher\n /** A function that returns whether or not a date is unavailable */\n isDateUnavailable?: Matcher\n /** The reading direction of the calendar when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** A function that returns the next page of the calendar. It receives the current placeholder as an argument inside the component. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** A function that returns the previous page of the calendar. It receives the current placeholder as an argument inside the component. */\n prevPage?: (placeholder: DateValue) => DateValue\n}\n\nexport type RangeCalendarRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: DateRange]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: DateValue]\n /** Event handler called whenever the start value changes */\n 'update:startValue': [date: DateValue | undefined]\n}\n\nexport const [injectRangeCalendarRootContext, provideRangeCalendarRootContext]\n = createContext<RangeCalendarRootContext>('RangeCalendarRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, toRefs, watch } from 'vue'\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { useEventListener, useVModel } from '@vueuse/core'\n\nconst props = withDefaults(defineProps<RangeCalendarRootProps>(), {\n defaultValue: () => ({ start: undefined, end: undefined }),\n as: 'div',\n pagedNavigation: false,\n preventDeselect: false,\n weekStartsOn: 0,\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n disabled: false,\n readonly: false,\n initialFocus: false,\n placeholder: undefined,\n isDateDisabled: undefined,\n isDateUnavailable: undefined,\n allowNonContiguousRanges: false,\n})\nconst emits = defineEmits<RangeCalendarRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** The current date of the placeholder */\n date: DateValue\n /** The grid of dates */\n grid: Grid<DateValue>[]\n /** The days of the week */\n weekDays: string[]\n /** The start of the week */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The calendar locale */\n locale: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks: boolean\n /** The current date range */\n modelValue: DateRange\n }) => any\n}>()\n\nconst {\n disabled,\n readonly,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n preventDeselect,\n isDateUnavailable: propsIsDateUnavailable,\n isDateDisabled: propsIsDateDisabled,\n calendarLabel,\n maxValue,\n minValue,\n dir: propDir,\n locale: propLocale,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n allowNonContiguousRanges,\n} = toRefs(props)\n\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst dir = useDirection(propDir)\nconst locale = useLocale(propLocale)\n\nconst lastPressedDateValue = ref() as Ref<DateValue | undefined>\nconst focusedValue = ref() as Ref<DateValue | undefined>\nconst isEditing = ref(false)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? { start: undefined, end: undefined },\n passive: (props.modelValue === undefined) as false,\n}) as Ref<DateRange>\n\nconst currentModelValue = computed(() => isNullish(modelValue.value) ? { start: undefined, end: undefined } : modelValue.value)\n\nconst defaultDate = getDefaultDate({\n defaultPlaceholder: props.placeholder,\n defaultValue: currentModelValue.value.start,\n locale: props.locale,\n})\n\nconst startValue = ref(currentModelValue.value.start) as Ref<DateValue | undefined>\nconst endValue = ref(currentModelValue.value.end) as Ref<DateValue | undefined>\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<DateValue>\n\nfunction onPlaceholderChange(value: DateValue) {\n placeholder.value = value.copy()\n}\n\nconst {\n fullCalendarLabel,\n headingValue,\n isDateDisabled,\n isDateUnavailable,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n grid,\n weekdays,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n formatter,\n} = useCalendar({\n locale,\n placeholder,\n weekStartsOn,\n fixedWeeks,\n numberOfMonths,\n minValue,\n maxValue,\n disabled,\n weekdayFormat,\n pagedNavigation,\n isDateDisabled: propsIsDateDisabled.value,\n isDateUnavailable: propsIsDateUnavailable.value,\n calendarLabel,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n})\n\nconst {\n isInvalid,\n isSelected,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n} = useRangeCalendarState({\n start: startValue,\n end: endValue,\n isDateDisabled,\n isDateUnavailable,\n focusedValue,\n allowNonContiguousRanges,\n})\n\nwatch(modelValue, (_modelValue, _prevValue) => {\n if ((!_prevValue.start && _modelValue?.start)\n || !_modelValue\n || !_modelValue.start\n || (startValue.value && !isEqualDay(_modelValue.start, startValue.value))\n ) {\n startValue.value = _modelValue?.start?.copy?.()\n }\n\n if ((!_prevValue.end && _modelValue.end)\n || !_modelValue\n || !_modelValue.end\n || (endValue.value && !isEqualDay(_modelValue.end, endValue.value))\n ) {\n endValue.value = _modelValue?.end?.copy?.()\n }\n})\n\nwatch(startValue, (_startValue) => {\n if (_startValue && !isEqualDay(_startValue, placeholder.value))\n onPlaceholderChange(_startValue)\n\n emits('update:startValue', _startValue)\n})\n\nwatch([startValue, endValue], ([_startValue, _endValue]) => {\n const value = currentModelValue.value\n\n if (value && value.start && value.end && _startValue && _endValue && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n\n isEditing.value = true\n if (_startValue && _endValue) {\n isEditing.value = false\n if (value.start && value.end && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n if (isBefore(_endValue, _startValue)) {\n modelValue.value = {\n start: _endValue.copy(),\n end: _startValue.copy(),\n }\n }\n else {\n modelValue.value = {\n start: _startValue.copy(),\n end: _endValue.copy(),\n }\n }\n }\n})\n\nconst kbd = useKbd()\nuseEventListener('keydown', (ev) => {\n if (ev.key === kbd.ESCAPE && isEditing.value) {\n // Abort start and end selection\n startValue.value = modelValue.value.start?.copy()\n endValue.value = modelValue.value.end?.copy()\n }\n})\n\nprovideRangeCalendarRootContext({\n isDateUnavailable,\n startValue,\n endValue,\n formatter,\n modelValue,\n placeholder,\n disabled,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n readonly,\n preventDeselect,\n fullCalendarLabel,\n headingValue,\n isInvalid,\n isDateDisabled,\n highlightedRange,\n focusedValue,\n lastPressedDateValue,\n isSelected,\n isSelectionEnd,\n isSelectionStart,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n parentElement,\n onPlaceholderChange,\n locale,\n dir,\n isHighlightedStart,\n isHighlightedEnd,\n})\n\nonMounted(() => {\n if (initialFocus.value)\n handleCalendarInitialFocus(parentElement.value)\n})\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n :as=\"as\"\n :as-child=\"asChild\"\n role=\"application\"\n :aria-label=\"fullCalendarLabel\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n >\n <div style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; white-space: nowrap; width: 1px;\">\n <div\n role=\"heading\"\n aria-level=\"2\"\n >\n {{ fullCalendarLabel }}\n </div>\n </div>\n\n <slot\n :date=\"placeholder\"\n :grid=\"grid\"\n :week-days=\"weekdays\"\n :week-starts-on=\"weekStartsOn\"\n :locale=\"locale\"\n :fixed-weeks=\"fixedWeeks\"\n :model-value=\"modelValue\"\n />\n </Primitive>\n</template>\n"],"names":["createContext","toRefs","usePrimitiveElement","useDirection","useLocale","ref","useVModel","computed","isNullish","getDefaultDate","useCalendar","useRangeCalendarState","watch","isEqualDay","isBefore","useKbd","useEventListener","onMounted","handleCalendarInitialFocus"],"mappings":"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"}
@@ -144,11 +144,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
144
144
  focusedValue,
145
145
  allowNonContiguousRanges
146
146
  });
147
- watch(modelValue, (_modelValue) => {
148
- if (!_modelValue || !_modelValue.start || startValue.value && !isEqualDay(_modelValue.start, startValue.value)) {
147
+ watch(modelValue, (_modelValue, _prevValue) => {
148
+ if (!_prevValue.start && _modelValue?.start || !_modelValue || !_modelValue.start || startValue.value && !isEqualDay(_modelValue.start, startValue.value)) {
149
149
  startValue.value = _modelValue?.start?.copy?.();
150
150
  }
151
- if (!_modelValue || !_modelValue.end || endValue.value && !isEqualDay(_modelValue.end, endValue.value)) {
151
+ if (!_prevValue.end && _modelValue.end || !_modelValue || !_modelValue.end || endValue.value && !isEqualDay(_modelValue.end, endValue.value)) {
152
152
  endValue.value = _modelValue?.end?.copy?.();
153
153
  }
154
154
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RangeCalendarRoot.js","sources":["../../src/RangeCalendar/RangeCalendarRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { type DateValue, isEqualDay } from '@internationalized/date'\n\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { type Formatter, createContext, isNullish, useDirection, useKbd, useLocale } from '@/shared'\nimport { getDefaultDate, handleCalendarInitialFocus } from '@/shared/date'\nimport { type Grid, type Matcher, type WeekDayFormat, isBefore } from '@/date'\nimport type { DateRange } from '@/shared/date'\nimport { useRangeCalendarState } from './useRangeCalendar'\nimport { useCalendar } from '@/Calendar/useCalendar'\nimport type { Direction } from '@/shared/types'\n\ntype RangeCalendarRootContext = {\n modelValue: Ref<DateRange>\n startValue: Ref<DateValue | undefined>\n endValue: Ref<DateValue | undefined>\n locale: Ref<string>\n placeholder: Ref<DateValue>\n pagedNavigation: Ref<boolean>\n preventDeselect: Ref<boolean>\n weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>\n weekdayFormat: Ref<WeekDayFormat>\n fixedWeeks: Ref<boolean>\n numberOfMonths: Ref<number>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n initialFocus: Ref<boolean>\n onPlaceholderChange: (date: DateValue) => void\n fullCalendarLabel: Ref<string>\n parentElement: Ref<HTMLElement | undefined>\n headingValue: Ref<string>\n isInvalid: Ref<boolean>\n isDateDisabled: Matcher\n isDateUnavailable?: Matcher\n isOutsideVisibleView: (date: DateValue) => boolean\n highlightedRange: Ref<{ start: DateValue, end: DateValue } | null>\n focusedValue: Ref<DateValue | undefined>\n lastPressedDateValue: Ref<DateValue | undefined>\n isSelected: (date: DateValue) => boolean\n isSelectionEnd: (date: DateValue) => boolean\n isSelectionStart: (date: DateValue) => boolean\n isHighlightedStart: (date: DateValue) => boolean\n isHighlightedEnd: (date: DateValue) => boolean\n prevPage: (prevPageFunc?: (date: DateValue) => DateValue) => void\n nextPage: (nextPageFunc?: (date: DateValue) => DateValue) => void\n isNextButtonDisabled: (nextPageFunc?: (date: DateValue) => DateValue) => boolean\n isPrevButtonDisabled: (prevPageFunc?: (date: DateValue) => DateValue) => boolean\n formatter: Formatter\n dir: Ref<Direction>\n}\n\nexport interface RangeCalendarRootProps extends PrimitiveProps {\n /** The default placeholder date */\n defaultPlaceholder?: DateValue\n /** The default value for the calendar */\n defaultValue?: DateRange\n /** The controlled checked state of the calendar. Can be bound as `v-model`. */\n modelValue?: DateRange | null\n /** The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view */\n placeholder?: DateValue\n /** When combined with `isDateUnavailable`, determines whether non-contiguous ranges, i.e. ranges containing unavailable dates, may be selected. */\n allowNonContiguousRanges?: boolean\n /** This property causes the previous and next buttons to navigate by the number of months displayed at once, rather than one month */\n pagedNavigation?: boolean\n /** Whether or not to prevent the user from deselecting a date without selecting another date first */\n preventDeselect?: boolean\n /** The day of the week to start the calendar on */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The format to use for the weekday strings provided via the weekdays slot prop */\n weekdayFormat?: WeekDayFormat\n /** The accessible label for the calendar */\n calendarLabel?: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks?: boolean\n /** The maximum date that can be selected */\n maxValue?: DateValue\n /** The minimum date that can be selected */\n minValue?: DateValue\n /** The locale to use for formatting dates */\n locale?: string\n /** The number of months to display at once */\n numberOfMonths?: number\n /** Whether or not the calendar is disabled */\n disabled?: boolean\n /** Whether or not the calendar is readonly */\n readonly?: boolean\n /** If true, the calendar will focus the selected day, today, or the first day of the month depending on what is visible when the calendar is mounted */\n initialFocus?: boolean\n /** A function that returns whether or not a date is disabled */\n isDateDisabled?: Matcher\n /** A function that returns whether or not a date is unavailable */\n isDateUnavailable?: Matcher\n /** The reading direction of the calendar when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** A function that returns the next page of the calendar. It receives the current placeholder as an argument inside the component. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** A function that returns the previous page of the calendar. It receives the current placeholder as an argument inside the component. */\n prevPage?: (placeholder: DateValue) => DateValue\n}\n\nexport type RangeCalendarRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: DateRange]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: DateValue]\n /** Event handler called whenever the start value changes */\n 'update:startValue': [date: DateValue | undefined]\n}\n\nexport const [injectRangeCalendarRootContext, provideRangeCalendarRootContext]\n = createContext<RangeCalendarRootContext>('RangeCalendarRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, toRefs, watch } from 'vue'\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { useEventListener, useVModel } from '@vueuse/core'\n\nconst props = withDefaults(defineProps<RangeCalendarRootProps>(), {\n defaultValue: () => ({ start: undefined, end: undefined }),\n as: 'div',\n pagedNavigation: false,\n preventDeselect: false,\n weekStartsOn: 0,\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n disabled: false,\n readonly: false,\n initialFocus: false,\n placeholder: undefined,\n isDateDisabled: undefined,\n isDateUnavailable: undefined,\n allowNonContiguousRanges: false,\n})\nconst emits = defineEmits<RangeCalendarRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** The current date of the placeholder */\n date: DateValue\n /** The grid of dates */\n grid: Grid<DateValue>[]\n /** The days of the week */\n weekDays: string[]\n /** The start of the week */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The calendar locale */\n locale: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks: boolean\n /** The current date range */\n modelValue: DateRange\n }) => any\n}>()\n\nconst {\n disabled,\n readonly,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n preventDeselect,\n isDateUnavailable: propsIsDateUnavailable,\n isDateDisabled: propsIsDateDisabled,\n calendarLabel,\n maxValue,\n minValue,\n dir: propDir,\n locale: propLocale,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n allowNonContiguousRanges,\n} = toRefs(props)\n\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst dir = useDirection(propDir)\nconst locale = useLocale(propLocale)\n\nconst lastPressedDateValue = ref() as Ref<DateValue | undefined>\nconst focusedValue = ref() as Ref<DateValue | undefined>\nconst isEditing = ref(false)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? { start: undefined, end: undefined },\n passive: (props.modelValue === undefined) as false,\n}) as Ref<DateRange>\n\nconst currentModelValue = computed(() => isNullish(modelValue.value) ? { start: undefined, end: undefined } : modelValue.value)\n\nconst defaultDate = getDefaultDate({\n defaultPlaceholder: props.placeholder,\n defaultValue: currentModelValue.value.start,\n locale: props.locale,\n})\n\nconst startValue = ref(currentModelValue.value.start) as Ref<DateValue | undefined>\nconst endValue = ref(currentModelValue.value.end) as Ref<DateValue | undefined>\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<DateValue>\n\nfunction onPlaceholderChange(value: DateValue) {\n placeholder.value = value.copy()\n}\n\nconst {\n fullCalendarLabel,\n headingValue,\n isDateDisabled,\n isDateUnavailable,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n grid,\n weekdays,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n formatter,\n} = useCalendar({\n locale,\n placeholder,\n weekStartsOn,\n fixedWeeks,\n numberOfMonths,\n minValue,\n maxValue,\n disabled,\n weekdayFormat,\n pagedNavigation,\n isDateDisabled: propsIsDateDisabled.value,\n isDateUnavailable: propsIsDateUnavailable.value,\n calendarLabel,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n})\n\nconst {\n isInvalid,\n isSelected,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n} = useRangeCalendarState({\n start: startValue,\n end: endValue,\n isDateDisabled,\n isDateUnavailable,\n focusedValue,\n allowNonContiguousRanges,\n})\n\nwatch(modelValue, (_modelValue) => {\n if (!_modelValue || !_modelValue.start || (startValue.value && !isEqualDay(_modelValue.start, startValue.value))) {\n startValue.value = _modelValue?.start?.copy?.()\n }\n if (!_modelValue || !_modelValue.end || (endValue.value && !isEqualDay(_modelValue.end, endValue.value))) {\n endValue.value = _modelValue?.end?.copy?.()\n }\n})\n\nwatch(startValue, (_startValue) => {\n if (_startValue && !isEqualDay(_startValue, placeholder.value))\n onPlaceholderChange(_startValue)\n\n emits('update:startValue', _startValue)\n})\n\nwatch([startValue, endValue], ([_startValue, _endValue]) => {\n const value = currentModelValue.value\n\n if (value && value.start && value.end && _startValue && _endValue && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n\n isEditing.value = true\n if (_startValue && _endValue) {\n isEditing.value = false\n if (value.start && value.end && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n if (isBefore(_endValue, _startValue)) {\n modelValue.value = {\n start: _endValue.copy(),\n end: _startValue.copy(),\n }\n }\n else {\n modelValue.value = {\n start: _startValue.copy(),\n end: _endValue.copy(),\n }\n }\n }\n})\n\nconst kbd = useKbd()\nuseEventListener('keydown', (ev) => {\n if (ev.key === kbd.ESCAPE && isEditing.value) {\n // Abort start and end selection\n startValue.value = modelValue.value.start?.copy()\n endValue.value = modelValue.value.end?.copy()\n }\n})\n\nprovideRangeCalendarRootContext({\n isDateUnavailable,\n startValue,\n endValue,\n formatter,\n modelValue,\n placeholder,\n disabled,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n readonly,\n preventDeselect,\n fullCalendarLabel,\n headingValue,\n isInvalid,\n isDateDisabled,\n highlightedRange,\n focusedValue,\n lastPressedDateValue,\n isSelected,\n isSelectionEnd,\n isSelectionStart,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n parentElement,\n onPlaceholderChange,\n locale,\n dir,\n isHighlightedStart,\n isHighlightedEnd,\n})\n\nonMounted(() => {\n if (initialFocus.value)\n handleCalendarInitialFocus(parentElement.value)\n})\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n :as=\"as\"\n :as-child=\"asChild\"\n role=\"application\"\n :aria-label=\"fullCalendarLabel\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n >\n <div style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; white-space: nowrap; width: 1px;\">\n <div\n role=\"heading\"\n aria-level=\"2\"\n >\n {{ fullCalendarLabel }}\n </div>\n </div>\n\n <slot\n :date=\"placeholder\"\n :grid=\"grid\"\n :week-days=\"weekdays\"\n :week-starts-on=\"weekStartsOn\"\n :locale=\"locale\"\n :fixed-weeks=\"fixedWeeks\"\n :model-value=\"modelValue\"\n />\n </Primitive>\n</template>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RangeCalendarRoot.js","sources":["../../src/RangeCalendar/RangeCalendarRoot.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { type DateValue, isEqualDay } from '@internationalized/date'\n\nimport type { Ref } from 'vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { type Formatter, createContext, isNullish, useDirection, useKbd, useLocale } from '@/shared'\nimport { getDefaultDate, handleCalendarInitialFocus } from '@/shared/date'\nimport { type Grid, type Matcher, type WeekDayFormat, isBefore } from '@/date'\nimport type { DateRange } from '@/shared/date'\nimport { useRangeCalendarState } from './useRangeCalendar'\nimport { useCalendar } from '@/Calendar/useCalendar'\nimport type { Direction } from '@/shared/types'\n\ntype RangeCalendarRootContext = {\n modelValue: Ref<DateRange>\n startValue: Ref<DateValue | undefined>\n endValue: Ref<DateValue | undefined>\n locale: Ref<string>\n placeholder: Ref<DateValue>\n pagedNavigation: Ref<boolean>\n preventDeselect: Ref<boolean>\n weekStartsOn: Ref<0 | 1 | 2 | 3 | 4 | 5 | 6>\n weekdayFormat: Ref<WeekDayFormat>\n fixedWeeks: Ref<boolean>\n numberOfMonths: Ref<number>\n disabled: Ref<boolean>\n readonly: Ref<boolean>\n initialFocus: Ref<boolean>\n onPlaceholderChange: (date: DateValue) => void\n fullCalendarLabel: Ref<string>\n parentElement: Ref<HTMLElement | undefined>\n headingValue: Ref<string>\n isInvalid: Ref<boolean>\n isDateDisabled: Matcher\n isDateUnavailable?: Matcher\n isOutsideVisibleView: (date: DateValue) => boolean\n highlightedRange: Ref<{ start: DateValue, end: DateValue } | null>\n focusedValue: Ref<DateValue | undefined>\n lastPressedDateValue: Ref<DateValue | undefined>\n isSelected: (date: DateValue) => boolean\n isSelectionEnd: (date: DateValue) => boolean\n isSelectionStart: (date: DateValue) => boolean\n isHighlightedStart: (date: DateValue) => boolean\n isHighlightedEnd: (date: DateValue) => boolean\n prevPage: (prevPageFunc?: (date: DateValue) => DateValue) => void\n nextPage: (nextPageFunc?: (date: DateValue) => DateValue) => void\n isNextButtonDisabled: (nextPageFunc?: (date: DateValue) => DateValue) => boolean\n isPrevButtonDisabled: (prevPageFunc?: (date: DateValue) => DateValue) => boolean\n formatter: Formatter\n dir: Ref<Direction>\n}\n\nexport interface RangeCalendarRootProps extends PrimitiveProps {\n /** The default placeholder date */\n defaultPlaceholder?: DateValue\n /** The default value for the calendar */\n defaultValue?: DateRange\n /** The controlled checked state of the calendar. Can be bound as `v-model`. */\n modelValue?: DateRange | null\n /** The placeholder date, which is used to determine what month to display when no date is selected. This updates as the user navigates the calendar and can be used to programmatically control the calendar view */\n placeholder?: DateValue\n /** When combined with `isDateUnavailable`, determines whether non-contiguous ranges, i.e. ranges containing unavailable dates, may be selected. */\n allowNonContiguousRanges?: boolean\n /** This property causes the previous and next buttons to navigate by the number of months displayed at once, rather than one month */\n pagedNavigation?: boolean\n /** Whether or not to prevent the user from deselecting a date without selecting another date first */\n preventDeselect?: boolean\n /** The day of the week to start the calendar on */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The format to use for the weekday strings provided via the weekdays slot prop */\n weekdayFormat?: WeekDayFormat\n /** The accessible label for the calendar */\n calendarLabel?: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks?: boolean\n /** The maximum date that can be selected */\n maxValue?: DateValue\n /** The minimum date that can be selected */\n minValue?: DateValue\n /** The locale to use for formatting dates */\n locale?: string\n /** The number of months to display at once */\n numberOfMonths?: number\n /** Whether or not the calendar is disabled */\n disabled?: boolean\n /** Whether or not the calendar is readonly */\n readonly?: boolean\n /** If true, the calendar will focus the selected day, today, or the first day of the month depending on what is visible when the calendar is mounted */\n initialFocus?: boolean\n /** A function that returns whether or not a date is disabled */\n isDateDisabled?: Matcher\n /** A function that returns whether or not a date is unavailable */\n isDateUnavailable?: Matcher\n /** The reading direction of the calendar when applicable. <br> If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode. */\n dir?: Direction\n /** A function that returns the next page of the calendar. It receives the current placeholder as an argument inside the component. */\n nextPage?: (placeholder: DateValue) => DateValue\n /** A function that returns the previous page of the calendar. It receives the current placeholder as an argument inside the component. */\n prevPage?: (placeholder: DateValue) => DateValue\n}\n\nexport type RangeCalendarRootEmits = {\n /** Event handler called whenever the model value changes */\n 'update:modelValue': [date: DateRange]\n /** Event handler called whenever the placeholder value changes */\n 'update:placeholder': [date: DateValue]\n /** Event handler called whenever the start value changes */\n 'update:startValue': [date: DateValue | undefined]\n}\n\nexport const [injectRangeCalendarRootContext, provideRangeCalendarRootContext]\n = createContext<RangeCalendarRootContext>('RangeCalendarRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref, toRefs, watch } from 'vue'\nimport { Primitive, usePrimitiveElement } from '@/Primitive'\nimport { useEventListener, useVModel } from '@vueuse/core'\n\nconst props = withDefaults(defineProps<RangeCalendarRootProps>(), {\n defaultValue: () => ({ start: undefined, end: undefined }),\n as: 'div',\n pagedNavigation: false,\n preventDeselect: false,\n weekStartsOn: 0,\n weekdayFormat: 'narrow',\n fixedWeeks: false,\n numberOfMonths: 1,\n disabled: false,\n readonly: false,\n initialFocus: false,\n placeholder: undefined,\n isDateDisabled: undefined,\n isDateUnavailable: undefined,\n allowNonContiguousRanges: false,\n})\nconst emits = defineEmits<RangeCalendarRootEmits>()\n\ndefineSlots<{\n default: (props: {\n /** The current date of the placeholder */\n date: DateValue\n /** The grid of dates */\n grid: Grid<DateValue>[]\n /** The days of the week */\n weekDays: string[]\n /** The start of the week */\n weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** The calendar locale */\n locale: string\n /** Whether or not to always display 6 weeks in the calendar */\n fixedWeeks: boolean\n /** The current date range */\n modelValue: DateRange\n }) => any\n}>()\n\nconst {\n disabled,\n readonly,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n preventDeselect,\n isDateUnavailable: propsIsDateUnavailable,\n isDateDisabled: propsIsDateDisabled,\n calendarLabel,\n maxValue,\n minValue,\n dir: propDir,\n locale: propLocale,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n allowNonContiguousRanges,\n} = toRefs(props)\n\nconst { primitiveElement, currentElement: parentElement }\n = usePrimitiveElement()\nconst dir = useDirection(propDir)\nconst locale = useLocale(propLocale)\n\nconst lastPressedDateValue = ref() as Ref<DateValue | undefined>\nconst focusedValue = ref() as Ref<DateValue | undefined>\nconst isEditing = ref(false)\n\nconst modelValue = useVModel(props, 'modelValue', emits, {\n defaultValue: props.defaultValue ?? { start: undefined, end: undefined },\n passive: (props.modelValue === undefined) as false,\n}) as Ref<DateRange>\n\nconst currentModelValue = computed(() => isNullish(modelValue.value) ? { start: undefined, end: undefined } : modelValue.value)\n\nconst defaultDate = getDefaultDate({\n defaultPlaceholder: props.placeholder,\n defaultValue: currentModelValue.value.start,\n locale: props.locale,\n})\n\nconst startValue = ref(currentModelValue.value.start) as Ref<DateValue | undefined>\nconst endValue = ref(currentModelValue.value.end) as Ref<DateValue | undefined>\n\nconst placeholder = useVModel(props, 'placeholder', emits, {\n defaultValue: props.defaultPlaceholder ?? defaultDate.copy(),\n passive: (props.placeholder === undefined) as false,\n}) as Ref<DateValue>\n\nfunction onPlaceholderChange(value: DateValue) {\n placeholder.value = value.copy()\n}\n\nconst {\n fullCalendarLabel,\n headingValue,\n isDateDisabled,\n isDateUnavailable,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n grid,\n weekdays,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n formatter,\n} = useCalendar({\n locale,\n placeholder,\n weekStartsOn,\n fixedWeeks,\n numberOfMonths,\n minValue,\n maxValue,\n disabled,\n weekdayFormat,\n pagedNavigation,\n isDateDisabled: propsIsDateDisabled.value,\n isDateUnavailable: propsIsDateUnavailable.value,\n calendarLabel,\n nextPage: propsNextPage,\n prevPage: propsPrevPage,\n})\n\nconst {\n isInvalid,\n isSelected,\n highlightedRange,\n isSelectionStart,\n isSelectionEnd,\n isHighlightedStart,\n isHighlightedEnd,\n} = useRangeCalendarState({\n start: startValue,\n end: endValue,\n isDateDisabled,\n isDateUnavailable,\n focusedValue,\n allowNonContiguousRanges,\n})\n\nwatch(modelValue, (_modelValue, _prevValue) => {\n if ((!_prevValue.start && _modelValue?.start)\n || !_modelValue\n || !_modelValue.start\n || (startValue.value && !isEqualDay(_modelValue.start, startValue.value))\n ) {\n startValue.value = _modelValue?.start?.copy?.()\n }\n\n if ((!_prevValue.end && _modelValue.end)\n || !_modelValue\n || !_modelValue.end\n || (endValue.value && !isEqualDay(_modelValue.end, endValue.value))\n ) {\n endValue.value = _modelValue?.end?.copy?.()\n }\n})\n\nwatch(startValue, (_startValue) => {\n if (_startValue && !isEqualDay(_startValue, placeholder.value))\n onPlaceholderChange(_startValue)\n\n emits('update:startValue', _startValue)\n})\n\nwatch([startValue, endValue], ([_startValue, _endValue]) => {\n const value = currentModelValue.value\n\n if (value && value.start && value.end && _startValue && _endValue && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n\n isEditing.value = true\n if (_startValue && _endValue) {\n isEditing.value = false\n if (value.start && value.end && isEqualDay(value.start, _startValue) && isEqualDay(value.end, _endValue))\n return\n if (isBefore(_endValue, _startValue)) {\n modelValue.value = {\n start: _endValue.copy(),\n end: _startValue.copy(),\n }\n }\n else {\n modelValue.value = {\n start: _startValue.copy(),\n end: _endValue.copy(),\n }\n }\n }\n})\n\nconst kbd = useKbd()\nuseEventListener('keydown', (ev) => {\n if (ev.key === kbd.ESCAPE && isEditing.value) {\n // Abort start and end selection\n startValue.value = modelValue.value.start?.copy()\n endValue.value = modelValue.value.end?.copy()\n }\n})\n\nprovideRangeCalendarRootContext({\n isDateUnavailable,\n startValue,\n endValue,\n formatter,\n modelValue,\n placeholder,\n disabled,\n initialFocus,\n pagedNavigation,\n weekStartsOn,\n weekdayFormat,\n fixedWeeks,\n numberOfMonths,\n readonly,\n preventDeselect,\n fullCalendarLabel,\n headingValue,\n isInvalid,\n isDateDisabled,\n highlightedRange,\n focusedValue,\n lastPressedDateValue,\n isSelected,\n isSelectionEnd,\n isSelectionStart,\n isNextButtonDisabled,\n isPrevButtonDisabled,\n isOutsideVisibleView,\n nextPage,\n prevPage,\n parentElement,\n onPlaceholderChange,\n locale,\n dir,\n isHighlightedStart,\n isHighlightedEnd,\n})\n\nonMounted(() => {\n if (initialFocus.value)\n handleCalendarInitialFocus(parentElement.value)\n})\n</script>\n\n<template>\n <Primitive\n ref=\"primitiveElement\"\n :as=\"as\"\n :as-child=\"asChild\"\n role=\"application\"\n :aria-label=\"fullCalendarLabel\"\n :data-readonly=\"readonly ? '' : undefined\"\n :data-disabled=\"disabled ? '' : undefined\"\n :data-invalid=\"isInvalid ? '' : undefined\"\n :dir=\"dir\"\n >\n <div style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; white-space: nowrap; width: 1px;\">\n <div\n role=\"heading\"\n aria-level=\"2\"\n >\n {{ fullCalendarLabel }}\n </div>\n </div>\n\n <slot\n :date=\"placeholder\"\n :grid=\"grid\"\n :week-days=\"weekdays\"\n :week-starts-on=\"weekStartsOn\"\n :locale=\"locale\"\n :fixed-weeks=\"fixedWeeks\"\n :model-value=\"modelValue\"\n />\n </Primitive>\n</template>\n"],"names":[],"mappings":"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"}
@@ -65,6 +65,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
65
65
  const selectedItemText = vue.ref();
66
66
  const isPositioned = vue.ref(false);
67
67
  const firstValidItemFoundRef = vue.ref(false);
68
+ const firstSelectedItemInArrayFoundRef = vue.ref(false);
68
69
  function focusSelectedItem() {
69
70
  if (selectedItem.value && content.value)
70
71
  Menu_utils.focusFirst([selectedItem.value, content.value]);
@@ -148,15 +149,24 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
148
149
  itemRefCallback: (node, value, disabled) => {
149
150
  const isFirstValidItem = !firstValidItemFoundRef.value && !disabled;
150
151
  const isSelectedItem = Select_utils.valueComparator(rootContext.modelValue.value, value, rootContext.by);
151
- if (isFirstValidItem) {
152
- if (rootContext.isEmptyModelValue.value) {
153
- firstValidItemFoundRef.value = true;
152
+ if (rootContext.multiple.value) {
153
+ if (firstSelectedItemInArrayFoundRef.value) {
154
+ return;
155
+ }
156
+ if (isSelectedItem || isFirstValidItem) {
154
157
  selectedItem.value = node;
155
- } else if (isSelectedItem) {
156
- firstValidItemFoundRef.value = true;
158
+ if (isSelectedItem) {
159
+ firstSelectedItemInArrayFoundRef.value = true;
160
+ }
161
+ }
162
+ } else {
163
+ if (isSelectedItem || isFirstValidItem) {
157
164
  selectedItem.value = node;
158
165
  }
159
166
  }
167
+ if (isFirstValidItem) {
168
+ firstValidItemFoundRef.value = true;
169
+ }
160
170
  },
161
171
  selectedItem,
162
172
  selectedItemText,
@@ -1 +1 @@
1
- {"version":3,"file":"SelectContentImpl.cjs","sources":["../../src/Select/SelectContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {\n ComponentPublicInstance,\n Ref,\n} from 'vue'\nimport type { PopperContentProps } from '@/Popper'\nimport type { PointerDownOutsideEvent } from '@/DismissableLayer'\nimport {\n createContext,\n useFocusGuards,\n useForwardProps,\n useHideOthers,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\nimport type { AcceptableValue } from '@/shared/types'\nimport { valueComparator } from './utils'\nimport { useCollection } from '@/Collection'\n\nexport interface SelectContentContext {\n content?: Ref<HTMLElement | undefined>\n viewport?: Ref<HTMLElement | undefined>\n onViewportChange: (node: HTMLElement | undefined) => void\n itemRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n selectedItem?: Ref<HTMLElement | undefined>\n onItemLeave?: () => void\n itemTextRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n focusSelectedItem?: () => void\n selectedItemText?: Ref<HTMLElement | undefined>\n position?: 'item-aligned' | 'popper'\n isPositioned?: Ref<boolean>\n searchRef?: Ref<string>\n}\n\nexport const SelectContentDefaultContextValue: SelectContentContext = {\n onViewportChange: () => {},\n itemTextRefCallback: () => {},\n itemRefCallback: () => {},\n}\n\nexport type SelectContentImplEmits = {\n closeAutoFocus: [event: Event]\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n escapeKeyDown: [event: KeyboardEvent]\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n pointerDownOutside: [event: PointerDownOutsideEvent]\n}\n\nexport interface SelectContentImplProps extends PopperContentProps {\n /**\n * The positioning mode to use\n *\n * `item-aligned (default)` - behaves similarly to a native MacOS menu by positioning content relative to the active item. <br>\n * `popper` - positions content in the same way as our other primitives, for example `Popover` or `DropdownMenu`.\n */\n position?: 'item-aligned' | 'popper'\n /**\n * The document.body will be lock, and scrolling will be disabled.\n *\n * @defaultValue true\n */\n bodyLock?: boolean\n}\n\nexport const [injectSelectContentContext, provideSelectContentContext]\n = createContext<SelectContentContext>('SelectContent')\n</script>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport { unrefElement } from '@vueuse/core'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport SelectItemAlignedPosition from './SelectItemAlignedPosition.vue'\nimport SelectPopperPosition from './SelectPopperPosition.vue'\nimport { FocusScope } from '@/FocusScope'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { focusFirst } from '@/Menu/utils'\n\nconst props = withDefaults(defineProps<SelectContentImplProps>(), {\n align: 'start',\n position: 'item-aligned',\n bodyLock: true,\n})\nconst emits = defineEmits<SelectContentImplEmits>()\n\nconst rootContext = injectSelectRootContext()\n\nuseFocusGuards()\nuseBodyScrollLock(props.bodyLock)\nconst { CollectionSlot, getItems } = useCollection()\n\nconst content = ref<HTMLElement>()\nuseHideOthers(content)\n\nconst { search, handleTypeaheadSearch } = useTypeahead()\n\nconst viewport = ref<HTMLElement>()\nconst selectedItem = ref<HTMLElement>()\nconst selectedItemText = ref<HTMLElement>()\nconst isPositioned = ref(false)\nconst firstValidItemFoundRef = ref(false)\n\nfunction focusSelectedItem() {\n if (selectedItem.value && content.value)\n focusFirst([selectedItem.value, content.value])\n}\n\nwatch(isPositioned, () => {\n focusSelectedItem()\n})\n\n// prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n// and close on `pointerup` outside.\nconst { onOpenChange, triggerPointerDownPosRef } = rootContext\nwatchEffect((cleanupFn) => {\n if (!content.value)\n return\n let pointerMoveDelta = { x: 0, y: 0 }\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(\n Math.round(event.pageX) - (triggerPointerDownPosRef.value?.x ?? 0),\n ),\n y: Math.abs(\n Math.round(event.pageY) - (triggerPointerDownPosRef.value?.y ?? 0),\n ),\n }\n }\n const handlePointerUp = (event: PointerEvent) => {\n // Prevent options from being untappable on touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return\n\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault()\n }\n else {\n // otherwise, if the event was outside the content, close.\n if (!content.value?.contains(event.target as HTMLElement))\n onOpenChange(false)\n }\n document.removeEventListener('pointermove', handlePointerMove)\n triggerPointerDownPosRef.value = null\n }\n\n if (triggerPointerDownPosRef.value !== null) {\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp, {\n capture: true,\n once: true,\n })\n }\n\n cleanupFn(() => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp, {\n capture: true,\n })\n })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n\n if (!isModifierKey && event.key.length === 1)\n handleTypeaheadSearch(event.key, getItems())\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const collectionItems = getItems().map(i => i.ref)\n let candidateNodes = [...collectionItems]\n\n if (['ArrowUp', 'End'].includes(event.key))\n candidateNodes = candidateNodes.slice().reverse()\n\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as HTMLElement\n const currentIndex = candidateNodes.indexOf(currentElement)\n candidateNodes = candidateNodes.slice(currentIndex + 1)\n }\n setTimeout(() => focusFirst(candidateNodes))\n event.preventDefault()\n }\n}\n\nconst pickedProps = computed(() => {\n if (props.position === 'popper')\n return props\n else return {}\n})\n\nconst forwardedProps = useForwardProps(pickedProps.value)\n\nprovideSelectContentContext({\n content,\n viewport,\n onViewportChange: (node) => {\n viewport.value = node\n },\n itemRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (isFirstValidItem) {\n if (rootContext.isEmptyModelValue.value) {\n firstValidItemFoundRef.value = true\n selectedItem.value = node\n }\n else if (isSelectedItem) {\n firstValidItemFoundRef.value = true\n selectedItem.value = node\n }\n }\n },\n selectedItem,\n selectedItemText,\n onItemLeave: () => {\n content.value?.focus()\n },\n itemTextRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (isSelectedItem || isFirstValidItem)\n selectedItemText.value = node\n },\n focusSelectedItem,\n position: props.position,\n isPositioned,\n searchRef: search,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <FocusScope\n as-child\n @mount-auto-focus.prevent\n @unmount-auto-focus=\"\n (event) => {\n emits('closeAutoFocus', event);\n if (event.defaultPrevented) return;\n rootContext.triggerElement.value?.focus({ preventScroll: true });\n event.preventDefault();\n }\n \"\n >\n <DismissableLayer\n as-child\n disable-outside-pointer-events\n @focus-outside.prevent\n @dismiss=\"rootContext.onOpenChange(false)\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n >\n <component\n :is=\"\n position === 'popper'\n ? SelectPopperPosition\n : SelectItemAlignedPosition\n \"\n v-bind=\"{ ...$attrs, ...forwardedProps }\"\n :id=\"rootContext.contentId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n content = unrefElement(vnode) as HTMLElement\n return undefined\n }\n \"\n role=\"listbox\"\n :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n :dir=\"rootContext.dir.value\"\n :style=\"{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n }\"\n @contextmenu.prevent\n @placed=\"isPositioned = true\"\n @keydown=\"(handleKeyDown as any)\"\n >\n <slot />\n </component>\n </DismissableLayer>\n </FocusScope>\n </CollectionSlot>\n</template>\n"],"names":["createContext","injectSelectRootContext","useFocusGuards","useBodyScrollLock","useCollection","ref","useHideOthers","useTypeahead","focusFirst","watch","watchEffect","computed","useForwardProps","valueComparator"],"mappings":"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"}
1
+ {"version":3,"file":"SelectContentImpl.cjs","sources":["../../src/Select/SelectContentImpl.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type {\n ComponentPublicInstance,\n Ref,\n} from 'vue'\nimport type { PopperContentProps } from '@/Popper'\nimport type { PointerDownOutsideEvent } from '@/DismissableLayer'\nimport {\n createContext,\n useFocusGuards,\n useForwardProps,\n useHideOthers,\n useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\nimport type { AcceptableValue } from '@/shared/types'\nimport { valueComparator } from './utils'\nimport { useCollection } from '@/Collection'\n\nexport interface SelectContentContext {\n content?: Ref<HTMLElement | undefined>\n viewport?: Ref<HTMLElement | undefined>\n onViewportChange: (node: HTMLElement | undefined) => void\n itemRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n selectedItem?: Ref<HTMLElement | undefined>\n onItemLeave?: () => void\n itemTextRefCallback: (\n node: HTMLElement | undefined,\n value: AcceptableValue,\n disabled: boolean\n ) => void\n focusSelectedItem?: () => void\n selectedItemText?: Ref<HTMLElement | undefined>\n position?: 'item-aligned' | 'popper'\n isPositioned?: Ref<boolean>\n searchRef?: Ref<string>\n}\n\nexport const SelectContentDefaultContextValue: SelectContentContext = {\n onViewportChange: () => {},\n itemTextRefCallback: () => {},\n itemRefCallback: () => {},\n}\n\nexport type SelectContentImplEmits = {\n closeAutoFocus: [event: Event]\n /**\n * Event handler called when the escape key is down.\n * Can be prevented.\n */\n escapeKeyDown: [event: KeyboardEvent]\n /**\n * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n * Can be prevented.\n */\n pointerDownOutside: [event: PointerDownOutsideEvent]\n}\n\nexport interface SelectContentImplProps extends PopperContentProps {\n /**\n * The positioning mode to use\n *\n * `item-aligned (default)` - behaves similarly to a native MacOS menu by positioning content relative to the active item. <br>\n * `popper` - positions content in the same way as our other primitives, for example `Popover` or `DropdownMenu`.\n */\n position?: 'item-aligned' | 'popper'\n /**\n * The document.body will be lock, and scrolling will be disabled.\n *\n * @defaultValue true\n */\n bodyLock?: boolean\n}\n\nexport const [injectSelectContentContext, provideSelectContentContext]\n = createContext<SelectContentContext>('SelectContent')\n</script>\n\n<script setup lang=\"ts\">\nimport {\n computed,\n ref,\n watch,\n watchEffect,\n} from 'vue'\nimport { unrefElement } from '@vueuse/core'\nimport { injectSelectRootContext } from './SelectRoot.vue'\nimport SelectItemAlignedPosition from './SelectItemAlignedPosition.vue'\nimport SelectPopperPosition from './SelectPopperPosition.vue'\nimport { FocusScope } from '@/FocusScope'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { focusFirst } from '@/Menu/utils'\n\nconst props = withDefaults(defineProps<SelectContentImplProps>(), {\n align: 'start',\n position: 'item-aligned',\n bodyLock: true,\n})\nconst emits = defineEmits<SelectContentImplEmits>()\n\nconst rootContext = injectSelectRootContext()\n\nuseFocusGuards()\nuseBodyScrollLock(props.bodyLock)\nconst { CollectionSlot, getItems } = useCollection()\n\nconst content = ref<HTMLElement>()\nuseHideOthers(content)\n\nconst { search, handleTypeaheadSearch } = useTypeahead()\n\nconst viewport = ref<HTMLElement>()\nconst selectedItem = ref<HTMLElement>()\nconst selectedItemText = ref<HTMLElement>()\nconst isPositioned = ref(false)\nconst firstValidItemFoundRef = ref(false)\nconst firstSelectedItemInArrayFoundRef = ref(false)\n\nfunction focusSelectedItem() {\n if (selectedItem.value && content.value)\n focusFirst([selectedItem.value, content.value])\n}\n\nwatch(isPositioned, () => {\n focusSelectedItem()\n})\n\n// prevent selecting items on `pointerup` in some cases after opening from `pointerdown`\n// and close on `pointerup` outside.\nconst { onOpenChange, triggerPointerDownPosRef } = rootContext\nwatchEffect((cleanupFn) => {\n if (!content.value)\n return\n let pointerMoveDelta = { x: 0, y: 0 }\n\n const handlePointerMove = (event: PointerEvent) => {\n pointerMoveDelta = {\n x: Math.abs(\n Math.round(event.pageX) - (triggerPointerDownPosRef.value?.x ?? 0),\n ),\n y: Math.abs(\n Math.round(event.pageY) - (triggerPointerDownPosRef.value?.y ?? 0),\n ),\n }\n }\n const handlePointerUp = (event: PointerEvent) => {\n // Prevent options from being untappable on touch devices\n // https://github.com/unovue/reka-ui/issues/804\n if (event.pointerType === 'touch')\n return\n\n // If the pointer hasn't moved by a certain threshold then we prevent selecting item on `pointerup`.\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault()\n }\n else {\n // otherwise, if the event was outside the content, close.\n if (!content.value?.contains(event.target as HTMLElement))\n onOpenChange(false)\n }\n document.removeEventListener('pointermove', handlePointerMove)\n triggerPointerDownPosRef.value = null\n }\n\n if (triggerPointerDownPosRef.value !== null) {\n document.addEventListener('pointermove', handlePointerMove)\n document.addEventListener('pointerup', handlePointerUp, {\n capture: true,\n once: true,\n })\n }\n\n cleanupFn(() => {\n document.removeEventListener('pointermove', handlePointerMove)\n document.removeEventListener('pointerup', handlePointerUp, {\n capture: true,\n })\n })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n\n // select should not be navigated using tab key so we prevent it\n if (event.key === 'Tab')\n event.preventDefault()\n\n if (!isModifierKey && event.key.length === 1)\n handleTypeaheadSearch(event.key, getItems())\n\n if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n const collectionItems = getItems().map(i => i.ref)\n let candidateNodes = [...collectionItems]\n\n if (['ArrowUp', 'End'].includes(event.key))\n candidateNodes = candidateNodes.slice().reverse()\n\n if (['ArrowUp', 'ArrowDown'].includes(event.key)) {\n const currentElement = event.target as HTMLElement\n const currentIndex = candidateNodes.indexOf(currentElement)\n candidateNodes = candidateNodes.slice(currentIndex + 1)\n }\n setTimeout(() => focusFirst(candidateNodes))\n event.preventDefault()\n }\n}\n\nconst pickedProps = computed(() => {\n if (props.position === 'popper')\n return props\n else return {}\n})\n\nconst forwardedProps = useForwardProps(pickedProps.value)\n\nprovideSelectContentContext({\n content,\n viewport,\n onViewportChange: (node) => {\n viewport.value = node\n },\n itemRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (rootContext.multiple.value) {\n if (firstSelectedItemInArrayFoundRef.value) {\n return\n }\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n\n // make sure to keep the first item highlighted when `multiple`\n if (isSelectedItem) {\n firstSelectedItemInArrayFoundRef.value = true\n }\n }\n }\n else {\n if (isSelectedItem || isFirstValidItem) {\n selectedItem.value = node\n }\n }\n\n if (isFirstValidItem) {\n firstValidItemFoundRef.value = true\n }\n },\n selectedItem,\n selectedItemText,\n onItemLeave: () => {\n content.value?.focus()\n },\n itemTextRefCallback: (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.value && !disabled\n const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by)\n\n if (isSelectedItem || isFirstValidItem)\n selectedItemText.value = node\n },\n focusSelectedItem,\n position: props.position,\n isPositioned,\n searchRef: search,\n})\n</script>\n\n<template>\n <CollectionSlot>\n <FocusScope\n as-child\n @mount-auto-focus.prevent\n @unmount-auto-focus=\"\n (event) => {\n emits('closeAutoFocus', event);\n if (event.defaultPrevented) return;\n rootContext.triggerElement.value?.focus({ preventScroll: true });\n event.preventDefault();\n }\n \"\n >\n <DismissableLayer\n as-child\n disable-outside-pointer-events\n @focus-outside.prevent\n @dismiss=\"rootContext.onOpenChange(false)\"\n @escape-key-down=\"emits('escapeKeyDown', $event)\"\n @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n >\n <component\n :is=\"\n position === 'popper'\n ? SelectPopperPosition\n : SelectItemAlignedPosition\n \"\n v-bind=\"{ ...$attrs, ...forwardedProps }\"\n :id=\"rootContext.contentId\"\n :ref=\"\n (vnode: ComponentPublicInstance) => {\n content = unrefElement(vnode) as HTMLElement\n return undefined\n }\n \"\n role=\"listbox\"\n :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n :dir=\"rootContext.dir.value\"\n :style=\"{\n // flex layout so we can place the scroll buttons properly\n display: 'flex',\n flexDirection: 'column',\n // reset the outline by default as the content MAY get focused\n outline: 'none',\n }\"\n @contextmenu.prevent\n @placed=\"isPositioned = true\"\n @keydown=\"(handleKeyDown as any)\"\n >\n <slot />\n </component>\n </DismissableLayer>\n </FocusScope>\n </CollectionSlot>\n</template>\n"],"names":["createContext","injectSelectRootContext","useFocusGuards","useBodyScrollLock","useCollection","ref","useHideOthers","useTypeahead","focusFirst","watch","watchEffect","computed","useForwardProps","valueComparator"],"mappings":"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"}
@@ -63,6 +63,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
63
63
  const selectedItemText = ref();
64
64
  const isPositioned = ref(false);
65
65
  const firstValidItemFoundRef = ref(false);
66
+ const firstSelectedItemInArrayFoundRef = ref(false);
66
67
  function focusSelectedItem() {
67
68
  if (selectedItem.value && content.value)
68
69
  focusFirst([selectedItem.value, content.value]);
@@ -146,15 +147,24 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
146
147
  itemRefCallback: (node, value, disabled) => {
147
148
  const isFirstValidItem = !firstValidItemFoundRef.value && !disabled;
148
149
  const isSelectedItem = valueComparator(rootContext.modelValue.value, value, rootContext.by);
149
- if (isFirstValidItem) {
150
- if (rootContext.isEmptyModelValue.value) {
151
- firstValidItemFoundRef.value = true;
150
+ if (rootContext.multiple.value) {
151
+ if (firstSelectedItemInArrayFoundRef.value) {
152
+ return;
153
+ }
154
+ if (isSelectedItem || isFirstValidItem) {
152
155
  selectedItem.value = node;
153
- } else if (isSelectedItem) {
154
- firstValidItemFoundRef.value = true;
156
+ if (isSelectedItem) {
157
+ firstSelectedItemInArrayFoundRef.value = true;
158
+ }
159
+ }
160
+ } else {
161
+ if (isSelectedItem || isFirstValidItem) {
155
162
  selectedItem.value = node;
156
163
  }
157
164
  }
165
+ if (isFirstValidItem) {
166
+ firstValidItemFoundRef.value = true;
167
+ }
158
168
  },
159
169
  selectedItem,
160
170
  selectedItemText,