@ahrowe/ui 0.42.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/CHANGELOG.md +946 -0
  2. package/README.md +14 -12
  3. package/dist/cjs-types/common/accordion/accordion.types.d.ts +17 -2
  4. package/dist/cjs-types/common/actionButtons/actionButtons.types.d.ts +7 -1
  5. package/dist/cjs-types/common/actionIcon/actionIcon.d.ts +1 -1
  6. package/dist/cjs-types/common/actionIcon/actionIcon.types.d.ts +7 -9
  7. package/dist/cjs-types/common/alert/alert.types.d.ts +6 -8
  8. package/dist/cjs-types/common/animatedLogo/animatedLogo.types.d.ts +3 -2
  9. package/dist/cjs-types/common/badge/badge.types.d.ts +10 -6
  10. package/dist/cjs-types/common/button/button.types.d.ts +14 -4
  11. package/dist/cjs-types/common/calendar/calendar.types.d.ts +25 -10
  12. package/dist/cjs-types/common/calendar/components/agendaList/agendaList.d.ts +1 -1
  13. package/dist/cjs-types/common/calendar/components/agendaList/agendaList.types.d.ts +3 -0
  14. package/dist/cjs-types/common/calendar/components/calendarHeader/calendarHeader.d.ts +1 -1
  15. package/dist/cjs-types/common/calendar/components/calendarHeader/calendarHeader.types.d.ts +2 -0
  16. package/dist/cjs-types/common/calendar/components/compactMonth/compactMonth.d.ts +1 -1
  17. package/dist/cjs-types/common/calendar/components/monthView/monthView.d.ts +1 -1
  18. package/dist/cjs-types/common/calendar/components/monthView/monthView.types.d.ts +3 -2
  19. package/dist/cjs-types/common/calendar/components/timeGrid/timeGrid.d.ts +1 -1
  20. package/dist/cjs-types/common/calendar/components/timeGrid/timeGrid.types.d.ts +9 -1
  21. package/dist/cjs-types/common/calendar/dates.d.ts +21 -5
  22. package/dist/cjs-types/common/calendar/format.d.ts +3 -2
  23. package/dist/cjs-types/common/calendar/layout.d.ts +5 -0
  24. package/dist/cjs-types/common/calendar/useNow.d.ts +4 -0
  25. package/dist/cjs-types/common/calendar/view.types.d.ts +9 -2
  26. package/dist/cjs-types/common/card/card.types.d.ts +16 -2
  27. package/dist/cjs-types/common/chip/chip.types.d.ts +10 -5
  28. package/dist/cjs-types/common/configProvider/configProvider.types.d.ts +4 -0
  29. package/dist/cjs-types/common/copyButton/copyButton.types.d.ts +5 -4
  30. package/dist/cjs-types/common/fab/components/fabBase/fabBase.d.ts +1 -1
  31. package/dist/cjs-types/common/fab/components/fabBase/fabBase.types.d.ts +2 -1
  32. package/dist/cjs-types/common/loader/index.d.ts +2 -0
  33. package/dist/cjs-types/common/loader/loader.d.ts +4 -0
  34. package/dist/cjs-types/common/loader/loader.types.d.ts +31 -0
  35. package/dist/cjs-types/common/loadingOverlay/index.d.ts +2 -0
  36. package/dist/cjs-types/common/loadingOverlay/loadingOverlay.d.ts +4 -0
  37. package/dist/cjs-types/common/loadingOverlay/loadingOverlay.types.d.ts +21 -0
  38. package/dist/cjs-types/common/progressBar/progressBar.d.ts +0 -1
  39. package/dist/cjs-types/common/progressBar/progressBar.types.d.ts +3 -1
  40. package/dist/cjs-types/common/splitButton/splitButton.types.d.ts +4 -1
  41. package/dist/cjs-types/common/styles/tone.d.ts +11 -0
  42. package/dist/cjs-types/common/themeProvider/color.types.d.ts +20 -0
  43. package/dist/cjs-types/common/themeProvider/index.d.ts +2 -0
  44. package/dist/cjs-types/common/themeProvider/theme.types.d.ts +7 -6
  45. package/dist/cjs-types/common/timeline/timeline.types.d.ts +3 -10
  46. package/dist/cjs-types/common/toast/index.d.ts +1 -1
  47. package/dist/cjs-types/common/toast/toast.types.d.ts +7 -3
  48. package/dist/cjs-types/common/types/actions.types.d.ts +1 -1
  49. package/dist/cjs-types/common/utils/dismissClick.d.ts +4 -0
  50. package/dist/cjs-types/common/utils/isDev.d.ts +1 -0
  51. package/dist/cjs-types/index.d.ts +4 -1
  52. package/dist/esm/common/accordion/accordion.mjs +1 -1
  53. package/dist/esm/common/accordion/accordion.mjs.map +1 -1
  54. package/dist/esm/common/accordion/accordion.module.mjs +1 -1
  55. package/dist/esm/common/accordion/accordion.module.mjs.map +1 -1
  56. package/dist/esm/common/accordion/accordion.types.mjs +1 -1
  57. package/dist/esm/common/accordion/accordion.types.mjs.map +1 -1
  58. package/dist/esm/common/actionButtons/actionButtons.mjs +1 -1
  59. package/dist/esm/common/actionButtons/actionButtons.mjs.map +1 -1
  60. package/dist/esm/common/actionIcon/actionIcon.mjs +1 -1
  61. package/dist/esm/common/actionIcon/actionIcon.mjs.map +1 -1
  62. package/dist/esm/common/actionIcon/actionIcon.module.mjs +1 -1
  63. package/dist/esm/common/actionIcon/actionIcon.module.mjs.map +1 -1
  64. package/dist/esm/common/alert/alert.mjs +1 -1
  65. package/dist/esm/common/alert/alert.mjs.map +1 -1
  66. package/dist/esm/common/alert/alert.module.mjs +1 -1
  67. package/dist/esm/common/alert/alert.module.mjs.map +1 -1
  68. package/dist/esm/common/animatedLogo/animatedLogo.mjs +1 -1
  69. package/dist/esm/common/animatedLogo/animatedLogo.mjs.map +1 -1
  70. package/dist/esm/common/avatar/avatar.mjs +1 -1
  71. package/dist/esm/common/avatar/avatar.mjs.map +1 -1
  72. package/dist/esm/common/badge/badge.mjs +1 -1
  73. package/dist/esm/common/badge/badge.mjs.map +1 -1
  74. package/dist/esm/common/badge/badge.module.mjs +1 -1
  75. package/dist/esm/common/badge/badge.module.mjs.map +1 -1
  76. package/dist/esm/common/badge/badge.types.mjs +1 -1
  77. package/dist/esm/common/badge/badge.types.mjs.map +1 -1
  78. package/dist/esm/common/bodyEnd/bodyEnd.mjs +1 -1
  79. package/dist/esm/common/bodyEnd/bodyEnd.mjs.map +1 -1
  80. package/dist/esm/common/breadcrumb/breadcrumb.mjs +1 -1
  81. package/dist/esm/common/breadcrumb/breadcrumb.mjs.map +1 -1
  82. package/dist/esm/common/breadcrumb/breadcrumb.module.mjs.map +1 -1
  83. package/dist/esm/common/button/button.mjs +1 -1
  84. package/dist/esm/common/button/button.mjs.map +1 -1
  85. package/dist/esm/common/button/button.module.mjs +1 -1
  86. package/dist/esm/common/button/button.module.mjs.map +1 -1
  87. package/dist/esm/common/button/button.types.mjs +1 -1
  88. package/dist/esm/common/button/button.types.mjs.map +1 -1
  89. package/dist/esm/common/calendar/calendar.mjs +1 -1
  90. package/dist/esm/common/calendar/calendar.mjs.map +1 -1
  91. package/dist/esm/common/calendar/calendar.module.mjs.map +1 -1
  92. package/dist/esm/common/calendar/calendar.types.mjs.map +1 -1
  93. package/dist/esm/common/calendar/components/agendaList/agendaList.mjs +1 -1
  94. package/dist/esm/common/calendar/components/agendaList/agendaList.mjs.map +1 -1
  95. package/dist/esm/common/calendar/components/agendaList/agendaList.module.mjs.map +1 -1
  96. package/dist/esm/common/calendar/components/calendarHeader/calendarHeader.mjs +1 -1
  97. package/dist/esm/common/calendar/components/calendarHeader/calendarHeader.mjs.map +1 -1
  98. package/dist/esm/common/calendar/components/calendarHeader/calendarHeader.module.mjs +1 -1
  99. package/dist/esm/common/calendar/components/calendarHeader/calendarHeader.module.mjs.map +1 -1
  100. package/dist/esm/common/calendar/components/compactMonth/compactMonth.mjs +1 -1
  101. package/dist/esm/common/calendar/components/compactMonth/compactMonth.mjs.map +1 -1
  102. package/dist/esm/common/calendar/components/compactMonth/compactMonth.module.mjs +1 -1
  103. package/dist/esm/common/calendar/components/compactMonth/compactMonth.module.mjs.map +1 -1
  104. package/dist/esm/common/calendar/components/monthView/monthView.mjs +1 -1
  105. package/dist/esm/common/calendar/components/monthView/monthView.mjs.map +1 -1
  106. package/dist/esm/common/calendar/components/monthView/monthView.module.mjs +1 -1
  107. package/dist/esm/common/calendar/components/monthView/monthView.module.mjs.map +1 -1
  108. package/dist/esm/common/calendar/components/timeGrid/timeGrid.mjs +1 -1
  109. package/dist/esm/common/calendar/components/timeGrid/timeGrid.mjs.map +1 -1
  110. package/dist/esm/common/calendar/components/timeGrid/timeGrid.module.mjs +1 -1
  111. package/dist/esm/common/calendar/components/timeGrid/timeGrid.module.mjs.map +1 -1
  112. package/dist/esm/common/calendar/dates.mjs +1 -1
  113. package/dist/esm/common/calendar/dates.mjs.map +1 -1
  114. package/dist/esm/common/calendar/format.mjs +1 -1
  115. package/dist/esm/common/calendar/format.mjs.map +1 -1
  116. package/dist/esm/common/calendar/layout.mjs +1 -1
  117. package/dist/esm/common/calendar/layout.mjs.map +1 -1
  118. package/dist/esm/common/calendar/useNow.mjs +2 -0
  119. package/dist/esm/common/calendar/useNow.mjs.map +1 -0
  120. package/dist/esm/common/card/Card.mjs +1 -1
  121. package/dist/esm/common/card/Card.mjs.map +1 -1
  122. package/dist/esm/common/card/CardActions.mjs +1 -1
  123. package/dist/esm/common/card/CardActions.mjs.map +1 -1
  124. package/dist/esm/common/card/CardHeader.mjs.map +1 -1
  125. package/dist/esm/common/card/card.module.mjs +1 -1
  126. package/dist/esm/common/card/card.module.mjs.map +1 -1
  127. package/dist/esm/common/card/card.types.mjs +1 -1
  128. package/dist/esm/common/card/card.types.mjs.map +1 -1
  129. package/dist/esm/common/carousel/carousel.mjs +1 -1
  130. package/dist/esm/common/carousel/carousel.mjs.map +1 -1
  131. package/dist/esm/common/carousel/carousel.module.mjs.map +1 -1
  132. package/dist/esm/common/checkbox/checkbox.mjs +1 -1
  133. package/dist/esm/common/checkbox/checkbox.mjs.map +1 -1
  134. package/dist/esm/common/checkbox/checkbox.module.mjs +1 -1
  135. package/dist/esm/common/checkbox/checkbox.module.mjs.map +1 -1
  136. package/dist/esm/common/chip/chip.mjs +1 -1
  137. package/dist/esm/common/chip/chip.mjs.map +1 -1
  138. package/dist/esm/common/chip/chip.module.mjs +1 -1
  139. package/dist/esm/common/chip/chip.module.mjs.map +1 -1
  140. package/dist/esm/common/chip/chip.types.mjs +1 -1
  141. package/dist/esm/common/chip/chip.types.mjs.map +1 -1
  142. package/dist/esm/common/colorPicker/colorPicker.mjs +1 -1
  143. package/dist/esm/common/colorPicker/colorPicker.mjs.map +1 -1
  144. package/dist/esm/common/colorPicker/colorPicker.module.mjs.map +1 -1
  145. package/dist/esm/common/confirmModal/confirmModal.mjs +1 -1
  146. package/dist/esm/common/confirmModal/confirmModal.mjs.map +1 -1
  147. package/dist/esm/common/copyButton/copyButton.mjs +1 -1
  148. package/dist/esm/common/copyButton/copyButton.mjs.map +1 -1
  149. package/dist/esm/common/copyButton/copyButton.module.mjs +1 -1
  150. package/dist/esm/common/copyButton/copyButton.module.mjs.map +1 -1
  151. package/dist/esm/common/dropdown/dropdown.mjs +1 -1
  152. package/dist/esm/common/dropdown/dropdown.mjs.map +1 -1
  153. package/dist/esm/common/dropdown/dropdown.module.mjs +1 -1
  154. package/dist/esm/common/dropdown/dropdown.module.mjs.map +1 -1
  155. package/dist/esm/common/errorBoundary/errorBoundary.mjs +2 -2
  156. package/dist/esm/common/errorBoundary/errorBoundary.mjs.map +1 -1
  157. package/dist/esm/common/fab/components/fabBase/fabBase.mjs +1 -1
  158. package/dist/esm/common/fab/components/fabBase/fabBase.mjs.map +1 -1
  159. package/dist/esm/common/fab/fab.mjs +1 -1
  160. package/dist/esm/common/fab/fab.mjs.map +1 -1
  161. package/dist/esm/common/flip/flip.mjs +1 -1
  162. package/dist/esm/common/flip/flip.mjs.map +1 -1
  163. package/dist/esm/common/kanbanBoard/KanbanColumn.mjs +1 -1
  164. package/dist/esm/common/kanbanBoard/KanbanColumn.mjs.map +1 -1
  165. package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs +1 -1
  166. package/dist/esm/common/kanbanBoard/kanbanBoard.module.mjs.map +1 -1
  167. package/dist/esm/common/klipyPicker/klipyPicker.mjs +1 -1
  168. package/dist/esm/common/klipyPicker/klipyPicker.mjs.map +1 -1
  169. package/dist/esm/common/loader/loader.mjs +2 -0
  170. package/dist/esm/common/loader/loader.mjs.map +1 -0
  171. package/dist/esm/common/loader/loader.module.mjs +2 -0
  172. package/dist/esm/common/loader/loader.module.mjs.map +1 -0
  173. package/dist/esm/common/loader/loader.types.mjs +2 -0
  174. package/dist/esm/common/loader/loader.types.mjs.map +1 -0
  175. package/dist/esm/common/loadingOverlay/loadingOverlay.mjs +2 -0
  176. package/dist/esm/common/loadingOverlay/loadingOverlay.mjs.map +1 -0
  177. package/dist/esm/common/loadingOverlay/loadingOverlay.module.mjs +2 -0
  178. package/dist/esm/common/loadingOverlay/loadingOverlay.module.mjs.map +1 -0
  179. package/dist/esm/common/modal/modal.mjs +1 -1
  180. package/dist/esm/common/modal/modal.mjs.map +1 -1
  181. package/dist/esm/common/modal/modal.module.mjs.map +1 -1
  182. package/dist/esm/common/numberInput/numberInput.mjs +1 -1
  183. package/dist/esm/common/numberInput/numberInput.mjs.map +1 -1
  184. package/dist/esm/common/numberInput/numberInput.module.mjs.map +1 -1
  185. package/dist/esm/common/popover/popover.mjs +1 -1
  186. package/dist/esm/common/popover/popover.mjs.map +1 -1
  187. package/dist/esm/common/progressBar/progressBar.mjs +1 -1
  188. package/dist/esm/common/progressBar/progressBar.mjs.map +1 -1
  189. package/dist/esm/common/progressBar/progressBar.module.mjs +1 -1
  190. package/dist/esm/common/progressBar/progressBar.module.mjs.map +1 -1
  191. package/dist/esm/common/roomDrawer/roomDrawer.mjs +1 -1
  192. package/dist/esm/common/roomDrawer/roomDrawer.mjs.map +1 -1
  193. package/dist/esm/common/roomDrawer/roomDrawer.module.mjs.map +1 -1
  194. package/dist/esm/common/sectionHeader/sectionHeader.mjs.map +1 -1
  195. package/dist/esm/common/splitButton/splitButton.mjs +1 -1
  196. package/dist/esm/common/splitButton/splitButton.mjs.map +1 -1
  197. package/dist/esm/common/styles/tone.mjs +4 -0
  198. package/dist/esm/common/styles/tone.mjs.map +1 -0
  199. package/dist/esm/common/styles/tone.module.mjs +2 -0
  200. package/dist/esm/common/styles/tone.module.mjs.map +1 -0
  201. package/dist/esm/common/themeProvider/color.types.mjs +2 -0
  202. package/dist/esm/common/themeProvider/color.types.mjs.map +1 -0
  203. package/dist/esm/common/themeProvider/defaultTheme.mjs +1 -1
  204. package/dist/esm/common/themeProvider/defaultTheme.mjs.map +1 -1
  205. package/dist/esm/common/tilt/tilt.mjs +1 -1
  206. package/dist/esm/common/tilt/tilt.mjs.map +1 -1
  207. package/dist/esm/common/timeInput/timeInput.mjs +1 -1
  208. package/dist/esm/common/timeInput/timeInput.mjs.map +1 -1
  209. package/dist/esm/common/timeline/timeline.mjs +1 -1
  210. package/dist/esm/common/timeline/timeline.mjs.map +1 -1
  211. package/dist/esm/common/timeline/timeline.module.mjs +1 -1
  212. package/dist/esm/common/timeline/timeline.module.mjs.map +1 -1
  213. package/dist/esm/common/timeline/timeline.types.mjs +1 -1
  214. package/dist/esm/common/timeline/timeline.types.mjs.map +1 -1
  215. package/dist/esm/common/timer/timer.mjs +1 -1
  216. package/dist/esm/common/timer/timer.mjs.map +1 -1
  217. package/dist/esm/common/timer/timer.module.mjs +1 -1
  218. package/dist/esm/common/timer/timer.module.mjs.map +1 -1
  219. package/dist/esm/common/toast/toast.mjs +1 -1
  220. package/dist/esm/common/toast/toast.mjs.map +1 -1
  221. package/dist/esm/common/toast/toast.module.mjs +1 -1
  222. package/dist/esm/common/toast/toast.module.mjs.map +1 -1
  223. package/dist/esm/common/toast/toastHost.mjs +1 -1
  224. package/dist/esm/common/toast/toastHost.mjs.map +1 -1
  225. package/dist/esm/common/utils/dismissClick.mjs +2 -0
  226. package/dist/esm/common/utils/dismissClick.mjs.map +1 -0
  227. package/dist/esm/common/utils/isDev.mjs +2 -0
  228. package/dist/esm/common/utils/isDev.mjs.map +1 -0
  229. package/dist/esm/common/virtualList/virtualList.mjs +1 -1
  230. package/dist/esm/common/virtualList/virtualList.mjs.map +1 -1
  231. package/dist/esm/common/virtualList/virtualList.module.mjs +1 -1
  232. package/dist/esm/common/virtualList/virtualList.module.mjs.map +1 -1
  233. package/dist/esm/index.mjs +1 -1
  234. package/dist/esm/services/formValidation/FormValidatorGroupWithForm.mjs +1 -1
  235. package/dist/esm/services/formValidation/FormValidatorGroupWithForm.mjs.map +1 -1
  236. package/dist/index.cjs +5 -3
  237. package/dist/index.cjs.map +1 -1
  238. package/dist/style.css +1 -1
  239. package/dist/types/common/accordion/accordion.types.d.ts +17 -2
  240. package/dist/types/common/actionButtons/actionButtons.types.d.ts +7 -1
  241. package/dist/types/common/actionIcon/actionIcon.d.ts +1 -1
  242. package/dist/types/common/actionIcon/actionIcon.types.d.ts +7 -9
  243. package/dist/types/common/alert/alert.types.d.ts +6 -8
  244. package/dist/types/common/animatedLogo/animatedLogo.types.d.ts +3 -2
  245. package/dist/types/common/badge/badge.types.d.ts +10 -6
  246. package/dist/types/common/button/button.types.d.ts +14 -4
  247. package/dist/types/common/calendar/calendar.types.d.ts +25 -10
  248. package/dist/types/common/calendar/components/agendaList/agendaList.d.ts +1 -1
  249. package/dist/types/common/calendar/components/agendaList/agendaList.types.d.ts +3 -0
  250. package/dist/types/common/calendar/components/calendarHeader/calendarHeader.d.ts +1 -1
  251. package/dist/types/common/calendar/components/calendarHeader/calendarHeader.types.d.ts +2 -0
  252. package/dist/types/common/calendar/components/compactMonth/compactMonth.d.ts +1 -1
  253. package/dist/types/common/calendar/components/monthView/monthView.d.ts +1 -1
  254. package/dist/types/common/calendar/components/monthView/monthView.types.d.ts +3 -2
  255. package/dist/types/common/calendar/components/timeGrid/timeGrid.d.ts +1 -1
  256. package/dist/types/common/calendar/components/timeGrid/timeGrid.types.d.ts +9 -1
  257. package/dist/types/common/calendar/dates.d.ts +21 -5
  258. package/dist/types/common/calendar/format.d.ts +3 -2
  259. package/dist/types/common/calendar/layout.d.ts +5 -0
  260. package/dist/types/common/calendar/useNow.d.ts +4 -0
  261. package/dist/types/common/calendar/view.types.d.ts +9 -2
  262. package/dist/types/common/card/card.types.d.ts +16 -2
  263. package/dist/types/common/chip/chip.types.d.ts +10 -5
  264. package/dist/types/common/configProvider/configProvider.types.d.ts +4 -0
  265. package/dist/types/common/copyButton/copyButton.types.d.ts +5 -4
  266. package/dist/types/common/fab/components/fabBase/fabBase.d.ts +1 -1
  267. package/dist/types/common/fab/components/fabBase/fabBase.types.d.ts +2 -1
  268. package/dist/types/common/loader/index.d.ts +2 -0
  269. package/dist/types/common/loader/loader.d.ts +4 -0
  270. package/dist/types/common/loader/loader.types.d.ts +31 -0
  271. package/dist/types/common/loadingOverlay/index.d.ts +2 -0
  272. package/dist/types/common/loadingOverlay/loadingOverlay.d.ts +4 -0
  273. package/dist/types/common/loadingOverlay/loadingOverlay.types.d.ts +21 -0
  274. package/dist/types/common/progressBar/progressBar.d.ts +0 -1
  275. package/dist/types/common/progressBar/progressBar.types.d.ts +3 -1
  276. package/dist/types/common/splitButton/splitButton.types.d.ts +4 -1
  277. package/dist/types/common/styles/tone.d.ts +11 -0
  278. package/dist/types/common/themeProvider/color.types.d.ts +20 -0
  279. package/dist/types/common/themeProvider/index.d.ts +2 -0
  280. package/dist/types/common/themeProvider/theme.types.d.ts +7 -6
  281. package/dist/types/common/timeline/timeline.types.d.ts +3 -10
  282. package/dist/types/common/toast/index.d.ts +1 -1
  283. package/dist/types/common/toast/toast.types.d.ts +7 -3
  284. package/dist/types/common/types/actions.types.d.ts +1 -1
  285. package/dist/types/common/utils/dismissClick.d.ts +4 -0
  286. package/dist/types/common/utils/isDev.d.ts +1 -0
  287. package/dist/types/index.d.ts +4 -1
  288. package/docs/Accordion.md +74 -5
  289. package/docs/ActionButtons.md +6 -3
  290. package/docs/ActionIcon.md +39 -14
  291. package/docs/Alert.md +27 -17
  292. package/docs/AnimatedLogo.md +1 -1
  293. package/docs/Badge.md +24 -7
  294. package/docs/Button.md +98 -40
  295. package/docs/ButtonGroup.md +18 -18
  296. package/docs/CLAUDE.md +24 -13
  297. package/docs/Calendar.md +35 -17
  298. package/docs/Card.md +53 -14
  299. package/docs/Checkbox.md +1 -1
  300. package/docs/Chip.md +24 -9
  301. package/docs/ConfigProvider.md +4 -4
  302. package/docs/CopyButton.md +6 -5
  303. package/docs/Loader.md +95 -0
  304. package/docs/LoadingOverlay.md +85 -0
  305. package/docs/ProgressBar.md +7 -4
  306. package/docs/SectionHeader.md +1 -1
  307. package/docs/Skeleton.md +1 -1
  308. package/docs/SplitButton.md +6 -5
  309. package/docs/ThemeColor.md +103 -0
  310. package/docs/ThemeProvider.md +5 -5
  311. package/docs/Timeline.md +18 -9
  312. package/docs/Toast.md +25 -11
  313. package/package.json +3 -2
  314. package/dist/cjs-types/common/loading/index.d.ts +0 -1
  315. package/dist/cjs-types/common/loading/spinnerLoading/index.d.ts +0 -2
  316. package/dist/cjs-types/common/loading/spinnerLoading/spinnerLoading.d.ts +0 -6
  317. package/dist/esm/common/accordion/accordion.plain.module.mjs +0 -2
  318. package/dist/esm/common/accordion/accordion.plain.module.mjs.map +0 -1
  319. package/dist/esm/common/accordion/accordion.primary.module.mjs +0 -2
  320. package/dist/esm/common/accordion/accordion.primary.module.mjs.map +0 -1
  321. package/dist/esm/common/alert/alert.types.mjs +0 -2
  322. package/dist/esm/common/alert/alert.types.mjs.map +0 -1
  323. package/dist/esm/common/loading/spinnerLoading/index.mjs +0 -2
  324. package/dist/esm/common/loading/spinnerLoading/index.mjs.map +0 -1
  325. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.mjs +0 -2
  326. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.mjs.map +0 -1
  327. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.module.mjs +0 -2
  328. package/dist/esm/common/loading/spinnerLoading/spinnerLoading.module.mjs.map +0 -1
  329. package/dist/types/common/loading/index.d.ts +0 -1
  330. package/dist/types/common/loading/spinnerLoading/index.d.ts +0 -2
  331. package/dist/types/common/loading/spinnerLoading/spinnerLoading.d.ts +0 -6
  332. package/docs/Loading.md +0 -68
