@acorex/components 19.14.1 → 19.14.2

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 (425) hide show
  1. package/action-sheet/lib/action-sheet.class.d.ts +1 -1
  2. package/action-sheet/lib/action-sheet.component.d.ts +1 -1
  3. package/action-sheet/lib/action-sheet.module.d.ts +1 -1
  4. package/alert/lib/alert.component.d.ts +1 -1
  5. package/audio-wave/lib/interfaces/audio-wave.interface.d.ts +1 -1
  6. package/autocomplete/lib/autocomplete.component.d.ts +1 -1
  7. package/avatar/lib/avatar.component.d.ts +1 -1
  8. package/badge/lib/badge.component.d.ts +1 -1
  9. package/bottom-navigation/lib/bottom-navigation-item/bottom-navigation-item.component.d.ts +2 -2
  10. package/bottom-navigation/lib/bottom-navigation.component.d.ts +1 -1
  11. package/breadcrumbs/lib/breadcrumbs-item.component.d.ts +1 -1
  12. package/breadcrumbs/lib/breadcrumbs.component.d.ts +1 -1
  13. package/button/lib/button-item-list.component.d.ts +2 -2
  14. package/button/lib/button-item.class.d.ts +1 -1
  15. package/button/lib/button-item.component.d.ts +1 -1
  16. package/button/lib/button.component.d.ts +1 -1
  17. package/button/lib/button.module.d.ts +1 -1
  18. package/button-group/lib/button-group-item.component.d.ts +1 -1
  19. package/button-group/lib/button-group.component.d.ts +1 -1
  20. package/calendar/lib/calendar-range.component.d.ts +1 -1
  21. package/calendar/lib/calendar.class.d.ts +1 -1
  22. package/calendar/lib/calendar.component.d.ts +1 -1
  23. package/calendar/lib/calendar.module.d.ts +1 -1
  24. package/check-box/lib/check-box.component.d.ts +1 -1
  25. package/chips/lib/chips.component.d.ts +2 -2
  26. package/circular-progress/lib/circular-progress.component.d.ts +1 -1
  27. package/collapse/lib/collapse-group.component.d.ts +1 -1
  28. package/collapse/lib/collapse.component.d.ts +1 -1
  29. package/color-box/lib/color-box.component.d.ts +1 -1
  30. package/color-palette/lib/color-palette-input.component.d.ts +1 -1
  31. package/color-palette/lib/color-palette-picker.component.d.ts +1 -1
  32. package/color-palette/lib/color-palette-preview.component.d.ts +1 -1
  33. package/color-palette/lib/color-palette-swatches.component.d.ts +1 -1
  34. package/color-palette/lib/color-palette.class.d.ts +1 -1
  35. package/color-palette/lib/color-palette.component.d.ts +1 -1
  36. package/conversation/lib/classes/events.interface.d.ts +1 -1
  37. package/conversation/lib/conversation-input/conversation-input.component.d.ts +1 -1
  38. package/conversation/lib/conversation-message/conversation-message.component.d.ts +1 -1
  39. package/conversation/lib/conversation-view/conversation-view.component.d.ts +1 -1
  40. package/conversation/lib/conversation.module.d.ts +1 -1
  41. package/cron-job/lib/cron-job-container/cron-job-container.component.d.ts +1 -1
  42. package/cron-job/lib/day/day.component.d.ts +1 -1
  43. package/cron-job/lib/hours/hours.component.d.ts +1 -1
  44. package/cron-job/lib/minutes/minutes.component.d.ts +1 -1
  45. package/cron-job/lib/month/month.component.d.ts +1 -1
  46. package/cron-job/lib/seconds/seconds.component.d.ts +1 -1
  47. package/cron-job/lib/year/year.component.d.ts +1 -1
  48. package/data-pager/lib/data-pager-base.component.d.ts +1 -1
  49. package/data-pager/lib/data-pager-input-selector.component.d.ts +1 -1
  50. package/data-pager/lib/data-pager-next-buttons.component.d.ts +1 -1
  51. package/data-pager/lib/data-pager-pagesize-dropdown.component.d.ts +1 -1
  52. package/data-pager/lib/data-pager-prev-buttons.component.d.ts +1 -1
  53. package/data-pager/lib/data-pager.component.d.ts +1 -1
  54. package/data-table/lib/base-data-table.class.d.ts +1 -1
  55. package/data-table/lib/columns/data-table-column.d.ts +1 -1
  56. package/data-table/lib/columns/row-command-column.component.d.ts +1 -1
  57. package/data-table/lib/columns/row-select-column.component.d.ts +1 -1
  58. package/data-table/lib/data-table.module.d.ts +1 -1
  59. package/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.d.ts +1 -1
  60. package/datetime-box/lib/datetime-box.component.d.ts +1 -1
  61. package/datetime-input/lib/datetime-input.component.d.ts +1 -1
  62. package/datetime-picker/lib/datetime-picker.component.d.ts +1 -1
  63. package/decorators/lib/components/clear-button/clear-button.component.d.ts +2 -2
  64. package/decorators/lib/components/close-button/close-button.component.d.ts +2 -2
  65. package/decorators/lib/components/full-screen/full-screen-button.component.d.ts +1 -1
  66. package/decorators/lib/components/generic-content.component.d.ts +1 -1
  67. package/decorators/lib/components/heading/heading.component.d.ts +1 -1
  68. package/decorators/lib/components/icon/icon.component.d.ts +1 -1
  69. package/dialog/lib/dialog.class.d.ts +1 -1
  70. package/dialog/lib/dialog.component.d.ts +1 -1
  71. package/dialog/lib/dialog.module.d.ts +1 -1
  72. package/dialog/lib/dialog.service.d.ts +1 -1
  73. package/drawer/lib/drawer/drawer-container/drawer-container.component.d.ts +1 -1
  74. package/drawer/lib/drawer/drawer-item/drawer.component.d.ts +1 -1
  75. package/dropdown/lib/dropdown-box.class.d.ts +1 -1
  76. package/dropdown/lib/dropdown-box.component.d.ts +2 -2
  77. package/dropdown/lib/dropdown-panel.component.d.ts +2 -2
  78. package/dropdown/lib/dropdown.module.d.ts +1 -1
  79. package/dropdown-button/lib/dropdown-button.component.d.ts +2 -2
  80. package/dropdown-button/lib/dropdown-button.module.d.ts +1 -1
  81. package/fesm2022/acorex-components-action-sheet.mjs +15 -13
  82. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  83. package/fesm2022/acorex-components-alert.mjs +15 -9
  84. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  85. package/fesm2022/acorex-components-audio-wave.mjs +9 -8
  86. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  87. package/fesm2022/acorex-components-autocomplete.mjs +10 -10
  88. package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
  89. package/fesm2022/acorex-components-avatar.mjs +13 -12
  90. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  91. package/fesm2022/acorex-components-badge.mjs +9 -9
  92. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  93. package/fesm2022/acorex-components-bottom-navigation.mjs +14 -14
  94. package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
  95. package/fesm2022/acorex-components-breadcrumbs.mjs +13 -13
  96. package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
  97. package/fesm2022/acorex-components-button-group.mjs +13 -12
  98. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  99. package/fesm2022/acorex-components-button.mjs +22 -22
  100. package/fesm2022/acorex-components-button.mjs.map +1 -1
  101. package/fesm2022/acorex-components-calendar.mjs +18 -14
  102. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  103. package/fesm2022/acorex-components-check-box.mjs +12 -10
  104. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  105. package/fesm2022/acorex-components-chips.mjs +10 -10
  106. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  107. package/fesm2022/acorex-components-circular-progress.mjs +9 -9
  108. package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
  109. package/fesm2022/acorex-components-collapse.mjs +15 -13
  110. package/fesm2022/acorex-components-collapse.mjs.map +1 -1
  111. package/fesm2022/acorex-components-color-box.mjs +8 -8
  112. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  113. package/fesm2022/acorex-components-color-palette.mjs +36 -26
  114. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  115. package/fesm2022/acorex-components-comment.mjs +37 -36
  116. package/fesm2022/acorex-components-comment.mjs.map +1 -1
  117. package/fesm2022/acorex-components-conversation.mjs +61 -63
  118. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  119. package/fesm2022/acorex-components-cron-job.mjs +57 -53
  120. package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
  121. package/fesm2022/acorex-components-data-pager.mjs +75 -37
  122. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  123. package/fesm2022/acorex-components-data-table.mjs +59 -39
  124. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  125. package/fesm2022/acorex-components-datetime-box.mjs +8 -8
  126. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  127. package/fesm2022/acorex-components-datetime-input.mjs +8 -8
  128. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  129. package/fesm2022/acorex-components-datetime-picker.mjs +10 -10
  130. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  131. package/fesm2022/acorex-components-decorators.mjs +46 -36
  132. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  133. package/fesm2022/acorex-components-dialog.mjs +21 -13
  134. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  135. package/fesm2022/acorex-components-drawer.mjs +17 -17
  136. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  137. package/fesm2022/acorex-components-dropdown-button.mjs +12 -10
  138. package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
  139. package/fesm2022/acorex-components-dropdown.mjs +19 -17
  140. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  141. package/fesm2022/acorex-components-file-explorer.mjs +39 -31
  142. package/fesm2022/acorex-components-file-explorer.mjs.map +1 -1
  143. package/fesm2022/acorex-components-flow-chart.mjs +30 -20
  144. package/fesm2022/acorex-components-flow-chart.mjs.map +1 -1
  145. package/fesm2022/acorex-components-form.mjs +20 -18
  146. package/fesm2022/acorex-components-form.mjs.map +1 -1
  147. package/fesm2022/acorex-components-grid-layout-builder.mjs +55 -16
  148. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  149. package/fesm2022/acorex-components-image-editor.mjs +43 -45
  150. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  151. package/fesm2022/acorex-components-image.mjs +15 -9
  152. package/fesm2022/acorex-components-image.mjs.map +1 -1
  153. package/fesm2022/acorex-components-json-viewer.mjs +9 -8
  154. package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
  155. package/fesm2022/acorex-components-kbd.mjs +13 -12
  156. package/fesm2022/acorex-components-kbd.mjs.map +1 -1
  157. package/fesm2022/acorex-components-label.mjs +15 -9
  158. package/fesm2022/acorex-components-label.mjs.map +1 -1
  159. package/fesm2022/acorex-components-list.mjs +8 -8
  160. package/fesm2022/acorex-components-list.mjs.map +1 -1
  161. package/fesm2022/acorex-components-loading-dialog.mjs +12 -12
  162. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  163. package/fesm2022/acorex-components-loading.mjs +19 -19
  164. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  165. package/fesm2022/acorex-components-map.mjs +265 -108
  166. package/fesm2022/acorex-components-map.mjs.map +1 -1
  167. package/fesm2022/acorex-components-media-viewer.mjs +42 -41
  168. package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
  169. package/fesm2022/acorex-components-menu.mjs +41 -17
  170. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  171. package/fesm2022/{acorex-components-modal-acorex-components-modal-Ckn70-o5.mjs → acorex-components-modal-acorex-components-modal-CJ3M9U7p.mjs} +24 -23
  172. package/fesm2022/acorex-components-modal-acorex-components-modal-CJ3M9U7p.mjs.map +1 -0
  173. package/fesm2022/acorex-components-modal-modal-content.component-Ef5XWxUb.mjs +216 -0
  174. package/fesm2022/acorex-components-modal-modal-content.component-Ef5XWxUb.mjs.map +1 -0
  175. package/fesm2022/acorex-components-modal.mjs +1 -1
  176. package/fesm2022/acorex-components-navbar.mjs +9 -9
  177. package/fesm2022/acorex-components-navbar.mjs.map +1 -1
  178. package/fesm2022/acorex-components-notification.mjs +18 -12
  179. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  180. package/fesm2022/acorex-components-number-box.mjs +8 -8
  181. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  182. package/fesm2022/acorex-components-otp.mjs +20 -8
  183. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  184. package/fesm2022/acorex-components-page.mjs +11 -11
  185. package/fesm2022/acorex-components-page.mjs.map +1 -1
  186. package/fesm2022/acorex-components-paint.mjs +31 -33
  187. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  188. package/fesm2022/acorex-components-password-box.mjs +21 -23
  189. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  190. package/fesm2022/acorex-components-pdf-reader.mjs +9 -8
  191. package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
  192. package/fesm2022/acorex-components-phone-box.mjs +8 -8
  193. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  194. package/fesm2022/acorex-components-picker.mjs +18 -16
  195. package/fesm2022/acorex-components-picker.mjs.map +1 -1
  196. package/fesm2022/acorex-components-popover.mjs +15 -9
  197. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  198. package/fesm2022/acorex-components-popup.mjs +18 -12
  199. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  200. package/fesm2022/acorex-components-progress-bar.mjs +9 -9
  201. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  202. package/fesm2022/acorex-components-qrcode.mjs +10 -8
  203. package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
  204. package/fesm2022/acorex-components-query-builder.mjs +9 -9
  205. package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
  206. package/fesm2022/acorex-components-radio.mjs +10 -8
  207. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  208. package/fesm2022/acorex-components-rail-navigation.mjs +16 -16
  209. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  210. package/fesm2022/acorex-components-range-slider.mjs +13 -11
  211. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  212. package/fesm2022/acorex-components-rate-picker.mjs +10 -8
  213. package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
  214. package/fesm2022/acorex-components-rest-api-generator.mjs +28 -27
  215. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  216. package/fesm2022/acorex-components-result.mjs +9 -9
  217. package/fesm2022/acorex-components-result.mjs.map +1 -1
  218. package/fesm2022/acorex-components-routing-progress.mjs +9 -9
  219. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  220. package/fesm2022/acorex-components-scheduler.mjs +331 -256
  221. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  222. package/fesm2022/acorex-components-scss.mjs +4 -4
  223. package/fesm2022/acorex-components-search-box.mjs +9 -9
  224. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  225. package/fesm2022/acorex-components-select-box.mjs +18 -12
  226. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  227. package/fesm2022/acorex-components-selection-list.mjs +8 -8
  228. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  229. package/fesm2022/acorex-components-side-menu.mjs +16 -16
  230. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  231. package/fesm2022/acorex-components-skeleton.mjs +9 -9
  232. package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
  233. package/fesm2022/acorex-components-slider.mjs +10 -8
  234. package/fesm2022/acorex-components-slider.mjs.map +1 -1
  235. package/fesm2022/acorex-components-sliding-item.mjs +17 -16
  236. package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
  237. package/fesm2022/acorex-components-step-wizard.mjs +16 -16
  238. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  239. package/fesm2022/acorex-components-switch.mjs +14 -11
  240. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  241. package/fesm2022/acorex-components-tabs.mjs +16 -15
  242. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  243. package/fesm2022/acorex-components-tag-box.mjs +10 -10
  244. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  245. package/fesm2022/acorex-components-tag.mjs +9 -9
  246. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  247. package/fesm2022/acorex-components-text-area.mjs +8 -8
  248. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  249. package/fesm2022/acorex-components-text-box.mjs +13 -13
  250. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  251. package/fesm2022/acorex-components-time-duration.mjs +59 -98
  252. package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
  253. package/fesm2022/acorex-components-time-line.mjs +13 -12
  254. package/fesm2022/acorex-components-time-line.mjs.map +1 -1
  255. package/fesm2022/acorex-components-toast.mjs +18 -12
  256. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  257. package/fesm2022/acorex-components-toolbar.mjs +9 -8
  258. package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
  259. package/fesm2022/acorex-components-tooltip.mjs +12 -12
  260. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  261. package/fesm2022/acorex-components-tree-view.mjs +12 -12
  262. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  263. package/fesm2022/acorex-components-uploader.mjs +27 -27
  264. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  265. package/fesm2022/acorex-components-video-player.mjs +9 -8
  266. package/fesm2022/acorex-components-video-player.mjs.map +1 -1
  267. package/fesm2022/acorex-components-wysiwyg.mjs +39 -41
  268. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  269. package/file-explorer/lib/file-explorer-item/file-explorer-item.component.d.ts +1 -1
  270. package/flow-chart/lib/flow-chart-creator/flow-chart-creator.component.d.ts +1 -1
  271. package/flow-chart/lib/flow-chart-renderer/flow-chart-renderer.component.d.ts +1 -1
  272. package/flow-chart/lib/flow-chart.component.d.ts +1 -1
  273. package/form/lib/form-field.component.d.ts +1 -1
  274. package/form/lib/form.component.d.ts +1 -1
  275. package/form/lib/validation-summary.component.d.ts +1 -1
  276. package/grid-layout-builder/lib/grid-layout-container.component.d.ts +4 -3
  277. package/grid-layout-builder/lib/types.d.ts +1 -1
  278. package/image/lib/image.component.d.ts +1 -1
  279. package/image-editor/lib/image-editor-container/image-editor-container.component.d.ts +1 -1
  280. package/image-editor/lib/image-editor-view/image-editor-view.component.d.ts +1 -1
  281. package/label/lib/label.component.d.ts +1 -1
  282. package/list/lib/list.component.d.ts +1 -1
  283. package/loading/lib/loading-spinner.component.d.ts +1 -1
  284. package/loading/lib/loading.component.d.ts +1 -1
  285. package/loading-dialog/lib/loading-dialog.class.d.ts +1 -1
  286. package/loading-dialog/lib/loading-dialog.component.d.ts +1 -1
  287. package/loading-dialog/lib/loading-dialog.module.d.ts +1 -1
  288. package/map/lib/map.component.d.ts +38 -11
  289. package/menu/lib/context-menu.component.d.ts +1 -1
  290. package/menu/lib/menu-item.component.d.ts +1 -1
  291. package/menu/lib/menu.component.d.ts +1 -1
  292. package/menu/lib/menu.types.d.ts +1 -1
  293. package/modal/lib/modal-content/modal-content.component.d.ts +1 -1
  294. package/modal/lib/modal.component.d.ts +1 -1
  295. package/navbar/lib/navbar.component.d.ts +1 -1
  296. package/notification/lib/notification.class.d.ts +1 -1
  297. package/notification/lib/notification.component.d.ts +1 -1
  298. package/notification/lib/notification.config.d.ts +1 -1
  299. package/number-box/lib/number-box.component.d.ts +1 -1
  300. package/otp/lib/otp.class.d.ts +1 -1
  301. package/otp/lib/otp.component.d.ts +1 -1
  302. package/package.json +1 -5
  303. package/page/lib/base-page.class.d.ts +1 -1
  304. package/page/lib/page.component.d.ts +1 -1
  305. package/paint/lib/paint/paint-container/paint-container.component.d.ts +1 -1
  306. package/password-box/lib/password-box.component.d.ts +1 -1
  307. package/password-box/lib/password-strength-validation/password-strength-validation.component.d.ts +9 -11
  308. package/phone-box/lib/phone-box.component.d.ts +1 -1
  309. package/picker/lib/picker-items/picker-items.component.d.ts +1 -1
  310. package/popover/lib/popover.component.d.ts +1 -1
  311. package/popup/lib/popup.component.d.ts +1 -1
  312. package/popup/lib/popup.module.d.ts +1 -1
  313. package/popup/lib/popup.service.d.ts +1 -1
  314. package/progress-bar/lib/progress-bar.component.d.ts +1 -1
  315. package/query-builder/lib/query-builder.component.d.ts +1 -1
  316. package/radio/lib/radio.component.d.ts +1 -1
  317. package/rail-navigation/lib/rail-navigation-item/rail-navigation-item.component.d.ts +1 -1
  318. package/rail-navigation/lib/rail-navigation.component.d.ts +1 -1
  319. package/range-slider/lib/range-slider.class.d.ts +1 -1
  320. package/range-slider/lib/range-slider.component.d.ts +1 -1
  321. package/rate-picker/lib/rate-picker.component.d.ts +1 -1
  322. package/rest-api-generator/lib/query-params/query-params.component.d.ts +1 -1
  323. package/rest-api-generator/lib/request-body/request-body.component.d.ts +1 -1
  324. package/rest-api-generator/lib/request-headers/request-headers.component.d.ts +1 -1
  325. package/rest-api-generator/lib/rest-api-auth/rest-api-auth.component.d.ts +1 -1
  326. package/rest-api-generator/lib/rest-api-generator.component.d.ts +1 -1
  327. package/result/lib/result.component.d.ts +1 -1
  328. package/routing-progress/lib/routing-progress.component.d.ts +1 -1
  329. package/scheduler/lib/scheduler.class.d.ts +35 -31
  330. package/scheduler/lib/scheduler.component.d.ts +60 -41
  331. package/scheduler/lib/scheduler.service.d.ts +15 -14
  332. package/scheduler/lib/views/agenda/scheduler-agenda-view.component.d.ts +14 -12
  333. package/scheduler/lib/views/day/scheduler-day-view.component.d.ts +19 -17
  334. package/scheduler/lib/views/month/scheduler-month-view.component.d.ts +17 -15
  335. package/scheduler/lib/views/timeline-day/scheduler-timeline-day-view.component.d.ts +17 -15
  336. package/scheduler/lib/views/timeline-month/scheduler-timeline-month-view.component.d.ts +15 -13
  337. package/scheduler/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.d.ts +15 -14
  338. package/scheduler/lib/views/week/scheduler-week-view.component.d.ts +19 -17
  339. package/search-box/lib/search-box.component.d.ts +1 -1
  340. package/search-box/lib/search-box.module.d.ts +1 -1
  341. package/select-box/lib/select-box.component.d.ts +2 -1
  342. package/select-box/lib/select-box.module.d.ts +1 -1
  343. package/selection-list/lib/selection-list.component.d.ts +1 -1
  344. package/side-menu/lib/side-menu-item/side-menu-item.component.d.ts +1 -1
  345. package/side-menu/lib/side-menu.component.d.ts +1 -1
  346. package/side-menu/lib/side-menu.module.d.ts +1 -1
  347. package/skeleton/lib/skeleton.component.d.ts +1 -1
  348. package/slider/lib/slider.component.d.ts +1 -1
  349. package/slider/lib/slider.module.d.ts +1 -1
  350. package/sliding-item/lib/sliding-item-prefix/sliding-item-prefix.component.d.ts +1 -1
  351. package/sliding-item/lib/sliding-item-suffix/sliding-item-suffix.component.d.ts +1 -1
  352. package/step-wizard/lib/step-wizard-item/step-wizard-item.component.d.ts +1 -1
  353. package/step-wizard/lib/step-wizard.component.d.ts +1 -1
  354. package/switch/lib/switch-content.component.d.ts +1 -1
  355. package/switch/lib/switch.component.d.ts +1 -1
  356. package/tabs/lib/tab-item.component.d.ts +1 -1
  357. package/tabs/lib/tabs.class.d.ts +1 -1
  358. package/tabs/lib/tabs.component.d.ts +1 -1
  359. package/tag/lib/tag.component.d.ts +1 -1
  360. package/tag-box/lib/tag-box.component.d.ts +1 -1
  361. package/text-area/lib/text-area.component.d.ts +1 -1
  362. package/text-box/lib/text-box.component.d.ts +1 -1
  363. package/text-box/lib/text-box.module.d.ts +1 -1
  364. package/time-duration/lib/time-duration.component.d.ts +3 -5
  365. package/toast/lib/toast.class.d.ts +1 -1
  366. package/toast/lib/toast.component.d.ts +1 -1
  367. package/toast/lib/toast.config.d.ts +1 -1
  368. package/tooltip/lib/tooltip.component.d.ts +1 -1
  369. package/tooltip/lib/tooltip.directive.d.ts +1 -1
  370. package/tree-view/lib/tree-view-item.component.d.ts +1 -1
  371. package/tree-view/lib/tree-view.class.d.ts +1 -1
  372. package/tree-view/lib/tree-view.component.d.ts +1 -1
  373. package/tree-view/lib/tree-view.component.module.d.ts +1 -1
  374. package/uploader/lib/uploader-drop-zone/uploader-drop-zone.component.d.ts +1 -1
  375. package/uploader/lib/uploader.models.d.ts +1 -1
  376. package/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.d.ts +1 -1
  377. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-alignment/wysiwyg-alignment.component.d.ts +1 -1
  378. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-colors/wysiwyg-colors.component.d.ts +1 -1
  379. package/wysiwyg/lib/wysiwyg/wysiwyg-tools/wysiwyg-insert/wysiwyg-insert.component.d.ts +1 -1
  380. package/common/README.md +0 -3
  381. package/common/index.d.ts +0 -32
  382. package/common/lib/classes/components.class.d.ts +0 -97
  383. package/common/lib/classes/datalist.class.d.ts +0 -37
  384. package/common/lib/classes/datasource.class.d.ts +0 -87
  385. package/common/lib/classes/events.class.d.ts +0 -96
  386. package/common/lib/classes/styles.class.d.ts +0 -12
  387. package/common/lib/common.module.d.ts +0 -10
  388. package/common/lib/components/base-component.class.d.ts +0 -42
  389. package/common/lib/components/button-base-component.class.d.ts +0 -55
  390. package/common/lib/components/color-component.class.d.ts +0 -12
  391. package/common/lib/components/colorlook-component.class.d.ts +0 -6
  392. package/common/lib/components/input-base-value-component.class.d.ts +0 -35
  393. package/common/lib/components/interactive-component.class.d.ts +0 -57
  394. package/common/lib/components/look-component.class.d.ts +0 -18
  395. package/common/lib/components/selection-base.component.class.d.ts +0 -53
  396. package/common/lib/components/value-component.class.d.ts +0 -70
  397. package/common/lib/directives/auto-focus.directive.d.ts +0 -17
  398. package/common/lib/directives/copy-clipboard.directive.d.ts +0 -40
  399. package/common/lib/directives/delayed-value-changed.directive.d.ts +0 -17
  400. package/common/lib/directives/hotkey.directive.d.ts +0 -22
  401. package/common/lib/directives/infinite-scroll.directive.d.ts +0 -25
  402. package/common/lib/directives/inverted-color.directive.d.ts +0 -12
  403. package/common/lib/directives/responsive.directive.d.ts +0 -10
  404. package/common/lib/directives/ripple.directive.d.ts +0 -18
  405. package/common/lib/interfaces/component.interface.d.ts +0 -4
  406. package/common/lib/services/dom.service.d.ts +0 -6
  407. package/common/lib/services/hotkey.service.d.ts +0 -31
  408. package/common/lib/types/base/button.type.d.ts +0 -8
  409. package/common/lib/types/base/color.type.d.ts +0 -7
  410. package/common/lib/types/base/component.types.d.ts +0 -8
  411. package/common/lib/types/base/events.types.d.ts +0 -21
  412. package/common/lib/types/base/index.d.ts +0 -7
  413. package/common/lib/types/base/interactive.type.d.ts +0 -13
  414. package/common/lib/types/base/look.type.d.ts +0 -7
  415. package/common/lib/types/base/value.type.d.ts +0 -9
  416. package/common/lib/types/direction.d.ts +0 -4
  417. package/common/lib/types/orientation.d.ts +0 -4
  418. package/common/lib/types/placement.d.ts +0 -30
  419. package/common/lib/types/range.d.ts +0 -4
  420. package/common/lib/types/selection-mode.d.ts +0 -4
  421. package/fesm2022/acorex-components-common.mjs +0 -2087
  422. package/fesm2022/acorex-components-common.mjs.map +0 -1
  423. package/fesm2022/acorex-components-modal-acorex-components-modal-Ckn70-o5.mjs.map +0 -1
  424. package/fesm2022/acorex-components-modal-modal-content.component-DzRhA-Nt.mjs +0 -216
  425. package/fesm2022/acorex-components-modal-modal-content.component-DzRhA-Nt.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-scheduler.mjs","sources":["../../../../packages/components/scheduler/src/lib/scheduler.service.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.html","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.ts","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.html","../../../../packages/components/scheduler/src/lib/scheduler.component.ts","../../../../packages/components/scheduler/src/lib/scheduler.component.html","../../../../packages/components/scheduler/src/lib/scheduler.module.ts","../../../../packages/components/scheduler/src/acorex-components-scheduler.ts"],"sourcesContent":["import { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXDayOfWeekName,\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentsByStartBlock,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerBlockIdentifier,\n AXSchedulerSlotEvent,\n AXSchedulerView,\n} from './scheduler.class';\n\n@Injectable({\n providedIn: 'root', // Provide service application-wide\n})\nexport class AXSchedulerService {\n private calendarService = inject(AXCalendarService);\n private formatService = inject(AXFormatService);\n\n readonly HOURS_PER_DAY = 24;\n readonly MINUTES_PER_HOUR = 60;\n readonly BLOCK_DURATION_MINUTES = 30;\n readonly MILLISECONDS_PER_MINUTE = 60 * 1000;\n readonly MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(appointmentA: AXSchedulerAppointmentType, appointmentB: AXSchedulerAppointmentType): boolean {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.date.getTime();\n const endA = appointmentA.endDate.date.getTime();\n const startB = appointmentB.startDate.date.getTime();\n const endB = appointmentB.endDate.date.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment: AXSchedulerAppointmentType): number {\n if (!Appointment?.startDate || !Appointment.endDate) return 0;\n const durationMillis = Appointment.endDate.date.getTime() - Appointment.startDate.date.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment: AXSchedulerAppointmentType): number {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(\n dateTime: AXDateTime,\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number, // Exclusive end hour\n viewTotalDays = 1, // Default to 1 for day view\n ): AXSchedulerBlockIdentifier | null {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n\n // Check if dateTime is within the view's date and time range\n if (\n dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0) return null;\n\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n\n return { dayIndex, blockIndex };\n }\n\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(\n singleDayAppointments: AXSchedulerAppointmentSegmentType[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n viewTotalDays: number, // Now required\n ): AXSchedulerActiveAppointmentsInBlock {\n const blocks: AXSchedulerActiveAppointmentsInBlock = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(\n 0,\n (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES),\n );\n\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.key) return;\n\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointment.startDate.compare(viewStartDate) < 0 ? viewStartDate : appointment.startDate;\n if (effectiveStart.hour < startHour) effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n\n let effectiveEnd = appointment.endDate.compare(viewEndDate) >= 0 ? viewEndDate : appointment.endDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo) return; // Appointment starts completely outside view\n\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (\n !endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)\n ) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays) continue;\n\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n\n if (!blocks[dIdx]) blocks[dIdx] = {};\n\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx]) blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.key === appointment.key)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(\n singleDayAppointments: AXSchedulerAppointmentSegmentType[], // These are segments for the current day\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): Map<any, { maxConcurrency: number; effectiveTotalColumns: number }> {\n const resultInfo = new Map<any, { maxConcurrency: number; effectiveTotalColumns: number }>();\n if (singleDayAppointments.length === 0) return resultInfo;\n\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(\n singleDayAppointments,\n viewStartDate,\n startHour,\n endHour,\n 1, // Day view\n );\n const blocks = activeAppointmentsMap[0] ?? {};\n\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.hour * this.MINUTES_PER_HOUR + segment.startDate.minute;\n const segmentEndMinutes = segment.endDate.hour * this.MINUTES_PER_HOUR + segment.endDate.minute;\n\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min(\n (endHour - startHour) * this.MINUTES_PER_HOUR,\n segmentEndMinutes - startHour * this.MINUTES_PER_HOUR,\n );\n\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.key, maxOverlapInSegmentBlocks || 1);\n });\n\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.key, maxConcurrencyMap.get(segment.key) || 1);\n });\n\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.key === segmentB.key) return;\n\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.key) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.key) || 1;\n const maxETC = Math.max(etcA, etcB);\n\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.key, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.key, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.key, {\n maxConcurrency: maxConcurrencyMap.get(segment.key) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.key) || 1,\n });\n });\n\n return resultInfo;\n }\n\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(\n singleDayAppointments: AXSchedulerAppointmentSegmentType[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): AXSchedulerAppointmentsByStartBlock {\n const blocks: AXSchedulerAppointmentsByStartBlock = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate) return;\n const startInfo = this.getBlockIdentifier(appointment.startDate, viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex]) blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex]) blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(\n appointments: AXSchedulerAppointmentType[],\n viewStartDate: AXDateTime, // First day visible in the grid\n viewEndDate: AXDateTime, // Last day visible in the grid\n ): Map<string, AXSchedulerAppointmentType[]> {\n const groupedAppointments = new Map<string, AXSchedulerAppointmentType[]>();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.key) return;\n\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = appointment.startDate;\n const appointmentEnd = appointment.endDate;\n\n // Skip if appointment ends before the view starts or starts after the view ends\n if (\n appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0\n ) {\n return;\n }\n\n // Clamp start date to the view start date\n let currentDay =\n appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (\n currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100\n ) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.key === appointment.key)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.key);\n }\n });\n\n return groupedAppointments;\n }\n\n getDayOfWeekNumber(dayName: AXDayOfWeekName): number {\n switch (dayName) {\n case 'Sunday':\n return 1;\n case 'Monday':\n return 2;\n case 'Tuesday':\n return 3;\n case 'Wednesday':\n return 4;\n case 'Thursday':\n return 5;\n case 'Friday':\n return 6;\n case 'Saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n\n getSlotData(\n startDate: AXDateTime,\n view: AXSchedulerView,\n ): { startDate: AXDateTime; endDate: AXDateTime; view: AXSchedulerView } {\n let endDate: AXDateTime;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timelineDay':\n case 'timelineMultiDay':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timelineMonth':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n\n handleEvent(\n event: AXSchedulerSlotEvent | AXSchedulerAppointmentEvent,\n eventOutputMap,\n eventType: 'appointment' | 'slot',\n ) {\n const mouseEvent = event.event;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type as keyof typeof appointmentOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerAppointmentEvent);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type as keyof typeof slotOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerSlotEvent);\n }\n }\n\n // --- Timeline Specific Helpers ---\n\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt: AXSchedulerAppointmentType,\n viewStartHour: number, // e.g., 8 for 8 AM\n viewEndHour: number, // e.g., 18 for 6 PM (timeline runs from 8:00 up to, but not including, 18:00)\n ): { left: string; width: string } | null {\n if (\n !appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0) return null; // No viewable duration\n\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.hour * 60 + segmentStart.minute;\n\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (\n minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/\n ) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.hour * 60 + segmentEnd.minute;\n if (segmentEnd.hour === 0 && segmentEnd.minute === 0 && segmentEnd.date.getTime() > segmentStart.date.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n\n const segmentDurationMinutesInView = Math.max(\n 0,\n effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay,\n );\n\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n\n // Ensure percentages are valid\n if (\n leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/\n ) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0) return null;\n }\n\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(\n appointment: AXSchedulerAppointmentType, // This is the ORIGINAL appointment\n day: AXDateTime,\n viewStartHour: number,\n viewEndHour: number,\n isFullDayCellContext = false,\n ): AXSchedulerAppointmentSegmentType | null {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointment.startDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else if (\n appointment.startDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointment.endDate.startOf('day').compare(dayStartOf, 'day') >= 0\n ) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else {\n return null;\n }\n }\n\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n\n if (\n appointment.endDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointment.startDate.compare(dayEndBoundary, 'second') >= 0\n ) {\n return null;\n }\n const segmentStartDate =\n appointment.startDate.compare(dayStartBoundary, 'second') > 0 ? appointment.startDate : dayStartBoundary;\n const segmentEndDate =\n appointment.endDate.compare(dayEndBoundary, 'second') < 0 ? appointment.endDate : dayEndBoundary;\n\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n\n const isContinuationFromPreviousDay = appointment.startDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointment.endDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointment.startDate.duration(appointment.endDate);\n\n return {\n ...appointment,\n startDate: segmentStartDate,\n endDate: segmentEndDate,\n allDay: appointment.allDay || duration.total.days >= 1,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n\n getOriginalAppointment(\n item: AXSchedulerAppointmentType | AXSchedulerAppointmentSegmentType,\n ): AXSchedulerAppointmentType {\n const segment = item as AXSchedulerAppointmentSegmentType;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n\n isHoliday(date: AXDateTime): boolean {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date: AXDateTime, calendar: string): boolean {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n}\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface AgendaDayData {\n date: AXDateTime;\n appointments: AXSchedulerAppointmentSegmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-agenda-view',\n templateUrl: './scheduler-agenda-view.component.html',\n styleUrl: './scheduler-agenda-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerAgendaViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n agendaDaysLayout = computed<AgendaDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: AgendaDayData[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n ],\n ['asc', 'asc', 'desc'],\n );\n\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-agenda-container\">\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n [class.ax-state-holiday]=\"dayData.holiday.state !== 'none'\"\n class=\"ax-scheduler-agenda-view-container\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n >\n <div class=\"ax-scheduler-agenda-header-date-day\">\n <span\n class=\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n [axTooltipPlacement]=\"'top-start'\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-agenda-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <div class=\"ax-scheduler-agenda-appointment-container\">\n @for (segment of dayData.appointments; track segment.key + segment.originalStartDate.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n segment.title +\n (segment.allDay\n ? ' (All Day)'\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ 'dateTime.duration.all-day' | translate | async }}</span>\n } @else {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n <ax-title class=\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Description could go here if needed -->\n <!-- <ax-subtitle *ngIf=\"segment.description\">{{ segment.description }}</ax-subtitle> -->\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ 'noRecord' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerDayAppointmentLayout,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-day-view',\n templateUrl: './scheduler-day-view.component.html',\n styleUrl: './scheduler-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n ],\n})\nexport class AXSchedulerDayViewComponent extends MXBaseComponent {\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startHour();\n const endH = this.endHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments =\n this.processedAppointmentsForLayout()?.filter(\n (segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.key === segment.key)?.allDay,\n ) ?? [];\n const combined = new Map<any, AXSchedulerAppointmentType>();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.key, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.key)) {\n combined.set(appt.key, appt);\n }\n });\n return Array.from(combined.values());\n });\n singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointment: AXSchedulerAppointmentType) {\n const originalAppointment = (appointment as AXSchedulerAppointmentSegmentType).originalStartDate\n ? ({\n ...appointment,\n startDate: (appointment as AXSchedulerAppointmentSegmentType).originalStartDate,\n endDate: (appointment as AXSchedulerAppointmentSegmentType).originalEndDate,\n } as AXSchedulerAppointmentType)\n : appointment;\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e: AXDropZoneDropEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n\n const droppedAppt = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalEndDate,\n } as AXSchedulerAppointmentType)\n : droppedAppt;\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalDroppedAppt,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegmentType).originalEndDate,\n } as AXSchedulerAppointmentType)\n : droppedAppt;\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalDroppedAppt,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n appointmentLayouts = computed(() => {\n const layouts = new Map<any, AXSchedulerDayAppointmentLayout>();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startHour();\n const endH = this.endHour();\n\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(\n appointmentsToLayout,\n viewDate,\n startH,\n endH,\n );\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(e) => e.startDate.date.getTime(), (e) => e.originalEndDate.date.getTime() - e.originalStartDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const columnsData: { appointments: AXSchedulerAppointmentSegmentType[] }[] = [];\n\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n\n for (let c = 0; ; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n\n let conflict = false;\n\n for (const placedSegment of columnsData[c].appointments) {\n if (\n appointmentSegment.startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n appointmentSegment.endDate.compare(placedSegment.startDate, 'minute') > 0\n ) {\n conflict = true;\n break;\n }\n }\n\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n\n if (c > appointmentsToLayout.length) {\n console.warn(\n `DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`,\n );\n if (!columnsData[c]) columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.key);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n\n layouts.set(appointmentSegment.key, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n\n getAppointmentLayout(key: any): AXSchedulerDayAppointmentLayout | undefined {\n return this.appointmentLayouts().get(key);\n }\n\n getAppointmentLeft(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1) return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n\n getAppointmentWidth(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n\n if (N <= 0) return '0%';\n if (N === 1) return `calc(100% - ${this.GAP_PX}px)`;\n\n const widthPercent = (1 / N) * 100;\n\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n\n getAppointmentTop(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.key === key);\n\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.hour * 60 + appointmentSegment.startDate.minute;\n const startBlockOffset = startMinutes - this.startHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n\n getAppointmentHeight(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.key === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.date.getTime() - appointmentSegment.startDate.date.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0) return '0px';\n\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-day-header\">\n <div class=\"ax-scheduler-day-header-table\" aria-hidden=\"true\">\n <div>\n {{ 'dateTime.duration.all-day' | translate | async }}\n </div>\n </div>\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleAllDayDrop($event)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleAllDaySlotEvent($event)\"\n (dblclick)=\"handleAllDaySlotEvent($event)\"\n (contextmenu)=\"handleAllDaySlotEvent($event)\"\n class=\"ax-scheduler-day-header-table-container\"\n >\n <div class=\"ax-scheduler-day-header-appointment-container\">\n @if (allDayAppointments().length) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || allDayAppointments()[0].readonly || readonly()\"\n [dragData]=\"allDayAppointments()[0]\"\n (click)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (dblclick)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n [title]=\"allDayAppointments()[0].title\"\n class=\"ax-scheduler-header-day-appointment\"\n [style.color]=\"allDayAppointments()[0].textColor\"\n [style.background-color]=\"allDayAppointments()[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ allDayAppointments()[0].title }}</ax-title>\n </div>\n }\n @if (allDayAppointments().length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-day-header-more-tag\"\n [style.color]=\"allDayAppointments()[1].textColor\"\n [style.background-color]=\"allDayAppointments()[1].backgroundColor\"\n >\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\n @for (appointment of allDayAppointments(); track appointment.key; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-day-time-container\">\n <table class=\"ax-scheduler-day-time\" aria-hidden=\"true\" [border]=\"1\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </table>\n <div class=\"ax-scheduler-day-table-container\">\n <div class=\"ax-scheduler-day-appointment-container\">\n @for (appointment of singleDayAppointments(); track appointment.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-day-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.width]=\"getAppointmentWidth(appointment.key)\"\n [style.height]=\"getAppointmentHeight(appointment.key)\"\n [style.background-color]=\"appointment.backgroundColor\"\n [style.inset-block-start]=\"getAppointmentTop(appointment.key)\"\n [style.inset-inline-start]=\"getAppointmentLeft(appointment.key)\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-day-slot\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleSingleDayDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSingleSlotEvent($event, time)\"\n (dblclick)=\"handleSingleSlotEvent($event, time)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time)\"\n ></div>\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time.add('minute', 30))\"\n (click)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (dblclick)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (contextmenu)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n ></div>\n }\n </div>\n </div>\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class'; // Adjust path\nimport { AXSchedulerService } from '../../scheduler.service'; // Adjust path\n\n// --- Types specific to Month View Layout ---\n// Represents a single day cell in the month grid\nexport type AXSchedulerMonthDayCell = {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n appointments: AXSchedulerAppointmentSegmentType[]; // All appointments for this day\n visibleAppointments: AXSchedulerAppointmentSegmentType[]; // Appointments to display as chips\n hiddenAppointments: AXSchedulerAppointmentSegmentType[]; // Appointments hidden behind the badge\n overflowCount: number; // Count of hidden appointments (length of hiddenAppointments)\n};\n\n@Component({\n selector: 'ax-scheduler-month-view',\n templateUrl: './scheduler-month-view.component.html',\n styleUrl: './scheduler-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerMonthViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n // --- Inputs ---\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n firstDayOfWeek = input<AXDayOfWeekName>('Saturday');\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n // --- Constants ---\n readonly DAYS_IN_WEEK = 7;\n readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegmentOrOriginal: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n\n // Generate the list of weekday names based on the firstDayOfWeek\n daysArray = computed(() => {\n const dayNames: AXDateTime[] = [];\n\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n\n // --- Calendar Grid Calculation ---\n calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart) return { days: [], weeksNeeded: 0 };\n\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n\n const days: {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n }[] = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday =\n this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n\n let holidayTitle: null | string = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n\n // --- Appointment Grouping ---\n appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0) return new Map<string, AXSchedulerAppointmentType[]>();\n\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n\n // --- Day Cell Layout Calculation ---\n dayCellLayouts = computed<AXSchedulerMonthDayCell[]>(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay,\n 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true, // isFullDayCellContext = true\n );\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.date.getTime(), // Then by original start time\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n\n // --- Dynamic Grid Rows ---\n gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-month-container\">\n <!-- Weekday Header -->\n <div class=\"ax-scheduler-month-weekdays\">\n @for (day of daysArray(); track day.date.getTime()) {\n <div class=\"ax-scheduler-month-weekday\">\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"ax-scheduler-month-grid\" [style.gridTemplateRows]=\"gridTemplateRowsStyle()\">\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayCell.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSlotEvent($event, dayCell.date)\"\n (dblclick)=\"handleSlotEvent($event, dayCell.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayCell.date)\"\n class=\"ax-scheduler-month-day-cell\"\n [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-state-holiday]=\"dayCell.isHoliday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-date]=\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\"\n >\n <div class=\"ax-scheduler-month-day-header\">\n <span class=\"ax-scheduler-month-day-number ax-scheduler-truncate\" [axTooltip]=\"dayCell.holidayTitle ?? ''\">\n {{ dayCell.date.dayOfMonth }}\n\n @if (dayCell.holidayTitle) {\n ( {{ dayCell.holidayTitle }} )\n }\n </span>\n </div>\n <div class=\"ax-scheduler-month-day-appointments\">\n <!-- Visible Appointment Segments -->\n @for (segment of dayCell.visibleAppointments; track segment.key + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n segment.title +\n (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-month-appointment-chip\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (!segment.allDay) {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n }\n <!-- Overflow Badge and Popover -->\n @if (dayCell.overflowCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n <!-- Stop propagation to prevent slot click -->\n +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayCell.hiddenAppointments; track segment.key + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n segment.title +\n (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n class=\"ax-scheduler-popover-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.color]=\"segment.textColor\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (!segment.allDay) {\n <span>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </span>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-timeline-day-view',\n templateUrl: './scheduler-timeline-day-view.component.html',\n styleUrl: './scheduler-timeline-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDecoratorGenericComponent, AXFormatPipe, AsyncPipe, AXDragDirective, AXDropZoneDirective],\n})\nexport class AXSchedulerTimelineDayViewComponent extends MXBaseComponent {\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n processedSegmentsForLayout = computed<AXSchedulerAppointmentSegmentType[]>(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startHour();\n const viewConfigEndHour = this.endHour();\n\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const segmentsOnThisDay: AXSchedulerAppointmentSegmentType[] = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n viewDate,\n viewConfigStartHour,\n viewConfigEndHour,\n false,\n );\n\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timelineDay');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timelineDay');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n // --- Appointment Layout Calculation ---\n appointmentLayouts = computed((): AXSchedulerAppointmentLayout[] => {\n const finalLayouts: AXSchedulerAppointmentLayout[] = [];\n const viewConfigStartHour = this.startHour();\n const viewConfigEndHour = this.endHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n\n if (\n typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0\n ) {\n return finalLayouts;\n }\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(seg) => seg.startDate.date.getTime(), (seg) => seg.originalEndDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const rowEndTimes: AXDateTime[] = [];\n\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(\n segment, // Pass the segment\n viewConfigStartHour,\n viewConfigEndHour,\n );\n\n if (!horizLayout) continue; // Segment is outside the viewable hour range or invalid\n\n // For overlap check, use the segment's start and end times\n const segmentStartTime = segment.startDate;\n const segmentEndTime = segment.endDate;\n\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n } else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n\n return finalLayouts;\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-timeline-header\">\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n</div>\n\n<div class=\"ax-scheduler-timeline-content\">\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of appointmentLayouts(); track layout.appointment.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.color]=\"layout.appointment.textColor\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [style.background-color]=\"layout.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n ></div>\n }\n </div>\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface TimelineMonthViewDayData {\n date: AXDateTime;\n // These will be segments, precisely clipped and flagged for this day\n visibleAppointments: AXSchedulerAppointmentSegmentType[];\n hiddenAppointments: AXSchedulerAppointmentSegmentType[];\n moreCount: number;\n // You might also want to store all segments for the day if needed elsewhere\n // allSegmentsForDay: AXSchedulerAppointmentSegmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-month-view',\n templateUrl: './scheduler-timeline-month-view.component.html',\n styleUrl: './scheduler-timeline-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerTimelineMonthViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n private readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n processedDayData = computed<TimelineMonthViewDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n\n const result: TimelineMonthViewDayData[] = [];\n\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay: AXSchedulerAppointmentSegmentType[] = [];\n\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.date.getTime(), // Segment's start time on this day\n (s) => s.endDate.date.getTime() - s.startDate.date.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerAppointmentType) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timelineMonth');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timelineMonth');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n class=\"ax-scheduler-month-header-date-day\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n [class.ax-state-holiday]=\"dayData.holiday.state !== 'none'\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.key + segment.originalStartDate.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Display segment's start/end times if not allDay for this segment -->\n @if (!segment.allDay) {\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n }\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.key + segment.originalStartDate.date.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (!segment.allDay) {\n <ax-subtitle>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n</div>\n","import { MXBaseComponent } from '@acorex/components/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\nimport {\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\n\nexport interface TimelineMultiDayDaySlot {\n date: AXDateTime;\n // Pass the RAW original appointments that *overlap* with this day.\n // The child timeline-day-view will handle segmentation.\n originalAppointmentsForThisDay: AXSchedulerAppointmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-multi-day-view',\n templateUrl: './scheduler-timeline-multi-day-view.component.html',\n styleUrl: './scheduler-timeline-multi-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective],\n})\nexport class AXSchedulerTimelineMultiDayViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n daysDataForTimelineViews = computed<TimelineMultiDayDaySlot[]>(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: TimelineMultiDayDaySlot[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n return appt.endDate.compare(currentDayStart, 'day') >= 0 && appt.startDate.compare(currentDayEnd, 'day') <= 0;\n });\n\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n}\n","<div class=\"ax-scheduler-timeline-day-view-container\">\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-column\">\n <div\n class=\"ax-scheduler-week-header-date-day\"\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n [class.ax-state-holiday]=\"daySlot.holiday.state !== 'none'\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"daySlot.holiday?.holiday?.title ?? ''\"\n >\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\n ( {{ daySlot.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <ax-scheduler-timeline-day-view\n [date]=\"daySlot.date\"\n [endHour]=\"endHour()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [appointments]=\"daySlot.originalAppointmentsForThisDay\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"onAppointmentDropInternal.emit($event)\"\n (appointmentClickedInternal)=\"appointmentClickedInternal.emit($event)\"\n (appointmentDblClickedInternal)=\"appointmentDblClickedInternal.emit($event)\"\n (appointmentRightClickedInternal)=\"appointmentRightClickedInternal.emit($event)\"\n >\n </ax-scheduler-timeline-day-view>\n </div>\n }\n</div>\n","import { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { MXBaseComponent } from '@acorex/components/common';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAllDaySlotData,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegmentType,\n AXSchedulerAppointmentType,\n AXSchedulerOverflowBadge,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n} from '../../scheduler.class';\nimport { AXSchedulerService } from '../../scheduler.service';\n\ntype AXSchedulerGridBadgeInfo = AXSchedulerOverflowBadge & {\n hiddenAppointments: AXSchedulerAppointmentSegmentType[];\n};\n\n@Component({\n selector: 'ax-scheduler-week-view',\n templateUrl: './scheduler-week-view.component.html',\n styleUrl: './scheduler-week-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n})\nexport class AXSchedulerWeekViewComponent extends MXBaseComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n endHour = input.required<number>();\n date = input.required<AXDateTime>();\n startHour = input.required<number>();\n appointments = input<AXSchedulerAppointmentType[]>([]);\n\n /**\n * Processes all original appointments and generates day-specific segments for the entire week.\n * Each segment represents the visible part of an appointment on a particular day.\n * The segment's 'allDay' flag indicates if it should be in the all-day slot or timed grid for that day.\n */\n processedAppointmentsForLayout = computed<AXSchedulerAppointmentSegmentType[]>(() => {\n const viewDays = this.daysArray().map((e) => e.date); // Array of AXDateTime for each day in the week\n const allOriginalAppointments = this.appointments(); // Raw appointments from input\n const viewConfigStartHour = this.startHour(); // Configured start hour for the timed grid\n const viewConfigEndHour = this.endHour(); // Configured end hour for the timed grid\n\n if (!viewDays || viewDays.length === 0 || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const allSegmentsInView: AXSchedulerAppointmentSegmentType[] = [];\n for (const day of viewDays) {\n // For each day in the week\n const dayAsStartOfDay = day.startOf('day'); // Use startOf('day') for consistent cache key if AXDateTime interns\n for (const appt of allOriginalAppointments) {\n // Determine segmentation boundaries for this specific 'day':\n // - If original appt is allDay, segment across the full 0-24h of 'day'.\n // The service method will ensure segment.allDay is true.\n // - If original appt is timed, segment across viewConfigStartHour-viewConfigEndHour.\n // The service method will set segment.allDay=true if this timed segment fills that window.\n const effectiveSegmentStartHour = appt.allDay ? 0 : viewConfigStartHour;\n const effectiveSegmentEndHour = appt.allDay ? 24 : viewConfigEndHour;\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay, // Pass the AXDateTime object for the current day in loop\n effectiveSegmentStartHour,\n effectiveSegmentEndHour,\n );\n\n if (segment) {\n allSegmentsInView.push(segment);\n }\n }\n }\n\n // Deduplicate segments. A segment is unique by its original key and its specific start/end on a day.\n // The service method already produces day-specific start/end times.\n const uniqueSegmentsMap = new Map<string, AXSchedulerAppointmentSegmentType>();\n allSegmentsInView.forEach((seg) => {\n // Create a unique key for the segment based on original appt key and segment's own date range\n const mapKey = `${seg.key}-${seg.startDate.format('YYYYMMDDHHmmssSSS')}-${seg.endDate.format('YYYYMMDDHHmmssSSS')}`;\n if (!uniqueSegmentsMap.has(mapKey)) {\n uniqueSegmentsMap.set(mapKey, seg);\n }\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n\n /**\n * Segments that are to be displayed in the timed grid area of the week view.\n * These are segments from processedAppointmentsForLayout where segment.allDay is false.\n */\n timedGridSegments = computed<AXSchedulerAppointmentSegmentType[]>(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegment: AXSchedulerAppointmentType) {\n // 'appointmentSegment' here is the segment that was interacted with\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n this.schedulerService.handleEvent(\n { event: mouseEvent, appointment: originalAppointment },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n if (slotData) this.schedulerService.handleEvent({ event: mouseEvent, slot: slotData }, this.eventOutputMap, 'slot');\n }\n handleAllDayDrop(e: AXDropZoneDropEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const droppedItem = e.dropped.dragData() as AXSchedulerAppointmentType;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n this.onAppointmentDropInternal.emit({\n event: e,\n slot: slotData,\n appointment: originalAppointment,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n daysArray = computed(\n (): { date: AXDateTime; holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } }[] => {\n const time = this.date();\n if (!time) return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n },\n );\n\n totalBlocksPerViewDay = computed(() => {\n const startH = this.startHour();\n const endH = this.endHour();\n if (typeof startH !== 'number' || typeof endH !== 'number') return 0;\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n\n appointmentsByStartBlock = computed(() => {\n const viewDate = this.date(); // This should be the start date of the week\n const startH = this.startHour();\n const endH = this.endHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateWeekViewAppointmentsByStartBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n );\n });\n\n activeAppointmentsInBlock = computed((): AXSchedulerActiveAppointmentsInBlock => {\n const viewDate = this.date(); // Start date of the week\n const startH = this.startHour();\n const endH = this.endHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateActiveAppointmentsInBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n 7, // Explicitly 7 days for week view\n );\n });\n\n visibleAppointmentsLayout = computed((): AXSchedulerAppointmentLayout[] => {\n const layouts: AXSchedulerAppointmentLayout[] = [];\n const startingBlocks = this.appointmentsByStartBlock();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n const occupiedBlocks: Record<number, Record<number, any>> = {};\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n const dayBlocks = startingBlocks[dayIndex] ?? {};\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n if (occupiedBlocks[dayIndex]?.[blockIndex]) continue;\n\n const startingAppointments = dayBlocks[blockIndex] ?? [];\n if (startingAppointments.length > 0) {\n const appointmentToShow = orderBy(startingAppointments, [(e) => e.endDate.date.getTime()], ['desc'])[0];\n\n const C = dayIndex;\n let layoutLeft = '0px';\n if (C > 0 && N > 1) layoutLeft = `calc(${C * (100 / N)}%)`;\n const layoutTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n let layoutHeight = '0px';\n let appointmentDurationMinutes = 0;\n if (appointmentToShow.endDate && appointmentToShow.startDate) {\n appointmentDurationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentToShow);\n if (appointmentDurationMinutes > 0) {\n const heightBlock = appointmentDurationMinutes / 30;\n layoutHeight = `max(0px, calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px))`;\n }\n }\n\n layouts.push({\n layoutTop,\n layoutLeft,\n layoutHeight,\n appointment: appointmentToShow,\n layoutWidth: 'calc(100% / 7 - 2rem)',\n });\n\n const blocksToOccupy = Math.ceil(appointmentDurationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = blockIndex + i;\n if (occupiedBlockIndex < totalBlocksPerDay) {\n if (!occupiedBlocks[dayIndex]) occupiedBlocks[dayIndex] = {};\n if (!occupiedBlocks[dayIndex][occupiedBlockIndex]) {\n occupiedBlocks[dayIndex][occupiedBlockIndex] = appointmentToShow.key;\n }\n } else {\n break;\n }\n }\n }\n }\n }\n return layouts;\n });\n\n visualOccupancyMap = computed(() => {\n const map = new Map<string, any>();\n const visibleLayouts = this.visibleAppointmentsLayout();\n const viewStartDate = this.date();\n const startH = this.startHour();\n const endH = this.endHour();\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n\n if (!viewStartDate || typeof startH !== 'number' || typeof endH !== 'number') return map;\n\n for (const appointmentLayout of visibleLayouts) {\n const startInfo = this.schedulerService.getBlockIdentifier(\n appointmentLayout.appointment.startDate,\n viewStartDate,\n startH,\n endH,\n 7,\n );\n if (!startInfo) continue;\n\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentLayout.appointment);\n const blocksToOccupy = Math.ceil(durationMinutes / 30);\n\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = startInfo.blockIndex + i;\n if (occupiedBlockIndex >= 0 && occupiedBlockIndex < totalBlocksPerDay) {\n const mapKey = `${startInfo.dayIndex}-${occupiedBlockIndex}`;\n if (!map.has(mapKey)) {\n map.set(mapKey, appointmentLayout.appointment.key);\n }\n } else {\n break;\n }\n }\n }\n return map;\n });\n\n overflowBadges = computed((): AXSchedulerOverflowBadge[] => {\n const badges: AXSchedulerOverflowBadge[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badges;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n const hiddenAppointments = activeAppointments.filter(\n (appointment) => appointment.key !== visibleAppointmentKey,\n );\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.key),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n badges.push({ key: blockMapKey, count: newlyHidden.length, badgeTop, badgeLeft });\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.key));\n }\n }\n }\n return badges;\n });\n\n /**\n * Structures all-day (or \"becomes all-day\") segments for rendering in the all-day slots for each day of the week.\n */\n allDayAppointmentsPerDay = computed((): AXSchedulerAllDaySlotData[] => {\n const daysInWeek = this.daysArray().map((e) => e.date); // AXDateTime objects for each day in the week\n const allSegmentsInView = this.processedAppointmentsForLayout(); // All processed segments\n const result: AXSchedulerAllDaySlotData[] = [];\n\n if (!daysInWeek || daysInWeek.length === 0) return result;\n\n daysInWeek.forEach((dayDate) => {\n const currentDayStart = dayDate.startOf('day'); // For accurate day comparison\n\n // Filter segments that are marked as 'allDay' AND belong to the current 'dayDate'\n const allDaySegmentsForThisDay = allSegmentsInView.filter(\n (segment) => segment.allDay && segment.startDate.startOf('day').equal(currentDayStart, 'day'),\n );\n\n // Sort these segments for consistent display\n // Primarily by original start time, then by duration of original appointment, then title\n const sortedAppointmentsForThisDay = orderBy(\n allDaySegmentsForThisDay,\n [\n (s) => s.originalStartDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'desc', 'asc'], // Earlier start, longer duration, then alphabetical title\n );\n\n result.push({\n day: dayDate, // The AXDateTime for this day column\n appointments: sortedAppointmentsForThisDay, // Array of segments for the all-day slot\n });\n });\n return result;\n });\n\n overflowBadgesWithData = computed((): AXSchedulerGridBadgeInfo[] => {\n const badgesInfo: AXSchedulerGridBadgeInfo[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badgesInfo;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n // Find all hidden appointments for this specific block\n const hiddenAppointments = activeAppointments.filter(\n (appointment) => appointment.key !== visibleAppointmentKey,\n );\n // Find which of those hidden ones haven't been counted today yet\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.key),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n // Keep your positioning logic for the badge itself\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n // Store the badge info *and* the list of appointments it represents\n badgesInfo.push({\n key: blockMapKey,\n count: newlyHidden.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: newlyHidden, // Store the actual hidden appointments\n });\n\n // Mark these as counted for today\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.key));\n }\n }\n }\n // Sort the badges by top then left for consistent rendering order? (Optional)\n // badgesInfo.sort((a, b) => {\n // const topCompare = a.badgeTop.localeCompare(b.badgeTop);\n // if (topCompare !== 0) return topCompare;\n // return a.badgeLeft.localeCompare(b.badgeLeft);\n // });\n return badgesInfo;\n });\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-week-header\">\n <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\"></div>\n <div class=\"ax-scheduler-week-header-date\" aria-hidden=\"true\">\n @for (day of daysArray(); track day.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(day.date)\"\n class=\"ax-scheduler-week-header-date-day\"\n [class.ax-state-holiday]=\"day.holiday.state !== 'none'\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"day.holiday?.holiday?.title ?? ''\"\n >\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\n ( {{ day.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\">{{ 'dateTime.duration.all-day' | translate | async }}</div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-week-header-date\">\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleAllDayDrop($event, slotData.day)\"\n class=\"ax-scheduler-all-day-slot\"\n (click)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (dblclick)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (contextmenu)=\"handleAllDaySlotEvent($event, slotData.day)\"\n >\n @if (slotData.appointments.length > 0) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || slotData.appointments[0].readonly || readonly()\"\n [dragData]=\"slotData.appointments[0]\"\n (click)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (dblclick)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n [title]=\"slotData.appointments[0].title\"\n class=\"ax-scheduler-header-week-appointment\"\n [style.color]=\"slotData.appointments[0].textColor\"\n [style.background-color]=\"slotData.appointments[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ slotData.appointments[0].title }}</ax-title>\n </div>\n }\n @if (slotData.appointments.length > 1) {\n <div #moreAppointments class=\"ax-scheduler-appointment-badge\">+{{ slotData.appointments.length - 1 }}</div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\n @for (appointment of slotData.appointments; track appointment.key; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-week-time-container\">\n <div class=\"ax-scheduler-week-time\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-week-table-container\">\n <div class=\"ax-scheduler-week-appointment-container\">\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appt.appointment.readonly || readonly()\"\n [dragData]=\"appt.appointment\"\n (click)=\"handleAppointmentEvent($event, appt.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appt.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appt.appointment)\"\n [title]=\"appt.appointment.title\"\n [style.height]=\"appt.layoutHeight\"\n class=\"ax-scheduler-week-appointment\"\n [style.color]=\"appt.appointment.textColor\"\n [style.inset-block-start]=\"appt.layoutTop\"\n [style.inset-inline-start]=\"appt.layoutLeft\"\n [style.background-color]=\"appt.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appt.appointment.title }}</ax-title>\n <ax-subtitle>\n {{\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n\n <!-- Overflow Badges with Popovers -->\n @for (badge of overflowBadgesWithData(); track badge.key) {\n <!-- Wrap badge and popover for targeting -->\n <div\n style=\"position: absolute\"\n class=\"ax-scheduler-badge-wrapper\"\n [style.inset-block-start]=\"badge.badgeTop\"\n [style.inset-inline-start]=\"badge.badgeLeft\"\n >\n <!-- The Badge itself -->\n <div #actionButton class=\"ax-scheduler-appointment-badge\">+{{ badge.count }}</div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\">\n @for (appointment of badge.hiddenAppointments; track appointment.key) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n [style.color]=\"appointment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n <ax-subtitle>\n {{\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n </div>\n }\n </div>\n\n <table aria-hidden=\"true\" [border]=\"1\">\n <tbody>\n @for (time of hoursArray(); track time.date.getTime()) {\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 0)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n ></td>\n }\n </tr>\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 1)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n ></td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport {\n AXDataSource,\n AXValueChangedEvent,\n convertArrayToDataSource,\n MXBaseComponent,\n} from '@acorex/components/common';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { distinctUntilChanged, map, Observable, of, startWith, switchMap } from 'rxjs';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointmentEvent,\n AXSchedulerAppointmentType,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotEvent,\n AXSchedulerView,\n} from './scheduler.class';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\n@Component({\n selector: 'ax-scheduler',\n templateUrl: './scheduler.component.html',\n styleUrls: ['./scheduler.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ],\n providers: [AXUnsubscriber],\n})\nexport class AXSchedulerComponent extends MXBaseComponent implements OnInit {\n private platformId = inject(PLATFORM_ID);\n private unsubscriber = inject(AXUnsubscriber);\n private formatService = inject(AXFormatService);\n private localeService = inject(AXLocaleService);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n private translationService = inject(AXTranslationService);\n\n private viewModeSelectbox = viewChild(AXSelectBoxComponent);\n\n displayViews: Record<AXSchedulerView, string> = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n timelineDay: 'daily-timeline',\n timelineMultiDay: 'multi-day-timeline',\n timelineMonth: 'monthly-timeline',\n agenda: 'agenda',\n };\n\n calendar = input<'gregorian' | 'solar-hijri' | string>();\n calendarType = linkedSignal<'gregorian' | 'solar-hijri' | string>(\n () => this.calendar() ?? this.localeService.activeProfile().calendar.system,\n );\n\n startingDate = input<Date>(new Date());\n currentDate = linkedSignal<AXDateTime>(() =>\n this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'),\n );\n\n rtl = signal(false);\n isLoading = signal(false);\n isFullScreen = signal(false);\n viewsDataSource = signal<{ id: string; text: string }[]>([]);\n oldDate = signal<AXDateTime>(this.calendarService.create(new Date(), this.calendarType()));\n\n endHour = input(24);\n startHour = input(8);\n keyField = input('id');\n readonly = input(false);\n draggable = input(true);\n titleField = input('title');\n allDayField = input('allDay');\n allowFullScreen = input(true);\n endDateField = input('endDate');\n multiDayViewDaysCount = input(7);\n readonlyField = input('readonly');\n startDateField = input('startDate');\n textColorField = input('textColor');\n descriptionField = input('description');\n backgroundColorField = input('backgroundColor');\n dataSource = input<AXDataSource<any> | any[]>([]);\n firstDayOfWeek = input<AXDayOfWeekName>('Sunday');\n views = input<AXSchedulerView[]>([\n 'day',\n 'week',\n 'month',\n 'timelineDay',\n 'timelineMultiDay',\n 'timelineMonth',\n 'agenda',\n ]);\n\n selectedView = model<AXSchedulerView>(this.views()[0]);\n\n // --- Public Outputs ---\n onSlotClicked = output<AXSchedulerSlotEvent>();\n onSlotDblClicked = output<AXSchedulerSlotEvent>();\n onSlotRightClick = output<AXSchedulerSlotEvent>();\n onAppointmentDrop = output<AXSchedulerSlotDropEvent>();\n onAppointmentClicked = output<AXSchedulerAppointmentEvent>();\n onAppointmentDblClicked = output<AXSchedulerAppointmentEvent>();\n onAppointmentRightClick = output<AXSchedulerAppointmentEvent>();\n\n // --- Internal Handlers for View Outputs ---\n protected handleSlotClickInternal(eventData: AXSchedulerSlotEvent) {\n this.onSlotClicked.emit(eventData);\n }\n protected handleSlotDblClickInternal(eventData: AXSchedulerSlotEvent) {\n this.onSlotDblClicked.emit(eventData);\n }\n protected handleSlotRightClickInternal(eventData: AXSchedulerSlotEvent) {\n this.onSlotRightClick.emit(eventData);\n }\n protected handleAppointmentClickInternal(eventData: AXSchedulerAppointmentEvent) {\n this.onAppointmentClicked.emit(eventData);\n }\n protected handleAppointmentDblClickInternal(eventData: AXSchedulerAppointmentEvent) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n protected handleAppointmentRightClickInternal(eventData: AXSchedulerAppointmentEvent) {\n this.onAppointmentRightClick.emit(eventData);\n }\n protected handleAppointmentDropInternal(eventData: AXSchedulerSlotDropEvent) {\n this.onAppointmentDrop.emit(eventData);\n }\n\n override ngOnInit() {\n super.ngOnInit();\n\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n this.appointmentsList().refresh();\n });\n\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox().selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n });\n\n if (isPlatformBrowser(this.platformId)) this.rtl.set(AXHtmlUtil.isRtl(this.getHostElement()));\n this.fillDataSource();\n }\n\n async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n\n private getGridDateRange(dateInMonth: AXDateTime): { gridStartDate: AXDateTime; gridEndDate: AXDateTime } {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n\n appointmentsList = computed(() => {\n const v = this.dataSource();\n let ds: AXDataSource<any>;\n if (Array.isArray(v)) {\n ds = convertArrayToDataSource(v, { key: this.keyField(), pageSize: 9999 });\n } else {\n ds = v as AXDataSource<any>;\n }\n // ds.refresh();\n return ds;\n });\n\n private dataSourceItemsSignal = toSignal(\n new Observable<AXDataSource<any> | null>((subscriber) => {\n const watcher = effect(() => {\n const dsInstance = this.appointmentsList();\n subscriber.next(dsInstance);\n });\n return () => {\n watcher.destroy();\n };\n }).pipe(\n distinctUntilChanged(),\n switchMap((dsInstance) => {\n if (!dsInstance) return of([]);\n return dsInstance.onChanged.pipe(\n map((event) => event.items ?? []),\n startWith(dsInstance.items ?? []),\n );\n }),\n ),\n { initialValue: [] },\n );\n\n #updatedDataSource = effect(() => {\n const ds = this.appointmentsList();\n untracked(() => {\n if (ds) ds.refresh();\n });\n });\n\n currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timelineDay':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timelineMultiDay': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(\n this.currentDate().add('day', this.multiDayViewDaysCount() - 1),\n 'datetime',\n {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n },\n );\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timelineMonth':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n\n calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timelineMultiDay':\n return 'day';\n case 'month':\n case 'timelineMonth':\n return 'month';\n case 'timelineDay':\n return 'day';\n }\n });\n\n mappedAppointments = computed(() => {\n const items = this.dataSourceItemsSignal();\n const keyField = this.keyField();\n const titleField = this.titleField();\n const allDayField = this.allDayField();\n const readonlyField = this.readonlyField();\n const textColorField = this.textColorField();\n const descriptionField = this.descriptionField();\n const backgroundColorField = this.backgroundColorField();\n const startDateField = this.startDateField();\n const endDateField = this.endDateField();\n\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item[startDateField], this.calendarType());\n const endDate = this.calendarService.create(item[endDateField], this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n\n // Calculate singleDay based on *calendar day*, not just time\n const isSingleDay = startDate.equal(endDate, 'day');\n\n const appointment: AXSchedulerAppointmentType = {\n key: item[keyField],\n title: item[titleField],\n startDate,\n endDate,\n allDay: !!item[allDayField], // Ensure boolean\n singleDay: isSingleDay, // Use calculated singleDay\n readonly: !!item[readonlyField],\n textColor: item[textColorField],\n description: item[descriptionField],\n backgroundColor: item[backgroundColorField],\n };\n return appointment;\n })\n .filter((appt): appt is AXSchedulerAppointmentType => appt !== null); // Filter out nulls from invalid dates\n });\n\n viewAppointments = computed<AXSchedulerAppointmentType[]>(() => {\n const mapped = this.mappedAppointments();\n const view = this.selectedView();\n const current = this.currentDate();\n\n if (!current || mapped.length === 0) return [];\n\n switch (view) {\n case 'day':\n case 'timelineDay': {\n const dayStart = current.startOf('day');\n const dayEnd = current.endOf('day');\n return mapped.filter(\n (appt) => appt.endDate.compare(dayStart, 'day') >= 0 && appt.startDate.compare(dayEnd, 'day') <= 0,\n );\n }\n case 'week': {\n const weekStart = current;\n const weekEnd = weekStart.add('day', 7);\n return mapped.filter(\n (appt) => appt.startDate.compare(weekEnd, 'day') < 0 && appt.endDate.compare(weekStart, 'day') >= 0,\n );\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const exclusiveGridEndDate = gridEndDate.add('day', 1);\n return mapped.filter(\n (appt) =>\n appt.startDate.compare(exclusiveGridEndDate, 'day') < 0 && appt.endDate.compare(gridStartDate, 'day') >= 0,\n );\n }\n case 'timelineMonth': {\n const dayStart = current.startOf('month');\n const dayEnd = dayStart.endOf('month');\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n case 'agenda':\n case 'timelineMultiDay': {\n const dayStart = current;\n const dayEnd = dayStart.add('day', this.multiDayViewDaysCount());\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n }\n });\n\n viewChanged(e: AXValueChangedEvent<AXSchedulerView>) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n\n if (oldView === 'week') {\n const oldDayOfWeek = this.oldDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n\n this.oldDate.set(this.currentDate());\n\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n }\n\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timelineDay':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n\n case 'agenda':\n case 'timelineMultiDay':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timelineMonth':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timelineDay':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n\n case 'agenda':\n case 'timelineMultiDay':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timelineMonth':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n\n calendarDateChanged(e: any) {\n let currentDate = this.calendarService.create(e, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n this.currentDate.set(currentDate);\n }\n\n handleFullScreen() {\n if (!this.isFullScreen()) this.getHostElement().classList.add('ax-full-screen-container');\n if (this.isFullScreen()) this.getHostElement().classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n}\n","<div class=\"ax-scheduler-container\">\n <div class=\"ax-scheduler-header\">\n <div class=\"ax-scheduler-date\">\n <ax-button look=\"blank\" (onClick)=\"prevClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [ngClass]=\"{\n 'ax-icon-chevron-left': !rtl(),\n 'ax-icon-chevron-right': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"nextClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [ngClass]=\"{\n 'ax-icon-chevron-right': !rtl(),\n 'ax-icon-chevron-left': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (ngModelChange)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"200\"\n [ngModel]=\"selectedView()\"\n [dataSource]=\"viewsDataSource()\"\n (onValueChanged)=\"viewChanged($event)\"\n ></ax-select-box>\n\n @if (allowFullScreen()) {\n <ax-button look=\"blank\" (onClick)=\"handleFullScreen()\">\n <ax-icon>\n <i\n class=\"fa-solid fa-expand\"\n [ngClass]=\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\"\n ></i>\n </ax-icon>\n </ax-button>\n }\n </div>\n </div>\n <div class=\"ax-scheduler-views-container\">\n @switch (selectedView()) {\n @case ('day') {\n <ax-scheduler-day-view\n [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-day-view>\n }\n @case ('week') {\n <ax-scheduler-week-view\n [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-week-view>\n }\n @case ('month') {\n <ax-scheduler-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-month-view>\n }\n @case ('timelineDay') {\n <ax-scheduler-timeline-day-view\n [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-day-view>\n }\n @case ('timelineMultiDay') {\n <ax-scheduler-timeline-multi-day-view\n [endHour]=\"endHour()\"\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [startHour]=\"startHour()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-multi-day-view>\n }\n @case ('timelineMonth') {\n <ax-scheduler-timeline-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-month-view>\n }\n @case ('agenda') {\n <ax-scheduler-agenda-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-agenda-view>\n }\n }\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\n\n@NgModule({\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXSchedulerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-scheduler.mjs","sources":["../../../../packages/components/scheduler/src/lib/scheduler.service.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.ts","../../../../packages/components/scheduler/src/lib/views/agenda/scheduler-agenda-view.component.html","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/day/scheduler-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/month/scheduler-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-day/scheduler-timeline-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-month/scheduler-timeline-month-view.component.html","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.ts","../../../../packages/components/scheduler/src/lib/views/timeline-multi-day/scheduler-timeline-multi-day-view.component.html","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.ts","../../../../packages/components/scheduler/src/lib/views/week/scheduler-week-view.component.html","../../../../packages/components/scheduler/src/lib/scheduler.component.ts","../../../../packages/components/scheduler/src/lib/scheduler.component.html","../../../../packages/components/scheduler/src/lib/scheduler.module.ts","../../../../packages/components/scheduler/src/acorex-components-scheduler.ts"],"sourcesContent":["import { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { inject, Injectable } from '@angular/core';\nimport {\n AXDayOfWeekName,\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAppointmentsByStartBlock,\n AXSchedulerAppointmentSegment,\n AXSchedulerBlockIdentifier,\n AXSchedulerInternalAppointment,\n AXSchedulerView,\n} from './scheduler.class';\nimport { AXSchedulerAppointmentMouseEvent, AXSchedulerSlotMouseEvent } from './scheduler.component';\n\n@Injectable({\n providedIn: 'root', // Provide service application-wide\n})\nexport class AXSchedulerService {\n private calendarService = inject(AXCalendarService);\n private formatService = inject(AXFormatService);\n\n readonly HOURS_PER_DAY = 24;\n readonly MINUTES_PER_HOUR = 60;\n readonly BLOCK_DURATION_MINUTES = 30;\n readonly MILLISECONDS_PER_MINUTE = 60 * 1000;\n readonly MILLISECONDS_PER_DAY = this.HOURS_PER_DAY * this.MINUTES_PER_HOUR * this.MILLISECONDS_PER_MINUTE;\n\n /**\n * Checks if two appointments overlap in time.\n */\n doAppointmentsOverlap(\n appointmentA: AXSchedulerInternalAppointment,\n appointmentB: AXSchedulerInternalAppointment,\n ): boolean {\n if (!appointmentA?.startDate || !appointmentA.endDate || !appointmentB?.startDate || !appointmentB.endDate) {\n return false;\n }\n const startA = appointmentA.startDate.date.getTime();\n const endA = appointmentA.endDate.date.getTime();\n const startB = appointmentB.startDate.date.getTime();\n const endB = appointmentB.endDate.date.getTime();\n // Uses strict overlap check (change < / > to <= / >= if touching boundaries count)\n return startA < endB && endA > startB;\n }\n\n /**\n * Calculates appointment duration in minutes.\n */\n calculateDurationInMinutes(Appointment: AXSchedulerInternalAppointment): number {\n if (!Appointment?.startDate || !Appointment.endDate) return 0;\n const durationMillis = Appointment.endDate.date.getTime() - Appointment.startDate.date.getTime();\n return Math.max(0, durationMillis / this.MILLISECONDS_PER_MINUTE);\n }\n\n /**\n * Calculates appointment duration in blocks (default 30 min).\n */\n calculateDurationInBlocks(appointment: AXSchedulerInternalAppointment): number {\n const durationMinutes = this.calculateDurationInMinutes(appointment);\n return Math.ceil(durationMinutes / this.BLOCK_DURATION_MINUTES);\n }\n\n /**\n * Gets the day index (relative to view start) and block index (relative to start hour)\n * for a given date time within the view context. Returns null if outside view.\n */\n getBlockIdentifier(\n dateTime: AXDateTime,\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number, // Exclusive end hour\n viewTotalDays = 1, // Default to 1 for day view\n ): AXSchedulerBlockIdentifier | null {\n if (!viewStartDate || !dateTime || typeof startHour !== 'number' || typeof endHour !== 'number') {\n return null;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Calculate exclusive end date\n\n // Check if dateTime is within the view's date and time range\n if (\n dateTime.compare(viewStartDate, 'day') < 0 ||\n dateTime.compare(viewEndDate, 'day') >= 0 || // Check against exclusive end date\n dateTime.hour < startHour ||\n dateTime.hour >= endHour // Check against exclusive end hour\n ) {\n return null;\n }\n\n // Calculate day index relative to view start\n const dayIndex = Math.floor((dateTime.date.getTime() - viewStartDate.date.getTime()) / this.MILLISECONDS_PER_DAY);\n\n // Ensure dayIndex is valid for the view duration\n if (dayIndex < 0 || dayIndex >= viewTotalDays) {\n return null;\n }\n\n const minutesIntoDay = dateTime.hour * this.MINUTES_PER_HOUR + dateTime.minute;\n const minutesIntoViewHours = minutesIntoDay - startHour * this.MINUTES_PER_HOUR;\n\n // This check should be redundant due to initial hour check, but safe to keep\n if (minutesIntoViewHours < 0) return null;\n\n const blockIndex = Math.floor(minutesIntoViewHours / this.BLOCK_DURATION_MINUTES);\n\n return { dayIndex, blockIndex };\n }\n\n /**\n * Groups appointments by the blocks they are ACTIVE in for a given view.\n * @param viewTotalDays - Number of days in the current view (1 for Day, 7 for Week, etc.)\n */\n calculateActiveAppointmentsInBlock(\n singleDayAppointments: AXSchedulerAppointmentSegment[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n viewTotalDays: number, // Now required\n ): AXSchedulerActiveAppointmentsInBlock {\n const blocks: AXSchedulerActiveAppointmentsInBlock = {};\n if (!viewStartDate || typeof startHour !== 'number' || typeof endHour !== 'number' || viewTotalDays <= 0) {\n return blocks;\n }\n const viewEndDate = viewStartDate.add('day', viewTotalDays); // Exclusive end date\n // Calculate total blocks based on consistent block duration\n const totalBlocksPerDay = Math.max(\n 0,\n (endHour - startHour) * (this.MINUTES_PER_HOUR / this.BLOCK_DURATION_MINUTES),\n );\n\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id) return;\n\n // Clamp appointment start/end times to the view boundaries (days and hours)\n let effectiveStart = appointment.startDate.compare(viewStartDate) < 0 ? viewStartDate : appointment.startDate;\n if (effectiveStart.hour < startHour) effectiveStart = effectiveStart.set('hour', startHour).startOf('hour');\n\n let effectiveEnd = appointment.endDate.compare(viewEndDate) >= 0 ? viewEndDate : appointment.endDate;\n if (effectiveEnd.hour >= endHour) {\n const endDayBase = effectiveEnd.compare(viewEndDate) >= 0 ? viewEndDate.add('day', -1) : effectiveEnd;\n effectiveEnd = endDayBase.set('hour', endHour).startOf('hour');\n }\n\n // Get start block info using the specified viewTotalDays\n const startInfo = this.getBlockIdentifier(effectiveStart, viewStartDate, startHour, endHour, viewTotalDays);\n if (!startInfo) return; // Appointment starts completely outside view\n\n // Get end block info (last block occupied) using the specified viewTotalDays\n const timeBeforeEnd = effectiveEnd.add('minute', -1);\n const endInfo = this.getBlockIdentifier(timeBeforeEnd, viewStartDate, startHour, endHour, viewTotalDays);\n // If endInfo is null, it means the appointment ends before the viewable part starts,\n // or exactly at the start, so it occupies no blocks. Handle this case.\n if (\n !endInfo ||\n endInfo.dayIndex < startInfo.dayIndex ||\n (endInfo.dayIndex === startInfo.dayIndex && endInfo.blockIndex < startInfo.blockIndex)\n ) {\n return; // Appointment effectively has no duration within the viewable blocks\n }\n\n // Iterate through the days and blocks the appointment spans within the view\n for (let dIdx = startInfo.dayIndex; dIdx <= endInfo.dayIndex; dIdx++) {\n // Clamp day index just in case (should be handled by getBlockIdentifier checks)\n if (dIdx < 0 || dIdx >= viewTotalDays) continue;\n\n const startBlock = dIdx === startInfo.dayIndex ? startInfo.blockIndex : 0;\n // Make sure endBlock doesn't exceed the calculated totalBlocksPerDay\n const endBlock = dIdx === endInfo.dayIndex ? endInfo.blockIndex : totalBlocksPerDay - 1;\n\n if (!blocks[dIdx]) blocks[dIdx] = {};\n\n for (let bIdx = startBlock; bIdx <= endBlock; bIdx++) {\n // Final check for block index validity\n if (bIdx >= 0 && bIdx < totalBlocksPerDay) {\n if (!blocks[dIdx][bIdx]) blocks[dIdx][bIdx] = [];\n // Avoid duplicates if the same appointment is processed multiple times (shouldn't happen with outer loop)\n if (!blocks[dIdx][bIdx].some((e) => e.id === appointment.id)) {\n blocks[dIdx][bIdx].push(appointment);\n }\n }\n }\n }\n });\n return blocks;\n }\n\n /**\n * Calculates max concurrency and effective total columns for Day View appointments.\n */\n calculateDayViewConcurrencyInfo(\n singleDayAppointments: AXSchedulerAppointmentSegment[], // These are segments for the current day\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): Map<any, { maxConcurrency: number; effectiveTotalColumns: number }> {\n const resultInfo = new Map<any, { maxConcurrency: number; effectiveTotalColumns: number }>();\n if (singleDayAppointments.length === 0) return resultInfo;\n\n const activeAppointmentsMap = this.calculateActiveAppointmentsInBlock(\n singleDayAppointments,\n viewStartDate,\n startHour,\n endHour,\n 1, // Day view\n );\n const blocks = activeAppointmentsMap[0] ?? {};\n\n // 1. Calculate initial maxConcurrency for each appointment segment\n const maxConcurrencyMap = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n let maxOverlapInSegmentBlocks = 0;\n const segmentStartMinutes = segment.startDate.hour * this.MINUTES_PER_HOUR + segment.startDate.minute;\n const segmentEndMinutes = segment.endDate.hour * this.MINUTES_PER_HOUR + segment.endDate.minute;\n\n // Determine blocks this segment occupies relative to view's startHour\n const viewRelativeStartMinutes = Math.max(0, segmentStartMinutes - startHour * this.MINUTES_PER_HOUR);\n const viewRelativeEndMinutes = Math.min(\n (endHour - startHour) * this.MINUTES_PER_HOUR,\n segmentEndMinutes - startHour * this.MINUTES_PER_HOUR,\n );\n\n const firstBlockIndex = Math.floor(viewRelativeStartMinutes / this.BLOCK_DURATION_MINUTES);\n const lastBlockIndex = Math.floor((viewRelativeEndMinutes - 1) / this.BLOCK_DURATION_MINUTES); // -1 because end is exclusive for block counting\n\n for (let blockIdx = firstBlockIndex; blockIdx <= lastBlockIndex; blockIdx++) {\n const appointmentsInBlock = blocks[blockIdx];\n if (appointmentsInBlock) {\n maxOverlapInSegmentBlocks = Math.max(maxOverlapInSegmentBlocks, appointmentsInBlock.length);\n }\n }\n maxConcurrencyMap.set(segment.id, maxOverlapInSegmentBlocks || 1);\n });\n\n // 2. Iteratively determine effectiveTotalColumns for groups of overlapping appointments\n const initialEffectiveTotalColumns = new Map<any, number>();\n singleDayAppointments.forEach((segment) => {\n initialEffectiveTotalColumns.set(segment.id, maxConcurrencyMap.get(segment.id) || 1);\n });\n\n let changed = true;\n while (changed) {\n changed = false;\n singleDayAppointments.forEach((segmentA) => {\n singleDayAppointments.forEach((segmentB) => {\n if (segmentA.id === segmentB.id) return;\n\n if (this.doAppointmentsOverlap(segmentA, segmentB)) {\n const etcA = initialEffectiveTotalColumns.get(segmentA.id) || 1;\n const etcB = initialEffectiveTotalColumns.get(segmentB.id) || 1;\n const maxETC = Math.max(etcA, etcB);\n\n if (etcA !== maxETC) {\n initialEffectiveTotalColumns.set(segmentA.id, maxETC);\n changed = true;\n }\n if (etcB !== maxETC) {\n initialEffectiveTotalColumns.set(segmentB.id, maxETC);\n changed = true;\n }\n }\n });\n });\n }\n\n // Populate final result\n singleDayAppointments.forEach((segment) => {\n resultInfo.set(segment.id, {\n maxConcurrency: maxConcurrencyMap.get(segment.id) || 1,\n effectiveTotalColumns: initialEffectiveTotalColumns.get(segment.id) || 1,\n });\n });\n\n return resultInfo;\n }\n\n /**\n * Groups appointments by the block they START in for Week View.\n */\n calculateWeekViewAppointmentsByStartBlock(\n singleDayAppointments: AXSchedulerAppointmentSegment[],\n viewStartDate: AXDateTime,\n startHour: number,\n endHour: number,\n ): AXSchedulerAppointmentsByStartBlock {\n const blocks: AXSchedulerAppointmentsByStartBlock = {};\n singleDayAppointments.forEach((appointment) => {\n if (!appointment.startDate) return;\n const startInfo = this.getBlockIdentifier(appointment.startDate, viewStartDate, startHour, endHour, 7);\n if (startInfo) {\n const { dayIndex, blockIndex } = startInfo;\n if (!blocks[dayIndex]) blocks[dayIndex] = {};\n if (!blocks[dayIndex][blockIndex]) blocks[dayIndex][blockIndex] = [];\n blocks[dayIndex][blockIndex].push(appointment);\n }\n });\n return blocks;\n }\n\n /**\n * Groups appointments by the day(s) they occur on within a given date range.\n * Returns a Map where the key is the date string ('YYYY-MM-DD') and the value is an array of appointments.\n */\n groupAppointmentsByDay(\n appointments: AXSchedulerInternalAppointment[],\n viewStartDate: AXDateTime, // First day visible in the grid\n viewEndDate: AXDateTime, // Last day visible in the grid\n ): Map<string, AXSchedulerInternalAppointment[]> {\n const groupedAppointments = new Map<string, AXSchedulerInternalAppointment[]>();\n if (!appointments || appointments.length === 0 || !viewStartDate || !viewEndDate) {\n return groupedAppointments;\n }\n\n // Pre-calculate the end date for comparison (exclusive)\n const exclusiveViewEndDate = viewEndDate.add('day', 1);\n\n appointments.forEach((appointment) => {\n if (!appointment.startDate || !appointment.endDate || !appointment.id) return;\n\n // Determine the effective start and end dates of the appointment clamped by the view range\n const appointmentStart = appointment.startDate;\n const appointmentEnd = appointment.endDate;\n\n // Skip if appointment ends before the view starts or starts after the view ends\n if (\n appointmentEnd.compare(viewStartDate, 'day') < 0 ||\n appointmentStart.compare(exclusiveViewEndDate, 'day') >= 0\n ) {\n return;\n }\n\n // Clamp start date to the view start date\n let currentDay =\n appointmentStart.compare(viewStartDate, 'day') < 0 ? viewStartDate : appointmentStart.startOf('day');\n\n // Loop through each day the appointment spans within the view range\n let safeCount = 0; // Prevent infinite loops\n while (\n currentDay.compare(appointmentEnd, 'day') <= 0 &&\n currentDay.compare(exclusiveViewEndDate, 'day') < 0 &&\n safeCount < 100\n ) {\n const dateString = this.formatService.format(currentDay, 'datetime', { format: 'YYYY-MM-DD' }); // Use a consistent key format\n\n if (!groupedAppointments.has(dateString)) {\n groupedAppointments.set(dateString, []);\n }\n // Add the appointment if it's not already in the list for that day\n if (!groupedAppointments.get(dateString).some((e) => e.id === appointment.id)) {\n groupedAppointments.get(dateString).push(appointment);\n }\n\n currentDay = currentDay.add('day', 1);\n safeCount++;\n }\n if (safeCount >= 100) {\n console.warn('Safety break hit in groupAppointmentsByDay loop for appointment:', appointment.id);\n }\n });\n\n return groupedAppointments;\n }\n\n getDayOfWeekNumber(dayName: AXDayOfWeekName): number {\n switch (dayName) {\n case 'sunday':\n return 1;\n case 'monday':\n return 2;\n case 'tuesday':\n return 3;\n case 'wednesday':\n return 4;\n case 'thursday':\n return 5;\n case 'friday':\n return 6;\n case 'saturday':\n return 7;\n default:\n console.warn(`Invalid day name: ${dayName}. Defaulting to Sunday (1).`);\n return 1;\n }\n }\n\n getSlotData(\n startDate: AXDateTime,\n view: AXSchedulerView,\n ): { startDate: AXDateTime; endDate: AXDateTime; view: AXSchedulerView } {\n let endDate: AXDateTime;\n switch (view) {\n case 'day':\n case 'week':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES);\n break;\n case 'timeline-day':\n case 'timeline-multi-day':\n endDate = startDate.add('minute', this.BLOCK_DURATION_MINUTES * 2);\n break;\n case 'month':\n case 'agenda':\n case 'timeline-month':\n startDate = startDate.startOf('day');\n endDate = startDate.endOf('day');\n break;\n }\n return { startDate, endDate, view };\n }\n\n handleEvent(\n event: AXSchedulerSlotMouseEvent | AXSchedulerAppointmentMouseEvent,\n eventOutputMap,\n eventType: 'appointment' | 'slot',\n ) {\n const mouseEvent = event.nativeEvent;\n mouseEvent.preventDefault();\n mouseEvent.stopPropagation();\n if (eventType === 'appointment') {\n const appointmentOutputMap = eventOutputMap[eventType];\n const emitter = appointmentOutputMap[mouseEvent.type as keyof typeof appointmentOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerAppointmentMouseEvent);\n }\n if (eventType === 'slot') {\n const slotOutputMap = eventOutputMap[eventType];\n const emitter = slotOutputMap[mouseEvent.type as keyof typeof slotOutputMap];\n if (emitter) emitter.emit(event as AXSchedulerSlotMouseEvent);\n }\n }\n\n // --- Timeline Specific Helpers ---\n\n calculateTimelineLayout(\n // `appt` here will be an AXSchedulerAppointmentSegmentType when called from TimelineDayView\n appt: AXSchedulerInternalAppointment,\n viewStartHour: number, // e.g., 8 for 8 AM\n viewEndHour: number, // e.g., 18 for 6 PM (timeline runs from 8:00 up to, but not including, 18:00)\n ): { left: string; width: string } | null {\n if (\n !appt?.startDate ||\n !appt.endDate ||\n typeof viewStartHour !== 'number' ||\n typeof viewEndHour !== 'number' ||\n viewStartHour >= viewEndHour // Basic sanity check\n ) {\n console.warn('calculateTimelineLayout: Invalid input', { appt, viewStartHour, viewEndHour });\n return null;\n }\n\n const totalViewDurationMinutes = (viewEndHour - viewStartHour) * 60;\n if (totalViewDurationMinutes <= 0) return null; // No viewable duration\n\n // Segment's start and end times (these are already clipped to the day by getClonedAppointmentSegmentOnDay)\n const segmentStart = appt.startDate;\n const segmentEnd = appt.endDate;\n\n // --- Calculate Start Position (left) ---\n // Effective start of the segment within the view's hours for THIS day\n let effectiveSegmentStartMinutesInDay = segmentStart.hour * 60 + segmentStart.minute;\n\n // Clamp to viewStartHour for calculation if segment starts before viewable hours (shouldn't happen if segmenter worked)\n effectiveSegmentStartMinutesInDay = Math.max(effectiveSegmentStartMinutesInDay, viewStartHour * 60);\n // Clamp to viewEndHour for calculation if segment starts after viewable hours (shouldn't happen)\n effectiveSegmentStartMinutesInDay = Math.min(effectiveSegmentStartMinutesInDay, viewEndHour * 60);\n\n const minutesFromViewStartToSegmentStart = effectiveSegmentStartMinutesInDay - viewStartHour * 60;\n\n // If segment effectively starts before the viewable part (after clamping), it means it's not visible or starts at 0%\n if (\n minutesFromViewStartToSegmentStart < 0 &&\n Math.abs(minutesFromViewStartToSegmentStart) > 1e-6 /*epsilon for float issues*/\n ) {\n // This case should ideally be caught by the segmenter or initial overlap checks.\n // If it happens, treat as starting at 0% but it might mean no visible part.\n }\n\n const leftPercentage = (Math.max(0, minutesFromViewStartToSegmentStart) / totalViewDurationMinutes) * 100;\n\n // --- Calculate Duration and Width ---\n // Effective end of the segment within the view's hours for THIS day\n let effectiveSegmentEndMinutesInDay = segmentEnd.hour * 60 + segmentEnd.minute;\n if (segmentEnd.hour === 0 && segmentEnd.minute === 0 && segmentEnd.date.getTime() > segmentStart.date.getTime()) {\n // If segment ends exactly at midnight (00:00 of next day, meaning it filled up to 24:00 of current day)\n effectiveSegmentEndMinutesInDay = 24 * 60;\n }\n\n // Clamp to viewEndHour for calculation\n effectiveSegmentEndMinutesInDay = Math.min(effectiveSegmentEndMinutesInDay, viewEndHour * 60);\n // Clamp to viewStartHour for calculation (if segment ends before view starts)\n effectiveSegmentEndMinutesInDay = Math.max(effectiveSegmentEndMinutesInDay, viewStartHour * 60);\n\n const segmentDurationMinutesInView = Math.max(\n 0,\n effectiveSegmentEndMinutesInDay - effectiveSegmentStartMinutesInDay,\n );\n\n if (segmentDurationMinutesInView <= 0) {\n // Segment has no visible duration within the timeline hours\n return null;\n }\n\n const widthPercentage = (segmentDurationMinutesInView / totalViewDurationMinutes) * 100;\n\n // Ensure percentages are valid\n if (\n leftPercentage > 100 ||\n leftPercentage < 0 ||\n widthPercentage <= 0 ||\n widthPercentage > 100 ||\n leftPercentage + widthPercentage > 100.0001 /*allow for float errors*/\n ) {\n // This might indicate an issue with date clamping or logic.\n // For now, if it results in an invalid layout, return null.\n // console.warn(\"Timeline layout calculation resulted in out-of-bounds percentages:\",\n // {leftPercentage, widthPercentage, segmentStart, segmentEnd, viewStartHour, viewEndHour});\n // A common case for (left + width > 100) is if an event ends *exactly* at viewEndHour,\n // and viewEndHour itself is the boundary.\n // Let's be a bit tolerant here if width is positive.\n if (widthPercentage <= 0) return null;\n }\n\n return {\n left: `${Math.max(0, Math.min(100, leftPercentage))}%`,\n width: `${Math.max(0, Math.min(100, widthPercentage))}%`,\n };\n }\n\n /**\n * Calculates the visible segment of a timed appointment on a specific day,\n * constrained by the view's start and end hours.\n * Returns a new appointment-like object representing the segment.\n */\n getClonedAppointmentSegmentOnDay(\n appointment: AXSchedulerInternalAppointment, // This is the ORIGINAL appointment\n day: AXDateTime,\n viewStartHour: number,\n viewEndHour: number,\n isFullDayCellContext = false,\n ): AXSchedulerAppointmentSegment | null {\n if (!appointment || !appointment.startDate || !appointment.endDate) {\n return null;\n }\n\n if (appointment.allDay) {\n const dayStartOf = day.clone().startOf('day');\n if (appointment.startDate.startOf('day').equal(dayStartOf, 'day')) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: false,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else if (\n appointment.startDate.startOf('day').compare(dayStartOf, 'day') < 0 &&\n appointment.endDate.startOf('day').compare(dayStartOf, 'day') >= 0\n ) {\n return {\n ...appointment,\n startDate: dayStartOf,\n endDate: dayStartOf.clone().add('day', 1).startOf('day'),\n allDay: true,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay: true,\n isContinuationToNextDay: appointment.endDate.startOf('day').compare(dayStartOf, 'day') > 0,\n originalAppointmentRef: appointment,\n };\n } else {\n return null;\n }\n }\n\n const dayStartBoundary = isFullDayCellContext\n ? day.clone().startOf('day')\n : day.clone().set('hour', viewStartHour).startOf('hour');\n const dayEndBoundary = isFullDayCellContext\n ? day.clone().add('day', 1).startOf('day')\n : viewEndHour === 24 || (viewEndHour === 0 && viewStartHour === 0)\n ? day.clone().add('day', 1).startOf('day')\n : day.clone().set('hour', viewEndHour).startOf('hour');\n\n if (\n appointment.endDate.compare(dayStartBoundary, 'second') <= 0 ||\n appointment.startDate.compare(dayEndBoundary, 'second') >= 0\n ) {\n return null;\n }\n const segmentStartDate =\n appointment.startDate.compare(dayStartBoundary, 'second') > 0 ? appointment.startDate : dayStartBoundary;\n const segmentEndDate =\n appointment.endDate.compare(dayEndBoundary, 'second') < 0 ? appointment.endDate : dayEndBoundary;\n\n if (segmentStartDate.compare(segmentEndDate, 'second') >= 0) {\n return null;\n }\n\n const isContinuationFromPreviousDay = appointment.startDate.compare(segmentStartDate, 'second') < 0;\n const isContinuationToNextDay = appointment.endDate.compare(segmentEndDate, 'second') > 0;\n const duration = appointment.startDate.duration(appointment.endDate);\n\n return {\n ...appointment,\n startDate: segmentStartDate,\n endDate: segmentEndDate,\n allDay: appointment.allDay || duration.total.days >= 1,\n originalStartDate: appointment.startDate,\n originalEndDate: appointment.endDate,\n isContinuationFromPreviousDay,\n isContinuationToNextDay,\n originalAppointmentRef: appointment,\n };\n }\n\n getOriginalAppointment(\n item: AXSchedulerInternalAppointment | AXSchedulerAppointmentSegment,\n ): AXSchedulerInternalAppointment {\n const segment = item as AXSchedulerAppointmentSegment;\n if (segment.originalAppointmentRef) {\n return segment.originalAppointmentRef;\n }\n return item;\n }\n\n isHoliday(date: AXDateTime): boolean {\n return this.calendarService.holidays.some((d) => date.equal(d.date, 'day'));\n }\n isWeekend(date: AXDateTime, calendar: string): boolean {\n const weekend = this.calendarService.resolveCalendar(calendar).weekend;\n return weekend.includes(date.dayOfWeek - 1);\n }\n}\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerAppointmentSegment, AXSchedulerInternalAppointment } from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface AgendaDayData {\n date: AXDateTime;\n appointments: AXSchedulerAppointmentSegment[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-agenda-view',\n templateUrl: './scheduler-agenda-view.component.html',\n styleUrl: './scheduler-agenda-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXDecoratorGenericComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTranslatorPipe,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerAgendaViewComponent }],\n})\nexport class AXSchedulerAgendaViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n agendaDaysLayout = computed<AgendaDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const agendaStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!agendaStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: AgendaDayData[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDay = agendaStartDate.add('day', i).startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDay, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1),\n (s) => s.startDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n ],\n ['asc', 'asc', 'desc'],\n );\n\n result.push({\n date: currentDay,\n appointments: sortedSegments,\n holiday: this.isHoliday(currentDay),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n if (slotData) {\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'agenda');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-agenda-container\">\n @for (dayData of agendaDaysLayout(); track dayData.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n [class.ax-state-holiday]=\"dayData.holiday.state !== 'none'\"\n class=\"ax-scheduler-agenda-view-container\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n >\n <div class=\"ax-scheduler-agenda-header-date-day\">\n <span\n class=\"ax-scheduler-agenda-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n [axTooltipPlacement]=\"'top-start'\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-agenda-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <div class=\"ax-scheduler-agenda-appointment-container\">\n @for (segment of dayData.appointments; track segment.id + segment.originalStartDate.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n segment.title +\n (segment.allDay\n ? ' (All Day)'\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-agenda-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <div class=\"ax-scheduler-agenda-appointment-time\">\n @if (segment.allDay) {\n <span>{{ 'dateTime.duration.all-day' | translate | async }}</span>\n } @else {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n <ax-title class=\"ax-scheduler-agenda-appointment-title ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Description could go here if needed -->\n <!-- <ax-subtitle *ngIf=\"segment.description\">{{ segment.description }}</ax-subtitle> -->\n </div>\n }\n @if (dayData.appointments.length === 0) {\n <div class=\"ax-scheduler-agenda-no-appointments\">\n {{ 'noRecord' | translate | async }}\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentSegment,\n AXSchedulerDayAppointmentLayout,\n AXSchedulerInternalAppointment,\n} from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-day-view',\n templateUrl: './scheduler-day-view.component.html',\n styleUrl: './scheduler-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerDayViewComponent }],\n})\nexport class AXSchedulerDayViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n processedAppointmentsForLayout = computed(() => {\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const allAppointmentsInView = this.appointments();\n if (!viewDate || allAppointmentsInView.length === 0) {\n return [];\n }\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n for (const appt of allAppointmentsInView) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, viewDate, startH, endH);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n return segmentsForThisDay;\n });\n allDayAppointments = computed(() => {\n const originalAllDayAppointments = this.appointments()?.filter((e) => e && e.allDay) ?? [];\n const multiDayBecomingAllDaySegments =\n this.processedAppointmentsForLayout()?.filter(\n (segment) => segment && segment.allDay && !this.appointments().find((orig) => orig.id === segment.id)?.allDay,\n ) ?? [];\n const combined = new Map<any, AXSchedulerInternalAppointment>();\n originalAllDayAppointments.forEach((appt) => combined.set(appt.id, appt));\n multiDayBecomingAllDaySegments.forEach((appt) => {\n if (!combined.has(appt.id)) {\n combined.set(appt.id, appt);\n }\n });\n return Array.from(combined.values());\n });\n singleDayAppointments = computed(() => {\n return this.processedAppointmentsForLayout()?.filter((e) => e && !e.allDay) ?? [];\n });\n\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointment: AXSchedulerInternalAppointment) {\n const originalAppointment = (appointment as AXSchedulerAppointmentSegment).originalStartDate\n ? ({\n ...appointment,\n startDate: (appointment as AXSchedulerAppointmentSegment).originalStartDate,\n endDate: (appointment as AXSchedulerAppointmentSegment).originalEndDate,\n } as AXSchedulerInternalAppointment)\n : appointment;\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDayDrop(e: AXDropZoneDropEvent) {\n const endDate = this.date().endOf('day');\n const startDate = this.date().startOf('day');\n const slotData = { startDate, endDate, view: 'day' as const };\n\n const droppedAppt = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegment).originalEndDate,\n } as AXSchedulerInternalAppointment)\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate.date,\n startDate: originalDroppedAppt.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'day');\n const droppedAppt = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalDroppedAppt = (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate\n ? ({\n ...droppedAppt,\n startDate: (droppedAppt as AXSchedulerAppointmentSegment).originalStartDate,\n endDate: (droppedAppt as AXSchedulerAppointmentSegment).originalEndDate,\n } as AXSchedulerInternalAppointment)\n : droppedAppt;\n const appointmentRef = {\n ...originalDroppedAppt,\n endDate: originalDroppedAppt.endDate.date,\n startDate: originalDroppedAppt.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n appointmentLayouts = computed(() => {\n const layouts = new Map<any, AXSchedulerDayAppointmentLayout>();\n const appointmentsToLayout = this.singleDayAppointments();\n const viewDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n\n if (appointmentsToLayout.length === 0 || !viewDate || typeof startH !== 'number' || typeof endH !== 'number') {\n return layouts;\n }\n\n const concurrencyInfoMap = this.schedulerService.calculateDayViewConcurrencyInfo(\n appointmentsToLayout,\n viewDate,\n startH,\n endH,\n );\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(e) => e.startDate.date.getTime(), (e) => e.originalEndDate.date.getTime() - e.originalStartDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const columnsData: { appointments: AXSchedulerAppointmentSegment[] }[] = [];\n\n for (const appointmentSegment of sortedAppointments) {\n let assignedCol = -1;\n\n for (let c = 0; ; c++) {\n if (!columnsData[c]) {\n columnsData[c] = { appointments: [] };\n }\n\n let conflict = false;\n\n for (const placedSegment of columnsData[c].appointments) {\n if (\n appointmentSegment.startDate.compare(placedSegment.endDate, 'minute') < 0 &&\n appointmentSegment.endDate.compare(placedSegment.startDate, 'minute') > 0\n ) {\n conflict = true;\n break;\n }\n }\n\n if (!conflict) {\n assignedCol = c;\n columnsData[c].appointments.push(appointmentSegment);\n break;\n }\n\n if (c > appointmentsToLayout.length) {\n console.warn(\n `DayView: Safety break in column assignment for ${appointmentSegment.title}, assigning to new column ${c}`,\n );\n if (!columnsData[c]) columnsData[c] = { appointments: [] };\n columnsData[c].appointments.push(appointmentSegment);\n assignedCol = c;\n break;\n }\n }\n\n const concurrencyInfo = concurrencyInfoMap.get(appointmentSegment.id);\n const effectiveCols = concurrencyInfo ? concurrencyInfo.effectiveTotalColumns : 1;\n\n layouts.set(appointmentSegment.id, {\n columnIndex: assignedCol,\n effectiveTotalColumns: effectiveCols,\n });\n }\n return layouts;\n });\n\n getAppointmentLayout(key: any): AXSchedulerDayAppointmentLayout | undefined {\n return this.appointmentLayouts().get(key);\n }\n\n getAppointmentLeft(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n const C = layout.columnIndex;\n if (C < 0) {\n console.warn('Invalid columnIndex < 0 for key:', key);\n return '0px';\n }\n if (C === 0 || N <= 1) return '0px';\n const leftPercent = C * (100 / N);\n const gapOffsetPx = C * this.GAP_PX;\n return `calc(${leftPercent}% + ${gapOffsetPx}px)`;\n }\n return '0px';\n }\n\n getAppointmentWidth(key: any): string {\n const layout = this.getAppointmentLayout(key);\n if (layout && layout.effectiveTotalColumns > 0) {\n const N = layout.effectiveTotalColumns;\n\n if (N <= 0) return '0%';\n if (N === 1) return `calc(100% - ${this.GAP_PX}px)`;\n\n const widthPercent = (1 / N) * 100;\n\n return `calc(${widthPercent}% - ${this.GAP_PX}px)`;\n }\n return '0%';\n }\n\n getAppointmentTop(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n\n if (appointmentSegment) {\n const startMinutes = appointmentSegment.startDate.hour * 60 + appointmentSegment.startDate.minute;\n const startBlockOffset = startMinutes - this.startDayHour() * 60;\n const yBlock = startBlockOffset / 30;\n return `calc(var(--ax-comp-scheduler-basic-view-blocks-height) * ${yBlock} + 1px)`;\n }\n return '';\n }\n\n getAppointmentHeight(key: any): string {\n const appointmentSegment = this.singleDayAppointments().find((e) => e.id === key);\n if (appointmentSegment) {\n const durationMillis = appointmentSegment.endDate.date.getTime() - appointmentSegment.startDate.date.getTime();\n const durationMinutes = Math.max(0, durationMillis / (1000 * 60));\n if (durationMinutes <= 0) return '0px';\n\n const heightBlock = durationMinutes / 30;\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height)`;\n\n return `calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px)`;\n }\n return '0px';\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-day-header\">\n <div class=\"ax-scheduler-day-header-table\" aria-hidden=\"true\">\n <div>\n {{ 'dateTime.duration.all-day' | translate | async }}\n </div>\n </div>\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleAllDayDrop($event)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleAllDaySlotEvent($event)\"\n (dblclick)=\"handleAllDaySlotEvent($event)\"\n (contextmenu)=\"handleAllDaySlotEvent($event)\"\n class=\"ax-scheduler-day-header-table-container\"\n >\n <div class=\"ax-scheduler-day-header-appointment-container\">\n @if (allDayAppointments().length) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || allDayAppointments()[0].readonly || readonly()\"\n [dragData]=\"allDayAppointments()[0]\"\n (click)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (dblclick)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, allDayAppointments()[0])\"\n [title]=\"allDayAppointments()[0].title\"\n class=\"ax-scheduler-header-day-appointment\"\n [style.color]=\"allDayAppointments()[0].textColor\"\n [style.background-color]=\"allDayAppointments()[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ allDayAppointments()[0].title }}</ax-title>\n </div>\n }\n @if (allDayAppointments().length > 1) {\n <div\n #moreAppointments\n class=\"ax-scheduler-day-header-more-tag\"\n [style.color]=\"allDayAppointments()[1].textColor\"\n [style.background-color]=\"allDayAppointments()[1].backgroundColor\"\n >\n {{ 'more-items' | translate: { params: { number: allDayAppointments().length - 1 } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\n @for (appointment of allDayAppointments(); track appointment.id; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-day-time-container\">\n <table class=\"ax-scheduler-day-time\" aria-hidden=\"true\" [border]=\"1\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </table>\n <div class=\"ax-scheduler-day-table-container\">\n <div class=\"ax-scheduler-day-appointment-container\">\n @for (appointment of singleDayAppointments(); track appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-day-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.width]=\"getAppointmentWidth(appointment.id)\"\n [style.height]=\"getAppointmentHeight(appointment.id)\"\n [style.background-color]=\"appointment.backgroundColor\"\n [style.inset-block-start]=\"getAppointmentTop(appointment.id)\"\n [style.inset-inline-start]=\"getAppointmentLeft(appointment.id)\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n <ax-subtitle>\n {{ appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-day-slot\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleSingleDayDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSingleSlotEvent($event, time)\"\n (dblclick)=\"handleSingleSlotEvent($event, time)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time)\"\n ></div>\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time.add('minute', 30))\"\n (click)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (dblclick)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n (contextmenu)=\"handleSingleSlotEvent($event, time.add('minute', 30))\"\n ></div>\n }\n </div>\n </div>\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXDayOfWeekName, AXSchedulerAppointmentSegment, AXSchedulerInternalAppointment } from '../../scheduler.class'; // Adjust path\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service'; // Adjust path\n\n// --- Types specific to Month View Layout ---\n// Represents a single day cell in the month grid\nexport type AXSchedulerMonthDayCell = {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n appointments: AXSchedulerAppointmentSegment[]; // All appointments for this day\n visibleAppointments: AXSchedulerAppointmentSegment[]; // Appointments to display as chips\n hiddenAppointments: AXSchedulerAppointmentSegment[]; // Appointments hidden behind the badge\n overflowCount: number; // Count of hidden appointments (length of hiddenAppointments)\n};\n\n@Component({\n selector: 'ax-scheduler-month-view',\n templateUrl: './scheduler-month-view.component.html',\n styleUrl: './scheduler-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AsyncPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerMonthViewComponent }],\n})\nexport class AXSchedulerMonthViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n // --- Inputs ---\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n firstDayOfWeek = input<AXDayOfWeekName>('saturday');\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n // --- Constants ---\n readonly DAYS_IN_WEEK = 7;\n readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 2;\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegmentOrOriginal: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegmentOrOriginal);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month'); // Ensure it's start of day\n if (slotData) {\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'month');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n // --- Base Computeds ---\n // Calculate the start of the month based on the input date\n monthStartDate = computed(() => {\n const d = this.date();\n return d ? d.startOf('month') : null;\n });\n\n // Generate the list of weekday names based on the firstDayOfWeek\n daysArray = computed(() => {\n const dayNames: AXDateTime[] = [];\n\n const currentDate = this.date(); // Use a stable date for generating week headers\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n\n // Calculate days to subtract to get to the start of the week based on firstDayOfWeek\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n let headerStartDate = currentDate.add('day', -daysToSubtract);\n\n for (let i = 0; i < 7; i++) {\n dayNames.push(headerStartDate);\n headerStartDate = headerStartDate.add('day', 1);\n }\n return dayNames;\n });\n\n // --- Calendar Grid Calculation ---\n calendarDaysInfo = computed(() => {\n const monthStart = this.monthStartDate();\n if (!monthStart) return { days: [], weeksNeeded: 0 };\n\n const firstDayOfMonth = monthStart;\n const lastDayOfMonth = monthStart.endOf('month');\n\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n\n const leadingDays = (firstDisplayedDayOfWeek - firstDayGridNum + this.DAYS_IN_WEEK) % this.DAYS_IN_WEEK;\n const firstDayOfGrid = firstDayOfMonth.add('day', -leadingDays);\n\n // Determine how many total days to show to fill out the weeks\n // A common approach is 6 weeks to ensure consistency, but your dynamic weeksNeeded is fine too.\n // Let's stick to your dynamic `weeksNeeded` and `totalDaysToGenerate`\n const daysInMonth = lastDayOfMonth.dayOfMonth;\n const totalCellsMinimum = leadingDays + daysInMonth;\n const weeksNeededDynamic = Math.ceil(totalCellsMinimum / this.DAYS_IN_WEEK);\n const actualWeeksToShow = Math.max(4, Math.min(weeksNeededDynamic, 6)); // Clamp weeks\n const totalDaysToGenerate = actualWeeksToShow * this.DAYS_IN_WEEK;\n\n const days: {\n date: AXDateTime;\n isCurrentMonth: boolean;\n isToday: boolean;\n isHoliday: boolean;\n holidayTitle?: string;\n }[] = [];\n const today = this.calendarService.create(new Date());\n let currentDay = firstDayOfGrid;\n\n for (let i = 0; i < totalDaysToGenerate; i++) {\n const isHoliday =\n this.schedulerService.isHoliday(currentDay) || this.schedulerService.isWeekend(currentDay, this.calendar());\n\n let holidayTitle: null | string = null;\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => currentDay.equal(d.date, 'day'))[0];\n if (holiday) {\n holidayTitle = holiday.title;\n }\n }\n\n days.push({\n date: currentDay,\n isCurrentMonth: currentDay.monthOfYear === monthStart.monthOfYear,\n isToday: currentDay.equal(today, 'day'),\n isHoliday,\n holidayTitle,\n });\n currentDay = currentDay.add('day', 1);\n }\n return { days: days, weeksNeeded: actualWeeksToShow };\n });\n\n // --- Appointment Grouping ---\n appointmentsGroupedByDay = computed(() => {\n const { days } = this.calendarDaysInfo(); // Destructure to get days array\n if (days.length === 0) return new Map<string, AXSchedulerInternalAppointment[]>();\n\n const viewStartDate = days[0].date;\n const viewEndDate = days[days.length - 1].date;\n const relevantAppointments = this.appointments();\n\n return this.schedulerService.groupAppointmentsByDay(relevantAppointments, viewStartDate, viewEndDate);\n });\n\n // --- Day Cell Layout Calculation ---\n dayCellLayouts = computed<AXSchedulerMonthDayCell[]>(() => {\n const { days: initialDaysInfo } = this.calendarDaysInfo();\n const allOriginalAppointments = this.appointments();\n\n if (initialDaysInfo.length === 0) {\n return []; // Return empty array if no days to process\n }\n if (!allOriginalAppointments || allOriginalAppointments.length === 0) {\n // If no appointments, map initialDaysInfo to the full structure with empty appointment arrays\n return initialDaysInfo.map((dayInfo) => ({\n ...dayInfo,\n appointments: [],\n visibleAppointments: [],\n hiddenAppointments: [],\n overflowCount: 0,\n }));\n }\n\n return initialDaysInfo.map((dayInfo) => {\n const dayAsStartOfDay = dayInfo.date.startOf('day');\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n\n for (const appt of allOriginalAppointments) {\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay,\n 0, // viewStartHour for month cell context (full day)\n 24, // viewEndHour for month cell context (full day)\n true, // isFullDayCellContext = true\n );\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.originalStartDate.date.getTime(), // Then by original start time\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(), // Then by duration (longer first)\n (s) => s.title?.toLowerCase() ?? '', // Then by title\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const overflowCount = hiddenAppointments.length;\n\n return {\n ...dayInfo,\n appointments: sortedSegments,\n visibleAppointments,\n hiddenAppointments,\n overflowCount,\n };\n });\n });\n\n // --- Dynamic Grid Rows ---\n gridTemplateRowsStyle = computed(() => {\n const { weeksNeeded } = this.calendarDaysInfo();\n if (!weeksNeeded || weeksNeeded <= 0) {\n return `repeat(6, minmax(0, 1fr))`; // Fallback, ensures grid is at least somewhat sensible\n }\n return `repeat(${weeksNeeded}, minmax(0, 1fr))`; // Use 1fr for equal distribution\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-month-container\">\n <!-- Weekday Header -->\n <div class=\"ax-scheduler-month-weekdays\">\n @for (day of daysArray(); track day.date.getTime()) {\n <div class=\"ax-scheduler-month-weekday\">\n {{ day | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"ax-scheduler-month-grid\" [style.gridTemplateRows]=\"gridTemplateRowsStyle()\">\n @for (dayCell of dayCellLayouts(); track dayCell.date.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayCell.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (click)=\"handleSlotEvent($event, dayCell.date)\"\n (dblclick)=\"handleSlotEvent($event, dayCell.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayCell.date)\"\n class=\"ax-scheduler-month-day-cell\"\n [class.ax-state-today]=\"dayCell.isToday\"\n [class.ax-state-holiday]=\"dayCell.isHoliday\"\n [class.ax-other-month]=\"!dayCell.isCurrentMonth\"\n [attr.data-date]=\"dayCell.date | format: 'date' : { format: 'YYYY-MM-DD' }\"\n >\n <div class=\"ax-scheduler-month-day-header\">\n <span class=\"ax-scheduler-month-day-number ax-scheduler-truncate\" [axTooltip]=\"dayCell.holidayTitle ?? ''\">\n {{ dayCell.date.dayOfMonth }}\n\n @if (dayCell.holidayTitle) {\n ( {{ dayCell.holidayTitle }} )\n }\n </span>\n </div>\n <div class=\"ax-scheduler-month-day-appointments\">\n <!-- Visible Appointment Segments -->\n @for (segment of dayCell.visibleAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n segment.title +\n (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-month-appointment-chip\"\n [class.all-day-segment]=\"segment.allDay\"\n [class.continuation-from-prev]=\"segment.isContinuationFromPreviousDay && !segment.allDay\"\n [class.continuation-to-next]=\"segment.isContinuationToNextDay && !segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (!segment.allDay) {\n <span>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </span>\n }\n </div>\n }\n <!-- Overflow Badge and Popover -->\n @if (dayCell.overflowCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n <!-- Stop propagation to prevent slot click -->\n +{{ 'more-items' | translate: { params: { number: dayCell.overflowCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (segment of dayCell.hiddenAppointments; track segment.id + segment.originalStartDate) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n segment.title +\n (segment.allDay\n ? ''\n : ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')')\n \"\n class=\"ax-scheduler-popover-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.color]=\"segment.textColor\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (!segment.allDay) {\n <span>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </span>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n }\n </div>\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegment,\n AXSchedulerInternalAppointment,\n} from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\n@Component({\n selector: 'ax-scheduler-timeline-day-view',\n templateUrl: './scheduler-timeline-day-view.component.html',\n styleUrl: './scheduler-timeline-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDecoratorGenericComponent, AXFormatPipe, AsyncPipe, AXDragDirective, AXDropZoneDirective],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineDayViewComponent }],\n})\nexport class AXSchedulerTimelineDayViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n /**\n * Processes original appointments to get segments relevant to this specific day and its viewable hours.\n * Filters out original all-day events.\n */\n processedSegmentsForLayout = computed<AXSchedulerAppointmentSegment[]>(() => {\n const viewDate = this.date();\n const allOriginalAppointments = this.appointments();\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n\n if (!viewDate || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const segmentsOnThisDay: AXSchedulerAppointmentSegment[] = [];\n for (const appt of allOriginalAppointments) {\n if (appt.allDay) {\n continue;\n }\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n viewDate,\n viewConfigStartHour,\n viewConfigEndHour,\n false,\n );\n\n if (segment) {\n segmentsOnThisDay.push(segment);\n }\n }\n return segmentsOnThisDay;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleDrop(e: AXDropZoneDropEvent, startDate: AXDateTime) {\n const slotData = this.schedulerService.getSlotData(startDate, 'timeline-day');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n // --- Appointment Layout Calculation ---\n appointmentLayouts = computed((): AXSchedulerAppointmentLayout[] => {\n const finalLayouts: AXSchedulerAppointmentLayout[] = [];\n const viewConfigStartHour = this.startDayHour();\n const viewConfigEndHour = this.endDayHour();\n const appointmentsToLayout = this.processedSegmentsForLayout(); // USE SEGMENTS\n\n if (\n typeof viewConfigStartHour !== 'number' ||\n typeof viewConfigEndHour !== 'number' ||\n appointmentsToLayout.length === 0\n ) {\n return finalLayouts;\n }\n\n const sortedAppointments = orderBy(\n appointmentsToLayout,\n [(seg) => seg.startDate.date.getTime(), (seg) => seg.originalEndDate.date.getTime()],\n ['asc', 'desc'],\n );\n\n const rowEndTimes: AXDateTime[] = [];\n\n for (const segment of sortedAppointments) {\n const horizLayout = this.schedulerService.calculateTimelineLayout(\n segment, // Pass the segment\n viewConfigStartHour,\n viewConfigEndHour,\n );\n\n if (!horizLayout) continue; // Segment is outside the viewable hour range or invalid\n\n // For overlap check, use the segment's start and end times\n const segmentStartTime = segment.startDate;\n const segmentEndTime = segment.endDate;\n\n let assignedRowIndex = -1;\n for (let i = 0; i < rowEndTimes.length; i++) {\n // If this segment starts AFTER OR AT the time the row becomes free\n if (segmentStartTime.compare(rowEndTimes[i], 'minute') >= 0) {\n assignedRowIndex = i;\n break;\n }\n }\n\n if (assignedRowIndex === -1) {\n assignedRowIndex = rowEndTimes.length;\n rowEndTimes.push(segmentEndTime); // Add segment's end time for the new row\n } else {\n // Update the end time for the assigned row with this segment's end time\n rowEndTimes[assignedRowIndex] = segmentEndTime;\n }\n\n const layoutHeight = 'var(--ax-comp-scheduler-timeline-view-blocks-height)'; // CSS variable for height\n const layoutLeft = horizLayout.left;\n const layoutWidth = `calc(${horizLayout.width} - ${this.GAP_PX}px)`; // Apply horizontal gap if items are side-by-side within a row (not typical for this stacking)\n const layoutTop = `calc(${assignedRowIndex} * (${layoutHeight} + ${this.GAP_PX}px))`; // Vertical stacking with gap\n\n finalLayouts.push({\n appointment: segment, // Store the segment data\n layoutLeft,\n layoutWidth,\n layoutTop,\n layoutHeight,\n });\n }\n\n return finalLayouts;\n });\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-timeline-header\">\n @for (hour of hoursArray(); track hour.date.getTime()) {\n <div class=\"ax-scheduler-timeline-header-hours\">\n <span>{{ hour | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}</span>\n </div>\n }\n</div>\n\n<div class=\"ax-scheduler-timeline-content\">\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (layout of appointmentLayouts(); track layout.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || layout.appointment.readonly || readonly()\"\n [dragData]=\"layout.appointment\"\n (click)=\"handleAppointmentEvent($event, layout.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, layout.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, layout.appointment)\"\n [title]=\"layout.appointment.title\"\n [style.width]=\"layout.layoutWidth\"\n [style.height]=\"layout.layoutHeight\"\n class=\"ax-scheduler-timeline-appointment\"\n [style.insetBlockStart]=\"layout.layoutTop\"\n [style.color]=\"layout.appointment.textColor\"\n [style.insetInlineStart]=\"layout.layoutLeft\"\n [style.background-color]=\"layout.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ layout.appointment.title }}</ax-title>\n <ax-subtitle>\n {{\n layout.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{ layout.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n </div>\n <div class=\"ax-scheduler-timeline-slot-row\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, time)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-slot-cell\"\n (click)=\"handleSlotEvent($event, time)\"\n (dblclick)=\"handleSlotEvent($event, time)\"\n (contextmenu)=\"handleSlotEvent($event, time)\"\n ></div>\n }\n </div>\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n ViewEncapsulation,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport { AXSchedulerAppointmentSegment, AXSchedulerInternalAppointment } from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\nexport interface TimelineMonthViewDayData {\n date: AXDateTime;\n // These will be segments, precisely clipped and flagged for this day\n visibleAppointments: AXSchedulerAppointmentSegment[];\n hiddenAppointments: AXSchedulerAppointmentSegment[];\n moreCount: number;\n // You might also want to store all segments for the day if needed elsewhere\n // allSegmentsForDay: AXSchedulerAppointmentSegmentType[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-month-view',\n templateUrl: './scheduler-timeline-month-view.component.html',\n styleUrl: './scheduler-timeline-month-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AXFormatPipe,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMonthViewComponent }],\n})\nexport class AXSchedulerTimelineMonthViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n private readonly MAX_VISIBLE_APPOINTMENTS_PER_DAY = 3;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n processedDayData = computed<TimelineMonthViewDayData[]>(() => {\n const allOriginalAppointments = this.appointments();\n const monthStartDate = this.date().startOf('month');\n const daysInMonth = monthStartDate.endOf('month').dayOfMonth;\n\n if (!allOriginalAppointments) {\n return Array.from({ length: daysInMonth }, (_, i) => {\n const dayDate = monthStartDate.add('day', i);\n\n return {\n date: dayDate,\n visibleAppointments: [],\n hiddenAppointments: [],\n moreCount: 0,\n };\n });\n }\n\n const result: TimelineMonthViewDayData[] = [];\n\n for (let i = 0; i < daysInMonth; i++) {\n const currentDayDate = monthStartDate.add('day', i).startOf('day'); // Ensure it's start of day\n const segmentsForThisDay: AXSchedulerAppointmentSegment[] = [];\n\n for (const appt of allOriginalAppointments) {\n // For Timeline Month View, each day is a row. We want segments for the full 24h of that day.\n // The view's startHour/endHour are NOT used to clip segments here,\n // as it's not a horizontal time scale *within* the day row.\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(appt, currentDayDate, 0, 24, true);\n if (segment) {\n segmentsForThisDay.push(segment);\n }\n }\n\n // Sort segments: all-day first, then by segment start time (which is clipped to the day)\n const sortedSegments = orderBy(\n segmentsForThisDay,\n [\n (s) => (s.allDay ? 0 : 1), // Segments marked as allDay first\n (s) => s.startDate.date.getTime(), // Segment's start time on this day\n (s) => s.endDate.date.getTime() - s.startDate.date.getTime(), // Segment's duration on this day\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'asc', 'desc', 'asc'],\n );\n\n const visibleAppointments = sortedSegments.slice(0, this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n const hiddenAppointments = sortedSegments.slice(this.MAX_VISIBLE_APPOINTMENTS_PER_DAY);\n\n result.push({\n date: currentDayDate,\n visibleAppointments: visibleAppointments,\n hiddenAppointments: hiddenAppointments,\n moreCount: hiddenAppointments.length,\n holiday: this.isHoliday(currentDayDate),\n });\n }\n return result;\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentItem: AXSchedulerInternalAppointment) {\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSlotEvent(mouseEvent: MouseEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleDrop(e: AXDropZoneDropEvent, date: AXDateTime) {\n // date is the specific day\n const slotData = this.schedulerService.getSlotData(date.startOf('day'), 'timeline-month');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-timeline-month-container\">\n @for (dayData of processedDayData(); track dayData.date.date.getTime()) {\n <div>\n <div class=\"ax-scheduler-timeline-header\">\n <div\n class=\"ax-scheduler-month-header-date-day\"\n [class.ax-state-today]=\"isToday(dayData.date)\"\n [class.ax-state-holiday]=\"dayData.holiday.state !== 'none'\"\n >\n <span\n class=\"ax-scheduler-month-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"dayData.holiday?.holiday?.title ?? ''\"\n >\n {{ dayData.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (dayData.holiday.state === 'holiday' && dayData.holiday.holiday.title) {\n ( {{ dayData.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-month-header-date-day-num\">\n {{ dayData.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n </div>\n\n <div\n axDropZone\n #zone=\"axDropZone\"\n (onElementDrop)=\"handleDrop($event, dayData.date)\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n class=\"ax-scheduler-timeline-content\"\n (click)=\"handleSlotEvent($event, dayData.date)\"\n (dblclick)=\"handleSlotEvent($event, dayData.date)\"\n (contextmenu)=\"handleSlotEvent($event, dayData.date)\"\n >\n <div class=\"ax-scheduler-timeline-appointment-container\">\n @for (segment of dayData.visibleAppointments; track segment.id + segment.originalStartDate.date.getTime()) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment)\"\n (dblclick)=\"handleAppointmentEvent($event, segment)\"\n (contextmenu)=\"handleAppointmentEvent($event, segment)\"\n [title]=\"\n segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-timeline-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ segment.title }}</ax-title>\n <!-- Display segment's start/end times if not allDay for this segment -->\n @if (!segment.allDay) {\n <ax-subtitle>\n {{ segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }} -\n {{ segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n }\n </div>\n }\n @if (dayData.moreCount > 0) {\n <div #moreAppointments class=\"ax-scheduler-month-overflow-badge\" (click)=\"$event.stopPropagation()\">\n +{{ 'more-items' | translate: { params: { number: dayData.moreCount } } | async }}\n </div>\n <ax-popover [target]=\"moreAppointments\" placement=\"bottom-start\" trigger=\"click\">\n <div\n [class.ax-state-readonly]=\"readonly()\"\n class=\"ax-overlay-pane ax-scheduler-popover ax-scheduler-month-popover-appointment\"\n >\n @for (\n segment of dayData.hiddenAppointments;\n track segment.id + segment.originalStartDate.date.getTime()\n ) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"segment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || segment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (dblclick)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n (contextmenu)=\"handleAppointmentEvent($event, segment); $event.stopPropagation()\"\n [title]=\"\n segment.allDay\n ? segment.title\n : segment.title +\n ' (' +\n (segment.originalStartDate | format: 'time' : { calendar: calendar() } | async) +\n ' - ' +\n (segment.originalEndDate | format: 'time' : { calendar: calendar() } | async) +\n ')'\n \"\n [style.color]=\"segment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [class.all-day-segment]=\"segment.allDay\"\n [style.background-color]=\"segment.backgroundColor\"\n >\n <span class=\"ax-appointment-chip-title ax-scheduler-truncate\">{{ segment.title }}</span>\n @if (!segment.allDay) {\n <ax-subtitle>\n {{\n segment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n segment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n }\n </div>\n }\n </div>\n </ax-popover>\n }\n </div>\n </div>\n </div>\n }\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, output } from '@angular/core';\nimport { AXSchedulerInternalAppointment } from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\nimport { AXSchedulerTimelineDayViewComponent } from '../timeline-day/scheduler-timeline-day-view.component';\n\nexport interface TimelineMultiDayDaySlot {\n date: AXDateTime;\n // Pass the RAW original appointments that *overlap* with this day.\n // The child timeline-day-view will handle segmentation.\n originalAppointmentsForThisDay: AXSchedulerInternalAppointment[];\n holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate };\n}\n\n@Component({\n selector: 'ax-scheduler-timeline-multi-day-view',\n templateUrl: './scheduler-timeline-multi-day-view.component.html',\n styleUrl: './scheduler-timeline-multi-day-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerTimelineDayViewComponent, AsyncPipe, AXFormatPipe, AXTooltipDirective],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerTimelineMultiDayViewComponent }],\n})\nexport class AXSchedulerTimelineMultiDayViewComponent extends NXComponent {\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n daysCount = input(7);\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n daysDataForTimelineViews = computed<TimelineMultiDayDaySlot[]>(() => {\n const allOriginalAppointments = this.appointments();\n const multiViewStartDate = this.date();\n const numberOfDays = this.daysCount();\n\n if (!multiViewStartDate || !allOriginalAppointments) {\n return [];\n }\n\n const result: TimelineMultiDayDaySlot[] = [];\n\n for (let i = 0; i < numberOfDays; i++) {\n const currentDayDate = multiViewStartDate.add('day', i);\n const currentDayStart = currentDayDate.startOf('day');\n const currentDayEnd = currentDayDate.endOf('day'); // Use full day for overlap check\n\n const appointmentsOverlappingThisDay = allOriginalAppointments.filter((appt) => {\n if (appt.allDay) {\n return false;\n }\n return appt.endDate.compare(currentDayStart, 'day') >= 0 && appt.startDate.compare(currentDayEnd, 'day') <= 0;\n });\n\n result.push({\n date: currentDayDate,\n holiday: this.isHoliday(currentDayDate),\n originalAppointmentsForThisDay: appointmentsOverlappingThisDay,\n });\n }\n return result;\n });\n\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n}\n","<div class=\"ax-scheduler-timeline-day-view-container\">\n @for (daySlot of daysDataForTimelineViews(); track daySlot.date.date.getTime()) {\n <div class=\"ax-scheduler-timeline-multi-day-column\">\n <div\n class=\"ax-scheduler-week-header-date-day\"\n [class.ax-state-today]=\"isToday(daySlot.date)\"\n [class.ax-state-holiday]=\"daySlot.holiday.state !== 'none'\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"daySlot.holiday?.holiday?.title ?? ''\"\n >\n {{ daySlot.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (daySlot.holiday.state === 'holiday' && daySlot.holiday.holiday.title) {\n ( {{ daySlot.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ daySlot.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n <ax-scheduler-timeline-day-view\n [date]=\"daySlot.date\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"daySlot.originalAppointmentsForThisDay\"\n (slotClickedInternal)=\"slotClickedInternal.emit($event)\"\n (slotDblClickedInternal)=\"slotDblClickedInternal.emit($event)\"\n (slotRightClickedInternal)=\"slotRightClickedInternal.emit($event)\"\n (onAppointmentDropInternal)=\"onAppointmentDropInternal.emit($event)\"\n (appointmentClickedInternal)=\"appointmentClickedInternal.emit($event)\"\n (appointmentDblClickedInternal)=\"appointmentDblClickedInternal.emit($event)\"\n (appointmentRightClickedInternal)=\"appointmentRightClickedInternal.emit($event)\"\n >\n </ax-scheduler-timeline-day-view>\n </div>\n }\n</div>\n","import { AXComponent, NXComponent } from '@acorex/cdk/common';\nimport { AXDragDirective, AXDropZoneDirective, AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXDecoratorGenericComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXTooltipDirective } from '@acorex/components/tooltip';\nimport { AXCalendarService, AXDateTime, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n HostBinding,\n inject,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { orderBy } from 'lodash-es';\nimport {\n AXSchedulerActiveAppointmentsInBlock,\n AXSchedulerAllDaySlotData,\n AXSchedulerAppointmentLayout,\n AXSchedulerAppointmentSegment,\n AXSchedulerInternalAppointment,\n AXSchedulerOverflowBadge,\n} from '../../scheduler.class';\nimport {\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n} from '../../scheduler.component';\nimport { AXSchedulerService } from '../../scheduler.service';\n\ntype AXSchedulerGridBadgeInfo = AXSchedulerOverflowBadge & {\n hiddenAppointments: AXSchedulerAppointmentSegment[];\n};\n\n@Component({\n selector: 'ax-scheduler-week-view',\n templateUrl: './scheduler-week-view.component.html',\n styleUrl: './scheduler-week-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXDecoratorGenericComponent,\n AsyncPipe,\n AXTranslatorPipe,\n AXPopoverComponent,\n AXFormatPipe,\n AXDragDirective,\n AXDropZoneDirective,\n AXTooltipDirective,\n ],\n providers: [{ provide: AXComponent, useExisting: AXSchedulerWeekViewComponent }],\n})\nexport class AXSchedulerWeekViewComponent extends NXComponent {\n private scheduler = inject(AXSchedulerComponent);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n\n readonly GAP_PX = 1;\n\n readonly = input(false);\n draggable = input(true);\n calendar = input<string>();\n date = input.required<AXDateTime>();\n endDayHour = input.required<number>();\n startDayHour = input.required<number>();\n appointments = input<AXSchedulerInternalAppointment[]>([]);\n\n /**\n * Processes all original appointments and generates day-specific segments for the entire week.\n * Each segment represents the visible part of an appointment on a particular day.\n * The segment's 'allDay' flag indicates if it should be in the all-day slot or timed grid for that day.\n */\n processedAppointmentsForLayout = computed<AXSchedulerAppointmentSegment[]>(() => {\n const viewDays = this.daysArray().map((e) => e.date); // Array of AXDateTime for each day in the week\n const allOriginalAppointments = this.appointments(); // Raw appointments from input\n const viewConfigStartHour = this.startDayHour(); // Configured start hour for the timed grid\n const viewConfigEndHour = this.endDayHour(); // Configured end hour for the timed grid\n\n if (!viewDays || viewDays.length === 0 || !allOriginalAppointments || allOriginalAppointments.length === 0) {\n return [];\n }\n\n const allSegmentsInView: AXSchedulerAppointmentSegment[] = [];\n for (const day of viewDays) {\n // For each day in the week\n const dayAsStartOfDay = day.startOf('day'); // Use startOf('day') for consistent cache key if AXDateTime interns\n for (const appt of allOriginalAppointments) {\n // Determine segmentation boundaries for this specific 'day':\n // - If original appt is allDay, segment across the full 0-24h of 'day'.\n // The service method will ensure segment.allDay is true.\n // - If original appt is timed, segment across viewConfigStartHour-viewConfigEndHour.\n // The service method will set segment.allDay=true if this timed segment fills that window.\n const effectiveSegmentStartHour = appt.allDay ? 0 : viewConfigStartHour;\n const effectiveSegmentEndHour = appt.allDay ? 24 : viewConfigEndHour;\n\n const segment = this.schedulerService.getClonedAppointmentSegmentOnDay(\n appt,\n dayAsStartOfDay, // Pass the AXDateTime object for the current day in loop\n effectiveSegmentStartHour,\n effectiveSegmentEndHour,\n );\n\n if (segment) {\n allSegmentsInView.push(segment);\n }\n }\n }\n\n // Deduplicate segments. A segment is unique by its original key and its specific start/end on a day.\n // The service method already produces day-specific start/end times.\n const uniqueSegmentsMap = new Map<string, AXSchedulerAppointmentSegment>();\n allSegmentsInView.forEach((seg) => {\n // Create a unique key for the segment based on original appt key and segment's own date range\n const mapKey = `${seg.id}-${seg.startDate.format('YYYYMMDDHHmmssSSS')}-${seg.endDate.format('YYYYMMDDHHmmssSSS')}`;\n if (!uniqueSegmentsMap.has(mapKey)) {\n uniqueSegmentsMap.set(mapKey, seg);\n }\n });\n return Array.from(uniqueSegmentsMap.values());\n });\n\n /**\n * Segments that are to be displayed in the timed grid area of the week view.\n * These are segments from processedAppointmentsForLayout where segment.allDay is false.\n */\n timedGridSegments = computed<AXSchedulerAppointmentSegment[]>(() => {\n return this.processedAppointmentsForLayout()?.filter((segment) => !segment.allDay) ?? [];\n });\n\n // Internal outputs to be caught by parent AXSchedulerComponent\n slotClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotDblClickedInternal = output<AXSchedulerSlotMouseEvent>();\n slotRightClickedInternal = output<AXSchedulerSlotMouseEvent>();\n appointmentClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentDblClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n appointmentRightClickedInternal = output<AXSchedulerAppointmentMouseEvent>();\n onAppointmentDropInternal = output<AXSchedulerSlotDropEvent>();\n\n // --- Event Handlers ---\n private readonly eventOutputMap = {\n slot: {\n click: this.slotClickedInternal,\n dblclick: this.slotDblClickedInternal,\n contextmenu: this.slotRightClickedInternal,\n },\n appointment: {\n click: this.appointmentClickedInternal,\n dblclick: this.appointmentDblClickedInternal,\n contextmenu: this.appointmentRightClickedInternal,\n },\n };\n handleAppointmentEvent(mouseEvent: MouseEvent, appointmentSegment: AXSchedulerInternalAppointment) {\n // 'appointmentSegment' here is the segment that was interacted with\n const originalAppointment = this.schedulerService.getOriginalAppointment(appointmentSegment);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, appointment: appointmentRef, sender: this.scheduler },\n this.eventOutputMap,\n 'appointment',\n );\n }\n handleSingleSlotEvent(mouseEvent: MouseEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDaySlotEvent(mouseEvent: MouseEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n if (slotData)\n this.schedulerService.handleEvent(\n { nativeEvent: mouseEvent, slot: slotData, sender: this.scheduler },\n this.eventOutputMap,\n 'slot',\n );\n }\n handleAllDayDrop(e: AXDropZoneDropEvent, day: AXDateTime) {\n const endDate = day.endOf('day');\n const startDate = day.startOf('day');\n const slotData = { startDate, endDate, view: 'week' as const };\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n handleSingleDayDrop(e: AXDropZoneDropEvent, hour: AXDateTime, day: AXDateTime, minuteIndex: number) {\n const startDate = day.set('hour', hour.hour).set('minute', minuteIndex * 30);\n const slotData = this.schedulerService.getSlotData(startDate, 'week');\n const droppedItem = e.dropped.dragData() as AXSchedulerInternalAppointment;\n const originalAppointment = this.schedulerService.getOriginalAppointment(droppedItem);\n const appointmentRef = {\n ...originalAppointment,\n endDate: originalAppointment.endDate.date,\n startDate: originalAppointment.startDate.date,\n };\n this.onAppointmentDropInternal.emit({\n dropEvent: e,\n slot: slotData,\n sender: this.scheduler,\n appointment: appointmentRef,\n });\n }\n\n hoursArray = computed(() => {\n let time = this.date();\n if (!time) return [];\n time = time.set('hour', this.startDayHour()).startOf('hour');\n const hours = [time];\n while (time.hour < this.endDayHour() - 1) {\n time = time.add('hour', 1);\n hours.push(time);\n }\n return hours;\n });\n\n daysArray = computed(\n (): { date: AXDateTime; holiday?: { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } }[] => {\n const time = this.date();\n if (!time) return [];\n const days = [{ date: time, holiday: this.isHoliday(time) }];\n for (let index = 1; index <= 6; index++) {\n const date = time.add('day', index);\n days.push({ date, holiday: this.isHoliday(date) });\n }\n return days;\n },\n );\n\n totalBlocksPerViewDay = computed(() => {\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (typeof startH !== 'number' || typeof endH !== 'number') return 0;\n return Math.max(0, (endH - startH) * (60 / 30));\n });\n\n appointmentsByStartBlock = computed(() => {\n const viewDate = this.date(); // This should be the start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateWeekViewAppointmentsByStartBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n );\n });\n\n activeAppointmentsInBlock = computed((): AXSchedulerActiveAppointmentsInBlock => {\n const viewDate = this.date(); // Start date of the week\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n if (!viewDate || typeof startH !== 'number' || typeof endH !== 'number') return {};\n // Pass the timedGridSegments to the service method\n return this.schedulerService.calculateActiveAppointmentsInBlock(\n this.timedGridSegments(), // CHANGED from singleDayAppointments\n viewDate,\n startH,\n endH,\n 7, // Explicitly 7 days for week view\n );\n });\n\n visibleAppointmentsLayout = computed((): AXSchedulerAppointmentLayout[] => {\n const layouts: AXSchedulerAppointmentLayout[] = [];\n const startingBlocks = this.appointmentsByStartBlock();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n const occupiedBlocks: Record<number, Record<number, any>> = {};\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n const dayBlocks = startingBlocks[dayIndex] ?? {};\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n if (occupiedBlocks[dayIndex]?.[blockIndex]) continue;\n\n const startingAppointments = dayBlocks[blockIndex] ?? [];\n if (startingAppointments.length > 0) {\n const appointmentToShow = orderBy(startingAppointments, [(e) => e.endDate.date.getTime()], ['desc'])[0];\n\n const C = dayIndex;\n let layoutLeft = '0px';\n if (C > 0 && N > 1) layoutLeft = `calc(${C * (100 / N)}%)`;\n const layoutTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n let layoutHeight = '0px';\n let appointmentDurationMinutes = 0;\n if (appointmentToShow.endDate && appointmentToShow.startDate) {\n appointmentDurationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentToShow);\n if (appointmentDurationMinutes > 0) {\n const heightBlock = appointmentDurationMinutes / 30;\n layoutHeight = `max(0px, calc(${blockHeightExpr} * ${heightBlock} - ${this.GAP_PX}px))`;\n }\n }\n\n layouts.push({\n layoutTop,\n layoutLeft,\n layoutHeight,\n appointment: appointmentToShow,\n layoutWidth: 'calc(100% / 7 - 2rem)',\n });\n\n const blocksToOccupy = Math.ceil(appointmentDurationMinutes / 30);\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = blockIndex + i;\n if (occupiedBlockIndex < totalBlocksPerDay) {\n if (!occupiedBlocks[dayIndex]) occupiedBlocks[dayIndex] = {};\n if (!occupiedBlocks[dayIndex][occupiedBlockIndex]) {\n occupiedBlocks[dayIndex][occupiedBlockIndex] = appointmentToShow.id;\n }\n } else {\n break;\n }\n }\n }\n }\n }\n return layouts;\n });\n\n visualOccupancyMap = computed(() => {\n const map = new Map<string, any>();\n const visibleLayouts = this.visibleAppointmentsLayout();\n const viewStartDate = this.date();\n const startH = this.startDayHour();\n const endH = this.endDayHour();\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n\n if (!viewStartDate || typeof startH !== 'number' || typeof endH !== 'number') return map;\n\n for (const appointmentLayout of visibleLayouts) {\n const startInfo = this.schedulerService.getBlockIdentifier(\n appointmentLayout.appointment.startDate,\n viewStartDate,\n startH,\n endH,\n 7,\n );\n if (!startInfo) continue;\n\n const durationMinutes = this.schedulerService.calculateDurationInMinutes(appointmentLayout.appointment);\n const blocksToOccupy = Math.ceil(durationMinutes / 30);\n\n for (let i = 0; i < blocksToOccupy; i++) {\n const occupiedBlockIndex = startInfo.blockIndex + i;\n if (occupiedBlockIndex >= 0 && occupiedBlockIndex < totalBlocksPerDay) {\n const mapKey = `${startInfo.dayIndex}-${occupiedBlockIndex}`;\n if (!map.has(mapKey)) {\n map.set(mapKey, appointmentLayout.appointment.id);\n }\n } else {\n break;\n }\n }\n }\n return map;\n });\n\n overflowBadges = computed((): AXSchedulerOverflowBadge[] => {\n const badges: AXSchedulerOverflowBadge[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badges;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n badges.push({ key: blockMapKey, count: newlyHidden.length, badgeTop, badgeLeft });\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n return badges;\n });\n\n /**\n * Structures all-day (or \"becomes all-day\") segments for rendering in the all-day slots for each day of the week.\n */\n allDayAppointmentsPerDay = computed((): AXSchedulerAllDaySlotData[] => {\n const daysInWeek = this.daysArray().map((e) => e.date); // AXDateTime objects for each day in the week\n const allSegmentsInView = this.processedAppointmentsForLayout(); // All processed segments\n const result: AXSchedulerAllDaySlotData[] = [];\n\n if (!daysInWeek || daysInWeek.length === 0) return result;\n\n daysInWeek.forEach((dayDate) => {\n const currentDayStart = dayDate.startOf('day'); // For accurate day comparison\n\n // Filter segments that are marked as 'allDay' AND belong to the current 'dayDate'\n const allDaySegmentsForThisDay = allSegmentsInView.filter(\n (segment) => segment.allDay && segment.startDate.startOf('day').equal(currentDayStart, 'day'),\n );\n\n // Sort these segments for consistent display\n // Primarily by original start time, then by duration of original appointment, then title\n const sortedAppointmentsForThisDay = orderBy(\n allDaySegmentsForThisDay,\n [\n (s) => s.originalStartDate.date.getTime(),\n (s) => s.originalEndDate.date.getTime() - s.originalStartDate.date.getTime(),\n (s) => s.title?.toLowerCase() ?? '',\n ],\n ['asc', 'desc', 'asc'], // Earlier start, longer duration, then alphabetical title\n );\n\n result.push({\n day: dayDate, // The AXDateTime for this day column\n appointments: sortedAppointmentsForThisDay, // Array of segments for the all-day slot\n });\n });\n return result;\n });\n\n overflowBadgesWithData = computed((): AXSchedulerGridBadgeInfo[] => {\n const badgesInfo: AXSchedulerGridBadgeInfo[] = [];\n const activeBlocks = this.activeAppointmentsInBlock();\n const occupancyMap = this.visualOccupancyMap();\n const daysCount = 7;\n const totalBlocksPerDay = this.totalBlocksPerViewDay();\n const blockHeightExpr = `var(--ax-comp-scheduler-basic-view-blocks-height, 30px)`;\n const N: number = daysCount;\n\n if (!activeBlocks || !occupancyMap || totalBlocksPerDay === 0) return badgesInfo;\n\n const countedHiddenAppointmentKeysToday = new Map<number, Set<any>>();\n\n for (let dayIndex = 0; dayIndex < daysCount; dayIndex++) {\n countedHiddenAppointmentKeysToday.set(dayIndex, new Set());\n for (let blockIndex = 0; blockIndex < totalBlocksPerDay; blockIndex++) {\n const blockMapKey = `${dayIndex}-${blockIndex}`;\n const activeAppointments = activeBlocks[dayIndex]?.[blockIndex] ?? [];\n if (activeAppointments.length === 0) continue;\n\n const visibleAppointmentKey = occupancyMap.get(blockMapKey);\n // Find all hidden appointments for this specific block\n const hiddenAppointments = activeAppointments.filter((appointment) => appointment.id !== visibleAppointmentKey);\n // Find which of those hidden ones haven't been counted today yet\n const newlyHidden = hiddenAppointments.filter(\n (e) => !countedHiddenAppointmentKeysToday.get(dayIndex).has(e.id),\n );\n\n if (newlyHidden.length > 0) {\n const C = dayIndex;\n let baseColLeft = '0px';\n if (C > 0 && N > 1) baseColLeft = `calc(${C * (100 / N)}%)`;\n const baseTop = `calc(${blockHeightExpr} * ${blockIndex})`;\n // Keep your positioning logic for the badge itself\n const badgeLeft = `calc(${baseColLeft} + calc(100% / ${N} - 1.75rem))`;\n const badgeTop = `calc(${baseTop} + 0.75rem)`;\n\n // Store the badge info *and* the list of appointments it represents\n badgesInfo.push({\n key: blockMapKey,\n count: newlyHidden.length,\n badgeTop,\n badgeLeft,\n hiddenAppointments: newlyHidden, // Store the actual hidden appointments\n });\n\n // Mark these as counted for today\n newlyHidden.forEach((e) => countedHiddenAppointmentKeysToday.get(dayIndex).add(e.id));\n }\n }\n }\n // Sort the badges by top then left for consistent rendering order? (Optional)\n // badgesInfo.sort((a, b) => {\n // const topCompare = a.badgeTop.localeCompare(b.badgeTop);\n // if (topCompare !== 0) return topCompare;\n // return a.badgeLeft.localeCompare(b.badgeLeft);\n // });\n return badgesInfo;\n });\n\n protected isToday(date: AXDateTime): boolean {\n const today = this.calendarService.create(new Date());\n return date.equal(today, 'day');\n }\n protected isHoliday(date: AXDateTime): { state: 'holiday' | 'weekend' | 'none'; holiday?: AXHolidayDate } {\n const isHoliday = this.schedulerService.isHoliday(date);\n if (isHoliday) {\n const holiday = this.calendarService.holidays.filter((d) => date.equal(d.date, 'day'))[0];\n return {\n state: 'holiday',\n holiday,\n };\n }\n const isWeekend = this.schedulerService.isWeekend(date, this.calendar());\n if (isWeekend) {\n return { state: 'weekend' };\n }\n return { state: 'none' };\n }\n\n @HostBinding('class.ax-state-readonly') get isReadonly() {\n return this.readonly();\n }\n}\n","<div class=\"ax-scheduler-week-header\">\n <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\"></div>\n <div class=\"ax-scheduler-week-header-date\" aria-hidden=\"true\">\n @for (day of daysArray(); track day.date.date.getTime()) {\n <div\n [class.ax-state-today]=\"isToday(day.date)\"\n class=\"ax-scheduler-week-header-date-day\"\n [class.ax-state-holiday]=\"day.holiday.state !== 'none'\"\n >\n <span\n class=\"ax-scheduler-week-header-date-day-char ax-scheduler-truncate\"\n [axTooltip]=\"day.holiday?.holiday?.title ?? ''\"\n >\n {{ day.date | format: 'date' : { format: 'dddd', calendar: calendar() } | async }}\n @if (day.holiday.state === 'holiday' && day.holiday.holiday.title) {\n ( {{ day.holiday.holiday.title }} )\n }\n </span>\n <span class=\"ax-scheduler-week-header-date-day-num\">\n {{ day.date | format: 'date' : { format: 'DD', calendar: calendar() } | async }}\n </span>\n </div>\n }\n </div>\n </div>\n <div class=\"ax-scheduler-week-header-days\">\n <div class=\"ax-scheduler-week-header-table\">{{ 'dateTime.duration.all-day' | translate | async }}</div>\n <div aria-hidden=\"true\" class=\"ax-scheduler-week-header-date\">\n @for (slotData of allDayAppointmentsPerDay(); track slotData.day.date.getTime()) {\n <div\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleAllDayDrop($event, slotData.day)\"\n class=\"ax-scheduler-all-day-slot\"\n (click)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (dblclick)=\"handleAllDaySlotEvent($event, slotData.day)\"\n (contextmenu)=\"handleAllDaySlotEvent($event, slotData.day)\"\n >\n @if (slotData.appointments.length > 0) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || slotData.appointments[0].readonly || readonly()\"\n [dragData]=\"slotData.appointments[0]\"\n (click)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (dblclick)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n (contextmenu)=\"handleAppointmentEvent($event, slotData.appointments[0])\"\n [title]=\"slotData.appointments[0].title\"\n class=\"ax-scheduler-header-week-appointment\"\n [style.color]=\"slotData.appointments[0].textColor\"\n [style.background-color]=\"slotData.appointments[0].backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ slotData.appointments[0].title }}</ax-title>\n </div>\n }\n @if (slotData.appointments.length > 1) {\n <div #moreAppointments class=\"ax-scheduler-appointment-badge\">+{{ slotData.appointments.length - 1 }}</div>\n <ax-popover [target]=\"moreAppointments\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\" [class.ax-state-readonly]=\"readonly()\">\n @for (appointment of slotData.appointments; track appointment.id; let first = $first) {\n @if (!first) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n class=\"ax-scheduler-popover-appointment\"\n [style.color]=\"appointment.textColor\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n </div>\n }\n }\n </div>\n </ax-popover>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n<div class=\"ax-scheduler-week-time-container\">\n <div class=\"ax-scheduler-week-time\" aria-hidden=\"true\">\n @for (time of hoursArray(); track time.date.getTime()) {\n <div>\n {{ time | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </div>\n }\n </div>\n\n <div class=\"ax-scheduler-week-table-container\">\n <div class=\"ax-scheduler-week-appointment-container\">\n @for (appt of visibleAppointmentsLayout(); track appt.appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appt.appointment.readonly || readonly()\"\n [dragData]=\"appt.appointment\"\n (click)=\"handleAppointmentEvent($event, appt.appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appt.appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appt.appointment)\"\n [title]=\"appt.appointment.title\"\n [style.height]=\"appt.layoutHeight\"\n class=\"ax-scheduler-week-appointment\"\n [style.color]=\"appt.appointment.textColor\"\n [style.inset-block-start]=\"appt.layoutTop\"\n [style.inset-inline-start]=\"appt.layoutLeft\"\n [style.background-color]=\"appt.appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appt.appointment.title }}</ax-title>\n <ax-subtitle>\n {{\n appt.appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{ appt.appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async }}\n </ax-subtitle>\n </div>\n }\n\n <!-- Overflow Badges with Popovers -->\n @for (badge of overflowBadgesWithData(); track badge.key) {\n <!-- Wrap badge and popover for targeting -->\n <div\n style=\"position: absolute\"\n class=\"ax-scheduler-badge-wrapper\"\n [style.inset-block-start]=\"badge.badgeTop\"\n [style.inset-inline-start]=\"badge.badgeLeft\"\n >\n <!-- The Badge itself -->\n <div #actionButton class=\"ax-scheduler-appointment-badge\">+{{ badge.count }}</div>\n <!-- The Popover -->\n <ax-popover [target]=\"actionButton\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane ax-scheduler-popover\">\n @for (appointment of badge.hiddenAppointments; track appointment.id) {\n <div\n axDrag\n [dragCursor]=\"'grab'\"\n [dragData]=\"appointment\"\n [dragElementClone]=\"true\"\n [dragDisabled]=\"!draggable() || appointment.readonly || readonly()\"\n (click)=\"handleAppointmentEvent($event, appointment)\"\n (dblclick)=\"handleAppointmentEvent($event, appointment)\"\n (contextmenu)=\"handleAppointmentEvent($event, appointment)\"\n [title]=\"appointment.title\"\n [style.color]=\"appointment.textColor\"\n class=\"ax-scheduler-popover-appointment\"\n [style.background-color]=\"appointment.backgroundColor\"\n >\n <ax-title class=\"ax-scheduler-truncate\">{{ appointment.title }}</ax-title>\n <ax-subtitle>\n {{\n appointment.originalStartDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n -\n {{\n appointment.originalEndDate | format: 'time' : { format: 'HH:mm', calendar: calendar() } | async\n }}\n </ax-subtitle>\n </div>\n }\n </div>\n </ax-popover>\n </div>\n }\n </div>\n\n <table aria-hidden=\"true\" [border]=\"1\">\n <tbody>\n @for (time of hoursArray(); track time.date.getTime()) {\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 0)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 0)\"\n ></td>\n }\n </tr>\n <tr>\n @for (day of daysArray(); track day.date.date.getTime()) {\n <td\n axDropZone\n #zone2=\"axDropZone\"\n [class.ax-scheduler-slot-hovered]=\"zone2.isHovered()\"\n (onElementDrop)=\"handleSingleDayDrop($event, time, day.date, 1)\"\n (click)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (dblclick)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n (contextmenu)=\"handleSingleSlotEvent($event, time, day.date, 1)\"\n ></td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n","import { AXComponent, AXValueChangedEvent, NXComponent, NXEvent, NXNativeEvent } from '@acorex/cdk/common';\nimport { AXDropZoneDropEvent } from '@acorex/cdk/drag-drop';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCalendarComponent } from '@acorex/components/calendar';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPopoverComponent } from '@acorex/components/popover';\nimport { AXSelectBoxComponent } from '@acorex/components/select-box';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';\nimport { isPlatformBrowser, NgClass } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n model,\n OnInit,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n AXDayOfWeekName,\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentLoader,\n AXSchedulerInternalAppointment,\n AXSchedulerView,\n} from './scheduler.class';\nimport { AXSchedulerService } from './scheduler.service';\nimport { AXSchedulerAgendaViewComponent } from './views/agenda/scheduler-agenda-view.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerTimelineMonthViewComponent } from './views/timeline-month/scheduler-timeline-month-view.component';\nimport { AXSchedulerTimelineMultiDayViewComponent } from './views/timeline-multi-day/scheduler-timeline-multi-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\nexport interface AXSchedulerAppointmentMouseEvent extends NXNativeEvent<AXSchedulerComponent, MouseEvent> {\n appointment: AXSchedulerAppointment;\n}\nexport interface AXSchedulerSlotMouseEvent extends NXNativeEvent<AXSchedulerComponent, MouseEvent> {\n slot: {\n endDate: AXDateTime;\n startDate: AXDateTime;\n view: AXSchedulerView;\n };\n}\nexport interface AXSchedulerSlotDropEvent extends NXEvent<AXSchedulerComponent> {\n dropEvent: AXDropZoneDropEvent;\n appointment: AXSchedulerAppointment;\n slot: {\n endDate: AXDateTime;\n startDate: AXDateTime;\n view: AXSchedulerView;\n };\n}\n\n@Component({\n selector: 'ax-scheduler',\n templateUrl: './scheduler.component.html',\n styleUrls: ['./scheduler.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n FormsModule,\n AXSelectBoxComponent,\n AXDecoratorIconComponent,\n AXButtonComponent,\n NgClass,\n AXPopoverComponent,\n AXCalendarComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n AXSchedulerTimelineMultiDayViewComponent,\n AXSchedulerTimelineMonthViewComponent,\n AXSchedulerAgendaViewComponent,\n ],\n providers: [AXUnsubscriber, { provide: AXComponent, useExisting: AXSchedulerComponent }],\n})\nexport class AXSchedulerComponent extends NXComponent implements OnInit {\n private platformId = inject(PLATFORM_ID);\n private unsubscriber = inject(AXUnsubscriber);\n private formatService = inject(AXFormatService);\n private localeService = inject(AXLocaleService);\n private calendarService = inject(AXCalendarService);\n private schedulerService = inject(AXSchedulerService);\n private translationService = inject(AXTranslationService);\n\n private viewModeSelectbox = viewChild(AXSelectBoxComponent);\n\n private displayViews: Record<AXSchedulerView, string> = {\n day: 'daily',\n week: 'weekly',\n month: 'monthly',\n 'timeline-day': 'daily-timeline',\n 'timeline-multi-day': 'multi-day-timeline',\n 'timeline-month': 'monthly-timeline',\n agenda: 'agenda',\n };\n\n public calendar = input<'gregorian' | 'solar-hijri' | string>();\n protected calendarType = linkedSignal<'gregorian' | 'solar-hijri' | string>(\n () => this.calendar() ?? this.localeService.activeProfile().calendar.system,\n );\n\n public startingDate = input<Date>(new Date());\n protected currentDate = linkedSignal<AXDateTime>(() =>\n this.calendarService.create(this.startingDate(), this.calendarType()).startOf('day'),\n );\n\n private _endRange = signal<Date>(null);\n public endRange = this._endRange.asReadonly();\n private _fromRange = signal<Date>(null);\n public fromRange = this._fromRange.asReadonly();\n private _appointments = signal<AXSchedulerAppointment[]>([]);\n public appointments = this._appointments.asReadonly();\n protected rtl = signal(false);\n protected isFullScreen = signal(false);\n protected viewsDataSource = signal<{ id: string; text: string }[]>([]);\n private prevDate = signal<AXDateTime>(this.calendarService.create(new Date(), this.calendarType()));\n\n public endDayHour = input(24);\n public startDayHour = input(8);\n public hasHeader = input(true);\n public readonly = input(false);\n public draggable = input(true);\n public allowFullScreen = input(true);\n public multiDayViewDaysCount = input(7);\n public dataSource = input<AXSchedulerAppointmentDataSource>([]);\n public firstDayOfWeek = input<AXDayOfWeekName>('sunday');\n public views = input<AXSchedulerView[]>([\n 'day',\n 'week',\n 'month',\n 'timeline-day',\n 'timeline-multi-day',\n 'timeline-month',\n 'agenda',\n ]);\n\n public selectedView = model<AXSchedulerView>(this.views()[0]);\n\n // --- Public Outputs ---\n public onRangeChanged = output<{ from: Date; to: Date }>();\n public onSlotClicked = output<AXSchedulerSlotMouseEvent>();\n public onSlotDblClicked = output<AXSchedulerSlotMouseEvent>();\n public onSlotRightClick = output<AXSchedulerSlotMouseEvent>();\n public onAppointmentDrop = output<AXSchedulerSlotDropEvent>();\n public onAppointmentClicked = output<AXSchedulerAppointmentMouseEvent>();\n public onAppointmentDblClicked = output<AXSchedulerAppointmentMouseEvent>();\n public onAppointmentRightClick = output<AXSchedulerAppointmentMouseEvent>();\n\n // --- Internal Handlers for View Outputs ---\n protected handleSlotClickInternal(eventData: AXSchedulerSlotMouseEvent) {\n this.onSlotClicked.emit(eventData);\n }\n protected handleSlotDblClickInternal(eventData: AXSchedulerSlotMouseEvent) {\n this.onSlotDblClicked.emit(eventData);\n }\n protected handleSlotRightClickInternal(eventData: AXSchedulerSlotMouseEvent) {\n this.onSlotRightClick.emit(eventData);\n }\n protected handleAppointmentClickInternal(eventData: AXSchedulerAppointmentMouseEvent) {\n this.onAppointmentClicked.emit(eventData);\n }\n protected handleAppointmentDblClickInternal(eventData: AXSchedulerAppointmentMouseEvent) {\n this.onAppointmentDblClicked.emit(eventData);\n }\n protected handleAppointmentRightClickInternal(eventData: AXSchedulerAppointmentMouseEvent) {\n this.onAppointmentRightClick.emit(eventData);\n }\n protected handleAppointmentDropInternal(eventData: AXSchedulerSlotDropEvent) {\n this.onAppointmentDrop.emit(eventData);\n }\n\n ngOnInit() {\n this.calendarService.calendarChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(() => {\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n });\n\n this.translationService.langChanges$.pipe(this.unsubscriber.takeUntilDestroy).subscribe(async () => {\n await this.fillDataSource();\n this.viewModeSelectbox().selectItems(this.viewsDataSource().find((c) => c.id == this.selectedView()));\n this.currentDate.set(this.calendarService.create(this.currentDate().date, this.calendarType()));\n });\n\n if (isPlatformBrowser(this.platformId)) this.rtl.set(AXHtmlUtil.isRtl(this.nativeElement));\n this.fillDataSource();\n }\n\n #appointmentEffect = effect(async () => {\n if (typeof this.dataSource() === 'function') {\n const func = this.dataSource() as AXSchedulerAppointmentLoader;\n const list = await func({\n range: {\n end: this.endRange(),\n from: this.fromRange(),\n },\n });\n this._appointments.set(list);\n } else {\n const list = this.dataSource() as AXSchedulerAppointment[];\n this._appointments.set(list);\n }\n });\n\n private async fillDataSource() {\n const result = [];\n for await (const c of this.views()) {\n const text = await this.translationService.translateAsync(`dateTime.duration.${this.displayViews[c]}`);\n result.push({ text, id: c });\n }\n this.viewsDataSource.set(result);\n }\n\n private getGridDateRange(dateInMonth: AXDateTime): { gridStartDate: AXDateTime; gridEndDate: AXDateTime } {\n const firstDayOfMonth = dateInMonth.startOf('month');\n const firstDayGridNum = this.schedulerService.getDayOfWeekNumber(this.firstDayOfWeek());\n const firstDisplayedDayOfWeek = firstDayOfMonth.dayOfWeek;\n const daysFromPrevMonth = (firstDisplayedDayOfWeek - firstDayGridNum + 7) % 7;\n const gridStartDate = firstDayOfMonth.add('day', -daysFromPrevMonth);\n // Calculate end date based on standard 6 weeks for safety, or calculate dynamically if preferred\n const gridEndDate = gridStartDate.add('day', 6 * 7 - 1);\n return { gridStartDate, gridEndDate };\n }\n\n currentDateText = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n case 'week': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(this.currentDate().add('week', 1).add('day', -1), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const startOfWeek = this.formatService.format(this.currentDate(), 'datetime', {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n });\n const endOfWeek = this.formatService.format(\n this.currentDate().add('day', this.multiDayViewDaysCount() - 1),\n 'datetime',\n {\n format: 'DD MMMM yyyy',\n calendar: this.calendarType(),\n },\n );\n return `${startOfWeek} - ${endOfWeek}`;\n }\n case 'month':\n case 'timeline-month':\n return this.formatService.format(this.currentDate(), 'datetime', {\n format: 'MMMM yyyy',\n calendar: this.calendarType(),\n });\n }\n });\n\n calendarDepth = computed(() => {\n switch (this.selectedView()) {\n case 'day':\n case 'week':\n case 'agenda':\n case 'timeline-day':\n case 'timeline-multi-day':\n return 'day';\n case 'month':\n case 'timeline-month':\n return 'month';\n return 'day';\n }\n });\n\n mappedAppointments = computed<AXSchedulerInternalAppointment[]>(() => {\n const items = this._appointments() as AXSchedulerAppointment[];\n\n return items\n .map((item) => {\n const startDate = this.calendarService.create(item.startDate, this.calendarType());\n const endDate = this.calendarService.create(item.endDate, this.calendarType());\n // Basic validation\n if (!startDate?.date || !endDate?.date) {\n console.warn('Scheduler: Skipping item due to invalid date fields:', item);\n return null;\n }\n // Check if dates are valid after creation\n if (isNaN(startDate.date.getTime()) || isNaN(endDate.date.getTime())) {\n console.warn('Scheduler: Skipping item due to invalid parsed date (NaN):', item);\n return null;\n }\n\n // Calculate singleDay based on *calendar day*, not just time\n\n const appointment = {\n endDate,\n startDate,\n id: item.id,\n title: item.title,\n allDay: !!item.allDay,\n readonly: !!item.readonly,\n textColor: item.textColor,\n description: item.description,\n backgroundColor: item.backgroundColor,\n };\n return appointment;\n })\n .filter((appt): appt is AXSchedulerInternalAppointment => appt !== null); // Filter out nulls from invalid dates\n });\n\n viewAppointments = computed<AXSchedulerInternalAppointment[]>(() => {\n const view = this.selectedView();\n const current = this.currentDate();\n const mapped = this.mappedAppointments();\n\n if (!current || mapped.length === 0) return [];\n\n switch (view) {\n case 'day':\n case 'timeline-day': {\n const dayEnd = current.endOf('day');\n const dayStart = current.startOf('day');\n untracked(() => {\n this._endRange.set(dayEnd.date);\n this._fromRange.set(dayStart.date);\n this.onRangeChanged.emit({ from: dayStart.date, to: dayEnd.date });\n });\n return mapped.filter(\n (appt) => appt.endDate.compare(dayStart, 'day') >= 0 && appt.startDate.compare(dayEnd, 'day') <= 0,\n );\n }\n case 'week': {\n const weekStart = current;\n const weekEnd = weekStart.add('day', 7);\n untracked(() => {\n this._endRange.set(weekEnd.date);\n this._fromRange.set(weekStart.date);\n this.onRangeChanged.emit({ from: weekStart.date, to: weekEnd.date });\n });\n return mapped.filter(\n (appt) => appt.startDate.compare(weekEnd, 'day') < 0 && appt.endDate.compare(weekStart, 'day') >= 0,\n );\n }\n case 'month': {\n const { gridStartDate, gridEndDate } = this.getGridDateRange(current);\n const exclusiveGridEndDate = gridEndDate.add('day', 1);\n untracked(() => {\n this._endRange.set(exclusiveGridEndDate.date);\n this._fromRange.set(gridStartDate.date);\n });\n return mapped.filter(\n (appt) =>\n appt.startDate.compare(exclusiveGridEndDate, 'day') < 0 && appt.endDate.compare(gridStartDate, 'day') >= 0,\n );\n }\n case 'timeline-month': {\n const dayStart = current.startOf('month');\n const dayEnd = dayStart.endOf('month');\n untracked(() => {\n this._endRange.set(dayEnd.date);\n this._fromRange.set(dayStart.date);\n this.onRangeChanged.emit({ from: dayStart.date, to: dayEnd.date });\n });\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n case 'agenda':\n case 'timeline-multi-day': {\n const dayStart = current;\n const dayEnd = dayStart.add('day', this.multiDayViewDaysCount());\n untracked(() => {\n this._endRange.set(dayEnd.date);\n this._fromRange.set(dayStart.date);\n this.onRangeChanged.emit({ from: dayStart.date, to: dayEnd.date });\n });\n return mapped.filter(\n (appt) => appt.startDate.compare(dayEnd, 'day') < 0 && appt.endDate.compare(dayStart, 'day') >= 0,\n );\n }\n }\n });\n\n viewChanged(e: AXValueChangedEvent<AXSchedulerView>) {\n const newView = e.value;\n const oldView = e.oldValue;\n this.selectedView.set(newView);\n\n if (oldView === 'week') {\n const oldDayOfWeek = this.prevDate().dayOfWeek % 7;\n const date = this.currentDate().add('day', oldDayOfWeek - 1);\n this.currentDate.set(date);\n }\n\n this.prevDate.set(this.currentDate());\n\n if (newView === 'week') {\n const currentDate = this.currentDate();\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n const startOfWeekDate = currentDate.add('day', -daysToSubtract);\n this.currentDate.set(startOfWeekDate);\n }\n }\n\n nextClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', 1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', 1));\n break;\n\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', 1));\n break;\n }\n }\n\n prevClick() {\n switch (this.selectedView()) {\n case 'day':\n case 'timeline-day':\n this.currentDate.set(this.currentDate().add('day', -1));\n break;\n\n case 'week':\n this.currentDate.set(this.currentDate().add('week', -1));\n break;\n\n case 'agenda':\n case 'timeline-multi-day':\n this.currentDate.set(this.currentDate().add('day', -this.multiDayViewDaysCount()));\n break;\n\n case 'month':\n case 'timeline-month':\n this.currentDate.set(this.currentDate().add('month', -1));\n break;\n }\n }\n\n calendarDateChanged(e: any) {\n let currentDate = this.calendarService.create(e, this.calendarType());\n if (this.selectedView() === 'week') {\n const currentDayOfWeek = currentDate.dayOfWeek;\n const desiredFirstDayName = this.firstDayOfWeek();\n const desiredFirstDayNumber = this.schedulerService.getDayOfWeekNumber(desiredFirstDayName);\n const daysToSubtract = (currentDayOfWeek - desiredFirstDayNumber + 7) % 7;\n currentDate = currentDate.add('day', -daysToSubtract);\n }\n this.currentDate.set(currentDate);\n }\n\n handleFullScreen() {\n if (!this.isFullScreen()) this.nativeElement.classList.add('ax-full-screen-container');\n if (this.isFullScreen()) this.nativeElement.classList.remove('ax-full-screen-container');\n this.isFullScreen.set(!this.isFullScreen());\n }\n}\n","<div class=\"ax-scheduler-container\">\n @if (hasHeader()) {\n <div class=\"ax-scheduler-header\">\n <div class=\"ax-scheduler-date\">\n <ax-button look=\"blank\" (onClick)=\"prevClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [ngClass]=\"{\n 'ax-icon-chevron-left': !rtl(),\n 'ax-icon-chevron-right': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"currentDateText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"nextClick()\">\n <ax-icon\n class=\"ax-icon ax-text-xl\"\n [ngClass]=\"{\n 'ax-icon-chevron-right': !rtl(),\n 'ax-icon-chevron-left': rtl(),\n }\"\n ></ax-icon>\n </ax-button>\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\">\n <div class=\"ax-overlay-pane\">\n <ax-calendar\n [type]=\"calendarType()\"\n [depth]=\"calendarDepth()\"\n [ngModel]=\"currentDate()\"\n (ngModelChange)=\"calendarDateChanged($event)\"\n ></ax-calendar>\n </div>\n </ax-popover>\n </div>\n <div class=\"ax-scheduler-actions\">\n <ax-select-box\n [dropdownWidth]=\"200\"\n [ngModel]=\"selectedView()\"\n [dataSource]=\"viewsDataSource()\"\n (onValueChanged)=\"viewChanged($event)\"\n ></ax-select-box>\n\n @if (allowFullScreen()) {\n <ax-button look=\"blank\" (onClick)=\"handleFullScreen()\">\n <ax-icon>\n <i\n class=\"fa-solid fa-expand\"\n [ngClass]=\"{ 'fa-compress': isFullScreen(), 'fa-expand': !isFullScreen() }\"\n ></i>\n </ax-icon>\n </ax-button>\n }\n </div>\n </div>\n }\n <div class=\"ax-scheduler-views-container\">\n @switch (selectedView()) {\n @case ('day') {\n <ax-scheduler-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-day-view>\n }\n @case ('week') {\n <ax-scheduler-week-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-week-view>\n }\n @case ('month') {\n <ax-scheduler-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n ></ax-scheduler-month-view>\n }\n @case ('timeline-day') {\n <ax-scheduler-timeline-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-day-view>\n }\n @case ('timeline-multi-day') {\n <ax-scheduler-timeline-multi-day-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [endDayHour]=\"endDayHour()\"\n [startDayHour]=\"startDayHour()\"\n [appointments]=\"viewAppointments()\"\n [daysCount]=\"multiDayViewDaysCount()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-multi-day-view>\n }\n @case ('timeline-month') {\n <ax-scheduler-timeline-month-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-timeline-month-view>\n }\n @case ('agenda') {\n <ax-scheduler-agenda-view\n [date]=\"currentDate()\"\n [readonly]=\"readonly()\"\n [draggable]=\"draggable()\"\n [calendar]=\"calendarType()\"\n [appointments]=\"viewAppointments()\"\n (slotClickedInternal)=\"handleSlotClickInternal($event)\"\n (slotDblClickedInternal)=\"handleSlotDblClickInternal($event)\"\n (slotRightClickedInternal)=\"handleSlotRightClickInternal($event)\"\n (onAppointmentDropInternal)=\"handleAppointmentDropInternal($event)\"\n (appointmentClickedInternal)=\"handleAppointmentClickInternal($event)\"\n (appointmentDblClickedInternal)=\"handleAppointmentDblClickInternal($event)\"\n (appointmentRightClickedInternal)=\"handleAppointmentRightClickInternal($event)\"\n >\n </ax-scheduler-agenda-view>\n }\n }\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { AXSchedulerComponent } from './scheduler.component';\nimport { AXSchedulerDayViewComponent } from './views/day/scheduler-day-view.component';\nimport { AXSchedulerMonthViewComponent } from './views/month/scheduler-month-view.component';\nimport { AXSchedulerTimelineDayViewComponent } from './views/timeline-day/scheduler-timeline-day-view.component';\nimport { AXSchedulerWeekViewComponent } from './views/week/scheduler-week-view.component';\n\nconst COMPONENT = [\n AXSchedulerComponent,\n AXSchedulerDayViewComponent,\n AXSchedulerWeekViewComponent,\n AXSchedulerMonthViewComponent,\n AXSchedulerTimelineDayViewComponent,\n];\n\n@NgModule({\n imports: [...COMPONENT],\n exports: [...COMPONENT],\n providers: [],\n})\nexport class AXSchedulerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}