@mantine/schedule 9.0.0-alpha.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 (482) hide show
  1. package/README.md +21 -0
  2. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs +107 -0
  3. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs.map +1 -0
  4. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.module.css.cjs +7 -0
  5. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.module.css.cjs.map +1 -0
  6. package/cjs/components/DayView/DayView.cjs +404 -0
  7. package/cjs/components/DayView/DayView.cjs.map +1 -0
  8. package/cjs/components/DayView/DayView.module.css.cjs +7 -0
  9. package/cjs/components/DayView/DayView.module.css.cjs.map +1 -0
  10. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs +108 -0
  11. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -0
  12. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs +52 -0
  13. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -0
  14. package/cjs/components/DragContext/DragContext.cjs +9 -0
  15. package/cjs/components/DragContext/DragContext.cjs.map +1 -0
  16. package/cjs/components/MobileMonthView/MobileMonthView.cjs +295 -0
  17. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -0
  18. package/cjs/components/MobileMonthView/MobileMonthView.module.css.cjs +7 -0
  19. package/cjs/components/MobileMonthView/MobileMonthView.module.css.cjs.map +1 -0
  20. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs +54 -0
  21. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -0
  22. package/cjs/components/MonthView/MonthView.cjs +410 -0
  23. package/cjs/components/MonthView/MonthView.cjs.map +1 -0
  24. package/cjs/components/MonthView/MonthView.module.css.cjs +7 -0
  25. package/cjs/components/MonthView/MonthView.module.css.cjs.map +1 -0
  26. package/cjs/components/MonthView/get-month-view-events/add-event-to-day-groups.cjs +26 -0
  27. package/cjs/components/MonthView/get-month-view-events/add-event-to-day-groups.cjs.map +1 -0
  28. package/cjs/components/MonthView/get-month-view-events/calculate-event-position-in-week.cjs +37 -0
  29. package/cjs/components/MonthView/get-month-view-events/calculate-event-position-in-week.cjs.map +1 -0
  30. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs +31 -0
  31. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +1 -0
  32. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +83 -0
  33. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -0
  34. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs +46 -0
  35. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -0
  36. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs +40 -0
  37. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -0
  38. package/cjs/components/MonthView/handle-month-view-key-down.cjs +147 -0
  39. package/cjs/components/MonthView/handle-month-view-key-down.cjs.map +1 -0
  40. package/cjs/components/MoreEvents/MoreEvents.cjs +124 -0
  41. package/cjs/components/MoreEvents/MoreEvents.cjs.map +1 -0
  42. package/cjs/components/MoreEvents/MoreEvents.module.css.cjs +7 -0
  43. package/cjs/components/MoreEvents/MoreEvents.module.css.cjs.map +1 -0
  44. package/cjs/components/Schedule/Schedule.cjs +168 -0
  45. package/cjs/components/Schedule/Schedule.cjs.map +1 -0
  46. package/cjs/components/Schedule/Schedule.module.css.cjs +7 -0
  47. package/cjs/components/Schedule/Schedule.module.css.cjs.map +1 -0
  48. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs +126 -0
  49. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -0
  50. package/cjs/components/ScheduleEvent/ScheduleEvent.module.css.cjs +7 -0
  51. package/cjs/components/ScheduleEvent/ScheduleEvent.module.css.cjs.map +1 -0
  52. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs +91 -0
  53. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -0
  54. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.module.css.cjs +7 -0
  55. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.module.css.cjs.map +1 -0
  56. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs +195 -0
  57. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -0
  58. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.module.css.cjs +7 -0
  59. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.module.css.cjs.map +1 -0
  60. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs +59 -0
  61. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -0
  62. package/cjs/components/ScheduleHeader/ScheduleHeader.module.css.cjs +7 -0
  63. package/cjs/components/ScheduleHeader/ScheduleHeader.module.css.cjs.map +1 -0
  64. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs +86 -0
  65. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -0
  66. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.cjs +131 -0
  67. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.cjs.map +1 -0
  68. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.module.css.cjs +7 -0
  69. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.module.css.cjs.map +1 -0
  70. package/cjs/components/WeekView/WeekView.cjs +557 -0
  71. package/cjs/components/WeekView/WeekView.cjs.map +1 -0
  72. package/cjs/components/WeekView/WeekView.module.css.cjs +7 -0
  73. package/cjs/components/WeekView/WeekView.module.css.cjs.map +1 -0
  74. package/cjs/components/WeekView/WeekViewDay.cjs +100 -0
  75. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -0
  76. package/cjs/components/WeekView/get-week-label/get-week-label.cjs +36 -0
  77. package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -0
  78. package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs +31 -0
  79. package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs.map +1 -0
  80. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-offset.cjs +31 -0
  81. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-offset.cjs.map +1 -0
  82. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-width.cjs +33 -0
  83. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-width.cjs.map +1 -0
  84. package/cjs/components/WeekView/get-week-view-events/calculate-event-days.cjs +19 -0
  85. package/cjs/components/WeekView/get-week-view-events/calculate-event-days.cjs.map +1 -0
  86. package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs +24 -0
  87. package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs.map +1 -0
  88. package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs +36 -0
  89. package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs.map +1 -0
  90. package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs +42 -0
  91. package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs.map +1 -0
  92. package/cjs/components/WeekView/get-week-view-events/get-event-end-date.cjs +19 -0
  93. package/cjs/components/WeekView/get-week-view-events/get-event-end-date.cjs.map +1 -0
  94. package/cjs/components/WeekView/get-week-view-events/get-hanging-status.cjs +32 -0
  95. package/cjs/components/WeekView/get-week-view-events/get-hanging-status.cjs.map +1 -0
  96. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs +142 -0
  97. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -0
  98. package/cjs/components/WeekView/get-week-view-events/get-week-view-events.cjs +12 -0
  99. package/cjs/components/WeekView/get-week-view-events/get-week-view-events.cjs.map +1 -0
  100. package/cjs/components/WeekView/handle-week-view-key-down.cjs +135 -0
  101. package/cjs/components/WeekView/handle-week-view-key-down.cjs.map +1 -0
  102. package/cjs/components/YearView/YearView.cjs +216 -0
  103. package/cjs/components/YearView/YearView.cjs.map +1 -0
  104. package/cjs/components/YearView/YearView.module.css.cjs +7 -0
  105. package/cjs/components/YearView/YearView.module.css.cjs.map +1 -0
  106. package/cjs/components/YearView/YearViewMonth.cjs +158 -0
  107. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -0
  108. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs +52 -0
  109. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -0
  110. package/cjs/components/YearView/handle-year-view-key-down.cjs +210 -0
  111. package/cjs/components/YearView/handle-year-view-key-down.cjs.map +1 -0
  112. package/cjs/hooks/use-drag-drop-handlers.cjs +107 -0
  113. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -0
  114. package/cjs/hooks/use-drag-state.cjs +47 -0
  115. package/cjs/hooks/use-drag-state.cjs.map +1 -0
  116. package/cjs/hooks/use-slot-drag-select.cjs +91 -0
  117. package/cjs/hooks/use-slot-drag-select.cjs.map +1 -0
  118. package/cjs/index.cjs +101 -0
  119. package/cjs/index.cjs.map +1 -0
  120. package/cjs/labels.cjs +34 -0
  121. package/cjs/labels.cjs.map +1 -0
  122. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs +38 -0
  123. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs.map +1 -0
  124. package/cjs/utils/calculate-month-drop-date/calculate-month-drop-date.cjs +26 -0
  125. package/cjs/utils/calculate-month-drop-date/calculate-month-drop-date.cjs.map +1 -0
  126. package/cjs/utils/clamp-interval-minutes/clamp-interval-minutes.cjs +11 -0
  127. package/cjs/utils/clamp-interval-minutes/clamp-interval-minutes.cjs.map +1 -0
  128. package/cjs/utils/format-date/format-date.cjs +18 -0
  129. package/cjs/utils/format-date/format-date.cjs.map +1 -0
  130. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs +24 -0
  131. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs.map +1 -0
  132. package/cjs/utils/get-current-time-position/get-current-time-position.cjs +28 -0
  133. package/cjs/utils/get-current-time-position/get-current-time-position.cjs.map +1 -0
  134. package/cjs/utils/get-day-position/get-day-position.cjs +37 -0
  135. package/cjs/utils/get-day-position/get-day-position.cjs.map +1 -0
  136. package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs +47 -0
  137. package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs.map +1 -0
  138. package/cjs/utils/get-end-of-week/get-end-of-week.cjs +23 -0
  139. package/cjs/utils/get-end-of-week/get-end-of-week.cjs.map +1 -0
  140. package/cjs/utils/get-month-days/get-month-days.cjs +49 -0
  141. package/cjs/utils/get-month-days/get-month-days.cjs.map +1 -0
  142. package/cjs/utils/get-month-range/get-month-range.cjs +32 -0
  143. package/cjs/utils/get-month-range/get-month-range.cjs.map +1 -0
  144. package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs +24 -0
  145. package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs.map +1 -0
  146. package/cjs/utils/get-months-list/get-months-list.cjs +21 -0
  147. package/cjs/utils/get-months-list/get-months-list.cjs.map +1 -0
  148. package/cjs/utils/get-start-of-week/get-start-of-week.cjs +19 -0
  149. package/cjs/utils/get-start-of-week/get-start-of-week.cjs.map +1 -0
  150. package/cjs/utils/get-visible-events/get-visible-events.cjs +18 -0
  151. package/cjs/utils/get-visible-events/get-visible-events.cjs.map +1 -0
  152. package/cjs/utils/get-week-days/get-week-days.cjs +32 -0
  153. package/cjs/utils/get-week-days/get-week-days.cjs.map +1 -0
  154. package/cjs/utils/get-week-number/get-week-number.cjs +22 -0
  155. package/cjs/utils/get-week-number/get-week-number.cjs.map +1 -0
  156. package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs +25 -0
  157. package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs.map +1 -0
  158. package/cjs/utils/get-years-list/get-years-list.cjs +13 -0
  159. package/cjs/utils/get-years-list/get-years-list.cjs.map +1 -0
  160. package/cjs/utils/is-after-min-date/is-after-min-date.cjs +15 -0
  161. package/cjs/utils/is-after-min-date/is-after-min-date.cjs.map +1 -0
  162. package/cjs/utils/is-all-day-event/is-all-day-event.cjs +19 -0
  163. package/cjs/utils/is-all-day-event/is-all-day-event.cjs.map +1 -0
  164. package/cjs/utils/is-before-max-date/is-before-max-date.cjs +15 -0
  165. package/cjs/utils/is-before-max-date/is-before-max-date.cjs.map +1 -0
  166. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs +30 -0
  167. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -0
  168. package/cjs/utils/is-events-overlap/is-events-overlap.cjs +19 -0
  169. package/cjs/utils/is-events-overlap/is-events-overlap.cjs.map +1 -0
  170. package/cjs/utils/is-in-time-range/is-in-time-range.cjs +25 -0
  171. package/cjs/utils/is-in-time-range/is-in-time-range.cjs.map +1 -0
  172. package/cjs/utils/is-multiday-event/is-multiday-event.cjs +17 -0
  173. package/cjs/utils/is-multiday-event/is-multiday-event.cjs.map +1 -0
  174. package/cjs/utils/is-same-month/is-same-month.cjs +15 -0
  175. package/cjs/utils/is-same-month/is-same-month.cjs.map +1 -0
  176. package/cjs/utils/is-within-week/is-within-week.cjs +18 -0
  177. package/cjs/utils/is-within-week/is-within-week.cjs.map +1 -0
  178. package/cjs/utils/next-week/next-week.cjs +18 -0
  179. package/cjs/utils/next-week/next-week.cjs.map +1 -0
  180. package/cjs/utils/parse-time-string/parse-time-string.cjs +10 -0
  181. package/cjs/utils/parse-time-string/parse-time-string.cjs.map +1 -0
  182. package/cjs/utils/previous-week/previous-week.cjs +18 -0
  183. package/cjs/utils/previous-week/previous-week.cjs.map +1 -0
  184. package/cjs/utils/sort-events/sort-events.cjs +21 -0
  185. package/cjs/utils/sort-events/sort-events.cjs.map +1 -0
  186. package/cjs/utils/to-date-string/to-date-string.cjs +15 -0
  187. package/cjs/utils/to-date-string/to-date-string.cjs.map +1 -0
  188. package/cjs/utils/to-time-string/to-time-string.cjs +9 -0
  189. package/cjs/utils/to-time-string/to-time-string.cjs.map +1 -0
  190. package/cjs/utils/validate-event/validate-event.cjs +26 -0
  191. package/cjs/utils/validate-event/validate-event.cjs.map +1 -0
  192. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs +101 -0
  193. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -0
  194. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.module.css.mjs +5 -0
  195. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.module.css.mjs.map +1 -0
  196. package/esm/components/DayView/DayView.mjs +398 -0
  197. package/esm/components/DayView/DayView.mjs.map +1 -0
  198. package/esm/components/DayView/DayView.module.css.mjs +5 -0
  199. package/esm/components/DayView/DayView.module.css.mjs.map +1 -0
  200. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs +106 -0
  201. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -0
  202. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs +46 -0
  203. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -0
  204. package/esm/components/DragContext/DragContext.mjs +7 -0
  205. package/esm/components/DragContext/DragContext.mjs.map +1 -0
  206. package/esm/components/MobileMonthView/MobileMonthView.mjs +288 -0
  207. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -0
  208. package/esm/components/MobileMonthView/MobileMonthView.module.css.mjs +5 -0
  209. package/esm/components/MobileMonthView/MobileMonthView.module.css.mjs.map +1 -0
  210. package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs +48 -0
  211. package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs.map +1 -0
  212. package/esm/components/MonthView/MonthView.mjs +404 -0
  213. package/esm/components/MonthView/MonthView.mjs.map +1 -0
  214. package/esm/components/MonthView/MonthView.module.css.mjs +5 -0
  215. package/esm/components/MonthView/MonthView.module.css.mjs.map +1 -0
  216. package/esm/components/MonthView/get-month-view-events/add-event-to-day-groups.mjs +24 -0
  217. package/esm/components/MonthView/get-month-view-events/add-event-to-day-groups.mjs.map +1 -0
  218. package/esm/components/MonthView/get-month-view-events/calculate-event-position-in-week.mjs +35 -0
  219. package/esm/components/MonthView/get-month-view-events/calculate-event-position-in-week.mjs.map +1 -0
  220. package/esm/components/MonthView/get-month-view-events/find-available-row.mjs +25 -0
  221. package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +1 -0
  222. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +77 -0
  223. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -0
  224. package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs +40 -0
  225. package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs.map +1 -0
  226. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs +34 -0
  227. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs.map +1 -0
  228. package/esm/components/MonthView/handle-month-view-key-down.mjs +145 -0
  229. package/esm/components/MonthView/handle-month-view-key-down.mjs.map +1 -0
  230. package/esm/components/MoreEvents/MoreEvents.mjs +122 -0
  231. package/esm/components/MoreEvents/MoreEvents.mjs.map +1 -0
  232. package/esm/components/MoreEvents/MoreEvents.module.css.mjs +5 -0
  233. package/esm/components/MoreEvents/MoreEvents.module.css.mjs.map +1 -0
  234. package/esm/components/Schedule/Schedule.mjs +166 -0
  235. package/esm/components/Schedule/Schedule.mjs.map +1 -0
  236. package/esm/components/Schedule/Schedule.module.css.mjs +5 -0
  237. package/esm/components/Schedule/Schedule.module.css.mjs.map +1 -0
  238. package/esm/components/ScheduleEvent/ScheduleEvent.mjs +124 -0
  239. package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -0
  240. package/esm/components/ScheduleEvent/ScheduleEvent.module.css.mjs +5 -0
  241. package/esm/components/ScheduleEvent/ScheduleEvent.module.css.mjs.map +1 -0
  242. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs +86 -0
  243. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -0
  244. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.module.css.mjs +5 -0
  245. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.module.css.mjs.map +1 -0
  246. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs +193 -0
  247. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -0
  248. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.module.css.mjs +5 -0
  249. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.module.css.mjs.map +1 -0
  250. package/esm/components/ScheduleHeader/ScheduleHeader.mjs +57 -0
  251. package/esm/components/ScheduleHeader/ScheduleHeader.mjs.map +1 -0
  252. package/esm/components/ScheduleHeader/ScheduleHeader.module.css.mjs +5 -0
  253. package/esm/components/ScheduleHeader/ScheduleHeader.module.css.mjs.map +1 -0
  254. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs +84 -0
  255. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -0
  256. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs +129 -0
  257. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs.map +1 -0
  258. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.module.css.mjs +5 -0
  259. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.module.css.mjs.map +1 -0
  260. package/esm/components/WeekView/WeekView.mjs +551 -0
  261. package/esm/components/WeekView/WeekView.mjs.map +1 -0
  262. package/esm/components/WeekView/WeekView.module.css.mjs +5 -0
  263. package/esm/components/WeekView/WeekView.module.css.mjs.map +1 -0
  264. package/esm/components/WeekView/WeekViewDay.mjs +94 -0
  265. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -0
  266. package/esm/components/WeekView/get-week-label/get-week-label.mjs +30 -0
  267. package/esm/components/WeekView/get-week-label/get-week-label.mjs.map +1 -0
  268. package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs +29 -0
  269. package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs.map +1 -0
  270. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-offset.mjs +25 -0
  271. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-offset.mjs.map +1 -0
  272. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-width.mjs +27 -0
  273. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-width.mjs.map +1 -0
  274. package/esm/components/WeekView/get-week-view-events/calculate-event-days.mjs +13 -0
  275. package/esm/components/WeekView/get-week-view-events/calculate-event-days.mjs.map +1 -0
  276. package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs +22 -0
  277. package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs.map +1 -0
  278. package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs +34 -0
  279. package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs.map +1 -0
  280. package/esm/components/WeekView/get-week-view-events/find-available-column.mjs +40 -0
  281. package/esm/components/WeekView/get-week-view-events/find-available-column.mjs.map +1 -0
  282. package/esm/components/WeekView/get-week-view-events/get-event-end-date.mjs +13 -0
  283. package/esm/components/WeekView/get-week-view-events/get-event-end-date.mjs.map +1 -0
  284. package/esm/components/WeekView/get-week-view-events/get-hanging-status.mjs +26 -0
  285. package/esm/components/WeekView/get-week-view-events/get-hanging-status.mjs.map +1 -0
  286. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs +136 -0
  287. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -0
  288. package/esm/components/WeekView/get-week-view-events/get-week-view-events.mjs +10 -0
  289. package/esm/components/WeekView/get-week-view-events/get-week-view-events.mjs.map +1 -0
  290. package/esm/components/WeekView/handle-week-view-key-down.mjs +133 -0
  291. package/esm/components/WeekView/handle-week-view-key-down.mjs.map +1 -0
  292. package/esm/components/YearView/YearView.mjs +210 -0
  293. package/esm/components/YearView/YearView.mjs.map +1 -0
  294. package/esm/components/YearView/YearView.module.css.mjs +5 -0
  295. package/esm/components/YearView/YearView.module.css.mjs.map +1 -0
  296. package/esm/components/YearView/YearViewMonth.mjs +152 -0
  297. package/esm/components/YearView/YearViewMonth.mjs.map +1 -0
  298. package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs +46 -0
  299. package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs.map +1 -0
  300. package/esm/components/YearView/handle-year-view-key-down.mjs +208 -0
  301. package/esm/components/YearView/handle-year-view-key-down.mjs.map +1 -0
  302. package/esm/hooks/use-drag-drop-handlers.mjs +101 -0
  303. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -0
  304. package/esm/hooks/use-drag-state.mjs +45 -0
  305. package/esm/hooks/use-drag-state.mjs.map +1 -0
  306. package/esm/hooks/use-slot-drag-select.mjs +89 -0
  307. package/esm/hooks/use-slot-drag-select.mjs.map +1 -0
  308. package/esm/index.mjs +48 -0
  309. package/esm/index.mjs.map +1 -0
  310. package/esm/labels.mjs +31 -0
  311. package/esm/labels.mjs.map +1 -0
  312. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs +32 -0
  313. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs.map +1 -0
  314. package/esm/utils/calculate-month-drop-date/calculate-month-drop-date.mjs +20 -0
  315. package/esm/utils/calculate-month-drop-date/calculate-month-drop-date.mjs.map +1 -0
  316. package/esm/utils/clamp-interval-minutes/clamp-interval-minutes.mjs +9 -0
  317. package/esm/utils/clamp-interval-minutes/clamp-interval-minutes.mjs.map +1 -0
  318. package/esm/utils/format-date/format-date.mjs +12 -0
  319. package/esm/utils/format-date/format-date.mjs.map +1 -0
  320. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs +22 -0
  321. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs.map +1 -0
  322. package/esm/utils/get-current-time-position/get-current-time-position.mjs +22 -0
  323. package/esm/utils/get-current-time-position/get-current-time-position.mjs.map +1 -0
  324. package/esm/utils/get-day-position/get-day-position.mjs +31 -0
  325. package/esm/utils/get-day-position/get-day-position.mjs.map +1 -0
  326. package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs +45 -0
  327. package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs.map +1 -0
  328. package/esm/utils/get-end-of-week/get-end-of-week.mjs +17 -0
  329. package/esm/utils/get-end-of-week/get-end-of-week.mjs.map +1 -0
  330. package/esm/utils/get-month-days/get-month-days.mjs +43 -0
  331. package/esm/utils/get-month-days/get-month-days.mjs.map +1 -0
  332. package/esm/utils/get-month-range/get-month-range.mjs +26 -0
  333. package/esm/utils/get-month-range/get-month-range.mjs.map +1 -0
  334. package/esm/utils/get-months-by-quarter/get-months-by-quarter.mjs +18 -0
  335. package/esm/utils/get-months-by-quarter/get-months-by-quarter.mjs.map +1 -0
  336. package/esm/utils/get-months-list/get-months-list.mjs +15 -0
  337. package/esm/utils/get-months-list/get-months-list.mjs.map +1 -0
  338. package/esm/utils/get-start-of-week/get-start-of-week.mjs +13 -0
  339. package/esm/utils/get-start-of-week/get-start-of-week.mjs.map +1 -0
  340. package/esm/utils/get-visible-events/get-visible-events.mjs +16 -0
  341. package/esm/utils/get-visible-events/get-visible-events.mjs.map +1 -0
  342. package/esm/utils/get-week-days/get-week-days.mjs +26 -0
  343. package/esm/utils/get-week-days/get-week-days.mjs.map +1 -0
  344. package/esm/utils/get-week-number/get-week-number.mjs +15 -0
  345. package/esm/utils/get-week-number/get-week-number.mjs.map +1 -0
  346. package/esm/utils/get-weekdays-names/get-weekdays-names.mjs +19 -0
  347. package/esm/utils/get-weekdays-names/get-weekdays-names.mjs.map +1 -0
  348. package/esm/utils/get-years-list/get-years-list.mjs +11 -0
  349. package/esm/utils/get-years-list/get-years-list.mjs.map +1 -0
  350. package/esm/utils/is-after-min-date/is-after-min-date.mjs +9 -0
  351. package/esm/utils/is-after-min-date/is-after-min-date.mjs.map +1 -0
  352. package/esm/utils/is-all-day-event/is-all-day-event.mjs +13 -0
  353. package/esm/utils/is-all-day-event/is-all-day-event.mjs.map +1 -0
  354. package/esm/utils/is-before-max-date/is-before-max-date.mjs +9 -0
  355. package/esm/utils/is-before-max-date/is-before-max-date.mjs.map +1 -0
  356. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs +24 -0
  357. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs.map +1 -0
  358. package/esm/utils/is-events-overlap/is-events-overlap.mjs +13 -0
  359. package/esm/utils/is-events-overlap/is-events-overlap.mjs.map +1 -0
  360. package/esm/utils/is-in-time-range/is-in-time-range.mjs +19 -0
  361. package/esm/utils/is-in-time-range/is-in-time-range.mjs.map +1 -0
  362. package/esm/utils/is-multiday-event/is-multiday-event.mjs +11 -0
  363. package/esm/utils/is-multiday-event/is-multiday-event.mjs.map +1 -0
  364. package/esm/utils/is-same-month/is-same-month.mjs +9 -0
  365. package/esm/utils/is-same-month/is-same-month.mjs.map +1 -0
  366. package/esm/utils/is-within-week/is-within-week.mjs +12 -0
  367. package/esm/utils/is-within-week/is-within-week.mjs.map +1 -0
  368. package/esm/utils/next-week/next-week.mjs +12 -0
  369. package/esm/utils/next-week/next-week.mjs.map +1 -0
  370. package/esm/utils/parse-time-string/parse-time-string.mjs +8 -0
  371. package/esm/utils/parse-time-string/parse-time-string.mjs.map +1 -0
  372. package/esm/utils/previous-week/previous-week.mjs +12 -0
  373. package/esm/utils/previous-week/previous-week.mjs.map +1 -0
  374. package/esm/utils/sort-events/sort-events.mjs +15 -0
  375. package/esm/utils/sort-events/sort-events.mjs.map +1 -0
  376. package/esm/utils/to-date-string/to-date-string.mjs +9 -0
  377. package/esm/utils/to-date-string/to-date-string.mjs.map +1 -0
  378. package/esm/utils/to-time-string/to-time-string.mjs +7 -0
  379. package/esm/utils/to-time-string/to-time-string.mjs.map +1 -0
  380. package/esm/utils/validate-event/validate-event.mjs +20 -0
  381. package/esm/utils/validate-event/validate-event.mjs.map +1 -0
  382. package/lib/components/CurrentTimeIndicator/CurrentTimeIndicator.d.ts +43 -0
  383. package/lib/components/CurrentTimeIndicator/index.d.ts +2 -0
  384. package/lib/components/DayView/DayView.d.ts +106 -0
  385. package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +13 -0
  386. package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +12 -0
  387. package/lib/components/DayView/index.d.ts +9 -0
  388. package/lib/components/DragContext/DragContext.d.ts +18 -0
  389. package/lib/components/DragContext/index.d.ts +2 -0
  390. package/lib/components/MobileMonthView/MobileMonthView.d.ts +94 -0
  391. package/lib/components/MobileMonthView/get-mobile-month-view-events.d.ts +8 -0
  392. package/lib/components/MobileMonthView/index.d.ts +2 -0
  393. package/lib/components/MonthView/MonthView.d.ts +103 -0
  394. package/lib/components/MonthView/get-month-view-events/add-event-to-day-groups.d.ts +14 -0
  395. package/lib/components/MonthView/get-month-view-events/calculate-event-position-in-week.d.ts +18 -0
  396. package/lib/components/MonthView/get-month-view-events/find-available-row.d.ts +10 -0
  397. package/lib/components/MonthView/get-month-view-events/get-month-positioned-events.d.ts +27 -0
  398. package/lib/components/MonthView/get-month-view-events/get-month-view-events.d.ts +16 -0
  399. package/lib/components/MonthView/get-month-view-events/get-weeks-in-range.d.ts +15 -0
  400. package/lib/components/MonthView/handle-month-view-key-down.d.ts +10 -0
  401. package/lib/components/MonthView/index.d.ts +9 -0
  402. package/lib/components/MoreEvents/MoreEvents.d.ts +40 -0
  403. package/lib/components/MoreEvents/index.d.ts +2 -0
  404. package/lib/components/Schedule/Schedule.d.ts +97 -0
  405. package/lib/components/Schedule/index.d.ts +2 -0
  406. package/lib/components/ScheduleEvent/ScheduleEvent.d.ts +54 -0
  407. package/lib/components/ScheduleEvent/index.d.ts +2 -0
  408. package/lib/components/ScheduleHeader/HeaderControl/HeaderControl.d.ts +43 -0
  409. package/lib/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.d.ts +52 -0
  410. package/lib/components/ScheduleHeader/ScheduleHeader.d.ts +40 -0
  411. package/lib/components/ScheduleHeader/ScheduleHeaderBase.d.ts +53 -0
  412. package/lib/components/ScheduleHeader/ViewSelect/ViewSelect.d.ts +27 -0
  413. package/lib/components/ScheduleHeader/index.d.ts +2 -0
  414. package/lib/components/WeekView/WeekView.d.ts +119 -0
  415. package/lib/components/WeekView/WeekViewDay.d.ts +58 -0
  416. package/lib/components/WeekView/get-week-label/get-week-label.d.ts +13 -0
  417. package/lib/components/WeekView/get-week-view-events/assign-event-rows.d.ts +2 -0
  418. package/lib/components/WeekView/get-week-view-events/calculate-all-day-event-offset.d.ts +11 -0
  419. package/lib/components/WeekView/get-week-view-events/calculate-all-day-event-width.d.ts +12 -0
  420. package/lib/components/WeekView/get-week-view-events/calculate-event-days.d.ts +9 -0
  421. package/lib/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.d.ts +2 -0
  422. package/lib/components/WeekView/get-week-view-events/filter-week-view-events.d.ts +14 -0
  423. package/lib/components/WeekView/get-week-view-events/find-available-column.d.ts +9 -0
  424. package/lib/components/WeekView/get-week-view-events/get-event-end-date.d.ts +3 -0
  425. package/lib/components/WeekView/get-week-view-events/get-hanging-status.d.ts +9 -0
  426. package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +23 -0
  427. package/lib/components/WeekView/get-week-view-events/get-week-view-events.d.ts +7 -0
  428. package/lib/components/WeekView/handle-week-view-key-down.d.ts +10 -0
  429. package/lib/components/WeekView/index.d.ts +9 -0
  430. package/lib/components/YearView/YearView.d.ts +51 -0
  431. package/lib/components/YearView/YearViewMonth.d.ts +62 -0
  432. package/lib/components/YearView/get-year-view-events/get-year-view-events.d.ts +8 -0
  433. package/lib/components/YearView/handle-year-view-key-down.d.ts +11 -0
  434. package/lib/components/YearView/index.d.ts +9 -0
  435. package/lib/hooks/index.d.ts +5 -0
  436. package/lib/hooks/use-drag-drop-handlers.d.ts +51 -0
  437. package/lib/hooks/use-drag-state.d.ts +32 -0
  438. package/lib/hooks/use-slot-drag-select.d.ts +10 -0
  439. package/lib/index.d.mts +15 -0
  440. package/lib/index.d.ts +15 -0
  441. package/lib/labels.d.ts +24 -0
  442. package/lib/test-utils.d.ts +7 -0
  443. package/lib/types.d.ts +91 -0
  444. package/lib/utils/calculate-drop-time/calculate-drop-time.d.ts +22 -0
  445. package/lib/utils/calculate-month-drop-date/calculate-month-drop-date.d.ts +14 -0
  446. package/lib/utils/clamp-interval-minutes/clamp-interval-minutes.d.ts +2 -0
  447. package/lib/utils/format-date/format-date.d.ts +8 -0
  448. package/lib/utils/get-business-hours-mod/get-business-hours-mod.d.ts +17 -0
  449. package/lib/utils/get-current-time-position/get-current-time-position.d.ts +6 -0
  450. package/lib/utils/get-day-position/get-day-position.d.ts +15 -0
  451. package/lib/utils/get-day-time-intervals/get-day-time-intervals.d.ts +19 -0
  452. package/lib/utils/get-end-of-week/get-end-of-week.d.ts +3 -0
  453. package/lib/utils/get-month-days/get-month-days.d.ts +8 -0
  454. package/lib/utils/get-month-range/get-month-range.d.ts +13 -0
  455. package/lib/utils/get-months-by-quarter/get-months-by-quarter.d.ts +2 -0
  456. package/lib/utils/get-months-list/get-months-list.d.ts +11 -0
  457. package/lib/utils/get-start-of-week/get-start-of-week.d.ts +7 -0
  458. package/lib/utils/get-visible-events/get-visible-events.d.ts +9 -0
  459. package/lib/utils/get-week-days/get-week-days.d.ts +13 -0
  460. package/lib/utils/get-week-number/get-week-number.d.ts +2 -0
  461. package/lib/utils/get-weekdays-names/get-weekdays-names.d.ts +8 -0
  462. package/lib/utils/get-years-list/get-years-list.d.ts +6 -0
  463. package/lib/utils/index.d.ts +40 -0
  464. package/lib/utils/is-after-min-date/is-after-min-date.d.ts +2 -0
  465. package/lib/utils/is-all-day-event/is-all-day-event.d.ts +7 -0
  466. package/lib/utils/is-before-max-date/is-before-max-date.d.ts +2 -0
  467. package/lib/utils/is-event-in-time-range/is-event-in-time-range.d.ts +8 -0
  468. package/lib/utils/is-events-overlap/is-events-overlap.d.ts +3 -0
  469. package/lib/utils/is-in-time-range/is-in-time-range.d.ts +9 -0
  470. package/lib/utils/is-multiday-event/is-multiday-event.d.ts +2 -0
  471. package/lib/utils/is-same-month/is-same-month.d.ts +2 -0
  472. package/lib/utils/is-within-week/is-within-week.d.ts +8 -0
  473. package/lib/utils/next-week/next-week.d.ts +2 -0
  474. package/lib/utils/parse-time-string/parse-time-string.d.ts +6 -0
  475. package/lib/utils/previous-week/previous-week.d.ts +2 -0
  476. package/lib/utils/sort-events/sort-events.d.ts +3 -0
  477. package/lib/utils/to-date-string/to-date-string.d.ts +2 -0
  478. package/lib/utils/to-time-string/to-time-string.d.ts +2 -0
  479. package/lib/utils/validate-event/validate-event.d.ts +2 -0
  480. package/package.json +50 -0
  481. package/styles.css +1948 -0
  482. package/styles.layer.css +1949 -0
