cronofy-elements 1.48.2 → 1.49.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/dist/.gitkeep +0 -0
  2. package/dist/CronofyElements.js +2 -0
  3. package/{build/CronofyElements.v1.48.2.js.LICENSE.txt → dist/CronofyElements.js.LICENSE.txt} +0 -0
  4. package/package.json +10 -7
  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.2.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 -322
  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 -423
  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 -61
  83. package/src/js/components/AvailabilityViewer/AvailabilityViewer.js +0 -524
  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,125 +0,0 @@
1
- import moment from "moment-timezone";
2
-
3
- import { getAvailableDays } from "./slots";
4
- import { getDayOffset } from "../../../helpers/utils.AvailabilityViewer";
5
-
6
- export const calculateMonthNav = months => {
7
- const currentMonth = months.findIndex(month => month.current);
8
- const prev = currentMonth >= 1 ? months[currentMonth - 1].month : false;
9
- const next = currentMonth < months.length - 1 ? months[currentMonth + 1].month : false;
10
-
11
- const current = moment(months[currentMonth].month, "YYYY-MM");
12
- return {
13
- prev,
14
- current,
15
- next,
16
- };
17
- };
18
-
19
- export const createDayObject = ({ month, dayIndex, current = false, availableDays }) => {
20
- const parsedIndex = dayIndex.toString().padStart(2, "0");
21
- const dayFormat = `YYYY-MM-[${parsedIndex}]`;
22
- const date = month.format(dayFormat);
23
- const available = availableDays.includes(date);
24
- return {
25
- date,
26
- currentMonth: current,
27
- isAvailable: available,
28
- };
29
- };
30
-
31
- const weekDayOffset = (monthObject, startDay) => {
32
- // Belt and braces: we *need* this value to be a lowercase day-name in English
33
- // regardless of whatever locale or format moment might try to give us if left
34
- // to its own devices.
35
- const firstWeekday = monthObject.clone().locale("en").format("dddd").toLowerCase();
36
- const offsetFromStartOfWeek = getDayOffset(firstWeekday, startDay);
37
- return offsetFromStartOfWeek;
38
- };
39
-
40
- export const getDatesInMonthDisplay = (month, availableDays, startDay) => {
41
- const monthObject = moment(month, "YYYY-MM");
42
- const daysInMonth = monthObject.daysInMonth();
43
- const offset = weekDayOffset(monthObject, startDay);
44
-
45
- const result = [];
46
-
47
- const prevMonthObject = monthObject.clone().add(-1, "months");
48
- const prevDaysInMonth = prevMonthObject.daysInMonth();
49
-
50
- // Add prev overflow dates...
51
- for (let j = offset - 1; j >= 0; j--) {
52
- const day = createDayObject({
53
- month: prevMonthObject,
54
- dayIndex: prevDaysInMonth - j,
55
- availableDays,
56
- });
57
- result.push(day);
58
- }
59
-
60
- // Add current month's dates
61
- for (let i = 1; i <= daysInMonth; i++) {
62
- const day = createDayObject({
63
- month: monthObject,
64
- dayIndex: i,
65
- current: true,
66
- availableDays,
67
- });
68
- result.push(day);
69
- }
70
-
71
- // Overflow dates for next month to create consistent grid
72
- if (result.length < 42) {
73
- const daysLeft = 42 - result.length;
74
-
75
- const nextMonthObject = monthObject.clone().add(1, "months");
76
-
77
- for (let k = 1; k <= daysLeft; k++) {
78
- const day = createDayObject({
79
- month: nextMonthObject,
80
- dayIndex: k,
81
- availableDays,
82
- });
83
- result.push(day);
84
- }
85
- }
86
-
87
- //sort days into rows
88
- const rows = result.reduce((rows, key, index) => {
89
- return (index % 7 == 0 ? rows.push([key]) : rows[rows.length - 1].push(key)) && rows;
90
- }, []);
91
-
92
- return rows;
93
- };
94
-
95
- export const getMonthsInDisplay = (month, startDay) => {
96
- const monthObject = moment(month, "YYYY-MM");
97
- const daysInMonth = monthObject.daysInMonth();
98
- const offset = weekDayOffset(monthObject, startDay);
99
-
100
- const result = [month];
101
- const daysLength = daysInMonth + offset;
102
-
103
- //Add prev month if in display...
104
- if (offset > 0) {
105
- const prevMonth = monthObject.clone().add(-1, "months").format("YYYY-MM");
106
- result.push(prevMonth);
107
- }
108
-
109
- // Add next month if in display
110
- if (daysLength < 42) {
111
- const nextMonth = monthObject.clone().add(1, "months").format("YYYY-MM");
112
- result.push(nextMonth);
113
- }
114
-
115
- return result;
116
- };
117
-
118
- export const parseTimeSlots = ({ slots, month, tzid, startDay }) => {
119
- //Get array of available days
120
- const availableDays = getAvailableDays(slots, tzid);
121
-
122
- const result = getDatesInMonthDisplay(month, availableDays, startDay);
123
-
124
- return result;
125
- };
@@ -1,288 +0,0 @@
1
- import moment from "moment-timezone";
2
-
3
- import { getAvailability, getSequencedAvailability } from "../../../helpers/connections";
4
- import { uniqueItems, humanizeTzName } from "../../../helpers/utils";
5
- import { errorMessages } from "../../../helpers/logging";
6
-
7
- import { defaultTimeZones } from "../../../helpers/tz-list";
8
-
9
- export const getMonthsCoveredByPeriod = (period, tzid) => {
10
- const start = moment
11
- .utc(period.start, "YYYY-MM-DDTHH:mm:00Z")
12
- .tz(tzid)
13
- .local()
14
- .startOf("month");
15
- const end = moment.utc(period.end, "YYYY-MM-DDTHH:mm:00Z").tz(tzid).local().startOf("month");
16
- const monthDiff = end.diff(start, "months");
17
-
18
- const months = [...Array(monthDiff + 1).keys()].map(monthIndex => {
19
- return start.clone().add(monthIndex, "months").format("YYYY-MM");
20
- });
21
-
22
- return months;
23
- };
24
-
25
- export const getMonthsFromQuery = (periods = [], tzid) => {
26
- const months = periods
27
- .map(period => getMonthsCoveredByPeriod(period, tzid))
28
- // getMonthsCoveredByPeriod returns an array, so flatten them...
29
- .reduce((acc, curr) => [...acc, ...curr], []);
30
-
31
- const uniqueMonths = uniqueItems(months);
32
-
33
- return uniqueMonths;
34
- };
35
-
36
- export const getDurationFromQuery = query => {
37
- const duration = query.sequence ? false : query.required_duration.minutes;
38
-
39
- return duration;
40
- };
41
-
42
- export const getMonthsLoadingFromQuery = (query, tzid) => {
43
- if (!query.query_periods || !query.query_periods.length) {
44
- return [
45
- {
46
- month: moment.tz().format("YYYY-MM"),
47
- loading: true,
48
- },
49
- ];
50
- }
51
- const monthStrings = getMonthsFromQuery(query.query_periods, tzid);
52
- const monthObjects = monthStrings.map(month => {
53
- return {
54
- month,
55
- loading: true,
56
- };
57
- });
58
- return monthObjects;
59
- };
60
-
61
- export const removeMonthFromLoading = (monthsLoading, month) => {
62
- const monthPos = monthsLoading.findIndex(m => m.month === month);
63
- const newMonthsLoading = [...monthsLoading];
64
- if (monthsLoading && monthPos >= 0) {
65
- newMonthsLoading[monthPos]["loading"] = false;
66
- }
67
- return newMonthsLoading;
68
- };
69
-
70
- export const getCurrentMonth = query => ({
71
- month: moment.tz().format("YYYY-MM"),
72
- current: true,
73
- query,
74
- });
75
-
76
- export const getMonthObjectsFromQuery = (query, tzid, current = false) => {
77
- if (!query.query_periods || !query.query_periods.length) {
78
- return [getCurrentMonth()];
79
- }
80
-
81
- const monthStrings = getMonthsFromQuery(query.query_periods, tzid);
82
- const startMonth = moment(monthStrings[0], "YYYY-MM");
83
- const endMonth = moment(monthStrings[monthStrings.length - 1], "YYYY-MM");
84
-
85
- const currentMonth =
86
- current && moment(current, "YYYY-MM").isBetween(startMonth, endMonth, "month", "[]")
87
- ? current
88
- : monthStrings[0];
89
-
90
- return monthStrings.map(month => {
91
- const croppedQueryPeriods = cropPeriodsByMonth(query.query_periods, month, tzid);
92
- return {
93
- month,
94
- current: currentMonth === month,
95
- loading: true,
96
- query: {
97
- ...query,
98
- query_periods: croppedQueryPeriods,
99
- max_results: query.max_results ?? 512,
100
- },
101
- };
102
- });
103
- };
104
-
105
- export const getSlots = ({ query, auth, tzid, sequence = false }) => {
106
- const availabilityFetch = sequence ? getSequencedAvailability : getAvailability;
107
-
108
- return availabilityFetch(
109
- auth.token,
110
- auth.domains.apiDomain,
111
- query,
112
- "DateTimePicker",
113
- tzid,
114
- auth.demo
115
- ).then(res => {
116
- if (res.status === 422) {
117
- throw {
118
- type: 422,
119
- message: errorMessages[422].message,
120
- body: res.errors,
121
- docsSlug: errorMessages[422].docsSlug,
122
- };
123
- }
124
- // This will intentionally throw an error if the
125
- // result is not in the correct format:
126
- return parseSlotsResult(res);
127
- });
128
- };
129
-
130
- export const parseQuery = query => {
131
- if (!query.bookable_events) {
132
- return {
133
- response_format: "overlapping_slots",
134
- ...query,
135
- };
136
- }
137
- return query;
138
- };
139
-
140
- export const parseSlotsResult = res => {
141
- let returnedSlots;
142
- if (typeof res.available_bookable_events !== "undefined") {
143
- returnedSlots = res.available_bookable_events;
144
- } else if (typeof res.sequences !== "undefined") {
145
- returnedSlots = res.sequences;
146
- } else {
147
- returnedSlots = res.available_slots;
148
-
149
- if (typeof res.available_slots === "undefined") {
150
- throw {
151
- type: 400,
152
- message: "There was a problem loading the data.",
153
- };
154
- }
155
- }
156
- return returnedSlots;
157
- };
158
-
159
- export const trimPeriod = (period, start, end) => {
160
- const croppedStart = period.start < start ? start : period.start;
161
- const croppedEnd = period.end > end ? end : period.end;
162
- return {
163
- start: croppedStart,
164
- end: croppedEnd,
165
- };
166
- };
167
-
168
- export const getMonthBounds = (month, tzid) => {
169
- const momentObject = moment.tz(month, "YYYY-MM", tzid);
170
- const start = momentObject.clone().startOf("month").utc().format("YYYY-MM-DDTHH:mm[:00Z]");
171
- const end = momentObject.clone().endOf("month").utc().format("YYYY-MM-DDTHH:mm[:00Z]");
172
- return { start, end };
173
- };
174
-
175
- export const cropPeriodsByMonth = (periods, month, tzid) => {
176
- const bounds = getMonthBounds(month, tzid);
177
- const croppedPeriods = cropPeriodsArbitrarily(periods, bounds);
178
- return croppedPeriods;
179
- };
180
-
181
- export const cropPeriodsArbitrarily = (periods, bounds) => {
182
- const croppedPeriods = periods
183
- .map(period => {
184
- if (period.end < bounds.start) return false;
185
- if (period.start > bounds.end) return false;
186
- return trimPeriod(period, bounds.start, bounds.end);
187
- })
188
- .filter(period => period);
189
- return croppedPeriods;
190
- };
191
-
192
- export const addSlotsToObject = (slotsObject, newSlotsArray) => {
193
- newSlotsArray.forEach(slot => {
194
- slotsObject[slot.start] = slot;
195
- });
196
- return slotsObject;
197
- };
198
-
199
- export const addSequenceTitle = (slot, sequence) => {
200
- if (sequence.length > 0) {
201
- const title = sequence.find(s => {
202
- return s.sequence_id === slot.sequence_id;
203
- }).sequence_title;
204
- return title;
205
- }
206
- };
207
-
208
- export const addSequencedSlotsToObject = (slotsObject, newSlotsArray, sequence) => {
209
- newSlotsArray.forEach(slot => {
210
- const formattedSlot = slot.sequence.map(s => {
211
- const title = addSequenceTitle(s, sequence);
212
- return title ? { ...s, sequence_title: title } : s;
213
- });
214
- const startArray = slot.sequence.map(a => a.start);
215
- const start = startArray.reduce((prev, current) => {
216
- return prev < current ? prev : current;
217
- });
218
- slotsObject[start] = formattedSlot;
219
- });
220
- return slotsObject;
221
- };
222
-
223
- export const getSlotsByDay = (slots, day, tzid) => {
224
- const slotKeys = Object.keys(slots);
225
- const dayObject = moment.tz(day, "YYYY-MM-DD", tzid);
226
- const startTime = dayObject.clone().utc().format("YYYY-MM-DDTHH:mm[:00Z]");
227
- const endTime = dayObject.clone().endOf("day").utc().format("YYYY-MM-DDTHH:mm[:00Z]");
228
- const matchingKeys = slotKeys.filter(key => key >= startTime && key <= endTime);
229
- const matchingSlots = matchingKeys.map(key => slots[key]);
230
- return matchingSlots;
231
- };
232
-
233
- export const getLocalDayFromUtc = (date, tzid) =>
234
- moment.utc(date, "YYYY-MM-DDTHH:mm:00Z").tz(tzid).format("YYYY-MM-DD");
235
-
236
- export const getFirstAvailableDay = (slots, tzid) => {
237
- const first = Object.keys(slots)[0];
238
- if (!first) return false;
239
- return getLocalDayFromUtc(first, tzid);
240
- };
241
-
242
- export const getAvailableDays = (slots, tzid) => {
243
- const keys = Object.keys(slots);
244
- const dates = keys.map(key => getLocalDayFromUtc(key, tzid));
245
- const array = uniqueItems(dates).sort();
246
- return array;
247
- };
248
-
249
- export const createTzObject = tzid => {
250
- const name = humanizeTzName(tzid);
251
-
252
- const zone = moment.tz(tzid);
253
-
254
- return {
255
- tzid: tzid,
256
- offset: zone.format("Z"),
257
- offsetMins: zone.utcOffset(),
258
- name: name,
259
- abbr: zone.zoneAbbr(),
260
- };
261
- };
262
-
263
- export const parseTzList = (timezones, tzid) => {
264
- const tzList = timezones ? timezones : moment.tz.names();
265
- const filtered = timezones ? timezones : tzList.filter(item => defaultTimeZones.includes(item));
266
-
267
- const result = [];
268
-
269
- filtered.map(tz => {
270
- const item = createTzObject(tz);
271
- result.push(item);
272
- });
273
-
274
- const isInList = result.findIndex(item => tzid === item.tzid);
275
-
276
- if (isInList <= -1) {
277
- const item = createTzObject(tzid);
278
- result.push(item);
279
- }
280
-
281
- result.sort((tzA, tzB) => tzA.offsetMins - tzB.offsetMins);
282
- return result;
283
- };
284
-
285
- export const getInitialSelectedTzid = (tzList, tzid) => {
286
- const result = tzList.find(tz => tzid === tz.tzid);
287
- return result;
288
- };
@@ -1,160 +0,0 @@
1
- import React, { useContext } from "react";
2
- import { css } from "@emotion/core";
3
- import moment from "moment-timezone";
4
-
5
- import Button from "../generic/Button";
6
-
7
- import { I18nContext, ThemeContext, StatusContext } from "./SlotPicker";
8
-
9
- import { buttonReset } from "../../styles/utils";
10
-
11
- const Confirm = ({ back, confirm }) => {
12
- const [status] = useContext(StatusContext);
13
- const theme = useContext(ThemeContext);
14
- const i18n = useContext(I18nContext);
15
- const details = status.selected;
16
-
17
- return (
18
- <div
19
- css={css`
20
- padding: ${theme.padding};
21
- display: flex;
22
- justify-content: center;
23
- flex-grow: 1;
24
- align-items: center;
25
- text-align: center;
26
-
27
- flex-grow: 1;
28
- flex-direction: column;
29
- padding-bottom: 60px;
30
- `}
31
- className={`${theme.prefix}__confirmation-wrapper`}
32
- >
33
- <div
34
- className={`${theme.prefix}__slots-header`}
35
- css={css`
36
- display: flex;
37
- justify-content: center;
38
- align-items: center;
39
- position: relative;
40
- height: 22px;
41
- margin-bottom: 20px;
42
- width: 100%;
43
- `}
44
- >
45
- <button
46
- type="button"
47
- css={css`
48
- ${buttonReset};
49
- display: block;
50
- padding: 4px;
51
- height: 22px;
52
- width: 22px;
53
- position: absolute;
54
- top: 50%;
55
- left: 0;
56
- transform: translateY(-50%);
57
- `}
58
- onClick={back}
59
- >
60
- <svg
61
- css={css`
62
- fill: ${theme.colors.grey};
63
- display: block;
64
- width: 18px;
65
- height: 18px;
66
- transform: rotate(-90deg);
67
- `}
68
- className={`${theme.prefix}__slots-icon ${theme.prefix}__slots-icon--back`}
69
- viewBox="0 0 512 364"
70
- >
71
- <path d="M323.114,3.795 C327.274,-0.365 334.037,-0.365 338.197,3.795 L338.197,3.795 L508.466432,174.062857 C510.636034,176.015872 512.001,178.845594 512.001,181.992 C512.001,184.915901 510.822508,187.566325 508.914941,189.493853 L508.864,189.545 L508.864,189.545 L508.84,189.568 L338.198,360.211 C336.21425,362.19475 333.624354,363.237137 331.008322,363.320559 L330.667,363.326 C327.936,363.326 325.206,362.28 323.115,360.211 C318.955,356.051 318.955,349.288 323.115,345.128 L323.115,345.128 L475.583,192.658 L10.667,192.659 C4.87396774,192.659 0.154449792,188.032918 0.00371430969,182.276022 L0,181.992 C0,176.104 4.779,171.325 10.667,171.325 L10.667,171.325 L475.559,171.324 L323.114,18.878 C319.028286,14.7922857 318.955327,8.19570568 322.895122,4.02031761 Z"></path>
72
- </svg>
73
- <span className="visuallyhidden">{i18n.t("back")}</span>
74
- </button>
75
- <span
76
- css={css`
77
- display: block;
78
- padding: 0 10px 0 0;
79
- line-height: 1;
80
- `}
81
- className={`${theme.prefix}__slots-heading`}
82
- >
83
- {i18n.ftz(moment(details.start), "dddd Do MMMM")}
84
- </span>
85
- </div>
86
- <div
87
- css={css`
88
- width: 100%;
89
- margin: 30px auto 0;
90
- `}
91
- className={`${theme.prefix}__confirmation`}
92
- >
93
- <div
94
- css={css`
95
- margin-bottom: 16px;
96
- border: 1px solid ${theme.colors.hairline};
97
- padding: 16px;
98
- width: 100%;
99
- border-radius: 4px;
100
- `}
101
- className={`${theme.prefix}__confirmation-summary`}
102
- >
103
- {i18n.timeToSlotString(details.start)} – {i18n.timeToSlotString(details.end)}
104
- </div>
105
- <div
106
- css={css`
107
- margin: 0 auto;
108
- width: 10em;
109
- `}
110
- className={`${theme.prefix}__confirmation-buttons`}
111
- >
112
- <Button
113
- styleOverrides={theme}
114
- styles={css`
115
- width: 100%;
116
- margin-bottom: 0.5em;
117
- background: ${theme.colors.primary};
118
- color: ${theme.colors.white};
119
- border-radius: 4px;
120
- display: flex;
121
- justify-content: center;
122
- align-items: center;
123
- position: relative;
124
- &:hover {
125
- background: ${theme.colors.primaryDark};
126
- }
127
- `}
128
- className={`${theme.prefix}__confirmation-button`}
129
- onClick={() => confirm(details)}
130
- >
131
- {i18n.t("confirm")}
132
- </Button>
133
- <Button
134
- styleOverrides={theme}
135
- styles={css`
136
- display: flex;
137
- justify-content: center;
138
- align-items: center;
139
- width: 100%;
140
- border-radius: 4px;
141
- border: 1px solid ${theme.colors.hairline};
142
- transition: background 0.2s, border 0.2s;
143
- position: relative;
144
- background: ${theme.colors.greyPale};
145
- &:hover {
146
- background: ${theme.colors.greyLight};
147
- }
148
- `}
149
- className={`${theme.prefix}__confirmation-button--back`}
150
- onClick={back}
151
- >
152
- {i18n.t("cancel")}
153
- </Button>
154
- </div>
155
- </div>
156
- </div>
157
- );
158
- };
159
-
160
- export default Confirm;
@@ -1,58 +0,0 @@
1
- import React, { useContext } from "react";
2
- import { css } from "@emotion/core";
3
-
4
- import Slots from "./Slots";
5
-
6
- import { I18nContext, ThemeContext, DaysContext } from "./SlotPicker";
7
-
8
- const Days = ({ selectDay }) => {
9
- const days = useContext(DaysContext);
10
- const theme = useContext(ThemeContext);
11
- const i18n = useContext(I18nContext);
12
- return (
13
- <div
14
- css={css`
15
- flex-grow: 1;
16
- padding: ${theme.padding};
17
- width: 100%;
18
- display: flex;
19
- justify-content: stretch;
20
- flex-direction: column;
21
- `}
22
- className={`${theme.prefix}__slots-list ${theme.prefix}__slots-list--days`}
23
- >
24
- <div
25
- className={`${theme.prefix}__slots-header`}
26
- css={css`
27
- display: flex;
28
- justify-content: center;
29
- align-items: center;
30
- position: relative;
31
- height: 22px;
32
- margin-bottom: 10px;
33
- `}
34
- >
35
- <span
36
- css={css`
37
- display: block;
38
- padding: 0 10px 0 0;
39
- line-height: 1;
40
- `}
41
- className={`${theme.prefix}__slots-heading`}
42
- >
43
- {i18n.t("select_day")}
44
- </span>
45
- </div>
46
- <div
47
- css={css`
48
- flex-grow: 1;
49
- display: flex;
50
- `}
51
- >
52
- <Slots periods={days} confirm={selectDay} />
53
- </div>
54
- </div>
55
- );
56
- };
57
-
58
- export default Days;
@@ -1,72 +0,0 @@
1
- import React, { useContext } from "react";
2
- import { css } from "@emotion/core";
3
-
4
- import { buttonReset } from "../../styles/utils";
5
-
6
- import { I18nContext, ThemeContext } from "./SlotPicker";
7
-
8
- const Slot = ({ period, confirm }) => {
9
- const theme = useContext(ThemeContext);
10
- const i18n = useContext(I18nContext);
11
-
12
- let slotStyles = css`
13
- ${buttonReset};
14
-
15
- position: relative;
16
- display: block;
17
- width: 100%;
18
- padding: 10px 10px;
19
- cursor: pointer;
20
- transition: background 0.2s, color 0.2s;
21
- font-size: inherit;
22
- background: ${theme.colors.greyPale};
23
- border: 1px solid ${theme.colors.hairline};
24
- border-radius: 4px;
25
- margin-bottom: 10px;
26
- &:hover {
27
- background: ${theme.colors.greyLight};
28
- }
29
- `;
30
-
31
- let unavailableSlotStyles = css`
32
- ${slotStyles};
33
- border-color: transparent;
34
- cursor: default;
35
- &:hover {
36
- background: inherit;
37
- }
38
- `;
39
-
40
- return (
41
- <React.Fragment>
42
- {period.value ? (
43
- <button
44
- type="button"
45
- css={slotStyles}
46
- className={`${theme.prefix}__slot`}
47
- onClick={() => confirm(period.value)}
48
- >
49
- {period.value.start ? (
50
- <span>
51
- {i18n.timeToSlotString(period.value.start)} –{" "}
52
- {i18n.timeToSlotString(period.value.end)}
53
- </span>
54
- ) : (
55
- <span>{i18n.dateToSlotStringWithoutTzShift(period.value)}</span>
56
- )}
57
- </button>
58
- ) : (
59
- <button
60
- type="button"
61
- css={unavailableSlotStyles}
62
- className={`${theme.prefix}__slot--unavailble`}
63
- onClick={() => confirm(period)}
64
- >
65
- {i18n.t("not_applicable")}
66
- </button>
67
- )}
68
- </React.Fragment>
69
- );
70
- };
71
-
72
- export default Slot;