@coopdigital/react 0.49.1 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/dist/components/Button/Button.js +2 -2
  2. package/dist/components/Button/index.js +5 -0
  3. package/dist/components/Card/Card.js +4 -4
  4. package/dist/components/Checkbox/Checkbox.d.ts +7 -1
  5. package/dist/components/Checkbox/Checkbox.js +4 -0
  6. package/dist/components/DatePicker/DatePicker.d.ts +61 -0
  7. package/dist/components/DatePicker/DatePicker.js +135 -0
  8. package/dist/components/DatePicker/datepicker-utils.d.ts +68 -0
  9. package/dist/components/DatePicker/datepicker-utils.js +215 -0
  10. package/dist/components/DatePicker/index.d.ts +4 -0
  11. package/dist/components/Field/Field.js +29 -26
  12. package/dist/components/Field/index.js +6 -0
  13. package/dist/components/Pill/Pill.js +2 -2
  14. package/dist/components/Popover/Popover.d.ts +74 -0
  15. package/dist/components/Popover/Popover.js +75 -0
  16. package/dist/components/Popover/index.d.ts +4 -0
  17. package/dist/components/Popover/index.js +5 -0
  18. package/dist/components/Radio/Radio.d.ts +7 -1
  19. package/dist/components/Radio/Radio.js +4 -0
  20. package/dist/components/Searchbox/Searchbox.js +4 -3
  21. package/dist/components/Select/Select.d.ts +3 -0
  22. package/dist/components/Select/Select.js +4 -1
  23. package/dist/components/Signpost/Signpost.js +2 -2
  24. package/dist/components/Tag/Tag.js +2 -2
  25. package/dist/components/TextInput/TextInput.d.ts +6 -1
  26. package/dist/components/TextInput/TextInput.js +3 -0
  27. package/dist/components/Textarea/Textarea.d.ts +8 -5
  28. package/dist/components/Textarea/Textarea.js +5 -4
  29. package/dist/hooks/useSlots.js +3 -3
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.js +2 -0
  32. package/dist/node_modules/@date-fns/tz/date/index.js +83 -0
  33. package/dist/node_modules/@date-fns/tz/date/mini.js +235 -0
  34. package/dist/node_modules/@date-fns/tz/tzName/index.js +39 -0
  35. package/dist/node_modules/@date-fns/tz/tzOffset/index.js +44 -0
  36. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.js +814 -0
  37. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +751 -0
  38. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js +350 -0
  39. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +161 -0
  40. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +137 -0
  41. package/dist/node_modules/@radix-ui/primitive/dist/index.js +11 -0
  42. package/dist/node_modules/@radix-ui/react-arrow/dist/index.js +25 -0
  43. package/dist/node_modules/@radix-ui/react-compose-refs/dist/index.js +39 -0
  44. package/dist/node_modules/@radix-ui/react-context/dist/index.js +63 -0
  45. package/dist/node_modules/@radix-ui/react-dismissable-layer/dist/index.js +213 -0
  46. package/dist/node_modules/@radix-ui/react-focus-guards/dist/index.js +31 -0
  47. package/dist/node_modules/@radix-ui/react-focus-scope/dist/index.js +209 -0
  48. package/dist/node_modules/@radix-ui/react-id/dist/index.js +15 -0
  49. package/dist/node_modules/@radix-ui/react-popover/dist/index.js +303 -0
  50. package/dist/node_modules/@radix-ui/react-popper/dist/index.js +285 -0
  51. package/dist/node_modules/@radix-ui/react-portal/dist/index.js +19 -0
  52. package/dist/node_modules/@radix-ui/react-presence/dist/index.js +132 -0
  53. package/dist/node_modules/@radix-ui/react-primitive/dist/index.js +43 -0
  54. package/dist/node_modules/@radix-ui/react-slot/dist/index.js +89 -0
  55. package/dist/node_modules/@radix-ui/react-use-callback-ref/dist/index.js +12 -0
  56. package/dist/node_modules/@radix-ui/react-use-controllable-state/dist/index.js +70 -0
  57. package/dist/node_modules/@radix-ui/react-use-escape-keydown/dist/index.js +18 -0
  58. package/dist/node_modules/@radix-ui/react-use-layout-effect/dist/index.js +7 -0
  59. package/dist/node_modules/@radix-ui/react-use-size/dist/index.js +40 -0
  60. package/dist/node_modules/aria-hidden/dist/es2015/index.js +137 -0
  61. package/dist/node_modules/date-fns/_lib/addLeadingZeros.js +7 -0
  62. package/dist/node_modules/date-fns/_lib/defaultOptions.js +7 -0
  63. package/dist/node_modules/date-fns/_lib/format/formatters.js +775 -0
  64. package/dist/node_modules/date-fns/_lib/format/lightFormatters.js +94 -0
  65. package/dist/node_modules/date-fns/_lib/format/longFormatters.js +66 -0
  66. package/dist/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js +31 -0
  67. package/dist/node_modules/date-fns/_lib/normalizeDates.js +11 -0
  68. package/dist/node_modules/date-fns/_lib/normalizeInterval.js +8 -0
  69. package/dist/node_modules/date-fns/_lib/protectedTokens.js +25 -0
  70. package/dist/node_modules/date-fns/addDays.js +41 -0
  71. package/dist/node_modules/date-fns/addMonths.js +75 -0
  72. package/dist/node_modules/date-fns/addWeeks.js +33 -0
  73. package/dist/node_modules/date-fns/addYears.js +33 -0
  74. package/dist/node_modules/date-fns/constants.js +67 -0
  75. package/dist/node_modules/date-fns/constructFrom.js +49 -0
  76. package/dist/node_modules/date-fns/differenceInCalendarDays.js +62 -0
  77. package/dist/node_modules/date-fns/differenceInCalendarMonths.js +42 -0
  78. package/dist/node_modules/date-fns/eachMonthOfInterval.js +65 -0
  79. package/dist/node_modules/date-fns/eachYearOfInterval.js +65 -0
  80. package/dist/node_modules/date-fns/endOfISOWeek.js +35 -0
  81. package/dist/node_modules/date-fns/endOfMonth.js +37 -0
  82. package/dist/node_modules/date-fns/endOfWeek.js +53 -0
  83. package/dist/node_modules/date-fns/endOfYear.js +37 -0
  84. package/dist/node_modules/date-fns/format.js +423 -0
  85. package/dist/node_modules/date-fns/getDayOfYear.js +34 -0
  86. package/dist/node_modules/date-fns/getDaysInMonth.js +36 -0
  87. package/dist/node_modules/date-fns/getDefaultOptions.js +31 -0
  88. package/dist/node_modules/date-fns/getISODay.js +33 -0
  89. package/dist/node_modules/date-fns/getISOWeek.js +40 -0
  90. package/dist/node_modules/date-fns/getISOWeekYear.js +52 -0
  91. package/dist/node_modules/date-fns/getMonth.js +29 -0
  92. package/dist/node_modules/date-fns/getWeek.js +54 -0
  93. package/dist/node_modules/date-fns/getWeekYear.js +75 -0
  94. package/dist/node_modules/date-fns/getYear.js +29 -0
  95. package/dist/node_modules/date-fns/isAfter.js +25 -0
  96. package/dist/node_modules/date-fns/isBefore.js +25 -0
  97. package/dist/node_modules/date-fns/isDate.js +41 -0
  98. package/dist/node_modules/date-fns/isSameDay.js +46 -0
  99. package/dist/node_modules/date-fns/isSameMonth.js +43 -0
  100. package/dist/node_modules/date-fns/isSameYear.js +35 -0
  101. package/dist/node_modules/date-fns/isValid.js +39 -0
  102. package/dist/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +10 -0
  103. package/dist/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +64 -0
  104. package/dist/node_modules/date-fns/locale/_lib/buildMatchFn.js +59 -0
  105. package/dist/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +22 -0
  106. package/dist/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +103 -0
  107. package/dist/node_modules/date-fns/locale/en-US/_lib/formatLong.js +41 -0
  108. package/dist/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +13 -0
  109. package/dist/node_modules/date-fns/locale/en-US/_lib/localize.js +189 -0
  110. package/dist/node_modules/date-fns/locale/en-US/_lib/match.js +134 -0
  111. package/dist/node_modules/date-fns/locale/en-US.js +28 -0
  112. package/dist/node_modules/date-fns/max.js +49 -0
  113. package/dist/node_modules/date-fns/min.js +49 -0
  114. package/dist/node_modules/date-fns/parse/_lib/Parser.js +27 -0
  115. package/dist/node_modules/date-fns/parse/_lib/Setter.js +59 -0
  116. package/dist/node_modules/date-fns/parse/_lib/constants.js +33 -0
  117. package/dist/node_modules/date-fns/parse/_lib/parsers/AMPMMidnightParser.js +55 -0
  118. package/dist/node_modules/date-fns/parse/_lib/parsers/AMPMParser.js +55 -0
  119. package/dist/node_modules/date-fns/parse/_lib/parsers/DateParser.js +59 -0
  120. package/dist/node_modules/date-fns/parse/_lib/parsers/DayOfYearParser.js +57 -0
  121. package/dist/node_modules/date-fns/parse/_lib/parsers/DayParser.js +64 -0
  122. package/dist/node_modules/date-fns/parse/_lib/parsers/DayPeriodParser.js +56 -0
  123. package/dist/node_modules/date-fns/parse/_lib/parsers/EraParser.js +41 -0
  124. package/dist/node_modules/date-fns/parse/_lib/parsers/ExtendedYearParser.js +24 -0
  125. package/dist/node_modules/date-fns/parse/_lib/parsers/FractionOfSecondParser.js +21 -0
  126. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour0To11Parser.js +36 -0
  127. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour0to23Parser.js +31 -0
  128. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour1To24Parser.js +32 -0
  129. package/dist/node_modules/date-fns/parse/_lib/parsers/Hour1to12Parser.js +38 -0
  130. package/dist/node_modules/date-fns/parse/_lib/parsers/ISODayParser.js +118 -0
  131. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneParser.js +47 -0
  132. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOTimezoneWithZParser.js +47 -0
  133. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOWeekParser.js +48 -0
  134. package/dist/node_modules/date-fns/parse/_lib/parsers/ISOWeekYearParser.js +44 -0
  135. package/dist/node_modules/date-fns/parse/_lib/parsers/LocalDayParser.js +96 -0
  136. package/dist/node_modules/date-fns/parse/_lib/parsers/LocalWeekParser.js +47 -0
  137. package/dist/node_modules/date-fns/parse/_lib/parsers/LocalWeekYearParser.js +76 -0
  138. package/dist/node_modules/date-fns/parse/_lib/parsers/MinuteParser.js +31 -0
  139. package/dist/node_modules/date-fns/parse/_lib/parsers/MonthParser.js +86 -0
  140. package/dist/node_modules/date-fns/parse/_lib/parsers/QuarterParser.js +83 -0
  141. package/dist/node_modules/date-fns/parse/_lib/parsers/SecondParser.js +31 -0
  142. package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneLocalDayParser.js +97 -0
  143. package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneMonthParser.js +86 -0
  144. package/dist/node_modules/date-fns/parse/_lib/parsers/StandAloneQuarterParser.js +83 -0
  145. package/dist/node_modules/date-fns/parse/_lib/parsers/TimestampMillisecondsParser.js +19 -0
  146. package/dist/node_modules/date-fns/parse/_lib/parsers/TimestampSecondsParser.js +19 -0
  147. package/dist/node_modules/date-fns/parse/_lib/parsers/YearParser.js +62 -0
  148. package/dist/node_modules/date-fns/parse/_lib/parsers.js +110 -0
  149. package/dist/node_modules/date-fns/parse/_lib/utils.js +135 -0
  150. package/dist/node_modules/date-fns/parse.js +497 -0
  151. package/dist/node_modules/date-fns/setDay.js +59 -0
  152. package/dist/node_modules/date-fns/setISODay.js +40 -0
  153. package/dist/node_modules/date-fns/setISOWeek.js +39 -0
  154. package/dist/node_modules/date-fns/setMonth.js +46 -0
  155. package/dist/node_modules/date-fns/setWeek.js +53 -0
  156. package/dist/node_modules/date-fns/setYear.js +40 -0
  157. package/dist/node_modules/date-fns/startOfDay.js +35 -0
  158. package/dist/node_modules/date-fns/startOfISOWeek.js +35 -0
  159. package/dist/node_modules/date-fns/startOfISOWeekYear.js +42 -0
  160. package/dist/node_modules/date-fns/startOfMonth.js +37 -0
  161. package/dist/node_modules/date-fns/startOfWeek.js +53 -0
  162. package/dist/node_modules/date-fns/startOfWeekYear.js +64 -0
  163. package/dist/node_modules/date-fns/startOfYear.js +36 -0
  164. package/dist/node_modules/date-fns/toDate.js +46 -0
  165. package/dist/node_modules/date-fns/transpose.js +52 -0
  166. package/dist/node_modules/get-nonce/dist/es2015/index.js +8 -0
  167. package/dist/node_modules/react-day-picker/dist/esm/DayPicker.js +320 -0
  168. package/dist/node_modules/react-day-picker/dist/esm/UI.js +122 -0
  169. package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarDay.js +33 -0
  170. package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarMonth.js +14 -0
  171. package/dist/node_modules/react-day-picker/dist/esm/classes/CalendarWeek.js +13 -0
  172. package/dist/node_modules/react-day-picker/dist/esm/classes/DateLib.js +604 -0
  173. package/dist/node_modules/react-day-picker/dist/esm/components/Button.js +13 -0
  174. package/dist/node_modules/react-day-picker/dist/esm/components/CaptionLabel.js +13 -0
  175. package/dist/node_modules/react-day-picker/dist/esm/components/Chevron.js +20 -0
  176. package/dist/node_modules/react-day-picker/dist/esm/components/Day.js +18 -0
  177. package/dist/node_modules/react-day-picker/dist/esm/components/DayButton.js +19 -0
  178. package/dist/node_modules/react-day-picker/dist/esm/components/Dropdown.js +21 -0
  179. package/dist/node_modules/react-day-picker/dist/esm/components/DropdownNav.js +13 -0
  180. package/dist/node_modules/react-day-picker/dist/esm/components/Footer.js +13 -0
  181. package/dist/node_modules/react-day-picker/dist/esm/components/Month.js +15 -0
  182. package/dist/node_modules/react-day-picker/dist/esm/components/MonthCaption.js +14 -0
  183. package/dist/node_modules/react-day-picker/dist/esm/components/MonthGrid.js +13 -0
  184. package/dist/node_modules/react-day-picker/dist/esm/components/Months.js +13 -0
  185. package/dist/node_modules/react-day-picker/dist/esm/components/MonthsDropdown.js +15 -0
  186. package/dist/node_modules/react-day-picker/dist/esm/components/Nav.js +31 -0
  187. package/dist/node_modules/react-day-picker/dist/esm/components/NextMonthButton.js +15 -0
  188. package/dist/node_modules/react-day-picker/dist/esm/components/Option.js +13 -0
  189. package/dist/node_modules/react-day-picker/dist/esm/components/PreviousMonthButton.js +15 -0
  190. package/dist/node_modules/react-day-picker/dist/esm/components/Root.js +14 -0
  191. package/dist/node_modules/react-day-picker/dist/esm/components/Select.js +13 -0
  192. package/dist/node_modules/react-day-picker/dist/esm/components/Week.js +14 -0
  193. package/dist/node_modules/react-day-picker/dist/esm/components/WeekNumber.js +14 -0
  194. package/dist/node_modules/react-day-picker/dist/esm/components/WeekNumberHeader.js +13 -0
  195. package/dist/node_modules/react-day-picker/dist/esm/components/Weekday.js +13 -0
  196. package/dist/node_modules/react-day-picker/dist/esm/components/Weekdays.js +14 -0
  197. package/dist/node_modules/react-day-picker/dist/esm/components/Weeks.js +13 -0
  198. package/dist/node_modules/react-day-picker/dist/esm/components/YearsDropdown.js +15 -0
  199. package/dist/node_modules/react-day-picker/dist/esm/components/custom-components.js +26 -0
  200. package/dist/node_modules/react-day-picker/dist/esm/formatters/formatCaption.js +26 -0
  201. package/dist/node_modules/react-day-picker/dist/esm/formatters/formatDay.js +19 -0
  202. package/dist/node_modules/react-day-picker/dist/esm/formatters/formatMonthDropdown.js +18 -0
  203. package/dist/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumber.js +21 -0
  204. package/dist/node_modules/react-day-picker/dist/esm/formatters/formatWeekNumberHeader.js +13 -0
  205. package/dist/node_modules/react-day-picker/dist/esm/formatters/formatWeekdayName.js +19 -0
  206. package/dist/node_modules/react-day-picker/dist/esm/formatters/formatYearDropdown.js +23 -0
  207. package/dist/node_modules/react-day-picker/dist/esm/formatters/index.js +7 -0
  208. package/dist/node_modules/react-day-picker/dist/esm/helpers/calculateFocusTarget.js +73 -0
  209. package/dist/node_modules/react-day-picker/dist/esm/helpers/createGetModifiers.js +95 -0
  210. package/dist/node_modules/react-day-picker/dist/esm/helpers/endOfBroadcastWeek.js +22 -0
  211. package/dist/node_modules/react-day-picker/dist/esm/helpers/getBroadcastWeeksInMonth.js +28 -0
  212. package/dist/node_modules/react-day-picker/dist/esm/helpers/getClassNamesForModifiers.js +33 -0
  213. package/dist/node_modules/react-day-picker/dist/esm/helpers/getComponents.js +20 -0
  214. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDataAttributes.js +27 -0
  215. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDates.js +59 -0
  216. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDays.js +19 -0
  217. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDefaultClassNames.js +33 -0
  218. package/dist/node_modules/react-day-picker/dist/esm/helpers/getDisplayMonths.js +24 -0
  219. package/dist/node_modules/react-day-picker/dist/esm/helpers/getFocusableDate.js +46 -0
  220. package/dist/node_modules/react-day-picker/dist/esm/helpers/getFormatters.js +24 -0
  221. package/dist/node_modules/react-day-picker/dist/esm/helpers/getInitialMonth.js +27 -0
  222. package/dist/node_modules/react-day-picker/dist/esm/helpers/getLabels.js +53 -0
  223. package/dist/node_modules/react-day-picker/dist/esm/helpers/getMonthOptions.js +33 -0
  224. package/dist/node_modules/react-day-picker/dist/esm/helpers/getMonths.js +69 -0
  225. package/dist/node_modules/react-day-picker/dist/esm/helpers/getNavMonth.js +51 -0
  226. package/dist/node_modules/react-day-picker/dist/esm/helpers/getNextFocus.js +40 -0
  227. package/dist/node_modules/react-day-picker/dist/esm/helpers/getNextMonth.js +36 -0
  228. package/dist/node_modules/react-day-picker/dist/esm/helpers/getPreviousMonth.js +37 -0
  229. package/dist/node_modules/react-day-picker/dist/esm/helpers/getStyleForModifiers.js +27 -0
  230. package/dist/node_modules/react-day-picker/dist/esm/helpers/getWeekdays.js +26 -0
  231. package/dist/node_modules/react-day-picker/dist/esm/helpers/getWeeks.js +14 -0
  232. package/dist/node_modules/react-day-picker/dist/esm/helpers/getYearOptions.js +36 -0
  233. package/dist/node_modules/react-day-picker/dist/esm/helpers/startOfBroadcastWeek.js +27 -0
  234. package/dist/node_modules/react-day-picker/dist/esm/helpers/useControlledValue.js +31 -0
  235. package/dist/node_modules/react-day-picker/dist/esm/labels/index.js +11 -0
  236. package/dist/node_modules/react-day-picker/dist/esm/labels/labelDayButton.js +32 -0
  237. package/dist/node_modules/react-day-picker/dist/esm/labels/labelGrid.js +25 -0
  238. package/dist/node_modules/react-day-picker/dist/esm/labels/labelGridcell.js +22 -0
  239. package/dist/node_modules/react-day-picker/dist/esm/labels/labelMonthDropdown.js +14 -0
  240. package/dist/node_modules/react-day-picker/dist/esm/labels/labelNav.js +13 -0
  241. package/dist/node_modules/react-day-picker/dist/esm/labels/labelNext.js +16 -0
  242. package/dist/node_modules/react-day-picker/dist/esm/labels/labelPrevious.js +15 -0
  243. package/dist/node_modules/react-day-picker/dist/esm/labels/labelWeekNumber.js +15 -0
  244. package/dist/node_modules/react-day-picker/dist/esm/labels/labelWeekNumberHeader.js +14 -0
  245. package/dist/node_modules/react-day-picker/dist/esm/labels/labelWeekday.js +18 -0
  246. package/dist/node_modules/react-day-picker/dist/esm/labels/labelYearDropdown.js +14 -0
  247. package/dist/node_modules/react-day-picker/dist/esm/locale/en-US.js +67 -0
  248. package/dist/node_modules/react-day-picker/dist/esm/selection/useMulti.js +57 -0
  249. package/dist/node_modules/react-day-picker/dist/esm/selection/useRange.js +45 -0
  250. package/dist/node_modules/react-day-picker/dist/esm/selection/useSingle.js +44 -0
  251. package/dist/node_modules/react-day-picker/dist/esm/useAnimation.js +174 -0
  252. package/dist/node_modules/react-day-picker/dist/esm/useCalendar.js +113 -0
  253. package/dist/node_modules/react-day-picker/dist/esm/useDayPicker.js +25 -0
  254. package/dist/node_modules/react-day-picker/dist/esm/useFocus.js +56 -0
  255. package/dist/node_modules/react-day-picker/dist/esm/useSelection.js +31 -0
  256. package/dist/node_modules/react-day-picker/dist/esm/utils/addToRange.js +95 -0
  257. package/dist/node_modules/react-day-picker/dist/esm/utils/convertMatchersToTimeZone.js +57 -0
  258. package/dist/node_modules/react-day-picker/dist/esm/utils/dateMatchModifiers.js +62 -0
  259. package/dist/node_modules/react-day-picker/dist/esm/utils/rangeContainsDayOfWeek.js +30 -0
  260. package/dist/node_modules/react-day-picker/dist/esm/utils/rangeContainsModifiers.js +74 -0
  261. package/dist/node_modules/react-day-picker/dist/esm/utils/rangeIncludesDate.js +35 -0
  262. package/dist/node_modules/react-day-picker/dist/esm/utils/rangeOverlaps.js +21 -0
  263. package/dist/node_modules/react-day-picker/dist/esm/utils/toTimeZone.js +16 -0
  264. package/dist/node_modules/react-day-picker/dist/esm/utils/typeguards.js +66 -0
  265. package/dist/node_modules/react-remove-scroll/dist/es2015/Combination.js +9 -0
  266. package/dist/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +167 -0
  267. package/dist/node_modules/react-remove-scroll/dist/es2015/UI.js +38 -0
  268. package/dist/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js +21 -0
  269. package/dist/node_modules/react-remove-scroll/dist/es2015/handleScroll.js +110 -0
  270. package/dist/node_modules/react-remove-scroll/dist/es2015/medium.js +5 -0
  271. package/dist/node_modules/react-remove-scroll/dist/es2015/sidecar.js +7 -0
  272. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/component.js +56 -0
  273. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/constants.js +10 -0
  274. package/dist/node_modules/react-remove-scroll-bar/dist/es2015/utils.js +31 -0
  275. package/dist/node_modules/react-style-singleton/dist/es2015/component.js +19 -0
  276. package/dist/node_modules/react-style-singleton/dist/es2015/hook.js +25 -0
  277. package/dist/node_modules/react-style-singleton/dist/es2015/singleton.js +51 -0
  278. package/dist/node_modules/tslib/tslib.es6.js +56 -0
  279. package/dist/node_modules/use-callback-ref/dist/es2015/assignRef.js +24 -0
  280. package/dist/node_modules/use-callback-ref/dist/es2015/useMergeRef.js +48 -0
  281. package/dist/node_modules/use-callback-ref/dist/es2015/useRef.js +42 -0
  282. package/dist/node_modules/use-sidecar/dist/es2015/exports.js +21 -0
  283. package/dist/node_modules/use-sidecar/dist/es2015/medium.js +77 -0
  284. package/dist/types/index.d.ts +10 -0
  285. package/package.json +11 -7
  286. package/src/components/Checkbox/Checkbox.tsx +6 -1
  287. package/src/components/DatePicker/DatePicker.tsx +372 -0
  288. package/src/components/DatePicker/datepicker-utils.ts +269 -0
  289. package/src/components/DatePicker/index.ts +5 -0
  290. package/src/components/Field/Field.tsx +30 -28
  291. package/src/components/Popover/Popover.tsx +198 -0
  292. package/src/components/Popover/index.ts +5 -0
  293. package/src/components/Radio/Radio.tsx +6 -1
  294. package/src/components/Searchbox/Searchbox.tsx +4 -1
  295. package/src/components/Select/Select.tsx +7 -2
  296. package/src/components/TextInput/TextInput.tsx +5 -1
  297. package/src/components/Textarea/Textarea.tsx +9 -13
  298. package/src/index.ts +2 -0
  299. package/src/types/index.ts +15 -0
