@nylas/web-elements 1.1.0-canary.15 → 1.1.0-canary.17

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 (732) hide show
  1. package/dist/cjs/add-circle-icon.cjs.entry.js +1 -1
  2. package/dist/cjs/add-circle-icon_2.cjs.entry.js +11 -18
  3. package/dist/cjs/add-circle-icon_2.cjs.entry.js.map +1 -1
  4. package/dist/cjs/archive-icon.cjs.entry.js +1 -1
  5. package/dist/cjs/archive-icon_7.cjs.entry.js +7 -7
  6. package/dist/cjs/arrow-icon.cjs.entry.js +1 -1
  7. package/dist/cjs/bold-icon.cjs.entry.js +1 -1
  8. package/dist/cjs/bold-icon_3.cjs.entry.js +3 -3
  9. package/dist/cjs/button-component.cjs.entry.js +1 -1
  10. package/dist/cjs/calendar-cancel-icon.cjs.entry.js +1 -1
  11. package/dist/cjs/calendar-check-icon.cjs.entry.js +1 -1
  12. package/dist/cjs/calendar-check-icon_2.cjs.entry.js +2 -2
  13. package/dist/cjs/calendar-icon.cjs.entry.js +1 -1
  14. package/dist/cjs/calendar-info-icon.cjs.entry.js +1 -1
  15. package/dist/cjs/{calendar-info-icon_25.cjs.entry.js → calendar-info-icon_28.cjs.entry.js} +419 -397
  16. package/dist/cjs/calendar-info-icon_28.cjs.entry.js.map +1 -0
  17. package/dist/cjs/calendar-patterns-icon.cjs.entry.js +1 -1
  18. package/dist/cjs/checkbox-component.cjs.entry.js +1 -1
  19. package/dist/cjs/checkbox-component.cjs.entry.js.map +1 -1
  20. package/dist/cjs/checkmark-circle-icon.cjs.entry.js +1 -1
  21. package/dist/cjs/chevron-icon.cjs.entry.js +1 -1
  22. package/dist/cjs/chevron-icon_3.cjs.entry.js +4 -4
  23. package/dist/cjs/clock-icon.cjs.entry.js +1 -1
  24. package/dist/cjs/clock-icon_2.cjs.entry.js +2 -2
  25. package/dist/cjs/close-icon.cjs.entry.js +1 -1
  26. package/dist/cjs/document-refresh-icon.cjs.entry.js +1 -1
  27. package/dist/cjs/flow-icon.cjs.entry.js +1 -1
  28. package/dist/cjs/folder-icon.cjs.entry.js +1 -1
  29. package/dist/cjs/forward-icon.cjs.entry.js +1 -1
  30. package/dist/cjs/forward-icon_6.cjs.entry.js +7 -7
  31. package/dist/cjs/globe-icon.cjs.entry.js +1 -1
  32. package/dist/cjs/google-logo-icon.cjs.entry.js +1 -1
  33. package/dist/cjs/google-logo-icon_4.cjs.entry.js +101 -78
  34. package/dist/cjs/google-logo-icon_4.cjs.entry.js.map +1 -1
  35. package/dist/cjs/inbox-icon.cjs.entry.js +1 -1
  36. package/dist/cjs/index-7af03e3f.js +12 -20
  37. package/dist/cjs/index-c14ea8f5.js +22 -18
  38. package/dist/cjs/info-icon.cjs.entry.js +1 -1
  39. package/dist/cjs/info-icon_2.cjs.entry.js +2 -2
  40. package/dist/cjs/input-component.cjs.entry.js +1 -1
  41. package/dist/cjs/input-dropdown.cjs.entry.js +21 -4
  42. package/dist/cjs/input-dropdown.cjs.entry.js.map +1 -1
  43. package/dist/cjs/input-dropdown_2.cjs.entry.js +22 -5
  44. package/dist/cjs/input-dropdown_2.cjs.entry.js.map +1 -1
  45. package/dist/cjs/italic-icon.cjs.entry.js +1 -1
  46. package/dist/cjs/loader.cjs.js +1 -1
  47. package/dist/cjs/loading-icon.cjs.entry.js +1 -1
  48. package/dist/cjs/location-icon.cjs.entry.js +1 -1
  49. package/dist/cjs/location-off-icon.cjs.entry.js +1 -1
  50. package/dist/cjs/microsoft-logo-icon.cjs.entry.js +1 -1
  51. package/dist/cjs/multi-select-dropdown.cjs.entry.js +2 -2
  52. package/dist/cjs/nylas-additional-participants.cjs.entry.js +38 -14
  53. package/dist/cjs/nylas-additional-participants.cjs.entry.js.map +1 -1
  54. package/dist/cjs/nylas-availability-picker.cjs.entry.js +27 -16
  55. package/dist/cjs/nylas-availability-picker.cjs.entry.js.map +1 -1
  56. package/dist/cjs/nylas-booked-event-card_10.cjs.entry.js +6 -6
  57. package/dist/cjs/nylas-booked-event-card_10.cjs.entry.js.map +1 -1
  58. package/dist/cjs/nylas-booking-form.cjs.entry.js +2 -2
  59. package/dist/cjs/nylas-booking-form.cjs.entry.js.map +1 -1
  60. package/dist/cjs/nylas-cancel-booking-form.cjs.entry.js +1 -1
  61. package/dist/cjs/nylas-cancelled-event-card.cjs.entry.js +1 -1
  62. package/dist/cjs/nylas-composer.cjs.entry.js +1 -1
  63. package/dist/cjs/nylas-customize-booking-settings.cjs.entry.js +4 -4
  64. package/dist/cjs/nylas-customize-booking-settings.cjs.entry.js.map +1 -1
  65. package/dist/cjs/nylas-editor-tabs.cjs.entry.js +99 -76
  66. package/dist/cjs/nylas-editor-tabs.cjs.entry.js.map +1 -1
  67. package/dist/cjs/nylas-if-state.cjs.entry.js +1 -1
  68. package/dist/cjs/nylas-list-folders.cjs.entry.js +1 -1
  69. package/dist/cjs/nylas-list-threads.cjs.entry.js +1 -1
  70. package/dist/cjs/nylas-login.cjs.entry.js +1 -1
  71. package/dist/cjs/nylas-logo.cjs.entry.js +1 -1
  72. package/dist/cjs/nylas-mailbox-toolbar-button.cjs.entry.js +1 -1
  73. package/dist/cjs/nylas-mailbox.cjs.entry.js +1 -1
  74. package/dist/cjs/nylas-notification.cjs.entry.js +1 -1
  75. package/dist/cjs/nylas-participants-custom-availability.cjs.entry.js +142 -0
  76. package/dist/cjs/nylas-participants-custom-availability.cjs.entry.js.map +1 -0
  77. package/dist/cjs/nylas-provider.cjs.entry.js +2 -2
  78. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +4 -2
  79. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js.map +1 -1
  80. package/dist/cjs/nylas-scheduling.cjs.entry.js +1 -1
  81. package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
  82. package/dist/cjs/nylas-summarize-message-button.cjs.entry.js +2 -2
  83. package/dist/cjs/nylas-threads-refresh.cjs.entry.js +2 -2
  84. package/dist/cjs/nylas-threads-search.cjs.entry.js +1 -1
  85. package/dist/cjs/nylas-time-window-picker.cjs.entry.js +1 -1
  86. package/dist/cjs/nylas-timeslot-interval.cjs.entry.js +2 -2
  87. package/dist/cjs/nylas-view-email.cjs.entry.js +1 -1
  88. package/dist/cjs/nylas-view-thread.cjs.entry.js +1 -1
  89. package/dist/cjs/nylas-web-elements.cjs.js +1 -1
  90. package/dist/cjs/people-icon.cjs.entry.js +1 -1
  91. package/dist/cjs/person-icon.cjs.entry.js +1 -1
  92. package/dist/cjs/play-icon.cjs.entry.js +1 -1
  93. package/dist/cjs/play-icon_2.cjs.entry.js +2 -2
  94. package/dist/cjs/radio-button-group.cjs.entry.js +1 -1
  95. package/dist/cjs/refresh-icon.cjs.entry.js +1 -1
  96. package/dist/cjs/reply-all-icon.cjs.entry.js +1 -1
  97. package/dist/cjs/reply-icon.cjs.entry.js +1 -1
  98. package/dist/cjs/{scheduler-config-store-a5b7c08b.js → scheduler-config-store-0266631b.js} +2 -1
  99. package/dist/cjs/scheduler-config-store-0266631b.js.map +1 -0
  100. package/dist/cjs/{scheduler-config-store-918c20d5.js → scheduler-config-store-9f19c7a9.js} +2 -1
  101. package/dist/cjs/scheduler-config-store-9f19c7a9.js.map +1 -0
  102. package/dist/cjs/scheduler-store-0f7328f1.js.map +1 -1
  103. package/dist/cjs/scheduler-store-743ed238.js.map +1 -1
  104. package/dist/cjs/search-icon.cjs.entry.js +1 -1
  105. package/dist/cjs/select-dropdown.cjs.entry.js +2 -2
  106. package/dist/cjs/sent-icon.cjs.entry.js +1 -1
  107. package/dist/cjs/spam-icon.cjs.entry.js +1 -1
  108. package/dist/cjs/star-icon.cjs.entry.js +1 -1
  109. package/dist/cjs/stop-icon.cjs.entry.js +1 -1
  110. package/dist/cjs/textarea-component.cjs.entry.js +1 -1
  111. package/dist/cjs/time-period-selector.cjs.entry.js +1 -1
  112. package/dist/cjs/toggle-switch.cjs.entry.js +1 -1
  113. package/dist/cjs/toggle-switch.cjs.entry.js.map +1 -1
  114. package/dist/cjs/tooltip-component.cjs.entry.js +1 -1
  115. package/dist/cjs/translate-icon.cjs.entry.js +1 -1
  116. package/dist/cjs/trash-icon.cjs.entry.js +1 -1
  117. package/dist/cjs/underline-icon.cjs.entry.js +1 -1
  118. package/dist/cjs/warning-icon.cjs.entry.js +1 -1
  119. package/dist/collection/collection-manifest.json +1 -0
  120. package/dist/collection/common/icons/add-circle.js +1 -1
  121. package/dist/collection/common/icons/archive.js +1 -1
  122. package/dist/collection/common/icons/arrow.js +1 -1
  123. package/dist/collection/common/icons/bold.js +1 -1
  124. package/dist/collection/common/icons/calendar-cancel.js +1 -1
  125. package/dist/collection/common/icons/calendar-check.js +1 -1
  126. package/dist/collection/common/icons/calendar-info.js +1 -1
  127. package/dist/collection/common/icons/calendar-patterns.js +1 -1
  128. package/dist/collection/common/icons/calendar.js +1 -1
  129. package/dist/collection/common/icons/checkmark-circle.js +1 -1
  130. package/dist/collection/common/icons/chevron.js +1 -1
  131. package/dist/collection/common/icons/clock.js +1 -1
  132. package/dist/collection/common/icons/close.js +1 -1
  133. package/dist/collection/common/icons/document-refresh.js +1 -1
  134. package/dist/collection/common/icons/flow.js +1 -1
  135. package/dist/collection/common/icons/folder.js +1 -1
  136. package/dist/collection/common/icons/forward.js +1 -1
  137. package/dist/collection/common/icons/globe.js +1 -1
  138. package/dist/collection/common/icons/google-logo.js +1 -1
  139. package/dist/collection/common/icons/inbox.js +1 -1
  140. package/dist/collection/common/icons/info.js +1 -1
  141. package/dist/collection/common/icons/italic.js +1 -1
  142. package/dist/collection/common/icons/loading.js +1 -1
  143. package/dist/collection/common/icons/location-off.js +1 -1
  144. package/dist/collection/common/icons/location.js +1 -1
  145. package/dist/collection/common/icons/microsoft-logo.js +1 -1
  146. package/dist/collection/common/icons/nylas-logo.js +1 -1
  147. package/dist/collection/common/icons/people.js +1 -1
  148. package/dist/collection/common/icons/person.js +1 -1
  149. package/dist/collection/common/icons/play.js +1 -1
  150. package/dist/collection/common/icons/refresh.js +1 -1
  151. package/dist/collection/common/icons/reply-all.js +1 -1
  152. package/dist/collection/common/icons/reply.js +1 -1
  153. package/dist/collection/common/icons/search.js +1 -1
  154. package/dist/collection/common/icons/sent.js +1 -1
  155. package/dist/collection/common/icons/spam.js +1 -1
  156. package/dist/collection/common/icons/star.js +1 -1
  157. package/dist/collection/common/icons/stop.js +1 -1
  158. package/dist/collection/common/icons/translate.js +1 -1
  159. package/dist/collection/common/icons/trash.js +1 -1
  160. package/dist/collection/common/icons/underline.js +1 -1
  161. package/dist/collection/common/icons/warning.js +1 -1
  162. package/dist/collection/components/design-system/button-component/button-component.js +1 -1
  163. package/dist/collection/components/design-system/checkbox-component/checkbox-component.js +1 -1
  164. package/dist/collection/components/design-system/checkbox-component/checkbox-component.js.map +1 -1
  165. package/dist/collection/components/design-system/input-component/input-component.js +1 -1
  166. package/dist/collection/components/design-system/input-dropdown/input-dropdown.js +40 -3
  167. package/dist/collection/components/design-system/input-dropdown/input-dropdown.js.map +1 -1
  168. package/dist/collection/components/design-system/multi-select-dropdown/multi-select-dropdown.js +2 -2
  169. package/dist/collection/components/design-system/radio-button-group/radio-button-group.js +1 -1
  170. package/dist/collection/components/design-system/select-dropdown/select-dropdown.js +2 -2
  171. package/dist/collection/components/design-system/textarea-component/textarea-component.js +1 -1
  172. package/dist/collection/components/design-system/time-period-selector/time-period-selector.js +1 -1
  173. package/dist/collection/components/design-system/toggle-switch/toggle-switch.js +1 -1
  174. package/dist/collection/components/design-system/toggle-switch/toggle-switch.js.map +1 -1
  175. package/dist/collection/components/design-system/tooltip-component/toolitp-component.js +1 -1
  176. package/dist/collection/components/mailbox/nylas-composer/nylas-composer.js +1 -1
  177. package/dist/collection/components/mailbox/nylas-list-folders/nylas-list-folders.js +1 -1
  178. package/dist/collection/components/mailbox/nylas-list-threads/nylas-list-threads.js +1 -1
  179. package/dist/collection/components/mailbox/nylas-mailbox/nylas-mailbox.js +1 -1
  180. package/dist/collection/components/mailbox/nylas-mailbox-toolbar-button/nylas-mailbox-toolbar-button.js +1 -1
  181. package/dist/collection/components/mailbox/nylas-summarize-message-button/nylas-summarize-message-button.js +2 -2
  182. package/dist/collection/components/mailbox/nylas-threads-refresh/nylas-threads-refresh.js +2 -2
  183. package/dist/collection/components/mailbox/nylas-threads-search/nylas-threads-search.js +1 -1
  184. package/dist/collection/components/mailbox/nylas-view-email/nylas-view-email.js +1 -1
  185. package/dist/collection/components/mailbox/nylas-view-thread/nylas-view-thread.js +1 -1
  186. package/dist/collection/components/nylas-if-state/nylas-if-state.js +1 -1
  187. package/dist/collection/components/nylas-login/nylas-login.js +1 -1
  188. package/dist/collection/components/nylas-provider/nylas-provider.js +1 -1
  189. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js +2 -2
  190. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js.map +1 -1
  191. package/dist/collection/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.js +2 -2
  192. package/dist/collection/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.js +2 -2
  193. package/dist/collection/components/scheduler/nylas-date-picker/nylas-date-picker.js +1 -1
  194. package/dist/collection/components/scheduler/nylas-notification/nylas-notification.js +1 -1
  195. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.css +1 -0
  196. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.css +20 -1
  197. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js +83 -13
  198. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js.map +1 -1
  199. package/dist/collection/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.css +1 -1
  200. package/dist/collection/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.js +48 -25
  201. package/dist/collection/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.js.map +1 -1
  202. package/dist/collection/components/scheduler-editor/nylas-customize-booking-settings/nylas-customize-booking-settings.js +5 -5
  203. package/dist/collection/components/scheduler-editor/nylas-customize-booking-settings/nylas-customize-booking-settings.js.map +1 -1
  204. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js +95 -76
  205. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js.map +1 -1
  206. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/tab-contents.js +2 -0
  207. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/tab-contents.js.map +1 -1
  208. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.css +98 -0
  209. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js +219 -0
  210. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js.map +1 -0
  211. package/dist/collection/components/scheduler-editor/nylas-scheduler-editor/nylas-scheduler-editor.js +26 -3
  212. package/dist/collection/components/scheduler-editor/nylas-scheduler-editor/nylas-scheduler-editor.js.map +1 -1
  213. package/dist/collection/components/scheduler-editor/nylas-time-window-picker/nylas-time-window-picker.js +1 -1
  214. package/dist/collection/components/scheduler-editor/nylas-timeslot-interval/nylas-timeslot-interval.js +2 -2
  215. package/dist/collection/stores/scheduler-config-store.js +1 -0
  216. package/dist/collection/stores/scheduler-config-store.js.map +1 -1
  217. package/dist/collection/stores/scheduler-store.js.map +1 -1
  218. package/dist/components/add-circle.js +1 -1
  219. package/dist/components/archive.js +1 -1
  220. package/dist/components/arrow.js +1 -1
  221. package/dist/components/bold.js +1 -1
  222. package/dist/components/button-component2.js +1 -1
  223. package/dist/components/calendar-cancel.js +1 -1
  224. package/dist/components/calendar-check.js +1 -1
  225. package/dist/components/calendar-info.js +1 -1
  226. package/dist/components/calendar-patterns.js +1 -1
  227. package/dist/components/calendar.js +1 -1
  228. package/dist/components/checkbox-component2.js +1 -1
  229. package/dist/components/checkbox-component2.js.map +1 -1
  230. package/dist/components/checkmark-circle.js +1 -1
  231. package/dist/components/chevron.js +1 -1
  232. package/dist/components/clock.js +1 -1
  233. package/dist/components/close.js +1 -1
  234. package/dist/components/document-refresh-icon.js +1 -1
  235. package/dist/components/flow.js +1 -1
  236. package/dist/components/folder.js +1 -1
  237. package/dist/components/forward.js +1 -1
  238. package/dist/components/globe.js +1 -1
  239. package/dist/components/google-logo.js +1 -1
  240. package/dist/components/inbox.js +1 -1
  241. package/dist/components/info.js +1 -1
  242. package/dist/components/input-component2.js +1 -1
  243. package/dist/components/input-dropdown2.js +24 -5
  244. package/dist/components/input-dropdown2.js.map +1 -1
  245. package/dist/components/italic.js +1 -1
  246. package/dist/components/loading.js +1 -1
  247. package/dist/components/location-off.js +1 -1
  248. package/dist/components/location.js +1 -1
  249. package/dist/components/microsoft-logo.js +1 -1
  250. package/dist/components/multi-select-dropdown2.js +2 -2
  251. package/dist/components/nylas-additional-participants.js +1 -127
  252. package/dist/components/nylas-additional-participants.js.map +1 -1
  253. package/dist/components/nylas-additional-participants2.js +168 -0
  254. package/dist/components/nylas-additional-participants2.js.map +1 -0
  255. package/dist/components/nylas-availability-picker2.js +28 -16
  256. package/dist/components/nylas-availability-picker2.js.map +1 -1
  257. package/dist/components/nylas-booking-form2.js +2 -2
  258. package/dist/components/nylas-booking-form2.js.map +1 -1
  259. package/dist/components/nylas-cancel-booking-form2.js +1 -1
  260. package/dist/components/nylas-cancelled-event-card2.js +1 -1
  261. package/dist/components/nylas-composer2.js +1 -1
  262. package/dist/components/nylas-customize-booking-settings2.js +4 -4
  263. package/dist/components/nylas-customize-booking-settings2.js.map +1 -1
  264. package/dist/components/nylas-editor-tabs2.js +197 -150
  265. package/dist/components/nylas-editor-tabs2.js.map +1 -1
  266. package/dist/components/nylas-if-state.js +1 -1
  267. package/dist/components/nylas-list-folders.js +1 -1
  268. package/dist/components/nylas-list-threads.js +1 -1
  269. package/dist/components/nylas-login.js +1 -1
  270. package/dist/components/nylas-logo2.js +1 -1
  271. package/dist/components/nylas-mailbox-toolbar-button.js +1 -1
  272. package/dist/components/nylas-mailbox.js +1 -1
  273. package/dist/components/nylas-notification2.js +1 -1
  274. package/dist/components/nylas-participants-custom-availability.d.ts +11 -0
  275. package/dist/components/nylas-participants-custom-availability.js +8 -0
  276. package/dist/components/nylas-participants-custom-availability.js.map +1 -0
  277. package/dist/components/nylas-participants-custom-availability2.js +218 -0
  278. package/dist/components/nylas-participants-custom-availability2.js.map +1 -0
  279. package/dist/components/nylas-provider.js +1 -1
  280. package/dist/components/nylas-scheduler-editor.js +112 -85
  281. package/dist/components/nylas-scheduler-editor.js.map +1 -1
  282. package/dist/components/nylas-scheduling.js +1 -1
  283. package/dist/components/nylas-scheduling.js.map +1 -1
  284. package/dist/components/nylas-summarize-message-button2.js +2 -2
  285. package/dist/components/nylas-threads-refresh.js +2 -2
  286. package/dist/components/nylas-threads-search.js +1 -1
  287. package/dist/components/nylas-time-window-picker2.js +1 -1
  288. package/dist/components/nylas-timeslot-interval2.js +2 -2
  289. package/dist/components/nylas-view-email2.js +1 -1
  290. package/dist/components/nylas-view-thread.js +1 -1
  291. package/dist/components/people-icon.js +1 -32
  292. package/dist/components/people-icon.js.map +1 -1
  293. package/dist/components/people.js +36 -0
  294. package/dist/components/people.js.map +1 -0
  295. package/dist/components/person.js +1 -1
  296. package/dist/components/play.js +1 -1
  297. package/dist/components/radio-button-group2.js +1 -1
  298. package/dist/components/refresh.js +1 -1
  299. package/dist/components/reply-all.js +1 -1
  300. package/dist/components/reply.js +1 -1
  301. package/dist/components/scheduler-config-store.js +1 -0
  302. package/dist/components/scheduler-config-store.js.map +1 -1
  303. package/dist/components/scheduler-store.js.map +1 -1
  304. package/dist/components/search.js +1 -1
  305. package/dist/components/select-dropdown2.js +2 -2
  306. package/dist/components/sent.js +1 -1
  307. package/dist/components/spam.js +1 -1
  308. package/dist/components/star.js +1 -1
  309. package/dist/components/stop.js +1 -1
  310. package/dist/components/textarea-component.js +1 -1
  311. package/dist/components/time-period-selector2.js +1 -1
  312. package/dist/components/toggle-switch.js +1 -49
  313. package/dist/components/toggle-switch.js.map +1 -1
  314. package/dist/components/toggle-switch2.js +53 -0
  315. package/dist/components/toggle-switch2.js.map +1 -0
  316. package/dist/components/toolitp-component.js +1 -1
  317. package/dist/components/translate.js +1 -1
  318. package/dist/components/trash.js +1 -1
  319. package/dist/components/underline.js +1 -1
  320. package/dist/components/warning.js +1 -1
  321. package/dist/esm/add-circle-icon.entry.js +2 -2
  322. package/dist/esm/add-circle-icon_2.entry.js +11 -18
  323. package/dist/esm/add-circle-icon_2.entry.js.map +1 -1
  324. package/dist/esm/archive-icon.entry.js +2 -2
  325. package/dist/esm/archive-icon_7.entry.js +7 -7
  326. package/dist/esm/arrow-icon.entry.js +2 -2
  327. package/dist/esm/bold-icon.entry.js +2 -2
  328. package/dist/esm/bold-icon_3.entry.js +3 -3
  329. package/dist/esm/button-component.entry.js +2 -2
  330. package/dist/esm/calendar-cancel-icon.entry.js +2 -2
  331. package/dist/esm/calendar-check-icon.entry.js +2 -2
  332. package/dist/esm/calendar-check-icon_2.entry.js +2 -2
  333. package/dist/esm/calendar-icon.entry.js +2 -2
  334. package/dist/esm/calendar-info-icon.entry.js +2 -2
  335. package/dist/esm/{calendar-info-icon_25.entry.js → calendar-info-icon_28.entry.js} +417 -398
  336. package/dist/esm/calendar-info-icon_28.entry.js.map +1 -0
  337. package/dist/esm/calendar-patterns-icon.entry.js +2 -2
  338. package/dist/esm/checkbox-component.entry.js +2 -2
  339. package/dist/esm/checkbox-component.entry.js.map +1 -1
  340. package/dist/esm/checkmark-circle-icon.entry.js +2 -2
  341. package/dist/esm/chevron-icon.entry.js +2 -2
  342. package/dist/esm/chevron-icon_3.entry.js +4 -4
  343. package/dist/esm/clock-icon.entry.js +2 -2
  344. package/dist/esm/clock-icon_2.entry.js +2 -2
  345. package/dist/esm/close-icon.entry.js +2 -2
  346. package/dist/esm/document-refresh-icon.entry.js +2 -2
  347. package/dist/esm/flow-icon.entry.js +2 -2
  348. package/dist/esm/folder-icon.entry.js +2 -2
  349. package/dist/esm/forward-icon.entry.js +2 -2
  350. package/dist/esm/forward-icon_6.entry.js +7 -7
  351. package/dist/esm/globe-icon.entry.js +2 -2
  352. package/dist/esm/google-logo-icon.entry.js +2 -2
  353. package/dist/esm/google-logo-icon_4.entry.js +101 -78
  354. package/dist/esm/google-logo-icon_4.entry.js.map +1 -1
  355. package/dist/esm/inbox-icon.entry.js +2 -2
  356. package/dist/esm/{index-11d12497.js → index-2c7e4f4b.js} +2 -2
  357. package/dist/esm/{index-11d12497.js.map → index-2c7e4f4b.js.map} +1 -1
  358. package/dist/esm/{index-8362ce5c.js → index-582cfc93.js} +24 -20
  359. package/dist/esm/{index-8362ce5c.js.map → index-582cfc93.js.map} +1 -1
  360. package/dist/esm/index-7cb0dd3d.js +12 -20
  361. package/dist/{nylas-web-elements/index.es-896126fc.js → esm/index.es-c5a8a1ac.js} +2 -2
  362. package/dist/esm/{index.es-896126fc.js.map → index.es-c5a8a1ac.js.map} +1 -1
  363. package/dist/esm/index.js +4 -4
  364. package/dist/esm/info-icon.entry.js +2 -2
  365. package/dist/esm/info-icon_2.entry.js +2 -2
  366. package/dist/esm/input-component.entry.js +2 -2
  367. package/dist/esm/input-dropdown.entry.js +22 -5
  368. package/dist/esm/input-dropdown.entry.js.map +1 -1
  369. package/dist/esm/input-dropdown_2.entry.js +22 -5
  370. package/dist/esm/input-dropdown_2.entry.js.map +1 -1
  371. package/dist/esm/italic-icon.entry.js +2 -2
  372. package/dist/esm/loader.js +3 -3
  373. package/dist/esm/loading-icon.entry.js +2 -2
  374. package/dist/esm/location-icon.entry.js +2 -2
  375. package/dist/esm/location-off-icon.entry.js +2 -2
  376. package/dist/esm/{mailbox-store-11fa8387.js → mailbox-store-94133e15.js} +4 -4
  377. package/dist/esm/{mailbox-store-11fa8387.js.map → mailbox-store-94133e15.js.map} +1 -1
  378. package/dist/esm/microsoft-logo-icon.entry.js +2 -2
  379. package/dist/esm/multi-select-dropdown.entry.js +4 -4
  380. package/dist/esm/nylas-additional-participants.entry.js +41 -17
  381. package/dist/esm/nylas-additional-participants.entry.js.map +1 -1
  382. package/dist/esm/{nylas-api-request-27e81d64.js → nylas-api-request-5ac7887c.js} +2 -2
  383. package/dist/esm/{nylas-api-request-27e81d64.js.map → nylas-api-request-5ac7887c.js.map} +1 -1
  384. package/dist/esm/nylas-availability-picker.entry.js +30 -19
  385. package/dist/esm/nylas-availability-picker.entry.js.map +1 -1
  386. package/dist/esm/nylas-booked-event-card.entry.js +3 -3
  387. package/dist/esm/nylas-booked-event-card_10.entry.js +6 -6
  388. package/dist/esm/nylas-booked-event-card_10.entry.js.map +1 -1
  389. package/dist/esm/nylas-booking-calendar-picker.entry.js +3 -3
  390. package/dist/esm/nylas-booking-form.entry.js +5 -5
  391. package/dist/esm/nylas-booking-form.entry.js.map +1 -1
  392. package/dist/esm/nylas-buffer-time.entry.js +3 -3
  393. package/dist/esm/nylas-calendar-picker.entry.js +3 -3
  394. package/dist/esm/nylas-cancel-booking-form.entry.js +4 -4
  395. package/dist/esm/nylas-cancellation-policy.entry.js +3 -3
  396. package/dist/esm/nylas-cancelled-event-card.entry.js +4 -4
  397. package/dist/esm/nylas-composer.entry.js +3 -3
  398. package/dist/esm/nylas-custom-booking-flow.entry.js +3 -3
  399. package/dist/esm/nylas-customize-booking-settings.entry.js +7 -7
  400. package/dist/esm/nylas-customize-booking-settings.entry.js.map +1 -1
  401. package/dist/esm/nylas-date-picker.entry.js +3 -3
  402. package/dist/esm/nylas-editor-tabs.entry.js +102 -79
  403. package/dist/esm/nylas-editor-tabs.entry.js.map +1 -1
  404. package/dist/esm/nylas-event-description.entry.js +3 -3
  405. package/dist/esm/nylas-event-duration.entry.js +3 -3
  406. package/dist/esm/nylas-event-info.entry.js +3 -3
  407. package/dist/esm/nylas-event-limits.entry.js +3 -3
  408. package/dist/esm/nylas-event-location.entry.js +3 -3
  409. package/dist/esm/nylas-event-title.entry.js +3 -3
  410. package/dist/esm/nylas-form-card.entry.js +3 -3
  411. package/dist/esm/nylas-if-state.entry.js +4 -4
  412. package/dist/esm/nylas-limit-future-bookings.entry.js +3 -3
  413. package/dist/esm/nylas-list-configurations.entry.js +3 -3
  414. package/dist/esm/nylas-list-folders.entry.js +4 -4
  415. package/dist/esm/nylas-list-threads.entry.js +4 -4
  416. package/dist/esm/nylas-locale-switch.entry.js +3 -3
  417. package/dist/esm/nylas-login.entry.js +4 -4
  418. package/dist/esm/nylas-logo.entry.js +2 -2
  419. package/dist/esm/nylas-mailbox-pagination.entry.js +3 -3
  420. package/dist/esm/nylas-mailbox-toolbar-button.entry.js +4 -4
  421. package/dist/esm/nylas-mailbox.entry.js +6 -6
  422. package/dist/esm/nylas-min-booking-notice.entry.js +3 -3
  423. package/dist/esm/nylas-min-cancellation-notice.entry.js +3 -3
  424. package/dist/esm/nylas-notification.entry.js +3 -3
  425. package/dist/esm/nylas-participants-custom-availability.entry.js +138 -0
  426. package/dist/esm/nylas-participants-custom-availability.entry.js.map +1 -0
  427. package/dist/esm/nylas-provider.entry.js +8 -8
  428. package/dist/esm/nylas-scheduler-editor.entry.js +9 -7
  429. package/dist/esm/nylas-scheduler-editor.entry.js.map +1 -1
  430. package/dist/esm/nylas-scheduling.entry.js +6 -6
  431. package/dist/esm/nylas-scheduling.entry.js.map +1 -1
  432. package/dist/esm/nylas-selected-event-card.entry.js +3 -3
  433. package/dist/esm/nylas-summarize-message-button.entry.js +5 -5
  434. package/dist/esm/nylas-threads-refresh.entry.js +5 -5
  435. package/dist/esm/nylas-threads-search.entry.js +4 -4
  436. package/dist/esm/nylas-time-window-picker.entry.js +3 -3
  437. package/dist/esm/nylas-timeslot-interval.entry.js +5 -5
  438. package/dist/esm/nylas-timeslot-picker.entry.js +3 -3
  439. package/dist/esm/nylas-view-email.entry.js +3 -3
  440. package/dist/esm/nylas-view-thread.entry.js +4 -4
  441. package/dist/esm/nylas-web-elements.js +3 -3
  442. package/dist/esm/people-icon.entry.js +2 -2
  443. package/dist/esm/person-icon.entry.js +2 -2
  444. package/dist/esm/play-icon.entry.js +2 -2
  445. package/dist/esm/play-icon_2.entry.js +2 -2
  446. package/dist/esm/radio-button-group.entry.js +2 -2
  447. package/dist/esm/refresh-icon.entry.js +2 -2
  448. package/dist/esm/{register-component-8e4e394f.js → register-component-aef40ec4.js} +3 -3
  449. package/dist/esm/{register-component-8e4e394f.js.map → register-component-aef40ec4.js.map} +1 -1
  450. package/dist/esm/reply-all-icon.entry.js +2 -2
  451. package/dist/esm/reply-icon.entry.js +2 -2
  452. package/dist/esm/{scheduler-config-store-ec3b6190.js → scheduler-config-store-4a50a03d.js} +2 -1
  453. package/dist/esm/scheduler-config-store-4a50a03d.js.map +1 -0
  454. package/dist/{nylas-web-elements/scheduler-config-store-8ccc8dc7.js → esm/scheduler-config-store-f20845ad.js} +3 -2
  455. package/dist/esm/scheduler-config-store-f20845ad.js.map +1 -0
  456. package/dist/{nylas-web-elements/scheduler-store-c3af2560.js → esm/scheduler-store-6c4866d6.js} +3 -3
  457. package/dist/esm/{scheduler-store-c3af2560.js.map → scheduler-store-6c4866d6.js.map} +1 -1
  458. package/dist/esm/scheduler-store-f02ce045.js.map +1 -1
  459. package/dist/esm/search-icon.entry.js +2 -2
  460. package/dist/esm/select-dropdown.entry.js +3 -3
  461. package/dist/esm/sent-icon.entry.js +2 -2
  462. package/dist/esm/spam-icon.entry.js +2 -2
  463. package/dist/esm/star-icon.entry.js +2 -2
  464. package/dist/esm/stop-icon.entry.js +2 -2
  465. package/dist/esm/textarea-component.entry.js +2 -2
  466. package/dist/esm/time-period-selector.entry.js +3 -3
  467. package/dist/esm/toggle-switch.entry.js +2 -2
  468. package/dist/esm/toggle-switch.entry.js.map +1 -1
  469. package/dist/esm/tooltip-component.entry.js +2 -2
  470. package/dist/esm/translate-icon.entry.js +2 -2
  471. package/dist/esm/trash-icon.entry.js +2 -2
  472. package/dist/esm/underline-icon.entry.js +2 -2
  473. package/dist/esm/{utils-49a1d17b.js → utils-04c10cbd.js} +2 -2
  474. package/dist/esm/{utils-49a1d17b.js.map → utils-04c10cbd.js.map} +1 -1
  475. package/dist/esm/warning-icon.entry.js +2 -2
  476. package/dist/nylas-web-elements/add-circle-icon.entry.js +2 -2
  477. package/dist/nylas-web-elements/archive-icon.entry.js +2 -2
  478. package/dist/nylas-web-elements/arrow-icon.entry.js +2 -2
  479. package/dist/nylas-web-elements/bold-icon.entry.js +2 -2
  480. package/dist/nylas-web-elements/button-component.entry.js +2 -2
  481. package/dist/nylas-web-elements/calendar-cancel-icon.entry.js +2 -2
  482. package/dist/nylas-web-elements/calendar-check-icon.entry.js +2 -2
  483. package/dist/nylas-web-elements/calendar-icon.entry.js +2 -2
  484. package/dist/nylas-web-elements/calendar-info-icon.entry.js +2 -2
  485. package/dist/nylas-web-elements/calendar-patterns-icon.entry.js +2 -2
  486. package/dist/nylas-web-elements/checkbox-component.entry.js +2 -2
  487. package/dist/nylas-web-elements/checkbox-component.entry.js.map +1 -1
  488. package/dist/nylas-web-elements/checkmark-circle-icon.entry.js +2 -2
  489. package/dist/nylas-web-elements/chevron-icon.entry.js +2 -2
  490. package/dist/nylas-web-elements/clock-icon.entry.js +2 -2
  491. package/dist/nylas-web-elements/close-icon.entry.js +2 -2
  492. package/dist/nylas-web-elements/document-refresh-icon.entry.js +2 -2
  493. package/dist/nylas-web-elements/flow-icon.entry.js +2 -2
  494. package/dist/nylas-web-elements/folder-icon.entry.js +2 -2
  495. package/dist/nylas-web-elements/forward-icon.entry.js +2 -2
  496. package/dist/nylas-web-elements/globe-icon.entry.js +2 -2
  497. package/dist/nylas-web-elements/google-logo-icon.entry.js +2 -2
  498. package/dist/nylas-web-elements/inbox-icon.entry.js +2 -2
  499. package/dist/nylas-web-elements/{index-11d12497.js → index-2c7e4f4b.js} +2 -2
  500. package/dist/nylas-web-elements/{index-11d12497.js.map → index-2c7e4f4b.js.map} +1 -1
  501. package/dist/nylas-web-elements/{index-8362ce5c.js → index-582cfc93.js} +2 -2
  502. package/dist/nylas-web-elements/{index-8362ce5c.js.map → index-582cfc93.js.map} +1 -1
  503. package/dist/{esm/index.es-896126fc.js → nylas-web-elements/index.es-c5a8a1ac.js} +2 -2
  504. package/dist/nylas-web-elements/{index.es-896126fc.js.map → index.es-c5a8a1ac.js.map} +1 -1
  505. package/dist/nylas-web-elements/index.esm.js +4 -4
  506. package/dist/nylas-web-elements/info-icon.entry.js +2 -2
  507. package/dist/nylas-web-elements/input-component.entry.js +2 -2
  508. package/dist/nylas-web-elements/input-dropdown.entry.js +22 -5
  509. package/dist/nylas-web-elements/input-dropdown.entry.js.map +1 -1
  510. package/dist/nylas-web-elements/italic-icon.entry.js +2 -2
  511. package/dist/nylas-web-elements/loading-icon.entry.js +2 -2
  512. package/dist/nylas-web-elements/location-icon.entry.js +2 -2
  513. package/dist/nylas-web-elements/location-off-icon.entry.js +2 -2
  514. package/dist/nylas-web-elements/{mailbox-store-11fa8387.js → mailbox-store-94133e15.js} +4 -4
  515. package/dist/nylas-web-elements/{mailbox-store-11fa8387.js.map → mailbox-store-94133e15.js.map} +1 -1
  516. package/dist/nylas-web-elements/microsoft-logo-icon.entry.js +2 -2
  517. package/dist/nylas-web-elements/multi-select-dropdown.entry.js +4 -4
  518. package/dist/nylas-web-elements/nylas-additional-participants.entry.js +41 -17
  519. package/dist/nylas-web-elements/nylas-additional-participants.entry.js.map +1 -1
  520. package/dist/nylas-web-elements/{nylas-api-request-27e81d64.js → nylas-api-request-5ac7887c.js} +2 -2
  521. package/dist/nylas-web-elements/{nylas-api-request-27e81d64.js.map → nylas-api-request-5ac7887c.js.map} +1 -1
  522. package/dist/nylas-web-elements/nylas-availability-picker.entry.js +30 -19
  523. package/dist/nylas-web-elements/nylas-availability-picker.entry.js.map +1 -1
  524. package/dist/nylas-web-elements/nylas-booked-event-card.entry.js +3 -3
  525. package/dist/nylas-web-elements/nylas-booking-calendar-picker.entry.js +3 -3
  526. package/dist/nylas-web-elements/nylas-booking-form.entry.js +5 -5
  527. package/dist/nylas-web-elements/nylas-booking-form.entry.js.map +1 -1
  528. package/dist/nylas-web-elements/nylas-buffer-time.entry.js +3 -3
  529. package/dist/nylas-web-elements/nylas-calendar-picker.entry.js +3 -3
  530. package/dist/nylas-web-elements/nylas-cancel-booking-form.entry.js +4 -4
  531. package/dist/nylas-web-elements/nylas-cancellation-policy.entry.js +3 -3
  532. package/dist/nylas-web-elements/nylas-cancelled-event-card.entry.js +4 -4
  533. package/dist/nylas-web-elements/nylas-composer.entry.js +3 -3
  534. package/dist/nylas-web-elements/nylas-custom-booking-flow.entry.js +3 -3
  535. package/dist/nylas-web-elements/nylas-customize-booking-settings.entry.js +7 -7
  536. package/dist/nylas-web-elements/nylas-customize-booking-settings.entry.js.map +1 -1
  537. package/dist/nylas-web-elements/nylas-date-picker.entry.js +3 -3
  538. package/dist/nylas-web-elements/nylas-editor-tabs.entry.js +102 -79
  539. package/dist/nylas-web-elements/nylas-editor-tabs.entry.js.map +1 -1
  540. package/dist/nylas-web-elements/nylas-event-description.entry.js +3 -3
  541. package/dist/nylas-web-elements/nylas-event-duration.entry.js +3 -3
  542. package/dist/nylas-web-elements/nylas-event-info.entry.js +3 -3
  543. package/dist/nylas-web-elements/nylas-event-limits.entry.js +3 -3
  544. package/dist/nylas-web-elements/nylas-event-location.entry.js +3 -3
  545. package/dist/nylas-web-elements/nylas-event-title.entry.js +3 -3
  546. package/dist/nylas-web-elements/nylas-form-card.entry.js +3 -3
  547. package/dist/nylas-web-elements/nylas-if-state.entry.js +4 -4
  548. package/dist/nylas-web-elements/nylas-limit-future-bookings.entry.js +3 -3
  549. package/dist/nylas-web-elements/nylas-list-configurations.entry.js +3 -3
  550. package/dist/nylas-web-elements/nylas-list-folders.entry.js +4 -4
  551. package/dist/nylas-web-elements/nylas-list-threads.entry.js +4 -4
  552. package/dist/nylas-web-elements/nylas-locale-switch.entry.js +3 -3
  553. package/dist/nylas-web-elements/nylas-login.entry.js +4 -4
  554. package/dist/nylas-web-elements/nylas-logo.entry.js +2 -2
  555. package/dist/nylas-web-elements/nylas-mailbox-pagination.entry.js +3 -3
  556. package/dist/nylas-web-elements/nylas-mailbox-toolbar-button.entry.js +4 -4
  557. package/dist/nylas-web-elements/nylas-mailbox.entry.js +6 -6
  558. package/dist/nylas-web-elements/nylas-min-booking-notice.entry.js +3 -3
  559. package/dist/nylas-web-elements/nylas-min-cancellation-notice.entry.js +3 -3
  560. package/dist/nylas-web-elements/nylas-notification.entry.js +3 -3
  561. package/dist/nylas-web-elements/nylas-participants-custom-availability.entry.js +138 -0
  562. package/dist/nylas-web-elements/nylas-participants-custom-availability.entry.js.map +1 -0
  563. package/dist/nylas-web-elements/nylas-provider.entry.js +8 -8
  564. package/dist/nylas-web-elements/nylas-scheduler-editor.entry.js +9 -7
  565. package/dist/nylas-web-elements/nylas-scheduler-editor.entry.js.map +1 -1
  566. package/dist/nylas-web-elements/nylas-scheduling.entry.js +6 -6
  567. package/dist/nylas-web-elements/nylas-scheduling.entry.js.map +1 -1
  568. package/dist/nylas-web-elements/nylas-selected-event-card.entry.js +3 -3
  569. package/dist/nylas-web-elements/nylas-summarize-message-button.entry.js +5 -5
  570. package/dist/nylas-web-elements/nylas-threads-refresh.entry.js +5 -5
  571. package/dist/nylas-web-elements/nylas-threads-search.entry.js +4 -4
  572. package/dist/nylas-web-elements/nylas-time-window-picker.entry.js +3 -3
  573. package/dist/nylas-web-elements/nylas-timeslot-interval.entry.js +5 -5
  574. package/dist/nylas-web-elements/nylas-timeslot-picker.entry.js +3 -3
  575. package/dist/nylas-web-elements/nylas-view-email.entry.js +3 -3
  576. package/dist/nylas-web-elements/nylas-view-thread.entry.js +4 -4
  577. package/dist/nylas-web-elements/nylas-web-elements.esm.js +3 -3
  578. package/dist/nylas-web-elements/{p-e4a7746d.entry.js → p-012cb022.entry.js} +2 -2
  579. package/dist/nylas-web-elements/{p-b9064de4.entry.js → p-017f2538.entry.js} +2 -2
  580. package/dist/nylas-web-elements/p-05833164.entry.js +2 -0
  581. package/dist/nylas-web-elements/p-05833164.entry.js.map +1 -0
  582. package/dist/nylas-web-elements/p-086746ee.entry.js +2 -0
  583. package/dist/nylas-web-elements/p-086746ee.entry.js.map +1 -0
  584. package/dist/nylas-web-elements/p-0919bbbe.entry.js +2 -0
  585. package/dist/nylas-web-elements/{p-da21471c.entry.js → p-13eb1a05.entry.js} +2 -2
  586. package/dist/nylas-web-elements/{p-deafc6bc.entry.js → p-1569f74f.entry.js} +2 -2
  587. package/dist/nylas-web-elements/{p-6e888067.entry.js → p-23c143f6.entry.js} +2 -2
  588. package/dist/nylas-web-elements/p-2743621d.entry.js +2 -0
  589. package/dist/nylas-web-elements/p-2743621d.entry.js.map +1 -0
  590. package/dist/nylas-web-elements/p-29938263.js +2 -0
  591. package/dist/nylas-web-elements/p-29938263.js.map +1 -0
  592. package/dist/nylas-web-elements/{p-afd34a25.entry.js → p-2f656fb3.entry.js} +3 -3
  593. package/dist/nylas-web-elements/p-2f656fb3.entry.js.map +1 -0
  594. package/dist/nylas-web-elements/{p-a7dd4c24.entry.js → p-30144ca0.entry.js} +2 -2
  595. package/dist/nylas-web-elements/{p-11f94952.entry.js → p-336631dd.entry.js} +2 -2
  596. package/dist/nylas-web-elements/p-43bfaa93.entry.js +2 -0
  597. package/dist/nylas-web-elements/{p-120d2c72.entry.js → p-4e48846a.entry.js} +2 -2
  598. package/dist/nylas-web-elements/{p-4b84ab3f.entry.js → p-5fd52ecd.entry.js} +2 -2
  599. package/dist/nylas-web-elements/p-62cf46ee.entry.js +2 -0
  600. package/dist/nylas-web-elements/{p-32682655.entry.js → p-672f1951.entry.js} +2 -2
  601. package/dist/nylas-web-elements/p-823c8aa2.js.map +1 -1
  602. package/dist/nylas-web-elements/{p-ace74b9d.entry.js → p-84c53084.entry.js} +2 -2
  603. package/dist/nylas-web-elements/p-8c1a5e57.entry.js +2 -0
  604. package/dist/nylas-web-elements/p-8c1a5e57.entry.js.map +1 -0
  605. package/dist/nylas-web-elements/p-8eddadb3.entry.js +2 -0
  606. package/dist/nylas-web-elements/{p-0dbc0c01.entry.js.map → p-8eddadb3.entry.js.map} +1 -1
  607. package/dist/nylas-web-elements/p-938d4ec9.entry.js +2 -0
  608. package/dist/nylas-web-elements/{p-fbac3865.entry.js.map → p-938d4ec9.entry.js.map} +1 -1
  609. package/dist/nylas-web-elements/{p-6891ad5d.entry.js → p-a118f20c.entry.js} +2 -2
  610. package/dist/nylas-web-elements/{p-24082558.entry.js → p-a5dbdc8e.entry.js} +2 -2
  611. package/dist/nylas-web-elements/{p-4fdc6122.entry.js → p-a7640232.entry.js} +2 -2
  612. package/dist/nylas-web-elements/{p-27db7b0b.entry.js → p-ad93d3bd.entry.js} +3 -3
  613. package/dist/nylas-web-elements/{p-bfd3b5f0.entry.js → p-b3d46e08.entry.js} +2 -2
  614. package/dist/nylas-web-elements/{p-4b1466b3.entry.js → p-b443f769.entry.js} +2 -2
  615. package/dist/nylas-web-elements/{p-c8c737ed.entry.js → p-c1df61d0.entry.js} +2 -2
  616. package/dist/nylas-web-elements/{p-395f49eb.entry.js → p-cc67e6a8.entry.js} +2 -2
  617. package/dist/nylas-web-elements/p-d1d984c5.entry.js +2 -0
  618. package/dist/nylas-web-elements/p-d1d984c5.entry.js.map +1 -0
  619. package/dist/nylas-web-elements/{p-98a2f588.entry.js → p-d9a145a5.entry.js} +2 -2
  620. package/dist/nylas-web-elements/p-dcb497d4.entry.js +2 -0
  621. package/dist/nylas-web-elements/p-dcb497d4.entry.js.map +1 -0
  622. package/dist/nylas-web-elements/{p-ec26560f.entry.js → p-e9c1e983.entry.js} +2 -2
  623. package/dist/nylas-web-elements/p-e9f7d494.entry.js +2 -0
  624. package/dist/nylas-web-elements/{p-53da3000.entry.js.map → p-e9f7d494.entry.js.map} +1 -1
  625. package/dist/nylas-web-elements/p-f1e9ed6b.entry.js +2 -0
  626. package/dist/nylas-web-elements/p-f1e9ed6b.entry.js.map +1 -0
  627. package/dist/nylas-web-elements/p-f8e0164c.entry.js +2 -0
  628. package/dist/nylas-web-elements/p-f8e0164c.entry.js.map +1 -0
  629. package/dist/nylas-web-elements/{p-84529d9b.entry.js → p-fbfa3a7d.entry.js} +2 -2
  630. package/dist/nylas-web-elements/{p-d5146511.entry.js → p-fd8e29e6.entry.js} +2 -2
  631. package/dist/nylas-web-elements/people-icon.entry.js +2 -2
  632. package/dist/nylas-web-elements/person-icon.entry.js +2 -2
  633. package/dist/nylas-web-elements/play-icon.entry.js +2 -2
  634. package/dist/nylas-web-elements/radio-button-group.entry.js +2 -2
  635. package/dist/nylas-web-elements/refresh-icon.entry.js +2 -2
  636. package/dist/nylas-web-elements/{register-component-8e4e394f.js → register-component-aef40ec4.js} +3 -3
  637. package/dist/nylas-web-elements/{register-component-8e4e394f.js.map → register-component-aef40ec4.js.map} +1 -1
  638. package/dist/nylas-web-elements/reply-all-icon.entry.js +2 -2
  639. package/dist/nylas-web-elements/reply-icon.entry.js +2 -2
  640. package/dist/{esm/scheduler-config-store-8ccc8dc7.js → nylas-web-elements/scheduler-config-store-f20845ad.js} +3 -2
  641. package/dist/nylas-web-elements/scheduler-config-store-f20845ad.js.map +1 -0
  642. package/dist/{esm/scheduler-store-c3af2560.js → nylas-web-elements/scheduler-store-6c4866d6.js} +3 -3
  643. package/dist/nylas-web-elements/{scheduler-store-c3af2560.js.map → scheduler-store-6c4866d6.js.map} +1 -1
  644. package/dist/nylas-web-elements/search-icon.entry.js +2 -2
  645. package/dist/nylas-web-elements/select-dropdown.entry.js +3 -3
  646. package/dist/nylas-web-elements/sent-icon.entry.js +2 -2
  647. package/dist/nylas-web-elements/spam-icon.entry.js +2 -2
  648. package/dist/nylas-web-elements/star-icon.entry.js +2 -2
  649. package/dist/nylas-web-elements/stop-icon.entry.js +2 -2
  650. package/dist/nylas-web-elements/textarea-component.entry.js +2 -2
  651. package/dist/nylas-web-elements/time-period-selector.entry.js +3 -3
  652. package/dist/nylas-web-elements/toggle-switch.entry.js +2 -2
  653. package/dist/nylas-web-elements/toggle-switch.entry.js.map +1 -1
  654. package/dist/nylas-web-elements/tooltip-component.entry.js +2 -2
  655. package/dist/nylas-web-elements/translate-icon.entry.js +2 -2
  656. package/dist/nylas-web-elements/trash-icon.entry.js +2 -2
  657. package/dist/nylas-web-elements/underline-icon.entry.js +2 -2
  658. package/dist/nylas-web-elements/{utils-49a1d17b.js → utils-04c10cbd.js} +2 -2
  659. package/dist/nylas-web-elements/{utils-49a1d17b.js.map → utils-04c10cbd.js.map} +1 -1
  660. package/dist/nylas-web-elements/warning-icon.entry.js +2 -2
  661. package/dist/types/components/design-system/input-dropdown/input-dropdown.d.ts +3 -0
  662. package/dist/types/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.d.ts +16 -1
  663. package/dist/types/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.d.ts +2 -4
  664. package/dist/types/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.d.ts +12 -5
  665. package/dist/types/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.d.ts +36 -0
  666. package/dist/types/components/scheduler-editor/nylas-scheduler-editor/nylas-scheduler-editor.d.ts +2 -0
  667. package/dist/types/components.d.ts +134 -11
  668. package/dist/types/stores/scheduler-config-store.d.ts +2 -1
  669. package/dist/types/stores/scheduler-store.d.ts +1 -1
  670. package/package.json +2 -2
  671. package/dist/cjs/calendar-info-icon_25.cjs.entry.js.map +0 -1
  672. package/dist/cjs/scheduler-config-store-918c20d5.js.map +0 -1
  673. package/dist/cjs/scheduler-config-store-a5b7c08b.js.map +0 -1
  674. package/dist/esm/calendar-info-icon_25.entry.js.map +0 -1
  675. package/dist/esm/scheduler-config-store-8ccc8dc7.js.map +0 -1
  676. package/dist/esm/scheduler-config-store-ec3b6190.js.map +0 -1
  677. package/dist/nylas-web-elements/p-0dbc0c01.entry.js +0 -2
  678. package/dist/nylas-web-elements/p-155942d0.entry.js +0 -2
  679. package/dist/nylas-web-elements/p-155942d0.entry.js.map +0 -1
  680. package/dist/nylas-web-elements/p-237d2b4e.entry.js +0 -2
  681. package/dist/nylas-web-elements/p-237d2b4e.entry.js.map +0 -1
  682. package/dist/nylas-web-elements/p-2e813dd0.entry.js +0 -2
  683. package/dist/nylas-web-elements/p-2e813dd0.entry.js.map +0 -1
  684. package/dist/nylas-web-elements/p-35b66ab6.entry.js +0 -2
  685. package/dist/nylas-web-elements/p-35b66ab6.entry.js.map +0 -1
  686. package/dist/nylas-web-elements/p-3fd63454.entry.js +0 -2
  687. package/dist/nylas-web-elements/p-3fd63454.entry.js.map +0 -1
  688. package/dist/nylas-web-elements/p-53da3000.entry.js +0 -2
  689. package/dist/nylas-web-elements/p-6239608c.entry.js +0 -2
  690. package/dist/nylas-web-elements/p-6239608c.entry.js.map +0 -1
  691. package/dist/nylas-web-elements/p-7fac2bba.entry.js +0 -2
  692. package/dist/nylas-web-elements/p-86895fc4.entry.js +0 -2
  693. package/dist/nylas-web-elements/p-86895fc4.entry.js.map +0 -1
  694. package/dist/nylas-web-elements/p-afd34a25.entry.js.map +0 -1
  695. package/dist/nylas-web-elements/p-b406bf70.entry.js +0 -2
  696. package/dist/nylas-web-elements/p-b406bf70.entry.js.map +0 -1
  697. package/dist/nylas-web-elements/p-c170c56d.entry.js +0 -2
  698. package/dist/nylas-web-elements/p-de63bc35.entry.js +0 -2
  699. package/dist/nylas-web-elements/p-ee91a2a0.js +0 -2
  700. package/dist/nylas-web-elements/p-ee91a2a0.js.map +0 -1
  701. package/dist/nylas-web-elements/p-f1bd124d.entry.js +0 -2
  702. package/dist/nylas-web-elements/p-f1bd124d.entry.js.map +0 -1
  703. package/dist/nylas-web-elements/p-fac4d89e.entry.js +0 -2
  704. package/dist/nylas-web-elements/p-fac4d89e.entry.js.map +0 -1
  705. package/dist/nylas-web-elements/p-fbac3865.entry.js +0 -2
  706. package/dist/nylas-web-elements/scheduler-config-store-8ccc8dc7.js.map +0 -1
  707. /package/dist/nylas-web-elements/{p-e4a7746d.entry.js.map → p-012cb022.entry.js.map} +0 -0
  708. /package/dist/nylas-web-elements/{p-b9064de4.entry.js.map → p-017f2538.entry.js.map} +0 -0
  709. /package/dist/nylas-web-elements/{p-de63bc35.entry.js.map → p-0919bbbe.entry.js.map} +0 -0
  710. /package/dist/nylas-web-elements/{p-da21471c.entry.js.map → p-13eb1a05.entry.js.map} +0 -0
  711. /package/dist/nylas-web-elements/{p-deafc6bc.entry.js.map → p-1569f74f.entry.js.map} +0 -0
  712. /package/dist/nylas-web-elements/{p-6e888067.entry.js.map → p-23c143f6.entry.js.map} +0 -0
  713. /package/dist/nylas-web-elements/{p-a7dd4c24.entry.js.map → p-30144ca0.entry.js.map} +0 -0
  714. /package/dist/nylas-web-elements/{p-11f94952.entry.js.map → p-336631dd.entry.js.map} +0 -0
  715. /package/dist/nylas-web-elements/{p-7fac2bba.entry.js.map → p-43bfaa93.entry.js.map} +0 -0
  716. /package/dist/nylas-web-elements/{p-120d2c72.entry.js.map → p-4e48846a.entry.js.map} +0 -0
  717. /package/dist/nylas-web-elements/{p-4b84ab3f.entry.js.map → p-5fd52ecd.entry.js.map} +0 -0
  718. /package/dist/nylas-web-elements/{p-c170c56d.entry.js.map → p-62cf46ee.entry.js.map} +0 -0
  719. /package/dist/nylas-web-elements/{p-32682655.entry.js.map → p-672f1951.entry.js.map} +0 -0
  720. /package/dist/nylas-web-elements/{p-ace74b9d.entry.js.map → p-84c53084.entry.js.map} +0 -0
  721. /package/dist/nylas-web-elements/{p-6891ad5d.entry.js.map → p-a118f20c.entry.js.map} +0 -0
  722. /package/dist/nylas-web-elements/{p-24082558.entry.js.map → p-a5dbdc8e.entry.js.map} +0 -0
  723. /package/dist/nylas-web-elements/{p-4fdc6122.entry.js.map → p-a7640232.entry.js.map} +0 -0
  724. /package/dist/nylas-web-elements/{p-27db7b0b.entry.js.map → p-ad93d3bd.entry.js.map} +0 -0
  725. /package/dist/nylas-web-elements/{p-bfd3b5f0.entry.js.map → p-b3d46e08.entry.js.map} +0 -0
  726. /package/dist/nylas-web-elements/{p-4b1466b3.entry.js.map → p-b443f769.entry.js.map} +0 -0
  727. /package/dist/nylas-web-elements/{p-c8c737ed.entry.js.map → p-c1df61d0.entry.js.map} +0 -0
  728. /package/dist/nylas-web-elements/{p-395f49eb.entry.js.map → p-cc67e6a8.entry.js.map} +0 -0
  729. /package/dist/nylas-web-elements/{p-98a2f588.entry.js.map → p-d9a145a5.entry.js.map} +0 -0
  730. /package/dist/nylas-web-elements/{p-ec26560f.entry.js.map → p-e9c1e983.entry.js.map} +0 -0
  731. /package/dist/nylas-web-elements/{p-84529d9b.entry.js.map → p-fbfa3a7d.entry.js.map} +0 -0
  732. /package/dist/nylas-web-elements/{p-d5146511.entry.js.map → p-fd8e29e6.entry.js.map} +0 -0
