@naniteninja/dashboard-components-lib 1.0.1 → 1.0.3

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 (304) hide show
  1. package/fesm2022/naniteninja-dashboard-components-lib.mjs +179 -189
  2. package/fesm2022/naniteninja-dashboard-components-lib.mjs.map +1 -1
  3. package/index.d.ts +1669 -3
  4. package/package.json +25 -29
  5. package/src/lib/shared-styles/common/theme.scss +3 -3
  6. package/esm2022/lib/components/auto-delegation/animations.mjs +0 -20
  7. package/esm2022/lib/components/auto-delegation/auto-delegation-modal.component.mjs +0 -106
  8. package/esm2022/lib/components/auto-delegation/enums/auto-delegation.event-type.enum.mjs +0 -6
  9. package/esm2022/lib/components/auto-delegation/enums/auto-delegation.event-value.enum.mjs +0 -7
  10. package/esm2022/lib/components/auto-delegation/interface/auto-delegation-data.interface.mjs +0 -2
  11. package/esm2022/lib/components/auto-delegation/interface/auto-delegation.event.interface.mjs +0 -2
  12. package/esm2022/lib/components/auto-delegation/interface/auto-delegation.modal-data.interface.mjs +0 -2
  13. package/esm2022/lib/components/auto-delegation/interface/preferences.interface.mjs +0 -2
  14. package/esm2022/lib/components/calendar/agenda/agenda-day-card/agenda-day-card.component.mjs +0 -37
  15. package/esm2022/lib/components/calendar/agenda/agenda.component.mjs +0 -98
  16. package/esm2022/lib/components/calendar/agenda/agenda.module.mjs +0 -23
  17. package/esm2022/lib/components/calendar/agenda/interfaces/agenda.day.interface.mjs +0 -2
  18. package/esm2022/lib/components/calendar/agenda/interfaces/agenda.event.inetrface.mjs +0 -2
  19. package/esm2022/lib/components/calendar/components/edit-recurring-event/edit-recurring-event.component.mjs +0 -40
  20. package/esm2022/lib/components/calendar/components/event-form/event-form.component.mjs +0 -275
  21. package/esm2022/lib/components/calendar/components/event-form/event-form.module.mjs +0 -89
  22. package/esm2022/lib/components/calendar/components/event-info/event-info.component.mjs +0 -40
  23. package/esm2022/lib/components/calendar/enums/calendar.account.enum.mjs +0 -6
  24. package/esm2022/lib/components/calendar/enums/calendar.account.icons.enum.mjs +0 -6
  25. package/esm2022/lib/components/calendar/enums/event-type.enum.mjs +0 -10
  26. package/esm2022/lib/components/calendar/enums/recurring.edit.options.enum.mjs +0 -7
  27. package/esm2022/lib/components/calendar/enums/recurring.type.enum.mjs +0 -8
  28. package/esm2022/lib/components/calendar/interfaces/calendar.account.interface.mjs +0 -2
  29. package/esm2022/lib/components/calendar/interfaces/calendar.account.theme.interface.mjs +0 -2
  30. package/esm2022/lib/components/calendar/interfaces/event.form.interface.mjs +0 -2
  31. package/esm2022/lib/components/calendar/interfaces/event.form.output.interface.mjs +0 -2
  32. package/esm2022/lib/components/calendar/interfaces/event.interface.mjs +0 -2
  33. package/esm2022/lib/components/calendar/interfaces/event.time.interface.mjs +0 -2
  34. package/esm2022/lib/components/calendar/interfaces/recurring.event.interface.mjs +0 -2
  35. package/esm2022/lib/components/calendar/interfaces/recurring.exception.interface.mjs +0 -2
  36. package/esm2022/lib/components/calendar/interfaces/recurring.pattern.interface.mjs +0 -2
  37. package/esm2022/lib/components/calendar/lookups/recurring.options.lookup.mjs +0 -30
  38. package/esm2022/lib/components/calendar/scheduler/enums/schedule-date-status.enum.mjs +0 -7
  39. package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.action.interface.mjs +0 -2
  40. package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.event.day.interface.mjs +0 -2
  41. package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.event.interface.mjs +0 -2
  42. package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.event.suggestion.interface.mjs +0 -2
  43. package/esm2022/lib/components/calendar/scheduler/interfaces/scheduler.slots.interface.mjs +0 -2
  44. package/esm2022/lib/components/calendar/scheduler/mock-schedule.mjs +0 -80
  45. package/esm2022/lib/components/calendar/scheduler/scheduler.component.mjs +0 -144
  46. package/esm2022/lib/components/calendar/services/calendar-utils.service.mjs +0 -211
  47. package/esm2022/lib/components/chat/chat.component.mjs +0 -307
  48. package/esm2022/lib/components/chat/chat.component.module.mjs +0 -85
  49. package/esm2022/lib/components/chat/chat.service.mjs +0 -63
  50. package/esm2022/lib/components/chat/enums/sender-types.enum.mjs +0 -6
  51. package/esm2022/lib/components/chat/gif-selector/gif-selector.component.mjs +0 -77
  52. package/esm2022/lib/components/chat/gif-selector/gif-selector.service.mjs +0 -41
  53. package/esm2022/lib/components/chat/gif-selector/tenor-media-format.interface.mjs +0 -2
  54. package/esm2022/lib/components/chat/gif-selector/tenor-object.interface.mjs +0 -2
  55. package/esm2022/lib/components/chat/gif-selector/tenor-result.interface.mjs +0 -2
  56. package/esm2022/lib/components/chat/interfaces/date-messages.interface.mjs +0 -2
  57. package/esm2022/lib/components/chat/interfaces/message-attachment.interface.mjs +0 -2
  58. package/esm2022/lib/components/chat/interfaces/message.interface.mjs +0 -2
  59. package/esm2022/lib/components/chat/interfaces/send-options-message.interface.mjs +0 -2
  60. package/esm2022/lib/components/chat/interfaces/type-send-message.enum.mjs +0 -7
  61. package/esm2022/lib/components/chat-suggestion/chat-suggestion.component.mjs +0 -21
  62. package/esm2022/lib/components/chat-suggestion/interfaces/chat-suggestion.interface.mjs +0 -2
  63. package/esm2022/lib/components/circle-progress/circle-progress.component.mjs +0 -143
  64. package/esm2022/lib/components/circle-progress/circle-progress.module.mjs +0 -18
  65. package/esm2022/lib/components/circle-progress/enums/circle-variable.enum.mjs +0 -6
  66. package/esm2022/lib/components/circle-progress/interfaces/circle-progress-config.interface.mjs +0 -2
  67. package/esm2022/lib/components/client-home/client-home.component.mjs +0 -123
  68. package/esm2022/lib/components/client-home/enums/client-home-component.enum.mjs +0 -9
  69. package/esm2022/lib/components/client-home/interfaces/chat-meta.interface.mjs +0 -2
  70. package/esm2022/lib/components/client-home/interfaces/home-dashboard-inputs.interface.mjs +0 -2
  71. package/esm2022/lib/components/client-home/interfaces/inner-partial-circle-progress-colors.interface.mjs +0 -2
  72. package/esm2022/lib/components/client-home/interfaces/partial-circle-progress-colors.interface.mjs +0 -2
  73. package/esm2022/lib/components/client-home/lookup/client-home.config.mjs +0 -30
  74. package/esm2022/lib/components/client-home/lookup/inner-progress-default-colors.config.mjs +0 -6
  75. package/esm2022/lib/components/client-home/lookup/inner-progress-pink-colors.config.mjs +0 -6
  76. package/esm2022/lib/components/client-home/lookup/inner-progress-purple-colors.config.mjs +0 -6
  77. package/esm2022/lib/components/client-home/lookup/inner-progress-teal-colors.config.mjs +0 -6
  78. package/esm2022/lib/components/client-home/lookup/inner-progress-white-colors.config.mjs +0 -10
  79. package/esm2022/lib/components/client-home/lookup/progress-default-colors.config.mjs +0 -10
  80. package/esm2022/lib/components/client-home/lookup/progress-white-colors.config.mjs +0 -10
  81. package/esm2022/lib/components/client-home/pipes/chat-meta.pipe.mjs +0 -60
  82. package/esm2022/lib/components/client-home/pipes/get-color-by-matcher.pipe.mjs +0 -33
  83. package/esm2022/lib/components/client-match-overview/client-match-overview.component.mjs +0 -300
  84. package/esm2022/lib/components/client-match-overview/enums/conversation-flag.enum.mjs +0 -6
  85. package/esm2022/lib/components/client-match-overview/enums/counter-flag-base.enum.mjs +0 -6
  86. package/esm2022/lib/components/client-match-overview/enums/inner-circle-state.enum.mjs +0 -8
  87. package/esm2022/lib/components/client-match-overview/interfaces/client-match-overview.interface.mjs +0 -2
  88. package/esm2022/lib/components/client-match-overview/interfaces/conversation-flag.interface.mjs +0 -2
  89. package/esm2022/lib/components/client-match-overview/interfaces/dashboard-match-request.interface.mjs +0 -2
  90. package/esm2022/lib/components/client-match-overview/interfaces/progress-decision.interface.mjs +0 -2
  91. package/esm2022/lib/components/client-match-overview/interfaces/progress-facts.interface.mjs +0 -2
  92. package/esm2022/lib/components/client-match-overview/lookups/computer-inner-state.lookup.mjs +0 -81
  93. package/esm2022/lib/components/client-match-overview/lookups/limit-dates-indicator.lookup.mjs +0 -8
  94. package/esm2022/lib/components/client-match-overview/progress-ticker/progress-gap.config.mjs +0 -4
  95. package/esm2022/lib/components/client-match-overview/progress-ticker/progress-ticker.config.mjs +0 -3
  96. package/esm2022/lib/components/client-match-overview/progress-ticker/progress-ticker.service.mjs +0 -43
  97. package/esm2022/lib/components/dashboard-swipeable-tabs/dashboard-swipeable-tabs.component.mjs +0 -113
  98. package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/dashboard-main-swiper-options.mjs +0 -11
  99. package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/dashboard-thumbs-swiper-options.mjs +0 -27
  100. package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/main-swiper-default-options.mjs +0 -19
  101. package/esm2022/lib/components/dashboard-swipeable-tabs/lookups/thumbs-swiper-default-options.mjs +0 -21
  102. package/esm2022/lib/components/lib-client-dashboard/client-dashboard.component.mjs +0 -170
  103. package/esm2022/lib/components/lib-client-dashboard/enums/alert-status-fields.enum.mjs +0 -11
  104. package/esm2022/lib/components/lib-client-dashboard/enums/client-dashboard-component.enum.mjs +0 -7
  105. package/esm2022/lib/components/lib-client-dashboard/interfaces/client-dashboard-inputs.interface.mjs +0 -2
  106. package/esm2022/lib/components/lib-client-dashboard/lookups/client-dashboard.config.mjs +0 -15
  107. package/esm2022/lib/components/lib-compose-matcher-dash/compose-matcher-dash.component.mjs +0 -146
  108. package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/chart-data.interface.mjs +0 -2
  109. package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/chat-identifier.interface.mjs +0 -2
  110. package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/matcher-dashboard-inputs.interface.mjs +0 -2
  111. package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/matcher-profile.interface.mjs +0 -2
  112. package/esm2022/lib/components/lib-compose-matcher-dash/interfaces/prospect-data.interface.mjs +0 -2
  113. package/esm2022/lib/components/lib-compose-matcher-dash/pipes/get-profile-with-progress.pipe.mjs +0 -21
  114. package/esm2022/lib/components/matcher-statuses/enums/matcher-statuses.enum.mjs +0 -15
  115. package/esm2022/lib/components/matcher-statuses/interfaces/status.interface.mjs +0 -2
  116. package/esm2022/lib/components/matcher-statuses/lookups/matcher-statuses.lookup.mjs +0 -54
  117. package/esm2022/lib/components/matcher-statuses/matcher-statuses.component.mjs +0 -58
  118. package/esm2022/lib/components/matcher-statuses/pipes/is-status-included.pipe.mjs +0 -19
  119. package/esm2022/lib/components/profile-card/profile-card.component.mjs +0 -35
  120. package/esm2022/lib/components/profile-card/profile-card.module.mjs +0 -19
  121. package/esm2022/lib/components/spider-chart/interfaces/chart-data-circle.interface.mjs +0 -2
  122. package/esm2022/lib/components/spider-chart/interfaces/chart-data-defs-f.interface.mjs +0 -2
  123. package/esm2022/lib/components/spider-chart/interfaces/chart-data-defs-lg.interface.mjs +0 -2
  124. package/esm2022/lib/components/spider-chart/interfaces/chart-data-defs-rg.interface.mjs +0 -2
  125. package/esm2022/lib/components/spider-chart/interfaces/config.interface.mjs +0 -2
  126. package/esm2022/lib/components/spider-chart/interfaces/dataset.interface.mjs +0 -2
  127. package/esm2022/lib/components/spider-chart/interfaces/polygon-color.interface.mjs +0 -2
  128. package/esm2022/lib/components/spider-chart/interfaces/spider-chart-attribute.interface.mjs +0 -2
  129. package/esm2022/lib/components/spider-chart/lookup/default-spider-config.lookup.mjs +0 -18
  130. package/esm2022/lib/components/spider-chart/lookup/default-spider-config.mjs +0 -67
  131. package/esm2022/lib/components/spider-chart/lookup/demo-polygon-colors.lookup.mjs +0 -11
  132. package/esm2022/lib/components/spider-chart/lookup/svg-config.lookup.mjs +0 -277
  133. package/esm2022/lib/components/spider-chart/spider-chart.component.mjs +0 -235
  134. package/esm2022/lib/enums/direction.enum.mjs +0 -6
  135. package/esm2022/lib/enums/form-field-type.mjs +0 -30
  136. package/esm2022/lib/enums/local-storage-keys.enum.mjs +0 -5
  137. package/esm2022/lib/enums/status-types.mjs +0 -8
  138. package/esm2022/lib/model/select-option-template.mjs +0 -2
  139. package/esm2022/lib/operations/operations.mjs +0 -19
  140. package/esm2022/lib/pipes/array-sort/array.sort.pipe.mjs +0 -49
  141. package/esm2022/lib/pipes/count-non-empty-fields/count-non-empty-fields.pipe.mjs +0 -17
  142. package/esm2022/lib/pipes/date-localization/date-localization.pipe.mjs +0 -31
  143. package/esm2022/lib/pipes/fallback-translate/fallback-translate.pipe.mjs +0 -28
  144. package/esm2022/lib/pipes/get-display-value/get-display-value.pipe.mjs +0 -59
  145. package/esm2022/lib/pipes/get-multi-select-display-text/get-multi-select-display-text.pipe.mjs +0 -22
  146. package/esm2022/lib/pipes/initials/initials.pipe.mjs +0 -25
  147. package/esm2022/lib/pipes/round/round.pipe.mjs +0 -17
  148. package/esm2022/lib/pipes/update-llm-preference/update-llm-preference.pipe.mjs +0 -25
  149. package/esm2022/lib/services/abstract-cache.service.mjs +0 -10
  150. package/esm2022/lib/shared/shared/alert-popup/alert-popup.component.mjs +0 -38
  151. package/esm2022/lib/shared/shared/message-modal/message-modal.component.mjs +0 -95
  152. package/esm2022/lib/shared/shared/status-icon/status-icon.component.mjs +0 -14
  153. package/esm2022/lib/shared/shared.module.mjs +0 -23
  154. package/esm2022/naniteninja-dashboard-components-lib.mjs +0 -5
  155. package/esm2022/public-api.mjs +0 -122
  156. package/lib/components/auto-delegation/animations.d.ts +0 -1
  157. package/lib/components/auto-delegation/auto-delegation-modal.component.d.ts +0 -29
  158. package/lib/components/auto-delegation/enums/auto-delegation.event-type.enum.d.ts +0 -4
  159. package/lib/components/auto-delegation/enums/auto-delegation.event-value.enum.d.ts +0 -5
  160. package/lib/components/auto-delegation/interface/auto-delegation-data.interface.d.ts +0 -31
  161. package/lib/components/auto-delegation/interface/auto-delegation.event.interface.d.ts +0 -6
  162. package/lib/components/auto-delegation/interface/auto-delegation.modal-data.interface.d.ts +0 -8
  163. package/lib/components/auto-delegation/interface/preferences.interface.d.ts +0 -17
  164. package/lib/components/calendar/agenda/agenda-day-card/agenda-day-card.component.d.ts +0 -12
  165. package/lib/components/calendar/agenda/agenda.component.d.ts +0 -22
  166. package/lib/components/calendar/agenda/agenda.module.d.ts +0 -12
  167. package/lib/components/calendar/agenda/interfaces/agenda.day.interface.d.ts +0 -7
  168. package/lib/components/calendar/agenda/interfaces/agenda.event.inetrface.d.ts +0 -9
  169. package/lib/components/calendar/components/edit-recurring-event/edit-recurring-event.component.d.ts +0 -19
  170. package/lib/components/calendar/components/event-form/event-form.component.d.ts +0 -67
  171. package/lib/components/calendar/components/event-form/event-form.module.d.ts +0 -20
  172. package/lib/components/calendar/components/event-info/event-info.component.d.ts +0 -24
  173. package/lib/components/calendar/enums/calendar.account.enum.d.ts +0 -4
  174. package/lib/components/calendar/enums/calendar.account.icons.enum.d.ts +0 -4
  175. package/lib/components/calendar/enums/event-type.enum.d.ts +0 -8
  176. package/lib/components/calendar/enums/recurring.edit.options.enum.d.ts +0 -5
  177. package/lib/components/calendar/enums/recurring.type.enum.d.ts +0 -6
  178. package/lib/components/calendar/interfaces/calendar.account.interface.d.ts +0 -14
  179. package/lib/components/calendar/interfaces/calendar.account.theme.interface.d.ts +0 -5
  180. package/lib/components/calendar/interfaces/event.form.interface.d.ts +0 -22
  181. package/lib/components/calendar/interfaces/event.form.output.interface.d.ts +0 -10
  182. package/lib/components/calendar/interfaces/event.interface.d.ts +0 -33
  183. package/lib/components/calendar/interfaces/event.time.interface.d.ts +0 -4
  184. package/lib/components/calendar/interfaces/recurring.event.interface.d.ts +0 -16
  185. package/lib/components/calendar/interfaces/recurring.exception.interface.d.ts +0 -14
  186. package/lib/components/calendar/interfaces/recurring.pattern.interface.d.ts +0 -16
  187. package/lib/components/calendar/lookups/recurring.options.lookup.d.ts +0 -2
  188. package/lib/components/calendar/scheduler/enums/schedule-date-status.enum.d.ts +0 -5
  189. package/lib/components/calendar/scheduler/interfaces/scheduler.action.interface.d.ts +0 -10
  190. package/lib/components/calendar/scheduler/interfaces/scheduler.event.day.interface.d.ts +0 -5
  191. package/lib/components/calendar/scheduler/interfaces/scheduler.event.interface.d.ts +0 -26
  192. package/lib/components/calendar/scheduler/interfaces/scheduler.event.suggestion.interface.d.ts +0 -13
  193. package/lib/components/calendar/scheduler/interfaces/scheduler.slots.interface.d.ts +0 -6
  194. package/lib/components/calendar/scheduler/mock-schedule.d.ts +0 -9
  195. package/lib/components/calendar/scheduler/scheduler.component.d.ts +0 -36
  196. package/lib/components/calendar/services/calendar-utils.service.d.ts +0 -39
  197. package/lib/components/chat/chat.component.d.ts +0 -70
  198. package/lib/components/chat/chat.component.module.d.ts +0 -22
  199. package/lib/components/chat/chat.service.d.ts +0 -15
  200. package/lib/components/chat/enums/sender-types.enum.d.ts +0 -4
  201. package/lib/components/chat/gif-selector/gif-selector.component.d.ts +0 -25
  202. package/lib/components/chat/gif-selector/gif-selector.service.d.ts +0 -15
  203. package/lib/components/chat/gif-selector/tenor-media-format.interface.d.ts +0 -7
  204. package/lib/components/chat/gif-selector/tenor-object.interface.d.ts +0 -5
  205. package/lib/components/chat/gif-selector/tenor-result.interface.d.ts +0 -16
  206. package/lib/components/chat/interfaces/date-messages.interface.d.ts +0 -6
  207. package/lib/components/chat/interfaces/message-attachment.interface.d.ts +0 -6
  208. package/lib/components/chat/interfaces/message.interface.d.ts +0 -11
  209. package/lib/components/chat/interfaces/send-options-message.interface.d.ts +0 -5
  210. package/lib/components/chat/interfaces/type-send-message.enum.d.ts +0 -5
  211. package/lib/components/chat-suggestion/chat-suggestion.component.d.ts +0 -9
  212. package/lib/components/chat-suggestion/interfaces/chat-suggestion.interface.d.ts +0 -4
  213. package/lib/components/circle-progress/circle-progress.component.d.ts +0 -31
  214. package/lib/components/circle-progress/circle-progress.module.d.ts +0 -8
  215. package/lib/components/circle-progress/enums/circle-variable.enum.d.ts +0 -4
  216. package/lib/components/circle-progress/interfaces/circle-progress-config.interface.d.ts +0 -29
  217. package/lib/components/client-home/client-home.component.d.ts +0 -44
  218. package/lib/components/client-home/enums/client-home-component.enum.d.ts +0 -7
  219. package/lib/components/client-home/interfaces/chat-meta.interface.d.ts +0 -7
  220. package/lib/components/client-home/interfaces/home-dashboard-inputs.interface.d.ts +0 -45
  221. package/lib/components/client-home/interfaces/inner-partial-circle-progress-colors.interface.d.ts +0 -5
  222. package/lib/components/client-home/interfaces/partial-circle-progress-colors.interface.d.ts +0 -9
  223. package/lib/components/client-home/lookup/client-home.config.d.ts +0 -2
  224. package/lib/components/client-home/lookup/inner-progress-default-colors.config.d.ts +0 -2
  225. package/lib/components/client-home/lookup/inner-progress-pink-colors.config.d.ts +0 -2
  226. package/lib/components/client-home/lookup/inner-progress-purple-colors.config.d.ts +0 -2
  227. package/lib/components/client-home/lookup/inner-progress-teal-colors.config.d.ts +0 -2
  228. package/lib/components/client-home/lookup/inner-progress-white-colors.config.d.ts +0 -2
  229. package/lib/components/client-home/lookup/progress-default-colors.config.d.ts +0 -2
  230. package/lib/components/client-home/lookup/progress-white-colors.config.d.ts +0 -2
  231. package/lib/components/client-home/pipes/chat-meta.pipe.d.ts +0 -10
  232. package/lib/components/client-home/pipes/get-color-by-matcher.pipe.d.ts +0 -10
  233. package/lib/components/client-match-overview/client-match-overview.component.d.ts +0 -55
  234. package/lib/components/client-match-overview/enums/conversation-flag.enum.d.ts +0 -4
  235. package/lib/components/client-match-overview/enums/counter-flag-base.enum.d.ts +0 -4
  236. package/lib/components/client-match-overview/enums/inner-circle-state.enum.d.ts +0 -6
  237. package/lib/components/client-match-overview/interfaces/client-match-overview.interface.d.ts +0 -19
  238. package/lib/components/client-match-overview/interfaces/conversation-flag.interface.d.ts +0 -8
  239. package/lib/components/client-match-overview/interfaces/dashboard-match-request.interface.d.ts +0 -7
  240. package/lib/components/client-match-overview/interfaces/progress-decision.interface.d.ts +0 -10
  241. package/lib/components/client-match-overview/interfaces/progress-facts.interface.d.ts +0 -11
  242. package/lib/components/client-match-overview/lookups/computer-inner-state.lookup.d.ts +0 -7
  243. package/lib/components/client-match-overview/lookups/limit-dates-indicator.lookup.d.ts +0 -5
  244. package/lib/components/client-match-overview/progress-ticker/progress-gap.config.d.ts +0 -2
  245. package/lib/components/client-match-overview/progress-ticker/progress-ticker.config.d.ts +0 -2
  246. package/lib/components/client-match-overview/progress-ticker/progress-ticker.service.d.ts +0 -11
  247. package/lib/components/dashboard-swipeable-tabs/dashboard-swipeable-tabs.component.d.ts +0 -29
  248. package/lib/components/dashboard-swipeable-tabs/lookups/dashboard-main-swiper-options.d.ts +0 -2
  249. package/lib/components/dashboard-swipeable-tabs/lookups/dashboard-thumbs-swiper-options.d.ts +0 -2
  250. package/lib/components/dashboard-swipeable-tabs/lookups/main-swiper-default-options.d.ts +0 -2
  251. package/lib/components/dashboard-swipeable-tabs/lookups/thumbs-swiper-default-options.d.ts +0 -2
  252. package/lib/components/lib-client-dashboard/client-dashboard.component.d.ts +0 -73
  253. package/lib/components/lib-client-dashboard/enums/alert-status-fields.enum.d.ts +0 -9
  254. package/lib/components/lib-client-dashboard/enums/client-dashboard-component.enum.d.ts +0 -5
  255. package/lib/components/lib-client-dashboard/interfaces/client-dashboard-inputs.interface.d.ts +0 -29
  256. package/lib/components/lib-client-dashboard/lookups/client-dashboard.config.d.ts +0 -2
  257. package/lib/components/lib-compose-matcher-dash/compose-matcher-dash.component.d.ts +0 -48
  258. package/lib/components/lib-compose-matcher-dash/interfaces/chart-data.interface.d.ts +0 -5
  259. package/lib/components/lib-compose-matcher-dash/interfaces/chat-identifier.interface.d.ts +0 -5
  260. package/lib/components/lib-compose-matcher-dash/interfaces/matcher-dashboard-inputs.interface.d.ts +0 -26
  261. package/lib/components/lib-compose-matcher-dash/interfaces/matcher-profile.interface.d.ts +0 -8
  262. package/lib/components/lib-compose-matcher-dash/interfaces/prospect-data.interface.d.ts +0 -24
  263. package/lib/components/lib-compose-matcher-dash/pipes/get-profile-with-progress.pipe.d.ts +0 -9
  264. package/lib/components/matcher-statuses/enums/matcher-statuses.enum.d.ts +0 -13
  265. package/lib/components/matcher-statuses/interfaces/status.interface.d.ts +0 -6
  266. package/lib/components/matcher-statuses/lookups/matcher-statuses.lookup.d.ts +0 -2
  267. package/lib/components/matcher-statuses/matcher-statuses.component.d.ts +0 -23
  268. package/lib/components/matcher-statuses/pipes/is-status-included.pipe.d.ts +0 -8
  269. package/lib/components/profile-card/profile-card.component.d.ts +0 -11
  270. package/lib/components/profile-card/profile-card.module.d.ts +0 -9
  271. package/lib/components/spider-chart/interfaces/chart-data-circle.interface.d.ts +0 -10
  272. package/lib/components/spider-chart/interfaces/chart-data-defs-f.interface.d.ts +0 -11
  273. package/lib/components/spider-chart/interfaces/chart-data-defs-lg.interface.d.ts +0 -11
  274. package/lib/components/spider-chart/interfaces/chart-data-defs-rg.interface.d.ts +0 -10
  275. package/lib/components/spider-chart/interfaces/config.interface.d.ts +0 -19
  276. package/lib/components/spider-chart/interfaces/dataset.interface.d.ts +0 -7
  277. package/lib/components/spider-chart/interfaces/polygon-color.interface.d.ts +0 -4
  278. package/lib/components/spider-chart/interfaces/spider-chart-attribute.interface.d.ts +0 -6
  279. package/lib/components/spider-chart/lookup/default-spider-config.d.ts +0 -2
  280. package/lib/components/spider-chart/lookup/default-spider-config.lookup.d.ts +0 -2
  281. package/lib/components/spider-chart/lookup/demo-polygon-colors.lookup.d.ts +0 -2
  282. package/lib/components/spider-chart/lookup/svg-config.lookup.d.ts +0 -8
  283. package/lib/components/spider-chart/spider-chart.component.d.ts +0 -52
  284. package/lib/enums/direction.enum.d.ts +0 -4
  285. package/lib/enums/form-field-type.d.ts +0 -28
  286. package/lib/enums/local-storage-keys.enum.d.ts +0 -3
  287. package/lib/enums/status-types.d.ts +0 -6
  288. package/lib/model/select-option-template.d.ts +0 -5
  289. package/lib/operations/operations.d.ts +0 -19
  290. package/lib/pipes/array-sort/array.sort.pipe.d.ts +0 -7
  291. package/lib/pipes/count-non-empty-fields/count-non-empty-fields.pipe.d.ts +0 -7
  292. package/lib/pipes/date-localization/date-localization.pipe.d.ts +0 -8
  293. package/lib/pipes/fallback-translate/fallback-translate.pipe.d.ts +0 -11
  294. package/lib/pipes/get-display-value/get-display-value.pipe.d.ts +0 -13
  295. package/lib/pipes/get-multi-select-display-text/get-multi-select-display-text.pipe.d.ts +0 -8
  296. package/lib/pipes/initials/initials.pipe.d.ts +0 -7
  297. package/lib/pipes/round/round.pipe.d.ts +0 -7
  298. package/lib/pipes/update-llm-preference/update-llm-preference.pipe.d.ts +0 -8
  299. package/lib/services/abstract-cache.service.d.ts +0 -9
  300. package/lib/shared/shared/alert-popup/alert-popup.component.d.ts +0 -14
  301. package/lib/shared/shared/message-modal/message-modal.component.d.ts +0 -29
  302. package/lib/shared/shared/status-icon/status-icon.component.d.ts +0 -7
  303. package/lib/shared/shared.module.d.ts +0 -13
  304. package/public-api.d.ts +0 -121