@@ -0,0 +1,57 @@
1
+ import { useControlledValue } from '../helpers/useControlledValue.js';
2
+
3
+ /**
4
+ * Hook to manage multiple-date selection in the DayPicker component.
5
+ *
6
+ * @template T - The type of DayPicker props.
7
+ * @param props - The DayPicker props.
8
+ * @param dateLib - The date utility library instance.
9
+ * @returns An object containing the selected dates, a function to select dates,
10
+ * and a function to check if a date is selected.
11
+ */
12
+ function useMulti(props, dateLib) {
13
+ const { selected: initiallySelected, required, onSelect, } = props;
14
+ const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);
15
+ const selected = !onSelect ? internallySelected : initiallySelected;
16
+ const { isSameDay } = dateLib;
17
+ const isSelected = (date) => {
18
+ return selected?.some((d) => isSameDay(d, date)) ?? false;
19
+ };
20
+ const { min, max } = props;
21
+ const select = (triggerDate, modifiers, e) => {
22
+ let newDates = [...(selected ?? [])];
23
+ if (isSelected(triggerDate)) {
24
+ if (selected?.length === min) {
25
+ // Min value reached, do nothing
26
+ return;
27
+ }
28
+ if (required && selected?.length === 1) {
29
+ // Required value already selected do nothing
30
+ return;
31
+ }
32
+ newDates = selected?.filter((d) => !isSameDay(d, triggerDate));
33
+ }
34
+ else {
35
+ if (selected?.length === max) {
36
+ // Max value reached, reset the selection to date
37
+ newDates = [triggerDate];
38
+ }
39
+ else {
40
+ // Add the date to the selection
41
+ newDates = [...newDates, triggerDate];
42
+ }
43
+ }
44
+ if (!onSelect) {
45
+ setSelected(newDates);
46
+ }
47
+ onSelect?.(newDates, triggerDate, modifiers, e);
48
+ return newDates;
49
+ };
50
+ return {
51
+ selected,
52
+ select,
53
+ isSelected,
54
+ };
55
+ }
56
+
57
+ export { useMulti };
@@ -0,0 +1,45 @@
1
+ import { useControlledValue } from '../helpers/useControlledValue.js';
2
+ import { rangeIncludesDate } from '../utils/rangeIncludesDate.js';
3
+ import { addToRange } from '../utils/addToRange.js';
4
+ import { rangeContainsModifiers } from '../utils/rangeContainsModifiers.js';
5
+
6
+ /**
7
+ * Hook to manage range selection in the DayPicker component.
8
+ *
9
+ * @template T - The type of DayPicker props.
10
+ * @param props - The DayPicker props.
11
+ * @param dateLib - The date utility library instance.
12
+ * @returns An object containing the selected range, a function to select a
13
+ * range, and a function to check if a date is within the range.
14
+ */
15
+ function useRange(props, dateLib) {
16
+ const { disabled, excludeDisabled, selected: initiallySelected, required, onSelect, } = props;
17
+ const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);
18
+ const selected = !onSelect ? internallySelected : initiallySelected;
19
+ const isSelected = (date) => selected && rangeIncludesDate(selected, date, false, dateLib);
20
+ const select = (triggerDate, modifiers, e) => {
21
+ const { min, max } = props;
22
+ const newRange = triggerDate
23
+ ? addToRange(triggerDate, selected, min, max, required, dateLib)
24
+ : undefined;
25
+ if (excludeDisabled && disabled && newRange?.from && newRange.to) {
26
+ if (rangeContainsModifiers({ from: newRange.from, to: newRange.to }, disabled, dateLib)) {
27
+ // if a disabled days is found, the range is reset
28
+ newRange.from = triggerDate;
29
+ newRange.to = undefined;
30
+ }
31
+ }
32
+ if (!onSelect) {
33
+ setSelected(newRange);
34
+ }
35
+ onSelect?.(newRange, triggerDate, modifiers, e);
36
+ return newRange;
37
+ };
38
+ return {
39
+ selected,
40
+ select,
41
+ isSelected,
42
+ };
43
+ }
44
+
45
+ export { useRange };
@@ -0,0 +1,44 @@
1
+ import { useControlledValue } from '../helpers/useControlledValue.js';
2
+
3
+ /**
4
+ * Hook to manage single-date selection in the DayPicker component.
5
+ *
6
+ * @template T - The type of DayPicker props.
7
+ * @param props - The DayPicker props.
8
+ * @param dateLib - The date utility library instance.
9
+ * @returns An object containing the selected date, a function to select a date,
10
+ * and a function to check if a date is selected.
11
+ */
12
+ function useSingle(props, dateLib) {
13
+ const { selected: initiallySelected, required, onSelect, } = props;
14
+ const [internallySelected, setSelected] = useControlledValue(initiallySelected, onSelect ? initiallySelected : undefined);
15
+ const selected = !onSelect ? internallySelected : initiallySelected;
16
+ const { isSameDay } = dateLib;
17
+ const isSelected = (compareDate) => {
18
+ return selected ? isSameDay(selected, compareDate) : false;
19
+ };
20
+ const select = (triggerDate, modifiers, e) => {
21
+ let newDate = triggerDate;
22
+ if (!required && selected && selected && isSameDay(triggerDate, selected)) {
23
+ // If the date is the same, clear the selection.
24
+ newDate = undefined;
25
+ }
26
+ if (!onSelect) {
27
+ setSelected(newDate);
28
+ }
29
+ if (required) {
30
+ onSelect?.(newDate, triggerDate, modifiers, e);
31
+ }
32
+ else {
33
+ onSelect?.(newDate, triggerDate, modifiers, e);
34
+ }
35
+ return newDate;
36
+ };
37
+ return {
38
+ selected,
39
+ select,
40
+ isSelected,
41
+ };
42
+ }
43
+
44
+ export { useSingle };
@@ -0,0 +1,174 @@
1
+ import { useRef, useLayoutEffect } from 'react';
2
+ import { Animation } from './UI.js';
3
+
4
+ const asHtmlElement = (element) => {
5
+ if (element instanceof HTMLElement)
6
+ return element;
7
+ return null;
8
+ };
9
+ const queryMonthEls = (element) => [
10
+ ...(element.querySelectorAll("[data-animated-month]") ?? []),
11
+ ];
12
+ const queryMonthEl = (element) => asHtmlElement(element.querySelector("[data-animated-month]"));
13
+ const queryCaptionEl = (element) => asHtmlElement(element.querySelector("[data-animated-caption]"));
14
+ const queryWeeksEl = (element) => asHtmlElement(element.querySelector("[data-animated-weeks]"));
15
+ const queryNavEl = (element) => asHtmlElement(element.querySelector("[data-animated-nav]"));
16
+ const queryWeekdaysEl = (element) => asHtmlElement(element.querySelector("[data-animated-weekdays]"));
17
+ /**
18
+ * Handles animations for transitioning between months in the DayPicker
19
+ * component.
20
+ *
21
+ * @private
22
+ * @param rootElRef - A reference to the root element of the DayPicker
23
+ * component.
24
+ * @param enabled - Whether animations are enabled.
25
+ * @param options - Configuration options for the animation, including class
26
+ * names, months, focused day, and the date utility library.
27
+ */
28
+ function useAnimation(rootElRef, enabled, { classNames, months, focused, dateLib, }) {
29
+ const previousRootElSnapshotRef = useRef(null);
30
+ const previousMonthsRef = useRef(months);
31
+ const animatingRef = useRef(false);
32
+ useLayoutEffect(() => {
33
+ // get previous months before updating the previous months ref
34
+ const previousMonths = previousMonthsRef.current;
35
+ // update previous months ref for next effect trigger
36
+ previousMonthsRef.current = months;
37
+ if (!enabled ||
38
+ !rootElRef.current ||
39
+ // safety check because the ref can be set to anything by consumers
40
+ !(rootElRef.current instanceof HTMLElement) ||
41
+ // validation required for the animation to work as expected
42
+ months.length === 0 ||
43
+ previousMonths.length === 0 ||
44
+ months.length !== previousMonths.length) {
45
+ return;
46
+ }
47
+ const isSameMonth = dateLib.isSameMonth(months[0].date, previousMonths[0].date);
48
+ const isAfterPreviousMonth = dateLib.isAfter(months[0].date, previousMonths[0].date);
49
+ const captionAnimationClass = isAfterPreviousMonth
50
+ ? classNames[Animation.caption_after_enter]
51
+ : classNames[Animation.caption_before_enter];
52
+ const weeksAnimationClass = isAfterPreviousMonth
53
+ ? classNames[Animation.weeks_after_enter]
54
+ : classNames[Animation.weeks_before_enter];
55
+ // get previous root element snapshot before updating the snapshot ref
56
+ const previousRootElSnapshot = previousRootElSnapshotRef.current;
57
+ // update snapshot for next effect trigger
58
+ const rootElSnapshot = rootElRef.current.cloneNode(true);
59
+ if (rootElSnapshot instanceof HTMLElement) {
60
+ // if this effect is triggered while animating, we need to clean up the new root snapshot
61
+ // to put it in the same state as when not animating, to correctly animate the next month change
62
+ const currentMonthElsSnapshot = queryMonthEls(rootElSnapshot);
63
+ currentMonthElsSnapshot.forEach((currentMonthElSnapshot) => {
64
+ if (!(currentMonthElSnapshot instanceof HTMLElement))
65
+ return;
66
+ // remove the old month snapshots from the new root snapshot
67
+ const previousMonthElSnapshot = queryMonthEl(currentMonthElSnapshot);
68
+ if (previousMonthElSnapshot &&
69
+ currentMonthElSnapshot.contains(previousMonthElSnapshot)) {
70
+ currentMonthElSnapshot.removeChild(previousMonthElSnapshot);
71
+ }
72
+ // remove animation classes from the new month snapshots
73
+ const captionEl = queryCaptionEl(currentMonthElSnapshot);
74
+ if (captionEl) {
75
+ captionEl.classList.remove(captionAnimationClass);
76
+ }
77
+ const weeksEl = queryWeeksEl(currentMonthElSnapshot);
78
+ if (weeksEl) {
79
+ weeksEl.classList.remove(weeksAnimationClass);
80
+ }
81
+ });
82
+ previousRootElSnapshotRef.current = rootElSnapshot;
83
+ }
84
+ else {
85
+ previousRootElSnapshotRef.current = null;
86
+ }
87
+ if (animatingRef.current ||
88
+ isSameMonth ||
89
+ // skip animation if a day is focused because it can cause issues to the animation and is better for a11y
90
+ focused) {
91
+ return;
92
+ }
93
+ const previousMonthEls = previousRootElSnapshot instanceof HTMLElement
94
+ ? queryMonthEls(previousRootElSnapshot)
95
+ : [];
96
+ const currentMonthEls = queryMonthEls(rootElRef.current);
97
+ if (currentMonthEls?.every((el) => el instanceof HTMLElement) &&
98
+ previousMonthEls &&
99
+ previousMonthEls.every((el) => el instanceof HTMLElement)) {
100
+ animatingRef.current = true;
101
+ // set isolation to isolate to isolate the stacking context during animation
102
+ rootElRef.current.style.isolation = "isolate";
103
+ // set z-index to 1 to ensure the nav is clickable over the other elements being animated
104
+ const navEl = queryNavEl(rootElRef.current);
105
+ if (navEl) {
106
+ navEl.style.zIndex = "1";
107
+ }
108
+ currentMonthEls.forEach((currentMonthEl, index) => {
109
+ const previousMonthEl = previousMonthEls[index];
110
+ if (!previousMonthEl) {
111
+ return;
112
+ }
113
+ // animate new displayed month
114
+ currentMonthEl.style.position = "relative";
115
+ currentMonthEl.style.overflow = "hidden";
116
+ const captionEl = queryCaptionEl(currentMonthEl);
117
+ if (captionEl) {
118
+ captionEl.classList.add(captionAnimationClass);
119
+ }
120
+ const weeksEl = queryWeeksEl(currentMonthEl);
121
+ if (weeksEl) {
122
+ weeksEl.classList.add(weeksAnimationClass);
123
+ }
124
+ // animate new displayed month end
125
+ const cleanUp = () => {
126
+ animatingRef.current = false;
127
+ if (rootElRef.current) {
128
+ rootElRef.current.style.isolation = "";
129
+ }
130
+ if (navEl) {
131
+ navEl.style.zIndex = "";
132
+ }
133
+ if (captionEl) {
134
+ captionEl.classList.remove(captionAnimationClass);
135
+ }
136
+ if (weeksEl) {
137
+ weeksEl.classList.remove(weeksAnimationClass);
138
+ }
139
+ currentMonthEl.style.position = "";
140
+ currentMonthEl.style.overflow = "";
141
+ if (currentMonthEl.contains(previousMonthEl)) {
142
+ currentMonthEl.removeChild(previousMonthEl);
143
+ }
144
+ };
145
+ // animate old displayed month
146
+ previousMonthEl.style.pointerEvents = "none";
147
+ previousMonthEl.style.position = "absolute";
148
+ previousMonthEl.style.overflow = "hidden";
149
+ previousMonthEl.setAttribute("aria-hidden", "true");
150
+ // hide the weekdays container of the old month and only the new one
151
+ const previousWeekdaysEl = queryWeekdaysEl(previousMonthEl);
152
+ if (previousWeekdaysEl) {
153
+ previousWeekdaysEl.style.opacity = "0";
154
+ }
155
+ const previousCaptionEl = queryCaptionEl(previousMonthEl);
156
+ if (previousCaptionEl) {
157
+ previousCaptionEl.classList.add(isAfterPreviousMonth
158
+ ? classNames[Animation.caption_before_exit]
159
+ : classNames[Animation.caption_after_exit]);
160
+ previousCaptionEl.addEventListener("animationend", cleanUp);
161
+ }
162
+ const previousWeeksEl = queryWeeksEl(previousMonthEl);
163
+ if (previousWeeksEl) {
164
+ previousWeeksEl.classList.add(isAfterPreviousMonth
165
+ ? classNames[Animation.weeks_before_exit]
166
+ : classNames[Animation.weeks_after_exit]);
167
+ }
168
+ currentMonthEl.insertBefore(previousMonthEl, currentMonthEl.firstChild);
169
+ });
170
+ }
171
+ });
172
+ }
173
+
174
+ export { useAnimation };
@@ -0,0 +1,113 @@
1
+ import { useEffect, useMemo } from 'react';
2
+ import { getDates } from './helpers/getDates.js';
3
+ import { getDays } from './helpers/getDays.js';
4
+ import { getDisplayMonths } from './helpers/getDisplayMonths.js';
5
+ import { getInitialMonth } from './helpers/getInitialMonth.js';
6
+ import { getMonths } from './helpers/getMonths.js';
7
+ import { getNavMonths } from './helpers/getNavMonth.js';
8
+ import { getNextMonth } from './helpers/getNextMonth.js';
9
+ import { getPreviousMonth } from './helpers/getPreviousMonth.js';
10
+ import { getWeeks } from './helpers/getWeeks.js';
11
+ import { useControlledValue } from './helpers/useControlledValue.js';
12
+
13
+ /**
14
+ * Provides the calendar object to work with the calendar in custom components.
15
+ *
16
+ * @private
17
+ * @param props - The DayPicker props related to calendar configuration.
18
+ * @param dateLib - The date utility library instance.
19
+ * @returns The calendar object containing displayed days, weeks, months, and
20
+ * navigation methods.
21
+ */
22
+ function useCalendar(props, dateLib) {
23
+ const [navStart, navEnd] = getNavMonths(props, dateLib);
24
+ const { startOfMonth, endOfMonth } = dateLib;
25
+ const initialMonth = getInitialMonth(props, navStart, navEnd, dateLib);
26
+ const [firstMonth, setFirstMonth] = useControlledValue(initialMonth,
27
+ // initialMonth is always computed from props.month if provided
28
+ props.month ? initialMonth : undefined);
29
+ // biome-ignore lint/correctness/useExhaustiveDependencies: change the initial month when the time zone changes.
30
+ useEffect(() => {
31
+ const newInitialMonth = getInitialMonth(props, navStart, navEnd, dateLib);
32
+ setFirstMonth(newInitialMonth);
33
+ }, [props.timeZone]);
34
+ /** The months displayed in the calendar. */
35
+ // biome-ignore lint/correctness/useExhaustiveDependencies: We want to recompute only when specific props change.
36
+ const { months, weeks, days, previousMonth, nextMonth } = useMemo(() => {
37
+ const displayMonths = getDisplayMonths(firstMonth, navEnd, { numberOfMonths: props.numberOfMonths }, dateLib);
38
+ const dates = getDates(displayMonths, props.endMonth ? endOfMonth(props.endMonth) : undefined, {
39
+ ISOWeek: props.ISOWeek,
40
+ fixedWeeks: props.fixedWeeks,
41
+ broadcastCalendar: props.broadcastCalendar,
42
+ }, dateLib);
43
+ const months = getMonths(displayMonths, dates, {
44
+ broadcastCalendar: props.broadcastCalendar,
45
+ fixedWeeks: props.fixedWeeks,
46
+ ISOWeek: props.ISOWeek,
47
+ reverseMonths: props.reverseMonths,
48
+ }, dateLib);
49
+ const weeks = getWeeks(months);
50
+ const days = getDays(months);
51
+ const previousMonth = getPreviousMonth(firstMonth, navStart, props, dateLib);
52
+ const nextMonth = getNextMonth(firstMonth, navEnd, props, dateLib);
53
+ return {
54
+ months,
55
+ weeks,
56
+ days,
57
+ previousMonth,
58
+ nextMonth,
59
+ };
60
+ }, [
61
+ dateLib,
62
+ firstMonth.getTime(),
63
+ navEnd?.getTime(),
64
+ navStart?.getTime(),
65
+ props.disableNavigation,
66
+ props.broadcastCalendar,
67
+ props.endMonth?.getTime(),
68
+ props.fixedWeeks,
69
+ props.ISOWeek,
70
+ props.numberOfMonths,
71
+ props.pagedNavigation,
72
+ props.reverseMonths,
73
+ ]);
74
+ const { disableNavigation, onMonthChange } = props;
75
+ const isDayInCalendar = (day) => weeks.some((week) => week.days.some((d) => d.isEqualTo(day)));
76
+ const goToMonth = (date) => {
77
+ if (disableNavigation) {
78
+ return;
79
+ }
80
+ let newMonth = startOfMonth(date);
81
+ // if month is before start, use the first month instead
82
+ if (navStart && newMonth < startOfMonth(navStart)) {
83
+ newMonth = startOfMonth(navStart);
84
+ }
85
+ // if month is after endMonth, use the last month instead
86
+ if (navEnd && newMonth > startOfMonth(navEnd)) {
87
+ newMonth = startOfMonth(navEnd);
88
+ }
89
+ setFirstMonth(newMonth);
90
+ onMonthChange?.(newMonth);
91
+ };
92
+ const goToDay = (day) => {
93
+ // is this check necessary?
94
+ if (isDayInCalendar(day)) {
95
+ return;
96
+ }
97
+ goToMonth(day.date);
98
+ };
99
+ const calendar = {
100
+ months,
101
+ weeks,
102
+ days,
103
+ navStart,
104
+ navEnd,
105
+ previousMonth,
106
+ nextMonth,
107
+ goToMonth,
108
+ goToDay,
109
+ };
110
+ return calendar;
111
+ }
112
+
113
+ export { useCalendar };
@@ -0,0 +1,25 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ /** @ignore */
4
+ const dayPickerContext = createContext(undefined);
5
+ /**
6
+ * Provides access to the DayPicker context, which includes properties and
7
+ * methods to interact with the DayPicker component. This hook must be used
8
+ * within a custom component.
9
+ *
10
+ * @template T - Use this type to refine the returned context type with a
11
+ * specific selection mode.
12
+ * @returns The context to work with DayPicker.
13
+ * @throws {Error} If the hook is used outside of a DayPicker provider.
14
+ * @group Hooks
15
+ * @see https://daypicker.dev/guides/custom-components
16
+ */
17
+ function useDayPicker() {
18
+ const context = useContext(dayPickerContext);
19
+ if (context === undefined) {
20
+ throw new Error("useDayPicker() must be used within a custom component.");
21
+ }
22
+ return context;
23
+ }
24
+
25
+ export { dayPickerContext, useDayPicker };
@@ -0,0 +1,56 @@
1
+ import { useState } from 'react';
2
+ import { calculateFocusTarget } from './helpers/calculateFocusTarget.js';
3
+ import { getNextFocus } from './helpers/getNextFocus.js';
4
+
5
+ /**
6
+ * Manages focus behavior for the DayPicker component, including setting,
7
+ * moving, and blurring focus on calendar days.
8
+ *
9
+ * @template T - The type of DayPicker props.
10
+ * @param props - The DayPicker props.
11
+ * @param calendar - The calendar object containing the displayed days and
12
+ * months.
13
+ * @param getModifiers - A function to retrieve modifiers for a given day.
14
+ * @param isSelected - A function to check if a date is selected.
15
+ * @param dateLib - The date utility library instance.
16
+ * @returns An object containing focus-related methods and the currently focused
17
+ * day.
18
+ */
19
+ function useFocus(props, calendar, getModifiers, isSelected, dateLib) {
20
+ const { autoFocus } = props;
21
+ const [lastFocused, setLastFocused] = useState();
22
+ const focusTarget = calculateFocusTarget(calendar.days, getModifiers, isSelected || (() => false), lastFocused);
23
+ const [focusedDay, setFocused] = useState(autoFocus ? focusTarget : undefined);
24
+ const blur = () => {
25
+ setLastFocused(focusedDay);
26
+ setFocused(undefined);
27
+ };
28
+ const moveFocus = (moveBy, moveDir) => {
29
+ if (!focusedDay)
30
+ return;
31
+ const nextFocus = getNextFocus(moveBy, moveDir, focusedDay, calendar.navStart, calendar.navEnd, props, dateLib);
32
+ if (!nextFocus)
33
+ return;
34
+ if (props.disableNavigation) {
35
+ const isNextInCalendar = calendar.days.some((day) => day.isEqualTo(nextFocus));
36
+ if (!isNextInCalendar) {
37
+ return;
38
+ }
39
+ }
40
+ calendar.goToDay(nextFocus);
41
+ setFocused(nextFocus);
42
+ };
43
+ const isFocusTarget = (day) => {
44
+ return Boolean(focusTarget?.isEqualTo(day));
45
+ };
46
+ const useFocus = {
47
+ isFocusTarget,
48
+ setFocused,
49
+ focused: focusedDay,
50
+ blur,
51
+ moveFocus,
52
+ };
53
+ return useFocus;
54
+ }
55
+
56
+ export { useFocus };
@@ -0,0 +1,31 @@
1
+ import { useMulti } from './selection/useMulti.js';
2
+ import { useRange } from './selection/useRange.js';
3
+ import { useSingle } from './selection/useSingle.js';
4
+
5
+ /**
6
+ * Determines the appropriate selection hook to use based on the selection mode
7
+ * and returns the corresponding selection object.
8
+ *
9
+ * @template T - The type of DayPicker props.
10
+ * @param props - The DayPicker props.
11
+ * @param dateLib - The date utility library instance.
12
+ * @returns The selection object for the specified mode, or `undefined` if no
13
+ * mode is set.
14
+ */
15
+ function useSelection(props, dateLib) {
16
+ const single = useSingle(props, dateLib);
17
+ const multi = useMulti(props, dateLib);
18
+ const range = useRange(props, dateLib);
19
+ switch (props.mode) {
20
+ case "single":
21
+ return single;
22
+ case "multiple":
23
+ return multi;
24
+ case "range":
25
+ return range;
26
+ default:
27
+ return undefined;
28
+ }
29
+ }
30
+
31
+ export { useSelection };
@@ -0,0 +1,95 @@
1
+ import { defaultDateLib } from '../classes/DateLib.js';
2
+
3
+ /**
4
+ * Adds a date to an existing range, considering constraints like minimum and
5
+ * maximum range size.
6
+ *
7
+ * @param date - The date to add to the range.
8
+ * @param initialRange - The initial range to which the date will be added.
9
+ * @param min - The minimum number of days in the range.
10
+ * @param max - The maximum number of days in the range.
11
+ * @param required - Whether the range must always include at least one date.
12
+ * @param dateLib - The date utility library instance.
13
+ * @returns The updated date range, or `undefined` if the range is cleared.
14
+ * @group Utilities
15
+ */
16
+ function addToRange(date, initialRange, min = 0, max = 0, required = false, dateLib = defaultDateLib) {
17
+ const { from, to } = initialRange || {};
18
+ const { isSameDay, isAfter, isBefore } = dateLib;
19
+ let range;
20
+ if (!from && !to) {
21
+ // the range is empty, add the date
22
+ range = { from: date, to: min > 0 ? undefined : date };
23
+ }
24
+ else if (from && !to) {
25
+ // adding date to an incomplete range
26
+ if (isSameDay(from, date)) {
27
+ // adding a date equal to the start of the range
28
+ if (min === 0) {
29
+ range = { from, to: date };
30
+ }
31
+ else if (required) {
32
+ range = { from, to: undefined };
33
+ }
34
+ else {
35
+ range = undefined;
36
+ }
37
+ }
38
+ else if (isBefore(date, from)) {
39
+ // adding a date before the start of the range
40
+ range = { from: date, to: from };
41
+ }
42
+ else {
43
+ // adding a date after the start of the range
44
+ range = { from, to: date };
45
+ }
46
+ }
47
+ else if (from && to) {
48
+ // adding date to a complete range
49
+ if (isSameDay(from, date) && isSameDay(to, date)) {
50
+ // adding a date that is equal to both start and end of the range
51
+ if (required) {
52
+ range = { from, to };
53
+ }
54
+ else {
55
+ range = undefined;
56
+ }
57
+ }
58
+ else if (isSameDay(from, date)) {
59
+ // adding a date equal to the the start of the range
60
+ range = { from, to: min > 0 ? undefined : date };
61
+ }
62
+ else if (isSameDay(to, date)) {
63
+ // adding a dare equal to the end of the range
64
+ range = { from: date, to: min > 0 ? undefined : date };
65
+ }
66
+ else if (isBefore(date, from)) {
67
+ // adding a date before the start of the range
68
+ range = { from: date, to: to };
69
+ }
70
+ else if (isAfter(date, from)) {
71
+ // adding a date after the start of the range
72
+ range = { from, to: date };
73
+ }
74
+ else if (isAfter(date, to)) {
75
+ // adding a date after the end of the range
76
+ range = { from, to: date };
77
+ }
78
+ else {
79
+ throw new Error("Invalid range");
80
+ }
81
+ }
82
+ // check for min / max
83
+ if (range?.from && range?.to) {
84
+ const diff = dateLib.differenceInCalendarDays(range.to, range.from);
85
+ if (max > 0 && diff > max) {
86
+ range = { from: date, to: undefined };
87
+ }
88
+ else if (min > 1 && diff < min) {
89
+ range = { from: date, to: undefined };
90
+ }
91
+ }
92
+ return range;
93
+ }
94
+
95
+ export { addToRange };