@@ -19,6 +19,7 @@ export class NylasAdditionalParticipants {
19
19
  constructor() {
20
20
  this.name = 'participants';
21
21
  this.eventParticipants = undefined;
22
+ this.participantOptions = undefined;
22
23
  this.participants = this.eventParticipants ?? [];
23
24
  this.participantsValid = true;
24
25
  }
@@ -35,39 +36,60 @@ export class NylasAdditionalParticipants {
35
36
  }
36
37
  componentDidLoad() {
37
38
  debug('nylas-additional-participants', 'componentDidLoad');
38
- this.internals.setFormValue(JSON.stringify(this.participants), 'participants');
39
+ this.updateFormValue();
39
40
  }
40
41
  disconnectedCallback() {
41
42
  debug('nylas-additional-participants', 'disconnectedCallback');
42
43
  }
44
+ onInputOptionChanged(event) {
45
+ debug('nylas-additional-participants', 'onInputOptionChanged');
46
+ const index = event.detail.name;
47
+ this.participants[index].email = event.detail.value;
48
+ const participant = this.participantOptions?.find(participant => participant.email === event.detail.value);
49
+ this.participants[index].availability = participant ? { calendar_ids: ['primary'] } : undefined;
50
+ this.participants[index].name = participant?.name || event.detail.value;
51
+ this.participants = [...this.participants];
52
+ this.updateFormValue();
53
+ }
43
54
  onParticipantChange(event, index) {
44
55
  debug('nylas-additional-participants', 'onParticipantChange');
45
56
  this.participants[index].email = event.target.value;
46
- this.internals.setFormValue(JSON.stringify(this.participants), 'participants');
57
+ this.updateFormValue();
47
58
  }
48
59
  addParticipant() {
49
60
  debug('nylas-additional-participants', 'addParticipant');
50
- this.participants = [...this.participants, { email: '', is_organizer: false, availability: { calendar_ids: ['primary'] } }];
51
- this.internals.setFormValue(JSON.stringify(this.participants), 'participants');
61
+ this.participants = [...this.participants, { name: '', email: '', is_organizer: false }];
62
+ this.updateFormValue();
52
63
  }
53
- removeParticipant(email) {
54
- debug('nylas-additional-participants', 'addParticipant');
55
- this.participants = this.participants.filter(p => p.email !== email);
56
- this.internals.setFormValue(JSON.stringify(this.participants), 'participants');
64
+ removeParticipant(index) {
65
+ debug('nylas-additional-participants', 'removeParticipant');
66
+ this.participants = this.participants.filter((_, i) => i !== index);
67
+ this.updateFormValue();
57
68
  }
58
69
  validate(email, index) {
59
70
  debug('nylas-additional-participants', 'validate');
60
71
  const regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
61
72
  const valid = regex.test(String(email).toLowerCase());
62
73
  this.participants[index].is_valid = valid;
63
- this.internals.setFormValue(JSON.stringify(this.participants), 'participants');
74
+ this.updateFormValue();
75
+ }
76
+ updateFormValue() {
77
+ debug('nylas-additional-participants', 'updateFormValue');
78
+ this.internals.setFormValue(JSON.stringify(this.participants), this.name);
79
+ this.valueChanged.emit({ value: JSON.stringify(this.participants), name: this.name });
80
+ }
81
+ getArrayDifference(array1, array2) {
82
+ const filtered = array1.filter(participant1 => !array2.some(participant2 => participant1.email === participant2.email));
83
+ return filtered.map(participant => {
84
+ return { value: participant.email, label: participant.email };
85
+ });
64
86
  }
65
87
  render() {
66
- return (h(Host, { key: '91518d593ecd43e88105d3137746e9d95653e0e7' }, h("nylas-form-card", { key: 'd05f897f3d5109ce3b31d2aad8ca09af05793b58' }, h("h3", { key: 'fcc5ae151fb84bf60abf58e44eb8e043cd4cefac', slot: "header-title", class: "nylas-additional-participants__title", part: "nap__title" }, "Additional participants"), h("p", { key: '7e8e8354258dc9884cef56c1e4bdbe0d1fc724c5', slot: "header-subtitle", class: "nylas-additional-participants__subtitle", part: "nap__subtitle" }, "Add anyone else who would be joining for this event."), h("div", { key: '3376539a53c39a2e43fd4a817a83511eb852cd87', slot: "content", class: "nylas-additional-participants__content" }, h("div", { key: 'b782dad233ad8ca25030d9ea45092eea93c2f0dd' }, this.participants.map((participant, index) => {
67
- return (h("div", { class: 'nylas-additional-participants__input_group', part: "nap__input_group" }, h("label", null, participant.is_organizer ? 'Organizer' : `Participant ${index}`), h("div", { part: "nap__input_wrapper", class: `nylas-additional-participants__input_wrapper ${participant.is_organizer && 'nylas-additional-participants__input_wrapper_organizer'} ${participant.is_valid === false && 'nylas-additional-participants__input_wrapper_invalid'}` }, h("div", { class: "nylas-additional-participants__input", part: "nap__input" }, h("input", { type: "text", value: participant.email, onInput: e => {
88
+ return (h(Host, { key: '67454437ca6e9771da4373e293b8b1d468c79680' }, h("nylas-form-card", { key: '844913ba1bca33b83b0d7c0a89323ca48f5ce1dd' }, h("h3", { key: 'bbdbf1e9addc3238a013697bff343a1065758928', slot: "header-title", class: "nylas-additional-participants__title", part: "nap__title" }, "Additional participants"), h("p", { key: '37520f9fcc4996b9635821a52ed5d9c0350af88f', slot: "header-subtitle", class: "nylas-additional-participants__subtitle", part: "nap__subtitle" }, "Add anyone else who would be joining for this event."), h("div", { key: '76a8d8118f9012cced55357e4243b897ec41e385', slot: "content", class: "nylas-additional-participants__content" }, h("div", { key: 'bb5d6f6e7ebf486eb4c8395ff3ab971335d19750' }, this.participants.map((participant, index) => {
89
+ return (h("div", { class: 'nylas-additional-participants__input_group', part: "nap__input_group" }, h("label", null, participant.is_organizer ? 'Organizer' : `Participant ${index}`), h("div", { part: "nap__input_wrapper", class: `nylas-additional-participants__input_wrapper ${participant.is_organizer && 'nylas-additional-participants__input_wrapper_organizer'} ${participant.is_valid === false && 'nylas-additional-participants__input_wrapper_invalid'}` }, h("div", { class: { 'nylas-additional-participants__input': true, 'organizer': participant.is_organizer }, part: "nap__input" }, participant.is_organizer ? (h("input", { type: "text", value: participant.email, onInput: e => {
68
90
  this.onParticipantChange(e, index);
69
- }, readOnly: participant.is_organizer, onBlur: () => this.validate(participant.email, index) })), !participant.is_organizer && (h("button", { onClick: () => this.removeParticipant(participant.email), part: "nap__remove-participant" }, h("close-icon", null))))));
70
- }))))));
91
+ }, readOnly: participant.is_organizer, onBlur: () => this.validate(participant.email, index) })) : (h("input-dropdown", { name: `${index}`, filterable: true, inputValue: participant.email, options: this.getArrayDifference(this.participantOptions || [], this.participants) })), !participant.is_organizer && (h("button", { onClick: () => this.removeParticipant(index), part: "nap__remove-participant" }, h("close-icon", null)))))));
92
+ })), h("button", { key: '14febbe15dc97b44304e98c14d7e084ea5126304', class: "nylas-additional-participants__add", part: "nap__add-participant", onClick: () => this.addParticipant() }, h("add-circle-icon", { key: '8f60f39d5d3b3b4532a78eacb0d4bf907a8b7836' }), " ", h("span", { key: '8e2c9a49072d04ab571470c68c3277a76706e60e' }, "Add ", this.participants.length > 1 ? 'another' : 'a', " participant"))))));
71
93
  }
72
94
  static get is() { return "nylas-additional-participants"; }
73
95
  static get encapsulation() { return "shadow"; }
@@ -121,6 +143,26 @@ export class NylasAdditionalParticipants {
121
143
  "tags": [],
122
144
  "text": ""
123
145
  }
146
+ },
147
+ "participantOptions": {
148
+ "type": "unknown",
149
+ "mutable": false,
150
+ "complexType": {
151
+ "original": "Participant[]",
152
+ "resolved": "Participant[] | undefined",
153
+ "references": {
154
+ "Participant": {
155
+ "location": "global",
156
+ "id": "global::Participant"
157
+ }
158
+ }
159
+ },
160
+ "required": false,
161
+ "optional": true,
162
+ "docs": {
163
+ "tags": [],
164
+ "text": ""
165
+ }
124
166
  }
125
167
  };