@@ -0,0 +1,210 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ function getDirection(key) {
5
+ switch (key) {
6
+ case "ArrowDown":
7
+ return "down";
8
+ case "ArrowUp":
9
+ return "up";
10
+ case "ArrowRight":
11
+ return "right";
12
+ case "ArrowLeft":
13
+ return "left";
14
+ default:
15
+ return null;
16
+ }
17
+ }
18
+ function getControlsSize(controlsRef) {
19
+ if (!controlsRef.current) {
20
+ return null;
21
+ }
22
+ return controlsRef.current.map(
23
+ (month) => month ? month.map((week) => week ? week.length : 0) : []
24
+ );
25
+ }
26
+ function getNextPosition({
27
+ direction,
28
+ monthIndex,
29
+ weekIndex,
30
+ dayIndex,
31
+ size
32
+ }) {
33
+ const currentMonthSize = size[monthIndex];
34
+ if (!currentMonthSize) {
35
+ return null;
36
+ }
37
+ switch (direction) {
38
+ case "up": {
39
+ if (weekIndex === 0) {
40
+ if (monthIndex === 0) {
41
+ return null;
42
+ }
43
+ const prevMonthSize = size[monthIndex - 1];
44
+ if (!prevMonthSize || prevMonthSize.length === 0) {
45
+ return null;
46
+ }
47
+ const lastWeekIndex = prevMonthSize.length - 1;
48
+ const clampedDayIndex2 = Math.min(dayIndex, prevMonthSize[lastWeekIndex] - 1);
49
+ return {
50
+ monthIndex: monthIndex - 1,
51
+ weekIndex: lastWeekIndex,
52
+ dayIndex: clampedDayIndex2
53
+ };
54
+ }
55
+ const prevWeekSize = currentMonthSize[weekIndex - 1];
56
+ const clampedDayIndex = Math.min(dayIndex, prevWeekSize - 1);
57
+ return {
58
+ monthIndex,
59
+ weekIndex: weekIndex - 1,
60
+ dayIndex: clampedDayIndex
61
+ };
62
+ }
63
+ case "down": {
64
+ if (weekIndex === currentMonthSize.length - 1) {
65
+ if (monthIndex === size.length - 1) {
66
+ return null;
67
+ }
68
+ const nextMonthSize = size[monthIndex + 1];
69
+ if (!nextMonthSize || nextMonthSize.length === 0) {
70
+ return null;
71
+ }
72
+ const clampedDayIndex2 = Math.min(dayIndex, nextMonthSize[0] - 1);
73
+ return {
74
+ monthIndex: monthIndex + 1,
75
+ weekIndex: 0,
76
+ dayIndex: clampedDayIndex2
77
+ };
78
+ }
79
+ const nextWeekSize = currentMonthSize[weekIndex + 1];
80
+ const clampedDayIndex = Math.min(dayIndex, nextWeekSize - 1);
81
+ return {
82
+ monthIndex,
83
+ weekIndex: weekIndex + 1,
84
+ dayIndex: clampedDayIndex
85
+ };
86
+ }
87
+ case "left": {
88
+ if (dayIndex === 0) {
89
+ if (weekIndex === 0) {
90
+ if (monthIndex === 0) {
91
+ return null;
92
+ }
93
+ const prevMonthSize = size[monthIndex - 1];
94
+ if (!prevMonthSize || prevMonthSize.length === 0) {
95
+ return null;
96
+ }
97
+ const lastWeekIndex = prevMonthSize.length - 1;
98
+ return {
99
+ monthIndex: monthIndex - 1,
100
+ weekIndex: lastWeekIndex,
101
+ dayIndex: prevMonthSize[lastWeekIndex] - 1
102
+ };
103
+ }
104
+ return {
105
+ monthIndex,
106
+ weekIndex: weekIndex - 1,
107
+ dayIndex: currentMonthSize[weekIndex - 1] - 1
108
+ };
109
+ }
110
+ return {
111
+ monthIndex,
112
+ weekIndex,
113
+ dayIndex: dayIndex - 1
114
+ };
115
+ }
116
+ case "right": {
117
+ const currentWeekSize = currentMonthSize[weekIndex];
118
+ if (dayIndex === currentWeekSize - 1) {
119
+ if (weekIndex === currentMonthSize.length - 1) {
120
+ if (monthIndex === size.length - 1) {
121
+ return null;
122
+ }
123
+ const nextMonthSize = size[monthIndex + 1];
124
+ if (!nextMonthSize || nextMonthSize.length === 0) {
125
+ return null;
126
+ }
127
+ return {
128
+ monthIndex: monthIndex + 1,
129
+ weekIndex: 0,
130
+ dayIndex: 0
131
+ };
132
+ }
133
+ return {
134
+ monthIndex,
135
+ weekIndex: weekIndex + 1,
136
+ dayIndex: 0
137
+ };
138
+ }
139
+ return {
140
+ monthIndex,
141
+ weekIndex,
142
+ dayIndex: dayIndex + 1
143
+ };
144
+ }
145
+ default:
146
+ return null;
147
+ }
148
+ }
149
+ function focusOnNextFocusableControl({
150
+ controlsRef,
151
+ direction,
152
+ monthIndex,
153
+ weekIndex,
154
+ dayIndex,
155
+ size
156
+ }) {
157
+ const nextPosition = getNextPosition({
158
+ direction,
159
+ monthIndex,
160
+ weekIndex,
161
+ dayIndex,
162
+ size
163
+ });
164
+ if (!nextPosition) {
165
+ return;
166
+ }
167
+ const controlToFocus = controlsRef.current?.[nextPosition.monthIndex]?.[nextPosition.weekIndex]?.[nextPosition.dayIndex];
168
+ if (!controlToFocus) {
169
+ return;
170
+ }
171
+ if (controlToFocus.disabled || controlToFocus.getAttribute("data-hidden") || controlToFocus.getAttribute("data-outside") || controlToFocus.getAttribute("data-day-placeholder")) {
172
+ focusOnNextFocusableControl({
173
+ controlsRef,
174
+ direction,
175
+ monthIndex: nextPosition.monthIndex,
176
+ weekIndex: nextPosition.weekIndex,
177
+ dayIndex: nextPosition.dayIndex,
178
+ size
179
+ });
180
+ } else {
181
+ controlToFocus.focus();
182
+ }
183
+ }
184
+ function handleYearViewKeyDown({
185
+ controlsRef,
186
+ monthIndex,
187
+ weekIndex,
188
+ dayIndex,
189
+ event
190
+ }) {
191
+ const direction = getDirection(event.key);
192
+ if (direction) {
193
+ event.preventDefault();
194
+ const size = getControlsSize(controlsRef);
195
+ if (!size) {
196
+ return;
197
+ }
198
+ focusOnNextFocusableControl({
199
+ controlsRef,
200
+ direction,
201
+ monthIndex,
202
+ weekIndex,
203
+ dayIndex,
204
+ size
205
+ });
206
+ }
207
+ }
208
+
209
+ exports.handleYearViewKeyDown = handleYearViewKeyDown;
210
+ //# sourceMappingURL=handle-year-view-key-down.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-year-view-key-down.cjs","sources":["../../../src/components/YearView/handle-year-view-key-down.ts"],"sourcesContent":["import { RefObject } from 'react';\n\n/** Reference to a 3D array of day buttons: [monthIndex][weekIndex][dayIndex] */\nexport type YearViewControlsRef = RefObject<HTMLButtonElement[][][]>;\n\ntype Direction = 'up' | 'down' | 'left' | 'right';\n\ninterface DayPosition {\n monthIndex: number;\n weekIndex: number;\n dayIndex: number;\n}\n\nfunction getDirection(key: KeyboardEvent['key']): Direction | null {\n switch (key) {\n case 'ArrowDown':\n return 'down';\n case 'ArrowUp':\n return 'up';\n case 'ArrowRight':\n return 'right';\n case 'ArrowLeft':\n return 'left';\n default:\n return null;\n }\n}\n\nfunction getControlsSize(controlsRef: YearViewControlsRef): number[][] | null {\n if (!controlsRef.current) {\n return null;\n }\n return controlsRef.current.map((month) =>\n month ? month.map((week) => (week ? week.length : 0)) : []\n );\n}\n\ninterface GetNextPositionInput {\n direction: Direction;\n monthIndex: number;\n weekIndex: number;\n dayIndex: number;\n size: number[][];\n}\n\nfunction getNextPosition({\n direction,\n monthIndex,\n weekIndex,\n dayIndex,\n size,\n}: GetNextPositionInput): DayPosition | null {\n const currentMonthSize = size[monthIndex];\n if (!currentMonthSize) {\n return null;\n }\n\n switch (direction) {\n case 'up': {\n if (weekIndex === 0) {\n if (monthIndex === 0) {\n return null;\n }\n const prevMonthSize = size[monthIndex - 1];\n if (!prevMonthSize || prevMonthSize.length === 0) {\n return null;\n }\n\n const lastWeekIndex = prevMonthSize.length - 1;\n const clampedDayIndex = Math.min(dayIndex, prevMonthSize[lastWeekIndex] - 1);\n return {\n monthIndex: monthIndex - 1,\n weekIndex: lastWeekIndex,\n dayIndex: clampedDayIndex,\n };\n }\n\n const prevWeekSize = currentMonthSize[weekIndex - 1];\n const clampedDayIndex = Math.min(dayIndex, prevWeekSize - 1);\n return {\n monthIndex,\n weekIndex: weekIndex - 1,\n dayIndex: clampedDayIndex,\n };\n }\n\n case 'down': {\n if (weekIndex === currentMonthSize.length - 1) {\n if (monthIndex === size.length - 1) {\n return null;\n }\n const nextMonthSize = size[monthIndex + 1];\n if (!nextMonthSize || nextMonthSize.length === 0) {\n return null;\n }\n\n const clampedDayIndex = Math.min(dayIndex, nextMonthSize[0] - 1);\n return {\n monthIndex: monthIndex + 1,\n weekIndex: 0,\n dayIndex: clampedDayIndex,\n };\n }\n\n const nextWeekSize = currentMonthSize[weekIndex + 1];\n const clampedDayIndex = Math.min(dayIndex, nextWeekSize - 1);\n return {\n monthIndex,\n weekIndex: weekIndex + 1,\n dayIndex: clampedDayIndex,\n };\n }\n\n case 'left': {\n if (dayIndex === 0) {\n if (weekIndex === 0) {\n if (monthIndex === 0) {\n return null;\n }\n const prevMonthSize = size[monthIndex - 1];\n if (!prevMonthSize || prevMonthSize.length === 0) {\n return null;\n }\n const lastWeekIndex = prevMonthSize.length - 1;\n return {\n monthIndex: monthIndex - 1,\n weekIndex: lastWeekIndex,\n dayIndex: prevMonthSize[lastWeekIndex] - 1,\n };\n }\n\n return {\n monthIndex,\n weekIndex: weekIndex - 1,\n dayIndex: currentMonthSize[weekIndex - 1] - 1,\n };\n }\n\n return {\n monthIndex,\n weekIndex,\n dayIndex: dayIndex - 1,\n };\n }\n\n case 'right': {\n const currentWeekSize = currentMonthSize[weekIndex];\n\n if (dayIndex === currentWeekSize - 1) {\n if (weekIndex === currentMonthSize.length - 1) {\n if (monthIndex === size.length - 1) {\n return null;\n }\n const nextMonthSize = size[monthIndex + 1];\n if (!nextMonthSize || nextMonthSize.length === 0) {\n return null;\n }\n return {\n monthIndex: monthIndex + 1,\n weekIndex: 0,\n dayIndex: 0,\n };\n }\n\n return {\n monthIndex,\n weekIndex: weekIndex + 1,\n dayIndex: 0,\n };\n }\n\n return {\n monthIndex,\n weekIndex,\n dayIndex: dayIndex + 1,\n };\n }\n\n default:\n return null;\n }\n}\n\ninterface FocusOnNextControlInput {\n controlsRef: YearViewControlsRef;\n direction: Direction;\n monthIndex: number;\n weekIndex: number;\n dayIndex: number;\n size: number[][];\n}\n\nfunction focusOnNextFocusableControl({\n controlsRef,\n direction,\n monthIndex,\n weekIndex,\n dayIndex,\n size,\n}: FocusOnNextControlInput): void {\n const nextPosition = getNextPosition({\n direction,\n monthIndex,\n weekIndex,\n dayIndex,\n size,\n });\n\n if (!nextPosition) {\n return;\n }\n\n const controlToFocus =\n controlsRef.current?.[nextPosition.monthIndex]?.[nextPosition.weekIndex]?.[\n nextPosition.dayIndex\n ];\n\n if (!controlToFocus) {\n return;\n }\n\n if (\n controlToFocus.disabled ||\n controlToFocus.getAttribute('data-hidden') ||\n controlToFocus.getAttribute('data-outside') ||\n controlToFocus.getAttribute('data-day-placeholder')\n ) {\n focusOnNextFocusableControl({\n controlsRef,\n direction,\n monthIndex: nextPosition.monthIndex,\n weekIndex: nextPosition.weekIndex,\n dayIndex: nextPosition.dayIndex,\n size,\n });\n } else {\n controlToFocus.focus();\n }\n}\n\nexport interface HandleYearViewKeyDownInput {\n controlsRef: YearViewControlsRef;\n monthIndex: number;\n weekIndex: number;\n dayIndex: number;\n event: React.KeyboardEvent<HTMLButtonElement>;\n}\n\nexport function handleYearViewKeyDown({\n controlsRef,\n monthIndex,\n weekIndex,\n dayIndex,\n event,\n}: HandleYearViewKeyDownInput): void {\n const direction = getDirection(event.key);\n\n if (direction) {\n event.preventDefault();\n\n const size = getControlsSize(controlsRef);\n\n if (!size) {\n return;\n }\n\n focusOnNextFocusableControl({\n controlsRef,\n direction,\n monthIndex,\n weekIndex,\n dayIndex,\n size,\n });\n }\n}\n"],"names":["clampedDayIndex"],"mappings":";;;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAA6C,CAAA;AACjE,CAAA,CAAA,QAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAK,CAAA,CAAA,CAAA,CACX,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAEb,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqD,CAAA;AAC5E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAY,OAAA,CAAA,CAAS,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAI,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,GAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAA,CAAI,CAAC,IAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,CAAA,CAAK,MAAA,CAAA,CAAA,CAAS,CAAE,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA;AAAC,CAAA,CAAA,CAC3D,CAAA;AACF,CAAA;AAUA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,eAAA,CAAgB,CAAA;AAAA,CAAA,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA,CAAA,CAA6C,CAAA;AAC3C,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAA,CAAA,CAAA,EAAK,UAAU,CAAA,CAAA;AACxC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACT,CAAA;AAEA,CAAA,CAAA,QAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAW,CAAA,CAAA,CAAA,CACjB,CAAA,CAAA,CAAA,CAAA,CAAK,IAAA,CAAA,CAAM,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAc,CAAA,CAAA,CAAG,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAe,CAAA,CAAA,CAAG,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,aAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,aAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,cAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,aAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,IAAI,CAAC,CAAA,CAAA;AAC3E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,QAAA,CAAA,CAAUA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAe,CAAC,CAAA,CAAA;AAC3D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,QAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,CAAA,CAAK,MAAA,CAAA,CAAQ,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,SAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,UAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,aAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,aAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,IAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,aAAA,CAAc,CAAC,IAAI,CAAC,CAAA,CAAA;AAC/D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,QAAA,CAAA,CAAUA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAe,CAAC,CAAA,CAAA;AAC3D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,QAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,CAAA,CAAK,MAAA,CAAA,CAAQ,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAa,CAAA,CAAA,CAAG,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAc,CAAA,CAAA,CAAG,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAe,CAAA,CAAA,CAAG,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,aAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,aAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,cAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,QAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAI,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3C,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,SAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9C,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,CAAA,CAAK,OAAA,CAAA,CAAS,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAiB,SAAS,CAAA,CAAA;AAElD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAkB,CAAA,CAAA,CAAG,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,SAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,UAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAA;AAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,aAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAC,CAAA,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,aAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA;AAChD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAW,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,QAAA,CAAA,CAAU,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,QAAA,CAAA,CAAU,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACZ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAEb,CAAA;AAWA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,2BAAA,CAA4B,CAAA;AAAA,CAAA,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA,CAAA,CAAkC,CAAA;AAChC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AAAA,CAAA,CAAA,CAAA,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CACD,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,cAAA,CAAA,CAAA,CACJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,YAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,IAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,GACrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,QACf,CAAA,CAAA;AAEF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CACE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,cAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CACzC,cAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA,CAAA,CAClD,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,2BAAA,CAA4B,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACvB,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACD,CAAA,CAAA;AAAA,CAAA,CACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAAA,CAAA,CACvB,CAAA;AACF,CAAA;AAUO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,qBAAA,CAAsB,CAAA;AAAA,CAAA,CACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA;AACF,CAAA,CAAA,CAAqC,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,GAAG,CAAA,CAAA;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,SAAA,CAAA,CAAW,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA;AAErB,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,WAAW,CAAA,CAAA;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,2BAAA,CAA4B,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACD,CAAA,CAAA;AAAA,CAAA,CACH,CAAA;AACF,CAAA;;"}
@@ -0,0 +1,107 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ var dayjs = require('dayjs');
5
+ var React = require('react');
6
+ var useDragState = require('./use-drag-state.cjs');
7
+
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var dayjs__default = /*#__PURE__*/_interopDefault(dayjs);
11
+
12
+ function useDragDropHandlers(options) {
13
+ const {
14
+ enabled,
15
+ mode,
16
+ onEventDrop,
17
+ canDragEvent,
18
+ onEventDragStart,
19
+ onEventDragEnd,
20
+ calculateDropTarget
21
+ } = options;
22
+ const dragState = useDragState.useDragState();
23
+ const [dropTarget, setDropTarget] = React.useState(null);
24
+ const handleDragStart = React.useCallback(
25
+ (event) => {
26
+ if (!enabled || mode === "static") {
27
+ return;
28
+ }
29
+ dragState.startDrag(event);
30
+ onEventDragStart?.(event);
31
+ },
32
+ [enabled, mode, dragState, onEventDragStart]
33
+ );
34
+ const handleDragEnd = React.useCallback(() => {
35
+ dragState.endDrag();
36
+ setDropTarget(null);
37
+ onEventDragEnd?.();
38
+ }, [dragState, onEventDragEnd]);
39
+ const handleDragOver = React.useCallback(
40
+ (event, target) => {
41
+ if (!enabled || !dragState.state.isDragging || mode === "static") {
42
+ return;
43
+ }
44
+ event.preventDefault();
45
+ event.dataTransfer.dropEffect = "move";
46
+ setDropTarget(target);
47
+ },
48
+ [enabled, mode, dragState.state.isDragging]
49
+ );
50
+ const handleDragLeave = React.useCallback(() => {
51
+ setDropTarget(null);
52
+ }, []);
53
+ const handleDrop = React.useCallback(
54
+ (event, target) => {
55
+ event.preventDefault();
56
+ if (!enabled || !dragState.state.draggedEvent || !onEventDrop) {
57
+ return;
58
+ }
59
+ const { start, end } = calculateDropTarget(target, dragState.state.draggedEvent);
60
+ onEventDrop(
61
+ dragState.state.draggedEventId,
62
+ dayjs__default.default(start).format("YYYY-MM-DD HH:mm:ss"),
63
+ dayjs__default.default(end).format("YYYY-MM-DD HH:mm:ss")
64
+ );
65
+ handleDragEnd();
66
+ },
67
+ [enabled, dragState.state, onEventDrop, calculateDropTarget, handleDragEnd]
68
+ );
69
+ const isDraggableEvent = React.useCallback(
70
+ (event) => {
71
+ return enabled && mode !== "static" && (canDragEvent ? canDragEvent(event) : true);
72
+ },
73
+ [enabled, mode, canDragEvent]
74
+ );
75
+ const isDropTarget = React.useCallback(
76
+ (target) => {
77
+ if (dropTarget && typeof dropTarget === "object" && typeof target === "object") {
78
+ return JSON.stringify(dropTarget) === JSON.stringify(target);
79
+ }
80
+ return dropTarget === target;
81
+ },
82
+ [dropTarget]
83
+ );
84
+ const dragContextValue = {
85
+ isDragging: dragState.state.isDragging,
86
+ draggedEventId: dragState.state.draggedEventId,
87
+ draggedEvent: dragState.state.draggedEvent,
88
+ dropTarget: dragState.state.dropTarget,
89
+ onDragStart: handleDragStart,
90
+ onDragEnd: handleDragEnd,
91
+ setDropTarget: dragState.setDropTarget
92
+ };
93
+ return {
94
+ dragContextValue,
95
+ dropTarget,
96
+ handleDragStart,
97
+ handleDragEnd,
98
+ handleDragOver,
99
+ handleDragLeave,
100
+ handleDrop,
101
+ isDraggableEvent,
102
+ isDropTarget
103
+ };
104
+ }
105
+
106
+ exports.useDragDropHandlers = useDragDropHandlers;
107
+ //# sourceMappingURL=use-drag-drop-handlers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-drag-drop-handlers.cjs","sources":["../../src/hooks/use-drag-drop-handlers.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useState } from 'react';\nimport { DragContextValue } from '../components/DragContext/DragContext';\nimport { DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types';\nimport { useDragState } from './use-drag-state';\n\nexport interface UseDragDropHandlersOptions<T = any> {\n /** Whether drag and drop is enabled */\n enabled: boolean;\n\n /** Schedule interaction mode */\n mode: ScheduleMode;\n\n /** Called when event is dropped at new location */\n onEventDrop?: (\n eventId: string | number,\n newStart: DateTimeStringValue,\n newEnd: DateTimeStringValue\n ) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /**\n * Function to calculate drop target dates from drop location.\n * Receives the target location and the dragged event.\n */\n calculateDropTarget: (target: T, draggedEvent: ScheduleEventData) => { start: Date; end: Date };\n}\n\nexport interface DragDropHandlers<T = any> {\n /** Context value for DragContext.Provider */\n dragContextValue: DragContextValue;\n\n /** Current drop target */\n dropTarget: T | null;\n\n /** Handle drag start event */\n handleDragStart: (event: ScheduleEventData) => void;\n\n /** Handle drag end event */\n handleDragEnd: () => void;\n\n /** Handle drag over event */\n handleDragOver: (e: React.DragEvent, target: T) => void;\n\n /** Handle drag leave event */\n handleDragLeave: () => void;\n\n /** Handle drop event */\n handleDrop: (e: React.DragEvent, target: T) => void;\n\n /** Check if event is draggable */\n isDraggableEvent: (event: ScheduleEventData) => boolean;\n\n /** Check if target is the current drop target */\n isDropTarget: (target: T) => boolean;\n}\n\n/**\n * Hook that provides unified drag-drop handlers for Schedule views.\n * Handles drag state management and event drops across Day, Week, and Month views.\n *\n * @template T - Type of the drop target (e.g., slot index, day string, etc.)\n */\nexport function useDragDropHandlers<T = any>(\n options: UseDragDropHandlersOptions<T>\n): DragDropHandlers<T> {\n const {\n enabled,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget,\n } = options;\n\n const dragState = useDragState();\n const [dropTarget, setDropTarget] = useState<T | null>(null);\n\n const handleDragStart = useCallback(\n (event: ScheduleEventData) => {\n if (!enabled || mode === 'static') {\n return;\n }\n dragState.startDrag(event);\n onEventDragStart?.(event);\n },\n [enabled, mode, dragState, onEventDragStart]\n );\n\n const handleDragEnd = useCallback(() => {\n dragState.endDrag();\n setDropTarget(null);\n onEventDragEnd?.();\n }, [dragState, onEventDragEnd]);\n\n const handleDragOver = useCallback(\n (event: React.DragEvent, target: T) => {\n if (!enabled || !dragState.state.isDragging || mode === 'static') {\n return;\n }\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n setDropTarget(target);\n },\n [enabled, mode, dragState.state.isDragging]\n );\n\n const handleDragLeave = useCallback(() => {\n setDropTarget(null);\n }, []);\n\n const handleDrop = useCallback(\n (event: React.DragEvent, target: T) => {\n event.preventDefault();\n\n if (!enabled || !dragState.state.draggedEvent || !onEventDrop) {\n return;\n }\n\n const { start, end } = calculateDropTarget(target, dragState.state.draggedEvent);\n onEventDrop(\n dragState.state.draggedEventId!,\n dayjs(start).format('YYYY-MM-DD HH:mm:ss'),\n dayjs(end).format('YYYY-MM-DD HH:mm:ss')\n );\n handleDragEnd();\n },\n [enabled, dragState.state, onEventDrop, calculateDropTarget, handleDragEnd]\n );\n\n const isDraggableEvent = useCallback(\n (event: ScheduleEventData) => {\n return enabled && mode !== 'static' && (canDragEvent ? canDragEvent(event) : true);\n },\n [enabled, mode, canDragEvent]\n );\n\n const isDropTarget = useCallback(\n (target: T) => {\n // Handle complex target comparison (for WeekView with day + slotIndex)\n if (dropTarget && typeof dropTarget === 'object' && typeof target === 'object') {\n return JSON.stringify(dropTarget) === JSON.stringify(target);\n }\n return dropTarget === target;\n },\n [dropTarget]\n );\n\n const dragContextValue: DragContextValue = {\n isDragging: dragState.state.isDragging,\n draggedEventId: dragState.state.draggedEventId,\n draggedEvent: dragState.state.draggedEvent,\n dropTarget: dragState.state.dropTarget,\n onDragStart: handleDragStart,\n onDragEnd: handleDragEnd,\n setDropTarget: dragState.setDropTarget,\n };\n\n return {\n dragContextValue,\n dropTarget,\n handleDragStart,\n handleDragEnd,\n handleDragOver,\n handleDragLeave,\n handleDrop,\n isDraggableEvent,\n isDropTarget,\n };\n}\n"],"names":["useDragState","useState","useCallback","dayjs"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+
6
+ const initialState = {
7
+ isDragging: false,
8
+ draggedEventId: null,
9
+ draggedEvent: null,
10
+ dropTarget: null
11
+ };
12
+ function useDragState() {
13
+ const [state, setState] = React.useState(initialState);
14
+ const startDrag = React.useCallback((event) => {
15
+ setState({
16
+ isDragging: true,
17
+ draggedEventId: event.id,
18
+ draggedEvent: event,
19
+ dropTarget: null
20
+ });
21
+ }, []);
22
+ const endDrag = React.useCallback(() => {
23
+ setState(initialState);
24
+ }, []);
25
+ const setDropTarget = React.useCallback((target) => {
26
+ setState((prev) => ({
27
+ ...prev,
28
+ dropTarget: target
29
+ }));
30
+ }, []);
31
+ const clearDropTarget = React.useCallback(() => {
32
+ setState((prev) => ({
33
+ ...prev,
34
+ dropTarget: null
35
+ }));
36
+ }, []);
37
+ return {
38
+ state,
39
+ startDrag,
40
+ endDrag,
41
+ setDropTarget,
42
+ clearDropTarget
43
+ };
44
+ }
45
+
46
+ exports.useDragState = useDragState;
47
+ //# sourceMappingURL=use-drag-state.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-drag-state.cjs","sources":["../../src/hooks/use-drag-state.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { DateStringValue, ScheduleEventData } from '../types';\n\nexport interface DropTarget {\n /** Target date in YYYY-MM-DD format */\n date: DateStringValue;\n\n /** Target time in HH:mm:ss format (for DayView/WeekView) */\n time?: string;\n\n /** Target slot index (for DayView/WeekView) */\n slotIndex?: number;\n}\n\nexport interface DragState {\n /** Whether an event is currently being dragged */\n isDragging: boolean;\n\n /** ID of the event being dragged */\n draggedEventId: string | number | null;\n\n /** The event being dragged */\n draggedEvent: ScheduleEventData | null;\n\n /** Current drop target information */\n dropTarget: DropTarget | null;\n}\n\nexport interface UseDragStateReturn {\n /** Current drag state */\n state: DragState;\n\n /** Start dragging an event */\n startDrag: (event: ScheduleEventData) => void;\n\n /** End dragging */\n endDrag: () => void;\n\n /** Set the current drop target */\n setDropTarget: (target: DropTarget | null) => void;\n\n /** Clear the drop target */\n clearDropTarget: () => void;\n}\n\nconst initialState: DragState = {\n isDragging: false,\n draggedEventId: null,\n draggedEvent: null,\n dropTarget: null,\n};\n\nexport function useDragState(): UseDragStateReturn {\n const [state, setState] = useState<DragState>(initialState);\n\n const startDrag = useCallback((event: ScheduleEventData) => {\n setState({\n isDragging: true,\n draggedEventId: event.id,\n draggedEvent: event,\n dropTarget: null,\n });\n }, []);\n\n const endDrag = useCallback(() => {\n setState(initialState);\n }, []);\n\n const setDropTarget = useCallback((target: DropTarget | null) => {\n setState((prev) => ({\n ...prev,\n dropTarget: target,\n }));\n }, []);\n\n const clearDropTarget = useCallback(() => {\n setState((prev) => ({\n ...prev,\n dropTarget: null,\n }));\n }, []);\n\n return {\n state,\n startDrag,\n endDrag,\n setDropTarget,\n clearDropTarget,\n };\n}\n"],"names":["useState","useCallback"],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+
6
+ function useSlotDragSelect({ enabled = true, onDragEnd }) {
7
+ const [selectedRange, setSelectedRange] = React.useState(null);
8
+ const dragRef = React.useRef(null);
9
+ const onDragEndRef = React.useRef(onDragEnd);
10
+ onDragEndRef.current = onDragEnd;
11
+ const handleSlotPointerDown = React.useCallback(
12
+ (_event, index, group) => {
13
+ if (!enabled) {
14
+ return;
15
+ }
16
+ dragRef.current = { group, startIndex: index, currentIndex: index };
17
+ setSelectedRange({ group, start: index, end: index });
18
+ },
19
+ [enabled]
20
+ );
21
+ const isDragging = selectedRange !== null;
22
+ React.useEffect(() => {
23
+ if (!isDragging) {
24
+ return void 0;
25
+ }
26
+ const savedUserSelect = document.body.style.userSelect;
27
+ document.body.style.userSelect = "none";
28
+ const handlePointerMove = (e) => {
29
+ if (!dragRef.current) {
30
+ return;
31
+ }
32
+ const elements = document.elementsFromPoint(e.clientX, e.clientY);
33
+ for (const el of elements) {
34
+ const indexAttr = el.getAttribute?.("data-drag-slot-index");
35
+ const groupAttr = el.getAttribute?.("data-drag-slot-group");
36
+ if (indexAttr != null && groupAttr != null) {
37
+ if (groupAttr === dragRef.current.group) {
38
+ const newIndex = Number(indexAttr);
39
+ if (!isNaN(newIndex) && newIndex !== dragRef.current.currentIndex) {
40
+ dragRef.current.currentIndex = newIndex;
41
+ setSelectedRange({
42
+ group: groupAttr,
43
+ start: Math.min(dragRef.current.startIndex, newIndex),
44
+ end: Math.max(dragRef.current.startIndex, newIndex)
45
+ });
46
+ }
47
+ }
48
+ break;
49
+ }
50
+ }
51
+ };
52
+ const handlePointerUp = () => {
53
+ if (dragRef.current) {
54
+ const { startIndex, currentIndex, group } = dragRef.current;
55
+ if (startIndex !== currentIndex) {
56
+ onDragEndRef.current?.(
57
+ Math.min(startIndex, currentIndex),
58
+ Math.max(startIndex, currentIndex),
59
+ group
60
+ );
61
+ }
62
+ }
63
+ dragRef.current = null;
64
+ setSelectedRange(null);
65
+ };
66
+ document.addEventListener("pointermove", handlePointerMove);
67
+ document.addEventListener("pointerup", handlePointerUp);
68
+ return () => {
69
+ document.body.style.userSelect = savedUserSelect;
70
+ document.removeEventListener("pointermove", handlePointerMove);
71
+ document.removeEventListener("pointerup", handlePointerUp);
72
+ };
73
+ }, [isDragging]);
74
+ const isSlotSelected = React.useCallback(
75
+ (index, group) => {
76
+ if (!selectedRange || selectedRange.group !== group) {
77
+ return false;
78
+ }
79
+ return index >= selectedRange.start && index <= selectedRange.end;
80
+ },
81
+ [selectedRange]
82
+ );
83
+ return {
84
+ handleSlotPointerDown,
85
+ isSlotSelected,
86
+ isDragging
87
+ };
88
+ }
89
+
90
+ exports.useSlotDragSelect = useSlotDragSelect;
91
+ //# sourceMappingURL=use-slot-drag-select.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-slot-drag-select.cjs","sources":["../../src/hooks/use-slot-drag-select.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface DragState {\n group: string;\n startIndex: number;\n currentIndex: number;\n}\n\ninterface SelectedRange {\n group: string;\n start: number;\n end: number;\n}\n\ninterface UseSlotDragSelectInput {\n enabled?: boolean;\n onDragEnd?: (startIndex: number, endIndex: number, group: string) => void;\n}\n\nexport function useSlotDragSelect({ enabled = true, onDragEnd }: UseSlotDragSelectInput) {\n const [selectedRange, setSelectedRange] = useState<SelectedRange | null>(null);\n const dragRef = useRef<DragState | null>(null);\n const onDragEndRef = useRef(onDragEnd);\n onDragEndRef.current = onDragEnd;\n\n const handleSlotPointerDown = useCallback(\n (_event: React.PointerEvent<HTMLButtonElement>, index: number, group: string) => {\n if (!enabled) {\n return;\n }\n dragRef.current = { group, startIndex: index, currentIndex: index };\n setSelectedRange({ group, start: index, end: index });\n },\n [enabled]\n );\n\n const isDragging = selectedRange !== null;\n\n useEffect(() => {\n if (!isDragging) {\n return undefined;\n }\n\n const savedUserSelect = document.body.style.userSelect;\n document.body.style.userSelect = 'none';\n\n const handlePointerMove = (e: PointerEvent) => {\n if (!dragRef.current) {\n return;\n }\n\n const elements = document.elementsFromPoint(e.clientX, e.clientY);\n for (const el of elements) {\n const indexAttr = (el as HTMLElement).getAttribute?.('data-drag-slot-index');\n const groupAttr = (el as HTMLElement).getAttribute?.('data-drag-slot-group');\n if (indexAttr != null && groupAttr != null) {\n if (groupAttr === dragRef.current.group) {\n const newIndex = Number(indexAttr);\n if (!isNaN(newIndex) && newIndex !== dragRef.current.currentIndex) {\n dragRef.current.currentIndex = newIndex;\n setSelectedRange({\n group: groupAttr,\n start: Math.min(dragRef.current.startIndex, newIndex),\n end: Math.max(dragRef.current.startIndex, newIndex),\n });\n }\n }\n break;\n }\n }\n };\n\n const handlePointerUp = () => {\n if (dragRef.current) {\n const { startIndex, currentIndex, group } = dragRef.current;\n if (startIndex !== currentIndex) {\n onDragEndRef.current?.(\n Math.min(startIndex, currentIndex),\n Math.max(startIndex, currentIndex),\n group\n );\n }\n }\n dragRef.current = null;\n setSelectedRange(null);\n };\n\n document.addEventListener('pointermove', handlePointerMove);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.body.style.userSelect = savedUserSelect;\n document.removeEventListener('pointermove', handlePointerMove);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, [isDragging]);\n\n const isSlotSelected = useCallback(\n (index: number, group: string): boolean => {\n if (!selectedRange || selectedRange.group !== group) {\n return false;\n }\n return index >= selectedRange.start && index <= selectedRange.end;\n },\n [selectedRange]\n );\n\n return {\n handleSlotPointerDown,\n isSlotSelected,\n isDragging,\n };\n}\n"],"names":["useState","useRef","useCallback","useEffect"],"mappings":";;;;;AAmBO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,CAAA,CAA2B,CAAA;AACvF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAIA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAA+B,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA;AAC7E,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAUC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAyB,IAAI,CAAA,CAAA;AAC7C,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAeA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAO,SAAS,CAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC5B,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA+C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,KAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA;AAC/E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACZ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAU,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAc,KAAA,CAAA,CAAM,CAAA;AAClE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACtD,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CACV,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAkB,CAAA,CAAA,CAAA,CAAA,CAAA;AAErC,CAAA,CAAAC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACT,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,eAAA,CAAA,CAAA,CAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAK,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,OAAA,CAAA,CAAS,CAAA;AACpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,OAAO,CAAA,CAAA;AAChE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,KAAM,QAAA,CAAA,CAAU,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,sBAAsB,CAAA,CAAA;AAC3E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,sBAAsB,CAAA,CAAA;AAC3E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,SAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,IAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,IAAA,CAAA,CAAM,CAAA;AAC1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,SAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,KAAA,CAAA,CAAO,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,SAAS,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,QAAQ,KAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,YAAA,CAAA,CAAc,CAAA;AACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,gBAAA,CAAiB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACf,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACP,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,QAAQ,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACpD,CAAA,CAAA,GAAK,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACnD,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAC5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA;AAC/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACX,IAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,YAAY,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,IAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,YAAY,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACjC,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACvB,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAe,iBAAiB,CAAA,CAAA;AAC1D,CAAA,CAAA,CAAA,CAAA,QAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,eAAe,CAAA,CAAA;AAEtD,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAK,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAe,iBAAiB,CAAA,CAAA;AAC7D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,eAAe,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC3D,CAAA,CAAA;AAAA,CAAA,CACF,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAA,CAAA;AAEf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiBD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACrB,CAAC,CAAA,CAAA,CAAA,CAAA,GAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2B,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,aAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAChE,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA;AAAA,CAAA,CAAA,CAChB,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CACF,CAAA;AACF,CAAA;;"}