@mantine/schedule 9.1.1 → 9.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs.map +1 -1
  2. package/cjs/components/DayView/DayView.cjs +2 -1
  3. package/cjs/components/DayView/DayView.cjs.map +1 -1
  4. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs +3 -2
  5. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -1
  6. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs +4 -2
  7. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
  8. package/cjs/components/DragContext/DragContext.cjs.map +1 -1
  9. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  10. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -1
  11. package/cjs/components/MonthView/MonthView.cjs +19 -9
  12. package/cjs/components/MonthView/MonthView.cjs.map +1 -1
  13. package/cjs/components/MonthView/get-month-view-events/add-event-to-day-groups.cjs.map +1 -1
  14. package/cjs/components/MonthView/get-month-view-events/calculate-event-position-in-week.cjs.map +1 -1
  15. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +1 -1
  16. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
  17. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -1
  18. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -1
  19. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs +121 -0
  20. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs.map +1 -0
  21. package/cjs/components/MonthView/handle-month-view-key-down.cjs.map +1 -1
  22. package/cjs/components/MoreEvents/MoreEvents.cjs.map +1 -1
  23. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  24. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -1
  25. package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
  26. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -1
  27. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -1
  28. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -1
  29. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -1
  30. package/cjs/components/ScheduleHeader/ScheduleHeaderContext.cjs.map +1 -1
  31. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.cjs.map +1 -1
  32. package/cjs/components/WeekView/WeekView.cjs +1 -0
  33. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  34. package/cjs/components/WeekView/WeekViewDay.cjs +5 -2
  35. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  36. package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -1
  37. package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs.map +1 -1
  38. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-offset.cjs.map +1 -1
  39. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-width.cjs.map +1 -1
  40. package/cjs/components/WeekView/get-week-view-events/calculate-event-days.cjs.map +1 -1
  41. package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs.map +1 -1
  42. package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs.map +1 -1
  43. package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs.map +1 -1
  44. package/cjs/components/WeekView/get-week-view-events/get-event-end-date.cjs.map +1 -1
  45. package/cjs/components/WeekView/get-week-view-events/get-hanging-status.cjs.map +1 -1
  46. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs +5 -3
  47. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
  48. package/cjs/components/WeekView/get-week-view-events/get-week-view-events.cjs.map +1 -1
  49. package/cjs/components/WeekView/handle-week-view-key-down.cjs.map +1 -1
  50. package/cjs/components/YearView/YearView.cjs.map +1 -1
  51. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
  52. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -1
  53. package/cjs/components/YearView/handle-year-view-key-down.cjs.map +1 -1
  54. package/cjs/hooks/use-auto-scroll-on-drag.cjs.map +1 -1
  55. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  56. package/cjs/hooks/use-drag-state.cjs.map +1 -1
  57. package/cjs/hooks/use-event-resize.cjs +9 -5
  58. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  59. package/cjs/hooks/use-slot-drag-select.cjs.map +1 -1
  60. package/cjs/labels.cjs.map +1 -1
  61. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs.map +1 -1
  62. package/cjs/utils/calculate-month-drop-date/calculate-month-drop-date.cjs.map +1 -1
  63. package/cjs/utils/clamp-interval-minutes/clamp-interval-minutes.cjs.map +1 -1
  64. package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs.map +1 -1
  65. package/cjs/utils/format-date/format-date.cjs.map +1 -1
  66. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs +20 -3
  67. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs.map +1 -1
  68. package/cjs/utils/get-current-time-position/get-current-time-position.cjs.map +1 -1
  69. package/cjs/utils/get-day-position/get-day-position.cjs +11 -8
  70. package/cjs/utils/get-day-position/get-day-position.cjs.map +1 -1
  71. package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs.map +1 -1
  72. package/cjs/utils/get-end-of-week/get-end-of-week.cjs.map +1 -1
  73. package/cjs/utils/get-month-days/get-month-days.cjs.map +1 -1
  74. package/cjs/utils/get-month-range/get-month-range.cjs.map +1 -1
  75. package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs.map +1 -1
  76. package/cjs/utils/get-months-list/get-months-list.cjs.map +1 -1
  77. package/cjs/utils/get-start-of-week/get-start-of-week.cjs.map +1 -1
  78. package/cjs/utils/get-visible-events/get-visible-events.cjs.map +1 -1
  79. package/cjs/utils/get-week-days/get-week-days.cjs.map +1 -1
  80. package/cjs/utils/get-week-number/get-week-number.cjs.map +1 -1
  81. package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs.map +1 -1
  82. package/cjs/utils/get-years-list/get-years-list.cjs.map +1 -1
  83. package/cjs/utils/is-after-min-date/is-after-min-date.cjs.map +1 -1
  84. package/cjs/utils/is-all-day-event/is-all-day-event.cjs.map +1 -1
  85. package/cjs/utils/is-before-max-date/is-before-max-date.cjs.map +1 -1
  86. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -1
  87. package/cjs/utils/is-events-overlap/is-events-overlap.cjs.map +1 -1
  88. package/cjs/utils/is-in-time-range/is-in-time-range.cjs.map +1 -1
  89. package/cjs/utils/is-multiday-event/is-multiday-event.cjs.map +1 -1
  90. package/cjs/utils/is-same-month/is-same-month.cjs.map +1 -1
  91. package/cjs/utils/is-within-week/is-within-week.cjs.map +1 -1
  92. package/cjs/utils/next-week/next-week.cjs.map +1 -1
  93. package/cjs/utils/parse-time-string/parse-time-string.cjs.map +1 -1
  94. package/cjs/utils/previous-week/previous-week.cjs.map +1 -1
  95. package/cjs/utils/sort-events/sort-events.cjs.map +1 -1
  96. package/cjs/utils/to-date-string/to-date-string.cjs.map +1 -1
  97. package/cjs/utils/to-time-string/to-time-string.cjs.map +1 -1
  98. package/cjs/utils/validate-event/validate-event.cjs.map +1 -1
  99. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
  100. package/esm/components/DayView/DayView.mjs +2 -1
  101. package/esm/components/DayView/DayView.mjs.map +1 -1
  102. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs +3 -2
  103. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
  104. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs +4 -2
  105. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
  106. package/esm/components/DragContext/DragContext.mjs.map +1 -1
  107. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  108. package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs.map +1 -1
  109. package/esm/components/MonthView/MonthView.mjs +19 -9
  110. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  111. package/esm/components/MonthView/get-month-view-events/add-event-to-day-groups.mjs.map +1 -1
  112. package/esm/components/MonthView/get-month-view-events/calculate-event-position-in-week.mjs.map +1 -1
  113. package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +1 -1
  114. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
  115. package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs.map +1 -1
  116. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs.map +1 -1
  117. package/esm/components/MonthView/get-renderable-month-event-segments.mjs +121 -0
  118. package/esm/components/MonthView/get-renderable-month-event-segments.mjs.map +1 -0
  119. package/esm/components/MonthView/handle-month-view-key-down.mjs.map +1 -1
  120. package/esm/components/MoreEvents/MoreEvents.mjs.map +1 -1
  121. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  122. package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
  123. package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
  124. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
  125. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
  126. package/esm/components/ScheduleHeader/ScheduleHeader.mjs.map +1 -1
  127. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
  128. package/esm/components/ScheduleHeader/ScheduleHeaderContext.mjs.map +1 -1
  129. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs.map +1 -1
  130. package/esm/components/WeekView/WeekView.mjs +1 -0
  131. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  132. package/esm/components/WeekView/WeekViewDay.mjs +5 -2
  133. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  134. package/esm/components/WeekView/get-week-label/get-week-label.mjs.map +1 -1
  135. package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs.map +1 -1
  136. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-offset.mjs.map +1 -1
  137. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-width.mjs.map +1 -1
  138. package/esm/components/WeekView/get-week-view-events/calculate-event-days.mjs.map +1 -1
  139. package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs.map +1 -1
  140. package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs.map +1 -1
  141. package/esm/components/WeekView/get-week-view-events/find-available-column.mjs.map +1 -1
  142. package/esm/components/WeekView/get-week-view-events/get-event-end-date.mjs.map +1 -1
  143. package/esm/components/WeekView/get-week-view-events/get-hanging-status.mjs.map +1 -1
  144. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs +5 -3
  145. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
  146. package/esm/components/WeekView/get-week-view-events/get-week-view-events.mjs.map +1 -1
  147. package/esm/components/WeekView/handle-week-view-key-down.mjs.map +1 -1
  148. package/esm/components/YearView/YearView.mjs.map +1 -1
  149. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  150. package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs.map +1 -1
  151. package/esm/components/YearView/handle-year-view-key-down.mjs.map +1 -1
  152. package/esm/hooks/use-auto-scroll-on-drag.mjs.map +1 -1
  153. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  154. package/esm/hooks/use-drag-state.mjs.map +1 -1
  155. package/esm/hooks/use-event-resize.mjs +9 -5
  156. package/esm/hooks/use-event-resize.mjs.map +1 -1
  157. package/esm/hooks/use-slot-drag-select.mjs.map +1 -1
  158. package/esm/labels.mjs.map +1 -1
  159. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs.map +1 -1
  160. package/esm/utils/calculate-month-drop-date/calculate-month-drop-date.mjs.map +1 -1
  161. package/esm/utils/clamp-interval-minutes/clamp-interval-minutes.mjs.map +1 -1
  162. package/esm/utils/expand-recurring-events/expand-recurring-events.mjs.map +1 -1
  163. package/esm/utils/format-date/format-date.mjs.map +1 -1
  164. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs +20 -3
  165. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs.map +1 -1
  166. package/esm/utils/get-current-time-position/get-current-time-position.mjs.map +1 -1
  167. package/esm/utils/get-day-position/get-day-position.mjs +11 -8
  168. package/esm/utils/get-day-position/get-day-position.mjs.map +1 -1
  169. package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs.map +1 -1
  170. package/esm/utils/get-end-of-week/get-end-of-week.mjs.map +1 -1
  171. package/esm/utils/get-month-days/get-month-days.mjs.map +1 -1
  172. package/esm/utils/get-month-range/get-month-range.mjs.map +1 -1
  173. package/esm/utils/get-months-by-quarter/get-months-by-quarter.mjs.map +1 -1
  174. package/esm/utils/get-months-list/get-months-list.mjs.map +1 -1
  175. package/esm/utils/get-start-of-week/get-start-of-week.mjs.map +1 -1
  176. package/esm/utils/get-visible-events/get-visible-events.mjs.map +1 -1
  177. package/esm/utils/get-week-days/get-week-days.mjs.map +1 -1
  178. package/esm/utils/get-week-number/get-week-number.mjs.map +1 -1
  179. package/esm/utils/get-weekdays-names/get-weekdays-names.mjs.map +1 -1
  180. package/esm/utils/get-years-list/get-years-list.mjs.map +1 -1
  181. package/esm/utils/is-after-min-date/is-after-min-date.mjs.map +1 -1
  182. package/esm/utils/is-all-day-event/is-all-day-event.mjs.map +1 -1
  183. package/esm/utils/is-before-max-date/is-before-max-date.mjs.map +1 -1
  184. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs.map +1 -1
  185. package/esm/utils/is-events-overlap/is-events-overlap.mjs.map +1 -1
  186. package/esm/utils/is-in-time-range/is-in-time-range.mjs.map +1 -1
  187. package/esm/utils/is-multiday-event/is-multiday-event.mjs.map +1 -1
  188. package/esm/utils/is-same-month/is-same-month.mjs.map +1 -1
  189. package/esm/utils/is-within-week/is-within-week.mjs.map +1 -1
  190. package/esm/utils/next-week/next-week.mjs.map +1 -1
  191. package/esm/utils/parse-time-string/parse-time-string.mjs.map +1 -1
  192. package/esm/utils/previous-week/previous-week.mjs.map +1 -1
  193. package/esm/utils/sort-events/sort-events.mjs.map +1 -1
  194. package/esm/utils/to-date-string/to-date-string.mjs.map +1 -1
  195. package/esm/utils/to-time-string/to-time-string.mjs.map +1 -1
  196. package/esm/utils/validate-event/validate-event.mjs.map +1 -1
  197. package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +3 -1
  198. package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +2 -1
  199. package/lib/components/MonthView/get-renderable-month-event-segments.d.ts +16 -0
  200. package/lib/components/Schedule/Schedule.d.ts +1 -1
  201. package/lib/components/WeekView/WeekView.d.ts +3 -2
  202. package/lib/components/WeekView/WeekViewDay.d.ts +3 -3
  203. package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +3 -1
  204. package/lib/utils/get-business-hours-mod/get-business-hours-mod.d.ts +12 -3
  205. package/lib/utils/get-day-position/get-day-position.d.ts +3 -1
  206. package/lib/utils/index.d.ts +1 -1
  207. package/package.json +4 -4
  208. package/styles.css +25 -0
  209. package/styles.layer.css +25 -0