126
168
  }
@@ -130,6 +172,24 @@ export class NylasAdditionalParticipants {
130
172
  "participantsValid": {}
131
173
  };
132
174
  }
175
+ static get events() {
176
+ return [{
177
+ "method": "valueChanged",
178
+ "name": "valueChanged",
179
+ "bubbles": true,
180
+ "cancelable": true,
181
+ "composed": true,
182
+ "docs": {
183
+ "tags": [],
184
+ "text": "This event is fired when the selected participants change."
185
+ },
186
+ "complexType": {
187
+ "original": "{\n value: string;\n name: string;\n }",
188
+ "resolved": "{ value: string; name: string; }",
189
+ "references": {}
190
+ }
191
+ }];
192
+ }
133
193
  static get elementRef() { return "host"; }
134
194
  static get watchers() {
135
195
  return [{
@@ -137,11 +197,21 @@ export class NylasAdditionalParticipants {
137
197
  "methodName": "elementNameChangedHandler"
138
198
  }];
139
199
  }
200
+ static get listeners() {
201
+ return [{
202
+ "name": "inputOptionChanged",
203
+ "method": "onInputOptionChanged",
204
+ "target": undefined,
205
+ "capture": false,
206
+ "passive": false
207
+ }];
208
+ }
140
209
  static get attachInternalsMemberName() { return "internals"; }
141
210
  }