@@ -1,144 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { TranslateModule } from '@ngx-translate/core';
4
- import { addDays, endOfDay, set } from 'date-fns';
5
- import { SkeletonModule } from 'primeng/skeleton';
6
- import { Subject, takeUntil } from 'rxjs';
7
- import { SectionSeparatorComponent } from '@naniteninja/ionic-lib';
8
- import { mockSchedule } from './mock-schedule';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common";
11
- import * as i2 from "@ngx-translate/core";
12
- import * as i3 from "primeng/skeleton";
13
- export class LibSchedulerComponent {
14
- constructor(cdr) {
15
- this.cdr = cdr;
16
- this.displayEmptyDays = true;
17
- this.startDate = new Date();
18
- this.endDate = endOfDay(addDays(new Date(), 6));
19
- this.default = false;
20
- this.bookEvent = new EventEmitter();
21
- this.removeSuggestion = new EventEmitter();
22
- this.suggestedCount = 0;
23
- this.bookedCount = 0;
24
- this.componentDestroyed$ = new Subject();
25
- this.events = [];
26
- }
27
- ngOnInit() {
28
- if (this.default) {
29
- this.events = [];
30
- this.buildEvents();
31
- return;
32
- }
33
- this.events$?.pipe(takeUntil(this.componentDestroyed$)).subscribe((events) => {
34
- this.events = events;
35
- this.buildEvents();
36
- });
37
- }
38
- ngOnDestroy() {
39
- this.componentDestroyed$.next();
40
- this.componentDestroyed$.complete();
41
- }
42
- toggleExpand(dayIndex, eventIndex) {
43
- if (!this.eventsDays[dayIndex].events[eventIndex].booked) {
44
- this.eventsDays[dayIndex].events[eventIndex].expanded = !this.eventsDays[dayIndex].events[eventIndex].expanded;
45
- }
46
- }
47
- acceptSuggestion(dayIndex, eventIndex, suggestionIndex) {
48
- const suggestion = this.eventsDays[dayIndex].events[eventIndex].suggestions[suggestionIndex];
49
- suggestion.checked = !suggestion.checked;
50
- suggestion.canceled = !suggestion.checked && suggestion.canceled;
51
- this.updateSuggestionsCounts();
52
- this.cdr.detectChanges();
53
- this.bookEvent.emit({
54
- event: this.eventsDays[dayIndex].events[eventIndex],
55
- suggestion,
56
- index: this.eventsDays[dayIndex].events[eventIndex].index,
57
- });
58
- }
59
- cancelSuggestion(dayIndex, eventIndex, suggestionIndex) {
60
- const suggestion = this.eventsDays[dayIndex].events[eventIndex].suggestions[suggestionIndex];
61
- suggestion.canceled = !suggestion.canceled;
62
- suggestion.checked = suggestion.checked && !suggestion.canceled;
63
- this.removeSuggestion.emit({
64
- event: this.eventsDays[dayIndex].events[eventIndex],
65
- suggestionIndex,
66
- index: this.eventsDays[dayIndex].events[eventIndex].index,
67
- });
68
- }
69
- // Update the count of suggested and booked items
70
- updateSuggestionsCounts() {
71
- this.suggestedCount = 0;
72
- this.bookedCount = this.events.reduce((count, event) => {
73
- this.suggestedCount += event.suggestions?.length || 0;
74
- return count + event.suggestions.filter((s) => s.checked).length;
75
- }, 0);
76
- }
77
- groupEventsByDay() {
78
- if (this.events?.length > 0) {
79
- const grouped = {};
80
- this.events.forEach((event, index) => {
81
- if (!grouped[event.day]) {
82
- grouped[event.day] = [];
83
- }
84
- grouped[event.day].push({ ...event, index });
85
- });
86
- return Object.entries(grouped).map(([day, events]) => ({ day, events }));
87
- }
88
- else {
89
- const grouped = {};
90
- mockSchedule.forEach((event, index) => {
91
- if (!grouped[event.day]) {
92
- grouped[event.day] = [];
93
- }
94
- grouped[event.day].push({ ...event, index });
95
- });
96
- return Object.entries(grouped).map(([day, events]) => ({ day, events }));
97
- }
98
- }
99
- buildEvents() {
100
- this.updateSuggestionsCounts();
101
- const eventsDays = [];
102
- let current = new Date(this.startDate);
103
- const schedulerEvents = this.groupEventsByDay();
104
- while (current <= new Date(this.endDate)) {
105
- const day = current.toLocaleDateString('en', { weekday: 'short' });
106
- const eventDay = { day, events: schedulerEvents.find((event) => event.day === day)?.events || [] };
107
- if (eventDay.events.length > 0 || this.displayEmptyDays) {
108
- eventsDays.push(eventDay);
109
- }
110
- current = set(current, { date: current.getDate() + 1 });
111
- }
112
- this.eventsDays = eventsDays;
113
- this.cdr.detectChanges();
114
- }
115
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibSchedulerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: LibSchedulerComponent, isStandalone: true, selector: "lib-scheduler", inputs: { adsTemplate: "adsTemplate", loading$: "loading$", emptyMessage: "emptyMessage", displayBookedStatuses: "displayBookedStatuses", displayEmptyDays: "displayEmptyDays", events$: "events$", startDate: "startDate", endDate: "endDate", default: "default" }, outputs: { bookEvent: "bookEvent", removeSuggestion: "removeSuggestion" }, ngImport: i0, template: "<div class=\"scheduler-container\" *ngIf=\"(loading$ | async) !== true; else loadingScheduler\">\n <div class=\"title f-lg f-gilroy-regular\" *ngIf=\"displayBookedStatuses\">{{ bookedCount }} {{ 'BOOKED' | translate }} - {{ suggestedCount }} {{ 'SUGGESTED' | translate }}</div>\n <ng-container *ngTemplateOutlet=\"adsTemplate\"></ng-container>\n <div class=\"content\" *ngIf=\"bookedCount > 0 || suggestedCount > 0 || displayEmptyDays; else emptyScheduler\">\n @for (eventDay of eventsDays; let dayIndex = $index; track eventDay) {\n <div class=\"block\">\n <div class=\"day\">\n <div class=\"day_name f-md f-gilroy-regular\">{{ eventDay.day }} <lib-section-separator></lib-section-separator></div>\n @for (event of eventDay.events; let eventIndex = $index; track event) {\n <div class=\"day-event\" *ngIf=\"event.suggestions?.length > 0\">\n <div class=\"main_block\" [class.expanded]=\"event.expanded && !event.booked\">\n <div class=\"event-header\" (click)=\"toggleExpand(dayIndex, eventIndex)\">\n <img src=\"assets/scheduler/arrow.svg\" class=\"show_more\" />\n <div class=\"time f-calistoga f-lg\">{{ event.start | date: 'h a' }}</div>\n <div class=\"wrapper\">\n <div class=\"free_time f-gilroy-regular f-md\">\n ~{{ event.hours }}\n <span [class.booked]=\"event.booked\">\n {{ (event.booked ? 'BOOKED' : 'FREE') | translate }}\n </span>\n </div>\n <div class=\"suggestions-count f-gilroy-regular f-sm\" *ngIf=\"event.suggestions?.length > 0\">\n <div>{{ event.suggestions.length }} {{ 'EVENT_SUGGETIONS_MSG' | translate }}</div>\n </div>\n </div>\n </div>\n @for (suggestion of event.suggestions; let suggestedIndex = $index; track suggestion) {\n <div class=\"suggestion_items\">\n <div class=\"suggested-by-wrapper\">\n @for (profile of suggestion?.profiles; track profile) {\n <div class=\"suggested-by\">\n <img class=\"profile\" [src]=\"profile?.img || 'assets/icons/default-profile.svg'\" />\n @if (profile?.suggested) {\n <img class=\"heart\" src=\"assets/scheduler/heart.svg\" />\n } @else if (profile?.cancelled) {\n <img class=\"heart\" src=\"assets/scheduler/cancel_active.svg\" />\n }\n </div>\n }\n <span class=\"schedule-title\"> {{ suggestion.title }} </span>\n </div>\n <div class=\"icons\">\n <img [src]=\"'assets/scheduler/cancel' + (suggestion.canceled ? '_active' : '') + '.svg'\" (click)=\"cancelSuggestion(dayIndex, eventIndex, suggestedIndex)\" />\n <img [src]=\"'assets/scheduler/accept' + (suggestion.checked ? '_active' : '') + '.svg'\" (click)=\"acceptSuggestion(dayIndex, eventIndex, suggestedIndex)\" />\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <ng-template #emptyScheduler>\n <lib-section-separator></lib-section-separator>\n <div class=\"empty-messsage messsage f-lg f-gilroy-regular\">{{ emptyMessage }}</div>\n </ng-template>\n</div>\n\n<ng-template #loadingScheduler>\n <div class=\"scheduler-container\">\n <div class=\"content\">\n @for (eventDay of eventsDays; let dayIndex = $index; track eventDay) {\n <div class=\"block\">\n <div class=\"day\">\n <div class=\"day_name f-md f-gilroy-regular\">{{ eventDay.day }} <lib-section-separator></lib-section-separator></div>\n <p-skeleton width=\"100%\" height=\"20px\" borderRadius=\"20px\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n", styles: [".scheduler-container{position:relative;border-radius:16px}.scheduler-container .title{text-align:center;font-weight:500;margin-top:20px}.scheduler-container .empty-messsage{margin-bottom:40px}.scheduler-container .content{display:flex;flex-direction:column;row-gap:3px}.scheduler-container .content .block{position:relative;z-index:1}.scheduler-container .content .block .day{display:flex;flex-direction:column;row-gap:3px}.scheduler-container .content .block .day .day_name{color:#ebebf599;font-weight:500;display:flex;align-items:center}.scheduler-container .content .block .day .day_name lib-section-separator{width:-webkit-fill-available;--margin-top: .1rem;--margin-bottom: .1rem;margin:0 20px}.scheduler-container .content .block .day .day-event{background:linear-gradient(162deg,#c35a8b -9%,#524b57 32%);padding:2px 2px 0;border-radius:15px}.scheduler-container .content .block .day .day-event .main_block{border-radius:15px;background:linear-gradient(90deg,#fe3c7299 -9%,#3a323f 14%);padding:8px 10px;color:#ebebf599;box-shadow:-1px -3px 8px #ffffff1a}.scheduler-container .content .block .day .day-event .main_block .show_more{width:20px;height:20px;transition:.3s;transform:rotate(-90deg)}.scheduler-container .content .block .day .day-event .main_block .time{color:var(--ion-text-color, #fff5f5)}.scheduler-container .content .block .day .day-event .main_block .free_time{font-weight:500}.scheduler-container .content .block .day .day-event .main_block .free_time .blocked{color:#fe3c72}.scheduler-container .content .block .day .day-event .main_block .event-header{cursor:pointer;display:flex;align-items:center;column-gap:10px}.scheduler-container .content .block .day .day-event .main_block .icons{display:flex;column-gap:10px;padding-right:10px}.scheduler-container .content .block .day .day-event .main_block .icons img{width:25px;height:25px;cursor:pointer}.scheduler-container .content .block .day .day-event .main_block .suggestion_items{transition:.3s;height:0;overflow:hidden;display:flex;justify-content:space-between;margin-top:0}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper{display:flex;align-items:center}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .schedule-title{padding-left:30px}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .suggested-by{border:2px solid #28252d;width:25px;height:25px;position:relative;border-radius:50%}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .suggested-by .profile{position:absolute;width:100%;height:100%;border-radius:50%}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .suggested-by .heart{width:25px;height:25px;position:absolute;top:-4px;right:-12px}.scheduler-container .content .block .day .day-event .main_block .wrapper{flex-direction:row;flex-grow:1;display:flex;justify-content:space-between}.scheduler-container .content .block .day .day-event .main_block.expanded .suggestion_items{transition:.3s;height:30px;margin-top:10px}.scheduler-container .content .block .day .day-event .main_block.expanded .show_more{transition:.3s;transform:rotate(0)}.scheduler-container .content .block .day .day-event .booked{pointer-events:none;color:var(--cyrano-pink-shade-1)}@media (max-width: 576px){.scheduler-container .title{margin-top:10px;font-size:10.25px}.scheduler-container .empty-messsage{font-size:8px}.scheduler-container .content,.scheduler-container .content .block .day{row-gap:3px}.scheduler-container .content .block .day .day_name{font-size:8px}.scheduler-container .content .block .day .day-event{margin-bottom:5px}.scheduler-container .content .block .day .day-event .main_block{padding:5px;border-radius:12px}.scheduler-container .content .block .day .day-event .main_block .show_more{width:12px;height:12px}.scheduler-container .content .block .day .day-event .main_block .wrapper{flex-direction:row;display:flex;justify-content:space-between}.scheduler-container .content .block .day .day-event .main_block .time{margin-right:5px;font-size:12px;font-size:10px;justify-content:space-between}.scheduler-container .content .block .day .day-event .main_block .suggestions-count{text-align:right;font-weight:500;line-height:9.42px;letter-spacing:.07px;font-size:8px;padding-right:10px}.scheduler-container .content .block .day .day-event .main_block .free_time{font-size:10.25px}.scheduler-container .content .block .day .day-event .main_block .event-header{column-gap:5px}.scheduler-container .content .block .day .day-event .main_block .icons img{width:10px;height:10px}.scheduler-container .content .block .day .day-event .main_block .suggestion_items{padding-left:23px;font-size:8px;letter-spacing:.07px}.scheduler-container .content .block .day .day-event .expanded .suggestion_items{height:10px;margin-top:7px}}.day-event .main_block:has(.blocked) .suggestion_items{height:0!important;margin-top:0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.DatePipe, name: "date" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: SectionSeparatorComponent, selector: "lib-section-separator" }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i3.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
117
- }
118
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LibSchedulerComponent, decorators: [{
119
- type: Component,
120
- args: [{ selector: 'lib-scheduler', standalone: true, imports: [CommonModule, TranslateModule, SectionSeparatorComponent, SkeletonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"scheduler-container\" *ngIf=\"(loading$ | async) !== true; else loadingScheduler\">\n <div class=\"title f-lg f-gilroy-regular\" *ngIf=\"displayBookedStatuses\">{{ bookedCount }} {{ 'BOOKED' | translate }} - {{ suggestedCount }} {{ 'SUGGESTED' | translate }}</div>\n <ng-container *ngTemplateOutlet=\"adsTemplate\"></ng-container>\n <div class=\"content\" *ngIf=\"bookedCount > 0 || suggestedCount > 0 || displayEmptyDays; else emptyScheduler\">\n @for (eventDay of eventsDays; let dayIndex = $index; track eventDay) {\n <div class=\"block\">\n <div class=\"day\">\n <div class=\"day_name f-md f-gilroy-regular\">{{ eventDay.day }} <lib-section-separator></lib-section-separator></div>\n @for (event of eventDay.events; let eventIndex = $index; track event) {\n <div class=\"day-event\" *ngIf=\"event.suggestions?.length > 0\">\n <div class=\"main_block\" [class.expanded]=\"event.expanded && !event.booked\">\n <div class=\"event-header\" (click)=\"toggleExpand(dayIndex, eventIndex)\">\n <img src=\"assets/scheduler/arrow.svg\" class=\"show_more\" />\n <div class=\"time f-calistoga f-lg\">{{ event.start | date: 'h a' }}</div>\n <div class=\"wrapper\">\n <div class=\"free_time f-gilroy-regular f-md\">\n ~{{ event.hours }}\n <span [class.booked]=\"event.booked\">\n {{ (event.booked ? 'BOOKED' : 'FREE') | translate }}\n </span>\n </div>\n <div class=\"suggestions-count f-gilroy-regular f-sm\" *ngIf=\"event.suggestions?.length > 0\">\n <div>{{ event.suggestions.length }} {{ 'EVENT_SUGGETIONS_MSG' | translate }}</div>\n </div>\n </div>\n </div>\n @for (suggestion of event.suggestions; let suggestedIndex = $index; track suggestion) {\n <div class=\"suggestion_items\">\n <div class=\"suggested-by-wrapper\">\n @for (profile of suggestion?.profiles; track profile) {\n <div class=\"suggested-by\">\n <img class=\"profile\" [src]=\"profile?.img || 'assets/icons/default-profile.svg'\" />\n @if (profile?.suggested) {\n <img class=\"heart\" src=\"assets/scheduler/heart.svg\" />\n } @else if (profile?.cancelled) {\n <img class=\"heart\" src=\"assets/scheduler/cancel_active.svg\" />\n }\n </div>\n }\n <span class=\"schedule-title\"> {{ suggestion.title }} </span>\n </div>\n <div class=\"icons\">\n <img [src]=\"'assets/scheduler/cancel' + (suggestion.canceled ? '_active' : '') + '.svg'\" (click)=\"cancelSuggestion(dayIndex, eventIndex, suggestedIndex)\" />\n <img [src]=\"'assets/scheduler/accept' + (suggestion.checked ? '_active' : '') + '.svg'\" (click)=\"acceptSuggestion(dayIndex, eventIndex, suggestedIndex)\" />\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <ng-template #emptyScheduler>\n <lib-section-separator></lib-section-separator>\n <div class=\"empty-messsage messsage f-lg f-gilroy-regular\">{{ emptyMessage }}</div>\n </ng-template>\n</div>\n\n<ng-template #loadingScheduler>\n <div class=\"scheduler-container\">\n <div class=\"content\">\n @for (eventDay of eventsDays; let dayIndex = $index; track eventDay) {\n <div class=\"block\">\n <div class=\"day\">\n <div class=\"day_name f-md f-gilroy-regular\">{{ eventDay.day }} <lib-section-separator></lib-section-separator></div>\n <p-skeleton width=\"100%\" height=\"20px\" borderRadius=\"20px\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n</ng-template>\n", styles: [".scheduler-container{position:relative;border-radius:16px}.scheduler-container .title{text-align:center;font-weight:500;margin-top:20px}.scheduler-container .empty-messsage{margin-bottom:40px}.scheduler-container .content{display:flex;flex-direction:column;row-gap:3px}.scheduler-container .content .block{position:relative;z-index:1}.scheduler-container .content .block .day{display:flex;flex-direction:column;row-gap:3px}.scheduler-container .content .block .day .day_name{color:#ebebf599;font-weight:500;display:flex;align-items:center}.scheduler-container .content .block .day .day_name lib-section-separator{width:-webkit-fill-available;--margin-top: .1rem;--margin-bottom: .1rem;margin:0 20px}.scheduler-container .content .block .day .day-event{background:linear-gradient(162deg,#c35a8b -9%,#524b57 32%);padding:2px 2px 0;border-radius:15px}.scheduler-container .content .block .day .day-event .main_block{border-radius:15px;background:linear-gradient(90deg,#fe3c7299 -9%,#3a323f 14%);padding:8px 10px;color:#ebebf599;box-shadow:-1px -3px 8px #ffffff1a}.scheduler-container .content .block .day .day-event .main_block .show_more{width:20px;height:20px;transition:.3s;transform:rotate(-90deg)}.scheduler-container .content .block .day .day-event .main_block .time{color:var(--ion-text-color, #fff5f5)}.scheduler-container .content .block .day .day-event .main_block .free_time{font-weight:500}.scheduler-container .content .block .day .day-event .main_block .free_time .blocked{color:#fe3c72}.scheduler-container .content .block .day .day-event .main_block .event-header{cursor:pointer;display:flex;align-items:center;column-gap:10px}.scheduler-container .content .block .day .day-event .main_block .icons{display:flex;column-gap:10px;padding-right:10px}.scheduler-container .content .block .day .day-event .main_block .icons img{width:25px;height:25px;cursor:pointer}.scheduler-container .content .block .day .day-event .main_block .suggestion_items{transition:.3s;height:0;overflow:hidden;display:flex;justify-content:space-between;margin-top:0}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper{display:flex;align-items:center}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .schedule-title{padding-left:30px}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .suggested-by{border:2px solid #28252d;width:25px;height:25px;position:relative;border-radius:50%}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .suggested-by .profile{position:absolute;width:100%;height:100%;border-radius:50%}.scheduler-container .content .block .day .day-event .main_block .suggestion_items .suggested-by-wrapper .suggested-by .heart{width:25px;height:25px;position:absolute;top:-4px;right:-12px}.scheduler-container .content .block .day .day-event .main_block .wrapper{flex-direction:row;flex-grow:1;display:flex;justify-content:space-between}.scheduler-container .content .block .day .day-event .main_block.expanded .suggestion_items{transition:.3s;height:30px;margin-top:10px}.scheduler-container .content .block .day .day-event .main_block.expanded .show_more{transition:.3s;transform:rotate(0)}.scheduler-container .content .block .day .day-event .booked{pointer-events:none;color:var(--cyrano-pink-shade-1)}@media (max-width: 576px){.scheduler-container .title{margin-top:10px;font-size:10.25px}.scheduler-container .empty-messsage{font-size:8px}.scheduler-container .content,.scheduler-container .content .block .day{row-gap:3px}.scheduler-container .content .block .day .day_name{font-size:8px}.scheduler-container .content .block .day .day-event{margin-bottom:5px}.scheduler-container .content .block .day .day-event .main_block{padding:5px;border-radius:12px}.scheduler-container .content .block .day .day-event .main_block .show_more{width:12px;height:12px}.scheduler-container .content .block .day .day-event .main_block .wrapper{flex-direction:row;display:flex;justify-content:space-between}.scheduler-container .content .block .day .day-event .main_block .time{margin-right:5px;font-size:12px;font-size:10px;justify-content:space-between}.scheduler-container .content .block .day .day-event .main_block .suggestions-count{text-align:right;font-weight:500;line-height:9.42px;letter-spacing:.07px;font-size:8px;padding-right:10px}.scheduler-container .content .block .day .day-event .main_block .free_time{font-size:10.25px}.scheduler-container .content .block .day .day-event .main_block .event-header{column-gap:5px}.scheduler-container .content .block .day .day-event .main_block .icons img{width:10px;height:10px}.scheduler-container .content .block .day .day-event .main_block .suggestion_items{padding-left:23px;font-size:8px;letter-spacing:.07px}.scheduler-container .content .block .day .day-event .expanded .suggestion_items{height:10px;margin-top:7px}}.day-event .main_block:has(.blocked) .suggestion_items{height:0!important;margin-top:0!important}\n"] }]
121
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { adsTemplate: [{
122
- type: Input
123
- }], loading$: [{
124
- type: Input
125
- }], emptyMessage: [{
126
- type: Input
127
- }], displayBookedStatuses: [{
128
- type: Input
129
- }], displayEmptyDays: [{
130
- type: Input
131
- }], events$: [{
132
- type: Input
133
- }], startDate: [{
134
- type: Input
135
- }], endDate: [{
136
- type: Input
137
- }], default: [{
138
- type: Input
139
- }], bookEvent: [{
140
- type: Output
141
- }], removeSuggestion: [{
142
- type: Output
143
- }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXIvc2NoZWR1bGVyL3NjaGVkdWxlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQtY29tcG9uZW50cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2NhbGVuZGFyL3NjaGVkdWxlci9zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNuSixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQWMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUluRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBVS9DLE1BQU0sT0FBTyxxQkFBcUI7SUFrQmhDLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYmpDLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUVqQyxjQUFTLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixZQUFPLEdBQVMs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LHlCQUF5QixFQUFFLGNBQWMsQ0FBQyxtQkFHbEUsdUJBQXVCLENBQUMsTUFBTTtzRkFHdEMsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBhZGREYXlzLCBlbmRPZkRheSwgc2V0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NrZWxldG9uJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2VjdGlvblNlcGFyYXRvckNvbXBvbmVudCB9IGZyb20gJ0BuYW5pdGVuaW5qYS9pb25pYy1saWInO1xuaW1wb3J0IHsgSVNjaGVkdWxlckFjdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9zY2hlZHVsZXIuYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJU2NoZWR1bGVyRXZlbnREYXkgfSBmcm9tICcuL2ludGVyZmFjZXMvc2NoZWR1bGVyLmV2ZW50LmRheS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVNjaGVkdWxlckV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3NjaGVkdWxlci5ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgbW9ja1NjaGVkdWxlIH0gZnJvbSAnLi9tb2NrLXNjaGVkdWxlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXNjaGVkdWxlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgU2VjdGlvblNlcGFyYXRvckNvbXBvbmVudCwgU2tlbGV0b25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2NoZWR1bGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJTY2hlZHVsZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGFkc1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuICBASW5wdXQoKSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc3BsYXlCb29rZWRTdGF0dXNlczogYm9vbGVhbjtcbiAgQElucHV0KCkgZGlzcGxheUVtcHR5RGF5czogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGV2ZW50cyQ6IE9ic2VydmFibGU8SVNjaGVkdWxlckV2ZW50W10+O1xuICBASW5wdXQoKSBzdGFydERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBASW5wdXQoKSBlbmREYXRlOiBEYXRlID0gZW5kT2ZEYXkoYWRkRGF5cyhuZXcgRGF0ZSgpLCA2KSk7XG4gIEBJbnB1dCgpIGRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIGJvb2tFdmVudDogRXZlbnRFbWl0dGVyPElTY2hlZHVsZXJBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVtb3ZlU3VnZ2VzdGlvbjogRXZlbnRFbWl0dGVyPElTY2hlZHVsZXJBY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgZXZlbnRzRGF5czogSVNjaGVkdWxlckV2ZW50RGF5W107XG4gIHB1YmxpYyBzdWdnZXN0ZWRDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIGJvb2tlZENvdW50OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGNvbXBvbmVudERlc3Ryb3llZCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIGV2ZW50czogSVNjaGVkdWxlckV2ZW50W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdCkge1xuICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgIHRoaXMuYnVpbGRFdmVudHMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ldmVudHMkPy5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKGV2ZW50cykgPT4ge1xuICAgICAgdGhpcy5ldmVudHMgPSBldmVudHM7XG4gICAgICB0aGlzLmJ1aWxkRXZlbnRzKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudERlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cGFuZChkYXlJbmRleDogbnVtYmVyLCBldmVudEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZXZlbnRzRGF5c1tkYXlJbmRleF0uZXZlbnRzW2V2ZW50SW5kZXhdLmJvb2tlZCkge1xuICAgICAgdGhpcy5ldmVudHNEYXlzW2RheUluZGV4XS5ldmVudHNbZXZlbnRJbmRleF0uZXhwYW5kZWQgPSAhdGhpcy5ldmVudHNEYXlzW2RheUluZGV4XS5ldmVudHNbZXZlbnRJbmRleF0uZXhwYW5kZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFjY2VwdFN1Z2dlc3Rpb24oZGF5SW5kZXg6IG51bWJlciwgZXZlbnRJbmRleDogbnVtYmVyLCBzdWdnZXN0aW9uSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHN1Z2dlc3Rpb24gPSB0aGlzLmV2ZW50c0RheXNbZGF5SW5kZXhdLmV2ZW50c1tldmVudEluZGV4XS5zdWdnZXN0aW9uc1tzdWdnZXN0aW9uSW5kZXhdO1xuICAgIHN1Z2dlc3Rpb24uY2hlY2tlZCA9ICFzdWdnZXN0aW9uLmNoZWNrZWQ7XG4gICAgc3VnZ2VzdGlvbi5jYW5jZWxlZCA9ICFzdWdnZXN0aW9uLmNoZWNrZWQgJiYgc3VnZ2VzdGlvbi5jYW5jZWxlZDtcbiAgICB0aGlzLnVwZGF0ZVN1Z2dlc3Rpb25zQ291bnRzKCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuYm9va0V2ZW50LmVtaXQoe1xuICAgICAgZXZlbnQ6IHRoaXMuZXZlbnRzRGF5c1tkYXlJbmRleF0uZXZlbnRzW2V2ZW50SW5kZXhdLFxuICAgICAgc3VnZ2VzdGlvbixcbiAgICAgIGluZGV4OiB0aGlzLmV2ZW50c0RheXNbZGF5SW5kZXhdLmV2ZW50c1tldmVudEluZGV4XS5pbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWxTdWdnZXN0aW9uKGRheUluZGV4OiBudW1iZXIsIGV2ZW50SW5kZXg6IG51bWJlciwgc3VnZ2VzdGlvbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzdWdnZXN0aW9uID0gdGhpcy5ldmVudHNEYXlzW2RheUluZGV4XS5ldmVudHNbZXZlbnRJbmRleF0uc3VnZ2VzdGlvbnNbc3VnZ2VzdGlvbkluZGV4XTtcbiAgICBzdWdnZXN0aW9uLmNhbmNlbGVkID0gIXN1Z2dlc3Rpb24uY2FuY2VsZWQ7XG4gICAgc3VnZ2VzdGlvbi5jaGVja2VkID0gc3VnZ2VzdGlvbi5jaGVja2VkICYmICFzdWdnZXN0aW9uLmNhbmNlbGVkO1xuICAgIHRoaXMucmVtb3ZlU3VnZ2VzdGlvbi5lbWl0KHtcbiAgICAgIGV2ZW50OiB0aGlzLmV2ZW50c0RheXNbZGF5SW5kZXhdLmV2ZW50c1tldmVudEluZGV4XSxcbiAgICAgIHN1Z2dlc3Rpb25JbmRleCxcbiAgICAgIGluZGV4OiB0aGlzLmV2ZW50c0RheXNbZGF5SW5kZXhdLmV2ZW50c1tldmVudEluZGV4XS5pbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgY291bnQgb2Ygc3VnZ2VzdGVkIGFuZCBib29rZWQgaXRlbXNcbiAgcHVibGljIHVwZGF0ZVN1Z2dlc3Rpb25zQ291bnRzKCk6IHZvaWQge1xuICAgIHRoaXMuc3VnZ2VzdGVkQ291bnQgPSAwO1xuICAgIHRoaXMuYm9va2VkQ291bnQgPSB0aGlzLmV2ZW50cy5yZWR1Y2UoKGNvdW50LCBldmVudCkgPT4ge1xuICAgICAgdGhpcy5zdWdnZXN0ZWRDb3VudCArPSBldmVudC5zdWdnZXN0aW9ucz8ubGVuZ3RoIHx8IDA7XG4gICAgICByZXR1cm4gY291bnQgKyBldmVudC5zdWdnZXN0aW9ucy5maWx0ZXIoKHMpID0+IHMuY2hlY2tlZCkubGVuZ3RoO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBncm91cEV2ZW50c0J5RGF5KCk6IElTY2hlZHVsZXJFdmVudERheVtdIHtcbiAgICBpZiAodGhpcy5ldmVudHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdyb3VwZWQ6IHsgW2tleTogc3RyaW5nXTogSVNjaGVkdWxlckV2ZW50W10gfSA9IHt9O1xuICAgICAgdGhpcy5ldmVudHMuZm9yRWFjaCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghZ3JvdXBlZFtldmVudC5kYXldKSB7XG4gICAgICAgICAgZ3JvdXBlZFtldmVudC5kYXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXBlZFtldmVudC5kYXldLnB1c2goeyAuLi5ldmVudCwgaW5kZXggfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhncm91cGVkKS5tYXAoKFtkYXksIGV2ZW50c10pID0+ICh7IGRheSwgZXZlbnRzIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZ3JvdXBlZDogeyBba2V5OiBzdHJpbmddOiBJU2NoZWR1bGVyRXZlbnRbXSB9ID0ge307XG4gICAgICBtb2NrU2NoZWR1bGUuZm9yRWFjaCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICghZ3JvdXBlZFtldmVudC5kYXldKSB7XG4gICAgICAgICAgZ3JvdXBlZFtldmVudC5kYXldID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXBlZFtldmVudC5kYXldLnB1c2goeyAuLi5ldmVudCwgaW5kZXggfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhncm91cGVkKS5tYXAoKFtkYXksIGV2ZW50c10pID0+ICh7IGRheSwgZXZlbnRzIH0pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3VnZ2VzdGlvbnNDb3VudHMoKTtcbiAgICBjb25zdCBldmVudHNEYXlzOiBJU2NoZWR1bGVyRXZlbnREYXlbXSA9IFtdO1xuICAgIGxldCBjdXJyZW50ID0gbmV3IERhdGUodGhpcy5zdGFydERhdGUpO1xuICAgIGNvbnN0IHNjaGVkdWxlckV2ZW50cyA9IHRoaXMuZ3JvdXBFdmVudHNCeURheSgpO1xuICAgIHdoaWxlIChjdXJyZW50IDw9IG5ldyBEYXRlKHRoaXMuZW5kRGF0ZSkpIHtcbiAgICAgIGNvbnN0IGRheSA9IGN1cnJlbnQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbicsIHsgd2Vla2RheTogJ3Nob3J0JyB9KTtcbiAgICAgIGNvbnN0IGV2ZW50RGF5ID0geyBkYXksIGV2ZW50czogc2NoZWR1bGVyRXZlbnRzLmZpbmQoKGV2ZW50KSA9PiBldmVudC5kYXkgPT09IGRheSk/LmV2ZW50cyB8fCBbXSB9O1xuICAgICAgaWYgKGV2ZW50RGF5LmV2ZW50cy5sZW5ndGggPiAwIHx8IHRoaXMuZGlzcGxheUVtcHR5RGF5cykge1xuICAgICAgICBldmVudHNEYXlzLnB1c2goZXZlbnREYXkpO1xuICAgICAgfVxuICAgICAgY3VycmVudCA9IHNldChjdXJyZW50LCB7IGRhdGU6IGN1cnJlbnQuZ2V0RGF0ZSgpICsgMSB9KTtcbiAgICB9XG4gICAgdGhpcy5ldmVudHNEYXlzID0gZXZlbnRzRGF5cztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzY2hlZHVsZXItY29udGFpbmVyXCIgKm5nSWY9XCIobG9hZGluZyQgfCBhc3luYykgIT09IHRydWU7IGVsc2UgbG9hZGluZ1NjaGVkdWxlclwiPlxuICA8ZGl2IGNsYXNzPVwidGl0bGUgZi1sZyBmLWdpbHJveS1yZWd1bGFyXCIgKm5nSWY9XCJkaXNwbGF5Qm9va2VkU3RhdHVzZXNcIj57eyBib29rZWRDb3VudCB9fSB7eyAnQk9PS0VEJyB8IHRyYW5zbGF0ZSB9fSAtIHt7IHN1Z2dlc3RlZENvdW50IH19IHt7ICdTVUdHRVNURUQnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZHNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiICpuZ0lmPVwiYm9va2VkQ291bnQgPiAwIHx8IHN1Z2dlc3RlZENvdW50ID4gMCB8fCBkaXNwbGF5RW1wdHlEYXlzOyBlbHNlIGVtcHR5U2NoZWR1bGVyXCI+XG4gICAgQGZvciAoZXZlbnREYXkgb2YgZXZlbnRzRGF5czsgbGV0IGRheUluZGV4ID0gJGluZGV4OyB0cmFjayBldmVudERheSkge1xuICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5X25hbWUgZi1tZCBmLWdpbHJveS1yZWd1bGFyXCI+e3sgZXZlbnREYXkuZGF5IH19IDxsaWItc2VjdGlvbi1zZXBhcmF0b3I+PC9saWItc2VjdGlvbi1zZXBhcmF0b3I+PC9kaXY+XG4gICAgICAgICAgQGZvciAoZXZlbnQgb2YgZXZlbnREYXkuZXZlbnRzOyBsZXQgZXZlbnRJbmRleCA9ICRpbmRleDsgdHJhY2sgZXZlbnQpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXktZXZlbnRcIiAqbmdJZj1cImV2ZW50LnN1Z2dlc3Rpb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluX2Jsb2NrXCIgW2NsYXNzLmV4cGFuZGVkXT1cImV2ZW50LmV4cGFuZGVkICYmICFldmVudC5ib29rZWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtaGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZChkYXlJbmRleCwgZXZlbnRJbmRleClcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL3NjaGVkdWxlci9hcnJvdy5zdmdcIiBjbGFzcz1cInNob3dfbW9yZVwiIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZSBmLWNhbGlzdG9nYSBmLWxnXCI+e3sgZXZlbnQuc3RhcnQgfCBkYXRlOiAnaCBhJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZyZWVfdGltZSBmLWdpbHJveS1yZWd1bGFyIGYtbWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICB+e3sgZXZlbnQuaG91cnMgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3MuYm9va2VkXT1cImV2ZW50LmJvb2tlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgKGV2ZW50LmJvb2tlZCA/ICdCT09LRUQnIDogJ0ZSRUUnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWdnZXN0aW9ucy1jb3VudCBmLWdpbHJveS1yZWd1bGFyIGYtc21cIiAqbmdJZj1cImV2ZW50LnN1Z2dlc3Rpb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBldmVudC5zdWdnZXN0aW9ucy5sZW5ndGggfX0ge3sgJ0VWRU5UX1NVR0dFVElPTlNfTVNHJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBmb3IgKHN1Z2dlc3Rpb24gb2YgZXZlbnQuc3VnZ2VzdGlvbnM7IGxldCBzdWdnZXN0ZWRJbmRleCA9ICRpbmRleDsgdHJhY2sgc3VnZ2VzdGlvbikge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3Rpb25faXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3RlZC1ieS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAocHJvZmlsZSBvZiBzdWdnZXN0aW9uPy5wcm9maWxlczsgdHJhY2sgcHJvZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Z2dlc3RlZC1ieVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwicHJvZmlsZVwiIFtzcmNdPVwicHJvZmlsZT8uaW1nIHx8ICdhc3NldHMvaWNvbnMvZGVmYXVsdC1wcm9maWxlLnN2ZydcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb2ZpbGU/LnN1Z2dlc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJoZWFydFwiIHNyYz1cImFzc2V0cy9zY2hlZHVsZXIvaGVhcnQuc3ZnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAocHJvZmlsZT8uY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImhlYXJ0XCIgc3JjPVwiYXNzZXRzL3NjaGVkdWxlci9jYW5jZWxfYWN0aXZlLnN2Z1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjaGVkdWxlLXRpdGxlXCI+IHt7IHN1Z2dlc3Rpb24udGl0bGUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIidhc3NldHMvc2NoZWR1bGVyL2NhbmNlbCcgKyAoc3VnZ2VzdGlvbi5jYW5jZWxlZCA/ICdfYWN0aXZlJyA6ICcnKSArICcuc3ZnJ1wiIChjbGljayk9XCJjYW5jZWxTdWdnZXN0aW9uKGRheUluZGV4LCBldmVudEluZGV4LCBzdWdnZXN0ZWRJbmRleClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCInYXNzZXRzL3NjaGVkdWxlci9hY2NlcHQnICsgKHN1Z2dlc3Rpb24uY2hlY2tlZCA/ICdfYWN0aXZlJyA6ICcnKSArICcuc3ZnJ1wiIChjbGljayk9XCJhY2NlcHRTdWdnZXN0aW9uKGRheUluZGV4LCBldmVudEluZGV4LCBzdWdnZXN0ZWRJbmRleClcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNlbXB0eVNjaGVkdWxlcj5cbiAgICA8bGliLXNlY3Rpb24tc2VwYXJhdG9yPjwvbGliLXNlY3Rpb24tc2VwYXJhdG9yPlxuICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1tZXNzc2FnZSBtZXNzc2FnZSBmLWxnIGYtZ2lscm95LXJlZ3VsYXJcIj57eyBlbXB0eU1lc3NhZ2UgfX08L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdTY2hlZHVsZXI+XG4gIDxkaXYgY2xhc3M9XCJzY2hlZHVsZXItY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgIEBmb3IgKGV2ZW50RGF5IG9mIGV2ZW50c0RheXM7IGxldCBkYXlJbmRleCA9ICRpbmRleDsgdHJhY2sgZXZlbnREYXkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRheVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRheV9uYW1lIGYtbWQgZi1naWxyb3ktcmVndWxhclwiPnt7IGV2ZW50RGF5LmRheSB9fSA8bGliLXNlY3Rpb24tc2VwYXJhdG9yPjwvbGliLXNlY3Rpb24tc2VwYXJhdG9yPjwvZGl2PlxuICAgICAgICAgICAgPHAtc2tlbGV0b24gd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMjBweFwiIGJvcmRlclJhZGl1cz1cIjIwcHhcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,211 +0,0 @@
1
- import { formatDate } from '@angular/common';
2
- import { Inject, Injectable, LOCALE_ID } from '@angular/core';
3
- import { addDays, addMinutes, differenceInMinutes, getDay, getHours, getMinutes, isBefore, isEqual, isSameWeek, set, startOfDay } from 'date-fns';
4
- import { RRule } from 'rrule';
5
- import { Weekday } from 'rrule/dist/esm/weekday';
6
- import { EventTypes } from '../enums/event-type.enum';
7
- import * as i0 from "@angular/core";
8
- export class CalendarUtilsService {
9
- constructor(locale) {
10
- this.locale = locale;
11
- }
12
- filterCalendarsEvents(selectedCalendars, calendarEvents) {
13
- if (selectedCalendars?.length > 0) {
14
- return calendarEvents.filter((event) => selectedCalendars.find((calendar) => calendar.email === event['meta'].email || this.validCalendarEvent(event['meta'])) != null);
15
- }
16
- else {
17
- return calendarEvents.filter((event) => this.validCalendarEvent(event['meta']));
18
- }
19
- }
20
- validCalendarEvent(event) {
21
- return [EventTypes.SYSTEM, EventTypes.DATE, EventTypes.USER].indexOf(event.type) !== -1;
22
- }
23
- formatEventTime(start, end) {
24
- const startHours = getHours(start);
25
- const endHours = getHours(end);
26
- const startTimeFormat = (startHours > 12 && endHours > 12) || (startHours < 12 && endHours < 12) ? 'h:mm' : 'h:mm aa';
27
- const startTime = formatDate(start, startTimeFormat, this.locale).replace(':00', '');
28
- const endTime = formatDate(end, 'h:mm aa', this.locale).replace(':00', '');
29
- return { startTime, endTime };
30
- }
31
- isProviderEvent(event) {
32
- return [EventTypes.GOOGLE, EventTypes.MICROSOFT].indexOf(event.type) !== -1;
33
- }
34
- isRecurringEvent(event) {
35
- // Excluding providers events because they are not generated within the app and come from external source like Google or Microsoft.
36
- return event.recurring && event.type && !this.isProviderEvent(event);
37
- }
38
- isEqualDates(startDate, enDate) {
39
- return !startDate || !enDate ? false : isEqual(startOfDay(new Date(startDate)), startOfDay(new Date(enDate)));
40
- }
41
- isBeforeDate(startDate, enDate) {
42
- return isBefore(startOfDay(new Date(startDate)), startOfDay(new Date(enDate)));
43
- }
44
- isSameWeek(startDate, enDate) {
45
- return !startDate || !enDate ? false : isSameWeek(startOfDay(new Date(startDate)), startOfDay(new Date(enDate)));
46
- }
47
- getUpdatedRecurringException(event) {
48
- const validUpdatedRecurringException = this.isRecurringEvent(event) && event.recurringPattern.updatedEvent;
49
- if (validUpdatedRecurringException && !this.isBeforeDate(event.recurringStartDate, event.recurringPattern.updatedEvent.startDate)) {
50
- return event.recurringPattern.updatedEvent;
51
- }
52
- return null;
53
- }
54
- getExceptionEvent(event, exceptions) {
55
- return this.isRecurringEvent(event)
56
- ? exceptions?.find((exception) => this.isEqualDates(event.recurringStartDate, exception.startDate) &&
57
- this.isEqualDates(event.recurringEndDate, exception.endDate) &&
58
- event.recurringInstanceNo === exception.recurringInstanceNo)
59
- : null;
60
- }
61
- isValidRecurringDate(event, recurringDate) {
62
- return !event.recurringPattern.recurringEndDate || this.isBeforeDate(recurringDate, event.recurringPattern.recurringEndDate);
63
- }
64
- getDeletedRecurringEvent(event, recurringDate) {
65
- return event.recurringPattern?.deletions?.find((item) => this.isEqualDates(item.startDate, recurringDate));
66
- }
67
- generateRecurringDates(dtstart, until, freq, interval = 1) {
68
- return (new RRule({
69
- freq,
70
- dtstart,
71
- until,
72
- wkst: new Weekday(getDay(dtstart)),
73
- interval,
74
- }).all() || []);
75
- }
76
- isValidRecurringException(event, exceptionEvent) {
77
- return (this.isEqualDates(event.recurringStartDate, exceptionEvent.recurringStartDate) &&
78
- this.isEqualDates(event.recurringEndDate, exceptionEvent.recurringEndDate) &&
79
- event.recurringInstanceNo === exceptionEvent.recurringInstanceNo);
80
- }
81
- sortEvents(calendarEvents) {
82
- calendarEvents.sort((a, b) => differenceInMinutes(b['end'], b['start']) - differenceInMinutes(a['end'], a['start']));
83
- let zIndex = 1;
84
- calendarEvents.forEach((event, index) => {
85
- event['meta'].zIndex = zIndex;
86
- event['cssClass'] += ` cyrano-event-index-${event['meta'].zIndex}`;
87
- zIndex++;
88
- for (let i = index - 1; i >= 0; i--) {
89
- const calendarEvent = calendarEvents[i];
90
- if (event['start'] < calendarEvent['end']) {
91
- event['meta'].zIndex = Math.max(event['meta'].zIndex, calendarEvent['meta'].zIndex + 1);
92
- event['cssClass'] += ` cyrano-event-index-${event['meta'].zIndex}`;
93
- }
94
- else {
95
- break;
96
- }
97
- }
98
- });
99
- }
100
- applyEventsIndex() {
101
- const eventElements = document.querySelectorAll('.cyrano-event');
102
- // Calculate and apply z-index
103
- eventElements.forEach((element, index) => {
104
- let zIndex = 0;
105
- element.classList.forEach((eventClass) => {
106
- if (eventClass.includes('cyrano-event-index-')) {
107
- const eventClassSplit = eventClass.split('-');
108
- zIndex = Number(eventClassSplit[3]);
109
- }
110
- });
111
- element.style.zIndex = `${zIndex} !important`;
112
- });
113
- }
114
- setEventTime(event) {
115
- let start = new Date(event.recurringStartDate || event.startDate);
116
- let end = new Date(event.recurringEndDate || event.endDate);
117
- if (!event.allDay) {
118
- start = set(start, { hours: getHours(new Date(event.startTime)), minutes: getMinutes(new Date(event.startTime)) });
119
- end = set(end, { hours: getHours(new Date(event.endTime)), minutes: getMinutes(new Date(event.endTime)) });
120
- }
121
- const eventMinutes = differenceInMinutes(end, start);
122
- // --- for events that start PM and end AM next day----------
123
- end = eventMinutes < 0 ? addDays(end, 1) : end;
124
- if (event.recurring) {
125
- event.recurringStartDate = start;
126
- event.recurringEndDate = end;
127
- }
128
- else {
129
- event.startDate = start;
130
- event.endDate = end;
131
- }
132
- return { start, end };
133
- }
134
- // temp fix to remove html tags from event note until we change the note text area field to a rich textarea
135
- removeHtmlTags(html) {
136
- const regex = /(<([^>]+)>)/gi;
137
- const cleanString = html.replace(regex, '');
138
- return cleanString ? cleanString.trim() : '';
139
- }
140
- prepareEventDates(eventData) {
141
- if (eventData.allDay) {
142
- eventData.startDate = startOfDay(new Date(eventData.startDate));
143
- eventData.startTime = eventData.startDate;
144
- eventData.endTime = eventData.endDate;
145
- }
146
- else {
147
- eventData.endDate = eventData.startDate;
148
- }
149
- }
150
- getEventTimes(eventData, recurringException, newEvent) {
151
- let startTime = new Date(recurringException?.startTime || eventData.startTime);
152
- let endTime;
153
- if (!eventData._id && newEvent) {
154
- const startTimeMinutes = getMinutes(startTime);
155
- startTime = set(startTime, { minutes: startTimeMinutes < 30 ? 0 : 30 });
156
- endTime = addMinutes(startTime, 60);
157
- }
158
- else {
159
- endTime = new Date(recurringException?.endTime || eventData.endTime);
160
- const startDate = new Date(recurringException?.startDate || eventData.recurringStartDate || eventData.startDate);
161
- const endDate = new Date(recurringException?.endDate || eventData.recurringEndDate || eventData.endDate);
162
- if (startDate && !eventData.allDay) {
163
- if (!isEqual(startOfDay(startDate), startOfDay(startTime))) {
164
- startTime = set(startDate, { hours: startTime.getHours(), minutes: startTime.getMinutes() });
165
- }
166
- if (!isEqual(startOfDay(endDate), startOfDay(endTime))) {
167
- endTime = set(endDate, { hours: endTime.getHours(), minutes: endTime.getMinutes() });
168
- }
169
- }
170
- }
171
- return { startTime, endTime };
172
- }
173
- buildUpdatedEvent(event, formValue) {
174
- const updatedEvent = formValue;
175
- this.prepareEventDates(updatedEvent);
176
- updatedEvent.location = updatedEvent.location || { address: formValue.address, coordinates: [] };
177
- updatedEvent.startTime = updatedEvent.startTime['slotValue'] ? updatedEvent.startTime['slotValue'] : updatedEvent.startTime;
178
- updatedEvent.endTime = updatedEvent.endTime['slotValue'] ? updatedEvent.endTime['slotValue'] : updatedEvent.endTime;
179
- const eventTimes = this.getEventTimes(updatedEvent);
180
- updatedEvent.startTime = eventTimes.startTime;
181
- updatedEvent.endTime = eventTimes.endTime;
182
- updatedEvent.timeZone = event?.timeZone;
183
- updatedEvent.recurring = !!updatedEvent.recurringPattern?.type;
184
- const startHours = getHours(eventTimes.startTime);
185
- updatedEvent.recurringInstanceNo = event.recurringInstanceNo;
186
- const endHours = getHours(eventTimes.endTime);
187
- if (startHours > endHours) {
188
- updatedEvent.endTime = set(addDays(eventTimes.startTime, 1), { hours: endHours, minutes: getMinutes(eventTimes.endTime) });
189
- updatedEvent.endDate = updatedEvent.endTime;
190
- }
191
- updatedEvent.startDate = set(updatedEvent.startDate, { hours: updatedEvent.startTime?.getHours(), minutes: updatedEvent.startTime?.getMinutes() });
192
- updatedEvent.endDate = set(updatedEvent.endDate, { hours: updatedEvent.endTime?.getHours(), minutes: updatedEvent.endTime?.getMinutes() });
193
- if (!updatedEvent.recurringPattern || !updatedEvent.recurringPattern.type) {
194
- delete updatedEvent.recurringPattern;
195
- }
196
- updatedEvent.timeZone = updatedEvent.type === EventTypes.MICROSOFT ? Intl.DateTimeFormat().resolvedOptions().timeZone : updatedEvent.timeZone;
197
- return updatedEvent;
198
- }
199
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CalendarUtilsService, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
200
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CalendarUtilsService, providedIn: 'root' }); }
201
- }
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CalendarUtilsService, decorators: [{
203
- type: Injectable,
204
- args: [{
205
- providedIn: 'root',
206
- }]
207
- }], ctorParameters: () => [{ type: undefined, decorators: [{
208
- type: Inject,
209
- args: [LOCALE_ID]
210
- }] }] });
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItdXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC1jb21wb25lbnRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXIvc2VydmljZXMvY2FsZW5kYXItdXRpbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEosT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU5QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQVN0RCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQXVDLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUVsRCxxQkFBcUIsQ0FBSSxpQkFBcUMsRUFBRSxjQUFtQjtRQUN4RixJQUFJLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzFLLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQWE7UUFDckMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQVcsRUFBRSxHQUFTO1FBQzNDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0SCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBc0I7UUFDM0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQXNCO1FBQzVDLG1JQUFtSTtRQUNuSSxPQUFPLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUF3QixFQUFFLE1BQXFCO1FBQ2pFLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUF3QixFQUFFLE1BQXFCO1FBQ2pFLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVNLFVBQVUsQ0FBQyxTQUF3QixFQUFFLE1BQXFCO1FBQy9ELE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVNLDRCQUE0QixDQUFDLEtBQXNCO1FBQ3hELE1BQU0sOEJBQThCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7UUFDM0csSUFBSSw4QkFBOEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUNsSSxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQXNCLEVBQUUsVUFBc0M7UUFDckYsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUNkLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDWixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsU0FBUyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDO2dCQUM1RCxLQUFLLENBQUMsbUJBQW1CLEtBQUssU0FBUyxDQUFDLG1CQUFtQixDQUM5RDtZQUNILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBYSxFQUFFLGFBQW1CO1FBQzVELE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUVNLHdCQUF3QixDQUFDLEtBQWEsRUFBRSxhQUFtQjtRQUNoRSxPQUFPLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRU0sc0JBQXNCLENBQUMsT0FBYSxFQUFFLEtBQVcsRUFBRSxJQUFlLEVBQUUsV0FBbUIsQ0FBQztRQUM3RixPQUFPLENBQ0wsSUFBSSxLQUFLLENBQUM7WUFDUixJQUFJO1lBQ0osT0FBTztZQUNQLEtBQUs7WUFDTCxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLFFBQVE7U0FDVCxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDO0lBRU0seUJBQXlCLENBQUMsS0FBYSxFQUFFLGNBQXdDO1FBQ3RGLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxjQUFjLENBQUMsa0JBQWtCLENBQUM7WUFDOUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLGdCQUFnQixDQUFDO1lBQzFFLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxjQUFjLENBQUMsbUJBQW1CLENBQ2pFLENBQUM7SUFDSixDQUFDO0lBRU0sVUFBVSxDQUFJLGNBQW1CO1FBQ3RDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckgsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUM5QixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksdUJBQXVCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRSxNQUFNLEVBQUUsQ0FBQztZQUNULEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3hGLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSx1QkFBdUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakUsOEJBQThCO1FBQzlCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3BELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7b0JBQy9DLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlDLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxhQUFhLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQXNCO1FBQ3hDLElBQUksS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEUsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuSCxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0csQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCw2REFBNkQ7UUFDN0QsR0FBRyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMvQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN4QixLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUN0QixDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsMkdBQTJHO0lBQ3BHLGNBQWMsQ0FBQyxJQUFZO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQztRQUM5QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1QyxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3hDLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUMxQyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsU0FBMEIsRUFBRSxrQkFBNkMsRUFBRSxRQUFrQjtRQUNoSCxJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLElBQUksU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9FLElBQUksT0FBYSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9DLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckUsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakgsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekcsSUFBSSxTQUFTLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzNELFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0YsQ0FBQztnQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN2RCxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZGLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQWEsRUFBRSxTQUFpQjtRQUN2RCxNQUFNLFlBQVksR0FBVyxTQUFTLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLFlBQVksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNqRyxZQUFZLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7UUFDNUgsWUFBWSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ3BILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsWUFBWSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQzlDLFlBQVksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssRUFBRSxRQUFRLENBQUM7UUFDeEMsWUFBWSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQztRQUUvRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7UUFDN0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxJQUFJLFVBQVUsR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUMxQixZQUFZLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNILFlBQVksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUM5QyxDQUFDO1FBRUQsWUFBWSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuSixZQUFZLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNJLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUUsT0FBTyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7UUFDdkMsQ0FBQztRQUVELFlBQVksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBRTlJLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7K0dBdk5VLG9CQUFvQixrQkFDWCxTQUFTO21IQURsQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBRWMsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIExPQ0FMRV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkRGF5cywgYWRkTWludXRlcywgZGlmZmVyZW5jZUluTWludXRlcywgZ2V0RGF5LCBnZXRIb3VycywgZ2V0TWludXRlcywgaXNCZWZvcmUsIGlzRXF1YWwsIGlzU2FtZVdlZWssIHNldCwgc3RhcnRPZkRheSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnO1xuaW1wb3J0IHsgRnJlcXVlbmN5IH0gZnJvbSAncnJ1bGUvZGlzdC9lc20vdHlwZXMnO1xuaW1wb3J0IHsgV2Vla2RheSB9IGZyb20gJ3JydWxlL2Rpc3QvZXNtL3dlZWtkYXknO1xuaW1wb3J0IHsgRXZlbnRUeXBlcyB9IGZyb20gJy4uL2VudW1zL2V2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBJQ2FsZW5kYXJBY2NvdW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYWxlbmRhci5hY2NvdW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2V2ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRXZlbnRUaW1lIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ldmVudC50aW1lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUmVjdXJyaW5nRXZlbnRFeGNlcHRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3VycmluZy5leGNlcHRpb24uaW50ZXJmYWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyVXRpbHNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgbG9jYWxlOiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIGZpbHRlckNhbGVuZGFyc0V2ZW50czxUPihzZWxlY3RlZENhbGVuZGFyczogSUNhbGVuZGFyQWNjb3VudFtdLCBjYWxlbmRhckV2ZW50czogVFtdKTogVFtdIHtcbiAgICBpZiAoc2VsZWN0ZWRDYWxlbmRhcnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjYWxlbmRhckV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBzZWxlY3RlZENhbGVuZGFycy5maW5kKChjYWxlbmRhcikgPT4gY2FsZW5kYXIuZW1haWwgPT09IGV2ZW50WydtZXRhJ10uZW1haWwgfHwgdGhpcy52YWxpZENhbGVuZGFyRXZlbnQoZXZlbnRbJ21ldGEnXSkpICE9IG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2FsZW5kYXJFdmVudHMuZmlsdGVyKChldmVudCkgPT4gdGhpcy52YWxpZENhbGVuZGFyRXZlbnQoZXZlbnRbJ21ldGEnXSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB2YWxpZENhbGVuZGFyRXZlbnQoZXZlbnQ6IElFdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBbRXZlbnRUeXBlcy5TWVNURU0sIEV2ZW50VHlwZXMuREFURSwgRXZlbnRUeXBlcy5VU0VSXS5pbmRleE9mKGV2ZW50LnR5cGUpICE9PSAtMTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRFdmVudFRpbWUoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IHsgc3RhcnRUaW1lOiBzdHJpbmc7IGVuZFRpbWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCBzdGFydEhvdXJzID0gZ2V0SG91cnMoc3RhcnQpO1xuICAgIGNvbnN0IGVuZEhvdXJzID0gZ2V0SG91cnMoZW5kKTtcbiAgICBjb25zdCBzdGFydFRpbWVGb3JtYXQgPSAoc3RhcnRIb3VycyA+IDEyICYmIGVuZEhvdXJzID4gMTIpIHx8IChzdGFydEhvdXJzIDwgMTIgJiYgZW5kSG91cnMgPCAxMikgPyAnaDptbScgOiAnaDptbSBhYSc7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZm9ybWF0RGF0ZShzdGFydCwgc3RhcnRUaW1lRm9ybWF0LCB0aGlzLmxvY2FsZSkucmVwbGFjZSgnOjAwJywgJycpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSBmb3JtYXREYXRlKGVuZCwgJ2g6bW0gYWEnLCB0aGlzLmxvY2FsZSkucmVwbGFjZSgnOjAwJywgJycpO1xuICAgIHJldHVybiB7IHN0YXJ0VGltZSwgZW5kVGltZSB9O1xuICB9XG5cbiAgcHVibGljIGlzUHJvdmlkZXJFdmVudChldmVudDogUGFydGlhbDxJRXZlbnQ+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFtFdmVudFR5cGVzLkdPT0dMRSwgRXZlbnRUeXBlcy5NSUNST1NPRlRdLmluZGV4T2YoZXZlbnQudHlwZSkgIT09IC0xO1xuICB9XG5cbiAgcHVibGljIGlzUmVjdXJyaW5nRXZlbnQoZXZlbnQ6IFBhcnRpYWw8SUV2ZW50Pik6IGJvb2xlYW4ge1xuICAgIC8vIEV4Y2x1ZGluZyBwcm92aWRlcnMgZXZlbnRzIGJlY2F1c2UgdGhleSBhcmUgbm90IGdlbmVyYXRlZCB3aXRoaW4gdGhlIGFwcCBhbmQgY29tZSBmcm9tIGV4dGVybmFsIHNvdXJjZSBsaWtlIEdvb2dsZSBvciBNaWNyb3NvZnQuXG4gICAgcmV0dXJuIGV2ZW50LnJlY3VycmluZyAmJiBldmVudC50eXBlICYmICF0aGlzLmlzUHJvdmlkZXJFdmVudChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgaXNFcXVhbERhdGVzKHN0YXJ0RGF0ZTogc3RyaW5nIHwgRGF0ZSwgZW5EYXRlOiBzdHJpbmcgfCBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFzdGFydERhdGUgfHwgIWVuRGF0ZSA/IGZhbHNlIDogaXNFcXVhbChzdGFydE9mRGF5KG5ldyBEYXRlKHN0YXJ0RGF0ZSkpLCBzdGFydE9mRGF5KG5ldyBEYXRlKGVuRGF0ZSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0JlZm9yZURhdGUoc3RhcnREYXRlOiBzdHJpbmcgfCBEYXRlLCBlbkRhdGU6IHN0cmluZyB8IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNCZWZvcmUoc3RhcnRPZkRheShuZXcgRGF0ZShzdGFydERhdGUpKSwgc3RhcnRPZkRheShuZXcgRGF0ZShlbkRhdGUpKSk7XG4gIH1cblxuICBwdWJsaWMgaXNTYW1lV2VlayhzdGFydERhdGU6IHN0cmluZyB8IERhdGUsIGVuRGF0ZTogc3RyaW5nIHwgRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhc3RhcnREYXRlIHx8ICFlbkRhdGUgPyBmYWxzZSA6IGlzU2FtZVdlZWsoc3RhcnRPZkRheShuZXcgRGF0ZShzdGFydERhdGUpKSwgc3RhcnRPZkRheShuZXcgRGF0ZShlbkRhdGUpKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VXBkYXRlZFJlY3VycmluZ0V4Y2VwdGlvbihldmVudDogUGFydGlhbDxJRXZlbnQ+KTogSVJlY3VycmluZ0V2ZW50RXhjZXB0aW9uIHtcbiAgICBjb25zdCB2YWxpZFVwZGF0ZWRSZWN1cnJpbmdFeGNlcHRpb24gPSB0aGlzLmlzUmVjdXJyaW5nRXZlbnQoZXZlbnQpICYmIGV2ZW50LnJlY3VycmluZ1BhdHRlcm4udXBkYXRlZEV2ZW50O1xuICAgIGlmICh2YWxpZFVwZGF0ZWRSZWN1cnJpbmdFeGNlcHRpb24gJiYgIXRoaXMuaXNCZWZvcmVEYXRlKGV2ZW50LnJlY3VycmluZ1N0YXJ0RGF0ZSwgZXZlbnQucmVjdXJyaW5nUGF0dGVybi51cGRhdGVkRXZlbnQuc3RhcnREYXRlKSkge1xuICAgICAgcmV0dXJuIGV2ZW50LnJlY3VycmluZ1BhdHRlcm4udXBkYXRlZEV2ZW50O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeGNlcHRpb25FdmVudChldmVudDogUGFydGlhbDxJRXZlbnQ+LCBleGNlcHRpb25zOiBJUmVjdXJyaW5nRXZlbnRFeGNlcHRpb25bXSk6IElSZWN1cnJpbmdFdmVudEV4Y2VwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWN1cnJpbmdFdmVudChldmVudClcbiAgICAgID8gZXhjZXB0aW9ucz8uZmluZChcbiAgICAgICAgICAoZXhjZXB0aW9uKSA9PlxuICAgICAgICAgICAgdGhpcy5pc0VxdWFsRGF0ZXMoZXZlbnQucmVjdXJyaW5nU3RhcnREYXRlLCBleGNlcHRpb24uc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgdGhpcy5pc0VxdWFsRGF0ZXMoZXZlbnQucmVjdXJyaW5nRW5kRGF0ZSwgZXhjZXB0aW9uLmVuZERhdGUpICYmXG4gICAgICAgICAgICBldmVudC5yZWN1cnJpbmdJbnN0YW5jZU5vID09PSBleGNlcHRpb24ucmVjdXJyaW5nSW5zdGFuY2VObyxcbiAgICAgICAgKVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGlzVmFsaWRSZWN1cnJpbmdEYXRlKGV2ZW50OiBJRXZlbnQsIHJlY3VycmluZ0RhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWV2ZW50LnJlY3VycmluZ1BhdHRlcm4ucmVjdXJyaW5nRW5kRGF0ZSB8fCB0aGlzLmlzQmVmb3JlRGF0ZShyZWN1cnJpbmdEYXRlLCBldmVudC5yZWN1cnJpbmdQYXR0ZXJuLnJlY3VycmluZ0VuZERhdGUpO1xuICB9XG5cbiAgcHVibGljIGdldERlbGV0ZWRSZWN1cnJpbmdFdmVudChldmVudDogSUV2ZW50LCByZWN1cnJpbmdEYXRlOiBEYXRlKTogSVJlY3VycmluZ0V2ZW50RXhjZXB0aW9uIHtcbiAgICByZXR1cm4gZXZlbnQucmVjdXJyaW5nUGF0dGVybj8uZGVsZXRpb25zPy5maW5kKChpdGVtKSA9PiB0aGlzLmlzRXF1YWxEYXRlcyhpdGVtLnN0YXJ0RGF0ZSwgcmVjdXJyaW5nRGF0ZSkpO1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlUmVjdXJyaW5nRGF0ZXMoZHRzdGFydDogRGF0ZSwgdW50aWw6IERhdGUsIGZyZXE6IEZyZXF1ZW5jeSwgaW50ZXJ2YWw6IG51bWJlciA9IDEpOiBEYXRlW10ge1xuICAgIHJldHVybiAoXG4gICAgICBuZXcgUlJ1bGUoe1xuICAgICAgICBmcmVxLFxuICAgICAgICBkdHN0YXJ0LFxuICAgICAgICB1bnRpbCxcbiAgICAgICAgd2tzdDogbmV3IFdlZWtkYXkoZ2V0RGF5KGR0c3RhcnQpKSxcbiAgICAgICAgaW50ZXJ2YWwsXG4gICAgICB9KS5hbGwoKSB8fCBbXVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaXNWYWxpZFJlY3VycmluZ0V4Y2VwdGlvbihldmVudDogSUV2ZW50LCBleGNlcHRpb25FdmVudDogSVJlY3VycmluZ0V2ZW50RXhjZXB0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNFcXVhbERhdGVzKGV2ZW50LnJlY3VycmluZ1N0YXJ0RGF0ZSwgZXhjZXB0aW9uRXZlbnQucmVjdXJyaW5nU3RhcnREYXRlKSAmJlxuICAgICAgdGhpcy5pc0VxdWFsRGF0ZXMoZXZlbnQucmVjdXJyaW5nRW5kRGF0ZSwgZXhjZXB0aW9uRXZlbnQucmVjdXJyaW5nRW5kRGF0ZSkgJiZcbiAgICAgIGV2ZW50LnJlY3VycmluZ0luc3RhbmNlTm8gPT09IGV4Y2VwdGlvbkV2ZW50LnJlY3VycmluZ0luc3RhbmNlTm9cbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNvcnRFdmVudHM8VD4oY2FsZW5kYXJFdmVudHM6IFRbXSk6IHZvaWQge1xuICAgIGNhbGVuZGFyRXZlbnRzLnNvcnQoKGEsIGIpID0+IGRpZmZlcmVuY2VJbk1pbnV0ZXMoYlsnZW5kJ10sIGJbJ3N0YXJ0J10pIC0gZGlmZmVyZW5jZUluTWludXRlcyhhWydlbmQnXSwgYVsnc3RhcnQnXSkpO1xuICAgIGxldCB6SW5kZXggPSAxO1xuICAgIGNhbGVuZGFyRXZlbnRzLmZvckVhY2goKGV2ZW50LCBpbmRleCkgPT4ge1xuICAgICAgZXZlbnRbJ21ldGEnXS56SW5kZXggPSB6SW5kZXg7XG4gICAgICBldmVudFsnY3NzQ2xhc3MnXSArPSBgIGN5cmFuby1ldmVudC1pbmRleC0ke2V2ZW50WydtZXRhJ10uekluZGV4fWA7XG4gICAgICB6SW5kZXgrKztcbiAgICAgIGZvciAobGV0IGkgPSBpbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRXZlbnQgPSBjYWxlbmRhckV2ZW50c1tpXTtcbiAgICAgICAgaWYgKGV2ZW50WydzdGFydCddIDwgY2FsZW5kYXJFdmVudFsnZW5kJ10pIHtcbiAgICAgICAgICBldmVudFsnbWV0YSddLnpJbmRleCA9IE1hdGgubWF4KGV2ZW50WydtZXRhJ10uekluZGV4LCBjYWxlbmRhckV2ZW50WydtZXRhJ10uekluZGV4ICsgMSk7XG4gICAgICAgICAgZXZlbnRbJ2Nzc0NsYXNzJ10gKz0gYCBjeXJhbm8tZXZlbnQtaW5kZXgtJHtldmVudFsnbWV0YSddLnpJbmRleH1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlFdmVudHNJbmRleCgpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudEVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmN5cmFuby1ldmVudCcpO1xuICAgIC8vIENhbGN1bGF0ZSBhbmQgYXBwbHkgei1pbmRleFxuICAgIGV2ZW50RWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBsZXQgekluZGV4ID0gMDtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goKGV2ZW50Q2xhc3MpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Q2xhc3MuaW5jbHVkZXMoJ2N5cmFuby1ldmVudC1pbmRleC0nKSkge1xuICAgICAgICAgIGNvbnN0IGV2ZW50Q2xhc3NTcGxpdCA9IGV2ZW50Q2xhc3Muc3BsaXQoJy0nKTtcbiAgICAgICAgICB6SW5kZXggPSBOdW1iZXIoZXZlbnRDbGFzc1NwbGl0WzNdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlbGVtZW50LnN0eWxlLnpJbmRleCA9IGAke3pJbmRleH0gIWltcG9ydGFudGA7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RXZlbnRUaW1lKGV2ZW50OiBQYXJ0aWFsPElFdmVudD4pOiB7IHN0YXJ0OiBEYXRlOyBlbmQ6IERhdGUgfSB7XG4gICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoZXZlbnQucmVjdXJyaW5nU3RhcnREYXRlIHx8IGV2ZW50LnN0YXJ0RGF0ZSk7XG4gICAgbGV0IGVuZCA9IG5ldyBEYXRlKGV2ZW50LnJlY3VycmluZ0VuZERhdGUgfHwgZXZlbnQuZW5kRGF0ZSk7XG4gICAgaWYgKCFldmVudC5hbGxEYXkpIHtcbiAgICAgIHN0YXJ0ID0gc2V0KHN0YXJ0LCB7IGhvdXJzOiBnZXRIb3VycyhuZXcgRGF0ZShldmVudC5zdGFydFRpbWUpKSwgbWludXRlczogZ2V0TWludXRlcyhuZXcgRGF0ZShldmVudC5zdGFydFRpbWUpKSB9KTtcbiAgICAgIGVuZCA9IHNldChlbmQsIHsgaG91cnM6IGdldEhvdXJzKG5ldyBEYXRlKGV2ZW50LmVuZFRpbWUpKSwgbWludXRlczogZ2V0TWludXRlcyhuZXcgRGF0ZShldmVudC5lbmRUaW1lKSkgfSk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50TWludXRlcyA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoZW5kLCBzdGFydCk7XG4gICAgLy8gLS0tIGZvciBldmVudHMgdGhhdCBzdGFydCBQTSBhbmQgZW5kIEFNIG5leHQgZGF5LS0tLS0tLS0tLVxuICAgIGVuZCA9IGV2ZW50TWludXRlcyA8IDAgPyBhZGREYXlzKGVuZCwgMSkgOiBlbmQ7XG4gICAgaWYgKGV2ZW50LnJlY3VycmluZykge1xuICAgICAgZXZlbnQucmVjdXJyaW5nU3RhcnREYXRlID0gc3RhcnQ7XG4gICAgICBldmVudC5yZWN1cnJpbmdFbmREYXRlID0gZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudC5zdGFydERhdGUgPSBzdGFydDtcbiAgICAgIGV2ZW50LmVuZERhdGUgPSBlbmQ7XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgfVxuXG4gIC8vIHRlbXAgZml4IHRvIHJlbW92ZSBodG1sIHRhZ3MgZnJvbSBldmVudCBub3RlIHVudGlsIHdlIGNoYW5nZSB0aGUgbm90ZSB0ZXh0IGFyZWEgZmllbGQgdG8gYSByaWNoIHRleHRhcmVhXG4gIHB1YmxpYyByZW1vdmVIdG1sVGFncyhodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ2V4ID0gLyg8KFtePl0rKT4pL2dpO1xuICAgIGNvbnN0IGNsZWFuU3RyaW5nID0gaHRtbC5yZXBsYWNlKHJlZ2V4LCAnJyk7XG4gICAgcmV0dXJuIGNsZWFuU3RyaW5nID8gY2xlYW5TdHJpbmcudHJpbSgpIDogJyc7XG4gIH1cblxuICBwdWJsaWMgcHJlcGFyZUV2ZW50RGF0ZXMoZXZlbnREYXRhOiBJRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnREYXRhLmFsbERheSkge1xuICAgICAgZXZlbnREYXRhLnN0YXJ0RGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUoZXZlbnREYXRhLnN0YXJ0RGF0ZSkpO1xuICAgICAgZXZlbnREYXRhLnN0YXJ0VGltZSA9IGV2ZW50RGF0YS5zdGFydERhdGU7XG4gICAgICBldmVudERhdGEuZW5kVGltZSA9IGV2ZW50RGF0YS5lbmREYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudERhdGEuZW5kRGF0ZSA9IGV2ZW50RGF0YS5zdGFydERhdGU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEV2ZW50VGltZXMoZXZlbnREYXRhOiBQYXJ0aWFsPElFdmVudD4sIHJlY3VycmluZ0V4Y2VwdGlvbj86IElSZWN1cnJpbmdFdmVudEV4Y2VwdGlvbiwgbmV3RXZlbnQ/OiBib29sZWFuKTogSUV2ZW50VGltZSB7XG4gICAgbGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKHJlY3VycmluZ0V4Y2VwdGlvbj8uc3RhcnRUaW1lIHx8IGV2ZW50RGF0YS5zdGFydFRpbWUpO1xuICAgIGxldCBlbmRUaW1lOiBEYXRlO1xuICAgIGlmICghZXZlbnREYXRhLl9pZCAmJiBuZXdFdmVudCkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lTWludXRlcyA9IGdldE1pbnV0ZXMoc3RhcnRUaW1lKTtcbiAgICAgIHN0YXJ0VGltZSA9IHNldChzdGFydFRpbWUsIHsgbWludXRlczogc3RhcnRUaW1lTWludXRlcyA8IDMwID8gMCA6IDMwIH0pO1xuICAgICAgZW5kVGltZSA9IGFkZE1pbnV0ZXMoc3RhcnRUaW1lLCA2MCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuZFRpbWUgPSBuZXcgRGF0ZShyZWN1cnJpbmdFeGNlcHRpb24/LmVuZFRpbWUgfHwgZXZlbnREYXRhLmVuZFRpbWUpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUocmVjdXJyaW5nRXhjZXB0aW9uPy5zdGFydERhdGUgfHwgZXZlbnREYXRhLnJlY3VycmluZ1N0YXJ0RGF0ZSB8fCBldmVudERhdGEuc3RhcnREYXRlKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBuZXcgRGF0ZShyZWN1cnJpbmdFeGNlcHRpb24/LmVuZERhdGUgfHwgZXZlbnREYXRhLnJlY3VycmluZ0VuZERhdGUgfHwgZXZlbnREYXRhLmVuZERhdGUpO1xuICAgICAgaWYgKHN0YXJ0RGF0ZSAmJiAhZXZlbnREYXRhLmFsbERheSkge1xuICAgICAgICBpZiAoIWlzRXF1YWwoc3RhcnRPZkRheShzdGFydERhdGUpLCBzdGFydE9mRGF5KHN0YXJ0VGltZSkpKSB7XG4gICAgICAgICAgc3RhcnRUaW1lID0gc2V0KHN0YXJ0RGF0ZSwgeyBob3Vyczogc3RhcnRUaW1lLmdldEhvdXJzKCksIG1pbnV0ZXM6IHN0YXJ0VGltZS5nZXRNaW51dGVzKCkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKHN0YXJ0T2ZEYXkoZW5kRGF0ZSksIHN0YXJ0T2ZEYXkoZW5kVGltZSkpKSB7XG4gICAgICAgICAgZW5kVGltZSA9IHNldChlbmREYXRlLCB7IGhvdXJzOiBlbmRUaW1lLmdldEhvdXJzKCksIG1pbnV0ZXM6IGVuZFRpbWUuZ2V0TWludXRlcygpIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHN0YXJ0VGltZSwgZW5kVGltZSB9O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkVXBkYXRlZEV2ZW50KGV2ZW50OiBJRXZlbnQsIGZvcm1WYWx1ZTogSUV2ZW50KTogSUV2ZW50IHtcbiAgICBjb25zdCB1cGRhdGVkRXZlbnQ6IElFdmVudCA9IGZvcm1WYWx1ZTtcbiAgICB0aGlzLnByZXBhcmVFdmVudERhdGVzKHVwZGF0ZWRFdmVudCk7XG4gICAgdXBkYXRlZEV2ZW50LmxvY2F0aW9uID0gdXBkYXRlZEV2ZW50LmxvY2F0aW9uIHx8IHsgYWRkcmVzczogZm9ybVZhbHVlLmFkZHJlc3MsIGNvb3JkaW5hdGVzOiBbXSB9O1xuICAgIHVwZGF0ZWRFdmVudC5zdGFydFRpbWUgPSB1cGRhdGVkRXZlbnQuc3RhcnRUaW1lWydzbG90VmFsdWUnXSA/IHVwZGF0ZWRFdmVudC5zdGFydFRpbWVbJ3Nsb3RWYWx1ZSddIDogdXBkYXRlZEV2ZW50LnN0YXJ0VGltZTtcbiAgICB1cGRhdGVkRXZlbnQuZW5kVGltZSA9IHVwZGF0ZWRFdmVudC5lbmRUaW1lWydzbG90VmFsdWUnXSA/IHVwZGF0ZWRFdmVudC5lbmRUaW1lWydzbG90VmFsdWUnXSA6IHVwZGF0ZWRFdmVudC5lbmRUaW1lO1xuICAgIGNvbnN0IGV2ZW50VGltZXMgPSB0aGlzLmdldEV2ZW50VGltZXModXBkYXRlZEV2ZW50KTtcbiAgICB1cGRhdGVkRXZlbnQuc3RhcnRUaW1lID0gZXZlbnRUaW1lcy5zdGFydFRpbWU7XG4gICAgdXBkYXRlZEV2ZW50LmVuZFRpbWUgPSBldmVudFRpbWVzLmVuZFRpbWU7XG4gICAgdXBkYXRlZEV2ZW50LnRpbWVab25lID0gZXZlbnQ/LnRpbWVab25lO1xuICAgIHVwZGF0ZWRFdmVudC5yZWN1cnJpbmcgPSAhIXVwZGF0ZWRFdmVudC5yZWN1cnJpbmdQYXR0ZXJuPy50eXBlO1xuXG4gICAgY29uc3Qgc3RhcnRIb3VycyA9IGdldEhvdXJzKGV2ZW50VGltZXMuc3RhcnRUaW1lKTtcbiAgICB1cGRhdGVkRXZlbnQucmVjdXJyaW5nSW5zdGFuY2VObyA9IGV2ZW50LnJlY3VycmluZ0luc3RhbmNlTm87XG4gICAgY29uc3QgZW5kSG91cnMgPSBnZXRIb3VycyhldmVudFRpbWVzLmVuZFRpbWUpO1xuICAgIGlmIChzdGFydEhvdXJzID4gZW5kSG91cnMpIHtcbiAgICAgIHVwZGF0ZWRFdmVudC5lbmRUaW1lID0gc2V0KGFkZERheXMoZXZlbnRUaW1lcy5zdGFydFRpbWUsIDEpLCB7IGhvdXJzOiBlbmRIb3VycywgbWludXRlczogZ2V0TWludXRlcyhldmVudFRpbWVzLmVuZFRpbWUpIH0pO1xuICAgICAgdXBkYXRlZEV2ZW50LmVuZERhdGUgPSB1cGRhdGVkRXZlbnQuZW5kVGltZTtcbiAgICB9XG5cbiAgICB1cGRhdGVkRXZlbnQuc3RhcnREYXRlID0gc2V0KHVwZGF0ZWRFdmVudC5zdGFydERhdGUsIHsgaG91cnM6IHVwZGF0ZWRFdmVudC5zdGFydFRpbWU/LmdldEhvdXJzKCksIG1pbnV0ZXM6IHVwZGF0ZWRFdmVudC5zdGFydFRpbWU/LmdldE1pbnV0ZXMoKSB9KTtcbiAgICB1cGRhdGVkRXZlbnQuZW5kRGF0ZSA9IHNldCh1cGRhdGVkRXZlbnQuZW5kRGF0ZSwgeyBob3VyczogdXBkYXRlZEV2ZW50LmVuZFRpbWU/LmdldEhvdXJzKCksIG1pbnV0ZXM6IHVwZGF0ZWRFdmVudC5lbmRUaW1lPy5nZXRNaW51dGVzKCkgfSk7XG4gICAgaWYgKCF1cGRhdGVkRXZlbnQucmVjdXJyaW5nUGF0dGVybiB8fCAhdXBkYXRlZEV2ZW50LnJlY3VycmluZ1BhdHRlcm4udHlwZSkge1xuICAgICAgZGVsZXRlIHVwZGF0ZWRFdmVudC5yZWN1cnJpbmdQYXR0ZXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZWRFdmVudC50aW1lWm9uZSA9IHVwZGF0ZWRFdmVudC50eXBlID09PSBFdmVudFR5cGVzLk1JQ1JPU09GVCA/IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSA6IHVwZGF0ZWRFdmVudC50aW1lWm9uZTtcblxuICAgIHJldHVybiB1cGRhdGVkRXZlbnQ7XG4gIH1cbn1cbiJdfQ==