cronofy-elements 1.48.0 → 1.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/dist/.gitkeep +0 -0
  2. package/dist/CronofyElements.js +2 -0
  3. package/{build/CronofyElements.v1.48.0.js.LICENSE.txt → dist/CronofyElements.js.LICENSE.txt} +0 -0
  4. package/package.json +8 -5
  5. package/.babelrc +0 -20
  6. package/.eslintrc.yaml +0 -43
  7. package/.prettierignore +0 -4
  8. package/.prettierrc +0 -7
  9. package/Makefile +0 -92
  10. package/brainstorm.md +0 -76
  11. package/build/CronofyElements.v1.48.0.js +0 -2
  12. package/build/npm/CronofyElements.js +0 -2
  13. package/compat.config.js +0 -25
  14. package/demo/agenda.ejs +0 -71
  15. package/demo/availability-viewer.ejs +0 -316
  16. package/demo/calendar-sync.ejs +0 -149
  17. package/demo/crossbrowser.ejs +0 -228
  18. package/demo/date-time-picker.ejs +0 -213
  19. package/demo/demo-styles.css +0 -134
  20. package/demo/index.ejs +0 -249
  21. package/demo/integration.ejs +0 -482
  22. package/demo/load-elements.ejs +0 -12
  23. package/demo/nav.ejs +0 -14
  24. package/demo/rules.ejs +0 -121
  25. package/demo/server.js +0 -425
  26. package/demo/slot-picker.ejs +0 -197
  27. package/git.README.md +0 -71
  28. package/notes.style.md +0 -197
  29. package/postcss.config.js +0 -3
  30. package/script/i18n-export +0 -11
  31. package/script/i18n-helpers/split_write.rb +0 -25
  32. package/script/i18n-import +0 -22
  33. package/script/i18n-reference-update +0 -241
  34. package/src/js/components/Agenda/Agenda.js +0 -243
  35. package/src/js/components/Agenda/AllDayEventsList.js +0 -37
  36. package/src/js/components/Agenda/Calendar.js +0 -100
  37. package/src/js/components/Agenda/CalendarHeader.js +0 -187
  38. package/src/js/components/Agenda/Event.js +0 -34
  39. package/src/js/components/Agenda/EventAllDay.js +0 -76
  40. package/src/js/components/Agenda/EventAttendees.js +0 -30
  41. package/src/js/components/Agenda/EventDetail.js +0 -111
  42. package/src/js/components/Agenda/EventMessages.js +0 -24
  43. package/src/js/components/Agenda/EventMeta.js +0 -48
  44. package/src/js/components/Agenda/EventTime.js +0 -34
  45. package/src/js/components/Agenda/EventWrapper.js +0 -271
  46. package/src/js/components/Agenda/Location.js +0 -29
  47. package/src/js/components/Agenda/Message.js +0 -22
  48. package/src/js/components/Agenda/TimedEventsList.js +0 -29
  49. package/src/js/components/AvailabilityRules/AddButton.js +0 -60
  50. package/src/js/components/AvailabilityRules/AvailabilityRules.js +0 -45
  51. package/src/js/components/AvailabilityRules/Calendar.js +0 -31
  52. package/src/js/components/AvailabilityRules/CalendarListItem.js +0 -53
  53. package/src/js/components/AvailabilityRules/CalendarProfiles.js +0 -67
  54. package/src/js/components/AvailabilityRules/CalendarSelector.js +0 -104
  55. package/src/js/components/AvailabilityRules/Calendars.js +0 -145
  56. package/src/js/components/AvailabilityRules/Checkmark.js +0 -51
  57. package/src/js/components/AvailabilityRules/DayLabels.js +0 -91
  58. package/src/js/components/AvailabilityRules/Footer.js +0 -109
  59. package/src/js/components/AvailabilityRules/Legend.js +0 -57
  60. package/src/js/components/AvailabilityRules/Loading.js +0 -53
  61. package/src/js/components/AvailabilityRules/RemoveButton.js +0 -57
  62. package/src/js/components/AvailabilityRules/Slot.js +0 -195
  63. package/src/js/components/AvailabilityRules/SlotDisplay.js +0 -27
  64. package/src/js/components/AvailabilityRules/Slots.js +0 -81
  65. package/src/js/components/AvailabilityRules/SlotsDisplay.js +0 -68
  66. package/src/js/components/AvailabilityRules/TimeExpander.js +0 -119
  67. package/src/js/components/AvailabilityRules/TimeLabels.js +0 -89
  68. package/src/js/components/AvailabilityRules/TimeZoneDisplay.js +0 -41
  69. package/src/js/components/AvailabilityRules/ToggleIcon.js +0 -41
  70. package/src/js/components/AvailabilityRules/Tooltip.js +0 -63
  71. package/src/js/components/AvailabilityRules/UnknownCalendar.js +0 -33
  72. package/src/js/components/AvailabilityRules/Week.js +0 -115
  73. package/src/js/components/AvailabilityRules/WeekGrid.js +0 -80
  74. package/src/js/components/AvailabilityRules/Wrapper.js +0 -414
  75. package/src/js/components/AvailabilityRules/contexts/drag-context.js +0 -15
  76. package/src/js/components/AvailabilityRules/scss/_base.buttons.scss +0 -58
  77. package/src/js/components/AvailabilityRules/scss/_base.theme.scss +0 -4
  78. package/src/js/components/AvailabilityRules/scss/_components.timezoneselector.scss +0 -74
  79. package/src/js/components/AvailabilityRules/scss/_generic.reset.scss +0 -13
  80. package/src/js/components/AvailabilityRules/scss/_settings.colours.scss +0 -12
  81. package/src/js/components/AvailabilityRules/scss/availabilityrules.scss +0 -5
  82. package/src/js/components/AvailabilityRules/utils/tz-utils.js +0 -44
  83. package/src/js/components/AvailabilityViewer/AvailabilityViewer.js +0 -520
  84. package/src/js/components/AvailabilityViewer/ColumnHeader.js +0 -35
  85. package/src/js/components/AvailabilityViewer/DayColumn.js +0 -36
  86. package/src/js/components/AvailabilityViewer/DayColumnDisplay.js +0 -33
  87. package/src/js/components/AvailabilityViewer/DayColumnWrapper.js +0 -29
  88. package/src/js/components/AvailabilityViewer/DayLabels.js +0 -41
  89. package/src/js/components/AvailabilityViewer/EmptyColumn.js +0 -29
  90. package/src/js/components/AvailabilityViewer/Footer.js +0 -36
  91. package/src/js/components/AvailabilityViewer/GridFreeSelect.js +0 -33
  92. package/src/js/components/AvailabilityViewer/HoverSlot.js +0 -35
  93. package/src/js/components/AvailabilityViewer/HoverTooltip.js +0 -34
  94. package/src/js/components/AvailabilityViewer/LabelColumn.js +0 -53
  95. package/src/js/components/AvailabilityViewer/LabelItem.js +0 -73
  96. package/src/js/components/AvailabilityViewer/Legend.js +0 -79
  97. package/src/js/components/AvailabilityViewer/Loading.js +0 -57
  98. package/src/js/components/AvailabilityViewer/MonthLabels.js +0 -43
  99. package/src/js/components/AvailabilityViewer/Navigation.js +0 -138
  100. package/src/js/components/AvailabilityViewer/Overlay.js +0 -60
  101. package/src/js/components/AvailabilityViewer/Preloading.js +0 -66
  102. package/src/js/components/AvailabilityViewer/SelectedSlot.js +0 -106
  103. package/src/js/components/AvailabilityViewer/SelectedSlots.js +0 -72
  104. package/src/js/components/AvailabilityViewer/SelectionMask.js +0 -44
  105. package/src/js/components/AvailabilityViewer/Slot.js +0 -237
  106. package/src/js/components/AvailabilityViewer/SlotFreeSelect.js +0 -115
  107. package/src/js/components/AvailabilityViewer/Slots.js +0 -57
  108. package/src/js/components/AvailabilityViewer/TimeExpander.js +0 -93
  109. package/src/js/components/AvailabilityViewer/TimeLines.js +0 -74
  110. package/src/js/components/AvailabilityViewer/TimeSelector.js +0 -243
  111. package/src/js/components/AvailabilityViewer/TimeSelectorTrigger.js +0 -42
  112. package/src/js/components/AvailabilityViewer/TimeZoneDisplay.js +0 -28
  113. package/src/js/components/AvailabilityViewer/ToggleIcon.js +0 -41
  114. package/src/js/components/AvailabilityViewer/Tooltip.js +0 -65
  115. package/src/js/components/AvailabilityViewer/Week.js +0 -255
  116. package/src/js/components/AvailabilityViewer/WeekWrapper.js +0 -132
  117. package/src/js/components/AvailabilityViewer/contexts/page-context.js +0 -17
  118. package/src/js/components/AvailabilityViewer/contexts/page-reducer.js +0 -28
  119. package/src/js/components/AvailabilityViewer/contexts/selection-context.js +0 -25
  120. package/src/js/components/AvailabilityViewer/contexts/selection-reducer.js +0 -18
  121. package/src/js/components/CalendarSync/Active.js +0 -57
  122. package/src/js/components/CalendarSync/AddToggle.js +0 -72
  123. package/src/js/components/CalendarSync/CalendarSync.js +0 -215
  124. package/src/js/components/CalendarSync/EditToggle.js +0 -71
  125. package/src/js/components/CalendarSync/Footer.js +0 -31
  126. package/src/js/components/CalendarSync/Inactive.js +0 -66
  127. package/src/js/components/CalendarSync/Loading.js +0 -52
  128. package/src/js/components/CalendarSync/Pending.js +0 -74
  129. package/src/js/components/CalendarSync/ProfileStatus.js +0 -33
  130. package/src/js/components/CalendarSync/Profiles.js +0 -109
  131. package/src/js/components/CalendarSync/ProviderLogo.js +0 -28
  132. package/src/js/components/CalendarSync/Providers.js +0 -80
  133. package/src/js/components/CalendarSync/RemoveLink.js +0 -96
  134. package/src/js/components/CalendarSync/SelectProvider.js +0 -25
  135. package/src/js/components/CalendarSync/contexts/status-reducer.js +0 -74
  136. package/src/js/components/DateTimePicker/Calendar.js +0 -127
  137. package/src/js/components/DateTimePicker/CalendarHeader.js +0 -80
  138. package/src/js/components/DateTimePicker/Confirm.js +0 -106
  139. package/src/js/components/DateTimePicker/DateTimePicker.js +0 -131
  140. package/src/js/components/DateTimePicker/DayButton.js +0 -38
  141. package/src/js/components/DateTimePicker/DayHeadings.js +0 -33
  142. package/src/js/components/DateTimePicker/Details.js +0 -33
  143. package/src/js/components/DateTimePicker/Error.js +0 -39
  144. package/src/js/components/DateTimePicker/Loading.js +0 -20
  145. package/src/js/components/DateTimePicker/LoadingCalendar.js +0 -21
  146. package/src/js/components/DateTimePicker/NoSlotsFound.js +0 -16
  147. package/src/js/components/DateTimePicker/SequencedSlotButton.js +0 -97
  148. package/src/js/components/DateTimePicker/SlotButton.js +0 -55
  149. package/src/js/components/DateTimePicker/SlotsList.js +0 -45
  150. package/src/js/components/DateTimePicker/Wrapper.js +0 -281
  151. package/src/js/components/DateTimePicker/contexts/status-context.js +0 -19
  152. package/src/js/components/DateTimePicker/contexts/status-reducer.js +0 -276
  153. package/src/js/components/DateTimePicker/contexts/theme-context.js +0 -33
  154. package/src/js/components/DateTimePicker/helpers/theming.js +0 -49
  155. package/src/js/components/DateTimePicker/scss/_base.buttons.scss +0 -58
  156. package/src/js/components/DateTimePicker/scss/_base.layout.scss +0 -28
  157. package/src/js/components/DateTimePicker/scss/_base.theme.scss +0 -17
  158. package/src/js/components/DateTimePicker/scss/_components.calendargrid.scss +0 -78
  159. package/src/js/components/DateTimePicker/scss/_components.calendarheader.scss +0 -71
  160. package/src/js/components/DateTimePicker/scss/_components.confirm.scss +0 -40
  161. package/src/js/components/DateTimePicker/scss/_components.details.scss +0 -20
  162. package/src/js/components/DateTimePicker/scss/_components.error.scss +0 -34
  163. package/src/js/components/DateTimePicker/scss/_components.loading.scss +0 -36
  164. package/src/js/components/DateTimePicker/scss/_components.slotslist.scss +0 -43
  165. package/src/js/components/DateTimePicker/scss/_components.timezoneselector.scss +0 -73
  166. package/src/js/components/DateTimePicker/scss/_generic.reset.scss +0 -18
  167. package/src/js/components/DateTimePicker/scss/_settings.colours.scss +0 -17
  168. package/src/js/components/DateTimePicker/scss/datetimepicker.scss +0 -5
  169. package/src/js/components/DateTimePicker/utils/calendar-keyboard.js +0 -109
  170. package/src/js/components/DateTimePicker/utils/calendar.js +0 -125
  171. package/src/js/components/DateTimePicker/utils/slots.js +0 -288
  172. package/src/js/components/SlotPicker/Confirm.js +0 -160
  173. package/src/js/components/SlotPicker/Days.js +0 -58
  174. package/src/js/components/SlotPicker/Slot.js +0 -72
  175. package/src/js/components/SlotPicker/SlotPicker.js +0 -292
  176. package/src/js/components/SlotPicker/Slots.js +0 -66
  177. package/src/js/components/SlotPicker/TimeSlots.js +0 -91
  178. package/src/js/components/generic/Button.js +0 -26
  179. package/src/js/components/generic/Container.js +0 -33
  180. package/src/js/components/generic/Error.js +0 -77
  181. package/src/js/components/generic/Loading.js +0 -51
  182. package/src/js/components/generic/LoadingSpinner.js +0 -30
  183. package/src/js/components/generic/ShadowScrollbars.js +0 -70
  184. package/src/js/components/generic/TimeZoneSelector.js +0 -158
  185. package/src/js/components/generic/TransitionSlide.js +0 -72
  186. package/src/js/contexts/i18n-context.js +0 -25
  187. package/src/js/contexts/log-context.js +0 -18
  188. package/src/js/contexts/tz-context.js +0 -18
  189. package/src/js/env.example.js +0 -8
  190. package/src/js/helpers/colors.js +0 -33
  191. package/src/js/helpers/comparators.AvailabilityViewer.js +0 -27
  192. package/src/js/helpers/connections.js +0 -370
  193. package/src/js/helpers/events.js +0 -166
  194. package/src/js/helpers/functional.js +0 -4
  195. package/src/js/helpers/generator.js +0 -107
  196. package/src/js/helpers/i18n.js +0 -153
  197. package/src/js/helpers/init.Agenda.js +0 -55
  198. package/src/js/helpers/init.AvailabilityRules.js +0 -195
  199. package/src/js/helpers/init.AvailabilityViewer.js +0 -215
  200. package/src/js/helpers/init.CalendarSync.js +0 -83
  201. package/src/js/helpers/init.DateTimePicker.js +0 -219
  202. package/src/js/helpers/init.SlotPicker.js +0 -89
  203. package/src/js/helpers/init.js +0 -308
  204. package/src/js/helpers/logging.js +0 -78
  205. package/src/js/helpers/mocks.js +0 -871
  206. package/src/js/helpers/slots.js +0 -340
  207. package/src/js/helpers/slots.rules.js +0 -220
  208. package/src/js/helpers/theming.js +0 -93
  209. package/src/js/helpers/translations.js +0 -42
  210. package/src/js/helpers/tz-list.js +0 -136
  211. package/src/js/helpers/utils.AvailabilityRules.js +0 -110
  212. package/src/js/helpers/utils.AvailabilityViewer.js +0 -789
  213. package/src/js/helpers/utils.CalendarSync.js +0 -199
  214. package/src/js/helpers/utils.js +0 -76
  215. package/src/js/hooks/useWindowSize.js +0 -20
  216. package/src/js/main.js +0 -133
  217. package/src/js/next.js +0 -37
  218. package/src/js/styles/_settings.utils.scss +0 -82
  219. package/src/js/styles/colors.js +0 -13
  220. package/src/js/styles/global.js +0 -49
  221. package/src/js/styles/utils.js +0 -81
  222. package/src/js/translations/de/agenda.json +0 -12
  223. package/src/js/translations/de/availability_rules.json +0 -18
  224. package/src/js/translations/de/availability_viewer.json +0 -14
  225. package/src/js/translations/de/calendar_sync.json +0 -14
  226. package/src/js/translations/de/core.json +0 -15
  227. package/src/js/translations/de/date_time_picker.json +0 -14
  228. package/src/js/translations/de/slot_picker.json +0 -9
  229. package/src/js/translations/de/time_zones.json +0 -135
  230. package/src/js/translations/en/agenda.json +0 -12
  231. package/src/js/translations/en/availability_rules.json +0 -18
  232. package/src/js/translations/en/availability_viewer.json +0 -14
  233. package/src/js/translations/en/calendar_sync.json +0 -14
  234. package/src/js/translations/en/core.json +0 -23
  235. package/src/js/translations/en/date_time_picker.json +0 -15
  236. package/src/js/translations/en/slot_picker.json +0 -9
  237. package/src/js/translations/en/time_zones.json +0 -17
  238. package/src/js/translations/es/agenda.json +0 -12
  239. package/src/js/translations/es/availability_rules.json +0 -18
  240. package/src/js/translations/es/availability_viewer.json +0 -14
  241. package/src/js/translations/es/calendar_sync.json +0 -14
  242. package/src/js/translations/es/core.json +0 -15
  243. package/src/js/translations/es/date_time_picker.json +0 -14
  244. package/src/js/translations/es/slot_picker.json +0 -9
  245. package/src/js/translations/es/time_zones.json +0 -203
  246. package/src/js/translations/fr/agenda.json +0 -12
  247. package/src/js/translations/fr/availability_rules.json +0 -18
  248. package/src/js/translations/fr/availability_viewer.json +0 -14
  249. package/src/js/translations/fr/calendar_sync.json +0 -14
  250. package/src/js/translations/fr/core.json +0 -15
  251. package/src/js/translations/fr/date_time_picker.json +0 -14
  252. package/src/js/translations/fr/slot_picker.json +0 -9
  253. package/src/js/translations/fr/time_zones.json +0 -161
  254. package/src/js/translations/fr-CA/agenda.json +0 -12
  255. package/src/js/translations/fr-CA/availability_rules.json +0 -18
  256. package/src/js/translations/fr-CA/availability_viewer.json +0 -14
  257. package/src/js/translations/fr-CA/calendar_sync.json +0 -14
  258. package/src/js/translations/fr-CA/core.json +0 -23
  259. package/src/js/translations/fr-CA/date_time_picker.json +0 -14
  260. package/src/js/translations/fr-CA/slot_picker.json +0 -9
  261. package/src/js/translations/fr-CA/time_zones.json +0 -163
  262. package/src/js/translations/it/agenda.json +0 -12
  263. package/src/js/translations/it/availability_rules.json +0 -18
  264. package/src/js/translations/it/availability_viewer.json +0 -14
  265. package/src/js/translations/it/calendar_sync.json +0 -14
  266. package/src/js/translations/it/core.json +0 -15
  267. package/src/js/translations/it/date_time_picker.json +0 -14
  268. package/src/js/translations/it/slot_picker.json +0 -9
  269. package/src/js/translations/it/time_zones.json +0 -126
  270. package/src/js/translations/ja/agenda.json +0 -12
  271. package/src/js/translations/ja/availability_rules.json +0 -18
  272. package/src/js/translations/ja/availability_viewer.json +0 -14
  273. package/src/js/translations/ja/calendar_sync.json +0 -14
  274. package/src/js/translations/ja/core.json +0 -15
  275. package/src/js/translations/ja/date_formats.json +0 -5
  276. package/src/js/translations/ja/date_time_picker.json +0 -14
  277. package/src/js/translations/ja/slot_picker.json +0 -9
  278. package/src/js/translations/ja/time_zones.json +0 -435
  279. package/src/js/translations/nl/agenda.json +0 -12
  280. package/src/js/translations/nl/availability_rules.json +0 -18
  281. package/src/js/translations/nl/availability_viewer.json +0 -14
  282. package/src/js/translations/nl/calendar_sync.json +0 -14
  283. package/src/js/translations/nl/core.json +0 -15
  284. package/src/js/translations/nl/date_time_picker.json +0 -14
  285. package/src/js/translations/nl/slot_picker.json +0 -9
  286. package/src/js/translations/nl/time_zones.json +0 -118
  287. package/src/js/translations/ru/agenda.json +0 -12
  288. package/src/js/translations/ru/availability_rules.json +0 -18
  289. package/src/js/translations/ru/availability_viewer.json +0 -14
  290. package/src/js/translations/ru/calendar_sync.json +0 -14
  291. package/src/js/translations/ru/core.json +0 -15
  292. package/src/js/translations/ru/date_time_picker.json +0 -14
  293. package/src/js/translations/ru/slot_picker.json +0 -9
  294. package/src/js/translations/ru/time_zones.json +0 -435
  295. package/src/js/translations/sv/agenda.json +0 -12
  296. package/src/js/translations/sv/availability_rules.json +0 -18
  297. package/src/js/translations/sv/availability_viewer.json +0 -14
  298. package/src/js/translations/sv/calendar_sync.json +0 -14
  299. package/src/js/translations/sv/core.json +0 -15
  300. package/src/js/translations/sv/date_time_picker.json +0 -14
  301. package/src/js/translations/sv/slot_picker.json +0 -9
  302. package/src/js/translations/sv/time_zones.json +0 -136
  303. package/tests/AvailabilityRules/AvailabilityRules.test.js +0 -39
  304. package/tests/AvailabilityRules/__snapshots__/AvailabilityRules.test.js.snap +0 -1045
  305. package/tests/AvailabilityViewer/Navigation.test.js +0 -130
  306. package/tests/AvailabilityViewer/contexts/page-reducer.test.js +0 -87
  307. package/tests/AvailabilityViewer/reducer.test.js +0 -73
  308. package/tests/CalendarSync/Active.test.js +0 -25
  309. package/tests/CalendarSync/AddToggle.test.js +0 -57
  310. package/tests/CalendarSync/EditToggle.test.js +0 -57
  311. package/tests/CalendarSync/Inactive.test.js +0 -26
  312. package/tests/CalendarSync/Pending.test.js +0 -25
  313. package/tests/CalendarSync/ProviderLogo.test.js +0 -95
  314. package/tests/CalendarSync/__snapshots__/Active.test.js.snap +0 -61
  315. package/tests/CalendarSync/__snapshots__/Inactive.test.js.snap +0 -78
  316. package/tests/CalendarSync/__snapshots__/Pending.test.js.snap +0 -90
  317. package/tests/CalendarSync/__snapshots__/ProviderLogo.test.js.snap +0 -267
  318. package/tests/CalendarSync/init.CalendarSync.test.js +0 -302
  319. package/tests/CalendarSync/mocks/theme.js +0 -14
  320. package/tests/CalendarSync/status-reducer.test.js +0 -435
  321. package/tests/DateTimePicker/SequencedSlotButton.test.js +0 -157
  322. package/tests/DateTimePicker/SlotButton.test.js +0 -118
  323. package/tests/DateTimePicker/contexts/status-reducer.test.js +0 -1036
  324. package/tests/DateTimePicker/dummy-data.js +0 -883
  325. package/tests/DateTimePicker/utils.test.js +0 -515
  326. package/tests/colors.test.js +0 -70
  327. package/tests/components/TimezoneSelector.test.js +0 -124
  328. package/tests/components/main.test.js +0 -203
  329. package/tests/components/rtl-utils.js +0 -32
  330. package/tests/connections.test.js +0 -684
  331. package/tests/events.test.js +0 -472
  332. package/tests/generator.test.js +0 -74
  333. package/tests/i18n.test.js +0 -255
  334. package/tests/init.Agenda.test.js +0 -122
  335. package/tests/init.AvailabilityRules.test.js +0 -279
  336. package/tests/init.AvailabilityViewer.test.js +0 -740
  337. package/tests/init.SlotPicker.test.js +0 -166
  338. package/tests/init.test.js +0 -231
  339. package/tests/logging.test.js +0 -235
  340. package/tests/mocks/i18n.js +0 -3
  341. package/tests/mocks/theme.js +0 -3
  342. package/tests/setupJest.js +0 -8
  343. package/tests/slots.rules.test.js +0 -195
  344. package/tests/slots.test.js +0 -278
  345. package/tests/utils.AvailabilityRules.test.js +0 -221
  346. package/tests/utils.AvailabilityViewer.test.js +0 -1800
  347. package/tests/utils.CalendarSync.test.js +0 -277
  348. package/tests/utils.test.js +0 -119
  349. package/webpack.config.js +0 -114