142
211
  __decorate([
143
212
  RegisterComponent({
144
213
  name: 'nylas-additional-participants',
214
+ stateToProps: new Map([['schedulerConfig.additionalParticipants', 'participantOptions']]),
145
215
  eventToProps: {},
146
216
  fireRegisterEvent: true,
147
217
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-additional-participants.js","sourceRoot":"","sources":["../../../../src/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, Prop, State, Watch, h, Element } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\ntype Participant = {\n name?: string;\n email: string;\n is_valid?: boolean;\n is_organizer: boolean;\n availability?: Availability;\n booking?: Booking;\n};\ntype Availability = {\n calendar_ids: string[];\n};\ntype Booking = {\n calendar_id: string;\n};\n\n/**\n * The `nylas-additional-participants` component is a form input for adding additional participants to an event.\n *\n * @part nap__title - The title of the component.\n * @part nap__subtitle - The subtitle of the component.\n * @part nap__content - The content of the component.\n * @part nap__input_group - The input group of the component.\n * @part nap__input_wrapper - The input wrapper of the component.\n * @part nap__input - The input of the component.\n * @part nap__remove-participant - The remove participant button of the component.\n * @part nap__add-participant - The add participant button of the component.\n *\n */\n@Component({\n tag: 'nylas-additional-participants',\n styleUrl: 'nylas-additional-participants.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasAdditionalParticipants {\n @Element() host!: HTMLNylasAdditionalParticipantsElement;\n @Prop() name: string = 'participants';\n @Prop() eventParticipants?: Participant[];\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-additional-participants', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @State() participants: Participant[] = this.eventParticipants ?? [];\n @State() participantsValid: boolean = true;\n connectedCallback() {\n debug('nylas-additional-participants', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-additional-participants', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-additional-participants', 'componentDidLoad');\n this.internals.setFormValue(JSON.stringify(this.participants), 'participants');\n }\n\n disconnectedCallback() {\n debug('nylas-additional-participants', 'disconnectedCallback');\n }\n onParticipantChange(event, index) {\n debug('nylas-additional-participants', 'onParticipantChange');\n this.participants[index].email = event.target.value;\n this.internals.setFormValue(JSON.stringify(this.participants), 'participants');\n }\n addParticipant() {\n debug('nylas-additional-participants', 'addParticipant');\n this.participants = [...this.participants, { email: '', is_organizer: false, availability: { calendar_ids: ['primary'] } }];\n this.internals.setFormValue(JSON.stringify(this.participants), 'participants');\n }\n removeParticipant(email: string) {\n debug('nylas-additional-participants', 'addParticipant');\n this.participants = this.participants.filter(p => p.email !== email);\n this.internals.setFormValue(JSON.stringify(this.participants), 'participants');\n }\n validate(email, index) {\n debug('nylas-additional-participants', 'validate');\n const regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const valid = regex.test(String(email).toLowerCase());\n this.participants[index].is_valid = valid;\n this.internals.setFormValue(JSON.stringify(this.participants), 'participants');\n }\n\n @RegisterComponent<NylasAdditionalParticipants, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-additional-participants',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <nylas-form-card>\n <h3 slot=\"header-title\" class=\"nylas-additional-participants__title\" part=\"nap__title\">\n Additional participants\n </h3>\n <p slot=\"header-subtitle\" class=\"nylas-additional-participants__subtitle\" part=\"nap__subtitle\">\n Add anyone else who would be joining for this event.\n </p>\n <div slot=\"content\" class=\"nylas-additional-participants__content\">\n <div>\n {this.participants.map((participant, index) => {\n return (\n <div class={'nylas-additional-participants__input_group'} part=\"nap__input_group\">\n <label>{participant.is_organizer ? 'Organizer' : `Participant ${index}`}</label>\n <div\n part=\"nap__input_wrapper\"\n class={`nylas-additional-participants__input_wrapper ${participant.is_organizer && 'nylas-additional-participants__input_wrapper_organizer'} ${participant.is_valid === false && 'nylas-additional-participants__input_wrapper_invalid'}`}\n >\n <div class=\"nylas-additional-participants__input\" part=\"nap__input\">\n <input\n type=\"text\"\n value={participant.email}\n onInput={e => {\n this.onParticipantChange(e, index);\n }}\n readOnly={participant.is_organizer}\n onBlur={() => this.validate(participant.email, index)}\n />\n </div>\n {!participant.is_organizer && (\n <button onClick={() => this.removeParticipant(participant.email)} part=\"nap__remove-participant\">\n <close-icon />\n </button>\n )}\n </div>\n </div>\n );\n })}\n </div>\n {/* <button class=\"nylas-additional-participants__add\" part=\"nap__add-participant\" onClick={() => this.addParticipant()}>\n <add-circle-icon /> <span>Add a participant</span>\n </button> */}\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"nylas-additional-participants.js","sourceRoot":"","sources":["../../../../src/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, Prop, State, Watch, h, Element, Listen, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Event } from '@stencil/core';\n\ntype Participant = {\n name?: string;\n email: string;\n is_valid?: boolean;\n is_organizer: boolean;\n availability?: Availability;\n booking?: Booking;\n};\ntype Availability = {\n calendar_ids: string[];\n};\ntype Booking = {\n calendar_id: string;\n};\n\n/**\n * The `nylas-additional-participants` component is a form input for adding additional participants to an event.\n *\n * @part nap__title - The title of the component.\n * @part nap__subtitle - The subtitle of the component.\n * @part nap__content - The content of the component.\n * @part nap__input_group - The input group of the component.\n * @part nap__input_wrapper - The input wrapper of the component.\n * @part nap__input - The input of the component.\n * @part nap__remove-participant - The remove participant button of the component.\n * @part nap__add-participant - The add participant button of the component.\n *\n */\n@Component({\n tag: 'nylas-additional-participants',\n styleUrl: 'nylas-additional-participants.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasAdditionalParticipants {\n @Element() host!: HTMLNylasAdditionalParticipantsElement;\n @Prop() name: string = 'participants';\n @Prop() eventParticipants?: Participant[];\n @Prop() participantOptions?: Participant[];\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * This event is fired when the selected participants change.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-additional-participants', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @State() participants: Participant[] = this.eventParticipants ?? [];\n @State() participantsValid: boolean = true;\n connectedCallback() {\n debug('nylas-additional-participants', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-additional-participants', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-additional-participants', 'componentDidLoad');\n this.updateFormValue();\n }\n\n disconnectedCallback() {\n debug('nylas-additional-participants', 'disconnectedCallback');\n }\n\n @Listen('inputOptionChanged')\n onInputOptionChanged(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-additional-participants', 'onInputOptionChanged');\n const index = event.detail.name;\n this.participants[index].email = event.detail.value;\n const participant = this.participantOptions?.find(participant => participant.email === event.detail.value);\n this.participants[index].availability = participant ? { calendar_ids: ['primary'] } : undefined;\n this.participants[index].name = participant?.name || event.detail.value;\n this.participants = [...this.participants];\n this.updateFormValue();\n }\n onParticipantChange(event, index) {\n debug('nylas-additional-participants', 'onParticipantChange');\n this.participants[index].email = event.target.value;\n this.updateFormValue();\n }\n addParticipant() {\n debug('nylas-additional-participants', 'addParticipant');\n this.participants = [...this.participants, { name: '', email: '', is_organizer: false }];\n this.updateFormValue();\n }\n removeParticipant(index: number) {\n debug('nylas-additional-participants', 'removeParticipant');\n this.participants = this.participants.filter((_, i) => i !== index);\n this.updateFormValue();\n }\n validate(email, index) {\n debug('nylas-additional-participants', 'validate');\n const regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n const valid = regex.test(String(email).toLowerCase());\n this.participants[index].is_valid = valid;\n this.updateFormValue();\n }\n\n updateFormValue() {\n debug('nylas-additional-participants', 'updateFormValue');\n this.internals.setFormValue(JSON.stringify(this.participants), this.name);\n this.valueChanged.emit({ value: JSON.stringify(this.participants), name: this.name });\n }\n\n // Filter out the participants that are already added\n getArrayDifference(array1: Participant[], array2: Participant[]) {\n const filtered = array1.filter(participant1 => !array2.some(participant2 => participant1.email === participant2.email));\n return filtered.map(participant => {\n return { value: participant.email, label: participant.email };\n });\n }\n\n @RegisterComponent<NylasAdditionalParticipants, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-additional-participants',\n stateToProps: new Map([['schedulerConfig.additionalParticipants', 'participantOptions']]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <nylas-form-card>\n <h3 slot=\"header-title\" class=\"nylas-additional-participants__title\" part=\"nap__title\">\n Additional participants\n </h3>\n <p slot=\"header-subtitle\" class=\"nylas-additional-participants__subtitle\" part=\"nap__subtitle\">\n Add anyone else who would be joining for this event.\n </p>\n <div slot=\"content\" class=\"nylas-additional-participants__content\">\n <div>\n {this.participants.map((participant, index) => {\n return (\n <div class={'nylas-additional-participants__input_group'} part=\"nap__input_group\">\n <label>{participant.is_organizer ? 'Organizer' : `Participant ${index}`}</label>\n <div\n part=\"nap__input_wrapper\"\n class={`nylas-additional-participants__input_wrapper ${participant.is_organizer && 'nylas-additional-participants__input_wrapper_organizer'} ${participant.is_valid === false && 'nylas-additional-participants__input_wrapper_invalid'}`}\n >\n <div class={{ 'nylas-additional-participants__input': true, 'organizer': participant.is_organizer }} part=\"nap__input\">\n {participant.is_organizer ? (\n <input\n type=\"text\"\n value={participant.email}\n onInput={e => {\n this.onParticipantChange(e, index);\n }}\n readOnly={participant.is_organizer}\n onBlur={() => this.validate(participant.email, index)}\n />\n ) : (\n <input-dropdown\n name={`${index}`}\n filterable={true}\n inputValue={participant.email}\n options={this.getArrayDifference(this.participantOptions || [], this.participants)}\n />\n )}\n {!participant.is_organizer && (\n <button onClick={() => this.removeParticipant(index)} part=\"nap__remove-participant\">\n <close-icon />\n </button>\n )}\n </div>\n </div>\n </div>\n );\n })}\n </div>\n <button class=\"nylas-additional-participants__add\" part=\"nap__add-participant\" onClick={() => this.addParticipant()}>\n <add-circle-icon /> <span>Add {this.participants.length > 1 ? 'another' : 'a'} participant</span>\n </button>\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n"]}
@@ -36,7 +36,6 @@
36
36
  }
37
37
  .nylas-availability-picker .header {
38
38
  padding: 1rem;
39
- border-bottom: 1px solid var(--nylas-base-200);
40
39
  }
41
40
  .nylas-availability-picker .header h3 {
42
41
  margin: 0;
@@ -59,6 +58,7 @@
59
58
  color: var(--nylas-base-900);
60
59
  font-size: 16px;
61
60
  font-family: var(--nylas-font-family);
61
+ border-top: 1px solid var(--nylas-base-200);
62
62
  }
63
63
  @media screen and (max-width: 504px) {
64
64
  .nylas-availability-picker .content {
@@ -22,6 +22,7 @@ export class NylasAvailabilityPicker {
22
22
  this.openHours = undefined;
23
23
  this.name = 'availability';
24
24
  this.defaultTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
25
+ this.hideHeader = false;
25
26
  this.schedule = {
26
27
  SUN: [],
27
28
  MON: [{ start: '09:00am', end: '05:00pm' }],
@@ -39,20 +40,13 @@ export class NylasAvailabilityPicker {
39
40
  this.host.setAttribute('name', newValue);
40
41
  }
41
42
  configChangedHandler(newConfig) {
42
- const organizer = newConfig?.participants?.find(p => p.is_organizer);
43
- if (organizer && organizer?.availability?.open_hours) {
44
- this.openHoursToSchedule(organizer?.availability?.open_hours);
43
+ const defaultOpenHours = newConfig?.availability?.availability_rules?.default_open_hours;
44
+ if (defaultOpenHours) {
45
+ this.openHoursToSchedule(defaultOpenHours);
45
46
  }
46
47
  }
47
48
  scheduleChanged(newValue, oldValue) {
48
49
  if (newValue !== oldValue) {
49
- this.valueChanged.emit({
50
- value: {
51
- openHours: this.scheduleToOpenHours(newValue),
52
- timezone: this.timezone,
53
- },
54
- name: this.name,
55
- });
56
50
  let overlapDays = {};
57
51
  Object.keys(newValue).forEach(key => {
58
52
  const dayTimeRanges = newValue[key];
@@ -81,6 +75,13 @@ export class NylasAvailabilityPicker {
81
75
  timezone: this.timezone,
82
76
  }));
83
77
  }
78
+ this.valueChanged.emit({
79
+ value: JSON.stringify({
80
+ openHours: this.scheduleToOpenHours(newValue),
81
+ timezone: this.timezone,
82
+ }),
83
+ name: this.name,
84
+ });
84
85
  }
85
86
  }
86
87
  nylasFormDropdownChangedHandler(event) {
@@ -90,10 +91,15 @@ export class NylasAvailabilityPicker {
90
91
  if (typeof this.internals.setFormValue !== 'function') {
91
92
  return;
92
93
  }
93
- this.internals.setFormValue(JSON.stringify({
94
+ const updateValue = {
94
95
  openHours: this.scheduleToOpenHours(this.schedule),
95
96
  timezone: this.timezone,
96
- }));
97
+ };
98
+ this.internals.setFormValue(JSON.stringify(updateValue));
99
+ this.valueChanged.emit({
100
+ value: JSON.stringify(updateValue),
101
+ name: this.name,
102
+ });
97
103
  }
98
104
  }
99
105
  connectedCallback() {
@@ -114,10 +120,15 @@ export class NylasAvailabilityPicker {
114
120
  if (typeof this.internals.setFormValue !== 'function') {
115
121
  return;
116
122
  }
117
- this.internals.setFormValue(JSON.stringify({
123
+ const updateValue = {
118
124
  openHours: this.scheduleToOpenHours(this.schedule),
119
125
  timezone: this.timezone,
120
- }));
126
+ };
127
+ this.internals.setFormValue(JSON.stringify(updateValue));
128
+ this.valueChanged.emit({
129
+ value: JSON.stringify(updateValue),
130
+ name: this.name,
131
+ });
121
132
  }
122
133
  getOverlaps(timeRanges) {
123
134
  let timeRangesInMinutes = timeRanges.map((range, index) => ({
@@ -287,7 +298,7 @@ export class NylasAvailabilityPicker {
287
298
  label: TIMEZONE_MAP[key],
288
299
  value: key,
289
300
  }));
290
- return (h(Host, { key: 'c032e8a3630fe918533895156285e4b37778d812' }, h("div", { key: '1582bd8c1f3ef09d793a7120dafb6c7d420c3e9a', class: "nylas-availability-picker" }, h("div", { key: '61f2c1de7921e15455d7b827379e7d4815f6fb13', class: "header", part: "nap__header" }, h("h3", { key: '238b0ab77477d06a62412fed051d5641924e46d4' }, "General availability"), h("p", { key: '81967b68c5077941a5bf3d055c9be9e41d4ae705' }, "Set your availability for scheduling meetings.")), h("div", { key: 'f1da5a939c1459bd7e9833cf9a97add09d75a822', class: "content" }, h("div", { key: '71e2f859541bd4fb2a4485f3350db5d6bbf73b00', class: "select-timezone", part: "nap__select-timezone" }, h("h4", { key: 'a136696a498fb1521d4d8d844b9b03e2e49ff93a', class: "sub-header" }, "Select timezone", h("span", { key: '52636e30a6dea12cb69d55bd258ed48837826c80', class: "icon" }, h("tooltip-component", { key: '9f0dbc8c234f3550e83bbce3226346981b764896' }, h("info-icon", { key: 'a8f556694bd02b710c89242a3d3057de5b7b0612', slot: "tooltip-icon" }), h("span", { key: 'a8a52dd9835c32becbae165fa972bf6be6e716fa', slot: "tooltip-content" }, "Select your timezone for displaying availability.")))), h("select-dropdown", { key: '4800272cc24dcd24c82a4a89f24131c11e528d8c', name: "timezone", exportparts: "sd_dropdown: nap__timezone-container, sd_dropdown-button: nap__timezone-button, sd_dropdown-content: nap__timezone-dropdown-content", options: timezoneOptions, defaultSelectedOption: timezoneOptions.find(i => i.value === this.defaultTimezone) }, h("span", { key: '8b072e23cd0130f203696f5c99baaad07b1bbb2e', slot: "select-icon" }, h("globe-icon", { key: 'de4c7ef153bff887947d73ed458aa5de0786b576', width: "20", height: "20" })))), h("div", { key: '6234933a0307c253e33ad9242e06c71388ba7a0a', class: "availability", part: "nap__availability" }, Object.keys(this.schedule).map(key => {
301
+ return (h(Host, { key: '81c6118e501f4424ce74cb81530a67f7896a7fca' }, h("div", { key: '6dbcda74a92e36089dfda5b11469c6619bb095e1', class: "nylas-availability-picker", part: "nap" }, !this.hideHeader && (h("div", { class: "header", part: "nap__header" }, h("h3", null, "General availability"), h("p", null, "Set your availability for scheduling meetings."))), h("div", { key: 'f217b53a7ddc2d0554a3c3e44e79580924dbaa43', class: "content" }, h("div", { key: 'fe3dcc1c1c5504e65babb72f7b92f7954e3d4a20', class: "select-timezone", part: "nap__select-timezone" }, h("h4", { key: '0746b7a08e56b8d2359ae37357b46b84b440851c', class: "sub-header" }, "Select timezone", h("span", { key: 'f6d5424b939bec04d0ab01e3b037a5db6ffdbb77', class: "icon" }, h("tooltip-component", { key: '7f6371d4e3ee3ab8c841d3799fbe77a1206084eb' }, h("info-icon", { key: 'ae2b6f45b9eba0c26909b283daceafeddefc7936', slot: "tooltip-icon" }), h("span", { key: '38cb9c51f61d0087216660e5b2a54f42a42663ae', slot: "tooltip-content" }, "Select your timezone for displaying availability.")))), h("select-dropdown", { key: 'e3467d03d104fe090d776bc03306d289de53cb60', name: "timezone", exportparts: "sd_dropdown: nap__timezone-container, sd_dropdown-button: nap__timezone-button, sd_dropdown-content: nap__timezone-dropdown-content", options: timezoneOptions, defaultSelectedOption: timezoneOptions.find(i => i.value === this.defaultTimezone) }, h("span", { key: 'afbee8547454b8eb1ba75a41056e1393fd60c2ec', slot: "select-icon" }, h("globe-icon", { key: '7bc82d7454658d2d0783a7d9422b76fb4083d14f', width: "20", height: "20" })))), h("div", { key: '2fd561856ac6731c16da239cd296545e256dd12d', class: "availability", part: "nap__availability" }, Object.keys(this.schedule).map(key => {
291
302
  const day = key;
292
303
  const timeRanges = this.schedule[key];
293
304
  return (h("div", { class: "availability-day" }, h("div", { class: "day", part: "nap__day" }, h("input", { type: "checkbox", name: day, id: day, checked: timeRanges.length > 0, onClick: () => {
@@ -398,6 +409,24 @@ export class NylasAvailabilityPicker {
398
409
  "attribute": "default-timezone",
399
410
  "reflect": false,
400
411
  "defaultValue": "Intl.DateTimeFormat().resolvedOptions().timeZone"
412
+ },
413
+ "hideHeader": {
414
+ "type": "boolean",
415
+ "mutable": false,
416
+ "complexType": {
417
+ "original": "boolean",
418
+ "resolved": "boolean",
419
+ "references": {}
420
+ },
421
+ "required": false,
422
+ "optional": false,
423
+ "docs": {
424
+ "tags": [],
425
+ "text": "Hide the header of the availability picker."
426
+ },
427
+ "attribute": "hide-header",
428
+ "reflect": false,
429
+ "defaultValue": "false"
401
430
  }
402
431
  };
403
432
  }
@@ -417,18 +446,12 @@ export class NylasAvailabilityPicker {
417
446
  "composed": true,
418
447
  "docs": {
419
448
  "tags": [],
420
- "text": "This event is fired when the selected availability / open hours change."
449
+ "text": "This event is fired when the selected availability / open hours change.\nThe value is a stringified JSON object with the open hours and timezone.\nEx: {\n openHours: OpenHours[];\n timezone: string;\n};"
421
450
  },
422
451
  "complexType": {
423
- "original": "{\n value: {\n openHours: OpenHours[];\n timezone: string;\n };\n name: string;\n }",
424
- "resolved": "{ value: { openHours: OpenHours[]; timezone: string; }; name: string; }",
425
- "references": {
426
- "OpenHours": {
427
- "location": "local",
428
- "path": "/home/runner/work/nylas/nylas/packages/nylas-web-elements/src/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.tsx",
429
- "id": "src/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.tsx::OpenHours"
430
- }
431
- }
452
+ "original": "{\n value: string;\n name: string;\n }",
453
+ "resolved": "{ value: string; name: string; }",
454
+ "references": {}
432
455
  }
433
456
  }];
434
457
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-availability-picker.js","sourceRoot":"","sources":["../../../../src/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { convertTo12HourFormat, convertTo24HourFormat, debug, minutesToTime, timeToMinutes } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { TIMEZONE_MAP } from '@/common/constants';\nimport { Configuration } from '@nylas/core';\n\nexport type OpenHours = {\n days: number[];\n start: string;\n end: string;\n timezone: string;\n};\n\nexport type Schedule = {\n SUN: { start: string; end: string }[];\n MON: { start: string; end: string }[];\n TUE: { start: string; end: string }[];\n WED: { start: string; end: string }[];\n THU: { start: string; end: string }[];\n FRI: { start: string; end: string }[];\n SAT: { start: string; end: string }[];\n};\n\n/**\n * The `nylas-availability-picker` component is a form input for selecting availability (open hours).\n * @part nap__header - The header of the availability picker\n * @part nap__select-timezone - The timezone selection container\n * @part nap__select-timezone-button - The timezone selection button\n * @part nap__select-timezone-dropdown-content - The timezone selection dropdown content\n * @part nap__availability - The availability container\n * @part nap__day - The day container\n * @part nap__time-ranges - The time ranges container\n * @part nap__time-range - The time range container\n * @part nap__add-time-range - The add time range button\n * @part nap__time-picker-container - The time picker container\n * @part nap__time-picker-input - The time picker input\n * @part nap__time-picker-times - The time picker times\n */\n@Component({\n tag: 'nylas-availability-picker',\n styleUrl: 'nylas-availability-picker.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasAvailabilityPicker {\n /**\n * The element <nylas-availability-picker> itself.\n */\n @Element() host!: HTMLNylasAvailabilityPickerElement;\n /**\n * The selected configuration.\n */\n @Prop() selectedConfiguration?: Configuration;\n /**\n * The open hours to display.\n */\n @Prop() openHours?: OpenHours[];\n /**\n * The name of the availability picker.\n */\n @Prop() name: string = 'availability';\n /*\n * The default timezone or preset timezone.\n */\n @Prop() defaultTimezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n /**\n * This event is fired when the selected availability / open hours change.\n */\n @Event() valueChanged!: EventEmitter<{\n value: {\n openHours: OpenHours[];\n timezone: string;\n };\n name: string;\n }>;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n @State() schedule = {\n SUN: [],\n MON: [{ start: '09:00am', end: '05:00pm' }],\n TUE: [{ start: '09:00am', end: '05:00pm' }],\n WED: [{ start: '09:00am', end: '05:00pm' }],\n THU: [{ start: '09:00am', end: '05:00pm' }],\n FRI: [{ start: '09:00am', end: '05:00pm' }],\n SAT: [],\n };\n /**\n * The selected timezone state.\n */\n @State() timezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n /**\n * The overlapping time ranges state. This is used to display an error message when there are overlapping time ranges.\n */\n @State() overlapDays: { [key: string]: number[] } = {};\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-calendar-picker', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n configChangedHandler(newConfig: Configuration) {\n const organizer = newConfig?.participants?.find(p => p.is_organizer);\n if (organizer && organizer?.availability?.open_hours) {\n this.openHoursToSchedule(organizer?.availability?.open_hours);\n }\n }\n\n @Watch('schedule')\n scheduleChanged(newValue: Schedule, oldValue: Schedule) {\n if (newValue !== oldValue) {\n this.valueChanged.emit({\n value: {\n openHours: this.scheduleToOpenHours(newValue),\n timezone: this.timezone,\n },\n name: this.name,\n });\n let overlapDays: { [key: string]: number[] } = {};\n Object.keys(newValue).forEach(key => {\n const dayTimeRanges = newValue[key];\n if (dayTimeRanges.length > 0) {\n const overlaps = this.getOverlaps(dayTimeRanges);\n if (overlaps.length > 0) {\n overlapDays[key] = overlaps;\n }\n }\n });\n this.overlapDays = overlapDays;\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n if (Object.keys(overlapDays).length > 0) {\n const element = this.host.shadowRoot?.getElementById(Object.keys(overlapDays)[0]) as HTMLInputElement;\n if (element) {\n debug('nylas-availability-picker', 'The time ranges are overlapping. Overlap: ', overlapDays);\n this.internals.setValidity({ customError: true }, 'Overlapping time ranges found', element);\n }\n } else {\n this.internals.setValidity({ customError: false });\n this.internals.setFormValue(\n JSON.stringify({\n openHours: this.scheduleToOpenHours(this.schedule),\n timezone: this.timezone,\n }),\n );\n }\n }\n }\n\n @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(\n event: CustomEvent<{\n value: string;\n name: string;\n }>,\n ) {\n const { name, value } = event.detail;\n if (name === 'timezone') {\n this.timezone = value;\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n this.internals.setFormValue(\n JSON.stringify({\n openHours: this.scheduleToOpenHours(this.schedule),\n timezone: this.timezone,\n }),\n );\n }\n }\n\n connectedCallback() {\n debug('nylas-availability-picker', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-availability-picker', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-availability-picker', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-availability-picker', 'componentDidLoad');\n if (this.openHours && this.openHours.length > 0) {\n this.openHoursToSchedule(this.openHours);\n }\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n this.internals.setFormValue(\n JSON.stringify({\n openHours: this.scheduleToOpenHours(this.schedule),\n timezone: this.timezone,\n }),\n );\n }\n\n getOverlaps(timeRanges) {\n // Convert times to minutes and add to the array\n let timeRangesInMinutes = timeRanges.map((range, index) => ({\n start: timeToMinutes(range.start),\n end: timeToMinutes(range.end),\n originalIndex: index,\n }));\n\n // Sort by start time\n timeRangesInMinutes.sort((a, b) => a.start - b.start);\n let overlaps: number[] = [];\n // Check for overlap\n for (let i = 1; i < timeRangesInMinutes.length; i++) {\n if (timeRangesInMinutes[i].start < timeRangesInMinutes[i - 1].end) {\n // Add both overlapping time range indices if they are not already included\n if (!overlaps.includes(timeRangesInMinutes[i].originalIndex)) {\n overlaps.push(timeRangesInMinutes[i].originalIndex);\n }\n if (!overlaps.includes(timeRangesInMinutes[i - 1].originalIndex)) {\n overlaps.push(timeRangesInMinutes[i - 1].originalIndex);\n }\n }\n }\n return overlaps.sort((a, b) => a - b); // Return sorted list of indices\n }\n\n addTimeRange(day) {\n const currentTimeRanges = this.schedule[day];\n\n // Default working hours are from 00:00 to 23:45 for calculation purposes\n const dayStart = 0; // Start of the day in minutes (00:00)\n const dayEnd = 1425; // End of the day in minutes (23:45)\n\n if (currentTimeRanges.length === 0) {\n // If there are no existing time ranges, add one at the start of the day\n this.schedule[day] = [{ start: '09:00am', end: '05:00pm' }]; // Example range\n } else {\n // Convert all time ranges to minutes for comparison\n const timeRangesInMinutes = currentTimeRanges\n .map(range => ({\n start: timeToMinutes(range.start),\n end: timeToMinutes(range.end),\n }))\n .sort((a, b) => a.start - b.start); // Sort by start time\n\n // Attempt to add a new time range at the end of the day\n const lastRangeEnd = timeRangesInMinutes[timeRangesInMinutes.length - 1].end;\n if (lastRangeEnd + 60 <= dayEnd) {\n // There's room at the end of the day\n this.schedule[day].push({\n start: convertTo12HourFormat(minutesToTime(lastRangeEnd)),\n end: convertTo12HourFormat(minutesToTime(lastRangeEnd + 60)),\n });\n } else {\n // No room at the end, look for gaps at the beginning of the day\n let gapFound = false;\n if (timeRangesInMinutes[0].start > dayStart + 60) {\n // There's room for at least a 1-hour meeting at the beginning of the day\n this.schedule[day].push({\n start: convertTo12HourFormat(minutesToTime(dayStart)),\n end: convertTo12HourFormat(minutesToTime(dayStart + 60)),\n });\n gapFound = true;\n }\n\n if (!gapFound) {\n // Search for gaps between scheduled time ranges\n for (let i = 0; i < timeRangesInMinutes.length - 1; i++) {\n const currentEnd = timeRangesInMinutes[i].end;\n const nextStart = timeRangesInMinutes[i + 1].start;\n\n if (nextStart - currentEnd >= 60) {\n // Found a gap\n this.schedule[day].push({\n start: convertTo12HourFormat(minutesToTime(currentEnd)),\n end: convertTo12HourFormat(minutesToTime(currentEnd + 60)),\n });\n break; // Exit the loop after adding a time range\n }\n }\n }\n }\n }\n\n // Sort the updated schedule to maintain order\n this.schedule[day].sort((a, b) => timeToMinutes(a.start) - timeToMinutes(b.start));\n\n this.schedule = { ...this.schedule };\n }\n\n removeTimeRange(day, index) {\n this.schedule[day].splice(index, 1);\n this.schedule = { ...this.schedule };\n }\n\n @Listen('timeChange')\n setTime(event: CustomEvent<{ key: string; value: string }>) {\n const { key, value } = event.detail;\n const [dayIndex, timeType] = key.split('_');\n const [day, index] = dayIndex.split(':');\n\n if (timeType === 'start') {\n this.schedule[day][index].start = value;\n } else if (timeType === 'end') {\n this.schedule[day][index].end = value;\n }\n this.internals.setValidity({ customError: false });\n this.schedule = { ...this.schedule };\n }\n\n @Listen('formError')\n setFormError(event: CustomEvent<{ key: string; message: string }>) {\n const { key } = event.detail;\n const [_, timeType] = key.split('_');\n const element = this.host.shadowRoot?.getElementById(key);\n if (element) {\n this.internals.setValidity({ customError: true }, `Invalid ${timeType} time`, element as HTMLInputElement);\n }\n }\n\n openHoursToSchedule(openHours: OpenHours[]) {\n const newSchedule = {\n SUN: [],\n MON: [],\n TUE: [],\n WED: [],\n THU: [],\n FRI: [],\n SAT: [],\n };\n openHours.forEach(openHour => {\n openHour.days.forEach(day => {\n const dayKey = this.getDayKey(day);\n const start12hr = convertTo12HourFormat(openHour.start);\n const end12hr = convertTo12HourFormat(openHour.end);\n const timeRange = { start: start12hr, end: end12hr };\n\n // Check if the time range already exists for the day\n let timeRangeExists = false;\n if (newSchedule[dayKey]) {\n // Search for an existing time range that matches the current one\n timeRangeExists = newSchedule[dayKey].some(range => range.start === timeRange.start && range.end === timeRange.end);\n }\n\n if (!timeRangeExists) {\n if (newSchedule[dayKey]) {\n newSchedule[dayKey].push(timeRange);\n } else {\n newSchedule[dayKey] = [timeRange];\n }\n }\n });\n });\n\n this.timezone = this.defaultTimezone;\n this.schedule = newSchedule;\n }\n\n getDayKey(dayIndex: number): string {\n const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];\n return days[dayIndex];\n }\n\n scheduleToOpenHours(schedule: Schedule): OpenHours[] {\n const dayKeys = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];\n let openHoursMap: Map<string, { days: number[]; start: string; end: string }> = new Map();\n\n dayKeys.forEach((dayKey, index) => {\n if (schedule[dayKey]) {\n // Check if schedule for the day exists\n schedule[dayKey].forEach(timeRange => {\n const start24hr = convertTo24HourFormat(timeRange.start);\n const end24hr = convertTo24HourFormat(timeRange.end);\n const key = `${start24hr}-${end24hr}`;\n\n if (!openHoursMap.has(key)) {\n openHoursMap.set(key, { days: [index], start: start24hr, end: end24hr });\n } else {\n let entry = openHoursMap.get(key);\n if (entry) {\n entry.days.push(index);\n openHoursMap.set(key, entry);\n }\n }\n });\n }\n });\n\n let selectedOpenHours: OpenHours[] = [];\n openHoursMap.forEach((value, _key) => {\n selectedOpenHours.push({\n days: value.days,\n start: value.start,\n end: value.end,\n timezone: this.timezone,\n });\n });\n\n return selectedOpenHours;\n }\n\n @RegisterComponent<NylasAvailabilityPicker, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-availability-picker',\n stateToProps: new Map([['schedulerConfig.selectedConfiguration', 'selectedConfiguration']]),\n fireRegisterEvent: true,\n })\n render() {\n const timezoneOptions = Object.keys(TIMEZONE_MAP).map(key => ({\n label: TIMEZONE_MAP[key],\n value: key,\n }));\n\n return (\n <Host>\n <div class=\"nylas-availability-picker\">\n <div class=\"header\" part=\"nap__header\">\n <h3>General availability</h3>\n <p>Set your availability for scheduling meetings.</p>\n </div>\n <div class=\"content\">\n <div class=\"select-timezone\" part=\"nap__select-timezone\">\n <h4 class=\"sub-header\">\n Select timezone\n <span class=\"icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">Select your timezone for displaying availability.</span>\n </tooltip-component>\n </span>\n </h4>\n <select-dropdown\n name=\"timezone\"\n exportparts=\"sd_dropdown: nap__timezone-container, sd_dropdown-button: nap__timezone-button, sd_dropdown-content: nap__timezone-dropdown-content\"\n options={timezoneOptions}\n defaultSelectedOption={timezoneOptions.find(i => i.value === this.defaultTimezone)}\n >\n <span slot=\"select-icon\">\n <globe-icon width=\"20\" height=\"20\" />\n </span>\n </select-dropdown>\n </div>\n <div class=\"availability\" part=\"nap__availability\">\n {Object.keys(this.schedule).map(key => {\n const day = key;\n const timeRanges = this.schedule[key] as { start: string; end: string }[];\n return (\n <div class=\"availability-day\">\n <div class=\"day\" part=\"nap__day\">\n <input\n type=\"checkbox\"\n name={day}\n id={day}\n checked={timeRanges.length > 0}\n onClick={() => {\n if (timeRanges.length > 0) {\n this.schedule[day] = [];\n } else {\n this.schedule[day] = [{ start: '09:00am', end: '05:00pm' }];\n }\n this.schedule = { ...this.schedule };\n }}\n />\n <label htmlFor={day} aria-label=\"Select day\">\n {day}\n </label>\n </div>\n <div class=\"time-ranges\" part=\"nap__time-ranges\">\n {timeRanges.length ? null : <span class=\"unavailable\">Unavailable</span>}\n {timeRanges.length > 0 &&\n timeRanges.map((timeRange, timeRangeIndex) => {\n const startKey = `${key}:${timeRangeIndex}_start`;\n const endKey = `${key}:${timeRangeIndex}_end`;\n return (\n <div class=\"time-range\" part=\"nap__time-range\">\n <div class=\"pickers\">\n <nylas-time-window-picker\n id={startKey}\n hasError={this.overlapDays[day]?.includes(timeRangeIndex)}\n time={timeRange.start}\n name={startKey}\n key={startKey}\n exportparts=\"time-picker: nap__time-picker-container, time-input: nap__time-picker-input, times: nap__time-picker-times\"\n />\n <span> - </span>\n <nylas-time-window-picker\n id={endKey}\n hasError={this.overlapDays[day]?.includes(timeRangeIndex)}\n time={timeRange.end}\n name={endKey}\n key={endKey}\n minimumStartTime={timeRange.start}\n exportparts=\"time-picker: nap__time-picker-container, time-input: nap__time-picker-input, times: nap__time-picker-times\"\n />\n </div>\n <button onClick={() => this.removeTimeRange(day, timeRangeIndex)}>\n <close-icon />\n </button>\n </div>\n );\n })}\n <p class=\"error\">{this.overlapDays[day] ? 'Overlapping time ranges' : ''}</p>\n </div>\n <div>\n {timeRanges.length > 0 ? (\n <button onClick={() => this.addTimeRange(day)} part=\"nap__add-time-range\">\n <add-circle-icon />\n </button>\n ) : null}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"nylas-availability-picker.js","sourceRoot":"","sources":["../../../../src/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { convertTo12HourFormat, convertTo24HourFormat, debug, minutesToTime, timeToMinutes } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { TIMEZONE_MAP } from '@/common/constants';\nimport { Configuration } from '@nylas/core';\n\nexport type OpenHours = {\n days: number[];\n start: string;\n end: string;\n timezone: string;\n};\n\nexport type Schedule = {\n SUN: { start: string; end: string }[];\n MON: { start: string; end: string }[];\n TUE: { start: string; end: string }[];\n WED: { start: string; end: string }[];\n THU: { start: string; end: string }[];\n FRI: { start: string; end: string }[];\n SAT: { start: string; end: string }[];\n};\n\n/**\n * The `nylas-availability-picker` component is a form input for selecting availability (open hours).\n * @part nap__header - The header of the availability picker\n * @part nap__select-timezone - The timezone selection container\n * @part nap__select-timezone-button - The timezone selection button\n * @part nap__select-timezone-dropdown-content - The timezone selection dropdown content\n * @part nap__availability - The availability container\n * @part nap__day - The day container\n * @part nap__time-ranges - The time ranges container\n * @part nap__time-range - The time range container\n * @part nap__add-time-range - The add time range button\n * @part nap__time-picker-container - The time picker container\n * @part nap__time-picker-input - The time picker input\n * @part nap__time-picker-times - The time picker times\n */\n@Component({\n tag: 'nylas-availability-picker',\n styleUrl: 'nylas-availability-picker.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasAvailabilityPicker {\n /**\n * The element <nylas-availability-picker> itself.\n */\n @Element() host!: HTMLNylasAvailabilityPickerElement;\n /**\n * The selected configuration.\n */\n @Prop() selectedConfiguration?: Configuration;\n /**\n * The open hours to display.\n */\n @Prop() openHours?: OpenHours[];\n /**\n * The name of the availability picker.\n */\n @Prop() name: string = 'availability';\n /*\n * The default timezone or preset timezone.\n */\n @Prop() defaultTimezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n /**\n * Hide the header of the availability picker.\n */\n @Prop() hideHeader: boolean = false;\n\n /**\n * This event is fired when the selected availability / open hours change.\n * The value is a stringified JSON object with the open hours and timezone.\n * Ex: {\n * openHours: OpenHours[];\n * timezone: string;\n * };\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n @State() schedule = {\n SUN: [],\n MON: [{ start: '09:00am', end: '05:00pm' }],\n TUE: [{ start: '09:00am', end: '05:00pm' }],\n WED: [{ start: '09:00am', end: '05:00pm' }],\n THU: [{ start: '09:00am', end: '05:00pm' }],\n FRI: [{ start: '09:00am', end: '05:00pm' }],\n SAT: [],\n };\n /**\n * The selected timezone state.\n */\n @State() timezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n /**\n * The overlapping time ranges state. This is used to display an error message when there are overlapping time ranges.\n */\n @State() overlapDays: { [key: string]: number[] } = {};\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-calendar-picker', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n configChangedHandler(newConfig: Configuration) {\n const defaultOpenHours = newConfig?.availability?.availability_rules?.default_open_hours;\n if (defaultOpenHours) {\n this.openHoursToSchedule(defaultOpenHours);\n }\n }\n\n @Watch('schedule')\n scheduleChanged(newValue: Schedule, oldValue: Schedule) {\n if (newValue !== oldValue) {\n let overlapDays: { [key: string]: number[] } = {};\n Object.keys(newValue).forEach(key => {\n const dayTimeRanges = newValue[key];\n if (dayTimeRanges.length > 0) {\n const overlaps = this.getOverlaps(dayTimeRanges);\n if (overlaps.length > 0) {\n overlapDays[key] = overlaps;\n }\n }\n });\n this.overlapDays = overlapDays;\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n if (Object.keys(overlapDays).length > 0) {\n const element = this.host.shadowRoot?.getElementById(Object.keys(overlapDays)[0]) as HTMLInputElement;\n if (element) {\n debug('nylas-availability-picker', 'The time ranges are overlapping. Overlap: ', overlapDays);\n this.internals.setValidity({ customError: true }, 'Overlapping time ranges found', element);\n }\n } else {\n this.internals.setValidity({ customError: false });\n this.internals.setFormValue(\n JSON.stringify({\n openHours: this.scheduleToOpenHours(this.schedule),\n timezone: this.timezone,\n }),\n );\n }\n this.valueChanged.emit({\n value: JSON.stringify({\n openHours: this.scheduleToOpenHours(newValue),\n timezone: this.timezone,\n }),\n name: this.name,\n });\n }\n }\n\n @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(\n event: CustomEvent<{\n value: string;\n name: string;\n }>,\n ) {\n const { name, value } = event.detail;\n if (name === 'timezone') {\n this.timezone = value;\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n const updateValue = {\n openHours: this.scheduleToOpenHours(this.schedule),\n timezone: this.timezone,\n };\n this.internals.setFormValue(JSON.stringify(updateValue));\n this.valueChanged.emit({\n value: JSON.stringify(updateValue),\n name: this.name,\n });\n }\n }\n\n connectedCallback() {\n debug('nylas-availability-picker', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-availability-picker', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-availability-picker', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-availability-picker', 'componentDidLoad');\n if (this.openHours && this.openHours.length > 0) {\n this.openHoursToSchedule(this.openHours);\n }\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n const updateValue = {\n openHours: this.scheduleToOpenHours(this.schedule),\n timezone: this.timezone,\n };\n this.internals.setFormValue(JSON.stringify(updateValue));\n this.valueChanged.emit({\n value: JSON.stringify(updateValue),\n name: this.name,\n });\n }\n\n getOverlaps(timeRanges) {\n // Convert times to minutes and add to the array\n let timeRangesInMinutes = timeRanges.map((range, index) => ({\n start: timeToMinutes(range.start),\n end: timeToMinutes(range.end),\n originalIndex: index,\n }));\n\n // Sort by start time\n timeRangesInMinutes.sort((a, b) => a.start - b.start);\n let overlaps: number[] = [];\n // Check for overlap\n for (let i = 1; i < timeRangesInMinutes.length; i++) {\n if (timeRangesInMinutes[i].start < timeRangesInMinutes[i - 1].end) {\n // Add both overlapping time range indices if they are not already included\n if (!overlaps.includes(timeRangesInMinutes[i].originalIndex)) {\n overlaps.push(timeRangesInMinutes[i].originalIndex);\n }\n if (!overlaps.includes(timeRangesInMinutes[i - 1].originalIndex)) {\n overlaps.push(timeRangesInMinutes[i - 1].originalIndex);\n }\n }\n }\n return overlaps.sort((a, b) => a - b); // Return sorted list of indices\n }\n\n addTimeRange(day) {\n const currentTimeRanges = this.schedule[day];\n\n // Default working hours are from 00:00 to 23:45 for calculation purposes\n const dayStart = 0; // Start of the day in minutes (00:00)\n const dayEnd = 1425; // End of the day in minutes (23:45)\n\n if (currentTimeRanges.length === 0) {\n // If there are no existing time ranges, add one at the start of the day\n this.schedule[day] = [{ start: '09:00am', end: '05:00pm' }]; // Example range\n } else {\n // Convert all time ranges to minutes for comparison\n const timeRangesInMinutes = currentTimeRanges\n .map(range => ({\n start: timeToMinutes(range.start),\n end: timeToMinutes(range.end),\n }))\n .sort((a, b) => a.start - b.start); // Sort by start time\n\n // Attempt to add a new time range at the end of the day\n const lastRangeEnd = timeRangesInMinutes[timeRangesInMinutes.length - 1].end;\n if (lastRangeEnd + 60 <= dayEnd) {\n // There's room at the end of the day\n this.schedule[day].push({\n start: convertTo12HourFormat(minutesToTime(lastRangeEnd)),\n end: convertTo12HourFormat(minutesToTime(lastRangeEnd + 60)),\n });\n } else {\n // No room at the end, look for gaps at the beginning of the day\n let gapFound = false;\n if (timeRangesInMinutes[0].start > dayStart + 60) {\n // There's room for at least a 1-hour meeting at the beginning of the day\n this.schedule[day].push({\n start: convertTo12HourFormat(minutesToTime(dayStart)),\n end: convertTo12HourFormat(minutesToTime(dayStart + 60)),\n });\n gapFound = true;\n }\n\n if (!gapFound) {\n // Search for gaps between scheduled time ranges\n for (let i = 0; i < timeRangesInMinutes.length - 1; i++) {\n const currentEnd = timeRangesInMinutes[i].end;\n const nextStart = timeRangesInMinutes[i + 1].start;\n\n if (nextStart - currentEnd >= 60) {\n // Found a gap\n this.schedule[day].push({\n start: convertTo12HourFormat(minutesToTime(currentEnd)),\n end: convertTo12HourFormat(minutesToTime(currentEnd + 60)),\n });\n break; // Exit the loop after adding a time range\n }\n }\n }\n }\n }\n\n // Sort the updated schedule to maintain order\n this.schedule[day].sort((a, b) => timeToMinutes(a.start) - timeToMinutes(b.start));\n\n this.schedule = { ...this.schedule };\n }\n\n removeTimeRange(day, index) {\n this.schedule[day].splice(index, 1);\n this.schedule = { ...this.schedule };\n }\n\n @Listen('timeChange')\n setTime(event: CustomEvent<{ key: string; value: string }>) {\n const { key, value } = event.detail;\n const [dayIndex, timeType] = key.split('_');\n const [day, index] = dayIndex.split(':');\n\n if (timeType === 'start') {\n this.schedule[day][index].start = value;\n } else if (timeType === 'end') {\n this.schedule[day][index].end = value;\n }\n this.internals.setValidity({ customError: false });\n this.schedule = { ...this.schedule };\n }\n\n @Listen('formError')\n setFormError(event: CustomEvent<{ key: string; message: string }>) {\n const { key } = event.detail;\n const [_, timeType] = key.split('_');\n const element = this.host.shadowRoot?.getElementById(key);\n if (element) {\n this.internals.setValidity({ customError: true }, `Invalid ${timeType} time`, element as HTMLInputElement);\n }\n }\n\n openHoursToSchedule(openHours: OpenHours[]) {\n const newSchedule = {\n SUN: [],\n MON: [],\n TUE: [],\n WED: [],\n THU: [],\n FRI: [],\n SAT: [],\n };\n openHours.forEach(openHour => {\n openHour.days.forEach(day => {\n const dayKey = this.getDayKey(day);\n const start12hr = convertTo12HourFormat(openHour.start);\n const end12hr = convertTo12HourFormat(openHour.end);\n const timeRange = { start: start12hr, end: end12hr };\n\n // Check if the time range already exists for the day\n let timeRangeExists = false;\n if (newSchedule[dayKey]) {\n // Search for an existing time range that matches the current one\n timeRangeExists = newSchedule[dayKey].some(range => range.start === timeRange.start && range.end === timeRange.end);\n }\n\n if (!timeRangeExists) {\n if (newSchedule[dayKey]) {\n newSchedule[dayKey].push(timeRange);\n } else {\n newSchedule[dayKey] = [timeRange];\n }\n }\n });\n });\n\n this.timezone = this.defaultTimezone;\n this.schedule = newSchedule;\n }\n\n getDayKey(dayIndex: number): string {\n const days = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];\n return days[dayIndex];\n }\n\n scheduleToOpenHours(schedule: Schedule): OpenHours[] {\n const dayKeys = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];\n let openHoursMap: Map<string, { days: number[]; start: string; end: string }> = new Map();\n\n dayKeys.forEach((dayKey, index) => {\n if (schedule[dayKey]) {\n // Check if schedule for the day exists\n schedule[dayKey].forEach(timeRange => {\n const start24hr = convertTo24HourFormat(timeRange.start);\n const end24hr = convertTo24HourFormat(timeRange.end);\n const key = `${start24hr}-${end24hr}`;\n\n if (!openHoursMap.has(key)) {\n openHoursMap.set(key, { days: [index], start: start24hr, end: end24hr });\n } else {\n let entry = openHoursMap.get(key);\n if (entry) {\n entry.days.push(index);\n openHoursMap.set(key, entry);\n }\n }\n });\n }\n });\n\n let selectedOpenHours: OpenHours[] = [];\n openHoursMap.forEach((value, _key) => {\n selectedOpenHours.push({\n days: value.days,\n start: value.start,\n end: value.end,\n timezone: this.timezone,\n });\n });\n\n return selectedOpenHours;\n }\n\n @RegisterComponent<NylasAvailabilityPicker, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-availability-picker',\n stateToProps: new Map([['schedulerConfig.selectedConfiguration', 'selectedConfiguration']]),\n fireRegisterEvent: true,\n })\n render() {\n const timezoneOptions = Object.keys(TIMEZONE_MAP).map(key => ({\n label: TIMEZONE_MAP[key],\n value: key,\n }));\n\n return (\n <Host>\n <div class=\"nylas-availability-picker\" part=\"nap\">\n {!this.hideHeader && (\n <div class=\"header\" part=\"nap__header\">\n <h3>General availability</h3>\n <p>Set your availability for scheduling meetings.</p>\n </div>\n )}\n <div class=\"content\">\n <div class=\"select-timezone\" part=\"nap__select-timezone\">\n <h4 class=\"sub-header\">\n Select timezone\n <span class=\"icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">Select your timezone for displaying availability.</span>\n </tooltip-component>\n </span>\n </h4>\n <select-dropdown\n name=\"timezone\"\n exportparts=\"sd_dropdown: nap__timezone-container, sd_dropdown-button: nap__timezone-button, sd_dropdown-content: nap__timezone-dropdown-content\"\n options={timezoneOptions}\n defaultSelectedOption={timezoneOptions.find(i => i.value === this.defaultTimezone)}\n >\n <span slot=\"select-icon\">\n <globe-icon width=\"20\" height=\"20\" />\n </span>\n </select-dropdown>\n </div>\n <div class=\"availability\" part=\"nap__availability\">\n {Object.keys(this.schedule).map(key => {\n const day = key;\n const timeRanges = this.schedule[key] as { start: string; end: string }[];\n return (\n <div class=\"availability-day\">\n <div class=\"day\" part=\"nap__day\">\n <input\n type=\"checkbox\"\n name={day}\n id={day}\n checked={timeRanges.length > 0}\n onClick={() => {\n if (timeRanges.length > 0) {\n this.schedule[day] = [];\n } else {\n this.schedule[day] = [{ start: '09:00am', end: '05:00pm' }];\n }\n this.schedule = { ...this.schedule };\n }}\n />\n <label htmlFor={day} aria-label=\"Select day\">\n {day}\n </label>\n </div>\n <div class=\"time-ranges\" part=\"nap__time-ranges\">\n {timeRanges.length ? null : <span class=\"unavailable\">Unavailable</span>}\n {timeRanges.length > 0 &&\n timeRanges.map((timeRange, timeRangeIndex) => {\n const startKey = `${key}:${timeRangeIndex}_start`;\n const endKey = `${key}:${timeRangeIndex}_end`;\n return (\n <div class=\"time-range\" part=\"nap__time-range\">\n <div class=\"pickers\">\n <nylas-time-window-picker\n id={startKey}\n hasError={this.overlapDays[day]?.includes(timeRangeIndex)}\n time={timeRange.start}\n name={startKey}\n key={startKey}\n exportparts=\"time-picker: nap__time-picker-container, time-input: nap__time-picker-input, times: nap__time-picker-times\"\n />\n <span> - </span>\n <nylas-time-window-picker\n id={endKey}\n hasError={this.overlapDays[day]?.includes(timeRangeIndex)}\n time={timeRange.end}\n name={endKey}\n key={endKey}\n minimumStartTime={timeRange.start}\n exportparts=\"time-picker: nap__time-picker-container, time-input: nap__time-picker-input, times: nap__time-picker-times\"\n />\n </div>\n <button onClick={() => this.removeTimeRange(day, timeRangeIndex)}>\n <close-icon />\n </button>\n </div>\n );\n })}\n <p class=\"error\">{this.overlapDays[day] ? 'Overlapping time ranges' : ''}</p>\n </div>\n <div>\n {timeRanges.length > 0 ? (\n <button onClick={() => this.addTimeRange(day)} part=\"nap__add-time-range\">\n <add-circle-icon />\n </button>\n ) : null}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"]}