@@ -1 +1 @@
1
- {"version":3,"file":"monthView.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/monthView/monthView.tsx"],"sourcesContent":["import {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n} from 'react';\nimport cx from 'classnames';\n\nimport Button from 'components/common/button';\nimport Popover from 'components/common/popover';\nimport { PopoverAlign, PopoverPlacement } from 'components/common/popover/popover.types';\nimport { isSelfActivation } from 'components/common/utils/activationKey';\nimport { CalendarView, type CalendarEvent } from '../../calendar.types';\nimport {\n addDays,\n addMonths,\n dayDiff,\n dateToDay,\n endAfter,\n gridKeyTarget,\n isSameDay,\n periodRange,\n shiftDays,\n shownDays,\n startOfMonth,\n startOfWeek,\n} from '../../dates';\nimport { formatDayNumber, formatLongDate, formatMonthTitle, formatTime, formatWeekday } from '../../format';\nimport { clamp, pageStep } from '../../gesture';\nimport { eventDays, eventEnd, eventsByDay, isAllDayLike, limitLanes, packLanes, type LaneBar } from '../../layout';\nimport { useGestures, type GesturePoint } from '../../useGestures';\nimport { usePager } from '../../usePager';\nimport AgendaList from '../agendaList';\nimport type { MonthDrag, MonthViewProps } from './monthView.types';\n\nimport pagerStyles from '../../pager.module.pcss';\nimport styles from './monthView.module.pcss';\n\nconst STEPS = [-1, 0, 1] as const;\n\nfunction MonthView<E extends CalendarEvent>({\n events,\n date,\n locale,\n weekStartsOn,\n hidden,\n text,\n onDateChange,\n onOpenDay,\n onEventClick,\n onEventChange,\n onSlotCreate,\n renderEvent,\n classNames,\n slotStyles,\n}: MonthViewProps<E>): ReactElement {\n const rootRef = useRef<HTMLDivElement>(null);\n const viewportRef = useRef<HTMLDivElement>(null);\n const currentRef = useRef<HTMLDivElement>(null);\n const pendingFocus = useRef<string | null>(null);\n const [capacity, setCapacity] = useState(Infinity);\n const [list, setList] = useState<{ day: Date; anchor: HTMLElement; fromKeyboard: boolean } | null>(null);\n const [drag, setDrag] = useState<MonthDrag<E> | null>(null);\n\n const month = startOfMonth(date);\n const today = new Date();\n const weekdays = shownDays(startOfWeek(today, weekStartsOn), 7, hidden);\n const gridStart = periodRange(CalendarView.Month, month, weekStartsOn).start;\n const rowDates = (paneStart: Date, row: number) => shownDays(addDays(paneStart, row * 7), 7, hidden);\n\n const pager = usePager(\n dateToDay(month),\n (step) => onDateChange(addMonths(date, step)),\n () => currentRef.current?.querySelector<HTMLElement>('[tabindex=\"0\"]') ?? null,\n );\n\n // Lanes that fit a cell, from the real geometry, so `+N` appears exactly when bars would clip.\n // Without layout (jsdom) there is nothing to measure, and every event is shown.\n useLayoutEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n function measure() {\n const bars = viewport!.querySelector<HTMLElement>('[data-cal-bars]');\n if (!bars || bars.clientHeight === 0) {\n setCapacity(Infinity);\n return;\n }\n const style = getComputedStyle(bars);\n const lane = parseFloat(style.gridAutoRows);\n const gap = parseFloat(style.rowGap) || 0;\n const top = parseFloat(style.paddingTop) || 0;\n setCapacity(lane > 0 ? Math.max(1, Math.floor((bars.clientHeight - top + gap) / (lane + gap))) : Infinity);\n }\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, []);\n\n // Arrowing onto a day of the next month pages first, so the cell to focus only exists after\n // the render that follows.\n useLayoutEffect(() => {\n const key = pendingFocus.current;\n if (key === null) return;\n pendingFocus.current = null;\n currentRef.current?.querySelector<HTMLElement>(`[data-cal-day=\"${key}\"]`)?.focus();\n });\n\n function dayAt(point: GesturePoint): Date | null {\n const pane = currentRef.current;\n if (!pane) return null;\n const rect = pane.getBoundingClientRect();\n if (rect.width === 0 || rect.height === 0) return null;\n const count = weekdays.length;\n const column = clamp(Math.floor(((point.x - rect.left) / rect.width) * count), 0, count - 1);\n const row = clamp(Math.floor(((point.y - rect.top) / rect.height) * 6), 0, 5);\n return rowDates(gridStart, row)[column];\n }\n\n function cellFor(day: Date): HTMLElement | null {\n return currentRef.current?.querySelector<HTMLElement>(`[data-cal-day=\"${dateToDay(day)}\"]`) ?? null;\n }\n\n useGestures<MonthDrag<E>>(rootRef, {\n onPress: pager.finish,\n canSwipe: () => true,\n onSwipeMove: pager.move,\n onSwipeEnd: (dx, velocity) => pager.settle(pageStep(dx, pager.width(), velocity)),\n dragFrom: (target, point) => {\n if (!onEventChange) return null;\n const element = target.closest<HTMLElement>('[data-cal-event]');\n if (!element || !currentRef.current?.contains(element)) return null;\n const event = events.find((candidate) => String(candidate.id) === element.dataset.calEvent);\n const grabbed = dayAt(point);\n if (!event || event.readOnly || grabbed === null) return null;\n return { event, grabbed, offset: 0 };\n },\n onDragStart: setDrag,\n onDragMove: (point) => {\n const day = dayAt(point);\n if (day === null) return;\n setDrag((current) => {\n if (!current) return current;\n const offset = dayDiff(current.grabbed, day);\n return offset === current.offset ? current : { ...current, offset };\n });\n },\n onDragEnd: (point) => {\n setDrag(null);\n const day = dayAt(point);\n if (!drag || day === null) return;\n const offset = dayDiff(drag.grabbed, day);\n if (offset === 0) return;\n const start = shiftDays(drag.event.start, offset);\n const length = (eventEnd(drag.event).getTime() - drag.event.start.getTime()) / 60_000;\n onEventChange?.({\n event: drag.event,\n start,\n end: endAfter(start, shiftDays(drag.event.end, offset), length),\n });\n },\n onDragCancel: () => setDrag(null),\n });\n\n function openList(day: Date, fromKeyboard: boolean) {\n const anchor = cellFor(day);\n if (anchor) setList({ day, anchor, fromKeyboard });\n }\n\n function handleCellClick(clickEvent: MouseEvent<HTMLDivElement>, day: Date) {\n if (onOpenDay && (clickEvent.target as Element).closest('[data-cal-day-number]')) {\n onOpenDay(day);\n return;\n }\n onSlotCreate?.({ start: day, end: addDays(day, 1), allDay: true }, clickEvent.currentTarget);\n }\n\n function handleKeyDown(keyEvent: KeyboardEvent<HTMLDivElement>, day: Date) {\n const next = gridKeyTarget(keyEvent.key, day, weekStartsOn, hidden);\n if (!next) {\n if (isSelfActivation(keyEvent)) {\n keyEvent.preventDefault();\n openList(day, true);\n }\n return;\n }\n keyEvent.preventDefault();\n pendingFocus.current = dateToDay(next);\n onDateChange(next);\n }\n\n function renderBar(bar: LaneBar<E>) {\n const { event } = bar;\n const filled = isAllDayLike(event) || bar.span > 1 || bar.continuesBefore || bar.continuesAfter;\n const interactive = Boolean(onEventClick) || (Boolean(onEventChange) && !event.readOnly);\n return (\n <div\n key={event.id}\n data-cal-event={String(event.id)}\n className={cx(\n styles.monthViewBar,\n filled ? styles.monthViewBarFilled : styles.monthViewBarTimed,\n bar.continuesBefore && styles.monthViewBarContinuesBefore,\n bar.continuesAfter && styles.monthViewBarContinuesAfter,\n interactive && styles.monthViewBarInteractive,\n drag?.event === event && styles.monthViewBarDragging,\n classNames?.event,\n )}\n style={\n {\n '--event-color': event.color,\n gridColumn: `${bar.start + 1} / span ${bar.span}`,\n gridRow: bar.lane + 1,\n ...slotStyles?.event,\n } as CSSProperties\n }\n onClick={(clickEvent) => onEventClick?.(event, clickEvent.currentTarget)}\n >\n {!filled && <span className={styles.monthViewDot} />}\n {!filled && <span className={styles.monthViewTime}>{formatTime(event.start, locale)}</span>}\n <span className={styles.monthViewBarTitle}>\n {renderEvent ? renderEvent(event, { singleLine: true }) : event.title}\n </span>\n </div>\n );\n }\n\n function renderPane(step: (typeof STEPS)[number]) {\n const paneMonth = addMonths(month, step);\n const isCurrent = step === 0;\n const paneStart = periodRange(CalendarView.Month, paneMonth, weekStartsOn).start;\n\n let target: { from: Date; to: Date } | null = null;\n if (isCurrent && drag && drag.offset !== 0) {\n const { first, last } = eventDays(drag.event);\n target = { from: addDays(first, drag.offset), to: addDays(last, drag.offset) };\n }\n\n return (\n <div\n key={dateToDay(paneMonth)}\n ref={isCurrent ? currentRef : undefined}\n className={cx(\n pagerStyles.pagerPane,\n step === -1 && pagerStyles.pagerPanePrev,\n step === 1 && pagerStyles.pagerPaneNext,\n styles.monthViewPane,\n )}\n inert={!isCurrent}\n aria-hidden={!isCurrent || undefined}\n >\n {Array.from({ length: 6 }, (_, row) => {\n const dates = rowDates(paneStart, row);\n const perDay = eventsByDay(events, dates);\n const lanes = limitLanes(packLanes(events, dates), dates.length, capacity);\n return (\n <div key={dateToDay(dates[0])} role='row' className={styles.monthViewWeek}>\n {dates.map((day, column) => {\n const count = perDay[column].length;\n const isToday = isSameDay(day, today);\n const name = formatLongDate(day, locale);\n return (\n <div\n key={dateToDay(day)}\n role='gridcell'\n data-cal-day={dateToDay(day)}\n tabIndex={isCurrent && isSameDay(day, date) ? 0 : -1}\n aria-current={isToday ? 'date' : undefined}\n aria-label={count > 0 ? `${name}, ${text.eventCount(count)}` : name}\n className={cx(\n styles.monthViewCell,\n day.getMonth() !== paneMonth.getMonth() && styles.monthViewCellOutside,\n onSlotCreate && styles.monthViewCellCreatable,\n target &&\n dayDiff(target.from, day) >= 0 &&\n dayDiff(day, target.to) >= 0 &&\n styles.monthViewCellTarget,\n classNames?.cell,\n )}\n style={slotStyles?.cell}\n onClick={(clickEvent) => handleCellClick(clickEvent, day)}\n onKeyDown={(keyEvent) => handleKeyDown(keyEvent, day)}\n >\n <span\n data-cal-day-number\n aria-hidden\n className={cx(\n styles.monthViewDayNumber,\n isToday && styles.monthViewDayNumberToday,\n onOpenDay && styles.monthViewDayNumberLink,\n )}\n >\n {formatDayNumber(day, locale)}\n </span>\n </div>\n );\n })}\n {/* Pointer only: a keyboard reaches a day's events through Enter on its cell. */}\n <div data-cal-bars aria-hidden className={styles.monthViewBars}>\n {lanes.visible.map(renderBar)}\n {lanes.hidden.map(\n (count, column) =>\n count > 0 && (\n <div\n key={`more-${column}`}\n className={styles.monthViewMore}\n style={{ gridColumn: column + 1, gridRow: lanes.moreLane + 1 }}\n onClick={() => openList(dates[column], false)}\n >\n {text.more(count)}\n </div>\n ),\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div ref={rootRef} className={styles.monthView} style={{ '--days': weekdays.length } as CSSProperties}>\n <div role='grid' aria-label={formatMonthTitle(date, locale)} className={styles.monthViewGrid}>\n <div role='row' className={styles.monthViewWeekdays}>\n {weekdays.map((day) => (\n <div\n key={day.getDay()}\n role='columnheader'\n aria-label={formatWeekday(day, locale, 'long')}\n className={cx(styles.monthViewWeekday, classNames?.dayHeader)}\n style={slotStyles?.dayHeader}\n >\n {formatWeekday(day, locale, 'short')}\n </div>\n ))}\n </div>\n <div ref={viewportRef} className={cx(pagerStyles.pagerViewport, styles.monthViewViewport)}>\n <div ref={pager.trackRef} className={pagerStyles.pagerTrack}>\n {STEPS.map(renderPane)}\n </div>\n </div>\n </div>\n <Popover\n anchor={list?.anchor ?? null}\n isOpen={list !== null}\n onOpenChange={(open) => !open && setList(null)}\n // Enter on a cell is a key event of ours, which Popover cannot see, so it is told.\n focusOnOpen={list?.fromKeyboard ?? false}\n placement={PopoverPlacement.Bottom}\n align={PopoverAlign.Start}\n content={\n list && (\n <div className={styles.monthViewList}>\n <div className={styles.monthViewListTitle}>{formatLongDate(list.day, locale)}</div>\n <AgendaList\n className={styles.monthViewListEvents}\n events={events}\n start={list.day}\n days={1}\n showDayHeaders={false}\n locale={locale}\n text={text}\n onEventClick={(event) => {\n setList(null);\n // The list's own row unmounts with the popover, so the day's cell anchors it.\n onEventClick?.(event, list.anchor);\n }}\n renderEvent={renderEvent}\n classNames={classNames}\n slotStyles={slotStyles}\n />\n {onSlotCreate && (\n <Button\n className={styles.monthViewListCreate}\n onClick={() => {\n setList(null);\n onSlotCreate({ start: list.day, end: addDays(list.day, 1), allDay: true }, list.anchor);\n }}\n >\n {text.newEvent}\n </Button>\n )}\n </div>\n )\n }\n />\n </div>\n );\n}\n\nexport default MonthView;\n"],"mappings":"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"}
1
+ {"version":3,"file":"monthView.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/monthView/monthView.tsx"],"sourcesContent":["import {\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n} from 'react';\nimport cx from 'classnames';\n\nimport Button from 'components/common/button';\nimport Popover from 'components/common/popover';\nimport { PopoverAlign, PopoverPlacement } from 'components/common/popover/popover.types';\nimport { isSelfActivation } from 'components/common/utils/activationKey';\nimport { isDismissClick } from 'components/common/utils/dismissClick';\nimport { CalendarView, type CalendarEvent } from '../../calendar.types';\nimport {\n addDays,\n addMonths,\n allDaySlot,\n dayDiff,\n dateToDay,\n gridKeyTarget,\n isSameDay,\n periodRange,\n shownDays,\n startOfMonth,\n startOfWeek,\n weekNumber,\n} from '../../dates';\nimport { formatDayNumber, formatLongDate, formatMonthTitle, formatTime, formatWeekday } from '../../format';\nimport { clamp, pageStep } from '../../gesture';\nimport { eventDays, eventsByDay, isAllDayLike, limitLanes, moveByDays, packLanes, type LaneBar } from '../../layout';\nimport { useGestures, type GesturePoint } from '../../useGestures';\nimport { usePager } from '../../usePager';\nimport AgendaList from '../agendaList';\nimport type { MonthDrag, MonthViewProps } from './monthView.types';\n\nimport pagerStyles from '../../pager.module.pcss';\nimport styles from './monthView.module.pcss';\nimport { cssColor } from '../../../styles/tone';\n\nconst STEPS = [-1, 0, 1] as const;\n\nfunction MonthView<E extends CalendarEvent>({\n events,\n date,\n today,\n locale,\n weekStartsOn,\n hidden,\n showWeekNumbers,\n text,\n onDateChange,\n onOpenDay,\n onEventClick,\n onEventChange,\n onSlotCreate,\n renderEvent,\n eventClassName,\n classNames,\n slotStyles,\n}: MonthViewProps<E>): ReactElement {\n const rootRef = useRef<HTMLDivElement>(null);\n const viewportRef = useRef<HTMLDivElement>(null);\n const currentRef = useRef<HTMLDivElement>(null);\n const pendingFocus = useRef<string | null>(null);\n const dragRef = useRef<MonthDrag<E> | null>(null);\n const [capacity, setCapacity] = useState(Infinity);\n const [list, setList] = useState<{ day: Date; anchor: HTMLElement; fromKeyboard: boolean } | null>(null);\n const [drag, setDrag] = useState<MonthDrag<E> | null>(null);\n\n const month = startOfMonth(date);\n const weekdays = shownDays(startOfWeek(today, weekStartsOn), 7, hidden);\n const gridStart = periodRange(CalendarView.Month, month, weekStartsOn).start;\n const rowDates = (paneStart: Date, row: number) => shownDays(addDays(paneStart, row * 7), 7, hidden);\n\n const pager = usePager(\n dateToDay(month),\n (step) => onDateChange(addMonths(date, step)),\n () => currentRef.current?.querySelector<HTMLElement>('[tabindex=\"0\"]') ?? null,\n );\n\n // Lanes that fit a cell, from the real geometry, so `+N` appears exactly when bars would clip.\n // Without layout (jsdom) there is nothing to measure, and every event is shown.\n useLayoutEffect(() => {\n const viewport = viewportRef.current;\n if (!viewport) return;\n function measure() {\n const bars = viewport!.querySelector<HTMLElement>('[data-cal-bars]');\n if (!bars || bars.clientHeight === 0) {\n setCapacity(Infinity);\n return;\n }\n const style = getComputedStyle(bars);\n const lane = parseFloat(style.gridAutoRows);\n const gap = parseFloat(style.rowGap) || 0;\n const top = parseFloat(style.paddingTop) || 0;\n setCapacity(lane > 0 ? Math.max(1, Math.floor((bars.clientHeight - top + gap) / (lane + gap))) : Infinity);\n }\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(viewport);\n return () => observer.disconnect();\n }, []);\n\n // Arrowing onto a day of the next month pages first, so the cell to focus only exists after\n // the render that follows.\n useLayoutEffect(() => {\n const key = pendingFocus.current;\n if (key === null) return;\n pendingFocus.current = null;\n currentRef.current?.querySelector<HTMLElement>(`[data-cal-day=\"${key}\"]`)?.focus();\n });\n\n function dayAt(point: GesturePoint): Date | null {\n const pane = currentRef.current;\n if (!pane) return null;\n const rect = pane.getBoundingClientRect();\n if (rect.width === 0 || rect.height === 0) return null;\n const count = weekdays.length;\n const column = clamp(Math.floor(((point.x - rect.left) / rect.width) * count), 0, count - 1);\n const row = clamp(Math.floor(((point.y - rect.top) / rect.height) * 6), 0, 5);\n return rowDates(gridStart, row)[column];\n }\n\n function cellFor(day: Date): HTMLElement | null {\n return currentRef.current?.querySelector<HTMLElement>(`[data-cal-day=\"${dateToDay(day)}\"]`) ?? null;\n }\n\n // Mirrored in a ref, as in the time grid: a release can arrive before the render of the move\n // before it, and has to drop where that move was.\n function setDragState(next: MonthDrag<E> | null) {\n dragRef.current = next;\n setDrag(next);\n }\n\n useGestures<MonthDrag<E>>(rootRef, {\n onPress: pager.finish,\n canSwipe: () => true,\n onSwipeMove: pager.move,\n onSwipeEnd: (dx, velocity) => pager.settle(pageStep(dx, pager.width(), velocity)),\n dragFrom: (target, point) => {\n if (!currentRef.current?.contains(target)) return null;\n const grabbed = dayAt(point);\n if (grabbed === null) return null;\n const element = target.closest<HTMLElement>('[data-cal-event]');\n if (element) {\n const event = onEventChange && events.find((candidate) => String(candidate.id) === element.dataset.calEvent);\n return event && !event.readOnly ? { event, grabbed, offset: 0 } : null;\n }\n // A day number that opens its day is a link, and a press on it is a click however it moves.\n if (!onSlotCreate || target.closest('[data-cal-more]')) return null;\n if (onOpenDay && target.closest('[data-cal-day-number]')) return null;\n return { event: null, grabbed, offset: 0 };\n },\n onDragStart: setDragState,\n onDragMove: (point) => {\n const current = dragRef.current;\n const day = dayAt(point);\n if (!current || day === null) return;\n const offset = dayDiff(current.grabbed, day);\n if (offset !== current.offset) setDragState({ ...current, offset });\n },\n onDragEnd: (point) => {\n const current = dragRef.current;\n setDragState(null);\n const day = dayAt(point);\n if (!current || day === null) return;\n const { event, grabbed } = current;\n if (!event) {\n const slot = allDaySlot(grabbed, day);\n onSlotCreate?.(slot, cellFor(slot.start) ?? rootRef.current!);\n return;\n }\n const offset = dayDiff(grabbed, day);\n if (offset !== 0) onEventChange?.({ event, ...moveByDays(event, offset) });\n },\n onDragCancel: () => setDragState(null),\n });\n\n function openList(day: Date, fromKeyboard: boolean) {\n const anchor = cellFor(day);\n if (anchor) setList({ day, anchor, fromKeyboard });\n }\n\n function handleCellClick(clickEvent: MouseEvent<HTMLDivElement>, day: Date) {\n if (onOpenDay && (clickEvent.target as Element).closest('[data-cal-day-number]')) {\n onOpenDay(day);\n return;\n }\n if (isDismissClick(clickEvent.nativeEvent)) return;\n onSlotCreate?.(allDaySlot(day), clickEvent.currentTarget);\n }\n\n function handleKeyDown(keyEvent: KeyboardEvent<HTMLDivElement>, day: Date) {\n const next = gridKeyTarget(keyEvent.key, day, weekStartsOn, hidden);\n if (!next) {\n if (isSelfActivation(keyEvent)) {\n keyEvent.preventDefault();\n openList(day, true);\n }\n return;\n }\n keyEvent.preventDefault();\n pendingFocus.current = dateToDay(next);\n onDateChange(next);\n }\n\n function renderBar(bar: LaneBar<E>) {\n const { event } = bar;\n const filled = isAllDayLike(event) || bar.span > 1 || bar.continuesBefore || bar.continuesAfter;\n const interactive = Boolean(onEventClick) || (Boolean(onEventChange) && !event.readOnly);\n return (\n <div\n key={event.id}\n data-cal-event={String(event.id)}\n className={cx(\n styles.monthViewBar,\n filled ? styles.monthViewBarFilled : styles.monthViewBarTimed,\n bar.continuesBefore && styles.monthViewBarContinuesBefore,\n bar.continuesAfter && styles.monthViewBarContinuesAfter,\n interactive && styles.monthViewBarInteractive,\n drag?.event === event && styles.monthViewBarDragging,\n classNames?.event,\n eventClassName?.(event),\n )}\n style={\n {\n '--event-color': event.color && cssColor(event.color),\n gridColumn: `${bar.start + 1} / span ${bar.span}`,\n gridRow: bar.lane + 1,\n ...slotStyles?.event,\n } as CSSProperties\n }\n onClick={(clickEvent) => onEventClick?.(event, clickEvent.currentTarget)}\n >\n {!filled && <span className={styles.monthViewDot} />}\n {!filled && <span className={styles.monthViewTime}>{formatTime(event.start, locale)}</span>}\n <span className={styles.monthViewBarTitle}>\n {renderEvent ? renderEvent(event, { singleLine: true }) : event.title}\n </span>\n </div>\n );\n }\n\n function renderPane(step: (typeof STEPS)[number]) {\n const paneMonth = addMonths(month, step);\n const isCurrent = step === 0;\n const paneStart = periodRange(CalendarView.Month, paneMonth, weekStartsOn).start;\n\n let target: { from: Date; to: Date } | null = null;\n if (isCurrent && drag?.event && drag.offset !== 0) {\n const { first, last } = eventDays(drag.event);\n target = { from: addDays(first, drag.offset), to: addDays(last, drag.offset) };\n } else if (isCurrent && drag && !drag.event) {\n const over = addDays(drag.grabbed, drag.offset);\n target = drag.offset < 0 ? { from: over, to: drag.grabbed } : { from: drag.grabbed, to: over };\n }\n\n return (\n <div\n key={dateToDay(paneMonth)}\n ref={isCurrent ? currentRef : undefined}\n className={cx(\n pagerStyles.pagerPane,\n step === -1 && pagerStyles.pagerPanePrev,\n step === 1 && pagerStyles.pagerPaneNext,\n styles.monthViewPane,\n )}\n inert={!isCurrent}\n aria-hidden={!isCurrent || undefined}\n >\n {Array.from({ length: 6 }, (_, row) => {\n const dates = rowDates(paneStart, row);\n const perDay = eventsByDay(events, dates);\n const lanes = limitLanes(packLanes(events, dates), dates.length, capacity);\n // Numbered by the ISO week holding most of its days, which the middle one is in.\n const week = showWeekNumbers ? text.weekNumber(weekNumber(dates[Math.floor(dates.length / 2)])) : undefined;\n return (\n <div key={dateToDay(dates[0])} role='row' aria-label={week} className={styles.monthViewWeek}>\n {dates.map((day, column) => {\n const count = perDay[column].length;\n const isToday = isSameDay(day, today);\n const name = formatLongDate(day, locale);\n return (\n <div\n key={dateToDay(day)}\n role='gridcell'\n data-cal-day={dateToDay(day)}\n tabIndex={isCurrent && isSameDay(day, date) ? 0 : -1}\n aria-current={isToday ? 'date' : undefined}\n aria-label={count > 0 ? `${name}, ${text.eventCount(count)}` : name}\n className={cx(\n styles.monthViewCell,\n day.getMonth() !== paneMonth.getMonth() && styles.monthViewCellOutside,\n onSlotCreate && styles.monthViewCellCreatable,\n target &&\n dayDiff(target.from, day) >= 0 &&\n dayDiff(day, target.to) >= 0 &&\n styles.monthViewCellTarget,\n classNames?.cell,\n )}\n style={slotStyles?.cell}\n onClick={(clickEvent) => handleCellClick(clickEvent, day)}\n onKeyDown={(keyEvent) => handleKeyDown(keyEvent, day)}\n >\n <span\n data-cal-day-number\n aria-hidden\n className={cx(\n styles.monthViewDayNumber,\n isToday && styles.monthViewDayNumberToday,\n onOpenDay && styles.monthViewDayNumberLink,\n )}\n >\n {formatDayNumber(day, locale)}\n </span>\n {week && column === 0 && (\n <span aria-hidden className={styles.monthViewWeekNumber}>\n {week}\n </span>\n )}\n </div>\n );\n })}\n {/* Pointer only: a keyboard reaches a day's events through Enter on its cell. */}\n <div data-cal-bars aria-hidden className={styles.monthViewBars}>\n {lanes.visible.map(renderBar)}\n {lanes.hidden.map(\n (count, column) =>\n count > 0 && (\n <div\n key={`more-${column}`}\n data-cal-more\n className={styles.monthViewMore}\n style={{ gridColumn: column + 1, gridRow: lanes.moreLane + 1 }}\n onClick={() => openList(dates[column], false)}\n >\n {text.more(count)}\n </div>\n ),\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div ref={rootRef} className={styles.monthView} style={{ '--days': weekdays.length } as CSSProperties}>\n <div role='grid' aria-label={formatMonthTitle(date, locale)} className={styles.monthViewGrid}>\n <div role='row' className={styles.monthViewWeekdays}>\n {weekdays.map((day) => (\n <div\n key={day.getDay()}\n role='columnheader'\n aria-label={formatWeekday(day, locale, 'long')}\n className={cx(styles.monthViewWeekday, classNames?.dayHeader)}\n style={slotStyles?.dayHeader}\n >\n {formatWeekday(day, locale, 'short')}\n </div>\n ))}\n </div>\n <div ref={viewportRef} className={cx(pagerStyles.pagerViewport, styles.monthViewViewport)}>\n <div ref={pager.trackRef} className={pagerStyles.pagerTrack}>\n {STEPS.map(renderPane)}\n </div>\n </div>\n </div>\n <Popover\n anchor={list?.anchor ?? null}\n isOpen={list !== null}\n onOpenChange={(open) => !open && setList(null)}\n // Enter on a cell is a key event of ours, which Popover cannot see, so it is told.\n focusOnOpen={list?.fromKeyboard ?? false}\n placement={PopoverPlacement.Bottom}\n align={PopoverAlign.Start}\n content={\n list && (\n <div className={styles.monthViewList}>\n <div className={styles.monthViewListTitle}>{formatLongDate(list.day, locale)}</div>\n <AgendaList\n className={styles.monthViewListEvents}\n events={events}\n start={list.day}\n days={1}\n showDayHeaders={false}\n locale={locale}\n today={today}\n text={text}\n onEventClick={(event) => {\n setList(null);\n // The list's own row unmounts with the popover, so the day's cell anchors it.\n onEventClick?.(event, list.anchor);\n }}\n renderEvent={renderEvent}\n eventClassName={eventClassName}\n classNames={classNames}\n slotStyles={slotStyles}\n />\n {onSlotCreate && (\n <Button\n className={styles.monthViewListCreate}\n onClick={() => {\n setList(null);\n onSlotCreate(allDaySlot(list.day), list.anchor);\n }}\n >\n {text.newEvent}\n </Button>\n )}\n </div>\n )\n }\n />\n </div>\n );\n}\n\nexport default MonthView;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";var e=`monthView_COWAp`,t=`monthView-grid_MG0UZ`,n=`monthView-weekdays_BHTuU`,r=`monthView-weekday_ycA-L`,i=`monthView-viewport_LpCe1`,a=`monthView-pane_bHUbv`,o=`monthView-week_gnh6Y`,s=`monthView-cell_ypx-s`,c=`monthView-cell-outside_1Mr0V`,l=`monthView-cell-creatable_BxZde`,u=`monthView-cell-target_-oYgU`,d=`monthView-dayNumber_voxGS`,f=`monthView-dayNumber-today_G7coa`,p=`monthView-dayNumber-link_5k317`,m=`monthView-bars_DW4bv`,h=`monthView-bar_9zcHJ`,g=`monthView-bar-filled_Mq2Ca`,_=`monthView-bar-timed_C8Xwi`,v=`monthView-bar-continuesBefore_DBSlE`,y=`monthView-bar-continuesAfter_cEvZo`,b=`monthView-bar-interactive_FGu9C`,x=`monthView-bar-dragging_sxndr`,S=`monthView-bar-title_-X5yZ`,C=`monthView-dot_81QmI`,w=`monthView-time_W-u-E`,T=`monthView-more_m2PXd`,E=`monthView-list_4pG-Y`,D=`monthView-list-title_oM-3e`,O=`monthView-list-events_RsMQ6`,k=`monthView-list-create_e7EdY`,A={monthView:e,"monthView-grid":`monthView-grid_MG0UZ`,monthViewGrid:t,"monthView-weekdays":`monthView-weekdays_BHTuU`,monthViewWeekdays:n,"monthView-weekday":`monthView-weekday_ycA-L`,monthViewWeekday:r,"monthView-viewport":`monthView-viewport_LpCe1`,monthViewViewport:i,"monthView-pane":`monthView-pane_bHUbv`,monthViewPane:a,"monthView-week":`monthView-week_gnh6Y`,monthViewWeek:o,"monthView-cell":`monthView-cell_ypx-s`,monthViewCell:s,"monthView-cell-outside":`monthView-cell-outside_1Mr0V`,monthViewCellOutside:c,"monthView-cell-creatable":`monthView-cell-creatable_BxZde`,monthViewCellCreatable:l,"monthView-cell-target":`monthView-cell-target_-oYgU`,monthViewCellTarget:u,"monthView-dayNumber":`monthView-dayNumber_voxGS`,monthViewDayNumber:d,"monthView-dayNumber-today":`monthView-dayNumber-today_G7coa`,monthViewDayNumberToday:f,"monthView-dayNumber-link":`monthView-dayNumber-link_5k317`,monthViewDayNumberLink:p,"monthView-bars":`monthView-bars_DW4bv`,monthViewBars:m,"monthView-bar":`monthView-bar_9zcHJ`,monthViewBar:h,"monthView-bar-filled":`monthView-bar-filled_Mq2Ca`,monthViewBarFilled:g,"monthView-bar-timed":`monthView-bar-timed_C8Xwi`,monthViewBarTimed:_,"monthView-bar-continuesBefore":`monthView-bar-continuesBefore_DBSlE`,monthViewBarContinuesBefore:v,"monthView-bar-continuesAfter":`monthView-bar-continuesAfter_cEvZo`,monthViewBarContinuesAfter:y,"monthView-bar-interactive":`monthView-bar-interactive_FGu9C`,monthViewBarInteractive:b,"monthView-bar-dragging":`monthView-bar-dragging_sxndr`,monthViewBarDragging:x,"monthView-bar-title":`monthView-bar-title_-X5yZ`,monthViewBarTitle:S,"monthView-dot":`monthView-dot_81QmI`,monthViewDot:C,"monthView-time":`monthView-time_W-u-E`,monthViewTime:w,"monthView-more":`monthView-more_m2PXd`,monthViewMore:T,"monthView-list":`monthView-list_4pG-Y`,monthViewList:E,"monthView-list-title":`monthView-list-title_oM-3e`,monthViewListTitle:D,"monthView-list-events":`monthView-list-events_RsMQ6`,monthViewListEvents:O,"monthView-list-create":`monthView-list-create_e7EdY`,monthViewListCreate:k};export{A as default,e as monthView,h as monthViewBar,y as monthViewBarContinuesAfter,v as monthViewBarContinuesBefore,x as monthViewBarDragging,g as monthViewBarFilled,b as monthViewBarInteractive,_ as monthViewBarTimed,S as monthViewBarTitle,m as monthViewBars,s as monthViewCell,l as monthViewCellCreatable,c as monthViewCellOutside,u as monthViewCellTarget,d as monthViewDayNumber,p as monthViewDayNumberLink,f as monthViewDayNumberToday,C as monthViewDot,t as monthViewGrid,E as monthViewList,k as monthViewListCreate,O as monthViewListEvents,D as monthViewListTitle,T as monthViewMore,a as monthViewPane,w as monthViewTime,i as monthViewViewport,o as monthViewWeek,r as monthViewWeekday,n as monthViewWeekdays};
1
+ "use client";var e=`monthView_COWAp`,t=`monthView-grid_MG0UZ`,n=`monthView-weekdays_BHTuU`,r=`monthView-weekday_ycA-L`,i=`monthView-viewport_LpCe1`,a=`monthView-pane_bHUbv`,o=`monthView-week_gnh6Y`,s=`monthView-cell_ypx-s`,c=`monthView-cell-outside_1Mr0V`,l=`monthView-cell-creatable_BxZde`,u=`monthView-cell-target_-oYgU`,d=`monthView-dayNumber_voxGS`,f=`monthView-dayNumber-today_G7coa`,p=`monthView-dayNumber-link_5k317`,m=`monthView-weekNumber_UE8T-`,h=`monthView-bars_DW4bv`,g=`monthView-bar_9zcHJ`,_=`monthView-bar-filled_Mq2Ca`,v=`monthView-bar-timed_C8Xwi`,y=`monthView-bar-continuesBefore_DBSlE`,b=`monthView-bar-continuesAfter_cEvZo`,x=`monthView-bar-interactive_FGu9C`,S=`monthView-bar-dragging_sxndr`,C=`monthView-bar-title_-X5yZ`,w=`monthView-dot_81QmI`,T=`monthView-time_W-u-E`,E=`monthView-more_m2PXd`,D=`monthView-list_4pG-Y`,O=`monthView-list-title_oM-3e`,k=`monthView-list-events_RsMQ6`,A=`monthView-list-create_e7EdY`,j={monthView:e,"monthView-grid":`monthView-grid_MG0UZ`,monthViewGrid:t,"monthView-weekdays":`monthView-weekdays_BHTuU`,monthViewWeekdays:n,"monthView-weekday":`monthView-weekday_ycA-L`,monthViewWeekday:r,"monthView-viewport":`monthView-viewport_LpCe1`,monthViewViewport:i,"monthView-pane":`monthView-pane_bHUbv`,monthViewPane:a,"monthView-week":`monthView-week_gnh6Y`,monthViewWeek:o,"monthView-cell":`monthView-cell_ypx-s`,monthViewCell:s,"monthView-cell-outside":`monthView-cell-outside_1Mr0V`,monthViewCellOutside:c,"monthView-cell-creatable":`monthView-cell-creatable_BxZde`,monthViewCellCreatable:l,"monthView-cell-target":`monthView-cell-target_-oYgU`,monthViewCellTarget:u,"monthView-dayNumber":`monthView-dayNumber_voxGS`,monthViewDayNumber:d,"monthView-dayNumber-today":`monthView-dayNumber-today_G7coa`,monthViewDayNumberToday:f,"monthView-dayNumber-link":`monthView-dayNumber-link_5k317`,monthViewDayNumberLink:p,"monthView-weekNumber":`monthView-weekNumber_UE8T-`,monthViewWeekNumber:m,"monthView-bars":`monthView-bars_DW4bv`,monthViewBars:h,"monthView-bar":`monthView-bar_9zcHJ`,monthViewBar:g,"monthView-bar-filled":`monthView-bar-filled_Mq2Ca`,monthViewBarFilled:_,"monthView-bar-timed":`monthView-bar-timed_C8Xwi`,monthViewBarTimed:v,"monthView-bar-continuesBefore":`monthView-bar-continuesBefore_DBSlE`,monthViewBarContinuesBefore:y,"monthView-bar-continuesAfter":`monthView-bar-continuesAfter_cEvZo`,monthViewBarContinuesAfter:b,"monthView-bar-interactive":`monthView-bar-interactive_FGu9C`,monthViewBarInteractive:x,"monthView-bar-dragging":`monthView-bar-dragging_sxndr`,monthViewBarDragging:S,"monthView-bar-title":`monthView-bar-title_-X5yZ`,monthViewBarTitle:C,"monthView-dot":`monthView-dot_81QmI`,monthViewDot:w,"monthView-time":`monthView-time_W-u-E`,monthViewTime:T,"monthView-more":`monthView-more_m2PXd`,monthViewMore:E,"monthView-list":`monthView-list_4pG-Y`,monthViewList:D,"monthView-list-title":`monthView-list-title_oM-3e`,monthViewListTitle:O,"monthView-list-events":`monthView-list-events_RsMQ6`,monthViewListEvents:k,"monthView-list-create":`monthView-list-create_e7EdY`,monthViewListCreate:A};export{j as default,e as monthView,g as monthViewBar,b as monthViewBarContinuesAfter,y as monthViewBarContinuesBefore,S as monthViewBarDragging,_ as monthViewBarFilled,x as monthViewBarInteractive,v as monthViewBarTimed,C as monthViewBarTitle,h as monthViewBars,s as monthViewCell,l as monthViewCellCreatable,c as monthViewCellOutside,u as monthViewCellTarget,d as monthViewDayNumber,p as monthViewDayNumberLink,f as monthViewDayNumberToday,w as monthViewDot,t as monthViewGrid,D as monthViewList,A as monthViewListCreate,k as monthViewListEvents,O as monthViewListTitle,E as monthViewMore,a as monthViewPane,T as monthViewTime,i as monthViewViewport,o as monthViewWeek,m as monthViewWeekNumber,r as monthViewWeekday,n as monthViewWeekdays};
2
2
  //# sourceMappingURL=monthView.module.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"monthView.module.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/monthView/monthView.module.pcss"],"sourcesContent":[".monthView {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n user-select: none;\n -webkit-touch-callout: none;\n\n /* Horizontal swipes page the month; vertical ones still scroll the page. */\n touch-action: pan-y;\n\n &-grid {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n }\n\n &-weekdays {\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n border-bottom: 1px solid var(--border-color);\n }\n\n &-weekday {\n padding: 0.5em 0.625em;\n overflow: hidden;\n font-size: 0.6875em;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-overflow: ellipsis;\n text-transform: uppercase;\n white-space: nowrap;\n color: var(--text-dark);\n }\n\n &-viewport {\n flex: 1;\n min-height: 0;\n }\n\n /* Six equal rows whatever the month, so every pane has the same height while swiping and a\n row never grows to fit its events: that is what the `+N` buttons are for. */\n &-pane {\n display: grid;\n grid-template-rows: repeat(6, minmax(0, 1fr));\n background: var(--background);\n }\n\n &-week {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n min-height: 0;\n\n & + & {\n border-top: 1px solid var(--border-color);\n }\n }\n\n &-cell {\n min-width: 0;\n padding: 0.25em;\n outline: none;\n\n & + & {\n border-left: 1px solid var(--border-color);\n }\n\n &:focus-visible {\n box-shadow: inset 0 0 0 2px var(--focus-border-color, var(--primary-color));\n }\n\n &-outside {\n background: color-mix(in oklab, var(--background-accent) 40%, transparent);\n color: var(--text-light);\n }\n\n &-creatable {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: color-mix(in oklab, var(--primary-color) 5%, transparent);\n }\n }\n\n &-target {\n background: color-mix(in oklab, var(--primary-color) 14%, transparent);\n }\n }\n\n &-dayNumber {\n display: inline-grid;\n place-items: center;\n min-width: 1.75em;\n height: 1.75em;\n padding: 0 0.25em;\n border-radius: 0.875em;\n font-size: 0.8125em;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n transition: background-color 0.15s ease;\n\n &-today {\n background: var(--custom-calendar-today-color);\n color: var(--text-on-primary);\n font-weight: 700;\n }\n\n &-link {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:not(.monthView-dayNumber-today):hover {\n background: var(--background-accent);\n }\n }\n }\n\n /* Laid over the week's cells and starting below the day numbers. Its `grid-auto-rows`,\n `row-gap` and `padding-top` are read back to work out how many lanes fit, so change them\n here rather than overriding them on a bar. */\n &-bars {\n position: absolute;\n inset: 0;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n grid-auto-rows: 1.375em;\n row-gap: 2px;\n align-content: start;\n padding-top: 1.75em;\n overflow: hidden;\n pointer-events: none;\n }\n\n &-bar {\n --event: var(--event-color, var(--primary-color));\n\n display: flex;\n align-items: center;\n gap: 0.3em;\n min-width: 0;\n margin: 0 0.25em;\n padding: 0 0.4em;\n overflow: hidden;\n border-radius: var(--custom-calendar-event-radius);\n font-size: 0.75em;\n white-space: nowrap;\n pointer-events: auto;\n transition:\n background-color 0.15s ease,\n opacity 0.15s ease;\n\n &-filled {\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n box-shadow: inset 3px 0 0 var(--event);\n font-weight: 500;\n\n &:hover {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n }\n }\n\n &-timed:hover {\n background: color-mix(in oklab, var(--event) 12%, transparent);\n }\n\n &-continuesBefore {\n margin-left: 0;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-shadow: none;\n }\n\n &-continuesAfter {\n margin-right: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-interactive {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n\n &-dragging {\n opacity: 0.45;\n }\n\n &-title {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n &-dot {\n flex: none;\n width: 0.5em;\n height: 0.5em;\n border-radius: 50%;\n background: var(--event);\n }\n\n &-time {\n flex: none;\n font-variant-numeric: tabular-nums;\n color: var(--text-dark);\n }\n\n &-more {\n align-self: center;\n margin: 0 0.25em;\n padding: 0 0.4em;\n border-radius: var(--custom-calendar-event-radius);\n font-size: 0.75em;\n font-weight: 600;\n white-space: nowrap;\n color: var(--text-dark);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n pointer-events: auto;\n\n &:hover {\n background: var(--background-accent-light);\n }\n }\n\n &-list {\n display: flex;\n flex-direction: column;\n gap: 0.25em;\n width: 18em;\n max-width: 100%;\n\n &-title {\n padding: 0.25em 0.625em;\n font-size: 0.8125em;\n font-weight: 600;\n color: var(--text-dark);\n }\n\n /* Scrolls inside the popover rather than growing it past the screen. */\n &-events {\n max-height: 18em;\n }\n\n &-create {\n align-self: flex-start;\n margin: 0.25em 0.625em 0.125em;\n }\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"monthView.module.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/monthView/monthView.module.pcss"],"sourcesContent":[".monthView {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n user-select: none;\n -webkit-touch-callout: none;\n\n /* Horizontal swipes page the month; vertical ones still scroll the page. */\n touch-action: pan-y;\n\n &-grid {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n }\n\n &-weekdays {\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n border-bottom: 1px solid var(--border-color);\n }\n\n &-weekday {\n padding: 0.5em 0.625em;\n overflow: hidden;\n font-size: 0.6875em;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-overflow: ellipsis;\n text-transform: uppercase;\n white-space: nowrap;\n color: var(--text-dark);\n }\n\n &-viewport {\n flex: 1;\n min-height: 0;\n }\n\n /* Six equal rows whatever the month, so every pane has the same height while swiping and a\n row never grows to fit its events: that is what the `+N` buttons are for. */\n &-pane {\n display: grid;\n grid-template-rows: repeat(6, minmax(0, 1fr));\n background: var(--background);\n }\n\n &-week {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n min-height: 0;\n\n & + & {\n border-top: 1px solid var(--border-color);\n }\n }\n\n &-cell {\n position: relative;\n min-width: 0;\n padding: 0.25em;\n outline: none;\n\n & + & {\n border-left: 1px solid var(--border-color);\n }\n\n &:focus-visible {\n box-shadow: inset 0 0 0 2px var(--focus-border-color, var(--primary-color));\n }\n\n &-outside {\n background: color-mix(in oklab, var(--background-accent) 40%, transparent);\n color: var(--text-light);\n }\n\n &-creatable {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: color-mix(in oklab, var(--primary-color) 5%, transparent);\n }\n }\n\n &-target {\n background: color-mix(in oklab, var(--primary-color) 14%, transparent);\n }\n }\n\n &-dayNumber {\n display: inline-grid;\n place-items: center;\n min-width: 1.75em;\n height: 1.75em;\n padding: 0 0.25em;\n border-radius: 0.875em;\n font-size: 0.8125em;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n transition: background-color 0.15s ease;\n\n &-today {\n background: var(--custom-calendar-today-color);\n color: var(--text-on-primary);\n font-weight: 700;\n }\n\n &-link {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:not(.monthView-dayNumber-today):hover {\n background: var(--background-accent);\n }\n }\n }\n\n /* Top right of the row's first cell, in the band above the bars and level with the day number:\n the cell's 0.25em padding and the number's 1.75em at 0.8125em, in this label's 0.6875em. */\n &-weekNumber {\n position: absolute;\n top: calc(0.25em / 0.6875);\n right: 0.5em;\n\n /* Clear of the day number, in a narrow cell or a long translation. */\n max-width: calc(100% - 3.5em);\n overflow: hidden;\n font-size: 0.6875em;\n font-weight: 600;\n line-height: calc(1.75em * 0.8125 / 0.6875);\n white-space: nowrap;\n text-overflow: ellipsis;\n color: var(--text-light);\n }\n\n /* Laid over the week's cells and starting below the day numbers. Its `grid-auto-rows`,\n `row-gap` and `padding-top` are read back to work out how many lanes fit, so change them\n here rather than overriding them on a bar. */\n &-bars {\n position: absolute;\n inset: 0;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n grid-auto-rows: 1.375em;\n row-gap: 2px;\n align-content: start;\n padding-top: 1.75em;\n overflow: hidden;\n pointer-events: none;\n }\n\n &-bar {\n --event: var(--event-color, var(--primary-color));\n\n display: flex;\n align-items: center;\n gap: 0.3em;\n min-width: 0;\n margin: 0 0.25em;\n padding: 0 0.4em;\n overflow: hidden;\n border-radius: var(--custom-calendar-event-radius);\n font-size: 0.75em;\n white-space: nowrap;\n pointer-events: auto;\n transition:\n background-color 0.15s ease,\n opacity 0.15s ease;\n\n &-filled {\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n box-shadow: inset 3px 0 0 var(--event);\n font-weight: 500;\n\n &:hover {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n }\n }\n\n &-timed:hover {\n background: color-mix(in oklab, var(--event) 12%, transparent);\n }\n\n &-continuesBefore {\n margin-left: 0;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-shadow: none;\n }\n\n &-continuesAfter {\n margin-right: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-interactive {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n\n &-dragging {\n opacity: 0.45;\n }\n\n &-title {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n &-dot {\n flex: none;\n width: 0.5em;\n height: 0.5em;\n border-radius: 50%;\n background: var(--event);\n }\n\n &-time {\n flex: none;\n font-variant-numeric: tabular-nums;\n color: var(--text-dark);\n }\n\n &-more {\n align-self: center;\n margin: 0 0.25em;\n padding: 0 0.4em;\n border-radius: var(--custom-calendar-event-radius);\n font-size: 0.75em;\n font-weight: 600;\n white-space: nowrap;\n color: var(--text-dark);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n pointer-events: auto;\n\n &:hover {\n background: var(--background-accent-light);\n }\n }\n\n &-list {\n display: flex;\n flex-direction: column;\n gap: 0.25em;\n width: 18em;\n max-width: 100%;\n\n &-title {\n padding: 0.25em 0.625em;\n font-size: 0.8125em;\n font-weight: 600;\n color: var(--text-dark);\n }\n\n /* Scrolls inside the popover rather than growing it past the screen. */\n &-events {\n max-height: 18em;\n }\n\n &-create {\n align-self: flex-start;\n margin: 0.25em 0.625em 0.125em;\n }\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- "use client";import{renderIcon as e}from"../../../utils/renderIcon.mjs";import{dateToDay as t}from"../../../utils/day.mjs";import{CalendarView as n}from"../../calendar.types.mjs";import{MINUTES_PER_DAY as r,addDays as i,atMinutes as a,dayDiff as o,endAfter as s,isSameDay as c,minutesOfDay as l,periodRange as u,shownDays as d,stepDate as ee}from"../../dates.mjs";import{formatClockRange as te,formatDayNumber as ne,formatHour as re,formatLongDate as ie,formatTimeRange as ae,formatWeekday as oe}from"../../format.mjs";import{eventEnd as f,isAllDayLike as se,limitLanes as ce,packDay as le,packLanes as ue}from"../../layout.mjs";import{clamp as p,pageStep as de,snap as fe}from"../../gesture.mjs";import{useGestures as pe}from"../../useGestures.mjs";import{usePager as me}from"../../usePager.mjs";import m from"../../pager.module.mjs";import h from"./timeGrid.module.mjs";import{useEffect as he,useLayoutEffect as ge,useRef as g,useState as _}from"react";import v from"classnames";import{faChevronDown as _e}from"@fortawesome/free-solid-svg-icons";import{Fragment as ve,jsx as y,jsxs as b}from"react/jsx-runtime";var ye=[-1,0,1],be=Array.from({length:23},(e,t)=>t+1),xe=3,Se=45,Ce=7,x=4;function we(){let[e,t]=_(()=>new Date);return he(()=>{let e;function n(){e=setTimeout(()=>{t(new Date),n()},6e4-Date.now()%6e4)}return n(),()=>clearTimeout(e)},[]),e}function Te({scroller:e,head:t,body:n},r,i,a,o){let s=r.current?.base??n.getBoundingClientRect().height/24;if(!s)return;let c=Math.max((e.clientHeight-t.offsetHeight)/24,1),l=p(i,Math.min(c,s),s*x);r.current={hour:l,base:s},e.style.setProperty(`--custom-calendar-hour-height`,`${l}px`);let u=e.getBoundingClientRect().top;e.scrollTop=n.offsetTop+a*l-(o-u)}function S({events:x,date:S,view:C,locale:w,weekStartsOn:Ee,slotMinutes:T,hidden:E,scrollToHour:De,text:D,onDateChange:Oe,onOpenDay:O,onEventClick:k,onEventChange:A,onSlotCreate:j,renderEvent:M,classNames:N,slotStyles:P,zoomRef:F}){let I=g(null),L=g(null),R=g(null),z=g(null),B=g(null),ke=g(null),V=g(x),H=g(null),[U,Ae]=_(null),[W,je]=_(!1),G=we(),K=C===n.Day?1:7,q=u(C,S,Ee).start,J=d(q,K,E),Me=U?V.current:x,Y=me(t(q),e=>Oe(ee(C,S,e,E)),()=>I.current);function X(){let e=I.current,t=L.current,n=R.current;return e&&t&&n?{scroller:e,head:t,body:n}:null}ge(()=>{let e=I.current,t=R.current;if(!e||!t)return;let n=t.offsetHeight/24;if(!n)return;let r=new Date,i=J.some(e=>c(e,r)),a=De??(i?Math.max(0,l(r)/60-1):Ce);e.scrollTop=p(a,0,24)*n},[]),he(()=>{let e=I.current;if(!e)return;function t(e){if(!e.ctrlKey)return;let t=X();if(!t)return;e.preventDefault();let n=t.body.getBoundingClientRect(),r=n.height/24;r&&Te(t,F,r*Math.exp(-e.deltaY*.01),(e.clientY-n.top)/r,e.clientY)}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[F]);function Ne(e){let t=z.current;if(!t)return null;let n=t.getBoundingClientRect();if(!n.width||!n.height)return null;let i=p(Math.floor((e.x-n.left)/n.width*J.length),0,J.length-1);return{day:o(q,J[i]),minutes:p((e.y-n.top)/n.height*r,0,r)}}function Pe(e){return o(q,e)*r+l(e)}function Z(e,t){let n=Ne(t);if(!n)return null;let o=K*r;if(e.kind===`create`){let t=Math.floor(e.anchor/T)*T,[o,c]=n.minutes>=t?[t,Math.max(Math.ceil(n.minutes/T)*T,t+T)]:[Math.floor(n.minutes/T)*T,t+T],l=i(q,e.day),u=a(l,o);return{start:u,end:s(u,a(l,Math.min(c,r)),c-o)}}let c=n.day*r+n.minutes,l=Pe(e.event.start);if(e.kind===`move`){let t=p(fe(c-e.grab,T),Math.min(l,0),o-T),n=a(q,t),r=f(e.event).getTime()-e.event.start.getTime();return{start:n,end:new Date(n.getTime()+r)}}let u=p(fe(c,T),l+T,Math.max(o,l+T)),d=e.event.start;return{start:d,end:s(d,a(q,u),u-l)}}function Q(e){B.current=e,Ae(e)}function Fe(e){return x.find(t=>String(t.id)===e.dataset.calEvent)}pe(I,{onPress:Y.finish,canSwipe:()=>!0,onSwipeMove:Y.move,onSwipeEnd:(e,t)=>Y.settle(de(e,Y.width(),t)),dragFrom:(e,t)=>{if(!z.current?.contains(e))return null;let n=Ne(t);if(!n)return null;let a=e.closest(`[data-cal-event]`);if(a){let t=A?Fe(a):void 0;if(!t||t.readOnly)return null;let i={start:t.start,end:f(t)};return e.closest(`[data-cal-resize]`)?{kind:`resize`,event:t,...i}:{kind:`move`,event:t,grab:n.day*r+n.minutes-Pe(t.start),...i}}if(!j)return null;let o=i(q,n.day);return{kind:`create`,day:n.day,anchor:n.minutes,start:o,end:o}},onDragStart:(e,t)=>{V.current=x,Q({...e,...Z(e,t)})},onDragMove:e=>{let t=B.current,n=t&&Z(t,e);t&&n&&(n.start.getTime()!==t.start.getTime()||n.end.getTime()!==t.end.getTime())&&Q({...t,...n})},onDragEnd:e=>{let t=B.current;if(Q(null),!t)return;let{start:n,end:r}=Z(t,e)??t;if(t.kind===`create`){j?.({start:n,end:r,allDay:!1},Le(t.day,n,r));return}(n.getTime()!==t.event.start.getTime()||r.getTime()!==f(t.event).getTime())&&A?.({event:t.event,start:n,end:r})},onDragCancel:()=>Q(null),onPinchStart:(e,t)=>{let n=R.current;if(!n)return;let r=n.getBoundingClientRect(),i=r.height/24;i&&(H.current={hour:i,anchorHour:(e.y-r.top)/i,distance:t})},onPinchMove:(e,t)=>{let n=H.current,r=X();n&&r&&n.distance&&Te(r,F,n.hour*t/n.distance,n.anchorHour,e.y)},onPinchEnd:()=>{H.current=null},autoScroll:()=>{let e=I.current,t=L.current;if(!e||!t)return null;let n=e.getBoundingClientRect();return{element:e,top:n.top+t.offsetHeight,bottom:n.bottom}}});function Ie(e,t){if(!j||e.target.closest(`[data-cal-event]`))return;let n=e.currentTarget.getBoundingClientRect();if(!n.height)return;let i=(e.clientY-n.top)/n.height*r,s=p(Math.floor(i/T)*T,0,r-T),c=a(t,s),l=new Date(c.getTime()+Math.max(60,T)*6e4),u=a(t,r),d={start:c,end:l<u?l:u,allDay:!1};j(d,Le(o(q,t),d.start,d.end))}function Le(e,t,n){let a=ke.current;if(!a)return I.current;let s=i(q,e+1),c=l(t),u=n>=s?r:l(n),d=Math.max(J.findIndex(t=>o(q,t)===e),0);return a.style.left=`${d/J.length*100}%`,a.style.width=`${100/J.length}%`,a.style.top=`${c/r*100}%`,a.style.height=`${Math.max(u-c,0)/r*100}%`,a}function Re(e){let{event:t}=e;return y(`button`,{type:`button`,"data-cal-event":String(t.id),className:v(h.timeGridBar,e.continuesBefore&&h.timeGridBarContinuesBefore,e.continuesAfter&&h.timeGridBarContinuesAfter,N?.event),style:{"--event-color":t.color,gridColumn:`${e.start+1} / span ${e.span}`,gridRow:e.lane+1,...P?.event},"aria-label":`${t.title}, ${D.allDay}`,onClick:e=>k?.(t,e.currentTarget),children:y(`span`,{className:h.timeGridBarTitle,"aria-hidden":!0,children:M?M(t,{singleLine:!0}):t.title})},t.id)}function ze(e){let{event:t}=e,n=e.bottom-e.top,i=n<Se,a=ae(t.start,f(t),w),o=!!A&&!t.readOnly&&!e.continuesAfter,s=U&&U.kind!==`create`&&U.event===t;return b(`button`,{type:`button`,"data-cal-event":String(t.id),"aria-label":`${t.title}, ${a}`,className:v(h.timeGridEvent,i&&h.timeGridEventShort,n<15&&h.timeGridEventBrief,e.continuesBefore&&h.timeGridEventContinuesBefore,e.continuesAfter&&h.timeGridEventContinuesAfter,(k||o)&&h.timeGridEventInteractive,s&&h.timeGridEventDragged,N?.event),style:{"--event-color":t.color,top:`${e.top/r*100}%`,"--span":`${n/r*100}%`,left:`calc(var(--column-width) * ${e.column/e.columns})`,width:`calc(var(--column-width) * ${e.span/e.columns})`,...P?.event},onClick:e=>k?.(t,e.currentTarget),children:[y(`span`,{className:h.timeGridEventTitle,"aria-hidden":!0,children:M?M(t,{singleLine:i}):t.title}),y(`span`,{className:h.timeGridEventTime,"aria-hidden":!0,children:te(t.start,f(t),w)}),o&&y(`span`,{"data-cal-resize":!0,className:h.timeGridResize,"aria-hidden":!0})]},t.id)}function Be(e){if(!U)return null;let t=e,n=i(e,1);if(U.end<=t&&U.start<t||U.start>=n)return null;let a=U.start<t?0:l(U.start),o=U.end>=n?r:l(U.end),s=U.kind===`create`?void 0:U.event.color,c=U.kind===`create`?null:U.event.title;return b(`div`,{className:h.timeGridPreview,style:{"--event-color":s,top:`${a/r*100}%`,height:`${Math.max(o-a,15)/r*100}%`},"aria-hidden":!0,children:[c&&y(`span`,{className:h.timeGridEventTitle,children:c}),y(`span`,{className:h.timeGridPreviewTime,children:te(U.start,U.end,w)})]})}let $=ye.map(e=>{let t=u(C,ee(C,S,e,E),Ee).start,n=d(t,K,E),r=ue(Me,n,se);return{step:e,start:t,dates:n,lanes:W?{visible:r,moreLane:0,hidden:n.map(()=>0)}:ce(r,n.length,xe)}}),Ve=$[1].lanes.hidden.some(e=>e>0),He=e=>v(m.pagerPane,e===-1&&m.pagerPanePrev,e===1&&m.pagerPaneNext);return b(`div`,{ref:I,tabIndex:-1,className:h.timeGrid,style:{"--days":J.length,"--custom-calendar-hour-height":F.current?`${F.current.hour}px`:void 0},children:[b(`div`,{ref:L,className:h.timeGridHead,children:[y(`div`,{className:h.timeGridCorner,children:(Ve||W)&&y(`button`,{type:`button`,className:v(h.timeGridToggle,W&&h.timeGridToggleOpen),"aria-label":D.allDay,"aria-expanded":W,onClick:()=>je(e=>!e),children:e(_e)})}),y(`div`,{className:m.pagerViewport,children:y(`div`,{ref:Y.trackRef,className:m.pagerTrack,children:$.map(({step:e,start:n,dates:r,lanes:i})=>b(`div`,{className:v(He(e),h.timeGridHeadPane),inert:e!==0,"aria-hidden":e!==0||void 0,children:[r.map(e=>{let n=c(e,G),r=b(ve,{children:[y(`span`,{className:h.timeGridWeekday,children:oe(e,w,`short`)}),y(`span`,{className:v(h.timeGridDayNumber,n&&h.timeGridDayNumberToday),children:ne(e,w)})]}),i={className:v(h.timeGridDayHeader,N?.dayHeader),style:P?.dayHeader,"aria-current":n?`date`:void 0};return K>1&&O?y(`button`,{type:`button`,...i,className:v(i.className,h.timeGridDayHeaderLink),"aria-label":ie(e,w),onClick:()=>O(e),children:r},t(e)):y(`div`,{...i,children:r},t(e))}),b(`div`,{className:h.timeGridAllDay,"aria-label":D.allDay,role:`group`,children:[i.visible.map(Re),i.hidden.map((e,t)=>e>0&&y(`div`,{"aria-hidden":!0,className:h.timeGridMore,style:{gridColumn:t+1,gridRow:i.moreLane+1},onClick:()=>je(!0),children:D.more(e)},`more-${t}`))]})]},t(n)))})})]}),b(`div`,{ref:R,className:h.timeGridBody,children:[y(`div`,{className:h.timeGridGutter,"aria-hidden":!0,children:be.map(e=>y(`span`,{className:h.timeGridHour,style:{top:`${e/24*100}%`},children:re(e,w)},e))}),y(`div`,{className:m.pagerViewport,children:y(`div`,{ref:Y.trackRef,className:m.pagerTrack,children:$.map(({step:e,start:n,dates:r})=>b(`div`,{ref:e===0?z:void 0,className:v(He(e),h.timeGridBodyPane),inert:e!==0,"aria-hidden":e!==0||void 0,children:[r.map(n=>{let r=c(n,G);return b(`div`,{role:`group`,"aria-label":ie(n,w),"data-cal-column":t(n),className:v(h.timeGridColumn,r&&h.timeGridColumnToday,j&&h.timeGridColumnCreatable,N?.cell),style:P?.cell,onClick:e=>Ie(e,n),children:[le(Me,n).map(ze),r&&y(`div`,{className:h.timeGridNow,style:{top:`${l(G)/1440*100}%`},"aria-hidden":!0}),e===0&&Be(n)]},t(n))}),e===0&&y(`div`,{ref:ke,className:h.timeGridSlot,"aria-hidden":!0})]},t(n)))})})]})]})}export{S as default};
1
+ "use client";import{cssColor as e}from"../../../styles/tone.mjs";import t from"../../../actionIcon/actionIcon.mjs";import{isDismissClick as n}from"../../../utils/dismissClick.mjs";import{dateToDay as r}from"../../../utils/day.mjs";import{MINUTES_PER_DAY as i,addDays as a,allDaySlot as o,atMinutes as s,dayDiff as c,endAfter as l,isSameDay as u,minutesOfDay as d,periodRange as f,shownDays as ee,stepDate as te,weekNumber as ne}from"../../dates.mjs";import{formatClockRange as re,formatDayNumber as ie,formatHour as ae,formatLongDate as oe,formatTimeRange as se,formatWeekday as ce}from"../../format.mjs";import{useNow as le}from"../../useNow.mjs";import{eventEnd as p,isAllDayLike as ue,limitLanes as de,moveByDays as fe,packDay as pe,packLanes as me}from"../../layout.mjs";import{clamp as m,pageStep as he,snap as ge}from"../../gesture.mjs";import{useGestures as _e}from"../../useGestures.mjs";import{usePager as ve}from"../../usePager.mjs";import h from"../../pager.module.mjs";import g from"./timeGrid.module.mjs";import{useEffect as ye,useLayoutEffect as be,useRef as _,useState as xe}from"react";import v from"classnames";import{faChevronDown as Se}from"@fortawesome/free-solid-svg-icons";import{Fragment as Ce,jsx as y,jsxs as b}from"react/jsx-runtime";var we=[-1,0,1],Te=Array.from({length:23},(e,t)=>t+1),Ee=3,De=45,Oe=7,x=4;function ke({scroller:e,head:t,body:n},r,i,a,o){let s=r.current?.base??n.getBoundingClientRect().height/24;if(!s)return;let c=Math.max((e.clientHeight-t.offsetHeight)/24,1),l=m(i,Math.min(c,s),s*x);r.current={hour:l,base:s},e.style.setProperty(`--custom-calendar-hour-height`,`${l}px`);let u=e.getBoundingClientRect().top;e.scrollTop=n.offsetTop+a*l-(o-u)}function S({events:x,date:S,period:C,locale:w,weekStartsOn:Ae,slotMinutes:T,hidden:E,scrollToHour:je,workingHours:Me,showWeekNumbers:Ne,text:D,onDateChange:Pe,onOpenDay:Fe,onEventClick:O,onEventChange:k,onSlotCreate:A,renderEvent:j,eventClassName:Ie,classNames:M,slotStyles:N,zoomRef:P}){let F=_(null),I=_(null),L=_(null),R=_(null),z=_(null),B=_(null),Le=_(null),Re=_(x),V=_(null),[H,ze]=xe(null),[U,Be]=xe(!1),W=le(),G=f(C,S,Ae,E),K=G.start,Ve=c(G.start,G.end),q=ee(K,Ve,E),He=H?Re.current:x,J=ve(r(K),e=>Pe(te(C,S,e,E)),()=>F.current);function Ue(){let e=F.current,t=I.current,n=L.current;return e&&t&&n?{scroller:e,head:t,body:n}:null}be(()=>{let e=F.current,t=L.current;if(!e||!t)return;let n=t.offsetHeight/24;if(!n)return;let r=q.some(e=>u(e,W)),i=je??(r?Math.max(0,d(W)/60-1):Me?.[0]??Oe);e.scrollTop=m(i,0,24)*n},[]),ye(()=>{let e=F.current;if(!e)return;function t(e){if(!e.ctrlKey)return;let t=Ue();if(!t)return;e.preventDefault();let n=t.body.getBoundingClientRect(),r=n.height/24;r&&ke(t,P,r*Math.exp(-e.deltaY*.01),(e.clientY-n.top)/r,e.clientY)}return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[P]);function Y(e,t){let n=m(Math.floor((e-t.left)/t.width*q.length),0,q.length-1);return c(K,q[n])}function We(e){let t=R.current;if(!t)return null;let n=t.getBoundingClientRect();return!n.width||!n.height?null:{day:Y(e.x,n),minutes:m((e.y-n.top)/n.height*i,0,i)}}function Ge(e){let t=z.current?.getBoundingClientRect();return t?.width?Y(e.x,t):null}function Ke({event:e,grabbed:t},n){if(e)return fe(e,n-t);let{start:r,end:i}=o(a(K,t),a(K,n));return{start:r,end:i}}function qe(e){return c(K,e)*i+d(e)}function X(e,t){if(e.kind===`allDay`){let n=Ge(t);return n===null?null:Ke(e,n)}let n=We(t);if(!n)return null;let r=Ve*i;if(e.kind===`create`){let t=Math.floor(e.anchor/T)*T,[r,o]=n.minutes>=t?[t,Math.max(Math.ceil(n.minutes/T)*T,t+T)]:[Math.floor(n.minutes/T)*T,t+T],c=a(K,e.day),u=s(c,r);return{start:u,end:l(u,s(c,Math.min(o,i)),o-r)}}let o=n.day*i+n.minutes,c=qe(e.event.start);if(e.kind===`move`){let t=m(ge(o-e.grab,T),Math.min(c,0),r-T),n=s(K,t),i=p(e.event).getTime()-e.event.start.getTime();return{start:n,end:new Date(n.getTime()+i)}}let u=m(ge(o,T),c+T,Math.max(r,c+T)),d=e.event.start;return{start:d,end:l(d,s(K,u),u-c)}}function Z(e){B.current=e,ze(e)}function Je(e){return x.find(t=>String(t.id)===e.dataset.calEvent)}_e(F,{onPress:J.finish,canSwipe:()=>!0,onSwipeMove:J.move,onSwipeEnd:(e,t)=>J.settle(he(e,J.width(),t)),dragFrom:(e,t)=>{if(z.current?.contains(e))return Ye(e,t);if(!R.current?.contains(e))return null;let n=We(t);if(!n)return null;let r=e.closest(`[data-cal-event]`);if(r){let t=k?Je(r):void 0;if(!t||t.readOnly)return null;let a={start:t.start,end:p(t)};return e.closest(`[data-cal-resize]`)?{kind:`resize`,event:t,...a}:{kind:`move`,event:t,grab:n.day*i+n.minutes-qe(t.start),...a}}if(!A)return null;let o=a(K,n.day);return{kind:`create`,day:n.day,anchor:n.minutes,start:o,end:o}},onDragStart:(e,t)=>{Re.current=x,Z({...e,...X(e,t)})},onDragMove:e=>{let t=B.current,n=t&&X(t,e);t&&n&&(n.start.getTime()!==t.start.getTime()||n.end.getTime()!==t.end.getTime())&&Z({...t,...n})},onDragEnd:e=>{let t=B.current;if(Z(null),!t)return;let{start:n,end:r}=X(t,e)??t;if(t.kind===`create`){A?.({start:n,end:r,allDay:!1},$e(t.day,n,r));return}let{event:i}=t;if(!i){A?.({start:n,end:r,allDay:!0},Xe(n));return}(n.getTime()!==i.start.getTime()||r.getTime()!==p(i).getTime())&&k?.({event:i,start:n,end:r})},onDragCancel:()=>Z(null),onPinchStart:(e,t)=>{let n=L.current;if(!n)return;let r=n.getBoundingClientRect(),i=r.height/24;i&&(V.current={hour:i,anchorHour:(e.y-r.top)/i,distance:t})},onPinchMove:(e,t)=>{let n=V.current,r=Ue();n&&r&&n.distance&&ke(r,P,n.hour*t/n.distance,n.anchorHour,e.y)},onPinchEnd:()=>{V.current=null},autoScroll:()=>{let e=F.current,t=I.current;if(!e||!t||B.current?.kind===`allDay`)return null;let n=e.getBoundingClientRect();return{element:e,top:n.top+t.offsetHeight,bottom:n.bottom}}});function Ye(e,t){let n=Ge(t);if(n===null||e.closest(`[data-cal-more]`))return null;let r=e.closest(`[data-cal-event]`);if(r){let e=k?Je(r):void 0;return!e||e.readOnly?null:{kind:`allDay`,event:e,grabbed:n,start:e.start,end:p(e)}}if(!A)return null;let{start:i,end:s}=o(a(K,n));return{kind:`allDay`,event:null,grabbed:n,start:i,end:s}}function Xe(e){return I.current?.querySelector(`[data-cal-head-day="${r(e)}"]`)??F.current}function Ze(e){if(!A||n(e.nativeEvent)||e.target.closest(`[data-cal-event], [data-cal-more]`))return;let t=e.currentTarget.getBoundingClientRect();if(!t.width)return;let r=a(K,Y(e.clientX,t));A(o(r),Xe(r))}function Qe(e,t){if(!A||n(e.nativeEvent)||e.target.closest(`[data-cal-event]`))return;let r=e.currentTarget.getBoundingClientRect();if(!r.height)return;let a=(e.clientY-r.top)/r.height*i,o=m(Math.floor(a/T)*T,0,i-T),l=s(t,o),u=new Date(l.getTime()+Math.max(60,T)*6e4),d=s(t,i),f={start:l,end:u<d?u:d,allDay:!1};A(f,$e(c(K,t),f.start,f.end))}function $e(e,t,n){let r=Le.current;if(!r)return F.current;let o=a(K,e+1),s=d(t),l=n>=o?i:d(n),u=Math.max(q.findIndex(t=>c(K,t)===e),0);return r.style.left=`${u/q.length*100}%`,r.style.width=`${100/q.length}%`,r.style.top=`${s/i*100}%`,r.style.height=`${Math.max(l-s,0)/i*100}%`,r}function et(t){let{event:n}=t;return y(`button`,{type:`button`,"data-cal-event":String(n.id),className:v(g.timeGridBar,t.continuesBefore&&g.timeGridBarContinuesBefore,t.continuesAfter&&g.timeGridBarContinuesAfter,H?.kind===`allDay`&&H.event===n&&g.timeGridBarDragged,M?.event,Ie?.(n)),style:{"--event-color":n.color&&e(n.color),gridColumn:`${t.start+1} / span ${t.span}`,gridRow:t.lane+1,...N?.event},"aria-label":`${n.title}, ${D.allDay}`,onClick:e=>O?.(n,e.currentTarget),children:y(`span`,{className:g.timeGridBarTitle,"aria-hidden":!0,children:j?j(n,{singleLine:!0}):n.title})},n.id)}function tt(t){let{event:n}=t,r=t.bottom-t.top,a=r<De,o=se(n.start,p(n),w),s=!!k&&!n.readOnly&&!t.continuesAfter,c=H&&H.kind!==`create`&&H.event===n;return b(`button`,{type:`button`,"data-cal-event":String(n.id),"aria-label":`${n.title}, ${o}`,className:v(g.timeGridEvent,a&&g.timeGridEventShort,r<15&&g.timeGridEventBrief,t.continuesBefore&&g.timeGridEventContinuesBefore,t.continuesAfter&&g.timeGridEventContinuesAfter,(O||s)&&g.timeGridEventInteractive,c&&g.timeGridEventDragged,M?.event,Ie?.(n)),style:{"--event-color":n.color&&e(n.color),top:`${t.top/i*100}%`,"--span":`${r/i*100}%`,left:`calc(var(--column-width) * ${t.column/t.columns})`,width:`calc(var(--column-width) * ${t.span/t.columns})`,...N?.event},onClick:e=>O?.(n,e.currentTarget),children:[y(`span`,{className:g.timeGridEventTitle,"aria-hidden":!0,children:j?j(n,{singleLine:a}):n.title}),y(`span`,{className:g.timeGridEventTime,"aria-hidden":!0,children:re(n.start,p(n),w)}),s&&y(`span`,{"data-cal-resize":!0,className:g.timeGridResize,"aria-hidden":!0})]},n.id)}function nt(t){if(!H||H.kind===`allDay`)return null;let n=t,r=a(t,1);if(H.end<=n&&H.start<n||H.start>=r)return null;let o=H.start<n?0:d(H.start),s=H.end>=r?i:d(H.end),c=H.kind===`create`?void 0:H.event.color,l=H.kind===`create`?null:H.event.title;return b(`div`,{className:g.timeGridPreview,style:{"--event-color":c&&e(c),top:`${o/i*100}%`,height:`${Math.max(s-o,15)/i*100}%`},"aria-hidden":!0,children:[l&&y(`span`,{className:g.timeGridEventTitle,children:l}),y(`span`,{className:g.timeGridPreviewTime,children:re(H.start,H.end,w)})]})}function rt(t){if(H?.kind!==`allDay`)return null;let n={id:``,title:``,allDay:!0,...H.event,start:H.start,end:H.end},[r]=me([n],t);return r?y(`div`,{className:v(g.timeGridBar,g.timeGridBarPreview),style:{"--event-color":H.event?.color&&e(H.event.color),gridColumn:`${r.start+1} / span ${r.span}`,gridRow:1},"aria-hidden":!0,children:y(`span`,{className:g.timeGridBarTitle,children:H.event?.title})}):null}let Q=we.map(e=>{let t=f(C,te(C,S,e,E),Ae,E),n=t.start,r=ee(n,c(n,t.end),E),i=me(He,r,ue);return{step:e,start:n,dates:r,lanes:U?{visible:i,moreLane:0,hidden:r.map(()=>0)}:de(i,r.length,Ee)}}),it=Q[1].lanes.hidden.some(e=>e>0),$=Me?.map(e=>m(e,0,24)/24*100),at=$!==void 0&&$[0]>$[1],ot=e=>v(h.pagerPane,e===-1&&h.pagerPanePrev,e===1&&h.pagerPaneNext);return b(`div`,{ref:F,tabIndex:-1,className:g.timeGrid,style:{"--days":q.length,"--custom-calendar-hour-height":P.current?`${P.current.hour}px`:void 0,"--work-start":$&&`${Math.min(...$)}%`,"--work-end":$&&`${Math.max(...$)}%`},children:[b(`div`,{ref:I,className:g.timeGridHead,children:[b(`div`,{className:g.timeGridCorner,children:[Ne&&y(`span`,{className:g.timeGridWeekNumber,children:D.weekNumber(ne(q[Math.floor(q.length/2)]))}),(it||U)&&y(t,{className:v(g.timeGridToggle,U&&g.timeGridToggleOpen),icon:Se,title:D.allDay,"aria-label":D.allDay,"aria-expanded":U,onClick:()=>Be(e=>!e)})]}),y(`div`,{className:h.pagerViewport,children:y(`div`,{ref:J.trackRef,className:h.pagerTrack,children:Q.map(({step:e,start:t,dates:n,lanes:i})=>b(`div`,{className:v(ot(e),g.timeGridHeadPane),inert:e!==0,"aria-hidden":e!==0||void 0,children:[n.map(e=>{let t=u(e,W),n=b(Ce,{children:[y(`span`,{className:g.timeGridWeekday,children:ce(e,w,`short`)}),y(`span`,{className:v(g.timeGridDayNumber,t&&g.timeGridDayNumberToday),children:ie(e,w)})]}),i={className:v(g.timeGridDayHeader,M?.dayHeader),style:N?.dayHeader,"aria-current":t?`date`:void 0,"data-cal-head-day":r(e)};return q.length>1&&Fe?y(`button`,{type:`button`,...i,className:v(i.className,g.timeGridDayHeaderLink),"aria-label":oe(e,w),onClick:()=>Fe(e),children:n},r(e)):y(`div`,{...i,children:n},r(e))}),b(`div`,{ref:e===0?z:void 0,className:v(g.timeGridAllDay,A&&g.timeGridAllDayCreatable),"aria-label":D.allDay,role:`group`,onClick:Ze,children:[i.visible.map(et),i.hidden.map((e,t)=>e>0&&y(`div`,{"aria-hidden":!0,"data-cal-more":!0,className:g.timeGridMore,style:{gridColumn:t+1,gridRow:i.moreLane+1},onClick:()=>Be(!0),children:D.more(e)},`more-${t}`)),e===0&&rt(n)]})]},r(t)))})})]}),b(`div`,{ref:L,className:g.timeGridBody,children:[y(`div`,{className:g.timeGridGutter,"aria-hidden":!0,children:Te.map(e=>y(`span`,{className:g.timeGridHour,style:{top:`${e/24*100}%`},children:ae(e,w)},e))}),y(`div`,{className:h.pagerViewport,children:y(`div`,{ref:J.trackRef,className:h.pagerTrack,children:Q.map(({step:e,start:t,dates:n})=>b(`div`,{ref:e===0?R:void 0,className:v(ot(e),g.timeGridBodyPane),inert:e!==0,"aria-hidden":e!==0||void 0,children:[n.map(t=>{let n=u(t,W);return b(`div`,{role:`group`,"aria-label":oe(t,w),"data-cal-column":r(t),className:v(g.timeGridColumn,n&&g.timeGridColumnToday,$&&g.timeGridColumnWorking,at&&g.timeGridColumnWorkingOvernight,A&&g.timeGridColumnCreatable,M?.cell),style:N?.cell,onClick:e=>Qe(e,t),children:[pe(He,t).map(tt),n&&y(`div`,{className:g.timeGridNow,style:{top:`${d(W)/1440*100}%`},"aria-hidden":!0}),e===0&&nt(t)]},r(t))}),e===0&&y(`div`,{ref:Le,className:g.timeGridSlot,"aria-hidden":!0})]},r(t)))})})]})]})}export{S as default};
2
2
  //# sourceMappingURL=timeGrid.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeGrid.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/timeGrid/timeGrid.tsx"],"sourcesContent":["import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport cx from 'classnames';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\n\nimport { renderIcon } from 'components/common/utils/renderIcon';\nimport { CalendarView, type CalendarEvent } from '../../calendar.types';\nimport {\n addDays,\n atMinutes,\n dayDiff,\n dateToDay,\n endAfter,\n isSameDay,\n MINUTES_PER_DAY,\n minutesOfDay,\n periodRange,\n shownDays,\n stepDate,\n} from '../../dates';\nimport {\n formatClockRange,\n formatDayNumber,\n formatHour,\n formatLongDate,\n formatTimeRange,\n formatWeekday,\n} from '../../format';\nimport { clamp, pageStep, snap } from '../../gesture';\nimport {\n BRIEF_EVENT_MINUTES,\n eventEnd,\n isAllDayLike,\n limitLanes,\n packDay,\n packLanes,\n type LaneBar,\n type LimitedLanes,\n type TimedBox,\n} from '../../layout';\nimport { useGestures, type GesturePoint } from '../../useGestures';\nimport { usePager } from '../../usePager';\nimport type { TimeDrag, TimeGridProps, TimeGridZoom } from './timeGrid.types';\n\nimport pagerStyles from '../../pager.module.pcss';\nimport styles from './timeGrid.module.pcss';\n\nconst STEPS = [-1, 0, 1] as const;\nconst HOURS = Array.from({ length: 23 }, (_, i) => i + 1);\nconst ALL_DAY_LANES = 3;\n/** Below this an event is drawn on one line, its time after its title. */\nconst SHORT_EVENT_MINUTES = 45;\n/** Hour first scrolled to when today is not in view. */\nconst DEFAULT_SCROLL_HOUR = 7;\n/** Deepest zoom, as a multiple of the theme's hour height. */\nconst MAX_ZOOM = 4;\n\n/** The current time, updated on each minute boundary: it also carries the now-line past midnight. */\nfunction useNow(): Date {\n const [now, setNow] = useState(() => new Date());\n useEffect(() => {\n let timer: ReturnType<typeof setTimeout>;\n function schedule() {\n timer = setTimeout(\n () => {\n setNow(new Date());\n schedule();\n },\n 60_000 - (Date.now() % 60_000),\n );\n }\n schedule();\n return () => clearTimeout(timer);\n }, []);\n return now;\n}\n\ninterface ZoomElements {\n scroller: HTMLElement;\n head: HTMLElement;\n body: HTMLElement;\n}\n\n/**\n * Sets the hour height, and scrolls so `anchorHour` stays under `clientY`: zooming pivots on the\n * fingers or the cursor instead of the top of the day.\n */\nfunction zoomTo(\n { scroller, head, body }: ZoomElements,\n zoomRef: RefObject<TimeGridZoom | null>,\n hour: number,\n anchorHour: number,\n clientY: number,\n) {\n const base = zoomRef.current?.base ?? body.getBoundingClientRect().height / 24;\n if (!base) return;\n // Zoomed out, the whole day fits exactly.\n const min = Math.max((scroller.clientHeight - head.offsetHeight) / 24, 1);\n const next = clamp(hour, Math.min(min, base), base * MAX_ZOOM);\n zoomRef.current = { hour: next, base };\n scroller.style.setProperty('--custom-calendar-hour-height', `${next}px`);\n const top = scroller.getBoundingClientRect().top;\n scroller.scrollTop = body.offsetTop + anchorHour * next - (clientY - top);\n}\n\nfunction TimeGrid<E extends CalendarEvent>({\n events,\n date,\n view,\n locale,\n weekStartsOn,\n slotMinutes,\n hidden,\n scrollToHour,\n text,\n onDateChange,\n onOpenDay,\n onEventClick,\n onEventChange,\n onSlotCreate,\n renderEvent,\n classNames,\n slotStyles,\n zoomRef,\n}: TimeGridProps<E>): ReactElement {\n const scrollerRef = useRef<HTMLDivElement>(null);\n const headRef = useRef<HTMLDivElement>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const currentRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<TimeDrag<E> | null>(null);\n const slotRef = useRef<HTMLDivElement>(null);\n const snapshot = useRef(events);\n const pinchRef = useRef<{ hour: number; anchorHour: number; distance: number } | null>(null);\n const [drag, setDrag] = useState<TimeDrag<E> | null>(null);\n const [allDayOpen, setAllDayOpen] = useState(false);\n const now = useNow();\n\n const periodDays = view === CalendarView.Day ? 1 : 7;\n const rangeStart = periodRange(view, date, weekStartsOn).start;\n const columns = shownDays(rangeStart, periodDays, hidden);\n // While a drag runs, the grid renders the events as they were when it began: the touch that\n // started it keeps targeting the element it landed on, and iOS stops delivering its moves if\n // a re-render replaces that element.\n const shown = drag ? snapshot.current : events;\n\n const pager = usePager(\n dateToDay(rangeStart),\n (step) => onDateChange(stepDate(view, date, step, hidden)),\n () => scrollerRef.current,\n );\n\n function zoomElements(): ZoomElements | null {\n const scroller = scrollerRef.current;\n const head = headRef.current;\n const body = bodyRef.current;\n return scroller && head && body ? { scroller, head, body } : null;\n }\n\n // Once, on mount: paging keeps the scroll position, so the same hours stay under the eye.\n useLayoutEffect(() => {\n const scroller = scrollerRef.current;\n const body = bodyRef.current;\n if (!scroller || !body) return;\n const hour = body.offsetHeight / 24;\n if (!hour) return;\n const current = new Date();\n const todayShown = columns.some((day) => isSameDay(day, current));\n const target = scrollToHour ?? (todayShown ? Math.max(0, minutesOfDay(current) / 60 - 1) : DEFAULT_SCROLL_HOUR);\n scroller.scrollTop = clamp(target, 0, 24) * hour;\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const scroller = scrollerRef.current;\n if (!scroller) return;\n // Trackpad pinches arrive as a wheel with Ctrl held (Chromium, Firefox); Safari sends\n // `gesturechange` instead, and there the trackpad zooms the page as usual.\n function onWheel(event: WheelEvent) {\n if (!event.ctrlKey) return;\n const elements = zoomElements();\n if (!elements) return;\n event.preventDefault();\n const rect = elements.body.getBoundingClientRect();\n const hour = rect.height / 24;\n if (!hour) return;\n zoomTo(\n elements,\n zoomRef,\n hour * Math.exp(-event.deltaY * 0.01),\n (event.clientY - rect.top) / hour,\n event.clientY,\n );\n }\n scroller.addEventListener('wheel', onWheel, { passive: false });\n return () => scroller.removeEventListener('wheel', onWheel);\n // zoomElements only reads refs.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [zoomRef]);\n\n /** `day` counts from the period's first day, hidden ones included, so it adds up to a date. */\n function pointAt(point: GesturePoint): { day: number; minutes: number } | null {\n const pane = currentRef.current;\n if (!pane) return null;\n const rect = pane.getBoundingClientRect();\n if (!rect.width || !rect.height) return null;\n const column = clamp(Math.floor(((point.x - rect.left) / rect.width) * columns.length), 0, columns.length - 1);\n return {\n day: dayDiff(rangeStart, columns[column]),\n minutes: clamp(((point.y - rect.top) / rect.height) * MINUTES_PER_DAY, 0, MINUTES_PER_DAY),\n };\n }\n\n /** Wall-clock minutes from the first shown midnight: negative before it. */\n function minutesFromStart(value: Date): number {\n return dayDiff(rangeStart, value) * MINUTES_PER_DAY + minutesOfDay(value);\n }\n\n function preview(current: TimeDrag<E>, point: GesturePoint): { start: Date; end: Date } | null {\n const at = pointAt(point);\n if (!at) return null;\n const limit = periodDays * MINUTES_PER_DAY;\n\n if (current.kind === 'create') {\n const anchor = Math.floor(current.anchor / slotMinutes) * slotMinutes;\n const [from, to] =\n at.minutes >= anchor\n ? [anchor, Math.max(Math.ceil(at.minutes / slotMinutes) * slotMinutes, anchor + slotMinutes)]\n : [Math.floor(at.minutes / slotMinutes) * slotMinutes, anchor + slotMinutes];\n const day = addDays(rangeStart, current.day);\n const start = atMinutes(day, from);\n return { start, end: endAfter(start, atMinutes(day, Math.min(to, MINUTES_PER_DAY)), to - from) };\n }\n\n const pointer = at.day * MINUTES_PER_DAY + at.minutes;\n const eventStart = minutesFromStart(current.event.start);\n if (current.kind === 'move') {\n const from = clamp(snap(pointer - current.grab, slotMinutes), Math.min(eventStart, 0), limit - slotMinutes);\n const start = atMinutes(rangeStart, from);\n // The real length, not the wall-clock one, so a move across a clock change keeps it.\n const length = eventEnd(current.event).getTime() - current.event.start.getTime();\n return { start, end: new Date(start.getTime() + length) };\n }\n const to = clamp(snap(pointer, slotMinutes), eventStart + slotMinutes, Math.max(limit, eventStart + slotMinutes));\n const start = current.event.start;\n return { start, end: endAfter(start, atMinutes(rangeStart, to), to - eventStart) };\n }\n\n function setDragState(next: TimeDrag<E> | null) {\n dragRef.current = next;\n setDrag(next);\n }\n\n function findEvent(element: HTMLElement): E | undefined {\n return events.find((candidate) => String(candidate.id) === element.dataset.calEvent);\n }\n\n useGestures<TimeDrag<E>>(scrollerRef, {\n onPress: pager.finish,\n canSwipe: () => true,\n onSwipeMove: pager.move,\n onSwipeEnd: (dx, velocity) => pager.settle(pageStep(dx, pager.width(), velocity)),\n dragFrom: (target, point) => {\n if (!currentRef.current?.contains(target)) return null;\n const at = pointAt(point);\n if (!at) return null;\n const element = target.closest<HTMLElement>('[data-cal-event]');\n if (element) {\n const event = onEventChange ? findEvent(element) : undefined;\n if (!event || event.readOnly) return null;\n const current = { start: event.start, end: eventEnd(event) };\n if (target.closest('[data-cal-resize]')) return { kind: 'resize', event, ...current };\n const grab = at.day * MINUTES_PER_DAY + at.minutes - minutesFromStart(event.start);\n return { kind: 'move', event, grab, ...current };\n }\n if (!onSlotCreate) return null;\n const day = addDays(rangeStart, at.day);\n return { kind: 'create', day: at.day, anchor: at.minutes, start: day, end: day };\n },\n onDragStart: (started, point) => {\n snapshot.current = events;\n setDragState({ ...started, ...preview(started, point) });\n },\n onDragMove: (point) => {\n const current = dragRef.current;\n const next = current && preview(current, point);\n if (!current || !next) return;\n if (next.start.getTime() === current.start.getTime() && next.end.getTime() === current.end.getTime()) return;\n setDragState({ ...current, ...next });\n },\n onDragEnd: (point) => {\n const current = dragRef.current;\n setDragState(null);\n if (!current) return;\n const { start, end } = preview(current, point) ?? current;\n if (current.kind === 'create') {\n onSlotCreate?.({ start, end, allDay: false }, markSlot(current.day, start, end));\n return;\n }\n const unchanged =\n start.getTime() === current.event.start.getTime() && end.getTime() === eventEnd(current.event).getTime();\n if (!unchanged) onEventChange?.({ event: current.event, start, end });\n },\n onDragCancel: () => setDragState(null),\n onPinchStart: (center, distance) => {\n const body = bodyRef.current;\n if (!body) return;\n const rect = body.getBoundingClientRect();\n const hour = rect.height / 24;\n if (!hour) return;\n pinchRef.current = { hour, anchorHour: (center.y - rect.top) / hour, distance };\n },\n onPinchMove: (center, distance) => {\n const pinch = pinchRef.current;\n const elements = zoomElements();\n if (!pinch || !elements || !pinch.distance) return;\n zoomTo(elements, zoomRef, (pinch.hour * distance) / pinch.distance, pinch.anchorHour, center.y);\n },\n onPinchEnd: () => {\n pinchRef.current = null;\n },\n autoScroll: () => {\n const scroller = scrollerRef.current;\n const head = headRef.current;\n if (!scroller || !head) return null;\n const rect = scroller.getBoundingClientRect();\n // The sticky head covers the top of the scroller, so the zone starts below it.\n return { element: scroller, top: rect.top + head.offsetHeight, bottom: rect.bottom };\n },\n });\n\n function handleColumnClick(clickEvent: MouseEvent<HTMLDivElement>, day: Date) {\n if (!onSlotCreate || (clickEvent.target as Element).closest('[data-cal-event]')) return;\n const rect = clickEvent.currentTarget.getBoundingClientRect();\n if (!rect.height) return;\n const minutes = ((clickEvent.clientY - rect.top) / rect.height) * MINUTES_PER_DAY;\n const from = clamp(Math.floor(minutes / slotMinutes) * slotMinutes, 0, MINUTES_PER_DAY - slotMinutes);\n const start = atMinutes(day, from);\n // Real time, not the clock: across a clock change an hour on the clock is none or two.\n const end = new Date(start.getTime() + Math.max(60, slotMinutes) * 60_000);\n const midnight = atMinutes(day, MINUTES_PER_DAY);\n const slot = { start, end: end < midnight ? end : midnight, allDay: false };\n onSlotCreate(slot, markSlot(dayDiff(rangeStart, day), slot.start, slot.end));\n }\n\n /**\n * Moves the invisible box over a new slot and returns it: the anchor `onSlotCreate` hands out,\n * so the app can open its editor right next to the slot, as `onEventClick` lets it for an event.\n */\n function markSlot(dayIndex: number, start: Date, end: Date): HTMLElement {\n const marker = slotRef.current;\n if (!marker) return scrollerRef.current!;\n const next = addDays(rangeStart, dayIndex + 1);\n const top = minutesOfDay(start);\n const bottom = end >= next ? MINUTES_PER_DAY : minutesOfDay(end);\n const column = Math.max(\n columns.findIndex((day) => dayDiff(rangeStart, day) === dayIndex),\n 0,\n );\n marker.style.left = `${(column / columns.length) * 100}%`;\n marker.style.width = `${100 / columns.length}%`;\n marker.style.top = `${(top / MINUTES_PER_DAY) * 100}%`;\n // Never upside down: on the day the clocks go back, a slot can end on an earlier clock time.\n marker.style.height = `${(Math.max(bottom - top, 0) / MINUTES_PER_DAY) * 100}%`;\n return marker;\n }\n\n function renderAllDayBar(bar: LaneBar<E>) {\n const { event } = bar;\n return (\n <button\n key={event.id}\n type='button'\n data-cal-event={String(event.id)}\n className={cx(\n styles.timeGridBar,\n bar.continuesBefore && styles.timeGridBarContinuesBefore,\n bar.continuesAfter && styles.timeGridBarContinuesAfter,\n classNames?.event,\n )}\n style={\n {\n '--event-color': event.color,\n gridColumn: `${bar.start + 1} / span ${bar.span}`,\n gridRow: bar.lane + 1,\n ...slotStyles?.event,\n } as CSSProperties\n }\n aria-label={`${event.title}, ${text.allDay}`}\n onClick={(clickEvent) => onEventClick?.(event, clickEvent.currentTarget)}\n >\n <span className={styles.timeGridBarTitle} aria-hidden>\n {renderEvent ? renderEvent(event, { singleLine: true }) : event.title}\n </span>\n </button>\n );\n }\n\n function renderBox(box: TimedBox<E>) {\n const { event } = box;\n const minutes = box.bottom - box.top;\n const short = minutes < SHORT_EVENT_MINUTES;\n const when = formatTimeRange(event.start, eventEnd(event), locale);\n const resizable = Boolean(onEventChange) && !event.readOnly && !box.continuesAfter;\n const dragged = drag && drag.kind !== 'create' && drag.event === event;\n return (\n <button\n key={event.id}\n type='button'\n data-cal-event={String(event.id)}\n aria-label={`${event.title}, ${when}`}\n className={cx(\n styles.timeGridEvent,\n short && styles.timeGridEventShort,\n minutes < BRIEF_EVENT_MINUTES && styles.timeGridEventBrief,\n box.continuesBefore && styles.timeGridEventContinuesBefore,\n box.continuesAfter && styles.timeGridEventContinuesAfter,\n (onEventClick || resizable) && styles.timeGridEventInteractive,\n dragged && styles.timeGridEventDragged,\n classNames?.event,\n )}\n style={\n {\n '--event-color': event.color,\n top: `${(box.top / MINUTES_PER_DAY) * 100}%`,\n '--span': `${(minutes / MINUTES_PER_DAY) * 100}%`,\n left: `calc(var(--column-width) * ${box.column / box.columns})`,\n width: `calc(var(--column-width) * ${box.span / box.columns})`,\n ...slotStyles?.event,\n } as CSSProperties\n }\n onClick={(clickEvent) => onEventClick?.(event, clickEvent.currentTarget)}\n >\n <span className={styles.timeGridEventTitle} aria-hidden>\n {renderEvent ? renderEvent(event, { singleLine: short }) : event.title}\n </span>\n <span className={styles.timeGridEventTime} aria-hidden>\n {formatClockRange(event.start, eventEnd(event), locale)}\n </span>\n {resizable && <span data-cal-resize className={styles.timeGridResize} aria-hidden />}\n </button>\n );\n }\n\n function renderPreview(day: Date) {\n if (!drag) return null;\n const dayStart = day;\n const next = addDays(day, 1);\n if (drag.end <= dayStart && drag.start < dayStart) return null;\n if (drag.start >= next) return null;\n const top = drag.start < dayStart ? 0 : minutesOfDay(drag.start);\n const bottom = drag.end >= next ? MINUTES_PER_DAY : minutesOfDay(drag.end);\n const color = drag.kind === 'create' ? undefined : drag.event.color;\n const title = drag.kind === 'create' ? null : drag.event.title;\n return (\n <div\n className={styles.timeGridPreview}\n style={\n {\n '--event-color': color,\n top: `${(top / MINUTES_PER_DAY) * 100}%`,\n height: `${(Math.max(bottom - top, 15) / MINUTES_PER_DAY) * 100}%`,\n } as CSSProperties\n }\n aria-hidden\n >\n {title && <span className={styles.timeGridEventTitle}>{title}</span>}\n <span className={styles.timeGridPreviewTime}>{formatClockRange(drag.start, drag.end, locale)}</span>\n </div>\n );\n }\n\n const panes = STEPS.map((step) => {\n const start = periodRange(view, stepDate(view, date, step, hidden), weekStartsOn).start;\n const dates = shownDays(start, periodDays, hidden);\n const allDay = packLanes(shown, dates, isAllDayLike);\n const lanes: LimitedLanes<E> = allDayOpen\n ? { visible: allDay, moreLane: 0, hidden: dates.map(() => 0) }\n : limitLanes(allDay, dates.length, ALL_DAY_LANES);\n return { step, start, dates, lanes };\n });\n const hasHidden = panes[1].lanes.hidden.some((count) => count > 0);\n const paneClass = (step: number) =>\n cx(pagerStyles.pagerPane, step === -1 && pagerStyles.pagerPanePrev, step === 1 && pagerStyles.pagerPaneNext);\n\n return (\n <div\n ref={scrollerRef}\n tabIndex={-1}\n className={styles.timeGrid}\n style={\n {\n '--days': columns.length,\n '--custom-calendar-hour-height': zoomRef.current ? `${zoomRef.current.hour}px` : undefined,\n } as CSSProperties\n }\n >\n <div ref={headRef} className={styles.timeGridHead}>\n <div className={styles.timeGridCorner}>\n {(hasHidden || allDayOpen) && (\n <button\n type='button'\n className={cx(styles.timeGridToggle, allDayOpen && styles.timeGridToggleOpen)}\n aria-label={text.allDay}\n aria-expanded={allDayOpen}\n onClick={() => setAllDayOpen((open) => !open)}\n >\n {renderIcon(faChevronDown)}\n </button>\n )}\n </div>\n <div className={pagerStyles.pagerViewport}>\n <div ref={pager.trackRef} className={pagerStyles.pagerTrack}>\n {panes.map(({ step, start, dates, lanes }) => (\n <div\n key={dateToDay(start)}\n className={cx(paneClass(step), styles.timeGridHeadPane)}\n inert={step !== 0}\n aria-hidden={step !== 0 || undefined}\n >\n {dates.map((day) => {\n const isToday = isSameDay(day, now);\n const content = (\n <>\n <span className={styles.timeGridWeekday}>{formatWeekday(day, locale, 'short')}</span>\n <span className={cx(styles.timeGridDayNumber, isToday && styles.timeGridDayNumberToday)}>\n {formatDayNumber(day, locale)}\n </span>\n </>\n );\n const shared = {\n className: cx(styles.timeGridDayHeader, classNames?.dayHeader),\n style: slotStyles?.dayHeader,\n 'aria-current': isToday ? ('date' as const) : undefined,\n };\n return periodDays > 1 && onOpenDay ? (\n <button\n key={dateToDay(day)}\n type='button'\n {...shared}\n className={cx(shared.className, styles.timeGridDayHeaderLink)}\n aria-label={formatLongDate(day, locale)}\n onClick={() => onOpenDay(day)}\n >\n {content}\n </button>\n ) : (\n <div key={dateToDay(day)} {...shared}>\n {content}\n </div>\n );\n })}\n <div className={styles.timeGridAllDay} aria-label={text.allDay} role='group'>\n {lanes.visible.map(renderAllDayBar)}\n {lanes.hidden.map(\n (count, column) =>\n count > 0 && (\n <div\n key={`more-${column}`}\n aria-hidden\n className={styles.timeGridMore}\n style={{ gridColumn: column + 1, gridRow: lanes.moreLane + 1 }}\n onClick={() => setAllDayOpen(true)}\n >\n {text.more(count)}\n </div>\n ),\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n <div ref={bodyRef} className={styles.timeGridBody}>\n <div className={styles.timeGridGutter} aria-hidden>\n {HOURS.map((hour) => (\n <span key={hour} className={styles.timeGridHour} style={{ top: `${(hour / 24) * 100}%` }}>\n {formatHour(hour, locale)}\n </span>\n ))}\n </div>\n <div className={pagerStyles.pagerViewport}>\n <div ref={pager.trackRef} className={pagerStyles.pagerTrack}>\n {panes.map(({ step, start, dates }) => (\n <div\n key={dateToDay(start)}\n ref={step === 0 ? currentRef : undefined}\n className={cx(paneClass(step), styles.timeGridBodyPane)}\n inert={step !== 0}\n aria-hidden={step !== 0 || undefined}\n >\n {dates.map((day) => {\n const isToday = isSameDay(day, now);\n return (\n <div\n key={dateToDay(day)}\n role='group'\n aria-label={formatLongDate(day, locale)}\n data-cal-column={dateToDay(day)}\n className={cx(\n styles.timeGridColumn,\n isToday && styles.timeGridColumnToday,\n onSlotCreate && styles.timeGridColumnCreatable,\n classNames?.cell,\n )}\n style={slotStyles?.cell}\n onClick={(clickEvent) => handleColumnClick(clickEvent, day)}\n >\n {packDay(shown, day).map(renderBox)}\n {isToday && (\n <div\n className={styles.timeGridNow}\n style={{ top: `${(minutesOfDay(now) / MINUTES_PER_DAY) * 100}%` }}\n aria-hidden\n />\n )}\n {step === 0 && renderPreview(day)}\n </div>\n );\n })}\n {step === 0 && <div ref={slotRef} className={styles.timeGridSlot} aria-hidden />}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default TimeGrid;\n"],"mappings":"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"}
1
+ {"version":3,"file":"timeGrid.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/timeGrid/timeGrid.tsx"],"sourcesContent":["import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent,\n type ReactElement,\n type RefObject,\n} from 'react';\nimport cx from 'classnames';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\n\nimport ActionIcon from 'components/common/actionIcon';\nimport { isDismissClick } from 'components/common/utils/dismissClick';\nimport type { CalendarEvent } from '../../calendar.types';\nimport {\n addDays,\n allDaySlot,\n atMinutes,\n dayDiff,\n dateToDay,\n endAfter,\n isSameDay,\n MINUTES_PER_DAY,\n minutesOfDay,\n periodRange,\n shownDays,\n stepDate,\n weekNumber,\n} from '../../dates';\nimport {\n formatClockRange,\n formatDayNumber,\n formatHour,\n formatLongDate,\n formatTimeRange,\n formatWeekday,\n} from '../../format';\nimport { clamp, pageStep, snap } from '../../gesture';\nimport {\n BRIEF_EVENT_MINUTES,\n eventEnd,\n isAllDayLike,\n limitLanes,\n moveByDays,\n packDay,\n packLanes,\n type LaneBar,\n type LimitedLanes,\n type TimedBox,\n} from '../../layout';\nimport { useGestures, type GesturePoint } from '../../useGestures';\nimport { useNow } from '../../useNow';\nimport { usePager } from '../../usePager';\nimport type { AllDayDrag, TimeDrag, TimeGridProps, TimeGridZoom } from './timeGrid.types';\n\nimport pagerStyles from '../../pager.module.pcss';\nimport styles from './timeGrid.module.pcss';\nimport { cssColor } from '../../../styles/tone';\n\nconst STEPS = [-1, 0, 1] as const;\nconst HOURS = Array.from({ length: 23 }, (_, i) => i + 1);\nconst ALL_DAY_LANES = 3;\n/** Below this an event is drawn on one line, its time after its title. */\nconst SHORT_EVENT_MINUTES = 45;\n/** Hour first scrolled to when today is not in view and no working hours are set. */\nconst DEFAULT_SCROLL_HOUR = 7;\n/** Deepest zoom, as a multiple of the theme's hour height. */\nconst MAX_ZOOM = 4;\n\ninterface ZoomElements {\n scroller: HTMLElement;\n head: HTMLElement;\n body: HTMLElement;\n}\n\n/**\n * Sets the hour height, and scrolls so `anchorHour` stays under `clientY`: zooming pivots on the\n * fingers or the cursor instead of the top of the day.\n */\nfunction zoomTo(\n { scroller, head, body }: ZoomElements,\n zoomRef: RefObject<TimeGridZoom | null>,\n hour: number,\n anchorHour: number,\n clientY: number,\n) {\n const base = zoomRef.current?.base ?? body.getBoundingClientRect().height / 24;\n if (!base) return;\n // Zoomed out, the whole day fits exactly.\n const min = Math.max((scroller.clientHeight - head.offsetHeight) / 24, 1);\n const next = clamp(hour, Math.min(min, base), base * MAX_ZOOM);\n zoomRef.current = { hour: next, base };\n scroller.style.setProperty('--custom-calendar-hour-height', `${next}px`);\n const top = scroller.getBoundingClientRect().top;\n scroller.scrollTop = body.offsetTop + anchorHour * next - (clientY - top);\n}\n\nfunction TimeGrid<E extends CalendarEvent>({\n events,\n date,\n period,\n locale,\n weekStartsOn,\n slotMinutes,\n hidden,\n scrollToHour,\n workingHours,\n showWeekNumbers,\n text,\n onDateChange,\n onOpenDay,\n onEventClick,\n onEventChange,\n onSlotCreate,\n renderEvent,\n eventClassName,\n classNames,\n slotStyles,\n zoomRef,\n}: TimeGridProps<E>): ReactElement {\n const scrollerRef = useRef<HTMLDivElement>(null);\n const headRef = useRef<HTMLDivElement>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const currentRef = useRef<HTMLDivElement>(null);\n const allDayRef = useRef<HTMLDivElement>(null);\n const dragRef = useRef<TimeDrag<E> | null>(null);\n const slotRef = useRef<HTMLDivElement>(null);\n const snapshot = useRef(events);\n const pinchRef = useRef<{ hour: number; anchorHour: number; distance: number } | null>(null);\n const [drag, setDrag] = useState<TimeDrag<E> | null>(null);\n const [allDayOpen, setAllDayOpen] = useState(false);\n const now = useNow();\n\n const range = periodRange(period, date, weekStartsOn, hidden);\n const rangeStart = range.start;\n /** Calendar days the period spans, hidden ones included. */\n const periodDays = dayDiff(range.start, range.end);\n const columns = shownDays(rangeStart, periodDays, hidden);\n // While a drag runs, the grid renders the events as they were when it began: the touch that\n // started it keeps targeting the element it landed on, and iOS stops delivering its moves if\n // a re-render replaces that element.\n const shown = drag ? snapshot.current : events;\n\n const pager = usePager(\n dateToDay(rangeStart),\n (step) => onDateChange(stepDate(period, date, step, hidden)),\n () => scrollerRef.current,\n );\n\n function zoomElements(): ZoomElements | null {\n const scroller = scrollerRef.current;\n const head = headRef.current;\n const body = bodyRef.current;\n return scroller && head && body ? { scroller, head, body } : null;\n }\n\n // Once, on mount: paging keeps the scroll position, so the same hours stay under the eye.\n useLayoutEffect(() => {\n const scroller = scrollerRef.current;\n const body = bodyRef.current;\n if (!scroller || !body) return;\n const hour = body.offsetHeight / 24;\n if (!hour) return;\n const todayShown = columns.some((day) => isSameDay(day, now));\n const target =\n scrollToHour ??\n (todayShown ? Math.max(0, minutesOfDay(now) / 60 - 1) : (workingHours?.[0] ?? DEFAULT_SCROLL_HOUR));\n scroller.scrollTop = clamp(target, 0, 24) * hour;\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const scroller = scrollerRef.current;\n if (!scroller) return;\n // Trackpad pinches arrive as a wheel with Ctrl held (Chromium, Firefox); Safari sends\n // `gesturechange` instead, and there the trackpad zooms the page as usual.\n function onWheel(event: WheelEvent) {\n if (!event.ctrlKey) return;\n const elements = zoomElements();\n if (!elements) return;\n event.preventDefault();\n const rect = elements.body.getBoundingClientRect();\n const hour = rect.height / 24;\n if (!hour) return;\n zoomTo(\n elements,\n zoomRef,\n hour * Math.exp(-event.deltaY * 0.01),\n (event.clientY - rect.top) / hour,\n event.clientY,\n );\n }\n scroller.addEventListener('wheel', onWheel, { passive: false });\n return () => scroller.removeEventListener('wheel', onWheel);\n // zoomElements only reads refs.\n // oxlint-disable-next-line react-hooks/exhaustive-deps\n }, [zoomRef]);\n\n /** Days from the period's first day, hidden ones included, to the column under `x` in `rect`. */\n function dayAt(x: number, rect: DOMRect): number {\n const column = clamp(Math.floor(((x - rect.left) / rect.width) * columns.length), 0, columns.length - 1);\n return dayDiff(rangeStart, columns[column]);\n }\n\n /** `day` counts from the period's first day, hidden ones included, so it adds up to a date. */\n function pointAt(point: GesturePoint): { day: number; minutes: number } | null {\n const pane = currentRef.current;\n if (!pane) return null;\n const rect = pane.getBoundingClientRect();\n if (!rect.width || !rect.height) return null;\n return {\n day: dayAt(point.x, rect),\n minutes: clamp(((point.y - rect.top) / rect.height) * MINUTES_PER_DAY, 0, MINUTES_PER_DAY),\n };\n }\n\n function allDayAt(point: GesturePoint): number | null {\n const rect = allDayRef.current?.getBoundingClientRect();\n return rect?.width ? dayAt(point.x, rect) : null;\n }\n\n /** Whole days: the event moved by as many as the pointer has, or the days a new slot covers. */\n function allDayPreview({ event, grabbed }: AllDayDrag<E>, over: number): { start: Date; end: Date } {\n if (event) return moveByDays(event, over - grabbed);\n const { start, end } = allDaySlot(addDays(rangeStart, grabbed), addDays(rangeStart, over));\n return { start, end };\n }\n\n /** Wall-clock minutes from the first shown midnight: negative before it. */\n function minutesFromStart(value: Date): number {\n return dayDiff(rangeStart, value) * MINUTES_PER_DAY + minutesOfDay(value);\n }\n\n function preview(current: TimeDrag<E>, point: GesturePoint): { start: Date; end: Date } | null {\n if (current.kind === 'allDay') {\n const over = allDayAt(point);\n return over === null ? null : allDayPreview(current, over);\n }\n const at = pointAt(point);\n if (!at) return null;\n const limit = periodDays * MINUTES_PER_DAY;\n\n if (current.kind === 'create') {\n const anchor = Math.floor(current.anchor / slotMinutes) * slotMinutes;\n const [from, to] =\n at.minutes >= anchor\n ? [anchor, Math.max(Math.ceil(at.minutes / slotMinutes) * slotMinutes, anchor + slotMinutes)]\n : [Math.floor(at.minutes / slotMinutes) * slotMinutes, anchor + slotMinutes];\n const day = addDays(rangeStart, current.day);\n const start = atMinutes(day, from);\n return { start, end: endAfter(start, atMinutes(day, Math.min(to, MINUTES_PER_DAY)), to - from) };\n }\n\n const pointer = at.day * MINUTES_PER_DAY + at.minutes;\n const eventStart = minutesFromStart(current.event.start);\n if (current.kind === 'move') {\n const from = clamp(snap(pointer - current.grab, slotMinutes), Math.min(eventStart, 0), limit - slotMinutes);\n const start = atMinutes(rangeStart, from);\n // The real length, not the wall-clock one, so a move across a clock change keeps it.\n const length = eventEnd(current.event).getTime() - current.event.start.getTime();\n return { start, end: new Date(start.getTime() + length) };\n }\n const to = clamp(snap(pointer, slotMinutes), eventStart + slotMinutes, Math.max(limit, eventStart + slotMinutes));\n const start = current.event.start;\n return { start, end: endAfter(start, atMinutes(rangeStart, to), to - eventStart) };\n }\n\n function setDragState(next: TimeDrag<E> | null) {\n dragRef.current = next;\n setDrag(next);\n }\n\n function findEvent(element: HTMLElement): E | undefined {\n return events.find((candidate) => String(candidate.id) === element.dataset.calEvent);\n }\n\n useGestures<TimeDrag<E>>(scrollerRef, {\n onPress: pager.finish,\n canSwipe: () => true,\n onSwipeMove: pager.move,\n onSwipeEnd: (dx, velocity) => pager.settle(pageStep(dx, pager.width(), velocity)),\n dragFrom: (target, point) => {\n if (allDayRef.current?.contains(target)) return allDayDragFrom(target, point);\n if (!currentRef.current?.contains(target)) return null;\n const at = pointAt(point);\n if (!at) return null;\n const element = target.closest<HTMLElement>('[data-cal-event]');\n if (element) {\n const event = onEventChange ? findEvent(element) : undefined;\n if (!event || event.readOnly) return null;\n const current = { start: event.start, end: eventEnd(event) };\n if (target.closest('[data-cal-resize]')) return { kind: 'resize', event, ...current };\n const grab = at.day * MINUTES_PER_DAY + at.minutes - minutesFromStart(event.start);\n return { kind: 'move', event, grab, ...current };\n }\n if (!onSlotCreate) return null;\n const day = addDays(rangeStart, at.day);\n return { kind: 'create', day: at.day, anchor: at.minutes, start: day, end: day };\n },\n onDragStart: (started, point) => {\n snapshot.current = events;\n setDragState({ ...started, ...preview(started, point) });\n },\n onDragMove: (point) => {\n const current = dragRef.current;\n const next = current && preview(current, point);\n if (!current || !next) return;\n if (next.start.getTime() === current.start.getTime() && next.end.getTime() === current.end.getTime()) return;\n setDragState({ ...current, ...next });\n },\n onDragEnd: (point) => {\n const current = dragRef.current;\n setDragState(null);\n if (!current) return;\n const { start, end } = preview(current, point) ?? current;\n if (current.kind === 'create') {\n onSlotCreate?.({ start, end, allDay: false }, markSlot(current.day, start, end));\n return;\n }\n const { event } = current;\n if (!event) {\n onSlotCreate?.({ start, end, allDay: true }, dayHeader(start));\n return;\n }\n const unchanged = start.getTime() === event.start.getTime() && end.getTime() === eventEnd(event).getTime();\n if (!unchanged) onEventChange?.({ event, start, end });\n },\n onDragCancel: () => setDragState(null),\n onPinchStart: (center, distance) => {\n const body = bodyRef.current;\n if (!body) return;\n const rect = body.getBoundingClientRect();\n const hour = rect.height / 24;\n if (!hour) return;\n pinchRef.current = { hour, anchorHour: (center.y - rect.top) / hour, distance };\n },\n onPinchMove: (center, distance) => {\n const pinch = pinchRef.current;\n const elements = zoomElements();\n if (!pinch || !elements || !pinch.distance) return;\n zoomTo(elements, zoomRef, (pinch.hour * distance) / pinch.distance, pinch.anchorHour, center.y);\n },\n onPinchEnd: () => {\n pinchRef.current = null;\n },\n autoScroll: () => {\n const scroller = scrollerRef.current;\n const head = headRef.current;\n // A drag in the all-day row is above the hours, where the zone would scroll them up.\n if (!scroller || !head || dragRef.current?.kind === 'allDay') return null;\n const rect = scroller.getBoundingClientRect();\n // The sticky head covers the top of the scroller, so the zone starts below it.\n return { element: scroller, top: rect.top + head.offsetHeight, bottom: rect.bottom };\n },\n });\n\n function allDayDragFrom(target: Element, point: GesturePoint): AllDayDrag<E> | null {\n const grabbed = allDayAt(point);\n if (grabbed === null || target.closest('[data-cal-more]')) return null;\n const element = target.closest<HTMLElement>('[data-cal-event]');\n if (element) {\n const event = onEventChange ? findEvent(element) : undefined;\n if (!event || event.readOnly) return null;\n return { kind: 'allDay', event, grabbed, start: event.start, end: eventEnd(event) };\n }\n if (!onSlotCreate) return null;\n const { start, end } = allDaySlot(addDays(rangeStart, grabbed));\n return { kind: 'allDay', event: null, grabbed, start, end };\n }\n\n /** The header of `day`'s column: what a new all-day slot is anchored to. */\n function dayHeader(day: Date): HTMLElement {\n const header = headRef.current?.querySelector<HTMLElement>(`[data-cal-head-day=\"${dateToDay(day)}\"]`);\n return header ?? scrollerRef.current!;\n }\n\n function handleAllDayClick(clickEvent: MouseEvent<HTMLDivElement>) {\n if (!onSlotCreate || isDismissClick(clickEvent.nativeEvent)) return;\n if ((clickEvent.target as Element).closest('[data-cal-event], [data-cal-more]')) return;\n const rect = clickEvent.currentTarget.getBoundingClientRect();\n if (!rect.width) return;\n const day = addDays(rangeStart, dayAt(clickEvent.clientX, rect));\n onSlotCreate(allDaySlot(day), dayHeader(day));\n }\n\n function handleColumnClick(clickEvent: MouseEvent<HTMLDivElement>, day: Date) {\n if (!onSlotCreate || isDismissClick(clickEvent.nativeEvent)) return;\n if ((clickEvent.target as Element).closest('[data-cal-event]')) return;\n const rect = clickEvent.currentTarget.getBoundingClientRect();\n if (!rect.height) return;\n const minutes = ((clickEvent.clientY - rect.top) / rect.height) * MINUTES_PER_DAY;\n const from = clamp(Math.floor(minutes / slotMinutes) * slotMinutes, 0, MINUTES_PER_DAY - slotMinutes);\n const start = atMinutes(day, from);\n // Real time, not the clock: across a clock change an hour on the clock is none or two.\n const end = new Date(start.getTime() + Math.max(60, slotMinutes) * 60_000);\n const midnight = atMinutes(day, MINUTES_PER_DAY);\n const slot = { start, end: end < midnight ? end : midnight, allDay: false };\n onSlotCreate(slot, markSlot(dayDiff(rangeStart, day), slot.start, slot.end));\n }\n\n /**\n * Moves the invisible box over a new slot and returns it: the anchor `onSlotCreate` hands out,\n * so the app can open its editor right next to the slot, as `onEventClick` lets it for an event.\n */\n function markSlot(dayIndex: number, start: Date, end: Date): HTMLElement {\n const marker = slotRef.current;\n if (!marker) return scrollerRef.current!;\n const next = addDays(rangeStart, dayIndex + 1);\n const top = minutesOfDay(start);\n const bottom = end >= next ? MINUTES_PER_DAY : minutesOfDay(end);\n const column = Math.max(\n columns.findIndex((day) => dayDiff(rangeStart, day) === dayIndex),\n 0,\n );\n marker.style.left = `${(column / columns.length) * 100}%`;\n marker.style.width = `${100 / columns.length}%`;\n marker.style.top = `${(top / MINUTES_PER_DAY) * 100}%`;\n // Never upside down: on the day the clocks go back, a slot can end on an earlier clock time.\n marker.style.height = `${(Math.max(bottom - top, 0) / MINUTES_PER_DAY) * 100}%`;\n return marker;\n }\n\n function renderAllDayBar(bar: LaneBar<E>) {\n const { event } = bar;\n return (\n <button\n key={event.id}\n type='button'\n data-cal-event={String(event.id)}\n className={cx(\n styles.timeGridBar,\n bar.continuesBefore && styles.timeGridBarContinuesBefore,\n bar.continuesAfter && styles.timeGridBarContinuesAfter,\n drag?.kind === 'allDay' && drag.event === event && styles.timeGridBarDragged,\n classNames?.event,\n eventClassName?.(event),\n )}\n style={\n {\n '--event-color': event.color && cssColor(event.color),\n gridColumn: `${bar.start + 1} / span ${bar.span}`,\n gridRow: bar.lane + 1,\n ...slotStyles?.event,\n } as CSSProperties\n }\n aria-label={`${event.title}, ${text.allDay}`}\n onClick={(clickEvent) => onEventClick?.(event, clickEvent.currentTarget)}\n >\n <span className={styles.timeGridBarTitle} aria-hidden>\n {renderEvent ? renderEvent(event, { singleLine: true }) : event.title}\n </span>\n </button>\n );\n }\n\n function renderBox(box: TimedBox<E>) {\n const { event } = box;\n const minutes = box.bottom - box.top;\n const short = minutes < SHORT_EVENT_MINUTES;\n const when = formatTimeRange(event.start, eventEnd(event), locale);\n const resizable = Boolean(onEventChange) && !event.readOnly && !box.continuesAfter;\n const dragged = drag && drag.kind !== 'create' && drag.event === event;\n return (\n <button\n key={event.id}\n type='button'\n data-cal-event={String(event.id)}\n aria-label={`${event.title}, ${when}`}\n className={cx(\n styles.timeGridEvent,\n short && styles.timeGridEventShort,\n minutes < BRIEF_EVENT_MINUTES && styles.timeGridEventBrief,\n box.continuesBefore && styles.timeGridEventContinuesBefore,\n box.continuesAfter && styles.timeGridEventContinuesAfter,\n (onEventClick || resizable) && styles.timeGridEventInteractive,\n dragged && styles.timeGridEventDragged,\n classNames?.event,\n eventClassName?.(event),\n )}\n style={\n {\n '--event-color': event.color && cssColor(event.color),\n top: `${(box.top / MINUTES_PER_DAY) * 100}%`,\n '--span': `${(minutes / MINUTES_PER_DAY) * 100}%`,\n left: `calc(var(--column-width) * ${box.column / box.columns})`,\n width: `calc(var(--column-width) * ${box.span / box.columns})`,\n ...slotStyles?.event,\n } as CSSProperties\n }\n onClick={(clickEvent) => onEventClick?.(event, clickEvent.currentTarget)}\n >\n <span className={styles.timeGridEventTitle} aria-hidden>\n {renderEvent ? renderEvent(event, { singleLine: short }) : event.title}\n </span>\n <span className={styles.timeGridEventTime} aria-hidden>\n {formatClockRange(event.start, eventEnd(event), locale)}\n </span>\n {resizable && <span data-cal-resize className={styles.timeGridResize} aria-hidden />}\n </button>\n );\n }\n\n function renderPreview(day: Date) {\n if (!drag || drag.kind === 'allDay') return null;\n const dayStart = day;\n const next = addDays(day, 1);\n if (drag.end <= dayStart && drag.start < dayStart) return null;\n if (drag.start >= next) return null;\n const top = drag.start < dayStart ? 0 : minutesOfDay(drag.start);\n const bottom = drag.end >= next ? MINUTES_PER_DAY : minutesOfDay(drag.end);\n const color = drag.kind === 'create' ? undefined : drag.event.color;\n const title = drag.kind === 'create' ? null : drag.event.title;\n return (\n <div\n className={styles.timeGridPreview}\n style={\n {\n '--event-color': color && cssColor(color),\n top: `${(top / MINUTES_PER_DAY) * 100}%`,\n height: `${(Math.max(bottom - top, 15) / MINUTES_PER_DAY) * 100}%`,\n } as CSSProperties\n }\n aria-hidden\n >\n {title && <span className={styles.timeGridEventTitle}>{title}</span>}\n <span className={styles.timeGridPreviewTime}>{formatClockRange(drag.start, drag.end, locale)}</span>\n </div>\n );\n }\n\n /** Where an all-day drag would put its days, drawn over the bars. */\n function renderAllDayPreview(dates: readonly Date[]) {\n if (drag?.kind !== 'allDay') return null;\n const target = { id: '', title: '', allDay: true, ...drag.event, start: drag.start, end: drag.end };\n const [bar] = packLanes([target], dates);\n if (!bar) return null;\n return (\n <div\n className={cx(styles.timeGridBar, styles.timeGridBarPreview)}\n style={\n {\n '--event-color': drag.event?.color && cssColor(drag.event.color),\n gridColumn: `${bar.start + 1} / span ${bar.span}`,\n gridRow: 1,\n } as CSSProperties\n }\n aria-hidden\n >\n <span className={styles.timeGridBarTitle}>{drag.event?.title}</span>\n </div>\n );\n }\n\n const panes = STEPS.map((step) => {\n const paneRange = periodRange(period, stepDate(period, date, step, hidden), weekStartsOn, hidden);\n const start = paneRange.start;\n const dates = shownDays(start, dayDiff(start, paneRange.end), hidden);\n const allDay = packLanes(shown, dates, isAllDayLike);\n const lanes: LimitedLanes<E> = allDayOpen\n ? { visible: allDay, moreLane: 0, hidden: dates.map(() => 0) }\n : limitLanes(allDay, dates.length, ALL_DAY_LANES);\n return { step, start, dates, lanes };\n });\n const hasHidden = panes[1].lanes.hidden.some((count) => count > 0);\n const work = workingHours?.map((hour) => (clamp(hour, 0, 24) / 24) * 100);\n // Working from the evening into the morning, such as `[22, 6]`: shaded between its end and start.\n const overnight = work !== undefined && work[0] > work[1];\n const paneClass = (step: number) =>\n cx(pagerStyles.pagerPane, step === -1 && pagerStyles.pagerPanePrev, step === 1 && pagerStyles.pagerPaneNext);\n\n return (\n <div\n ref={scrollerRef}\n tabIndex={-1}\n className={styles.timeGrid}\n style={\n {\n '--days': columns.length,\n '--custom-calendar-hour-height': zoomRef.current ? `${zoomRef.current.hour}px` : undefined,\n '--work-start': work && `${Math.min(...work)}%`,\n '--work-end': work && `${Math.max(...work)}%`,\n } as CSSProperties\n }\n >\n <div ref={headRef} className={styles.timeGridHead}>\n <div className={styles.timeGridCorner}>\n {showWeekNumbers && (\n // Numbered by the ISO week holding most of the shown days, which the middle one is in.\n <span className={styles.timeGridWeekNumber}>\n {text.weekNumber(weekNumber(columns[Math.floor(columns.length / 2)]))}\n </span>\n )}\n {(hasHidden || allDayOpen) && (\n <ActionIcon\n className={cx(styles.timeGridToggle, allDayOpen && styles.timeGridToggleOpen)}\n icon={faChevronDown}\n title={text.allDay}\n aria-label={text.allDay}\n aria-expanded={allDayOpen}\n onClick={() => setAllDayOpen((open) => !open)}\n />\n )}\n </div>\n <div className={pagerStyles.pagerViewport}>\n <div ref={pager.trackRef} className={pagerStyles.pagerTrack}>\n {panes.map(({ step, start, dates, lanes }) => (\n <div\n key={dateToDay(start)}\n className={cx(paneClass(step), styles.timeGridHeadPane)}\n inert={step !== 0}\n aria-hidden={step !== 0 || undefined}\n >\n {dates.map((day) => {\n const isToday = isSameDay(day, now);\n const content = (\n <>\n <span className={styles.timeGridWeekday}>{formatWeekday(day, locale, 'short')}</span>\n <span className={cx(styles.timeGridDayNumber, isToday && styles.timeGridDayNumberToday)}>\n {formatDayNumber(day, locale)}\n </span>\n </>\n );\n const shared = {\n className: cx(styles.timeGridDayHeader, classNames?.dayHeader),\n style: slotStyles?.dayHeader,\n 'aria-current': isToday ? ('date' as const) : undefined,\n 'data-cal-head-day': dateToDay(day),\n };\n return columns.length > 1 && onOpenDay ? (\n <button\n key={dateToDay(day)}\n type='button'\n {...shared}\n className={cx(shared.className, styles.timeGridDayHeaderLink)}\n aria-label={formatLongDate(day, locale)}\n onClick={() => onOpenDay(day)}\n >\n {content}\n </button>\n ) : (\n <div key={dateToDay(day)} {...shared}>\n {content}\n </div>\n );\n })}\n <div\n ref={step === 0 ? allDayRef : undefined}\n className={cx(styles.timeGridAllDay, onSlotCreate && styles.timeGridAllDayCreatable)}\n aria-label={text.allDay}\n role='group'\n onClick={handleAllDayClick}\n >\n {lanes.visible.map(renderAllDayBar)}\n {lanes.hidden.map(\n (count, column) =>\n count > 0 && (\n <div\n key={`more-${column}`}\n aria-hidden\n data-cal-more\n className={styles.timeGridMore}\n style={{ gridColumn: column + 1, gridRow: lanes.moreLane + 1 }}\n onClick={() => setAllDayOpen(true)}\n >\n {text.more(count)}\n </div>\n ),\n )}\n {step === 0 && renderAllDayPreview(dates)}\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n\n <div ref={bodyRef} className={styles.timeGridBody}>\n <div className={styles.timeGridGutter} aria-hidden>\n {HOURS.map((hour) => (\n <span key={hour} className={styles.timeGridHour} style={{ top: `${(hour / 24) * 100}%` }}>\n {formatHour(hour, locale)}\n </span>\n ))}\n </div>\n <div className={pagerStyles.pagerViewport}>\n <div ref={pager.trackRef} className={pagerStyles.pagerTrack}>\n {panes.map(({ step, start, dates }) => (\n <div\n key={dateToDay(start)}\n ref={step === 0 ? currentRef : undefined}\n className={cx(paneClass(step), styles.timeGridBodyPane)}\n inert={step !== 0}\n aria-hidden={step !== 0 || undefined}\n >\n {dates.map((day) => {\n const isToday = isSameDay(day, now);\n return (\n <div\n key={dateToDay(day)}\n role='group'\n aria-label={formatLongDate(day, locale)}\n data-cal-column={dateToDay(day)}\n className={cx(\n styles.timeGridColumn,\n isToday && styles.timeGridColumnToday,\n work && styles.timeGridColumnWorking,\n overnight && styles.timeGridColumnWorkingOvernight,\n onSlotCreate && styles.timeGridColumnCreatable,\n classNames?.cell,\n )}\n style={slotStyles?.cell}\n onClick={(clickEvent) => handleColumnClick(clickEvent, day)}\n >\n {packDay(shown, day).map(renderBox)}\n {isToday && (\n <div\n className={styles.timeGridNow}\n style={{ top: `${(minutesOfDay(now) / MINUTES_PER_DAY) * 100}%` }}\n aria-hidden\n />\n )}\n {step === 0 && renderPreview(day)}\n </div>\n );\n })}\n {step === 0 && <div ref={slotRef} className={styles.timeGridSlot} aria-hidden />}\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport default TimeGrid;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use client";var e=`timeGrid_eQt1f`,t=`timeGrid-head_QeMAH`,n=`timeGrid-corner_ass6Y`,r=`timeGrid-toggle_q0Oh4`,i=`timeGrid-toggle-open_CkMZf`,a=`timeGrid-headPane_KOqbR`,o=`timeGrid-dayHeader_nyugU`,s=`timeGrid-dayHeader-link_vE861`,c=`timeGrid-dayNumber_3xDPg`,l=`timeGrid-dayNumber-today_em4ho`,u=`timeGrid-weekday_BEOk2`,d=`timeGrid-allDay_sBaRg`,f=`timeGrid-bar_bGt1p`,p=`timeGrid-bar-continuesBefore_XRW1T`,m=`timeGrid-bar-continuesAfter_BsjNh`,h=`timeGrid-bar-title_iVZsx`,g=`timeGrid-more_Fo6hf`,_=`timeGrid-body_Vzvbo`,v=`timeGrid-gutter_OuCf-`,y=`timeGrid-hour_wVF05`,b=`timeGrid-bodyPane_Ji1lF`,x=`timeGrid-column_mEJNy`,S=`timeGrid-column-today_goKa0`,C=`timeGrid-column-creatable_5MQ8P`,w=`timeGrid-event_qLWLI`,T=`timeGrid-event-short_akp1j`,E=`timeGrid-event-brief_AX4PC`,D=`timeGrid-resize_LdiRH`,O=`timeGrid-event-continuesBefore_uGyO5`,k=`timeGrid-event-continuesAfter_p-hcM`,A=`timeGrid-event-interactive_TXdJ8`,j=`timeGrid-event-dragged_UrxXL`,M=`timeGrid-event-title_uDvkI`,N=`timeGrid-event-time_O5W3b`,P=`timeGrid-preview_nfmke`,F=`timeGrid-preview-time_8hmVF`,I=`timeGrid-slot_s7iMI`,L=`timeGrid-now_Rs5aE`,R=`calendarNowPulse_DDoyI`,z={timeGrid:e,"timeGrid-head":`timeGrid-head_QeMAH`,timeGridHead:t,"timeGrid-corner":`timeGrid-corner_ass6Y`,timeGridCorner:n,"timeGrid-toggle":`timeGrid-toggle_q0Oh4`,timeGridToggle:r,"timeGrid-toggle-open":`timeGrid-toggle-open_CkMZf`,timeGridToggleOpen:i,"timeGrid-headPane":`timeGrid-headPane_KOqbR`,timeGridHeadPane:a,"timeGrid-dayHeader":`timeGrid-dayHeader_nyugU`,timeGridDayHeader:o,"timeGrid-dayHeader-link":`timeGrid-dayHeader-link_vE861`,timeGridDayHeaderLink:s,"timeGrid-dayNumber":`timeGrid-dayNumber_3xDPg`,timeGridDayNumber:c,"timeGrid-dayNumber-today":`timeGrid-dayNumber-today_em4ho`,timeGridDayNumberToday:l,"timeGrid-weekday":`timeGrid-weekday_BEOk2`,timeGridWeekday:u,"timeGrid-allDay":`timeGrid-allDay_sBaRg`,timeGridAllDay:d,"timeGrid-bar":`timeGrid-bar_bGt1p`,timeGridBar:f,"timeGrid-bar-continuesBefore":`timeGrid-bar-continuesBefore_XRW1T`,timeGridBarContinuesBefore:p,"timeGrid-bar-continuesAfter":`timeGrid-bar-continuesAfter_BsjNh`,timeGridBarContinuesAfter:m,"timeGrid-bar-title":`timeGrid-bar-title_iVZsx`,timeGridBarTitle:h,"timeGrid-more":`timeGrid-more_Fo6hf`,timeGridMore:g,"timeGrid-body":`timeGrid-body_Vzvbo`,timeGridBody:_,"timeGrid-gutter":`timeGrid-gutter_OuCf-`,timeGridGutter:v,"timeGrid-hour":`timeGrid-hour_wVF05`,timeGridHour:y,"timeGrid-bodyPane":`timeGrid-bodyPane_Ji1lF`,timeGridBodyPane:b,"timeGrid-column":`timeGrid-column_mEJNy`,timeGridColumn:x,"timeGrid-column-today":`timeGrid-column-today_goKa0`,timeGridColumnToday:S,"timeGrid-column-creatable":`timeGrid-column-creatable_5MQ8P`,timeGridColumnCreatable:C,"timeGrid-event":`timeGrid-event_qLWLI`,timeGridEvent:w,"timeGrid-event-short":`timeGrid-event-short_akp1j`,timeGridEventShort:T,"timeGrid-event-brief":`timeGrid-event-brief_AX4PC`,timeGridEventBrief:E,"timeGrid-resize":`timeGrid-resize_LdiRH`,timeGridResize:D,"timeGrid-event-continuesBefore":`timeGrid-event-continuesBefore_uGyO5`,timeGridEventContinuesBefore:O,"timeGrid-event-continuesAfter":`timeGrid-event-continuesAfter_p-hcM`,timeGridEventContinuesAfter:k,"timeGrid-event-interactive":`timeGrid-event-interactive_TXdJ8`,timeGridEventInteractive:A,"timeGrid-event-dragged":`timeGrid-event-dragged_UrxXL`,timeGridEventDragged:j,"timeGrid-event-title":`timeGrid-event-title_uDvkI`,timeGridEventTitle:M,"timeGrid-event-time":`timeGrid-event-time_O5W3b`,timeGridEventTime:N,"timeGrid-preview":`timeGrid-preview_nfmke`,timeGridPreview:P,"timeGrid-preview-time":`timeGrid-preview-time_8hmVF`,timeGridPreviewTime:F,"timeGrid-slot":`timeGrid-slot_s7iMI`,timeGridSlot:I,"timeGrid-now":`timeGrid-now_Rs5aE`,timeGridNow:L,calendarNowPulse:R};export{R as calendarNowPulse,z as default,e as timeGrid,d as timeGridAllDay,f as timeGridBar,m as timeGridBarContinuesAfter,p as timeGridBarContinuesBefore,h as timeGridBarTitle,_ as timeGridBody,b as timeGridBodyPane,x as timeGridColumn,C as timeGridColumnCreatable,S as timeGridColumnToday,n as timeGridCorner,o as timeGridDayHeader,s as timeGridDayHeaderLink,c as timeGridDayNumber,l as timeGridDayNumberToday,w as timeGridEvent,E as timeGridEventBrief,k as timeGridEventContinuesAfter,O as timeGridEventContinuesBefore,j as timeGridEventDragged,A as timeGridEventInteractive,T as timeGridEventShort,N as timeGridEventTime,M as timeGridEventTitle,v as timeGridGutter,t as timeGridHead,a as timeGridHeadPane,y as timeGridHour,g as timeGridMore,L as timeGridNow,P as timeGridPreview,F as timeGridPreviewTime,D as timeGridResize,I as timeGridSlot,r as timeGridToggle,i as timeGridToggleOpen,u as timeGridWeekday};
1
+ "use client";var e=`timeGrid_eQt1f`,t=`timeGrid-head_QeMAH`,n=`timeGrid-corner_ass6Y`,r=`timeGrid-weekNumber_F7Cap`,i=`timeGrid-toggle_q0Oh4`,a=`timeGrid-toggle-open_CkMZf`,o=`timeGrid-headPane_KOqbR`,s=`timeGrid-dayHeader_nyugU`,c=`timeGrid-dayHeader-link_vE861`,l=`timeGrid-dayNumber_3xDPg`,u=`timeGrid-dayNumber-today_em4ho`,d=`timeGrid-weekday_BEOk2`,f=`timeGrid-allDay_sBaRg`,p=`timeGrid-allDay-creatable_H-gdV`,m=`timeGrid-bar_bGt1p`,h=`timeGrid-bar-continuesBefore_XRW1T`,g=`timeGrid-bar-continuesAfter_BsjNh`,_=`timeGrid-bar-title_iVZsx`,v=`timeGrid-bar-dragged_wxIVh`,y=`timeGrid-bar-preview_7L-kL`,b=`timeGrid-more_Fo6hf`,x=`timeGrid-body_Vzvbo`,S=`timeGrid-gutter_OuCf-`,C=`timeGrid-hour_wVF05`,w=`timeGrid-bodyPane_Ji1lF`,T=`timeGrid-column_mEJNy`,E=`timeGrid-column-today_goKa0`,D=`timeGrid-column-working_UQmgz`,O=`timeGrid-column-working-overnight_0wWgI`,k=`timeGrid-column-creatable_5MQ8P`,A=`timeGrid-event_qLWLI`,j=`timeGrid-event-short_akp1j`,M=`timeGrid-event-brief_AX4PC`,N=`timeGrid-resize_LdiRH`,P=`timeGrid-event-continuesBefore_uGyO5`,F=`timeGrid-event-continuesAfter_p-hcM`,I=`timeGrid-event-interactive_TXdJ8`,L=`timeGrid-event-dragged_UrxXL`,R=`timeGrid-event-title_uDvkI`,z=`timeGrid-event-time_O5W3b`,B=`timeGrid-preview_nfmke`,V=`timeGrid-preview-time_8hmVF`,H=`timeGrid-slot_s7iMI`,U=`timeGrid-now_Rs5aE`,W=`calendarNowPulse_DDoyI`,G={timeGrid:e,"timeGrid-head":`timeGrid-head_QeMAH`,timeGridHead:t,"timeGrid-corner":`timeGrid-corner_ass6Y`,timeGridCorner:n,"timeGrid-weekNumber":`timeGrid-weekNumber_F7Cap`,timeGridWeekNumber:r,"timeGrid-toggle":`timeGrid-toggle_q0Oh4`,timeGridToggle:i,"timeGrid-toggle-open":`timeGrid-toggle-open_CkMZf`,timeGridToggleOpen:a,"timeGrid-headPane":`timeGrid-headPane_KOqbR`,timeGridHeadPane:o,"timeGrid-dayHeader":`timeGrid-dayHeader_nyugU`,timeGridDayHeader:s,"timeGrid-dayHeader-link":`timeGrid-dayHeader-link_vE861`,timeGridDayHeaderLink:c,"timeGrid-dayNumber":`timeGrid-dayNumber_3xDPg`,timeGridDayNumber:l,"timeGrid-dayNumber-today":`timeGrid-dayNumber-today_em4ho`,timeGridDayNumberToday:u,"timeGrid-weekday":`timeGrid-weekday_BEOk2`,timeGridWeekday:d,"timeGrid-allDay":`timeGrid-allDay_sBaRg`,timeGridAllDay:f,"timeGrid-allDay-creatable":`timeGrid-allDay-creatable_H-gdV`,timeGridAllDayCreatable:p,"timeGrid-bar":`timeGrid-bar_bGt1p`,timeGridBar:m,"timeGrid-bar-continuesBefore":`timeGrid-bar-continuesBefore_XRW1T`,timeGridBarContinuesBefore:h,"timeGrid-bar-continuesAfter":`timeGrid-bar-continuesAfter_BsjNh`,timeGridBarContinuesAfter:g,"timeGrid-bar-title":`timeGrid-bar-title_iVZsx`,timeGridBarTitle:_,"timeGrid-bar-dragged":`timeGrid-bar-dragged_wxIVh`,timeGridBarDragged:v,"timeGrid-bar-preview":`timeGrid-bar-preview_7L-kL`,timeGridBarPreview:y,"timeGrid-more":`timeGrid-more_Fo6hf`,timeGridMore:b,"timeGrid-body":`timeGrid-body_Vzvbo`,timeGridBody:x,"timeGrid-gutter":`timeGrid-gutter_OuCf-`,timeGridGutter:S,"timeGrid-hour":`timeGrid-hour_wVF05`,timeGridHour:C,"timeGrid-bodyPane":`timeGrid-bodyPane_Ji1lF`,timeGridBodyPane:w,"timeGrid-column":`timeGrid-column_mEJNy`,timeGridColumn:T,"timeGrid-column-today":`timeGrid-column-today_goKa0`,timeGridColumnToday:E,"timeGrid-column-working":`timeGrid-column-working_UQmgz`,timeGridColumnWorking:D,"timeGrid-column-working-overnight":`timeGrid-column-working-overnight_0wWgI`,timeGridColumnWorkingOvernight:O,"timeGrid-column-creatable":`timeGrid-column-creatable_5MQ8P`,timeGridColumnCreatable:k,"timeGrid-event":`timeGrid-event_qLWLI`,timeGridEvent:A,"timeGrid-event-short":`timeGrid-event-short_akp1j`,timeGridEventShort:j,"timeGrid-event-brief":`timeGrid-event-brief_AX4PC`,timeGridEventBrief:M,"timeGrid-resize":`timeGrid-resize_LdiRH`,timeGridResize:N,"timeGrid-event-continuesBefore":`timeGrid-event-continuesBefore_uGyO5`,timeGridEventContinuesBefore:P,"timeGrid-event-continuesAfter":`timeGrid-event-continuesAfter_p-hcM`,timeGridEventContinuesAfter:F,"timeGrid-event-interactive":`timeGrid-event-interactive_TXdJ8`,timeGridEventInteractive:I,"timeGrid-event-dragged":`timeGrid-event-dragged_UrxXL`,timeGridEventDragged:L,"timeGrid-event-title":`timeGrid-event-title_uDvkI`,timeGridEventTitle:R,"timeGrid-event-time":`timeGrid-event-time_O5W3b`,timeGridEventTime:z,"timeGrid-preview":`timeGrid-preview_nfmke`,timeGridPreview:B,"timeGrid-preview-time":`timeGrid-preview-time_8hmVF`,timeGridPreviewTime:V,"timeGrid-slot":`timeGrid-slot_s7iMI`,timeGridSlot:H,"timeGrid-now":`timeGrid-now_Rs5aE`,timeGridNow:U,calendarNowPulse:W};export{W as calendarNowPulse,G as default,e as timeGrid,f as timeGridAllDay,p as timeGridAllDayCreatable,m as timeGridBar,g as timeGridBarContinuesAfter,h as timeGridBarContinuesBefore,v as timeGridBarDragged,y as timeGridBarPreview,_ as timeGridBarTitle,x as timeGridBody,w as timeGridBodyPane,T as timeGridColumn,k as timeGridColumnCreatable,E as timeGridColumnToday,D as timeGridColumnWorking,O as timeGridColumnWorkingOvernight,n as timeGridCorner,s as timeGridDayHeader,c as timeGridDayHeaderLink,l as timeGridDayNumber,u as timeGridDayNumberToday,A as timeGridEvent,M as timeGridEventBrief,F as timeGridEventContinuesAfter,P as timeGridEventContinuesBefore,L as timeGridEventDragged,I as timeGridEventInteractive,j as timeGridEventShort,z as timeGridEventTime,R as timeGridEventTitle,S as timeGridGutter,t as timeGridHead,o as timeGridHeadPane,C as timeGridHour,b as timeGridMore,U as timeGridNow,B as timeGridPreview,V as timeGridPreviewTime,N as timeGridResize,H as timeGridSlot,i as timeGridToggle,a as timeGridToggleOpen,r as timeGridWeekNumber,d as timeGridWeekday};
2
2
  //# sourceMappingURL=timeGrid.module.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeGrid.module.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/timeGrid/timeGrid.module.pcss"],"sourcesContent":["/* One vertical scroller holds the sticky head and the body, so the head's day columns line up\n with the body's by construction, scrollbar or not. Only the two tracks inside move sideways.\n Everything positioned in time uses percentages of the day, so zooming rewrites one custom\n property and nothing else. */\n.timeGrid {\n --gutter: 3.5em;\n --lane: 1.375em;\n\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n outline: none;\n user-select: none;\n -webkit-touch-callout: none;\n\n /* Horizontal swipes page, pinches zoom, vertical drags still scroll. */\n touch-action: pan-y;\n\n &-head {\n position: sticky;\n top: 0;\n z-index: 1;\n display: grid;\n grid-template-columns: var(--gutter) minmax(0, 1fr);\n border-bottom: 1px solid var(--border-color);\n background: var(--background);\n }\n\n &-corner {\n display: flex;\n align-items: flex-end;\n justify-content: center;\n padding-bottom: 0.25em;\n }\n\n &-toggle {\n display: grid;\n place-items: center;\n width: 1.75em;\n height: 1.75em;\n padding: 0;\n border: 0;\n border-radius: 50%;\n background: transparent;\n color: var(--text-dark);\n font-size: 0.75em;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: transform 0.2s ease;\n\n &:hover {\n background: var(--background-accent-light);\n }\n\n &:focus-visible {\n outline: 2px solid var(--focus-border-color, var(--primary-color));\n }\n\n &-open {\n transform: rotate(180deg);\n }\n }\n\n &-headPane {\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n align-content: start;\n background: var(--background);\n }\n\n &-dayHeader {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.125em;\n padding: 0.375em 0 0.25em;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n\n &-link {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover .timeGrid-dayNumber:not(.timeGrid-dayNumber-today) {\n background: var(--background-accent-light);\n }\n\n &:focus-visible {\n outline: 2px solid var(--focus-border-color, var(--primary-color));\n outline-offset: -2px;\n border-radius: var(--default-border-radius);\n }\n }\n }\n\n &-weekday {\n font-size: 0.6875em;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--text-dark);\n }\n\n &-dayNumber {\n display: grid;\n place-items: center;\n width: 1.875em;\n height: 1.875em;\n border-radius: 50%;\n font-size: 1.125em;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n transition: background-color 0.15s ease;\n\n &-today {\n background: var(--custom-calendar-today-color);\n color: var(--text-on-primary);\n font-weight: 700;\n }\n }\n\n &-allDay {\n grid-column: 1 / -1;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n grid-auto-rows: var(--lane);\n row-gap: 2px;\n min-height: 0.5em;\n padding: 2px 0 4px;\n }\n\n &-bar {\n --event: var(--event-color, var(--primary-color));\n\n min-width: 0;\n margin: 0 2px;\n padding: 0 0.5em;\n overflow: hidden;\n border: 0;\n border-radius: var(--custom-calendar-event-radius);\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n box-shadow: inset 3px 0 0 var(--event);\n color: var(--text-color);\n font: inherit;\n font-size: 0.75em;\n font-weight: 500;\n text-align: left;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n }\n\n &:focus-visible {\n outline: 2px solid var(--focus-border-color, var(--primary-color));\n }\n\n &-continuesBefore {\n margin-left: 0;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-shadow: none;\n }\n\n &-continuesAfter {\n margin-right: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-title {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n &-more {\n align-self: center;\n margin: 0 2px;\n padding: 0 0.5em;\n border-radius: var(--custom-calendar-event-radius);\n font-size: 0.75em;\n font-weight: 600;\n white-space: nowrap;\n color: var(--text-dark);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: var(--background-accent-light);\n }\n }\n\n /* Its own stacking context, which keeps everything drawn in the hours under the sticky head\n above. Inside it, the now-line and the drag preview come after the events in the markup,\n and so paint over them without a z-index. */\n &-body {\n isolation: isolate;\n display: grid;\n grid-template-columns: var(--gutter) minmax(0, 1fr);\n height: calc(24 * var(--custom-calendar-hour-height));\n }\n\n &-gutter {\n position: relative;\n }\n\n &-hour {\n position: absolute;\n right: 0.625em;\n font-size: 0.6875em;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n color: var(--text-light);\n transform: translateY(-50%);\n }\n\n &-bodyPane {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n height: 100%;\n background: var(--background);\n }\n\n /* Hour lines, and fainter half-hour lines between them. */\n &-column {\n /* Events leave a strip on the right free, so there is always somewhere to press to create. */\n --column-width: calc(100% - 0.75em);\n\n position: relative;\n min-width: 0;\n border-left: 1px solid var(--border-color);\n background-image:\n linear-gradient(var(--border-color) 1px, transparent 1px),\n linear-gradient(color-mix(in oklab, var(--border-color) 45%, transparent) 1px, transparent 1px);\n background-position:\n 0 0,\n 0 calc(var(--custom-calendar-hour-height) / 2);\n background-size: 100% var(--custom-calendar-hour-height);\n\n &-today {\n background-color: color-mix(in oklab, var(--custom-calendar-today-color) 4%, transparent);\n }\n\n &-creatable {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n }\n\n &-event {\n --event: var(--event-color, var(--primary-color));\n\n position: absolute;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n min-width: 0;\n height: var(--span);\n margin: 0;\n padding: 0.2em 0.45em 0.2em 0.6em;\n overflow: hidden;\n container-type: size;\n border: 0;\n border-radius: var(--custom-calendar-event-radius);\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n\n /* The outline in the page colour keeps side-by-side events apart. */\n box-shadow:\n inset 3px 0 0 var(--event),\n 0 0 0 1px var(--background);\n color: var(--text-color);\n font: inherit;\n font-size: 0.75em;\n line-height: 1.3;\n text-align: left;\n transition:\n background-color 0.15s ease,\n opacity 0.15s ease;\n\n &:hover {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n }\n\n &:focus-visible {\n z-index: 1;\n outline: 2px solid var(--focus-border-color, var(--primary-color));\n }\n\n &-short {\n flex-direction: row;\n\n /* Not `baseline`: a 15-minute event is shorter than its line, and centring clips it evenly\n rather than cutting off the bottom. Title and time share a font size, so they still line up. */\n align-items: center;\n gap: 0.4em;\n padding-block: 0;\n }\n\n /* Too short for its label, which would be clipped to nothing: a bar of its real length, and\n the label on a line of its own beneath it, in the room packDay leaves for it. */\n &-brief {\n /* One line, with room for the descenders that a line height of 1 clips in Firefox. Keep\n BRIEF_LABEL_MINUTES in layout.ts at least this tall at the default hour height. */\n --label: 1.25em;\n\n isolation: isolate;\n height: calc(var(--span) + var(--label));\n align-items: flex-end;\n line-height: var(--label);\n background: none;\n box-shadow: none;\n\n /* Under the label, which it covers once zoomed in: see the @container rule below. */\n &::before {\n content: '';\n position: absolute;\n z-index: -1;\n top: 0;\n right: 0;\n left: 0;\n height: max(2px, 100% - var(--label));\n border-radius: inherit;\n background: var(--event);\n transition:\n background-color 0.15s ease,\n opacity 0.15s ease;\n }\n\n &:hover {\n background: none;\n\n &::before {\n opacity: 0.75;\n }\n }\n\n /* On the bar's end, which is the event's, rather than under the label. */\n .timeGrid-resize {\n bottom: calc(var(--label) - 0.3em);\n height: 0.6em;\n max-height: none;\n }\n }\n\n &-continuesBefore {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n &-continuesAfter {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-interactive {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n\n &-dragged {\n opacity: 0.4;\n }\n\n &-title {\n flex: none;\n overflow: hidden;\n font-weight: 600;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-time {\n overflow: hidden;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: var(--text-dark);\n }\n }\n\n &-resize {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 0.625em;\n\n /* Half at most, so a short event keeps a part that moves it: a finger's grip is taller. */\n max-height: 50%;\n cursor: ns-resize;\n\n /* A visible grip where a finger is the pointer, since there is no hover to reveal it. */\n @media (pointer: coarse) {\n height: 1.5em;\n\n &::after {\n content: '';\n position: absolute;\n bottom: 0.3em;\n left: 50%;\n width: 1.5em;\n height: 0.25em;\n border-radius: 0.125em;\n background: color-mix(in oklab, var(--event) 70%, var(--background));\n translate: -50% 0;\n }\n }\n }\n\n &-preview {\n --event: var(--event-color, var(--primary-color));\n\n position: absolute;\n left: 0;\n width: var(--column-width);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n padding: 0.2em 0.45em 0.2em 0.6em;\n overflow: hidden;\n border-radius: var(--custom-calendar-event-radius);\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n box-shadow:\n inset 3px 0 0 var(--event),\n 0 0.5em 1.25em color-mix(in oklab, var(--text-color) 22%, transparent);\n color: var(--text-color);\n font-size: 0.75em;\n line-height: 1.3;\n pointer-events: none;\n\n &-time {\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n }\n }\n\n /* The anchor `onSlotCreate` hands out, moved over each new slot. Transparent rather than\n hidden, so it keeps the box a popover measures and anchors to. */\n &-slot {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n }\n\n &-now {\n position: absolute;\n right: 0;\n left: 0;\n height: 2px;\n margin-top: -1px;\n background: var(--custom-calendar-now-color);\n pointer-events: none;\n\n &::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 0;\n width: 0.625em;\n height: 0.625em;\n border-radius: 50%;\n background: var(--custom-calendar-now-color);\n translate: -50% -50%;\n animation: calendarNowPulse 2.4s ease-in-out infinite;\n }\n }\n}\n\n/* Zoomed in until its bar holds its label, a brief event is drawn like any other, its label\n centred in the bar. 2.5em is twice the label's line: a condition cannot read `--label`. */\n@container (height >= 2.5em) {\n .timeGrid-event-brief::before {\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n box-shadow: inset 3px 0 0 var(--event);\n }\n\n .timeGrid-event-brief:hover::before {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n opacity: 1;\n }\n\n .timeGrid-event-brief .timeGrid-event-title,\n .timeGrid-event-brief .timeGrid-event-time {\n align-self: flex-start;\n margin-top: calc((100cqh - 2 * var(--label)) / 2);\n }\n}\n\n/* An event shorter than its text shows its colour alone, not a slice of clipped letters. The `em`\n is the event's own font size, and zooming in brings the text back. */\n@container (height < 0.8em) {\n .timeGrid-event-title,\n .timeGrid-event-time {\n display: none;\n }\n}\n\n@keyframes calendarNowPulse {\n 50% {\n box-shadow: 0 0 0 0.3em color-mix(in oklab, var(--custom-calendar-now-color) 25%, transparent);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .timeGrid-toggle {\n transition: none;\n }\n\n .timeGrid-now::before {\n animation: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"timeGrid.module.mjs","names":[],"sources":["../../../../../../package/common/calendar/components/timeGrid/timeGrid.module.pcss"],"sourcesContent":["/* One vertical scroller holds the sticky head and the body, so the head's day columns line up\n with the body's by construction, scrollbar or not. Only the two tracks inside move sideways.\n Everything positioned in time uses percentages of the day, so zooming rewrites one custom\n property and nothing else. */\n.timeGrid {\n --gutter: 3.5em;\n --lane: 1.375em;\n\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overscroll-behavior: contain;\n outline: none;\n user-select: none;\n -webkit-touch-callout: none;\n\n /* Horizontal swipes page, pinches zoom, vertical drags still scroll. */\n touch-action: pan-y;\n\n &-head {\n position: sticky;\n top: 0;\n z-index: 1;\n display: grid;\n grid-template-columns: var(--gutter) minmax(0, 1fr);\n border-bottom: 1px solid var(--border-color);\n background: var(--background);\n }\n\n &-corner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-end;\n padding-bottom: 0.25em;\n }\n\n /* At the top, level with the weekday names, while the toggle stays at the bottom. Wraps rather\n than spill over the first day: a translation such as `Semaine 40` is wider than the gutter. */\n &-weekNumber {\n max-width: 100%;\n margin-bottom: auto;\n padding-top: 0.55em;\n overflow-wrap: anywhere;\n font-size: 0.6875em;\n font-weight: 600;\n text-align: center;\n color: var(--text-light);\n }\n\n /* Points down to expand and up to collapse: the rotation says which, so it stays. Two classes,\n to outrank Button's own font-size whichever stylesheet loads first. */\n & &-toggle {\n font-size: 0.75em;\n transition: transform 0.2s ease;\n\n &-open {\n transform: rotate(180deg);\n }\n }\n\n &-headPane {\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n align-content: start;\n background: var(--background);\n }\n\n &-dayHeader {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 0.125em;\n padding: 0.375em 0 0.25em;\n border: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n\n &-link {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover .timeGrid-dayNumber:not(.timeGrid-dayNumber-today) {\n background: var(--background-accent-light);\n }\n\n &:focus-visible {\n outline: 2px solid var(--focus-border-color, var(--primary-color));\n outline-offset: -2px;\n border-radius: var(--default-border-radius);\n }\n }\n }\n\n &-weekday {\n font-size: 0.6875em;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--text-dark);\n }\n\n &-dayNumber {\n display: grid;\n place-items: center;\n width: 1.875em;\n height: 1.875em;\n border-radius: 50%;\n font-size: 1.125em;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n transition: background-color 0.15s ease;\n\n &-today {\n background: var(--custom-calendar-today-color);\n color: var(--text-on-primary);\n font-weight: 700;\n }\n }\n\n &-allDay {\n grid-column: 1 / -1;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n grid-auto-rows: var(--lane);\n row-gap: 2px;\n min-height: 0.5em;\n padding: 2px 0 4px;\n\n /* A lane's height even when empty, so there is something to click to create. */\n &-creatable {\n min-height: var(--lane);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n }\n\n &-bar {\n --event: var(--event-color, var(--primary-color));\n\n min-width: 0;\n margin: 0 2px;\n padding: 0 0.5em;\n overflow: hidden;\n border: 0;\n border-radius: var(--custom-calendar-event-radius);\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n box-shadow: inset 3px 0 0 var(--event);\n color: var(--text-color);\n font: inherit;\n font-size: 0.75em;\n font-weight: 500;\n text-align: left;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n }\n\n &:focus-visible {\n outline: 2px solid var(--focus-border-color, var(--primary-color));\n }\n\n &-continuesBefore {\n margin-left: 0;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n box-shadow: none;\n }\n\n &-continuesAfter {\n margin-right: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-title {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n &-dragged {\n opacity: 0.4;\n }\n\n &-preview {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n box-shadow:\n inset 3px 0 0 var(--event),\n 0 0.25em 0.75em color-mix(in oklab, var(--text-color) 22%, transparent);\n pointer-events: none;\n }\n }\n\n &-more {\n align-self: center;\n margin: 0 2px;\n padding: 0 0.5em;\n border-radius: var(--custom-calendar-event-radius);\n font-size: 0.75em;\n font-weight: 600;\n white-space: nowrap;\n color: var(--text-dark);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n\n &:hover {\n background: var(--background-accent-light);\n }\n }\n\n /* Its own stacking context, which keeps everything drawn in the hours under the sticky head\n above. Inside it, the now-line and the drag preview come after the events in the markup,\n and so paint over them without a z-index. */\n &-body {\n isolation: isolate;\n display: grid;\n grid-template-columns: var(--gutter) minmax(0, 1fr);\n height: calc(24 * var(--custom-calendar-hour-height));\n }\n\n &-gutter {\n position: relative;\n }\n\n &-hour {\n position: absolute;\n right: 0.625em;\n font-size: 0.6875em;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n color: var(--text-light);\n transform: translateY(-50%);\n }\n\n &-bodyPane {\n position: relative;\n display: grid;\n grid-template-columns: repeat(var(--days), minmax(0, 1fr));\n height: 100%;\n background: var(--background);\n }\n\n /* Hour lines, and fainter half-hour lines between them. */\n &-column {\n /* Events leave a strip on the right free, so there is always somewhere to press to create. */\n --column-width: calc(100% - 0.75em);\n --hour-line: linear-gradient(var(--border-color) 1px, transparent 1px);\n --half-hour-line: linear-gradient(color-mix(in oklab, var(--border-color) 45%, transparent) 1px, transparent 1px);\n\n position: relative;\n min-width: 0;\n border-left: 1px solid var(--border-color);\n background-image: var(--hour-line), var(--half-hour-line);\n background-position:\n 0 0,\n 0 calc(var(--custom-calendar-hour-height) / 2);\n background-size: 100% var(--custom-calendar-hour-height);\n\n &-today {\n background-color: color-mix(in oklab, var(--custom-calendar-today-color) 4%, transparent);\n }\n\n /* A layer under the hour lines rather than over them, so it can be opaque and still let them\n show, and over today's tint, which is the background colour. */\n &-working {\n --outside: var(--custom-calendar-off-hours-color);\n --inside: transparent;\n\n background-image:\n var(--hour-line), var(--half-hour-line),\n linear-gradient(\n var(--outside) var(--work-start),\n var(--inside) var(--work-start) var(--work-end),\n var(--outside) var(--work-end)\n );\n background-position:\n 0 0,\n 0 calc(var(--custom-calendar-hour-height) / 2),\n 0 0;\n background-size:\n 100% var(--custom-calendar-hour-height),\n 100% var(--custom-calendar-hour-height),\n 100% 100%;\n\n /* `--work-start` is the earlier hour, so an overnight shift is the part outside the band. */\n &-overnight {\n --outside: transparent;\n --inside: var(--custom-calendar-off-hours-color);\n }\n }\n\n &-creatable {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n }\n\n &-event {\n --event: var(--event-color, var(--primary-color));\n\n position: absolute;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n min-width: 0;\n height: var(--span);\n margin: 0;\n padding: 0.2em 0.45em 0.2em 0.6em;\n overflow: hidden;\n container-type: size;\n border: 0;\n border-radius: var(--custom-calendar-event-radius);\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n\n /* The outline in the page colour keeps side-by-side events apart. */\n box-shadow:\n inset 3px 0 0 var(--event),\n 0 0 0 1px var(--background);\n color: var(--text-color);\n font: inherit;\n font-size: 0.75em;\n line-height: 1.3;\n text-align: left;\n transition:\n background-color 0.15s ease,\n opacity 0.15s ease;\n\n &:hover {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n }\n\n &:focus-visible {\n z-index: 1;\n outline: 2px solid var(--focus-border-color, var(--primary-color));\n }\n\n &-short {\n flex-direction: row;\n\n /* Not `baseline`: a 15-minute event is shorter than its line, and centring clips it evenly\n rather than cutting off the bottom. Title and time share a font size, so they still line up. */\n align-items: center;\n gap: 0.4em;\n padding-block: 0;\n }\n\n /* Too short for its label, which would be clipped to nothing: a bar of its real length, and\n the label on a line of its own beneath it, in the room packDay leaves for it. */\n &-brief {\n /* One line, with room for the descenders that a line height of 1 clips in Firefox. Keep\n BRIEF_LABEL_MINUTES in layout.ts at least this tall at the default hour height. */\n --label: 1.25em;\n\n isolation: isolate;\n height: calc(var(--span) + var(--label));\n align-items: flex-end;\n line-height: var(--label);\n background: none;\n box-shadow: none;\n\n /* Under the label, which it covers once zoomed in: see the @container rule below. */\n &::before {\n content: '';\n position: absolute;\n z-index: -1;\n top: 0;\n right: 0;\n left: 0;\n height: max(2px, 100% - var(--label));\n border-radius: inherit;\n background: var(--event);\n transition:\n background-color 0.15s ease,\n opacity 0.15s ease;\n }\n\n &:hover {\n background: none;\n\n &::before {\n opacity: 0.75;\n }\n }\n\n /* On the bar's end, which is the event's, rather than under the label. */\n .timeGrid-resize {\n bottom: calc(var(--label) - 0.3em);\n height: 0.6em;\n max-height: none;\n }\n }\n\n &-continuesBefore {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n &-continuesAfter {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-interactive {\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n\n &-dragged {\n opacity: 0.4;\n }\n\n &-title {\n flex: none;\n overflow: hidden;\n font-weight: 600;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-time {\n overflow: hidden;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: var(--text-dark);\n }\n }\n\n &-resize {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 0.625em;\n\n /* Half at most, so a short event keeps a part that moves it: a finger's grip is taller. */\n max-height: 50%;\n cursor: ns-resize;\n\n /* A visible grip where a finger is the pointer, since there is no hover to reveal it. */\n @media (pointer: coarse) {\n height: 1.5em;\n\n &::after {\n content: '';\n position: absolute;\n bottom: 0.3em;\n left: 50%;\n width: 1.5em;\n height: 0.25em;\n border-radius: 0.125em;\n background: color-mix(in oklab, var(--event) 70%, var(--background));\n translate: -50% 0;\n }\n }\n }\n\n &-preview {\n --event: var(--event-color, var(--primary-color));\n\n position: absolute;\n left: 0;\n width: var(--column-width);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n padding: 0.2em 0.45em 0.2em 0.6em;\n overflow: hidden;\n border-radius: var(--custom-calendar-event-radius);\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n box-shadow:\n inset 3px 0 0 var(--event),\n 0 0.5em 1.25em color-mix(in oklab, var(--text-color) 22%, transparent);\n color: var(--text-color);\n font-size: 0.75em;\n line-height: 1.3;\n pointer-events: none;\n\n &-time {\n font-weight: 600;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n }\n }\n\n /* The anchor `onSlotCreate` hands out, moved over each new slot. Transparent rather than\n hidden, so it keeps the box a popover measures and anchors to. */\n &-slot {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n }\n\n &-now {\n position: absolute;\n right: 0;\n left: 0;\n height: 2px;\n margin-top: -1px;\n background: var(--custom-calendar-now-color);\n pointer-events: none;\n\n &::before {\n content: '';\n position: absolute;\n top: 50%;\n left: 0;\n width: 0.625em;\n height: 0.625em;\n border-radius: 50%;\n background: var(--custom-calendar-now-color);\n translate: -50% -50%;\n animation: calendarNowPulse 2.4s ease-in-out infinite;\n }\n }\n}\n\n/* Zoomed in until its bar holds its label, a brief event is drawn like any other, its label\n centred in the bar. 2.5em is twice the label's line: a condition cannot read `--label`. */\n@container (height >= 2.5em) {\n .timeGrid-event-brief::before {\n background: color-mix(in oklab, var(--event) 22%, var(--background));\n box-shadow: inset 3px 0 0 var(--event);\n }\n\n .timeGrid-event-brief:hover::before {\n background: color-mix(in oklab, var(--event) 32%, var(--background));\n opacity: 1;\n }\n\n .timeGrid-event-brief .timeGrid-event-title,\n .timeGrid-event-brief .timeGrid-event-time {\n align-self: flex-start;\n margin-top: calc((100cqh - 2 * var(--label)) / 2);\n }\n}\n\n/* An event shorter than its text shows its colour alone, not a slice of clipped letters. The `em`\n is the event's own font size, and zooming in brings the text back. */\n@container (height < 0.8em) {\n .timeGrid-event-title,\n .timeGrid-event-time {\n display: none;\n }\n}\n\n@keyframes calendarNowPulse {\n 50% {\n box-shadow: 0 0 0 0.3em color-mix(in oklab, var(--custom-calendar-now-color) 25%, transparent);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .timeGrid .timeGrid-toggle {\n transition: none;\n }\n\n .timeGrid-now::before {\n animation: none;\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- "use client";import{dateToDay as e}from"../utils/day.mjs";import{CalendarView as t}from"./calendar.types.mjs";var n=1440;function r(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function i(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)}function a(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}function o(e,t){return new Date(e,t+1,0).getDate()}function s(e,t){let n=new Date(e.getFullYear(),e.getMonth()+t,1),r=Math.min(e.getDate(),o(n.getFullYear(),n.getMonth()));return new Date(n.getFullYear(),n.getMonth(),r)}function c(e){return new Date(e.getFullYear(),e.getMonth(),1)}function l(e,t){return i(e,-((e.getDay()-t+7)%7))}function u(e,t){let n=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate()),r=Date.UTC(t.getFullYear(),t.getMonth(),t.getDate());return Math.round((r-n)/864e5)}function d(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function f(e){return e.getHours()*60+e.getMinutes()}function p(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,t)}function m(e,t,n){return t>e?t:new Date(e.getTime()+n*6e4)}function h(e,n,i){switch(e){case t.Week:return l(n,i);case t.Day:return r(n);default:return c(n)}}function g(e,n,r){let a=h(e,n,r);switch(e){case t.Month:{let e=l(a,r);return{start:e,end:i(e,42)}}case t.Week:return{start:a,end:i(a,7)};case t.Day:return{start:a,end:i(a,1)};default:return{start:a,end:s(a,1)}}}var _=new Set;function v(e){let t=new Set(e);return t.size===0||[0,1,2,3,4,5,6].every(e=>t.has(e))?_:t}function y(e,t,n=1){let a=r(e);for(;t.has(a.getDay());)a=i(a,n);return a}function b(e,n,r,a=_){switch(e){case t.Week:return i(n,7*r);case t.Day:{let e=r<0?-1:1,t=n;for(let n=0;n<Math.abs(r);n++)t=y(i(t,e),a,e);return t}default:return s(n,r)}}function x(e,t,n,r=_){return{start:g(e,b(e,t,-1,r),n).start,end:g(e,b(e,t,1,r),n).end}}function S(e,t){return Array.from({length:t},(t,n)=>i(e,n))}function C(e,t,n=_){return S(e,t).filter(e=>!n.has(e.getDay()))}var w={ArrowLeft:-1,ArrowRight:1,ArrowUp:-7,ArrowDown:7};function T(e,t,n){return e in w?i(t,w[e]):e===`Home`?l(t,n):e===`End`?i(l(t,n),6):e===`PageUp`?s(t,-1):e===`PageDown`?s(t,1):null}function E(e,t,n,r=_){let i=T(e,t,n);return i&&y(i,r,e===`ArrowLeft`||e===`End`?-1:1)}export{n as MINUTES_PER_DAY,i as addDays,s as addMonths,p as atMinutes,e as dateToDay,u as dayDiff,S as daysFrom,o as daysInMonth,m as endAfter,E as gridKeyTarget,v as hiddenDaySet,d as isSameDay,f as minutesOfDay,g as periodRange,h as periodStart,x as rangeWithNeighbours,a as shiftDays,y as shownDay,C as shownDays,r as startOfDay,c as startOfMonth,l as startOfWeek,b as stepDate};
1
+ "use client";import{dateToDay as e}from"../utils/day.mjs";import{CalendarView as t}from"./calendar.types.mjs";var n=1440;function r(e){return new Date(e.getFullYear(),e.getMonth(),e.getDate())}function i(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t)}function a(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate()+t,e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds())}function o(e,t){return new Date(e,t+1,0).getDate()}function s(e,t){let n=new Date(e.getFullYear(),e.getMonth()+t,1),r=Math.min(e.getDate(),o(n.getFullYear(),n.getMonth()));return new Date(n.getFullYear(),n.getMonth(),r)}function c(e){return new Date(e.getFullYear(),e.getMonth(),1)}function l(e,t){return i(e,-((e.getDay()-t+7)%7))}function u(e,t){let n=Date.UTC(e.getFullYear(),e.getMonth(),e.getDate()),r=Date.UTC(t.getFullYear(),t.getMonth(),t.getDate());return Math.round((r-n)/864e5)}function d(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function f(e){return e.getHours()*60+e.getMinutes()}function p(e,t){return new Date(e.getFullYear(),e.getMonth(),e.getDate(),0,t)}function m(e,t,n){return t>e?t:new Date(e.getTime()+n*6e4)}var h=new Set,g=`narrowWeek`;function _(e){return e===t.Day?1:e===`narrowWeek`?3:0}function v(e,n,i){return _(e)>0?r(n):e===t.Week?l(n,i):c(n)}function y(e,n,r,a=h){let o=v(e,n,r),c=_(e);if(c>0)return{start:o,end:i(S(o,c-1,a),1)};switch(e){case t.Month:{let e=l(o,r);return{start:e,end:i(e,42)}}case t.Week:return{start:o,end:i(o,7)};default:return{start:o,end:s(o,1)}}}function b(e){let t=new Set(e);return t.size===0||[0,1,2,3,4,5,6].every(e=>t.has(e))?h:t}function x(e,t,n=1){let a=r(e);for(;t.has(a.getDay());)a=i(a,n);return a}function S(e,t,n){let r=t<0?-1:1,a=e;for(let e=0;e<Math.abs(t);e++)a=x(i(a,r),n,r);return a}function C(e,n,r,a=h){let o=_(e);return o>0?S(n,r*o,a):e===t.Week?i(n,7*r):s(n,r)}function w(e,t,n,r=h){return{start:y(e,C(e,t,-1,r),n,r).start,end:y(e,C(e,t,1,r),n,r).end}}function T(e,t=e){let[n,a]=t<e?[t,e]:[e,t];return{start:r(n),end:i(a,1),allDay:!0}}function E(e,n,r,a){if(e===t.Month||e===t.Agenda)return T(n);let o=p(n,Math.min(r.getHours()+1,23)*60),s=new Date(o.getTime()+Math.max(60,a)*6e4),c=i(n,1);return{start:o,end:s<c?s:c,allDay:!1}}function D(e){let t=l(e,1),n=i(t,3).getFullYear();return u(l(new Date(n,0,4),1),t)/7+1}function O(e,t){return Array.from({length:t},(t,n)=>i(e,n))}function k(e,t,n=h){return O(e,t).filter(e=>!n.has(e.getDay()))}var A={ArrowLeft:-1,ArrowRight:1,ArrowUp:-7,ArrowDown:7};function j(e,t,n){return e in A?i(t,A[e]):e===`Home`?l(t,n):e===`End`?i(l(t,n),6):e===`PageUp`?s(t,-1):e===`PageDown`?s(t,1):null}function M(e,t,n,r=h){let i=j(e,t,n);return i&&x(i,r,e===`ArrowLeft`||e===`End`?-1:1)}export{n as MINUTES_PER_DAY,g as NARROW_WEEK,i as addDays,s as addMonths,T as allDaySlot,p as atMinutes,e as dateToDay,u as dayDiff,O as daysFrom,o as daysInMonth,m as endAfter,M as gridKeyTarget,b as hiddenDaySet,d as isSameDay,f as minutesOfDay,E as newEventSlot,y as periodRange,v as periodStart,w as rangeWithNeighbours,a as shiftDays,x as shownDay,k as shownDays,r as startOfDay,c as startOfMonth,l as startOfWeek,C as stepDate,D as weekNumber};
2
2
  //# sourceMappingURL=dates.mjs.map