@@ -1 +1 @@
1
- {"version":3,"file":"get-business-hours-mod.mjs","names":[],"sources":["../../../src/utils/get-business-hours-mod/get-business-hours-mod.ts"],"sourcesContent":["export interface GetBusinessHoursModInput {\n time: string;\n businessHours?: [string, string];\n highlightBusinessHours?: boolean;\n}\n\nexport interface BusinessHoursMod {\n 'business-hours': boolean;\n 'non-business-hours': boolean;\n}\n\n/**\n * Determines if a given time is within business hours and returns modifier object\n * @param time - Time string in HH:mm:ss format\n * @param businessHours - Tuple of [start, end] times in HH:mm:ss format\n * @param highlightBusinessHours - Whether to highlight business hours\n * @returns Modifier object for styling business/non-business hours\n */\nexport function getBusinessHoursMod({\n time,\n businessHours,\n highlightBusinessHours,\n}: GetBusinessHoursModInput): BusinessHoursMod {\n if (!highlightBusinessHours || !businessHours) {\n return {\n 'business-hours': false,\n 'non-business-hours': false,\n };\n }\n\n const [start, end] = businessHours;\n const isInBusinessHours = time >= start && time < end;\n\n return {\n 'business-hours': isInBusinessHours,\n 'non-business-hours': !isInBusinessHours,\n };\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAgB,oBAAoB,EAClC,MACA,eACA,0BAC6C;AAC7C,KAAI,CAAC,0BAA0B,CAAC,cAC9B,QAAO;EACL,kBAAkB;EAClB,sBAAsB;EACvB;CAGH,MAAM,CAAC,OAAO,OAAO;CACrB,MAAM,oBAAoB,QAAQ,SAAS,OAAO;AAElD,QAAO;EACL,kBAAkB;EAClB,sBAAsB,CAAC;EACxB"}
1
+ {"version":3,"file":"get-business-hours-mod.mjs","names":[],"sources":["../../../src/utils/get-business-hours-mod/get-business-hours-mod.ts"],"sourcesContent":["import { DayOfWeek } from '../../types';\n\n/** Business hours range in `HH:mm:ss` format */\nexport type BusinessHoursRange = [string, string];\n\n/** Per-day business hours map keyed by day of the week (0 – Sunday, 6 – Saturday). `null` marks a day as fully outside business hours. */\nexport type BusinessHoursPerDay = Partial<Record<DayOfWeek, BusinessHoursRange | null>>;\n\n/** Business hours value – tuple applies to every day, record configures business hours per day */\nexport type BusinessHoursValue = BusinessHoursRange | BusinessHoursPerDay;\n\nexport interface GetBusinessHoursModInput {\n time: string;\n businessHours?: BusinessHoursValue;\n highlightBusinessHours?: boolean;\n dayOfWeek?: DayOfWeek;\n}\n\nexport interface BusinessHoursMod {\n 'business-hours': boolean;\n 'non-business-hours': boolean;\n}\n\nfunction isBusinessHoursRange(value: BusinessHoursValue): value is BusinessHoursRange {\n return (\n Array.isArray(value) &&\n value.length === 2 &&\n typeof value[0] === 'string' &&\n typeof value[1] === 'string'\n );\n}\n\n/**\n * Determines if a given time is within business hours and returns modifier object\n * @param time - Time string in HH:mm:ss format\n * @param businessHours - Tuple of [start, end] times in HH:mm:ss format, or per-day record keyed by day of the week\n * @param highlightBusinessHours - Whether to highlight business hours\n * @param dayOfWeek - Day of the week (0 – Sunday, 6 – Saturday), used to resolve per-day business hours\n * @returns Modifier object for styling business/non-business hours\n */\nexport function getBusinessHoursMod({\n time,\n businessHours,\n highlightBusinessHours,\n dayOfWeek,\n}: GetBusinessHoursModInput): BusinessHoursMod {\n if (!highlightBusinessHours || !businessHours) {\n return {\n 'business-hours': false,\n 'non-business-hours': false,\n };\n }\n\n let range: [string, string] | null;\n if (isBusinessHoursRange(businessHours)) {\n range = businessHours;\n } else {\n if (dayOfWeek === undefined) {\n return {\n 'business-hours': false,\n 'non-business-hours': false,\n };\n }\n range = businessHours[dayOfWeek] ?? null;\n }\n\n if (!range) {\n return {\n 'business-hours': false,\n 'non-business-hours': true,\n };\n }\n\n const [start, end] = range;\n const isInBusinessHours = time >= start && time < end;\n\n return {\n 'business-hours': isInBusinessHours,\n 'non-business-hours': !isInBusinessHours,\n };\n}\n"],"mappings":";;AAuBA,SAAS,qBAAqB,OAAwD;CACpF,OACE,MAAM,QAAQ,KAAK,KACnB,MAAM,WAAW,KACjB,OAAO,MAAM,OAAO,YACpB,OAAO,MAAM,OAAO;AAExB;;;;;;;;;AAUA,SAAgB,oBAAoB,EAClC,MACA,eACA,wBACA,aAC6C;CAC7C,IAAI,CAAC,0BAA0B,CAAC,eAC9B,OAAO;EACL,kBAAkB;EAClB,sBAAsB;CACxB;CAGF,IAAI;CACJ,IAAI,qBAAqB,aAAa,GACpC,QAAQ;MACH;EACL,IAAI,cAAc,KAAA,GAChB,OAAO;GACL,kBAAkB;GAClB,sBAAsB;EACxB;EAEF,QAAQ,cAAc,cAAc;CACtC;CAEA,IAAI,CAAC,OACH,OAAO;EACL,kBAAkB;EAClB,sBAAsB;CACxB;CAGF,MAAM,CAAC,OAAO,OAAO;CACrB,MAAM,oBAAoB,QAAQ,SAAS,OAAO;CAElD,OAAO;EACL,kBAAkB;EAClB,sBAAsB,CAAC;CACzB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-current-time-position.mjs","names":[],"sources":["../../../src/utils/get-current-time-position/get-current-time-position.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\ninterface GetCurrentTimePositionInput {\n startTime?: string;\n endTime?: string;\n}\n\nexport function getCurrentTimePosition(input?: GetCurrentTimePositionInput) {\n const now = dayjs();\n\n if (!input?.startTime || !input?.endTime) {\n const startOf = dayjs().startOf('date');\n const diffInMinutes = now.diff(startOf, 'minute');\n return (diffInMinutes / 1440) * 100;\n }\n\n const [startHour, startMinute] = input.startTime.split(':').map(Number);\n const [endHour, endMinute] = input.endTime.split(':').map(Number);\n\n const startOfDay = now.startOf('date');\n const startDateTime = startOfDay.hour(startHour).minute(startMinute).second(0);\n const endDateTime = startOfDay.hour(endHour).minute(endMinute).second(0);\n\n const totalMinutes = endDateTime.diff(startDateTime, 'minute');\n const currentMinutes = now.diff(startDateTime, 'minute');\n\n return (currentMinutes / totalMinutes) * 100;\n}\n"],"mappings":";;;AAOA,SAAgB,uBAAuB,OAAqC;CAC1E,MAAM,MAAM,OAAO;AAEnB,KAAI,CAAC,OAAO,aAAa,CAAC,OAAO,SAAS;EACxC,MAAM,UAAU,OAAO,CAAC,QAAQ,OAAO;AAEvC,SADsB,IAAI,KAAK,SAAS,SAAS,GACzB,OAAQ;;CAGlC,MAAM,CAAC,WAAW,eAAe,MAAM,UAAU,MAAM,IAAI,CAAC,IAAI,OAAO;CACvE,MAAM,CAAC,SAAS,aAAa,MAAM,QAAQ,MAAM,IAAI,CAAC,IAAI,OAAO;CAEjE,MAAM,aAAa,IAAI,QAAQ,OAAO;CACtC,MAAM,gBAAgB,WAAW,KAAK,UAAU,CAAC,OAAO,YAAY,CAAC,OAAO,EAAE;CAG9E,MAAM,eAFc,WAAW,KAAK,QAAQ,CAAC,OAAO,UAAU,CAAC,OAAO,EAAE,CAEvC,KAAK,eAAe,SAAS;AAG9D,QAFuB,IAAI,KAAK,eAAe,SAAS,GAE/B,eAAgB"}
1
+ {"version":3,"file":"get-current-time-position.mjs","names":[],"sources":["../../../src/utils/get-current-time-position/get-current-time-position.ts"],"sourcesContent":["import dayjs from 'dayjs';\n\ninterface GetCurrentTimePositionInput {\n startTime?: string;\n endTime?: string;\n}\n\nexport function getCurrentTimePosition(input?: GetCurrentTimePositionInput) {\n const now = dayjs();\n\n if (!input?.startTime || !input?.endTime) {\n const startOf = dayjs().startOf('date');\n const diffInMinutes = now.diff(startOf, 'minute');\n return (diffInMinutes / 1440) * 100;\n }\n\n const [startHour, startMinute] = input.startTime.split(':').map(Number);\n const [endHour, endMinute] = input.endTime.split(':').map(Number);\n\n const startOfDay = now.startOf('date');\n const startDateTime = startOfDay.hour(startHour).minute(startMinute).second(0);\n const endDateTime = startOfDay.hour(endHour).minute(endMinute).second(0);\n\n const totalMinutes = endDateTime.diff(startDateTime, 'minute');\n const currentMinutes = now.diff(startDateTime, 'minute');\n\n return (currentMinutes / totalMinutes) * 100;\n}\n"],"mappings":";;;AAOA,SAAgB,uBAAuB,OAAqC;CAC1E,MAAM,MAAM,MAAM;CAElB,IAAI,CAAC,OAAO,aAAa,CAAC,OAAO,SAAS;EACxC,MAAM,UAAU,MAAM,EAAE,QAAQ,MAAM;EAEtC,OADsB,IAAI,KAAK,SAAS,QACpB,IAAI,OAAQ;CAClC;CAEA,MAAM,CAAC,WAAW,eAAe,MAAM,UAAU,MAAM,GAAG,EAAE,IAAI,MAAM;CACtE,MAAM,CAAC,SAAS,aAAa,MAAM,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;CAEhE,MAAM,aAAa,IAAI,QAAQ,MAAM;CACrC,MAAM,gBAAgB,WAAW,KAAK,SAAS,EAAE,OAAO,WAAW,EAAE,OAAO,CAAC;CAG7E,MAAM,eAFc,WAAW,KAAK,OAAO,EAAE,OAAO,SAAS,EAAE,OAAO,CAEvC,EAAE,KAAK,eAAe,QAAQ;CAG7D,OAFuB,IAAI,KAAK,eAAe,QAE1B,IAAI,eAAgB;AAC3C"}
@@ -1,23 +1,26 @@
1
1
  "use client";
2
+ import { clampIntervalMinutes } from "../clamp-interval-minutes/clamp-interval-minutes.mjs";
2
3
  import { parseTimeString } from "../parse-time-string/parse-time-string.mjs";
3
4
  import dayjs from "dayjs";
4
5
  //#region packages/@mantine/schedule/src/utils/get-day-position/get-day-position.ts
5
6
  /** Calculates day position within given start and end time boundaries. Returns top and height in percentages. */
6
- function getDayPosition({ event, startTime = "00:00:00", endTime = "23:59:59" }) {
7
+ function getDayPosition({ event, startTime = "00:00:00", endTime = "23:59:59", intervalMinutes = 60 }) {
7
8
  const eventStart = dayjs(event.start);
8
9
  const eventEnd = dayjs(event.end);
9
10
  const parsedStartTime = parseTimeString(startTime);
10
11
  const parsedEndTime = parseTimeString(endTime);
11
12
  const startOfDay = eventStart.startOf("date");
12
- const boundaryStart = startOfDay.hour(parsedStartTime.hours).minute(parsedStartTime.minutes).second(0);
13
- const boundaryEnd = startOfDay.hour(parsedEndTime.hours).minute(parsedEndTime.minutes).second(0);
14
- const totalMinutes = boundaryEnd.diff(boundaryStart, "minute");
15
- const eventStartMinutes = (eventStart.isBefore(boundaryStart) ? boundaryStart : eventStart).diff(boundaryStart, "minute");
16
- const eventEndMinutes = (eventEnd.isAfter(boundaryEnd) ? boundaryEnd : eventEnd).diff(boundaryStart, "minute");
17
- const startPercent = eventStartMinutes / totalMinutes * 100;
13
+ const boundaryStart = startOfDay.hour(parsedStartTime.hours).minute(parsedStartTime.minutes).second(parsedStartTime.seconds);
14
+ const literalEnd = startOfDay.hour(parsedEndTime.hours).minute(parsedEndTime.minutes).second(parsedEndTime.seconds);
15
+ const intervalSeconds = clampIntervalMinutes(intervalMinutes) * 60;
16
+ const literalRangeSeconds = literalEnd.diff(boundaryStart, "second");
17
+ const totalSeconds = Math.ceil(literalRangeSeconds / intervalSeconds) * intervalSeconds;
18
+ const eventStartSeconds = (eventStart.isBefore(boundaryStart) ? boundaryStart : eventStart).diff(boundaryStart, "second");
19
+ const eventEndSeconds = (eventEnd.isAfter(literalEnd) ? literalEnd : eventEnd).diff(boundaryStart, "second");
20
+ const startPercent = eventStartSeconds / totalSeconds * 100;
18
21
  return {
19
22
  top: startPercent,
20
- height: eventEndMinutes / totalMinutes * 100 - startPercent
23
+ height: eventEndSeconds / totalSeconds * 100 - startPercent
21
24
  };
22
25
  }
23
26
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"get-day-position.mjs","names":[],"sources":["../../../src/utils/get-day-position/get-day-position.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\nimport { parseTimeString } from '../parse-time-string/parse-time-string';\n\ninterface GetDayPositionInput {\n /** Event data to calculate position for */\n event: ScheduleEventData;\n\n /** Start time boundary for the day in HH:mm:ss format, `00:00:00` by default */\n startTime?: string;\n\n /** End time boundary for the day in HH:mm:ss format, `23:59:59` by default */\n endTime?: string;\n}\n\n/** Calculates day position within given start and end time boundaries. Returns top and height in percentages. */\nexport function getDayPosition({\n event,\n startTime = '00:00:00',\n endTime = '23:59:59',\n}: GetDayPositionInput) {\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n\n const parsedStartTime = parseTimeString(startTime);\n const parsedEndTime = parseTimeString(endTime);\n\n const startOfDay = eventStart.startOf('date');\n const boundaryStart = startOfDay\n .hour(parsedStartTime.hours)\n .minute(parsedStartTime.minutes)\n .second(0);\n const boundaryEnd = startOfDay.hour(parsedEndTime.hours).minute(parsedEndTime.minutes).second(0);\n const totalMinutes = boundaryEnd.diff(boundaryStart, 'minute');\n\n const clippedEventStart = eventStart.isBefore(boundaryStart) ? boundaryStart : eventStart;\n const eventStartMinutes = clippedEventStart.diff(boundaryStart, 'minute');\n\n const clippedEventEnd = eventEnd.isAfter(boundaryEnd) ? boundaryEnd : eventEnd;\n const eventEndMinutes = clippedEventEnd.diff(boundaryStart, 'minute');\n\n const startPercent = (eventStartMinutes / totalMinutes) * 100;\n const endPercent = (eventEndMinutes / totalMinutes) * 100;\n\n return {\n top: startPercent,\n height: endPercent - startPercent,\n };\n}\n"],"mappings":";;;;;AAgBA,SAAgB,eAAe,EAC7B,OACA,YAAY,YACZ,UAAU,cACY;CACtB,MAAM,aAAa,MAAM,MAAM,MAAM;CACrC,MAAM,WAAW,MAAM,MAAM,IAAI;CAEjC,MAAM,kBAAkB,gBAAgB,UAAU;CAClD,MAAM,gBAAgB,gBAAgB,QAAQ;CAE9C,MAAM,aAAa,WAAW,QAAQ,OAAO;CAC7C,MAAM,gBAAgB,WACnB,KAAK,gBAAgB,MAAM,CAC3B,OAAO,gBAAgB,QAAQ,CAC/B,OAAO,EAAE;CACZ,MAAM,cAAc,WAAW,KAAK,cAAc,MAAM,CAAC,OAAO,cAAc,QAAQ,CAAC,OAAO,EAAE;CAChG,MAAM,eAAe,YAAY,KAAK,eAAe,SAAS;CAG9D,MAAM,qBADoB,WAAW,SAAS,cAAc,GAAG,gBAAgB,YACnC,KAAK,eAAe,SAAS;CAGzE,MAAM,mBADkB,SAAS,QAAQ,YAAY,GAAG,cAAc,UAC9B,KAAK,eAAe,SAAS;CAErE,MAAM,eAAgB,oBAAoB,eAAgB;AAG1D,QAAO;EACL,KAAK;EACL,QAJkB,kBAAkB,eAAgB,MAI/B;EACtB"}
1
+ {"version":3,"file":"get-day-position.mjs","names":[],"sources":["../../../src/utils/get-day-position/get-day-position.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\nimport { clampIntervalMinutes } from '../clamp-interval-minutes/clamp-interval-minutes';\nimport { parseTimeString } from '../parse-time-string/parse-time-string';\n\ninterface GetDayPositionInput {\n /** Event data to calculate position for */\n event: ScheduleEventData;\n\n /** Start time boundary for the day in HH:mm:ss format, `00:00:00` by default */\n startTime?: string;\n\n /** End time boundary for the day in HH:mm:ss format, `23:59:59` by default */\n endTime?: string;\n\n /** Number of minutes per time slot, `60` by default. Used to align the canvas to whole slots when `endTime` does not divide evenly. */\n intervalMinutes?: number;\n}\n\n/** Calculates day position within given start and end time boundaries. Returns top and height in percentages. */\nexport function getDayPosition({\n event,\n startTime = '00:00:00',\n endTime = '23:59:59',\n intervalMinutes = 60,\n}: GetDayPositionInput) {\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n\n const parsedStartTime = parseTimeString(startTime);\n const parsedEndTime = parseTimeString(endTime);\n\n const startOfDay = eventStart.startOf('date');\n const boundaryStart = startOfDay\n .hour(parsedStartTime.hours)\n .minute(parsedStartTime.minutes)\n .second(parsedStartTime.seconds);\n const literalEnd = startOfDay\n .hour(parsedEndTime.hours)\n .minute(parsedEndTime.minutes)\n .second(parsedEndTime.seconds);\n\n const intervalSeconds = clampIntervalMinutes(intervalMinutes) * 60;\n const literalRangeSeconds = literalEnd.diff(boundaryStart, 'second');\n const totalSeconds = Math.ceil(literalRangeSeconds / intervalSeconds) * intervalSeconds;\n\n const clippedEventStart = eventStart.isBefore(boundaryStart) ? boundaryStart : eventStart;\n const eventStartSeconds = clippedEventStart.diff(boundaryStart, 'second');\n\n const clippedEventEnd = eventEnd.isAfter(literalEnd) ? literalEnd : eventEnd;\n const eventEndSeconds = clippedEventEnd.diff(boundaryStart, 'second');\n\n const startPercent = (eventStartSeconds / totalSeconds) * 100;\n const endPercent = (eventEndSeconds / totalSeconds) * 100;\n\n return {\n top: startPercent,\n height: endPercent - startPercent,\n };\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,eAAe,EAC7B,OACA,YAAY,YACZ,UAAU,YACV,kBAAkB,MACI;CACtB,MAAM,aAAa,MAAM,MAAM,KAAK;CACpC,MAAM,WAAW,MAAM,MAAM,GAAG;CAEhC,MAAM,kBAAkB,gBAAgB,SAAS;CACjD,MAAM,gBAAgB,gBAAgB,OAAO;CAE7C,MAAM,aAAa,WAAW,QAAQ,MAAM;CAC5C,MAAM,gBAAgB,WACnB,KAAK,gBAAgB,KAAK,EAC1B,OAAO,gBAAgB,OAAO,EAC9B,OAAO,gBAAgB,OAAO;CACjC,MAAM,aAAa,WAChB,KAAK,cAAc,KAAK,EACxB,OAAO,cAAc,OAAO,EAC5B,OAAO,cAAc,OAAO;CAE/B,MAAM,kBAAkB,qBAAqB,eAAe,IAAI;CAChE,MAAM,sBAAsB,WAAW,KAAK,eAAe,QAAQ;CACnE,MAAM,eAAe,KAAK,KAAK,sBAAsB,eAAe,IAAI;CAGxE,MAAM,qBADoB,WAAW,SAAS,aAAa,IAAI,gBAAgB,YACnC,KAAK,eAAe,QAAQ;CAGxE,MAAM,mBADkB,SAAS,QAAQ,UAAU,IAAI,aAAa,UAC5B,KAAK,eAAe,QAAQ;CAEpE,MAAM,eAAgB,oBAAoB,eAAgB;CAG1D,OAAO;EACL,KAAK;EACL,QAJkB,kBAAkB,eAAgB,MAI/B;CACvB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-day-time-intervals.mjs","names":[],"sources":["../../../src/utils/get-day-time-intervals/get-day-time-intervals.ts"],"sourcesContent":["import { clampIntervalMinutes } from '../clamp-interval-minutes/clamp-interval-minutes';\nimport { parseTimeString } from '../parse-time-string/parse-time-string';\nimport { toTimeString } from '../to-time-string/to-time-string';\n\nexport interface DayTimeInterval {\n /** Start time of the interval in HH:mm:ss format */\n startTime: string;\n\n /** End time of the interval in HH:mm:ss format */\n endTime: string;\n\n /** Duration of the interval in seconds */\n duration: number;\n\n /** Indicates if the interval starts at the beginning of an hour */\n isHourStart: boolean;\n}\n\nexport interface GetDayTimeIntervalsInput {\n /** Start time in HH:mm:ss format */\n startTime: string;\n\n /** End time in HH:mm:ss format, end of the day by default */\n endTime?: string;\n\n /** Interval in minutes, 60 by default */\n intervalMinutes?: number;\n}\n\nexport function getDayTimeIntervals({\n startTime,\n endTime,\n intervalMinutes: _intervalMinutes = 60,\n}: GetDayTimeIntervalsInput): DayTimeInterval[] {\n const intervalMinutes = clampIntervalMinutes(_intervalMinutes);\n\n const start = parseTimeString(startTime);\n const end = endTime ? parseTimeString(endTime) : { hours: 23, minutes: 59, seconds: 59 };\n\n const startSeconds = start.hours * 3600 + start.minutes * 60 + start.seconds;\n const endSeconds = end.hours * 3600 + end.minutes * 60 + end.seconds;\n const intervalSeconds = intervalMinutes * 60;\n\n const intervals: DayTimeInterval[] = [];\n let currentSeconds = startSeconds;\n\n while (currentSeconds < endSeconds) {\n const intervalStartSeconds = currentSeconds;\n let intervalEndSeconds = currentSeconds + intervalSeconds;\n\n if (intervalEndSeconds > endSeconds) {\n intervalEndSeconds = endSeconds;\n }\n\n const startHours = Math.floor(intervalStartSeconds / 3600);\n const startMinutes = Math.floor((intervalStartSeconds % 3600) / 60);\n const startSecs = intervalStartSeconds % 60;\n\n const endHours = Math.floor(intervalEndSeconds / 3600);\n const endMinutes = Math.floor((intervalEndSeconds % 3600) / 60);\n const endSecs = intervalEndSeconds % 60;\n\n const durationSeconds = intervalEndSeconds - intervalStartSeconds;\n const isHourStart = startMinutes === 0 && startSecs === 0;\n\n intervals.push({\n startTime: toTimeString({ hours: startHours, minutes: startMinutes, seconds: startSecs }),\n endTime: toTimeString({ hours: endHours, minutes: endMinutes, seconds: endSecs }),\n duration: durationSeconds,\n isHourStart,\n });\n\n currentSeconds = intervalEndSeconds;\n }\n\n return intervals;\n}\n"],"mappings":";;;;;AA6BA,SAAgB,oBAAoB,EAClC,WACA,SACA,iBAAiB,mBAAmB,MACU;CAC9C,MAAM,kBAAkB,qBAAqB,iBAAiB;CAE9D,MAAM,QAAQ,gBAAgB,UAAU;CACxC,MAAM,MAAM,UAAU,gBAAgB,QAAQ,GAAG;EAAE,OAAO;EAAI,SAAS;EAAI,SAAS;EAAI;CAExF,MAAM,eAAe,MAAM,QAAQ,OAAO,MAAM,UAAU,KAAK,MAAM;CACrE,MAAM,aAAa,IAAI,QAAQ,OAAO,IAAI,UAAU,KAAK,IAAI;CAC7D,MAAM,kBAAkB,kBAAkB;CAE1C,MAAM,YAA+B,EAAE;CACvC,IAAI,iBAAiB;AAErB,QAAO,iBAAiB,YAAY;EAClC,MAAM,uBAAuB;EAC7B,IAAI,qBAAqB,iBAAiB;AAE1C,MAAI,qBAAqB,WACvB,sBAAqB;EAGvB,MAAM,aAAa,KAAK,MAAM,uBAAuB,KAAK;EAC1D,MAAM,eAAe,KAAK,MAAO,uBAAuB,OAAQ,GAAG;EACnE,MAAM,YAAY,uBAAuB;EAEzC,MAAM,WAAW,KAAK,MAAM,qBAAqB,KAAK;EACtD,MAAM,aAAa,KAAK,MAAO,qBAAqB,OAAQ,GAAG;EAC/D,MAAM,UAAU,qBAAqB;EAErC,MAAM,kBAAkB,qBAAqB;EAC7C,MAAM,cAAc,iBAAiB,KAAK,cAAc;AAExD,YAAU,KAAK;GACb,WAAW,aAAa;IAAE,OAAO;IAAY,SAAS;IAAc,SAAS;IAAW,CAAC;GACzF,SAAS,aAAa;IAAE,OAAO;IAAU,SAAS;IAAY,SAAS;IAAS,CAAC;GACjF,UAAU;GACV;GACD,CAAC;AAEF,mBAAiB;;AAGnB,QAAO"}
1
+ {"version":3,"file":"get-day-time-intervals.mjs","names":[],"sources":["../../../src/utils/get-day-time-intervals/get-day-time-intervals.ts"],"sourcesContent":["import { clampIntervalMinutes } from '../clamp-interval-minutes/clamp-interval-minutes';\nimport { parseTimeString } from '../parse-time-string/parse-time-string';\nimport { toTimeString } from '../to-time-string/to-time-string';\n\nexport interface DayTimeInterval {\n /** Start time of the interval in HH:mm:ss format */\n startTime: string;\n\n /** End time of the interval in HH:mm:ss format */\n endTime: string;\n\n /** Duration of the interval in seconds */\n duration: number;\n\n /** Indicates if the interval starts at the beginning of an hour */\n isHourStart: boolean;\n}\n\nexport interface GetDayTimeIntervalsInput {\n /** Start time in HH:mm:ss format */\n startTime: string;\n\n /** End time in HH:mm:ss format, end of the day by default */\n endTime?: string;\n\n /** Interval in minutes, 60 by default */\n intervalMinutes?: number;\n}\n\nexport function getDayTimeIntervals({\n startTime,\n endTime,\n intervalMinutes: _intervalMinutes = 60,\n}: GetDayTimeIntervalsInput): DayTimeInterval[] {\n const intervalMinutes = clampIntervalMinutes(_intervalMinutes);\n\n const start = parseTimeString(startTime);\n const end = endTime ? parseTimeString(endTime) : { hours: 23, minutes: 59, seconds: 59 };\n\n const startSeconds = start.hours * 3600 + start.minutes * 60 + start.seconds;\n const endSeconds = end.hours * 3600 + end.minutes * 60 + end.seconds;\n const intervalSeconds = intervalMinutes * 60;\n\n const intervals: DayTimeInterval[] = [];\n let currentSeconds = startSeconds;\n\n while (currentSeconds < endSeconds) {\n const intervalStartSeconds = currentSeconds;\n let intervalEndSeconds = currentSeconds + intervalSeconds;\n\n if (intervalEndSeconds > endSeconds) {\n intervalEndSeconds = endSeconds;\n }\n\n const startHours = Math.floor(intervalStartSeconds / 3600);\n const startMinutes = Math.floor((intervalStartSeconds % 3600) / 60);\n const startSecs = intervalStartSeconds % 60;\n\n const endHours = Math.floor(intervalEndSeconds / 3600);\n const endMinutes = Math.floor((intervalEndSeconds % 3600) / 60);\n const endSecs = intervalEndSeconds % 60;\n\n const durationSeconds = intervalEndSeconds - intervalStartSeconds;\n const isHourStart = startMinutes === 0 && startSecs === 0;\n\n intervals.push({\n startTime: toTimeString({ hours: startHours, minutes: startMinutes, seconds: startSecs }),\n endTime: toTimeString({ hours: endHours, minutes: endMinutes, seconds: endSecs }),\n duration: durationSeconds,\n isHourStart,\n });\n\n currentSeconds = intervalEndSeconds;\n }\n\n return intervals;\n}\n"],"mappings":";;;;;AA6BA,SAAgB,oBAAoB,EAClC,WACA,SACA,iBAAiB,mBAAmB,MACU;CAC9C,MAAM,kBAAkB,qBAAqB,gBAAgB;CAE7D,MAAM,QAAQ,gBAAgB,SAAS;CACvC,MAAM,MAAM,UAAU,gBAAgB,OAAO,IAAI;EAAE,OAAO;EAAI,SAAS;EAAI,SAAS;CAAG;CAEvF,MAAM,eAAe,MAAM,QAAQ,OAAO,MAAM,UAAU,KAAK,MAAM;CACrE,MAAM,aAAa,IAAI,QAAQ,OAAO,IAAI,UAAU,KAAK,IAAI;CAC7D,MAAM,kBAAkB,kBAAkB;CAE1C,MAAM,YAA+B,CAAC;CACtC,IAAI,iBAAiB;CAErB,OAAO,iBAAiB,YAAY;EAClC,MAAM,uBAAuB;EAC7B,IAAI,qBAAqB,iBAAiB;EAE1C,IAAI,qBAAqB,YACvB,qBAAqB;EAGvB,MAAM,aAAa,KAAK,MAAM,uBAAuB,IAAI;EACzD,MAAM,eAAe,KAAK,MAAO,uBAAuB,OAAQ,EAAE;EAClE,MAAM,YAAY,uBAAuB;EAEzC,MAAM,WAAW,KAAK,MAAM,qBAAqB,IAAI;EACrD,MAAM,aAAa,KAAK,MAAO,qBAAqB,OAAQ,EAAE;EAC9D,MAAM,UAAU,qBAAqB;EAErC,MAAM,kBAAkB,qBAAqB;EAC7C,MAAM,cAAc,iBAAiB,KAAK,cAAc;EAExD,UAAU,KAAK;GACb,WAAW,aAAa;IAAE,OAAO;IAAY,SAAS;IAAc,SAAS;GAAU,CAAC;GACxF,SAAS,aAAa;IAAE,OAAO;IAAU,SAAS;IAAY,SAAS;GAAQ,CAAC;GAChF,UAAU;GACV;EACF,CAAC;EAED,iBAAiB;CACnB;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-end-of-week.mjs","names":[],"sources":["../../../src/utils/get-end-of-week/get-end-of-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek } from '../../types';\n\nexport function getEndOfWeek(date: AnyDateValue, firstDayOfWeek: DayOfWeek = 1) {\n let value = dayjs(date);\n\n if (!value.isValid()) {\n return value;\n }\n\n const lastDayOfWeek = firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1;\n while (value.day() !== lastDayOfWeek) {\n value = value.add(1, 'day');\n }\n\n return value.format('YYYY-MM-DD');\n}\n"],"mappings":";;;AAGA,SAAgB,aAAa,MAAoB,iBAA4B,GAAG;CAC9E,IAAI,QAAQ,MAAM,KAAK;AAEvB,KAAI,CAAC,MAAM,SAAS,CAClB,QAAO;CAGT,MAAM,gBAAgB,mBAAmB,IAAI,IAAI,iBAAiB;AAClE,QAAO,MAAM,KAAK,KAAK,cACrB,SAAQ,MAAM,IAAI,GAAG,MAAM;AAG7B,QAAO,MAAM,OAAO,aAAa"}
1
+ {"version":3,"file":"get-end-of-week.mjs","names":[],"sources":["../../../src/utils/get-end-of-week/get-end-of-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek } from '../../types';\n\nexport function getEndOfWeek(date: AnyDateValue, firstDayOfWeek: DayOfWeek = 1) {\n let value = dayjs(date);\n\n if (!value.isValid()) {\n return value;\n }\n\n const lastDayOfWeek = firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1;\n while (value.day() !== lastDayOfWeek) {\n value = value.add(1, 'day');\n }\n\n return value.format('YYYY-MM-DD');\n}\n"],"mappings":";;;AAGA,SAAgB,aAAa,MAAoB,iBAA4B,GAAG;CAC9E,IAAI,QAAQ,MAAM,IAAI;CAEtB,IAAI,CAAC,MAAM,QAAQ,GACjB,OAAO;CAGT,MAAM,gBAAgB,mBAAmB,IAAI,IAAI,iBAAiB;CAClE,OAAO,MAAM,IAAI,MAAM,eACrB,QAAQ,MAAM,IAAI,GAAG,KAAK;CAG5B,OAAO,MAAM,OAAO,YAAY;AAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-month-days.mjs","names":[],"sources":["../../../src/utils/get-month-days/get-month-days.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getEndOfWeek } from '../get-end-of-week/get-end-of-week';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\n\ninterface GetMonthDaysInput {\n month: AnyDateValue;\n firstDayOfWeek: DayOfWeek | undefined;\n consistentWeeks: boolean | undefined;\n}\n\nexport function getMonthDays({\n month,\n firstDayOfWeek = 1,\n consistentWeeks,\n}: GetMonthDaysInput): DateStringValue[][] {\n const day = dayjs(month).subtract(dayjs(month).date() - 1, 'day');\n const start = dayjs(day.format('YYYY-MM-DD'));\n const startOfMonth = start.format('YYYY-MM-DD');\n const endOfMonth = start.add(+start.daysInMonth() - 1, 'day').format('YYYY-MM-DD');\n const endDate = getEndOfWeek(endOfMonth, firstDayOfWeek);\n const weeks: DateStringValue[][] = [];\n\n let date = dayjs(getStartOfWeek({ date: startOfMonth, firstDayOfWeek }));\n\n while (dayjs(date).isBefore(endDate, 'day')) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(date.format('YYYY-MM-DD 00:00:00'));\n date = date.add(1, 'day');\n }\n\n weeks.push(days);\n }\n\n if (consistentWeeks && weeks.length < 6) {\n const lastWeek = weeks[weeks.length - 1];\n const lastDay = lastWeek[lastWeek.length - 1];\n let nextDay = dayjs(lastDay).add(1, 'day');\n\n while (weeks.length < 6) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(nextDay.format('YYYY-MM-DD 00:00:00'));\n nextDay = nextDay.add(1, 'day');\n }\n\n weeks.push(days);\n }\n }\n\n return weeks;\n}\n"],"mappings":";;;;;AAWA,SAAgB,aAAa,EAC3B,OACA,iBAAiB,GACjB,mBACyC;CAEzC,MAAM,QAAQ,MADF,MAAM,MAAM,CAAC,SAAS,MAAM,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CACzC,OAAO,aAAa,CAAC;CAC7C,MAAM,eAAe,MAAM,OAAO,aAAa;CAE/C,MAAM,UAAU,aADG,MAAM,IAAI,CAAC,MAAM,aAAa,GAAG,GAAG,MAAM,CAAC,OAAO,aAAa,EACzC,eAAe;CACxD,MAAM,QAA6B,EAAE;CAErC,IAAI,OAAO,MAAM,eAAe;EAAE,MAAM;EAAc;EAAgB,CAAC,CAAC;AAExE,QAAO,MAAM,KAAK,CAAC,SAAS,SAAS,MAAM,EAAE;EAC3C,MAAM,OAA0B,EAAE;AAElC,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,QAAK,KAAK,KAAK,OAAO,sBAAsB,CAAC;AAC7C,UAAO,KAAK,IAAI,GAAG,MAAM;;AAG3B,QAAM,KAAK,KAAK;;AAGlB,KAAI,mBAAmB,MAAM,SAAS,GAAG;EACvC,MAAM,WAAW,MAAM,MAAM,SAAS;EACtC,MAAM,UAAU,SAAS,SAAS,SAAS;EAC3C,IAAI,UAAU,MAAM,QAAQ,CAAC,IAAI,GAAG,MAAM;AAE1C,SAAO,MAAM,SAAS,GAAG;GACvB,MAAM,OAA0B,EAAE;AAElC,QAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,SAAK,KAAK,QAAQ,OAAO,sBAAsB,CAAC;AAChD,cAAU,QAAQ,IAAI,GAAG,MAAM;;AAGjC,SAAM,KAAK,KAAK;;;AAIpB,QAAO"}
1
+ {"version":3,"file":"get-month-days.mjs","names":[],"sources":["../../../src/utils/get-month-days/get-month-days.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getEndOfWeek } from '../get-end-of-week/get-end-of-week';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\n\ninterface GetMonthDaysInput {\n month: AnyDateValue;\n firstDayOfWeek: DayOfWeek | undefined;\n consistentWeeks: boolean | undefined;\n}\n\nexport function getMonthDays({\n month,\n firstDayOfWeek = 1,\n consistentWeeks,\n}: GetMonthDaysInput): DateStringValue[][] {\n const day = dayjs(month).subtract(dayjs(month).date() - 1, 'day');\n const start = dayjs(day.format('YYYY-MM-DD'));\n const startOfMonth = start.format('YYYY-MM-DD');\n const endOfMonth = start.add(+start.daysInMonth() - 1, 'day').format('YYYY-MM-DD');\n const endDate = getEndOfWeek(endOfMonth, firstDayOfWeek);\n const weeks: DateStringValue[][] = [];\n\n let date = dayjs(getStartOfWeek({ date: startOfMonth, firstDayOfWeek }));\n\n while (dayjs(date).isBefore(endDate, 'day')) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(date.format('YYYY-MM-DD 00:00:00'));\n date = date.add(1, 'day');\n }\n\n weeks.push(days);\n }\n\n if (consistentWeeks && weeks.length < 6) {\n const lastWeek = weeks[weeks.length - 1];\n const lastDay = lastWeek[lastWeek.length - 1];\n let nextDay = dayjs(lastDay).add(1, 'day');\n\n while (weeks.length < 6) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(nextDay.format('YYYY-MM-DD 00:00:00'));\n nextDay = nextDay.add(1, 'day');\n }\n\n weeks.push(days);\n }\n }\n\n return weeks;\n}\n"],"mappings":";;;;;AAWA,SAAgB,aAAa,EAC3B,OACA,iBAAiB,GACjB,mBACyC;CAEzC,MAAM,QAAQ,MADF,MAAM,KAAK,EAAE,SAAS,MAAM,KAAK,EAAE,KAAK,IAAI,GAAG,KACrC,EAAE,OAAO,YAAY,CAAC;CAC5C,MAAM,eAAe,MAAM,OAAO,YAAY;CAE9C,MAAM,UAAU,aADG,MAAM,IAAI,CAAC,MAAM,YAAY,IAAI,GAAG,KAAK,EAAE,OAAO,YAC/B,GAAG,cAAc;CACvD,MAAM,QAA6B,CAAC;CAEpC,IAAI,OAAO,MAAM,eAAe;EAAE,MAAM;EAAc;CAAe,CAAC,CAAC;CAEvE,OAAO,MAAM,IAAI,EAAE,SAAS,SAAS,KAAK,GAAG;EAC3C,MAAM,OAA0B,CAAC;EAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;GAC7B,KAAK,KAAK,KAAK,OAAO,qBAAqB,CAAC;GAC5C,OAAO,KAAK,IAAI,GAAG,KAAK;EAC1B;EAEA,MAAM,KAAK,IAAI;CACjB;CAEA,IAAI,mBAAmB,MAAM,SAAS,GAAG;EACvC,MAAM,WAAW,MAAM,MAAM,SAAS;EACtC,MAAM,UAAU,SAAS,SAAS,SAAS;EAC3C,IAAI,UAAU,MAAM,OAAO,EAAE,IAAI,GAAG,KAAK;EAEzC,OAAO,MAAM,SAAS,GAAG;GACvB,MAAM,OAA0B,CAAC;GAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;IAC7B,KAAK,KAAK,QAAQ,OAAO,qBAAqB,CAAC;IAC/C,UAAU,QAAQ,IAAI,GAAG,KAAK;GAChC;GAEA,MAAM,KAAK,IAAI;EACjB;CACF;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-month-range.mjs","names":[],"sources":["../../../src/utils/get-month-range/get-month-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek } from '../../types';\nimport { getMonthDays } from '../get-month-days/get-month-days';\nimport { toDateString } from '../to-date-string/to-date-string';\n\ninterface GetMonthRangeInput {\n month: AnyDateValue;\n withOutsideDays: boolean | undefined;\n consistentWeeks: boolean | undefined;\n firstDayOfWeek: DayOfWeek;\n}\n\n/** Returns start and end dates as displayed in MonthView */\nexport function getMonthRange({\n month,\n withOutsideDays,\n consistentWeeks,\n firstDayOfWeek,\n}: GetMonthRangeInput) {\n if (!withOutsideDays) {\n return {\n start: toDateString(dayjs(month).startOf('month')),\n end: toDateString(dayjs(month).endOf('month')),\n };\n }\n\n const days = getMonthDays({ month, firstDayOfWeek, consistentWeeks });\n\n return {\n start: days[0][0],\n end: days[days.length - 1][6],\n };\n}\n"],"mappings":";;;;;;AAaA,SAAgB,cAAc,EAC5B,OACA,iBACA,iBACA,kBACqB;AACrB,KAAI,CAAC,gBACH,QAAO;EACL,OAAO,aAAa,MAAM,MAAM,CAAC,QAAQ,QAAQ,CAAC;EAClD,KAAK,aAAa,MAAM,MAAM,CAAC,MAAM,QAAQ,CAAC;EAC/C;CAGH,MAAM,OAAO,aAAa;EAAE;EAAO;EAAgB;EAAiB,CAAC;AAErE,QAAO;EACL,OAAO,KAAK,GAAG;EACf,KAAK,KAAK,KAAK,SAAS,GAAG;EAC5B"}
1
+ {"version":3,"file":"get-month-range.mjs","names":[],"sources":["../../../src/utils/get-month-range/get-month-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek } from '../../types';\nimport { getMonthDays } from '../get-month-days/get-month-days';\nimport { toDateString } from '../to-date-string/to-date-string';\n\ninterface GetMonthRangeInput {\n month: AnyDateValue;\n withOutsideDays: boolean | undefined;\n consistentWeeks: boolean | undefined;\n firstDayOfWeek: DayOfWeek;\n}\n\n/** Returns start and end dates as displayed in MonthView */\nexport function getMonthRange({\n month,\n withOutsideDays,\n consistentWeeks,\n firstDayOfWeek,\n}: GetMonthRangeInput) {\n if (!withOutsideDays) {\n return {\n start: toDateString(dayjs(month).startOf('month')),\n end: toDateString(dayjs(month).endOf('month')),\n };\n }\n\n const days = getMonthDays({ month, firstDayOfWeek, consistentWeeks });\n\n return {\n start: days[0][0],\n end: days[days.length - 1][6],\n };\n}\n"],"mappings":";;;;;;AAaA,SAAgB,cAAc,EAC5B,OACA,iBACA,iBACA,kBACqB;CACrB,IAAI,CAAC,iBACH,OAAO;EACL,OAAO,aAAa,MAAM,KAAK,EAAE,QAAQ,OAAO,CAAC;EACjD,KAAK,aAAa,MAAM,KAAK,EAAE,MAAM,OAAO,CAAC;CAC/C;CAGF,MAAM,OAAO,aAAa;EAAE;EAAO;EAAgB;CAAgB,CAAC;CAEpE,OAAO;EACL,OAAO,KAAK,GAAG;EACf,KAAK,KAAK,KAAK,SAAS,GAAG;CAC7B;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-months-by-quarter.mjs","names":[],"sources":["../../../src/utils/get-months-by-quarter/get-months-by-quarter.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue } from '../../types';\n\nexport function getMonthsByQuarter(year: AnyDateValue) {\n const startOfYear = dayjs(year).startOf('year').toDate();\n\n const results: DateStringValue[][] = [[], [], [], []];\n let currentMonthIndex = 0;\n\n for (let i = 0; i < 4; i += 1) {\n for (let j = 0; j < 3; j += 1) {\n results[i].push(dayjs(startOfYear).add(currentMonthIndex, 'months').format('YYYY-MM-DD'));\n currentMonthIndex += 1;\n }\n }\n\n return results;\n}\n"],"mappings":";;;AAGA,SAAgB,mBAAmB,MAAoB;CACrD,MAAM,cAAc,MAAM,KAAK,CAAC,QAAQ,OAAO,CAAC,QAAQ;CAExD,MAAM,UAA+B;EAAC,EAAE;EAAE,EAAE;EAAE,EAAE;EAAE,EAAE;EAAC;CACrD,IAAI,oBAAoB;AAExB,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAC1B,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,UAAQ,GAAG,KAAK,MAAM,YAAY,CAAC,IAAI,mBAAmB,SAAS,CAAC,OAAO,aAAa,CAAC;AACzF,uBAAqB;;AAIzB,QAAO"}
1
+ {"version":3,"file":"get-months-by-quarter.mjs","names":[],"sources":["../../../src/utils/get-months-by-quarter/get-months-by-quarter.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue } from '../../types';\n\nexport function getMonthsByQuarter(year: AnyDateValue) {\n const startOfYear = dayjs(year).startOf('year').toDate();\n\n const results: DateStringValue[][] = [[], [], [], []];\n let currentMonthIndex = 0;\n\n for (let i = 0; i < 4; i += 1) {\n for (let j = 0; j < 3; j += 1) {\n results[i].push(dayjs(startOfYear).add(currentMonthIndex, 'months').format('YYYY-MM-DD'));\n currentMonthIndex += 1;\n }\n }\n\n return results;\n}\n"],"mappings":";;;AAGA,SAAgB,mBAAmB,MAAoB;CACrD,MAAM,cAAc,MAAM,IAAI,EAAE,QAAQ,MAAM,EAAE,OAAO;CAEvD,MAAM,UAA+B;EAAC,CAAC;EAAG,CAAC;EAAG,CAAC;EAAG,CAAC;CAAC;CACpD,IAAI,oBAAoB;CAExB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;EAC7B,QAAQ,GAAG,KAAK,MAAM,WAAW,EAAE,IAAI,mBAAmB,QAAQ,EAAE,OAAO,YAAY,CAAC;EACxF,qBAAqB;CACvB;CAGF,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-months-list.mjs","names":[],"sources":["../../../src/utils/get-months-list/get-months-list.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { DateLabelFormat } from '../../types';\nimport { formatDate } from '../format-date/format-date';\n\ninterface GetMonthsListInput {\n locale: string;\n format: DateLabelFormat;\n}\n\ninterface MonthData {\n month: number;\n name: string;\n}\n\nexport function getMonthsList({ locale, format }: GetMonthsListInput) {\n const months: MonthData[] = [];\n const date = dayjs().locale(locale).startOf('year');\n\n for (let i = 0; i < 12; i++) {\n months.push({ month: i, name: formatDate({ date: date.add(i, 'month'), format, locale }) });\n }\n\n return months;\n}\n"],"mappings":";;;;AAcA,SAAgB,cAAc,EAAE,QAAQ,UAA8B;CACpE,MAAM,SAAsB,EAAE;CAC9B,MAAM,OAAO,OAAO,CAAC,OAAO,OAAO,CAAC,QAAQ,OAAO;AAEnD,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IACtB,QAAO,KAAK;EAAE,OAAO;EAAG,MAAM,WAAW;GAAE,MAAM,KAAK,IAAI,GAAG,QAAQ;GAAE;GAAQ;GAAQ,CAAC;EAAE,CAAC;AAG7F,QAAO"}
1
+ {"version":3,"file":"get-months-list.mjs","names":[],"sources":["../../../src/utils/get-months-list/get-months-list.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { DateLabelFormat } from '../../types';\nimport { formatDate } from '../format-date/format-date';\n\ninterface GetMonthsListInput {\n locale: string;\n format: DateLabelFormat;\n}\n\ninterface MonthData {\n month: number;\n name: string;\n}\n\nexport function getMonthsList({ locale, format }: GetMonthsListInput) {\n const months: MonthData[] = [];\n const date = dayjs().locale(locale).startOf('year');\n\n for (let i = 0; i < 12; i++) {\n months.push({ month: i, name: formatDate({ date: date.add(i, 'month'), format, locale }) });\n }\n\n return months;\n}\n"],"mappings":";;;;AAcA,SAAgB,cAAc,EAAE,QAAQ,UAA8B;CACpE,MAAM,SAAsB,CAAC;CAC7B,MAAM,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM;CAElD,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,OAAO,KAAK;EAAE,OAAO;EAAG,MAAM,WAAW;GAAE,MAAM,KAAK,IAAI,GAAG,OAAO;GAAG;GAAQ;EAAO,CAAC;CAAE,CAAC;CAG5F,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-start-of-week.mjs","names":[],"sources":["../../../src/utils/get-start-of-week/get-start-of-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek } from '../../types';\n\ninterface GetStartOfWeekInput {\n date: AnyDateValue;\n firstDayOfWeek?: DayOfWeek;\n}\n\nexport function getStartOfWeek({ date, firstDayOfWeek = 1 }: GetStartOfWeekInput) {\n let value = dayjs(date);\n\n while (value.day() !== firstDayOfWeek) {\n value = value.subtract(1, 'day');\n }\n\n return value.format('YYYY-MM-DD');\n}\n"],"mappings":";;;AAQA,SAAgB,eAAe,EAAE,MAAM,iBAAiB,KAA0B;CAChF,IAAI,QAAQ,MAAM,KAAK;AAEvB,QAAO,MAAM,KAAK,KAAK,eACrB,SAAQ,MAAM,SAAS,GAAG,MAAM;AAGlC,QAAO,MAAM,OAAO,aAAa"}
1
+ {"version":3,"file":"get-start-of-week.mjs","names":[],"sources":["../../../src/utils/get-start-of-week/get-start-of-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek } from '../../types';\n\ninterface GetStartOfWeekInput {\n date: AnyDateValue;\n firstDayOfWeek?: DayOfWeek;\n}\n\nexport function getStartOfWeek({ date, firstDayOfWeek = 1 }: GetStartOfWeekInput) {\n let value = dayjs(date);\n\n while (value.day() !== firstDayOfWeek) {\n value = value.subtract(1, 'day');\n }\n\n return value.format('YYYY-MM-DD');\n}\n"],"mappings":";;;AAQA,SAAgB,eAAe,EAAE,MAAM,iBAAiB,KAA0B;CAChF,IAAI,QAAQ,MAAM,IAAI;CAEtB,OAAO,MAAM,IAAI,MAAM,gBACrB,QAAQ,MAAM,SAAS,GAAG,KAAK;CAGjC,OAAO,MAAM,OAAO,YAAY;AAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-visible-events.mjs","names":[],"sources":["../../../src/utils/get-visible-events/get-visible-events.ts"],"sourcesContent":["interface GetVisibleEventsInput {\n maxEvents: number;\n totalEvents: number;\n}\n\nexport function getVisibleEvents({ maxEvents, totalEvents }: GetVisibleEventsInput) {\n if (totalEvents <= maxEvents) {\n return {\n visibleEventsCount: totalEvents,\n hiddenEventsCount: 0,\n };\n }\n\n return {\n visibleEventsCount: maxEvents - 1,\n hiddenEventsCount: totalEvents - (maxEvents - 1),\n };\n}\n"],"mappings":";;AAKA,SAAgB,iBAAiB,EAAE,WAAW,eAAsC;AAClF,KAAI,eAAe,UACjB,QAAO;EACL,oBAAoB;EACpB,mBAAmB;EACpB;AAGH,QAAO;EACL,oBAAoB,YAAY;EAChC,mBAAmB,eAAe,YAAY;EAC/C"}
1
+ {"version":3,"file":"get-visible-events.mjs","names":[],"sources":["../../../src/utils/get-visible-events/get-visible-events.ts"],"sourcesContent":["interface GetVisibleEventsInput {\n maxEvents: number;\n totalEvents: number;\n}\n\nexport function getVisibleEvents({ maxEvents, totalEvents }: GetVisibleEventsInput) {\n if (totalEvents <= maxEvents) {\n return {\n visibleEventsCount: totalEvents,\n hiddenEventsCount: 0,\n };\n }\n\n return {\n visibleEventsCount: maxEvents - 1,\n hiddenEventsCount: totalEvents - (maxEvents - 1),\n };\n}\n"],"mappings":";;AAKA,SAAgB,iBAAiB,EAAE,WAAW,eAAsC;CAClF,IAAI,eAAe,WACjB,OAAO;EACL,oBAAoB;EACpB,mBAAmB;CACrB;CAGF,OAAO;EACL,oBAAoB,YAAY;EAChC,mBAAmB,eAAe,YAAY;CAChD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-week-days.mjs","names":[],"sources":["../../../src/utils/get-week-days/get-week-days.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\nimport { toDateString } from '../to-date-string/to-date-string';\n\nexport interface GetWeekDaysInput {\n /** Week to generate days for */\n week: AnyDateValue;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday @default 1 */\n firstDayOfWeek?: DayOfWeek;\n}\n\n/** Returns a list of days in a given week */\nexport function getWeekDays({\n week,\n weekendDays,\n withWeekendDays = true,\n firstDayOfWeek = 1,\n}: GetWeekDaysInput): DateStringValue[] {\n const days: DateStringValue[] = [];\n\n let current = dayjs(getStartOfWeek({ date: week, firstDayOfWeek }));\n\n for (let i = 0; i < 7; i += 1) {\n const dayOfWeek = current.day();\n const isWeekend = weekendDays && weekendDays.includes(dayOfWeek as DayOfWeek);\n\n if (!isWeekend || withWeekendDays) {\n days.push(toDateString(current));\n }\n\n current = current.add(1, 'day');\n }\n\n return days;\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,YAAY,EAC1B,MACA,aACA,kBAAkB,MAClB,iBAAiB,KACqB;CACtC,MAAM,OAA0B,EAAE;CAElC,IAAI,UAAU,MAAM,eAAe;EAAE,MAAM;EAAM;EAAgB,CAAC,CAAC;AAEnE,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;EAC7B,MAAM,YAAY,QAAQ,KAAK;AAG/B,MAAI,EAFc,eAAe,YAAY,SAAS,UAAuB,KAE3D,gBAChB,MAAK,KAAK,aAAa,QAAQ,CAAC;AAGlC,YAAU,QAAQ,IAAI,GAAG,MAAM;;AAGjC,QAAO"}
1
+ {"version":3,"file":"get-week-days.mjs","names":[],"sources":["../../../src/utils/get-week-days/get-week-days.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\nimport { toDateString } from '../to-date-string/to-date-string';\n\nexport interface GetWeekDaysInput {\n /** Week to generate days for */\n week: AnyDateValue;\n\n /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */\n weekendDays?: DayOfWeek[];\n\n /** If set to false, weekend days are hidden @default true */\n withWeekendDays?: boolean;\n\n /** Number 0-6, where 0 – Sunday and 6 – Saturday @default 1 */\n firstDayOfWeek?: DayOfWeek;\n}\n\n/** Returns a list of days in a given week */\nexport function getWeekDays({\n week,\n weekendDays,\n withWeekendDays = true,\n firstDayOfWeek = 1,\n}: GetWeekDaysInput): DateStringValue[] {\n const days: DateStringValue[] = [];\n\n let current = dayjs(getStartOfWeek({ date: week, firstDayOfWeek }));\n\n for (let i = 0; i < 7; i += 1) {\n const dayOfWeek = current.day();\n const isWeekend = weekendDays && weekendDays.includes(dayOfWeek as DayOfWeek);\n\n if (!isWeekend || withWeekendDays) {\n days.push(toDateString(current));\n }\n\n current = current.add(1, 'day');\n }\n\n return days;\n}\n"],"mappings":";;;;;;AAoBA,SAAgB,YAAY,EAC1B,MACA,aACA,kBAAkB,MAClB,iBAAiB,KACqB;CACtC,MAAM,OAA0B,CAAC;CAEjC,IAAI,UAAU,MAAM,eAAe;EAAE,MAAM;EAAM;CAAe,CAAC,CAAC;CAElE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;EAC7B,MAAM,YAAY,QAAQ,IAAI;EAG9B,IAAI,EAFc,eAAe,YAAY,SAAS,SAAsB,MAE1D,iBAChB,KAAK,KAAK,aAAa,OAAO,CAAC;EAGjC,UAAU,QAAQ,IAAI,GAAG,KAAK;CAChC;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-week-number.mjs","names":[],"sources":["../../../src/utils/get-week-number/get-week-number.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek.js';\nimport { AnyDateValue } from '../../types';\n\ndayjs.extend(isoWeek);\n\nexport function getWeekNumber(week: AnyDateValue | AnyDateValue[]): number {\n if (Array.isArray(week)) {\n const monday = week.find((date) => dayjs(date).day() === 1);\n return dayjs(monday).isoWeek();\n }\n\n return dayjs(week).isoWeek();\n}\n"],"mappings":";;;;AAIA,MAAM,OAAO,QAAQ;AAErB,SAAgB,cAAc,MAA6C;AACzE,KAAI,MAAM,QAAQ,KAAK,CAErB,QAAO,MADQ,KAAK,MAAM,SAAS,MAAM,KAAK,CAAC,KAAK,KAAK,EAAE,CACvC,CAAC,SAAS;AAGhC,QAAO,MAAM,KAAK,CAAC,SAAS"}
1
+ {"version":3,"file":"get-week-number.mjs","names":[],"sources":["../../../src/utils/get-week-number/get-week-number.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek.js';\nimport { AnyDateValue } from '../../types';\n\ndayjs.extend(isoWeek);\n\nexport function getWeekNumber(week: AnyDateValue | AnyDateValue[]): number {\n if (Array.isArray(week)) {\n const monday = week.find((date) => dayjs(date).day() === 1);\n return dayjs(monday).isoWeek();\n }\n\n return dayjs(week).isoWeek();\n}\n"],"mappings":";;;;AAIA,MAAM,OAAO,OAAO;AAEpB,SAAgB,cAAc,MAA6C;CACzE,IAAI,MAAM,QAAQ,IAAI,GAEpB,OAAO,MADQ,KAAK,MAAM,SAAS,MAAM,IAAI,EAAE,IAAI,MAAM,CACvC,CAAC,EAAE,QAAQ;CAG/B,OAAO,MAAM,IAAI,EAAE,QAAQ;AAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-weekdays-names.mjs","names":[],"sources":["../../../src/utils/get-weekdays-names/get-weekdays-names.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport type { DateLabelFormat, DayOfWeek } from '../../types';\nimport { formatDate } from '../format-date/format-date';\n\ninterface GetWeekdaysNamesInput {\n locale: string;\n format?: DateLabelFormat;\n firstDayOfWeek?: DayOfWeek;\n}\n\nexport function getWeekdaysNames({\n locale,\n format = 'dd',\n firstDayOfWeek = 1,\n}: GetWeekdaysNamesInput) {\n const baseDate = dayjs().day(firstDayOfWeek);\n const labels: React.ReactNode[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n labels.push(formatDate({ locale, date: baseDate.add(i, 'days'), format }));\n }\n\n return labels;\n}\n"],"mappings":";;;;AAUA,SAAgB,iBAAiB,EAC/B,QACA,SAAS,MACT,iBAAiB,KACO;CACxB,MAAM,WAAW,OAAO,CAAC,IAAI,eAAe;CAC5C,MAAM,SAA4B,EAAE;AAEpC,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,EAC1B,QAAO,KAAK,WAAW;EAAE;EAAQ,MAAM,SAAS,IAAI,GAAG,OAAO;EAAE;EAAQ,CAAC,CAAC;AAG5E,QAAO"}
1
+ {"version":3,"file":"get-weekdays-names.mjs","names":[],"sources":["../../../src/utils/get-weekdays-names/get-weekdays-names.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport type { DateLabelFormat, DayOfWeek } from '../../types';\nimport { formatDate } from '../format-date/format-date';\n\ninterface GetWeekdaysNamesInput {\n locale: string;\n format?: DateLabelFormat;\n firstDayOfWeek?: DayOfWeek;\n}\n\nexport function getWeekdaysNames({\n locale,\n format = 'dd',\n firstDayOfWeek = 1,\n}: GetWeekdaysNamesInput) {\n const baseDate = dayjs().day(firstDayOfWeek);\n const labels: React.ReactNode[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n labels.push(formatDate({ locale, date: baseDate.add(i, 'days'), format }));\n }\n\n return labels;\n}\n"],"mappings":";;;;AAUA,SAAgB,iBAAiB,EAC/B,QACA,SAAS,MACT,iBAAiB,KACO;CACxB,MAAM,WAAW,MAAM,EAAE,IAAI,cAAc;CAC3C,MAAM,SAA4B,CAAC;CAEnC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAC1B,OAAO,KAAK,WAAW;EAAE;EAAQ,MAAM,SAAS,IAAI,GAAG,MAAM;EAAG;CAAO,CAAC,CAAC;CAG3E,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-years-list.mjs","names":[],"sources":["../../../src/utils/get-years-list/get-years-list.ts"],"sourcesContent":["interface GetYearsListInput {\n startYear: number;\n endYear: number;\n}\n\nexport function getYearsList({ startYear, endYear }: GetYearsListInput) {\n const years: number[] = [];\n\n for (let year = startYear; year <= endYear; year++) {\n years.push(year);\n }\n\n return years;\n}\n"],"mappings":";;AAKA,SAAgB,aAAa,EAAE,WAAW,WAA8B;CACtE,MAAM,QAAkB,EAAE;AAE1B,MAAK,IAAI,OAAO,WAAW,QAAQ,SAAS,OAC1C,OAAM,KAAK,KAAK;AAGlB,QAAO"}
1
+ {"version":3,"file":"get-years-list.mjs","names":[],"sources":["../../../src/utils/get-years-list/get-years-list.ts"],"sourcesContent":["interface GetYearsListInput {\n startYear: number;\n endYear: number;\n}\n\nexport function getYearsList({ startYear, endYear }: GetYearsListInput) {\n const years: number[] = [];\n\n for (let year = startYear; year <= endYear; year++) {\n years.push(year);\n }\n\n return years;\n}\n"],"mappings":";;AAKA,SAAgB,aAAa,EAAE,WAAW,WAA8B;CACtE,MAAM,QAAkB,CAAC;CAEzB,KAAK,IAAI,OAAO,WAAW,QAAQ,SAAS,QAC1C,MAAM,KAAK,IAAI;CAGjB,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-after-min-date.mjs","names":[],"sources":["../../../src/utils/is-after-min-date/is-after-min-date.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\n\nexport function isAfterMinDate(date: AnyDateValue, minDate: AnyDateValue | undefined) {\n return minDate ? dayjs(date).isAfter(dayjs(minDate).subtract(1, 'day'), 'day') : true;\n}\n"],"mappings":";;;AAGA,SAAgB,eAAe,MAAoB,SAAmC;AACpF,QAAO,UAAU,MAAM,KAAK,CAAC,QAAQ,MAAM,QAAQ,CAAC,SAAS,GAAG,MAAM,EAAE,MAAM,GAAG"}
1
+ {"version":3,"file":"is-after-min-date.mjs","names":[],"sources":["../../../src/utils/is-after-min-date/is-after-min-date.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\n\nexport function isAfterMinDate(date: AnyDateValue, minDate: AnyDateValue | undefined) {\n return minDate ? dayjs(date).isAfter(dayjs(minDate).subtract(1, 'day'), 'day') : true;\n}\n"],"mappings":";;;AAGA,SAAgB,eAAe,MAAoB,SAAmC;CACpF,OAAO,UAAU,MAAM,IAAI,EAAE,QAAQ,MAAM,OAAO,EAAE,SAAS,GAAG,KAAK,GAAG,KAAK,IAAI;AACnF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-all-day-event.mjs","names":[],"sources":["../../../src/utils/is-all-day-event/is-all-day-event.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, ScheduleEventData } from '../../types';\n\ninterface IsAllDayEventInput {\n event: ScheduleEventData;\n date: AnyDateValue;\n}\n\nexport function isAllDayEvent({ event, date }: IsAllDayEventInput) {\n const dayStart = dayjs(date).startOf('day');\n const nextDayStart = dayStart.add(1, 'day');\n const sameDayEnd = nextDayStart.subtract(1, 'second');\n const startTime = dayjs(event.start);\n const endTime = dayjs(event.end);\n\n return startTime.isSame(dayStart) && (endTime.isSame(nextDayStart) || endTime.isSame(sameDayEnd));\n}\n"],"mappings":";;;AAQA,SAAgB,cAAc,EAAE,OAAO,QAA4B;CACjE,MAAM,WAAW,MAAM,KAAK,CAAC,QAAQ,MAAM;CAC3C,MAAM,eAAe,SAAS,IAAI,GAAG,MAAM;CAC3C,MAAM,aAAa,aAAa,SAAS,GAAG,SAAS;CACrD,MAAM,YAAY,MAAM,MAAM,MAAM;CACpC,MAAM,UAAU,MAAM,MAAM,IAAI;AAEhC,QAAO,UAAU,OAAO,SAAS,KAAK,QAAQ,OAAO,aAAa,IAAI,QAAQ,OAAO,WAAW"}
1
+ {"version":3,"file":"is-all-day-event.mjs","names":[],"sources":["../../../src/utils/is-all-day-event/is-all-day-event.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, ScheduleEventData } from '../../types';\n\ninterface IsAllDayEventInput {\n event: ScheduleEventData;\n date: AnyDateValue;\n}\n\nexport function isAllDayEvent({ event, date }: IsAllDayEventInput) {\n const dayStart = dayjs(date).startOf('day');\n const nextDayStart = dayStart.add(1, 'day');\n const sameDayEnd = nextDayStart.subtract(1, 'second');\n const startTime = dayjs(event.start);\n const endTime = dayjs(event.end);\n\n return startTime.isSame(dayStart) && (endTime.isSame(nextDayStart) || endTime.isSame(sameDayEnd));\n}\n"],"mappings":";;;AAQA,SAAgB,cAAc,EAAE,OAAO,QAA4B;CACjE,MAAM,WAAW,MAAM,IAAI,EAAE,QAAQ,KAAK;CAC1C,MAAM,eAAe,SAAS,IAAI,GAAG,KAAK;CAC1C,MAAM,aAAa,aAAa,SAAS,GAAG,QAAQ;CACpD,MAAM,YAAY,MAAM,MAAM,KAAK;CACnC,MAAM,UAAU,MAAM,MAAM,GAAG;CAE/B,OAAO,UAAU,OAAO,QAAQ,MAAM,QAAQ,OAAO,YAAY,KAAK,QAAQ,OAAO,UAAU;AACjG"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-before-max-date.mjs","names":[],"sources":["../../../src/utils/is-before-max-date/is-before-max-date.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\n\nexport function isBeforeMaxDate(date: AnyDateValue, maxDate: AnyDateValue | undefined) {\n return maxDate ? dayjs(date).isBefore(dayjs(maxDate).add(1, 'day'), 'day') : true;\n}\n"],"mappings":";;;AAGA,SAAgB,gBAAgB,MAAoB,SAAmC;AACrF,QAAO,UAAU,MAAM,KAAK,CAAC,SAAS,MAAM,QAAQ,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,GAAG"}
1
+ {"version":3,"file":"is-before-max-date.mjs","names":[],"sources":["../../../src/utils/is-before-max-date/is-before-max-date.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\n\nexport function isBeforeMaxDate(date: AnyDateValue, maxDate: AnyDateValue | undefined) {\n return maxDate ? dayjs(date).isBefore(dayjs(maxDate).add(1, 'day'), 'day') : true;\n}\n"],"mappings":";;;AAGA,SAAgB,gBAAgB,MAAoB,SAAmC;CACrF,OAAO,UAAU,MAAM,IAAI,EAAE,SAAS,MAAM,OAAO,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,IAAI;AAC/E"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-event-in-time-range.mjs","names":[],"sources":["../../../src/utils/is-event-in-time-range/is-event-in-time-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\nimport { isMultidayEvent } from '../is-multiday-event/is-multiday-event';\n\ninterface IsEventInTimeRangeInput {\n event: ScheduleEventData;\n startTime?: string;\n endTime?: string;\n}\n\nfunction spansFullDay(event: ScheduleEventData) {\n const start = dayjs(event.start);\n const end = dayjs(event.end);\n if (!start.isSame(start.startOf('day'))) {\n return false;\n }\n const nextDayStart = start.startOf('day').add(1, 'day');\n return end.isSame(nextDayStart) || end.isSame(nextDayStart.subtract(1, 'second'));\n}\n\nexport function isEventInTimeRange({ event, startTime, endTime }: IsEventInTimeRangeInput) {\n if (isMultidayEvent(event) || spansFullDay(event)) {\n return true;\n }\n\n if (!startTime || !endTime) {\n return true;\n }\n\n const [startHour, startMinute] = startTime.split(':').map(Number);\n const [endHour, endMinute] = endTime.split(':').map(Number);\n const timeWindowStartMinutes = startHour * 60 + startMinute;\n const timeWindowEndMinutes = endHour * 60 + endMinute;\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const eventStartMinutes = eventStart.hour() * 60 + eventStart.minute();\n const eventEndMinutes = eventEnd.hour() * 60 + eventEnd.minute();\n\n return !(eventEndMinutes <= timeWindowStartMinutes || eventStartMinutes >= timeWindowEndMinutes);\n}\n"],"mappings":";;;;AAUA,SAAS,aAAa,OAA0B;CAC9C,MAAM,QAAQ,MAAM,MAAM,MAAM;CAChC,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5B,KAAI,CAAC,MAAM,OAAO,MAAM,QAAQ,MAAM,CAAC,CACrC,QAAO;CAET,MAAM,eAAe,MAAM,QAAQ,MAAM,CAAC,IAAI,GAAG,MAAM;AACvD,QAAO,IAAI,OAAO,aAAa,IAAI,IAAI,OAAO,aAAa,SAAS,GAAG,SAAS,CAAC;;AAGnF,SAAgB,mBAAmB,EAAE,OAAO,WAAW,WAAoC;AACzF,KAAI,gBAAgB,MAAM,IAAI,aAAa,MAAM,CAC/C,QAAO;AAGT,KAAI,CAAC,aAAa,CAAC,QACjB,QAAO;CAGT,MAAM,CAAC,WAAW,eAAe,UAAU,MAAM,IAAI,CAAC,IAAI,OAAO;CACjE,MAAM,CAAC,SAAS,aAAa,QAAQ,MAAM,IAAI,CAAC,IAAI,OAAO;CAC3D,MAAM,yBAAyB,YAAY,KAAK;CAChD,MAAM,uBAAuB,UAAU,KAAK;CAE5C,MAAM,aAAa,MAAM,MAAM,MAAM;CACrC,MAAM,WAAW,MAAM,MAAM,IAAI;CACjC,MAAM,oBAAoB,WAAW,MAAM,GAAG,KAAK,WAAW,QAAQ;AAGtE,QAAO,EAFiB,SAAS,MAAM,GAAG,KAAK,SAAS,QAAQ,IAEpC,0BAA0B,qBAAqB"}
1
+ {"version":3,"file":"is-event-in-time-range.mjs","names":[],"sources":["../../../src/utils/is-event-in-time-range/is-event-in-time-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\nimport { isMultidayEvent } from '../is-multiday-event/is-multiday-event';\n\ninterface IsEventInTimeRangeInput {\n event: ScheduleEventData;\n startTime?: string;\n endTime?: string;\n}\n\nfunction spansFullDay(event: ScheduleEventData) {\n const start = dayjs(event.start);\n const end = dayjs(event.end);\n if (!start.isSame(start.startOf('day'))) {\n return false;\n }\n const nextDayStart = start.startOf('day').add(1, 'day');\n return end.isSame(nextDayStart) || end.isSame(nextDayStart.subtract(1, 'second'));\n}\n\nexport function isEventInTimeRange({ event, startTime, endTime }: IsEventInTimeRangeInput) {\n if (isMultidayEvent(event) || spansFullDay(event)) {\n return true;\n }\n\n if (!startTime || !endTime) {\n return true;\n }\n\n const [startHour, startMinute] = startTime.split(':').map(Number);\n const [endHour, endMinute] = endTime.split(':').map(Number);\n const timeWindowStartMinutes = startHour * 60 + startMinute;\n const timeWindowEndMinutes = endHour * 60 + endMinute;\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const eventStartMinutes = eventStart.hour() * 60 + eventStart.minute();\n const eventEndMinutes = eventEnd.hour() * 60 + eventEnd.minute();\n\n return !(eventEndMinutes <= timeWindowStartMinutes || eventStartMinutes >= timeWindowEndMinutes);\n}\n"],"mappings":";;;;AAUA,SAAS,aAAa,OAA0B;CAC9C,MAAM,QAAQ,MAAM,MAAM,KAAK;CAC/B,MAAM,MAAM,MAAM,MAAM,GAAG;CAC3B,IAAI,CAAC,MAAM,OAAO,MAAM,QAAQ,KAAK,CAAC,GACpC,OAAO;CAET,MAAM,eAAe,MAAM,QAAQ,KAAK,EAAE,IAAI,GAAG,KAAK;CACtD,OAAO,IAAI,OAAO,YAAY,KAAK,IAAI,OAAO,aAAa,SAAS,GAAG,QAAQ,CAAC;AAClF;AAEA,SAAgB,mBAAmB,EAAE,OAAO,WAAW,WAAoC;CACzF,IAAI,gBAAgB,KAAK,KAAK,aAAa,KAAK,GAC9C,OAAO;CAGT,IAAI,CAAC,aAAa,CAAC,SACjB,OAAO;CAGT,MAAM,CAAC,WAAW,eAAe,UAAU,MAAM,GAAG,EAAE,IAAI,MAAM;CAChE,MAAM,CAAC,SAAS,aAAa,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;CAC1D,MAAM,yBAAyB,YAAY,KAAK;CAChD,MAAM,uBAAuB,UAAU,KAAK;CAE5C,MAAM,aAAa,MAAM,MAAM,KAAK;CACpC,MAAM,WAAW,MAAM,MAAM,GAAG;CAChC,MAAM,oBAAoB,WAAW,KAAK,IAAI,KAAK,WAAW,OAAO;CAGrE,OAAO,EAFiB,SAAS,KAAK,IAAI,KAAK,SAAS,OAAO,KAEnC,0BAA0B,qBAAqB;AAC7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-events-overlap.mjs","names":[],"sources":["../../../src/utils/is-events-overlap/is-events-overlap.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\n/** Returns true if two events overlap in time */\nexport function isEventsOverlap(event1: ScheduleEventData, event2: ScheduleEventData) {\n const start1 = dayjs(event1.start).valueOf();\n const end1 = dayjs(event1.end).valueOf();\n const start2 = dayjs(event2.start).valueOf();\n const end2 = dayjs(event2.end).valueOf();\n return start1 < end2 && start2 < end1;\n}\n"],"mappings":";;;;AAIA,SAAgB,gBAAgB,QAA2B,QAA2B;CACpF,MAAM,SAAS,MAAM,OAAO,MAAM,CAAC,SAAS;CAC5C,MAAM,OAAO,MAAM,OAAO,IAAI,CAAC,SAAS;CACxC,MAAM,SAAS,MAAM,OAAO,MAAM,CAAC,SAAS;AAE5C,QAAO,SADM,MAAM,OAAO,IAAI,CAAC,SAAS,IAChB,SAAS"}
1
+ {"version":3,"file":"is-events-overlap.mjs","names":[],"sources":["../../../src/utils/is-events-overlap/is-events-overlap.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\n/** Returns true if two events overlap in time */\nexport function isEventsOverlap(event1: ScheduleEventData, event2: ScheduleEventData) {\n const start1 = dayjs(event1.start).valueOf();\n const end1 = dayjs(event1.end).valueOf();\n const start2 = dayjs(event2.start).valueOf();\n const end2 = dayjs(event2.end).valueOf();\n return start1 < end2 && start2 < end1;\n}\n"],"mappings":";;;;AAIA,SAAgB,gBAAgB,QAA2B,QAA2B;CACpF,MAAM,SAAS,MAAM,OAAO,KAAK,EAAE,QAAQ;CAC3C,MAAM,OAAO,MAAM,OAAO,GAAG,EAAE,QAAQ;CACvC,MAAM,SAAS,MAAM,OAAO,KAAK,EAAE,QAAQ;CAE3C,OAAO,SADM,MAAM,OAAO,GAAG,EAAE,QACZ,KAAK,SAAS;AACnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-in-time-range.mjs","names":[],"sources":["../../../src/utils/is-in-time-range/is-in-time-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\nimport { parseTimeString } from '../parse-time-string/parse-time-string';\n\ninterface IsInTimeRangeInput {\n date: AnyDateValue;\n startTime?: string;\n endTime?: string;\n}\n\n/** Returns true if the given date's time is within the specified time range */\nexport function isInTimeRange({\n date,\n startTime = '00:00:00',\n endTime = '23:59:59',\n}: IsInTimeRangeInput) {\n const targetDate = dayjs(date);\n const parsedStartTime = parseTimeString(startTime);\n const parsedEndTime = parseTimeString(endTime);\n\n const startDateTime = targetDate\n .hour(parsedStartTime.hours)\n .minute(parsedStartTime.minutes)\n .second(parsedStartTime.seconds);\n\n const endDateTime = targetDate\n .hour(parsedEndTime.hours)\n .minute(parsedEndTime.minutes)\n .second(parsedEndTime.seconds);\n\n return targetDate.isAfter(startDateTime) && targetDate.isBefore(endDateTime);\n}\n"],"mappings":";;;;;AAWA,SAAgB,cAAc,EAC5B,MACA,YAAY,YACZ,UAAU,cACW;CACrB,MAAM,aAAa,MAAM,KAAK;CAC9B,MAAM,kBAAkB,gBAAgB,UAAU;CAClD,MAAM,gBAAgB,gBAAgB,QAAQ;CAE9C,MAAM,gBAAgB,WACnB,KAAK,gBAAgB,MAAM,CAC3B,OAAO,gBAAgB,QAAQ,CAC/B,OAAO,gBAAgB,QAAQ;CAElC,MAAM,cAAc,WACjB,KAAK,cAAc,MAAM,CACzB,OAAO,cAAc,QAAQ,CAC7B,OAAO,cAAc,QAAQ;AAEhC,QAAO,WAAW,QAAQ,cAAc,IAAI,WAAW,SAAS,YAAY"}
1
+ {"version":3,"file":"is-in-time-range.mjs","names":[],"sources":["../../../src/utils/is-in-time-range/is-in-time-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\nimport { parseTimeString } from '../parse-time-string/parse-time-string';\n\ninterface IsInTimeRangeInput {\n date: AnyDateValue;\n startTime?: string;\n endTime?: string;\n}\n\n/** Returns true if the given date's time is within the specified time range */\nexport function isInTimeRange({\n date,\n startTime = '00:00:00',\n endTime = '23:59:59',\n}: IsInTimeRangeInput) {\n const targetDate = dayjs(date);\n const parsedStartTime = parseTimeString(startTime);\n const parsedEndTime = parseTimeString(endTime);\n\n const startDateTime = targetDate\n .hour(parsedStartTime.hours)\n .minute(parsedStartTime.minutes)\n .second(parsedStartTime.seconds);\n\n const endDateTime = targetDate\n .hour(parsedEndTime.hours)\n .minute(parsedEndTime.minutes)\n .second(parsedEndTime.seconds);\n\n return targetDate.isAfter(startDateTime) && targetDate.isBefore(endDateTime);\n}\n"],"mappings":";;;;;AAWA,SAAgB,cAAc,EAC5B,MACA,YAAY,YACZ,UAAU,cACW;CACrB,MAAM,aAAa,MAAM,IAAI;CAC7B,MAAM,kBAAkB,gBAAgB,SAAS;CACjD,MAAM,gBAAgB,gBAAgB,OAAO;CAE7C,MAAM,gBAAgB,WACnB,KAAK,gBAAgB,KAAK,EAC1B,OAAO,gBAAgB,OAAO,EAC9B,OAAO,gBAAgB,OAAO;CAEjC,MAAM,cAAc,WACjB,KAAK,cAAc,KAAK,EACxB,OAAO,cAAc,OAAO,EAC5B,OAAO,cAAc,OAAO;CAE/B,OAAO,WAAW,QAAQ,aAAa,KAAK,WAAW,SAAS,WAAW;AAC7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-multiday-event.mjs","names":[],"sources":["../../../src/utils/is-multiday-event/is-multiday-event.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\nexport function isMultidayEvent(event: ScheduleEventData) {\n const startDate = dayjs(event.start).startOf('day');\n const rawEnd = dayjs(event.end);\n const endAtMidnight = rawEnd.hour() === 0 && rawEnd.minute() === 0 && rawEnd.second() === 0;\n const endDate = endAtMidnight ? rawEnd.startOf('day').subtract(1, 'day') : rawEnd.startOf('day');\n return endDate.isAfter(startDate);\n}\n"],"mappings":";;;AAGA,SAAgB,gBAAgB,OAA0B;CACxD,MAAM,YAAY,MAAM,MAAM,MAAM,CAAC,QAAQ,MAAM;CACnD,MAAM,SAAS,MAAM,MAAM,IAAI;AAG/B,SAFsB,OAAO,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,KAAK,OAAO,QAAQ,KAAK,IAC1D,OAAO,QAAQ,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,OAAO,QAAQ,MAAM,EACjF,QAAQ,UAAU"}
1
+ {"version":3,"file":"is-multiday-event.mjs","names":[],"sources":["../../../src/utils/is-multiday-event/is-multiday-event.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\nexport function isMultidayEvent(event: ScheduleEventData) {\n const startDate = dayjs(event.start).startOf('day');\n const rawEnd = dayjs(event.end);\n const endAtMidnight = rawEnd.hour() === 0 && rawEnd.minute() === 0 && rawEnd.second() === 0;\n const endDate = endAtMidnight ? rawEnd.startOf('day').subtract(1, 'day') : rawEnd.startOf('day');\n return endDate.isAfter(startDate);\n}\n"],"mappings":";;;AAGA,SAAgB,gBAAgB,OAA0B;CACxD,MAAM,YAAY,MAAM,MAAM,KAAK,EAAE,QAAQ,KAAK;CAClD,MAAM,SAAS,MAAM,MAAM,GAAG;CAG9B,QAFsB,OAAO,KAAK,MAAM,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,MAAM,IAC1D,OAAO,QAAQ,KAAK,EAAE,SAAS,GAAG,KAAK,IAAI,OAAO,QAAQ,KAAK,GAChF,QAAQ,SAAS;AAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-same-month.mjs","names":[],"sources":["../../../src/utils/is-same-month/is-same-month.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\n\nexport function isSameMonth(date: AnyDateValue, comparison: AnyDateValue) {\n return dayjs(date).format('YYYY-MM') === dayjs(comparison).format('YYYY-MM');\n}\n"],"mappings":";;;AAGA,SAAgB,YAAY,MAAoB,YAA0B;AACxE,QAAO,MAAM,KAAK,CAAC,OAAO,UAAU,KAAK,MAAM,WAAW,CAAC,OAAO,UAAU"}
1
+ {"version":3,"file":"is-same-month.mjs","names":[],"sources":["../../../src/utils/is-same-month/is-same-month.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue } from '../../types';\n\nexport function isSameMonth(date: AnyDateValue, comparison: AnyDateValue) {\n return dayjs(date).format('YYYY-MM') === dayjs(comparison).format('YYYY-MM');\n}\n"],"mappings":";;;AAGA,SAAgB,YAAY,MAAoB,YAA0B;CACxE,OAAO,MAAM,IAAI,EAAE,OAAO,SAAS,MAAM,MAAM,UAAU,EAAE,OAAO,SAAS;AAC7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-within-week.mjs","names":[],"sources":["../../../src/utils/is-within-week/is-within-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek, ScheduleEventData } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\n\ninterface IsWithinWeekInput {\n event: ScheduleEventData;\n targetWeek: AnyDateValue;\n firstDayOfWeek: DayOfWeek;\n}\n\nexport function isWithinWeek({ event, targetWeek, firstDayOfWeek }: IsWithinWeekInput) {\n const startOfWeek = dayjs(getStartOfWeek({ date: targetWeek, firstDayOfWeek }));\n const endOfWeek = startOfWeek.add(7, 'day');\n return dayjs(event.start).isBefore(endOfWeek) && dayjs(event.end).isAfter(startOfWeek);\n}\n"],"mappings":";;;;AAUA,SAAgB,aAAa,EAAE,OAAO,YAAY,kBAAqC;CACrF,MAAM,cAAc,MAAM,eAAe;EAAE,MAAM;EAAY;EAAgB,CAAC,CAAC;CAC/E,MAAM,YAAY,YAAY,IAAI,GAAG,MAAM;AAC3C,QAAO,MAAM,MAAM,MAAM,CAAC,SAAS,UAAU,IAAI,MAAM,MAAM,IAAI,CAAC,QAAQ,YAAY"}
1
+ {"version":3,"file":"is-within-week.mjs","names":[],"sources":["../../../src/utils/is-within-week/is-within-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayOfWeek, ScheduleEventData } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\n\ninterface IsWithinWeekInput {\n event: ScheduleEventData;\n targetWeek: AnyDateValue;\n firstDayOfWeek: DayOfWeek;\n}\n\nexport function isWithinWeek({ event, targetWeek, firstDayOfWeek }: IsWithinWeekInput) {\n const startOfWeek = dayjs(getStartOfWeek({ date: targetWeek, firstDayOfWeek }));\n const endOfWeek = startOfWeek.add(7, 'day');\n return dayjs(event.start).isBefore(endOfWeek) && dayjs(event.end).isAfter(startOfWeek);\n}\n"],"mappings":";;;;AAUA,SAAgB,aAAa,EAAE,OAAO,YAAY,kBAAqC;CACrF,MAAM,cAAc,MAAM,eAAe;EAAE,MAAM;EAAY;CAAe,CAAC,CAAC;CAC9E,MAAM,YAAY,YAAY,IAAI,GAAG,KAAK;CAC1C,OAAO,MAAM,MAAM,KAAK,EAAE,SAAS,SAAS,KAAK,MAAM,MAAM,GAAG,EAAE,QAAQ,WAAW;AACvF"}
@@ -1 +1 @@
1
- {"version":3,"file":"next-week.mjs","names":[],"sources":["../../../src/utils/next-week/next-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\nimport { toDateString } from '../to-date-string/to-date-string';\n\nexport function nextWeek(date: AnyDateValue, firstDayOfWeek: DayOfWeek): DateStringValue {\n const start = getStartOfWeek({ date, firstDayOfWeek });\n return toDateString(dayjs(start).set('date', dayjs(start).date() + 7));\n}\n"],"mappings":";;;;;AAKA,SAAgB,SAAS,MAAoB,gBAA4C;CACvF,MAAM,QAAQ,eAAe;EAAE;EAAM;EAAgB,CAAC;AACtD,QAAO,aAAa,MAAM,MAAM,CAAC,IAAI,QAAQ,MAAM,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"next-week.mjs","names":[],"sources":["../../../src/utils/next-week/next-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\nimport { toDateString } from '../to-date-string/to-date-string';\n\nexport function nextWeek(date: AnyDateValue, firstDayOfWeek: DayOfWeek): DateStringValue {\n const start = getStartOfWeek({ date, firstDayOfWeek });\n return toDateString(dayjs(start).set('date', dayjs(start).date() + 7));\n}\n"],"mappings":";;;;;AAKA,SAAgB,SAAS,MAAoB,gBAA4C;CACvF,MAAM,QAAQ,eAAe;EAAE;EAAM;CAAe,CAAC;CACrD,OAAO,aAAa,MAAM,KAAK,EAAE,IAAI,QAAQ,MAAM,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC;AACvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-time-string.mjs","names":[],"sources":["../../../src/utils/parse-time-string/parse-time-string.ts"],"sourcesContent":["export interface ParsedTime {\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nexport function parseTimeString(time: string): ParsedTime {\n const [hours, minutes, seconds] = time.split(':').map(Number);\n return { hours, minutes, seconds: seconds || 0 };\n}\n"],"mappings":";;AAMA,SAAgB,gBAAgB,MAA0B;CACxD,MAAM,CAAC,OAAO,SAAS,WAAW,KAAK,MAAM,IAAI,CAAC,IAAI,OAAO;AAC7D,QAAO;EAAE;EAAO;EAAS,SAAS,WAAW;EAAG"}
1
+ {"version":3,"file":"parse-time-string.mjs","names":[],"sources":["../../../src/utils/parse-time-string/parse-time-string.ts"],"sourcesContent":["export interface ParsedTime {\n hours: number;\n minutes: number;\n seconds: number;\n}\n\nexport function parseTimeString(time: string): ParsedTime {\n const [hours, minutes, seconds] = time.split(':').map(Number);\n return { hours, minutes, seconds: seconds || 0 };\n}\n"],"mappings":";;AAMA,SAAgB,gBAAgB,MAA0B;CACxD,MAAM,CAAC,OAAO,SAAS,WAAW,KAAK,MAAM,GAAG,EAAE,IAAI,MAAM;CAC5D,OAAO;EAAE;EAAO;EAAS,SAAS,WAAW;CAAE;AACjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"previous-week.mjs","names":[],"sources":["../../../src/utils/previous-week/previous-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\nimport { toDateString } from '../to-date-string/to-date-string';\n\nexport function previousWeek(date: AnyDateValue, firstDayOfWeek: DayOfWeek): DateStringValue {\n const start = getStartOfWeek({ date, firstDayOfWeek });\n return toDateString(dayjs(start).set('date', dayjs(start).date() - 7));\n}\n"],"mappings":";;;;;AAKA,SAAgB,aAAa,MAAoB,gBAA4C;CAC3F,MAAM,QAAQ,eAAe;EAAE;EAAM;EAAgB,CAAC;AACtD,QAAO,aAAa,MAAM,MAAM,CAAC,IAAI,QAAQ,MAAM,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"previous-week.mjs","names":[],"sources":["../../../src/utils/previous-week/previous-week.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\nimport { toDateString } from '../to-date-string/to-date-string';\n\nexport function previousWeek(date: AnyDateValue, firstDayOfWeek: DayOfWeek): DateStringValue {\n const start = getStartOfWeek({ date, firstDayOfWeek });\n return toDateString(dayjs(start).set('date', dayjs(start).date() - 7));\n}\n"],"mappings":";;;;;AAKA,SAAgB,aAAa,MAAoB,gBAA4C;CAC3F,MAAM,QAAQ,eAAe;EAAE;EAAM;CAAe,CAAC;CACrD,OAAO,aAAa,MAAM,KAAK,EAAE,IAAI,QAAQ,MAAM,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC;AACvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"sort-events.mjs","names":[],"sources":["../../../src/utils/sort-events/sort-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\n/** Sorts events by start time, then by duration (longer first) */\nexport function sortEvents<T extends ScheduleEventData>(events: T[]): T[] {\n return events.toSorted((a, b) => {\n const startDiff = dayjs(a.start).diff(dayjs(b.start));\n\n if (startDiff !== 0) {\n return startDiff;\n }\n\n return dayjs(b.end).diff(dayjs(b.start)) - dayjs(a.end).diff(dayjs(a.start));\n });\n}\n"],"mappings":";;;;AAIA,SAAgB,WAAwC,QAAkB;AACxE,QAAO,OAAO,UAAU,GAAG,MAAM;EAC/B,MAAM,YAAY,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;AAErD,MAAI,cAAc,EAChB,QAAO;AAGT,SAAO,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;GAC5E"}
1
+ {"version":3,"file":"sort-events.mjs","names":[],"sources":["../../../src/utils/sort-events/sort-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\n/** Sorts events by start time, then by duration (longer first) */\nexport function sortEvents<T extends ScheduleEventData>(events: T[]): T[] {\n return events.toSorted((a, b) => {\n const startDiff = dayjs(a.start).diff(dayjs(b.start));\n\n if (startDiff !== 0) {\n return startDiff;\n }\n\n return dayjs(b.end).diff(dayjs(b.start)) - dayjs(a.end).diff(dayjs(a.start));\n });\n}\n"],"mappings":";;;;AAIA,SAAgB,WAAwC,QAAkB;CACxE,OAAO,OAAO,UAAU,GAAG,MAAM;EAC/B,MAAM,YAAY,MAAM,EAAE,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC;EAEpD,IAAI,cAAc,GAChB,OAAO;EAGT,OAAO,MAAM,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC;CAC7E,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"to-date-string.mjs","names":[],"sources":["../../../src/utils/to-date-string/to-date-string.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue } from '../../types';\n\nexport function toDateString(date: AnyDateValue): DateStringValue {\n return dayjs(date).format('YYYY-MM-DD 00:00:00');\n}\n"],"mappings":";;;AAGA,SAAgB,aAAa,MAAqC;AAChE,QAAO,MAAM,KAAK,CAAC,OAAO,sBAAsB"}
1
+ {"version":3,"file":"to-date-string.mjs","names":[],"sources":["../../../src/utils/to-date-string/to-date-string.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue } from '../../types';\n\nexport function toDateString(date: AnyDateValue): DateStringValue {\n return dayjs(date).format('YYYY-MM-DD 00:00:00');\n}\n"],"mappings":";;;AAGA,SAAgB,aAAa,MAAqC;CAChE,OAAO,MAAM,IAAI,EAAE,OAAO,qBAAqB;AACjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"to-time-string.mjs","names":[],"sources":["../../../src/utils/to-time-string/to-time-string.ts"],"sourcesContent":["import { ParsedTime } from '../parse-time-string/parse-time-string';\n\nexport function toTimeString({ hours, minutes, seconds }: ParsedTime) {\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;\n}\n"],"mappings":";;AAEA,SAAgB,aAAa,EAAE,OAAO,SAAS,WAAuB;AACpE,QAAO,GAAG,OAAO,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,OAAO,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,OAAO,QAAQ,CAAC,SAAS,GAAG,IAAI"}
1
+ {"version":3,"file":"to-time-string.mjs","names":[],"sources":["../../../src/utils/to-time-string/to-time-string.ts"],"sourcesContent":["import { ParsedTime } from '../parse-time-string/parse-time-string';\n\nexport function toTimeString({ hours, minutes, seconds }: ParsedTime) {\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;\n}\n"],"mappings":";;AAEA,SAAgB,aAAa,EAAE,OAAO,SAAS,WAAuB;CACpE,OAAO,GAAG,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,OAAO,OAAO,EAAE,SAAS,GAAG,GAAG;AACjH"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-event.mjs","names":[],"sources":["../../../src/utils/validate-event/validate-event.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\nexport function validateEvent(eventData: ScheduleEventData) {\n if (!dayjs(eventData.start).isValid()) {\n throw new Error(`[@mantine/schedule] Invalid start date for event id: ${eventData.id}`);\n }\n\n if (!dayjs(eventData.end).isValid()) {\n throw new Error(`[@mantine/schedule] Invalid end date for event id: ${eventData.id}`);\n }\n\n if (dayjs(eventData.end).isBefore(dayjs(eventData.start))) {\n throw new Error(\n `[@mantine/schedule] Event end date is before start date for event id: ${eventData.id}`\n );\n }\n\n return eventData;\n}\n"],"mappings":";;;AAGA,SAAgB,cAAc,WAA8B;AAC1D,KAAI,CAAC,MAAM,UAAU,MAAM,CAAC,SAAS,CACnC,OAAM,IAAI,MAAM,wDAAwD,UAAU,KAAK;AAGzF,KAAI,CAAC,MAAM,UAAU,IAAI,CAAC,SAAS,CACjC,OAAM,IAAI,MAAM,sDAAsD,UAAU,KAAK;AAGvF,KAAI,MAAM,UAAU,IAAI,CAAC,SAAS,MAAM,UAAU,MAAM,CAAC,CACvD,OAAM,IAAI,MACR,yEAAyE,UAAU,KACpF;AAGH,QAAO"}
1
+ {"version":3,"file":"validate-event.mjs","names":[],"sources":["../../../src/utils/validate-event/validate-event.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\n\nexport function validateEvent(eventData: ScheduleEventData) {\n if (!dayjs(eventData.start).isValid()) {\n throw new Error(`[@mantine/schedule] Invalid start date for event id: ${eventData.id}`);\n }\n\n if (!dayjs(eventData.end).isValid()) {\n throw new Error(`[@mantine/schedule] Invalid end date for event id: ${eventData.id}`);\n }\n\n if (dayjs(eventData.end).isBefore(dayjs(eventData.start))) {\n throw new Error(\n `[@mantine/schedule] Event end date is before start date for event id: ${eventData.id}`\n );\n }\n\n return eventData;\n}\n"],"mappings":";;;AAGA,SAAgB,cAAc,WAA8B;CAC1D,IAAI,CAAC,MAAM,UAAU,KAAK,EAAE,QAAQ,GAClC,MAAM,IAAI,MAAM,wDAAwD,UAAU,IAAI;CAGxF,IAAI,CAAC,MAAM,UAAU,GAAG,EAAE,QAAQ,GAChC,MAAM,IAAI,MAAM,sDAAsD,UAAU,IAAI;CAGtF,IAAI,MAAM,UAAU,GAAG,EAAE,SAAS,MAAM,UAAU,KAAK,CAAC,GACtD,MAAM,IAAI,MACR,yEAAyE,UAAU,IACrF;CAGF,OAAO;AACT"}
@@ -8,6 +8,8 @@ interface GetDayPositionedEventsInput {
8
8
  startTime?: string;
9
9
  /** End time of the day view, used to calculate event positions */
10
10
  endTime?: string;
11
+ /** Number of minutes per time slot, used to align the canvas to whole slots */
12
+ intervalMinutes?: number;
11
13
  }
12
- export declare function getDayPositionedEvents({ events, startTime, endTime, date, }: GetDayPositionedEventsInput): DayPositionedEventData[];
14
+ export declare function getDayPositionedEvents({ events, startTime, endTime, intervalMinutes, date, }: GetDayPositionedEventsInput): DayPositionedEventData[];
13
15
  export {};
@@ -4,8 +4,9 @@ interface GetDayViewEventsInput {
4
4
  date: AnyDateValue;
5
5
  startTime?: string;
6
6
  endTime?: string;
7
+ intervalMinutes?: number;
7
8
  }
8
- export declare function getDayViewEvents({ events, date, startTime, endTime }: GetDayViewEventsInput): {
9
+ export declare function getDayViewEvents({ events, date, startTime, endTime, intervalMinutes, }: GetDayViewEventsInput): {
9
10
  allDayEvents: DayPositionedEventData[];
10
11
  regularEvents: DayPositionedEventData[];
11
12
  backgroundTimedEvents: DayPositionedEventData[];
@@ -0,0 +1,16 @@
1
+ import { DateStringValue, MonthEventPositionData, MonthPositionedEventData } from '../../types';
2
+ interface GetRenderableMonthEventSegmentsInput {
3
+ events: MonthPositionedEventData[];
4
+ groupedByDay: Record<string, MonthPositionedEventData[]>;
5
+ maxEventsPerDay: number;
6
+ week: DateStringValue[];
7
+ }
8
+ export interface RenderableMonthEventSegment {
9
+ event: MonthPositionedEventData;
10
+ position: MonthEventPositionData;
11
+ clipStart: boolean;
12
+ clipEnd: boolean;
13
+ key: string;
14
+ }
15
+ export declare function getRenderableMonthEventSegments({ events, groupedByDay, maxEventsPerDay, week, }: GetRenderableMonthEventSegmentsInput): RenderableMonthEventSegment[];
16
+ export {};
@@ -58,7 +58,7 @@ export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>
58
58
  }) => void;
59
59
  /** Called when all-day slot is clicked in DayView/WeekView */
60
60
  onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
61
- /** Called when day is clicked in MonthView */
61
+ /** Called when a day is clicked in MonthView and YearView */
62
62
  onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
63
63
  /** If set, enables drag-to-select slot ranges @default false */
64
64
  withDragSlotSelect?: boolean;
@@ -1,6 +1,7 @@
1
1
  import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaAutosizeProps, StylesApiProps } from '@mantine/core';
2
2
  import { ScheduleLabelsOverride } from '../../labels';
3
3
  import { DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleMode, ScheduleViewLevel } from '../../types';
4
+ import { BusinessHoursValue } from '../../utils';
4
5
  import { CurrentTimeIndicatorStylesNames } from '../CurrentTimeIndicator/CurrentTimeIndicator';
5
6
  import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
6
7
  import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
@@ -73,8 +74,8 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
73
74
  labels?: ScheduleLabelsOverride;
74
75
  /** If set to true, highlights business hours with white background @default false */
75
76
  highlightBusinessHours?: boolean;
76
- /** Business hours range in `HH:mm:ss` format @default ['09:00:00', '17:00:00'] */
77
- businessHours?: [string, string];
77
+ /** Business hours range in `HH:mm:ss` format shared across all days, or a per-day record keyed by day of the week (`0` – Sunday, `6` – Saturday) for day-specific ranges. Set a day to `null` to mark it as fully outside business hours. @default ['09:00:00', '17:00:00'] */
78
+ businessHours?: BusinessHoursValue;
78
79
  /** Function to customize event body, `event` object is passed as first argument */
79
80
  renderEventBody?: RenderEventBody;
80
81
  /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */
@@ -1,7 +1,7 @@
1
1
  import { GetStylesApi } from '@mantine/core';
2
2
  import { ScheduleLabelsOverride } from '../../labels';
3
3
  import { DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleMode } from '../../types';
4
- import { DayTimeInterval } from '../../utils';
4
+ import { BusinessHoursValue, DayTimeInterval } from '../../utils';
5
5
  import type { WeekViewControlsRef } from './handle-week-view-key-down';
6
6
  import type { WeekViewFactory } from './WeekView';
7
7
  export interface WeekViewDayProps {
@@ -21,8 +21,8 @@ export interface WeekViewDayProps {
21
21
  labels?: ScheduleLabelsOverride;
22
22
  /** If set to true, highlights business hours with white background */
23
23
  highlightBusinessHours?: boolean;
24
- /** Business hours range in `HH:mm:ss` format */
25
- businessHours?: [string, string];
24
+ /** Business hours range in `HH:mm:ss` format, or per-day record keyed by day of the week */
25
+ businessHours?: BusinessHoursValue;
26
26
  /** If true, slots are drop targets for drag and drop */
27
27
  withEventsDragAndDrop?: boolean;
28
28
  /** Called when dragging over day slots container */
@@ -8,6 +8,8 @@ export interface GetWeekPositionedEventsInput {
8
8
  startTime?: string;
9
9
  /** End time of the week view, used to calculate event positions */
10
10
  endTime?: string;
11
+ /** Number of minutes per time slot, used to align the canvas to whole slots */
12
+ intervalMinutes?: number;
11
13
  /** First day of the week, 0 - Sunday, 1 - Monday, etc., used to calculate events positions */
12
14
  firstDayOfWeek?: DayOfWeek;
13
15
  /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday */
@@ -21,4 +23,4 @@ export interface GroupedWeekEvents {
21
23
  regularEvents: Record<DateStringValue, WeekPositionedEventData[]>;
22
24
  backgroundEvents: Record<DateStringValue, WeekPositionedEventData[]>;
23
25
  }
24
- export declare function getWeekPositionedEvents({ date, events, startTime, endTime, firstDayOfWeek, weekendDays, withWeekendDays, }: GetWeekPositionedEventsInput): GroupedWeekEvents;
26
+ export declare function getWeekPositionedEvents({ date, events, startTime, endTime, intervalMinutes, firstDayOfWeek, weekendDays, withWeekendDays, }: GetWeekPositionedEventsInput): GroupedWeekEvents;
@@ -1,7 +1,15 @@
1
+ import { DayOfWeek } from '../../types';
2
+ /** Business hours range in `HH:mm:ss` format */
3
+ export type BusinessHoursRange = [string, string];
4
+ /** Per-day business hours map keyed by day of the week (0 – Sunday, 6 – Saturday). `null` marks a day as fully outside business hours. */
5
+ export type BusinessHoursPerDay = Partial<Record<DayOfWeek, BusinessHoursRange | null>>;
6
+ /** Business hours value – tuple applies to every day, record configures business hours per day */
7
+ export type BusinessHoursValue = BusinessHoursRange | BusinessHoursPerDay;
1
8
  export interface GetBusinessHoursModInput {
2
9
  time: string;
3
- businessHours?: [string, string];
10
+ businessHours?: BusinessHoursValue;
4
11
  highlightBusinessHours?: boolean;
12
+ dayOfWeek?: DayOfWeek;
5
13
  }
6
14
  export interface BusinessHoursMod {
7
15
  'business-hours': boolean;
@@ -10,8 +18,9 @@ export interface BusinessHoursMod {
10
18
  /**
11
19
  * Determines if a given time is within business hours and returns modifier object
12
20
  * @param time - Time string in HH:mm:ss format
13
- * @param businessHours - Tuple of [start, end] times in HH:mm:ss format
21
+ * @param businessHours - Tuple of [start, end] times in HH:mm:ss format, or per-day record keyed by day of the week
14
22
  * @param highlightBusinessHours - Whether to highlight business hours
23
+ * @param dayOfWeek - Day of the week (0 – Sunday, 6 – Saturday), used to resolve per-day business hours
15
24
  * @returns Modifier object for styling business/non-business hours
16
25
  */
17
- export declare function getBusinessHoursMod({ time, businessHours, highlightBusinessHours, }: GetBusinessHoursModInput): BusinessHoursMod;
26
+ export declare function getBusinessHoursMod({ time, businessHours, highlightBusinessHours, dayOfWeek, }: GetBusinessHoursModInput): BusinessHoursMod;
@@ -6,9 +6,11 @@ interface GetDayPositionInput {
6
6
  startTime?: string;
7
7
  /** End time boundary for the day in HH:mm:ss format, `23:59:59` by default */
8
8
  endTime?: string;
9
+ /** Number of minutes per time slot, `60` by default. Used to align the canvas to whole slots when `endTime` does not divide evenly. */
10
+ intervalMinutes?: number;
9
11
  }
10
12
  /** Calculates day position within given start and end time boundaries. Returns top and height in percentages. */
11
- export declare function getDayPosition({ event, startTime, endTime, }: GetDayPositionInput): {
13
+ export declare function getDayPosition({ event, startTime, endTime, intervalMinutes, }: GetDayPositionInput): {
12
14
  top: number;
13
15
  height: number;
14
16
  };
@@ -38,4 +38,4 @@ export type { DayTimeInterval } from './get-day-time-intervals/get-day-time-inte
38
38
  export type { ParsedTime } from './parse-time-string/parse-time-string';
39
39
  export type { CalculateDropTimeInput, CalculateDropTimeResult, } from './calculate-drop-time/calculate-drop-time';
40
40
  export type { CalculateMonthDropDateInput, CalculateMonthDropDateResult, } from './calculate-month-drop-date/calculate-month-drop-date';
41
- export type { GetBusinessHoursModInput, BusinessHoursMod, } from './get-business-hours-mod/get-business-hours-mod';
41
+ export type { BusinessHoursMod, BusinessHoursPerDay, BusinessHoursRange, BusinessHoursValue, GetBusinessHoursModInput, } from './get-business-hours-mod/get-business-hours-mod';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/schedule",
3
- "version": "9.1.1",
3
+ "version": "9.2.1",
4
4
  "description": "Schedule Mantine component",
5
5
  "homepage": "https://mantine.dev/",
6
6
  "license": "MIT",
@@ -35,9 +35,9 @@
35
35
  "directory": "packages/@mantine/schedule"
36
36
  },
37
37
  "peerDependencies": {
38
- "@mantine/core": "9.1.1",
39
- "@mantine/dates": "9.1.1",
40
- "@mantine/hooks": "9.1.1",
38
+ "@mantine/core": "9.2.1",
39
+ "@mantine/dates": "9.2.1",
40
+ "@mantine/hooks": "9.2.1",
41
41
  "react": "^19.2.0",
42
42
  "react-dom": "^19.2.0"
43
43
  },