@@ -1,243 +0,0 @@
1
- import React, { useState, useEffect } from "react";
2
- import moment from "moment-timezone";
3
-
4
- import * as connections from "../../helpers/connections";
5
- import * as utils from "../../helpers/events";
6
- import { parseStyleOptions } from "../../helpers/theming";
7
- import { i18nConstructor } from "../../helpers/i18n";
8
- import { logConstructor } from "../../helpers/logging";
9
-
10
- import Calendar from "./Calendar";
11
- import Container from "../generic/Container";
12
- import Error from "../generic/Error";
13
-
14
- export const CalendarsContext = React.createContext();
15
- export const LoggingContext = React.createContext();
16
- export const EventsContext = React.createContext();
17
- export const I18nContext = React.createContext();
18
- export const StatusContext = React.createContext();
19
- export const ThemeContext = React.createContext();
20
-
21
- const Agenda = ({ options }) => {
22
- const [log, setLog] = useState(
23
- logConstructor(
24
- options.config.logs,
25
- "Agenda View",
26
- options.callback ? options.callback : false
27
- )
28
- );
29
-
30
- const [i18n, setI18n] = useState(
31
- i18nConstructor({
32
- context: "agenda",
33
- locale: options.locale,
34
- allPhrases: options.translations,
35
- tzid: options.tzid,
36
- })
37
- );
38
-
39
- const [status, setStatus] = useState({
40
- active_date: i18n.f(moment(new Date()), `YYYY-MM-DD`),
41
- direction: "forwards",
42
- expanded: false,
43
- loading: true,
44
- error: false,
45
- locale: options.locale,
46
- mode: options.config.mode,
47
- });
48
-
49
- const [theme, setTheme] = useState({
50
- ...parseStyleOptions(options.styles, "CronofyAgenda", options),
51
- });
52
-
53
- const [eventData, setEventData] = useState({
54
- events: {},
55
- days: {},
56
- });
57
-
58
- const [calendars, setCalendars] = useState([]);
59
-
60
- const [currentEvents, setCurrentEvents] = useState([]);
61
-
62
- const [state, setState] = useState({
63
- args: {
64
- tzid: "Europe/London",
65
- include_managed: true,
66
- only_managed: status.mode === "only_managed" || status.mode === "free_busy_managed",
67
- from: i18n.f(moment(new Date()).add(-7, "days"), `YYYY-MM-DD`),
68
- to: i18n.f(moment(new Date()).add(7, "days"), `YYYY-MM-DD`),
69
- },
70
- offset: 7,
71
- });
72
-
73
- const getCurrentEvents = () => {
74
- // get event IDs for the active date.
75
- const eventIDs = eventData.days[status.active_date];
76
- // get all the events
77
- const allEvents = eventData.events;
78
- // create an array of all events who's IDs are in the active date IDs list
79
- const currentEvents = [];
80
- for (const event in eventIDs) {
81
- currentEvents.push(allEvents[event]);
82
- }
83
- setCurrentEvents(currentEvents);
84
- };
85
-
86
- const getEventsByType = () => {
87
- const getEventsOptions = {
88
- token: options.token,
89
- api_domain: options.domains.apiDomain,
90
- args: state.args,
91
- next: connections.loadNextPage,
92
- mock: options.demo,
93
- };
94
- if (status.mode === "free_busy_managed") {
95
- // Getting both events AND free_busy
96
- return Promise.all([
97
- connections.getEvents(getEventsOptions),
98
- connections.getEvents({
99
- ...getEventsOptions,
100
- freeBusy: true,
101
- }),
102
- ]).then(res => {
103
- // both res[N] will have `events` and `userinfo`, and we
104
- // want to combine the two events arrays. We expect both
105
- // userinfo values to be the same, but favour res[0].
106
- const combinedResults = {
107
- ...res[0],
108
- events: [...res[0].events, ...res[1].events],
109
- };
110
- return combinedResults;
111
- });
112
- } else if (status.mode === "free_busy") {
113
- // Getting JUST free_busy
114
- return connections.getEvents({
115
- ...getEventsOptions,
116
- freeBusy: true,
117
- });
118
- } else {
119
- // Getting JUST events
120
- return connections.getEvents(getEventsOptions);
121
- }
122
- };
123
-
124
- const triggerGetEvents = () => {
125
- getEventsByType()
126
- .then(res => {
127
- const calendarsFromUserinfo = connections.parseUserInfoCalendars(res.userinfo);
128
- setCalendars(calendarsFromUserinfo);
129
-
130
- const eventsDayRange = utils.getDayRange(
131
- status.active_date,
132
- state.offset,
133
- eventData.days
134
- );
135
-
136
- const parsedEvents = utils.parseEvents(res.events);
137
-
138
- const eventsDays = utils.setEventDayIDs(parsedEvents, eventsDayRange);
139
- const eventsObj = utils.parseEventsByID(parsedEvents, state.events);
140
- setEventData({
141
- days: eventsDays,
142
- events: { ...eventData.events, ...eventsObj },
143
- });
144
- setStatus({ ...status, loading: false });
145
- })
146
- .catch(error => {
147
- const errorMessage = error.message ? error.message : error;
148
- const errorOutput = {};
149
- if (error.docsSlug) {
150
- errorOutput.docsSlug = error.docsSlug;
151
- }
152
- log.error(errorMessage, errorOutput);
153
- setStatus({ ...status, loading: false, error: error });
154
- });
155
- };
156
-
157
- const resetArgsByOffset = from => {
158
- const args = { ...state.args };
159
-
160
- const fromObj = moment(from).add(0 - state.offset, "days");
161
- const toObj = moment(from).add(state.offset, "days");
162
-
163
- args.from = i18n.f(fromObj, `YYYY-MM-DD`);
164
- args.to = i18n.f(toObj, `YYYY-MM-DD`);
165
- setState({
166
- ...state,
167
- args,
168
- });
169
- };
170
-
171
- const setDates = (target, direction) => {
172
- resetArgsByOffset(target);
173
- setStatus({ ...status, active_date: target, direction });
174
- };
175
-
176
- const navigate = action => {
177
- const oldFrom = moment(status.active_date);
178
- let newDate;
179
- switch (action) {
180
- case "today":
181
- const today = moment(new Date());
182
- const diff = utils.checkDirection(today, oldFrom);
183
- newDate = i18n.f(today, "YYYY-MM-DD");
184
- setDates(newDate, diff);
185
- break;
186
- case "prev":
187
- newDate = oldFrom.subtract(1, "days");
188
- setDates(i18n.f(newDate, "YYYY-MM-DD"), "backwards");
189
- break;
190
- case "next":
191
- setStatus({ ...status, direction: "forwards" });
192
- newDate = oldFrom.add(1, "days");
193
- setDates(i18n.f(newDate, "YYYY-MM-DD"), "forwards");
194
- break;
195
- default:
196
- newDate = oldFrom.add(1, "days");
197
- setDates(i18n.f(newDate, "YYYY-MM-DD"), "forwards");
198
- }
199
- };
200
-
201
- const setExpanded = id => {
202
- const direction = id ? "upwards" : "downwards";
203
- setStatus({ ...status, expanded: id, direction });
204
- };
205
-
206
- useEffect(() => {
207
- const targetDate = status.active_date;
208
- const loadedDays = { ...eventData.days };
209
- const dayExistsInState = loadedDays.hasOwnProperty(targetDate);
210
- if (!dayExistsInState) {
211
- setStatus({ ...status, loading: true });
212
- triggerGetEvents();
213
- }
214
- }, [status.active_date]);
215
-
216
- useEffect(() => {
217
- getCurrentEvents();
218
- }, [eventData, status.active_date]);
219
-
220
- return (
221
- <Container minHeight="500px" className={`${theme.prefix}`}>
222
- {status.error ? (
223
- <Error message={i18n.t("global_error")} theme={theme} />
224
- ) : (
225
- <LoggingContext.Provider value={log}>
226
- <I18nContext.Provider value={i18n}>
227
- <ThemeContext.Provider value={theme}>
228
- <StatusContext.Provider value={[status, setStatus]}>
229
- <CalendarsContext.Provider value={calendars}>
230
- <EventsContext.Provider value={currentEvents}>
231
- <Calendar nextPrev={navigate} expand={setExpanded} />
232
- </EventsContext.Provider>
233
- </CalendarsContext.Provider>
234
- </StatusContext.Provider>
235
- </ThemeContext.Provider>
236
- </I18nContext.Provider>
237
- </LoggingContext.Provider>
238
- )}
239
- </Container>
240
- );
241
- };
242
-
243
- export default Agenda;
@@ -1,37 +0,0 @@
1
- import React, { useContext } from "react";
2
- import { css } from "@emotion/core";
3
-
4
- import EventAllDay from "./EventAllDay";
5
- import Message from "./Message";
6
-
7
- import { I18nContext, ThemeContext } from "./Agenda";
8
-
9
- const AllDayEventsList = props => {
10
- const theme = useContext(ThemeContext);
11
- const i18n = useContext(I18nContext);
12
- return (
13
- <div
14
- css={css`
15
- padding-bottom: 6px;
16
- border-bottom: 1px solid ${theme.colors.hairline};
17
- margin-bottom: 16px;
18
- `}
19
- className={`${theme.prefix}__list ${theme.prefix}__list--all-day`}
20
- >
21
- {props.events.length > 0 ? (
22
- props.events.map((event, key) => (
23
- <EventAllDay
24
- key={key}
25
- current={props.date}
26
- data={event}
27
- expand={props.expand}
28
- />
29
- ))
30
- ) : (
31
- <Message message={i18n.t("no_all_day_events")} stylePrefix={theme.prefix} />
32
- )}
33
- </div>
34
- );
35
- };
36
-
37
- export default AllDayEventsList;
@@ -1,100 +0,0 @@
1
- import React, { useContext } from "react";
2
- import moment from "moment-timezone";
3
- import { css } from "@emotion/core";
4
-
5
- import Loading from "../generic/Loading";
6
- import TransitionSlide from "../generic/TransitionSlide";
7
- import CalendarHeader from "./CalendarHeader";
8
- import EventDetail from "./EventDetail";
9
- import Message from "./Message";
10
- import AllDayEventsList from "./AllDayEventsList";
11
- import TimedEventsList from "./TimedEventsList";
12
-
13
- import { getEventByID, calculateLimit, sortEventsByType } from "../../helpers/events";
14
-
15
- import { EventsContext, I18nContext, StatusContext, ThemeContext } from "./Agenda";
16
-
17
- const Calendar = props => {
18
- const theme = useContext(ThemeContext);
19
- const [status] = useContext(StatusContext);
20
- const i18n = useContext(I18nContext);
21
- const events = useContext(EventsContext);
22
-
23
- const today = i18n.f(moment(new Date()), "YYYY-MM-DD");
24
- const limit = calculateLimit(status.active_date, today);
25
- const eventsByType = sortEventsByType(events);
26
- const expandedEvent = getEventByID(status.expanded, events);
27
-
28
- return (
29
- <TransitionSlide
30
- styles={css`
31
- flex-grow: 1;
32
- `}
33
- direction={status.direction}
34
- keyProp={`${status.active_date}_${expandedEvent ? expandedEvent.event_uid : "false"}`}
35
- >
36
- <div
37
- css={css`
38
- display: flex;
39
- flex-grow: 1;
40
- flex-direction: column;
41
- width: 100%;
42
-
43
- .shadow-scroll {
44
- display: flex;
45
- flex-grow: 1;
46
- flex-shrink: 1;
47
- }
48
- `}
49
- className={`${theme.prefix}__day`}
50
- >
51
- {!expandedEvent ? (
52
- <React.Fragment>
53
- <CalendarHeader
54
- date={status.active_date}
55
- nextPrev={props.nextPrev}
56
- limit={limit}
57
- />
58
- <div
59
- css={css`
60
- flex-grow: 1;
61
- flex-shrink: 1;
62
- display: flex;
63
- flex-direction: column;
64
- `}
65
- className={`${theme.prefix}__body`}
66
- >
67
- <Loading loading={status.loading} prefix={theme.prefix}>
68
- {events.length > 0 ? (
69
- <React.Fragment>
70
- <AllDayEventsList
71
- events={eventsByType.allDay}
72
- date={status.active_date}
73
- expand={props.expand}
74
- />
75
- <TimedEventsList
76
- events={eventsByType.timed}
77
- date={status.active_date}
78
- expand={props.expand}
79
- />
80
- </React.Fragment>
81
- ) : (
82
- <Message message={i18n.t("no_events")} prefix={theme.prefix} />
83
- )}
84
- </Loading>
85
- </div>
86
- </React.Fragment>
87
- ) : (
88
- <EventDetail
89
- event={expandedEvent}
90
- current={status.active_date}
91
- data={expandedEvent}
92
- expand={props.expand}
93
- />
94
- )}
95
- </div>
96
- </TransitionSlide>
97
- );
98
- };
99
-
100
- export default Calendar;
@@ -1,187 +0,0 @@
1
- import React, { useContext } from "react";
2
- import moment from "moment-timezone";
3
- import { css } from "@emotion/core";
4
-
5
- import { buttonReset } from "../../styles/utils";
6
-
7
- import { I18nContext, ThemeContext } from "./Agenda";
8
-
9
- const CalendarHeader = ({ date, nextPrev, limit }) => {
10
- const theme = useContext(ThemeContext);
11
- const i18n = useContext(I18nContext);
12
-
13
- const navButtonBaseStyles = css`
14
- ${buttonReset};
15
- width: 2em;
16
- position: relative;
17
- cursor: pointer;
18
- &:before {
19
- content: "";
20
- position: absolute;
21
- top: 50%;
22
- left: 50%;
23
- transform: translate(-50%, -50%) rotate(45deg);
24
- display: block;
25
- width: 1em;
26
- height: 1em;
27
- }
28
- &:focus {
29
- outline: none;
30
- background: ${theme.colors.cream};
31
- }
32
- &:active {
33
- background: darken(${theme.colors.cream}, 5%);
34
- }
35
- `;
36
-
37
- const dateObject = moment(date);
38
- return (
39
- <div
40
- css={css`
41
- margin-top: 16px;
42
- border-top: 1px solid ${theme.colors.hairline};
43
- border-bottom: 1px solid ${theme.colors.hairline};
44
- // border-radius: 4px;
45
- margin-bottom: 16px;
46
- display: flex;
47
- position: relative;
48
- flex-shrink: 0;
49
- `}
50
- className={`${theme.prefix}__header`}
51
- >
52
- {!dateObject.isSame(new Date(), "day") ? (
53
- <button
54
- type="button"
55
- css={css`
56
- ${buttonReset};
57
- position: absolute;
58
- top: 0;
59
- left: 50%;
60
- transform: translate(-50%, -50%);
61
- border: 1px solid ${theme.colors.hairline};
62
- border-radius: 4px;
63
- padding: 6px 8px;
64
- line-height: 16px;
65
- background: ${theme.colors.white};
66
- transition: background 0.2s;
67
- cursor: pointer;
68
- &:hover {
69
- background: ${theme.colors.greyPale};
70
- }
71
- `}
72
- className={`${theme.prefix}__today`}
73
- onClick={() => nextPrev("today")}
74
- >
75
- {i18n.t("go_to_today")}
76
- </button>
77
- ) : (
78
- <span
79
- css={css`
80
- position: absolute;
81
- top: 0;
82
- left: 50%;
83
- transform: translate(-50%, 0%);
84
- color: ${theme.colors.hairline};
85
- `}
86
- className={`${theme.prefix}__today--current`}
87
- >
88
- {i18n.t("today")}
89
- </span>
90
- )}
91
-
92
- {limit != -1 ? (
93
- <button
94
- type="button"
95
- css={css`
96
- ${navButtonBaseStyles};
97
- &:before {
98
- border-left: 2px solid ${theme.colors.greyMid};
99
- border-bottom: 2px solid ${theme.colors.greyMid};
100
- }
101
- `}
102
- className={`${theme.prefix}__nav ${theme.prefix}__nav--prev`}
103
- onClick={() => nextPrev("prev")}
104
- >
105
- <span className="visuallyhidden">{i18n.t("previous")}</span>
106
- </button>
107
- ) : null}
108
-
109
- <div
110
- css={css`
111
- flex-grow: 1;
112
- padding: 16px 0;
113
- display: flex;
114
- align-items: center;
115
- `}
116
- className={`${theme.prefix}__nav-date`}
117
- >
118
- <div
119
- css={css`
120
- font-size: 48px;
121
- line-height: 1;
122
- `}
123
- className={`${theme.prefix}__nav-date__number-wrapper`}
124
- >
125
- <span className={`${theme.prefix}__nav-date__number`}>
126
- {i18n.f(dateObject, "D")}
127
- </span>
128
- <span
129
- css={css`
130
- // text-transform: uppercase;
131
- position: relative;
132
- top: -1.6em;
133
- font-size: 16px;
134
- `}
135
- className={`${theme.prefix}__nav-date__ordinal`}
136
- >
137
- {i18n.f(dateObject, "Do").replace(/[0-9]/g, "")}
138
- </span>
139
- </div>
140
- <div
141
- css={css`
142
- margin-left: 10px;
143
- `}
144
- >
145
- <span
146
- css={css`
147
- display: block;
148
- line-height: 1;
149
- padding-bottom: 4px;
150
- `}
151
- className={`${theme.prefix}__nav-date__day`}
152
- >
153
- {i18n.f(dateObject, "dddd")}
154
- </span>
155
- <span
156
- css={css`
157
- display: block;
158
- line-height: 1;
159
- `}
160
- className={`${theme.prefix}__nav-date__month`}
161
- >
162
- {i18n.f(dateObject, "MMMM")}
163
- </span>
164
- </div>
165
- </div>
166
-
167
- {limit != 1 ? (
168
- <button
169
- type="button"
170
- css={css`
171
- ${navButtonBaseStyles};
172
- &:before {
173
- border-right: 2px solid ${theme.colors.greyMid};
174
- border-top: 2px solid ${theme.colors.greyMid};
175
- }
176
- `}
177
- className={`${theme.prefix}__nav ${theme.prefix}__nav--next`}
178
- onClick={() => nextPrev("next")}
179
- >
180
- <span className="visuallyhidden">{i18n.t("next")}</span>
181
- </button>
182
- ) : null}
183
- </div>
184
- );
185
- };
186
-
187
- export default CalendarHeader;
@@ -1,34 +0,0 @@
1
- import React, { useContext } from "react";
2
-
3
- import EventWrapper from "./EventWrapper";
4
- import EventMessages from "./EventMessages";
5
- import EventTime from "./EventTime";
6
- import EventMeta from "./EventMeta";
7
- import { getCalColor } from "../../helpers/events";
8
- import { truncateString } from "../../helpers/utils";
9
-
10
- import { CalendarsContext, ThemeContext } from "./Agenda";
11
-
12
- const Event = props => {
13
- const theme = useContext(ThemeContext);
14
- const calendars = useContext(CalendarsContext);
15
- const calIndex = getCalColor(props.data.calendar_id, calendars);
16
- return (
17
- <EventWrapper calIndex={calIndex} data={props.data} expand={props.expand}>
18
- <EventMessages data={props.data} />
19
- <EventTime
20
- start={props.data.start}
21
- end={props.data.end}
22
- current={props.current}
23
- recurring={props.data.recurring}
24
- />
25
- <span className={`${theme.prefix}__event__title`}>
26
- {truncateString(props.data.summary, 40)}
27
- </span>
28
-
29
- <EventMeta data={props.data} calIndex={calIndex} />
30
- </EventWrapper>
31
- );
32
- };
33
-
34
- export default Event;
@@ -1,76 +0,0 @@
1
- import React, { useContext } from "react";
2
-
3
- import EventWrapper from "./EventWrapper";
4
- import EventTime from "./EventTime";
5
- import { getMultiDayStatus, getCalColor } from "../../helpers/events";
6
- import { truncateString } from "../../helpers/utils";
7
-
8
- import { CalendarsContext, ThemeContext } from "./Agenda";
9
-
10
- const EventAllDay = props => {
11
- const theme = useContext(ThemeContext);
12
- const calendars = useContext(CalendarsContext);
13
-
14
- const calIndex = getCalColor(props.data.calendar_id, calendars);
15
- const multiDayStatus = getMultiDayStatus(props.data.start, props.data.end, props.current);
16
- return (
17
- <EventWrapper
18
- calIndex={calIndex}
19
- data={props.data}
20
- expand={props.expand}
21
- transparency={"transparent"}
22
- className={`
23
- ${theme.prefix}__event--line
24
- ${
25
- multiDayStatus === 1 || multiDayStatus === 3
26
- ? `${theme.prefix}__event--has-after`
27
- : ""
28
- }
29
- ${
30
- multiDayStatus === 2 || multiDayStatus === 3
31
- ? `${theme.prefix}__event--has-before`
32
- : ""
33
- }
34
- `}
35
- >
36
- {multiDayStatus === 1 || multiDayStatus === 3 ? (
37
- <svg
38
- className={`${theme.prefix}__after-icon`}
39
- viewBox="0 0 100 100"
40
- preserveAspectRatio="none"
41
- >
42
- <polygon points="0,0 100,50 0,100" />
43
- </svg>
44
- ) : null}
45
- {multiDayStatus === 2 || multiDayStatus === 3 ? (
46
- <svg
47
- className={`${theme.prefix}__before-icon`}
48
- viewBox="0 0 100 100"
49
- preserveAspectRatio="none"
50
- >
51
- <polygon points="0,0 100,50 0,100" />
52
- </svg>
53
- ) : null}
54
- <span className={`${theme.prefix}__event__title`} title={props.data.summary}>
55
- {truncateString(props.data.summary, 40)}
56
- </span>
57
- <EventTime
58
- start={props.data.start}
59
- end={props.data.end}
60
- current={props.current}
61
- recurring={props.data.recurring}
62
- />
63
- {props.data.attendees && props.data.attendees.length > 1 ? (
64
- <div className={`${theme.prefix}__event__attendees`}>
65
- <span className={`${theme.prefix}__event__attendee`} />
66
- <span className={`${theme.prefix}__event__attendee`} />
67
- <span className={`${theme.prefix}__event__attendee-count`}>
68
- {props.data.attendees.length}
69
- </span>
70
- </div>
71
- ) : null}
72
- </EventWrapper>
73
- );
74
- };
75
-
76
- export default EventAllDay;