@nylas/web-elements 1.1.0-canary.4 → 1.1.0-canary.7

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 (939) hide show
  1. package/dist/cjs/add-circle-icon.cjs.entry.js +1 -1
  2. package/dist/cjs/add-circle-icon_22.cjs.entry.js +224 -94
  3. package/dist/cjs/add-circle-icon_22.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 +2 -2
  10. package/dist/cjs/button-component.cjs.entry.js.map +1 -1
  11. package/dist/cjs/calendar-cancel-icon.cjs.entry.js +1 -1
  12. package/dist/cjs/calendar-check-icon.cjs.entry.js +1 -1
  13. package/dist/cjs/calendar-check-icon_2.cjs.entry.js +2 -2
  14. package/dist/cjs/calendar-icon.cjs.entry.js +1 -1
  15. package/dist/cjs/calendar-info-icon.cjs.entry.js +1 -1
  16. package/dist/cjs/calendar-patterns-icon.cjs.entry.js +1 -1
  17. package/dist/cjs/checkmark-circle-icon.cjs.entry.js +1 -1
  18. package/dist/cjs/chevron-icon.cjs.entry.js +1 -1
  19. package/dist/cjs/chevron-icon_3.cjs.entry.js +4 -4
  20. package/dist/cjs/close-icon.cjs.entry.js +1 -1
  21. package/dist/cjs/{constants-6baf1f1d.js → constants-3e962931.js} +11 -1
  22. package/dist/cjs/{constants-6baf1f1d.js.map → constants-3e962931.js.map} +1 -1
  23. package/dist/cjs/{constants-0fba94a4.js → constants-d590922e.js} +11 -1
  24. package/dist/cjs/{constants-0fba94a4.js.map → constants-d590922e.js.map} +1 -1
  25. package/dist/cjs/document-refresh-icon.cjs.entry.js +1 -1
  26. package/dist/cjs/flow-icon.cjs.entry.js +1 -1
  27. package/dist/cjs/folder-icon.cjs.entry.js +1 -1
  28. package/dist/cjs/forward-icon.cjs.entry.js +1 -1
  29. package/dist/cjs/forward-icon_6.cjs.entry.js +9 -9
  30. package/dist/cjs/globe-icon.cjs.entry.js +1 -1
  31. package/dist/cjs/google-logo-icon.cjs.entry.js +1 -1
  32. package/dist/cjs/google-logo-icon_4.cjs.entry.js +467 -0
  33. package/dist/cjs/google-logo-icon_4.cjs.entry.js.map +1 -0
  34. package/dist/cjs/inbox-icon.cjs.entry.js +1 -1
  35. package/dist/cjs/index-7af03e3f.js +1 -158
  36. package/dist/cjs/index-c14ea8f5.js +1 -358
  37. package/dist/cjs/index.cjs.js +3 -1
  38. package/dist/cjs/index.cjs.js.map +1 -1
  39. package/dist/cjs/{index.es-68425511.js → index.es-0a0f2d87.js} +9 -4
  40. package/dist/cjs/index.es-0a0f2d87.js.map +1 -0
  41. package/dist/cjs/{index.es-447c5aca.js → index.es-b12b7df1.js} +9 -4
  42. package/dist/cjs/index.es-b12b7df1.js.map +1 -0
  43. package/dist/cjs/info-icon.cjs.entry.js +1 -1
  44. package/dist/cjs/info-icon_2.cjs.entry.js +2 -2
  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/{mailbox-store-556bc7b6.js → mailbox-store-05fa3bec.js} +3 -3
  51. package/dist/cjs/{mailbox-store-556bc7b6.js.map → mailbox-store-05fa3bec.js.map} +1 -1
  52. package/dist/cjs/{mailbox-store-aacd75ff.js → mailbox-store-14531fd4.js} +3 -3
  53. package/dist/cjs/{mailbox-store-aacd75ff.js.map → mailbox-store-14531fd4.js.map} +1 -1
  54. package/dist/cjs/microsoft-logo-icon.cjs.entry.js +1 -1
  55. package/dist/cjs/multi-select-dropdown.cjs.entry.js +3 -3
  56. package/dist/cjs/nylas-additional-participants.cjs.entry.js +3 -3
  57. package/dist/cjs/nylas-api-request-27c25287.js +60 -0
  58. package/dist/cjs/nylas-api-request-27c25287.js.map +1 -0
  59. package/dist/cjs/nylas-api-request-abdb8dd8.js +58 -0
  60. package/dist/cjs/nylas-api-request-abdb8dd8.js.map +1 -0
  61. package/dist/cjs/nylas-availability-picker.cjs.entry.js +33 -16
  62. package/dist/cjs/nylas-availability-picker.cjs.entry.js.map +1 -1
  63. package/dist/cjs/nylas-booked-event-card.cjs.entry.js +3 -3
  64. package/dist/cjs/nylas-booked-event-card_10.cjs.entry.js +7 -7
  65. package/dist/cjs/nylas-booking-calendar-picker.cjs.entry.js +12 -6
  66. package/dist/cjs/nylas-booking-calendar-picker.cjs.entry.js.map +1 -1
  67. package/dist/cjs/nylas-booking-form.cjs.entry.js +2 -2
  68. package/dist/cjs/nylas-buffer-time.cjs.entry.js +2 -2
  69. package/dist/cjs/nylas-calendar-picker.cjs.entry.js +13 -8
  70. package/dist/cjs/nylas-calendar-picker.cjs.entry.js.map +1 -1
  71. package/dist/cjs/nylas-cancel-booking-form.cjs.entry.js +3 -3
  72. package/dist/cjs/nylas-cancelled-event-card.cjs.entry.js +3 -3
  73. package/dist/cjs/nylas-composer.cjs.entry.js +2 -2
  74. package/dist/cjs/nylas-custom-booking-flow.cjs.entry.js +21 -12
  75. package/dist/cjs/nylas-custom-booking-flow.cjs.entry.js.map +1 -1
  76. package/dist/cjs/nylas-date-picker.cjs.entry.js +2 -2
  77. package/dist/cjs/nylas-editor-tabs.cjs.entry.js +85 -39
  78. package/dist/cjs/nylas-editor-tabs.cjs.entry.js.map +1 -1
  79. package/dist/cjs/nylas-event-description.cjs.entry.js +15 -6
  80. package/dist/cjs/nylas-event-description.cjs.entry.js.map +1 -1
  81. package/dist/cjs/nylas-event-duration.cjs.entry.js +15 -10
  82. package/dist/cjs/nylas-event-duration.cjs.entry.js.map +1 -1
  83. package/dist/cjs/nylas-event-info.cjs.entry.js +3 -3
  84. package/dist/cjs/nylas-event-limits.cjs.entry.js +3 -3
  85. package/dist/cjs/nylas-event-title.cjs.entry.js +52 -12
  86. package/dist/cjs/nylas-event-title.cjs.entry.js.map +1 -1
  87. package/dist/cjs/nylas-form-card.cjs.entry.js +3 -3
  88. package/dist/cjs/nylas-if-state.cjs.entry.js +2 -2
  89. package/dist/cjs/nylas-limit-future-bookings.cjs.entry.js +24 -11
  90. package/dist/cjs/nylas-limit-future-bookings.cjs.entry.js.map +1 -1
  91. package/dist/cjs/nylas-list-configurations.cjs.entry.js +129 -0
  92. package/dist/cjs/nylas-list-configurations.cjs.entry.js.map +1 -0
  93. package/dist/cjs/nylas-list-folders.cjs.entry.js +3 -3
  94. package/dist/cjs/nylas-list-threads.cjs.entry.js +3 -3
  95. package/dist/cjs/nylas-locale-switch.cjs.entry.js +3 -3
  96. package/dist/cjs/nylas-location-component.cjs.entry.js +17 -6
  97. package/dist/cjs/nylas-location-component.cjs.entry.js.map +1 -1
  98. package/dist/cjs/nylas-login.cjs.entry.js +3 -3
  99. package/dist/cjs/nylas-logo.cjs.entry.js +1 -1
  100. package/dist/cjs/nylas-mailbox-pagination.cjs.entry.js +2 -2
  101. package/dist/cjs/nylas-mailbox-toolbar-button.cjs.entry.js +3 -3
  102. package/dist/cjs/nylas-mailbox.cjs.entry.js +4 -4
  103. package/dist/cjs/nylas-min-cancellation-notice.cjs.entry.js +28 -13
  104. package/dist/cjs/nylas-min-cancellation-notice.cjs.entry.js.map +1 -1
  105. package/dist/cjs/nylas-notification.cjs.entry.js +2 -2
  106. package/dist/cjs/nylas-provider.cjs.entry.js +6 -6
  107. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +201 -75
  108. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js.map +1 -1
  109. package/dist/cjs/nylas-scheduling.cjs.entry.js +3 -3
  110. package/dist/cjs/nylas-selected-event-card.cjs.entry.js +3 -3
  111. package/dist/cjs/nylas-summarize-message-button.cjs.entry.js +4 -4
  112. package/dist/cjs/nylas-threads-refresh.cjs.entry.js +4 -4
  113. package/dist/cjs/nylas-threads-search.cjs.entry.js +3 -3
  114. package/dist/cjs/nylas-time-window-picker.cjs.entry.js +2 -2
  115. package/dist/cjs/nylas-timeslot-picker.cjs.entry.js +2 -2
  116. package/dist/cjs/nylas-view-email.cjs.entry.js +2 -2
  117. package/dist/cjs/nylas-view-thread.cjs.entry.js +3 -3
  118. package/dist/cjs/nylas-web-elements.cjs.js +1 -1
  119. package/dist/cjs/people-icon.cjs.entry.js +1 -1
  120. package/dist/cjs/play-icon.cjs.entry.js +1 -1
  121. package/dist/cjs/play-icon_2.cjs.entry.js +2 -2
  122. package/dist/cjs/refresh-icon.cjs.entry.js +1 -1
  123. package/dist/cjs/{register-component-d729f3f7.js → register-component-09ebdf31.js} +8 -2
  124. package/dist/cjs/register-component-09ebdf31.js.map +1 -0
  125. package/dist/cjs/{register-component-f1ebc65d.js → register-component-c8b6e907.js} +8 -2
  126. package/dist/cjs/register-component-c8b6e907.js.map +1 -0
  127. package/dist/cjs/reply-all-icon.cjs.entry.js +1 -1
  128. package/dist/cjs/reply-icon.cjs.entry.js +1 -1
  129. package/dist/cjs/scheduler-config-store-37690bf0.js +32 -0
  130. package/dist/cjs/scheduler-config-store-37690bf0.js.map +1 -0
  131. package/dist/cjs/scheduler-config-store-529c8d7e.js +32 -0
  132. package/dist/cjs/scheduler-config-store-529c8d7e.js.map +1 -0
  133. package/dist/cjs/{scheduler-store-7320f5d0.js → scheduler-store-0081970d.js} +16 -3
  134. package/dist/cjs/scheduler-store-0081970d.js.map +1 -0
  135. package/dist/cjs/{scheduler-store-4cb46b3c.js → scheduler-store-67dc1986.js} +16 -3
  136. package/dist/cjs/scheduler-store-67dc1986.js.map +1 -0
  137. package/dist/cjs/search-icon.cjs.entry.js +1 -1
  138. package/dist/cjs/select-dropdown.cjs.entry.js +2 -2
  139. package/dist/cjs/sent-icon.cjs.entry.js +1 -1
  140. package/dist/cjs/spam-icon.cjs.entry.js +1 -1
  141. package/dist/cjs/star-icon.cjs.entry.js +1 -1
  142. package/dist/cjs/stop-icon.cjs.entry.js +1 -1
  143. package/dist/cjs/time-period-selector.cjs.entry.js +2 -2
  144. package/dist/cjs/tooltip-component.cjs.entry.js +1 -1
  145. package/dist/cjs/translate-icon.cjs.entry.js +1 -1
  146. package/dist/cjs/trash-icon.cjs.entry.js +1 -1
  147. package/dist/cjs/underline-icon.cjs.entry.js +1 -1
  148. package/dist/cjs/{utils-53dd7574.js → utils-20663d54.js} +19 -1
  149. package/dist/cjs/utils-20663d54.js.map +1 -0
  150. package/dist/cjs/{utils-53298b01.js → utils-2c7f0895.js} +19 -1
  151. package/dist/cjs/{utils-53298b01.js.map → utils-2c7f0895.js.map} +1 -1
  152. package/dist/cjs/warning-icon.cjs.entry.js +1 -1
  153. package/dist/collection/collection-manifest.json +1 -0
  154. package/dist/collection/common/abstract-provider.js +7 -2
  155. package/dist/collection/common/abstract-provider.js.map +1 -1
  156. package/dist/collection/common/component-types.js.map +1 -1
  157. package/dist/collection/common/constants.js +9 -0
  158. package/dist/collection/common/constants.js.map +1 -1
  159. package/dist/collection/common/icons/add-circle.js +1 -1
  160. package/dist/collection/common/icons/archive.js +1 -1
  161. package/dist/collection/common/icons/arrow.js +1 -1
  162. package/dist/collection/common/icons/bold.js +1 -1
  163. package/dist/collection/common/icons/calendar-cancel.js +1 -1
  164. package/dist/collection/common/icons/calendar-check.js +1 -1
  165. package/dist/collection/common/icons/calendar-info.js +1 -1
  166. package/dist/collection/common/icons/calendar-patterns.js +1 -1
  167. package/dist/collection/common/icons/calendar.js +1 -1
  168. package/dist/collection/common/icons/checkmark-circle.js +1 -1
  169. package/dist/collection/common/icons/chevron.js +1 -1
  170. package/dist/collection/common/icons/close.js +1 -1
  171. package/dist/collection/common/icons/document-refresh.js +1 -1
  172. package/dist/collection/common/icons/flow.js +1 -1
  173. package/dist/collection/common/icons/folder.js +1 -1
  174. package/dist/collection/common/icons/forward.js +1 -1
  175. package/dist/collection/common/icons/globe.js +1 -1
  176. package/dist/collection/common/icons/google-logo.js +1 -1
  177. package/dist/collection/common/icons/inbox.js +1 -1
  178. package/dist/collection/common/icons/info.js +1 -1
  179. package/dist/collection/common/icons/italic.js +1 -1
  180. package/dist/collection/common/icons/loading.js +1 -1
  181. package/dist/collection/common/icons/location-off.js +1 -1
  182. package/dist/collection/common/icons/location.js +1 -1
  183. package/dist/collection/common/icons/microsoft-logo.js +1 -1
  184. package/dist/collection/common/icons/nylas-logo.js +1 -1
  185. package/dist/collection/common/icons/people.js +1 -1
  186. package/dist/collection/common/icons/play.js +1 -1
  187. package/dist/collection/common/icons/refresh.js +1 -1
  188. package/dist/collection/common/icons/reply-all.js +1 -1
  189. package/dist/collection/common/icons/reply.js +1 -1
  190. package/dist/collection/common/icons/search.js +1 -1
  191. package/dist/collection/common/icons/sent.js +1 -1
  192. package/dist/collection/common/icons/spam.js +1 -1
  193. package/dist/collection/common/icons/star.js +1 -1
  194. package/dist/collection/common/icons/stop.js +1 -1
  195. package/dist/collection/common/icons/translate.js +1 -1
  196. package/dist/collection/common/icons/trash.js +1 -1
  197. package/dist/collection/common/icons/underline.js +1 -1
  198. package/dist/collection/common/icons/warning.js +1 -1
  199. package/dist/collection/common/nylas-api-request.js +27 -7
  200. package/dist/collection/common/nylas-api-request.js.map +1 -1
  201. package/dist/collection/common/register-component.js +6 -0
  202. package/dist/collection/common/register-component.js.map +1 -1
  203. package/dist/collection/common/types.js.map +1 -1
  204. package/dist/collection/components/design-system/button-component/button-component.css +5 -0
  205. package/dist/collection/components/design-system/button-component/button-component.js +1 -1
  206. package/dist/collection/components/design-system/multi-select-dropdown/multi-select-dropdown.js +2 -2
  207. package/dist/collection/components/design-system/select-dropdown/select-dropdown.js +2 -2
  208. package/dist/collection/components/design-system/time-period-selector/time-period-selector.js +1 -1
  209. package/dist/collection/components/design-system/tooltip-component/toolitp-component.js +1 -1
  210. package/dist/collection/components/mailbox/nylas-composer/nylas-composer.js +1 -1
  211. package/dist/collection/components/mailbox/nylas-list-folders/nylas-list-folders.js +1 -1
  212. package/dist/collection/components/mailbox/nylas-list-threads/nylas-list-threads.js +1 -1
  213. package/dist/collection/components/mailbox/nylas-mailbox/nylas-mailbox.js +1 -1
  214. package/dist/collection/components/mailbox/nylas-mailbox-toolbar-button/nylas-mailbox-toolbar-button.js +1 -1
  215. package/dist/collection/components/mailbox/nylas-summarize-message-button/nylas-summarize-message-button.js +2 -2
  216. package/dist/collection/components/mailbox/nylas-threads-refresh/nylas-threads-refresh.js +2 -2
  217. package/dist/collection/components/mailbox/nylas-threads-search/nylas-threads-search.js +1 -1
  218. package/dist/collection/components/mailbox/nylas-view-email/nylas-view-email.js +1 -1
  219. package/dist/collection/components/mailbox/nylas-view-thread/nylas-view-thread.js +1 -1
  220. package/dist/collection/components/nylas-login/nylas-login.js +1 -1
  221. package/dist/collection/components/nylas-provider/nylas-provider.js +2 -2
  222. package/dist/collection/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.js.map +1 -1
  223. package/dist/collection/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.js +1 -1
  224. package/dist/collection/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.js +1 -1
  225. package/dist/collection/components/scheduler/nylas-notification/nylas-notification.js +1 -1
  226. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js +1 -1
  227. package/dist/collection/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.js +55 -15
  228. package/dist/collection/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.js.map +1 -1
  229. package/dist/collection/components/scheduler-editor/nylas-booking-calendar-picker/nylas-booking-calendar-picker.js +32 -5
  230. package/dist/collection/components/scheduler-editor/nylas-booking-calendar-picker/nylas-booking-calendar-picker.js.map +1 -1
  231. package/dist/collection/components/scheduler-editor/nylas-calendar-picker/nylas-calendar-picker.js +23 -14
  232. package/dist/collection/components/scheduler-editor/nylas-calendar-picker/nylas-calendar-picker.js.map +1 -1
  233. package/dist/collection/components/scheduler-editor/nylas-custom-booking-flow/nylas-custom-booking-flow.js +41 -9
  234. package/dist/collection/components/scheduler-editor/nylas-custom-booking-flow/nylas-custom-booking-flow.js.map +1 -1
  235. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.css +48 -9
  236. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js +167 -36
  237. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js.map +1 -1
  238. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/tab-contents.js +4 -4
  239. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/tab-contents.js.map +1 -1
  240. package/dist/collection/components/scheduler-editor/nylas-event-description/nylas-event-description.css +1 -1
  241. package/dist/collection/components/scheduler-editor/nylas-event-description/nylas-event-description.js +34 -2
  242. package/dist/collection/components/scheduler-editor/nylas-event-description/nylas-event-description.js.map +1 -1
  243. package/dist/collection/components/scheduler-editor/nylas-event-duration/nylas-event-duration.css +1 -1
  244. package/dist/collection/components/scheduler-editor/nylas-event-duration/nylas-event-duration.js +35 -7
  245. package/dist/collection/components/scheduler-editor/nylas-event-duration/nylas-event-duration.js.map +1 -1
  246. package/dist/collection/components/scheduler-editor/nylas-event-info/nylas-event-info.js +1 -1
  247. package/dist/collection/components/scheduler-editor/nylas-event-limits/nylas-event-limits.js +1 -1
  248. package/dist/collection/components/scheduler-editor/nylas-event-title/nylas-event-title.css +8 -1
  249. package/dist/collection/components/scheduler-editor/nylas-event-title/nylas-event-title.js +83 -9
  250. package/dist/collection/components/scheduler-editor/nylas-event-title/nylas-event-title.js.map +1 -1
  251. package/dist/collection/components/scheduler-editor/nylas-form-card/nylas-form-card.js +1 -1
  252. package/dist/collection/components/scheduler-editor/nylas-limit-future-bookings/nylas-limit-future-bookings.js +45 -9
  253. package/dist/collection/components/scheduler-editor/nylas-limit-future-bookings/nylas-limit-future-bookings.js.map +1 -1
  254. package/dist/collection/components/scheduler-editor/nylas-list-configurations/nylas-list-configurations.css +142 -0
  255. package/dist/collection/components/scheduler-editor/nylas-list-configurations/nylas-list-configurations.js +330 -0
  256. package/dist/collection/components/scheduler-editor/nylas-list-configurations/nylas-list-configurations.js.map +1 -0
  257. package/dist/collection/components/scheduler-editor/nylas-location-component/nylas-location-component.css +2 -2
  258. package/dist/collection/components/scheduler-editor/nylas-location-component/nylas-location-component.js +37 -3
  259. package/dist/collection/components/scheduler-editor/nylas-location-component/nylas-location-component.js.map +1 -1
  260. package/dist/collection/components/scheduler-editor/nylas-min-cancellation-notice/nylas-min-cancellation-notice.js +49 -11
  261. package/dist/collection/components/scheduler-editor/nylas-min-cancellation-notice/nylas-min-cancellation-notice.js.map +1 -1
  262. package/dist/collection/components/scheduler-editor/nylas-scheduler-editor/LoginRequired.js +30 -0
  263. package/dist/collection/components/scheduler-editor/nylas-scheduler-editor/LoginRequired.js.map +1 -0
  264. package/dist/collection/components/scheduler-editor/nylas-scheduler-editor/nylas-scheduler-editor.css +23 -2
  265. package/dist/collection/components/scheduler-editor/nylas-scheduler-editor/nylas-scheduler-editor.js +108 -53
  266. package/dist/collection/components/scheduler-editor/nylas-scheduler-editor/nylas-scheduler-editor.js.map +1 -1
  267. package/dist/collection/components/scheduler-editor/nylas-time-window-picker/nylas-time-window-picker.js +1 -1
  268. package/dist/collection/connector/nylas-scheduler-config-connector/index.js.map +1 -1
  269. package/dist/collection/connector/nylas-scheduler-connector/errors/index.js +8 -0
  270. package/dist/collection/connector/nylas-scheduler-connector/errors/index.js.map +1 -1
  271. package/dist/collection/connector/shared/api/scheduler-config.js +118 -30
  272. package/dist/collection/connector/shared/api/scheduler-config.js.map +1 -1
  273. package/dist/collection/connector/shared/api/scheduler.js +6 -1
  274. package/dist/collection/connector/shared/api/scheduler.js.map +1 -1
  275. package/dist/collection/index.js +0 -1
  276. package/dist/collection/index.js.map +1 -1
  277. package/dist/collection/stores/scheduler-config-store.js +15 -2
  278. package/dist/collection/stores/scheduler-config-store.js.map +1 -1
  279. package/dist/collection/utils/utils.js +16 -0
  280. package/dist/collection/utils/utils.js.map +1 -1
  281. package/dist/collection/utils/utils.spec.js +8 -1
  282. package/dist/collection/utils/utils.spec.js.map +1 -1
  283. package/dist/components/add-circle.js +1 -2
  284. package/dist/components/add-circle.js.map +1 -1
  285. package/dist/components/archive.js +1 -2
  286. package/dist/components/archive.js.map +1 -1
  287. package/dist/components/arrow.js +1 -2
  288. package/dist/components/arrow.js.map +1 -1
  289. package/dist/components/bold.js +1 -2
  290. package/dist/components/bold.js.map +1 -1
  291. package/dist/components/button-component2.js +2 -3
  292. package/dist/components/button-component2.js.map +1 -1
  293. package/dist/components/calendar-cancel.js +1 -2
  294. package/dist/components/calendar-cancel.js.map +1 -1
  295. package/dist/components/calendar-check.js +1 -2
  296. package/dist/components/calendar-check.js.map +1 -1
  297. package/dist/components/calendar-info.js +1 -2
  298. package/dist/components/calendar-info.js.map +1 -1
  299. package/dist/components/calendar-patterns.js +1 -2
  300. package/dist/components/calendar-patterns.js.map +1 -1
  301. package/dist/components/calendar.js +1 -2
  302. package/dist/components/calendar.js.map +1 -1
  303. package/dist/components/checkmark-circle.js +1 -2
  304. package/dist/components/checkmark-circle.js.map +1 -1
  305. package/dist/components/chevron.js +1 -2
  306. package/dist/components/chevron.js.map +1 -1
  307. package/dist/components/close.js +1 -2
  308. package/dist/components/close.js.map +1 -1
  309. package/dist/components/constants.js +11 -2
  310. package/dist/components/constants.js.map +1 -1
  311. package/dist/components/document-refresh-icon.js +1 -2
  312. package/dist/components/document-refresh-icon.js.map +1 -1
  313. package/dist/components/flow.js +1 -2
  314. package/dist/components/flow.js.map +1 -1
  315. package/dist/components/focus-visible.js +1 -1
  316. package/dist/components/folder.js +1 -2
  317. package/dist/components/folder.js.map +1 -1
  318. package/dist/components/forward.js +1 -2
  319. package/dist/components/forward.js.map +1 -1
  320. package/dist/components/globe.js +1 -2
  321. package/dist/components/globe.js.map +1 -1
  322. package/dist/components/google-logo.js +1 -2
  323. package/dist/components/google-logo.js.map +1 -1
  324. package/dist/components/inbox.js +1 -2
  325. package/dist/components/inbox.js.map +1 -1
  326. package/dist/components/index.es.js +8 -3
  327. package/dist/components/index.es.js.map +1 -1
  328. package/dist/components/info.js +1 -2
  329. package/dist/components/info.js.map +1 -1
  330. package/dist/components/italic.js +1 -2
  331. package/dist/components/italic.js.map +1 -1
  332. package/dist/components/loading.js +1 -2
  333. package/dist/components/loading.js.map +1 -1
  334. package/dist/components/location-off.js +1 -2
  335. package/dist/components/location-off.js.map +1 -1
  336. package/dist/components/location.js +1 -2
  337. package/dist/components/location.js.map +1 -1
  338. package/dist/components/mailbox-store.js +1 -1
  339. package/dist/components/microsoft-logo.js +1 -2
  340. package/dist/components/microsoft-logo.js.map +1 -1
  341. package/dist/components/multi-select-dropdown2.js +3 -4
  342. package/dist/components/multi-select-dropdown2.js.map +1 -1
  343. package/dist/components/nylas-additional-participants.js +2 -3
  344. package/dist/components/nylas-additional-participants.js.map +1 -1
  345. package/dist/components/nylas-api-request.js +28 -7
  346. package/dist/components/nylas-api-request.js.map +1 -1
  347. package/dist/components/nylas-availability-picker2.js +33 -15
  348. package/dist/components/nylas-availability-picker2.js.map +1 -1
  349. package/dist/components/nylas-booked-event-card2.js +1 -2
  350. package/dist/components/nylas-booked-event-card2.js.map +1 -1
  351. package/dist/components/nylas-booking-calendar-picker2.js +12 -6
  352. package/dist/components/nylas-booking-calendar-picker2.js.map +1 -1
  353. package/dist/components/nylas-booking-form2.js +1 -2
  354. package/dist/components/nylas-booking-form2.js.map +1 -1
  355. package/dist/components/nylas-buffer-time2.js +1 -2
  356. package/dist/components/nylas-buffer-time2.js.map +1 -1
  357. package/dist/components/nylas-calendar-picker2.js +13 -9
  358. package/dist/components/nylas-calendar-picker2.js.map +1 -1
  359. package/dist/components/nylas-cancel-booking-form2.js +2 -3
  360. package/dist/components/nylas-cancel-booking-form2.js.map +1 -1
  361. package/dist/components/nylas-cancelled-event-card2.js +2 -3
  362. package/dist/components/nylas-cancelled-event-card2.js.map +1 -1
  363. package/dist/components/nylas-composer2.js +2 -3
  364. package/dist/components/nylas-composer2.js.map +1 -1
  365. package/dist/components/nylas-custom-booking-flow2.js +23 -13
  366. package/dist/components/nylas-custom-booking-flow2.js.map +1 -1
  367. package/dist/components/nylas-date-picker2.js +1 -2
  368. package/dist/components/nylas-date-picker2.js.map +1 -1
  369. package/dist/components/nylas-editor-tabs2.js +91 -43
  370. package/dist/components/nylas-editor-tabs2.js.map +1 -1
  371. package/dist/components/nylas-event-description2.js +17 -7
  372. package/dist/components/nylas-event-description2.js.map +1 -1
  373. package/dist/components/nylas-event-duration2.js +16 -10
  374. package/dist/components/nylas-event-duration2.js.map +1 -1
  375. package/dist/components/nylas-event-info2.js +2 -3
  376. package/dist/components/nylas-event-info2.js.map +1 -1
  377. package/dist/components/nylas-event-limits2.js +2 -3
  378. package/dist/components/nylas-event-limits2.js.map +1 -1
  379. package/dist/components/nylas-event-title2.js +56 -14
  380. package/dist/components/nylas-event-title2.js.map +1 -1
  381. package/dist/components/nylas-form-card2.js +2 -3
  382. package/dist/components/nylas-form-card2.js.map +1 -1
  383. package/dist/components/nylas-if-state.js +1 -2
  384. package/dist/components/nylas-if-state.js.map +1 -1
  385. package/dist/components/nylas-limit-future-bookings2.js +25 -11
  386. package/dist/components/nylas-limit-future-bookings2.js.map +1 -1
  387. package/dist/components/nylas-list-configurations.d.ts +11 -0
  388. package/dist/components/nylas-list-configurations.js +8 -0
  389. package/dist/components/nylas-list-configurations.js.map +1 -0
  390. package/dist/components/nylas-list-configurations2.js +159 -0
  391. package/dist/components/nylas-list-configurations2.js.map +1 -0
  392. package/dist/components/nylas-list-folders.js +2 -3
  393. package/dist/components/nylas-list-folders.js.map +1 -1
  394. package/dist/components/nylas-list-threads.js +2 -3
  395. package/dist/components/nylas-list-threads.js.map +1 -1
  396. package/dist/components/nylas-locale-switch2.js +0 -1
  397. package/dist/components/nylas-locale-switch2.js.map +1 -1
  398. package/dist/components/nylas-location-component2.js +18 -6
  399. package/dist/components/nylas-location-component2.js.map +1 -1
  400. package/dist/components/nylas-login.js +1 -2
  401. package/dist/components/nylas-login.js.map +1 -1
  402. package/dist/components/nylas-logo2.js +1 -2
  403. package/dist/components/nylas-logo2.js.map +1 -1
  404. package/dist/components/nylas-mailbox-pagination.js +1 -2
  405. package/dist/components/nylas-mailbox-pagination.js.map +1 -1
  406. package/dist/components/nylas-mailbox-toolbar-button.js +2 -3
  407. package/dist/components/nylas-mailbox-toolbar-button.js.map +1 -1
  408. package/dist/components/nylas-mailbox.js +2 -3
  409. package/dist/components/nylas-mailbox.js.map +1 -1
  410. package/dist/components/nylas-min-cancellation-notice2.js +29 -13
  411. package/dist/components/nylas-min-cancellation-notice2.js.map +1 -1
  412. package/dist/components/nylas-notification2.js +2 -3
  413. package/dist/components/nylas-notification2.js.map +1 -1
  414. package/dist/components/nylas-provider.js +2 -3
  415. package/dist/components/nylas-provider.js.map +1 -1
  416. package/dist/components/nylas-scheduler-editor.js +270 -136
  417. package/dist/components/nylas-scheduler-editor.js.map +1 -1
  418. package/dist/components/nylas-scheduling.js +1 -2
  419. package/dist/components/nylas-scheduling.js.map +1 -1
  420. package/dist/components/nylas-selected-event-card2.js +1 -2
  421. package/dist/components/nylas-selected-event-card2.js.map +1 -1
  422. package/dist/components/nylas-summarize-message-button2.js +3 -4
  423. package/dist/components/nylas-summarize-message-button2.js.map +1 -1
  424. package/dist/components/nylas-threads-refresh.js +3 -4
  425. package/dist/components/nylas-threads-refresh.js.map +1 -1
  426. package/dist/components/nylas-threads-search.js +2 -3
  427. package/dist/components/nylas-threads-search.js.map +1 -1
  428. package/dist/components/nylas-time-window-picker2.js +2 -4
  429. package/dist/components/nylas-time-window-picker2.js.map +1 -1
  430. package/dist/components/nylas-timeslot-picker2.js +1 -2
  431. package/dist/components/nylas-timeslot-picker2.js.map +1 -1
  432. package/dist/components/nylas-view-email2.js +2 -4
  433. package/dist/components/nylas-view-email2.js.map +1 -1
  434. package/dist/components/nylas-view-thread.js +2 -3
  435. package/dist/components/nylas-view-thread.js.map +1 -1
  436. package/dist/components/people-icon.js +1 -2
  437. package/dist/components/people-icon.js.map +1 -1
  438. package/dist/components/play.js +1 -2
  439. package/dist/components/play.js.map +1 -1
  440. package/dist/components/refresh.js +1 -2
  441. package/dist/components/refresh.js.map +1 -1
  442. package/dist/components/register-component.js +7 -1
  443. package/dist/components/register-component.js.map +1 -1
  444. package/dist/components/reply-all.js +1 -2
  445. package/dist/components/reply-all.js.map +1 -1
  446. package/dist/components/reply.js +1 -2
  447. package/dist/components/reply.js.map +1 -1
  448. package/dist/components/scheduler-config-store.js +15 -2
  449. package/dist/components/scheduler-config-store.js.map +1 -1
  450. package/dist/components/scheduler-store.js +15 -2
  451. package/dist/components/scheduler-store.js.map +1 -1
  452. package/dist/components/search.js +1 -2
  453. package/dist/components/search.js.map +1 -1
  454. package/dist/components/select-dropdown2.js +2 -3
  455. package/dist/components/select-dropdown2.js.map +1 -1
  456. package/dist/components/sent.js +1 -2
  457. package/dist/components/sent.js.map +1 -1
  458. package/dist/components/spam.js +1 -2
  459. package/dist/components/spam.js.map +1 -1
  460. package/dist/components/star.js +1 -2
  461. package/dist/components/star.js.map +1 -1
  462. package/dist/components/stop.js +1 -2
  463. package/dist/components/stop.js.map +1 -1
  464. package/dist/components/time-period-selector2.js +2 -3
  465. package/dist/components/time-period-selector2.js.map +1 -1
  466. package/dist/components/toolitp-component.js +1 -2
  467. package/dist/components/toolitp-component.js.map +1 -1
  468. package/dist/components/translate.js +1 -2
  469. package/dist/components/translate.js.map +1 -1
  470. package/dist/components/trash.js +1 -2
  471. package/dist/components/trash.js.map +1 -1
  472. package/dist/components/underline.js +1 -2
  473. package/dist/components/underline.js.map +1 -1
  474. package/dist/components/utils.js +49 -2
  475. package/dist/components/utils.js.map +1 -1
  476. package/dist/components/warning.js +1 -2
  477. package/dist/components/warning.js.map +1 -1
  478. package/dist/esm/add-circle-icon.entry.js +1 -1
  479. package/dist/esm/add-circle-icon_22.entry.js +224 -94
  480. package/dist/esm/add-circle-icon_22.entry.js.map +1 -1
  481. package/dist/esm/archive-icon.entry.js +1 -1
  482. package/dist/esm/archive-icon_7.entry.js +7 -7
  483. package/dist/esm/arrow-icon.entry.js +1 -1
  484. package/dist/esm/bold-icon.entry.js +1 -1
  485. package/dist/esm/bold-icon_3.entry.js +3 -3
  486. package/dist/esm/button-component.entry.js +2 -2
  487. package/dist/esm/button-component.entry.js.map +1 -1
  488. package/dist/esm/calendar-cancel-icon.entry.js +1 -1
  489. package/dist/esm/calendar-check-icon.entry.js +1 -1
  490. package/dist/esm/calendar-check-icon_2.entry.js +2 -2
  491. package/dist/esm/calendar-icon.entry.js +1 -1
  492. package/dist/esm/calendar-info-icon.entry.js +1 -1
  493. package/dist/esm/calendar-patterns-icon.entry.js +1 -1
  494. package/dist/esm/checkmark-circle-icon.entry.js +1 -1
  495. package/dist/esm/chevron-icon.entry.js +1 -1
  496. package/dist/esm/chevron-icon_3.entry.js +4 -4
  497. package/dist/esm/close-icon.entry.js +1 -1
  498. package/dist/esm/{constants-335dffcf.js → constants-bf39e913.js} +11 -2
  499. package/dist/esm/{constants-335dffcf.js.map → constants-bf39e913.js.map} +1 -1
  500. package/dist/esm/{constants-6ee60d6d.js → constants-f34b9c6e.js} +11 -2
  501. package/dist/esm/{constants-6ee60d6d.js.map → constants-f34b9c6e.js.map} +1 -1
  502. package/dist/esm/document-refresh-icon.entry.js +1 -1
  503. package/dist/esm/flow-icon.entry.js +1 -1
  504. package/dist/esm/folder-icon.entry.js +1 -1
  505. package/dist/esm/forward-icon.entry.js +1 -1
  506. package/dist/esm/forward-icon_6.entry.js +9 -9
  507. package/dist/esm/globe-icon.entry.js +1 -1
  508. package/dist/esm/google-logo-icon.entry.js +1 -1
  509. package/dist/esm/google-logo-icon_4.entry.js +460 -0
  510. package/dist/esm/google-logo-icon_4.entry.js.map +1 -0
  511. package/dist/esm/inbox-icon.entry.js +1 -1
  512. package/dist/esm/index-7cb0dd3d.js +1 -158
  513. package/dist/esm/index-8362ce5c.js +1 -358
  514. package/dist/{nylas-web-elements/index.es-bd511719.js → esm/index.es-2842f8c8.js} +9 -4
  515. package/dist/esm/index.es-2842f8c8.js.map +1 -0
  516. package/dist/esm/{index.es-2578c6a5.js → index.es-f57e612a.js} +9 -4
  517. package/dist/esm/index.es-f57e612a.js.map +1 -0
  518. package/dist/esm/index.js +3 -1
  519. package/dist/esm/index.js.map +1 -1
  520. package/dist/esm/info-icon.entry.js +1 -1
  521. package/dist/esm/info-icon_2.entry.js +2 -2
  522. package/dist/esm/italic-icon.entry.js +1 -1
  523. package/dist/esm/loader.js +1 -1
  524. package/dist/esm/loading-icon.entry.js +1 -1
  525. package/dist/esm/location-icon.entry.js +1 -1
  526. package/dist/esm/location-off-icon.entry.js +1 -1
  527. package/dist/esm/{mailbox-store-bb21512c.js → mailbox-store-47fc8a1a.js} +3 -3
  528. package/dist/esm/{mailbox-store-150cc456.js.map → mailbox-store-47fc8a1a.js.map} +1 -1
  529. package/dist/esm/{mailbox-store-150cc456.js → mailbox-store-d48269de.js} +3 -3
  530. package/dist/{nylas-web-elements/mailbox-store-150cc456.js.map → esm/mailbox-store-d48269de.js.map} +1 -1
  531. package/dist/esm/microsoft-logo-icon.entry.js +1 -1
  532. package/dist/esm/multi-select-dropdown.entry.js +3 -3
  533. package/dist/esm/nylas-additional-participants.entry.js +3 -3
  534. package/dist/esm/nylas-api-request-8932547a.js +56 -0
  535. package/dist/esm/nylas-api-request-8932547a.js.map +1 -0
  536. package/dist/esm/nylas-api-request-b085294d.js +58 -0
  537. package/dist/esm/nylas-api-request-b085294d.js.map +1 -0
  538. package/dist/esm/nylas-availability-picker.entry.js +33 -16
  539. package/dist/esm/nylas-availability-picker.entry.js.map +1 -1
  540. package/dist/esm/nylas-booked-event-card.entry.js +3 -3
  541. package/dist/esm/nylas-booked-event-card_10.entry.js +7 -7
  542. package/dist/esm/nylas-booking-calendar-picker.entry.js +12 -6
  543. package/dist/esm/nylas-booking-calendar-picker.entry.js.map +1 -1
  544. package/dist/esm/nylas-booking-form.entry.js +2 -2
  545. package/dist/esm/nylas-buffer-time.entry.js +2 -2
  546. package/dist/esm/nylas-calendar-picker.entry.js +13 -8
  547. package/dist/esm/nylas-calendar-picker.entry.js.map +1 -1
  548. package/dist/esm/nylas-cancel-booking-form.entry.js +3 -3
  549. package/dist/esm/nylas-cancelled-event-card.entry.js +3 -3
  550. package/dist/esm/nylas-composer.entry.js +2 -2
  551. package/dist/esm/nylas-custom-booking-flow.entry.js +21 -12
  552. package/dist/esm/nylas-custom-booking-flow.entry.js.map +1 -1
  553. package/dist/esm/nylas-date-picker.entry.js +2 -2
  554. package/dist/esm/nylas-editor-tabs.entry.js +86 -40
  555. package/dist/esm/nylas-editor-tabs.entry.js.map +1 -1
  556. package/dist/esm/nylas-event-description.entry.js +15 -6
  557. package/dist/esm/nylas-event-description.entry.js.map +1 -1
  558. package/dist/esm/nylas-event-duration.entry.js +15 -10
  559. package/dist/esm/nylas-event-duration.entry.js.map +1 -1
  560. package/dist/esm/nylas-event-info.entry.js +3 -3
  561. package/dist/esm/nylas-event-limits.entry.js +3 -3
  562. package/dist/esm/nylas-event-title.entry.js +52 -12
  563. package/dist/esm/nylas-event-title.entry.js.map +1 -1
  564. package/dist/esm/nylas-form-card.entry.js +3 -3
  565. package/dist/esm/nylas-if-state.entry.js +2 -2
  566. package/dist/esm/nylas-limit-future-bookings.entry.js +24 -11
  567. package/dist/esm/nylas-limit-future-bookings.entry.js.map +1 -1
  568. package/dist/esm/nylas-list-configurations.entry.js +125 -0
  569. package/dist/esm/nylas-list-configurations.entry.js.map +1 -0
  570. package/dist/esm/nylas-list-folders.entry.js +3 -3
  571. package/dist/esm/nylas-list-threads.entry.js +3 -3
  572. package/dist/esm/nylas-locale-switch.entry.js +3 -3
  573. package/dist/esm/nylas-location-component.entry.js +17 -6
  574. package/dist/esm/nylas-location-component.entry.js.map +1 -1
  575. package/dist/esm/nylas-login.entry.js +3 -3
  576. package/dist/esm/nylas-logo.entry.js +1 -1
  577. package/dist/esm/nylas-mailbox-pagination.entry.js +2 -2
  578. package/dist/esm/nylas-mailbox-toolbar-button.entry.js +3 -3
  579. package/dist/esm/nylas-mailbox.entry.js +4 -4
  580. package/dist/esm/nylas-min-cancellation-notice.entry.js +28 -13
  581. package/dist/esm/nylas-min-cancellation-notice.entry.js.map +1 -1
  582. package/dist/esm/nylas-notification.entry.js +2 -2
  583. package/dist/esm/nylas-provider.entry.js +6 -6
  584. package/dist/esm/nylas-scheduler-editor.entry.js +202 -76
  585. package/dist/esm/nylas-scheduler-editor.entry.js.map +1 -1
  586. package/dist/esm/nylas-scheduling.entry.js +3 -3
  587. package/dist/esm/nylas-selected-event-card.entry.js +3 -3
  588. package/dist/esm/nylas-summarize-message-button.entry.js +4 -4
  589. package/dist/esm/nylas-threads-refresh.entry.js +4 -4
  590. package/dist/esm/nylas-threads-search.entry.js +3 -3
  591. package/dist/esm/nylas-time-window-picker.entry.js +2 -2
  592. package/dist/esm/nylas-timeslot-picker.entry.js +2 -2
  593. package/dist/esm/nylas-view-email.entry.js +2 -2
  594. package/dist/esm/nylas-view-thread.entry.js +3 -3
  595. package/dist/esm/nylas-web-elements.js +1 -1
  596. package/dist/esm/people-icon.entry.js +1 -1
  597. package/dist/esm/play-icon.entry.js +1 -1
  598. package/dist/esm/play-icon_2.entry.js +2 -2
  599. package/dist/esm/refresh-icon.entry.js +1 -1
  600. package/dist/esm/{register-component-dc659dc3.js → register-component-cf5c8420.js} +8 -2
  601. package/dist/esm/register-component-cf5c8420.js.map +1 -0
  602. package/dist/{nylas-web-elements/register-component-0645dce0.js → esm/register-component-e5afe237.js} +8 -2
  603. package/dist/esm/register-component-e5afe237.js.map +1 -0
  604. package/dist/esm/reply-all-icon.entry.js +1 -1
  605. package/dist/esm/reply-icon.entry.js +1 -1
  606. package/dist/esm/scheduler-config-store-07d98279.js +30 -0
  607. package/dist/esm/scheduler-config-store-07d98279.js.map +1 -0
  608. package/dist/esm/scheduler-config-store-8f2e658e.js +30 -0
  609. package/dist/esm/scheduler-config-store-8f2e658e.js.map +1 -0
  610. package/dist/{nylas-web-elements/scheduler-store-4d0a4f8a.js → esm/scheduler-store-66c2168c.js} +16 -3
  611. package/dist/esm/scheduler-store-66c2168c.js.map +1 -0
  612. package/dist/esm/{scheduler-store-72116723.js → scheduler-store-a175fc3e.js} +16 -3
  613. package/dist/esm/scheduler-store-a175fc3e.js.map +1 -0
  614. package/dist/esm/search-icon.entry.js +1 -1
  615. package/dist/esm/select-dropdown.entry.js +2 -2
  616. package/dist/esm/sent-icon.entry.js +1 -1
  617. package/dist/esm/spam-icon.entry.js +1 -1
  618. package/dist/esm/star-icon.entry.js +1 -1
  619. package/dist/esm/stop-icon.entry.js +1 -1
  620. package/dist/esm/time-period-selector.entry.js +2 -2
  621. package/dist/esm/tooltip-component.entry.js +1 -1
  622. package/dist/esm/translate-icon.entry.js +1 -1
  623. package/dist/esm/trash-icon.entry.js +1 -1
  624. package/dist/esm/underline-icon.entry.js +1 -1
  625. package/dist/esm/{utils-3a8d433a.js → utils-73d8a928.js} +18 -2
  626. package/dist/{nylas-web-elements/utils-3a8d433a.js.map → esm/utils-73d8a928.js.map} +1 -1
  627. package/dist/esm/{utils-c00bdc3c.js → utils-d6204242.js} +18 -2
  628. package/dist/esm/utils-d6204242.js.map +1 -0
  629. package/dist/esm/warning-icon.entry.js +1 -1
  630. package/dist/nylas-web-elements/add-circle-icon.entry.js +1 -1
  631. package/dist/nylas-web-elements/archive-icon.entry.js +1 -1
  632. package/dist/nylas-web-elements/arrow-icon.entry.js +1 -1
  633. package/dist/nylas-web-elements/bold-icon.entry.js +1 -1
  634. package/dist/nylas-web-elements/button-component.entry.js +2 -2
  635. package/dist/nylas-web-elements/button-component.entry.js.map +1 -1
  636. package/dist/nylas-web-elements/calendar-cancel-icon.entry.js +1 -1
  637. package/dist/nylas-web-elements/calendar-check-icon.entry.js +1 -1
  638. package/dist/nylas-web-elements/calendar-icon.entry.js +1 -1
  639. package/dist/nylas-web-elements/calendar-info-icon.entry.js +1 -1
  640. package/dist/nylas-web-elements/calendar-patterns-icon.entry.js +1 -1
  641. package/dist/nylas-web-elements/checkmark-circle-icon.entry.js +1 -1
  642. package/dist/nylas-web-elements/chevron-icon.entry.js +1 -1
  643. package/dist/nylas-web-elements/close-icon.entry.js +1 -1
  644. package/dist/nylas-web-elements/{constants-335dffcf.js → constants-bf39e913.js} +11 -2
  645. package/dist/nylas-web-elements/{constants-335dffcf.js.map → constants-bf39e913.js.map} +1 -1
  646. package/dist/nylas-web-elements/document-refresh-icon.entry.js +1 -1
  647. package/dist/nylas-web-elements/flow-icon.entry.js +1 -1
  648. package/dist/nylas-web-elements/folder-icon.entry.js +1 -1
  649. package/dist/nylas-web-elements/forward-icon.entry.js +1 -1
  650. package/dist/nylas-web-elements/globe-icon.entry.js +1 -1
  651. package/dist/nylas-web-elements/google-logo-icon.entry.js +1 -1
  652. package/dist/nylas-web-elements/inbox-icon.entry.js +1 -1
  653. package/dist/{esm/index.es-bd511719.js → nylas-web-elements/index.es-2842f8c8.js} +9 -4
  654. package/dist/nylas-web-elements/index.es-2842f8c8.js.map +1 -0
  655. package/dist/nylas-web-elements/index.esm.js +3 -1
  656. package/dist/nylas-web-elements/index.esm.js.map +1 -1
  657. package/dist/nylas-web-elements/info-icon.entry.js +1 -1
  658. package/dist/nylas-web-elements/italic-icon.entry.js +1 -1
  659. package/dist/nylas-web-elements/loading-icon.entry.js +1 -1
  660. package/dist/nylas-web-elements/location-icon.entry.js +1 -1
  661. package/dist/nylas-web-elements/location-off-icon.entry.js +1 -1
  662. package/dist/nylas-web-elements/{mailbox-store-150cc456.js → mailbox-store-d48269de.js} +3 -3
  663. package/dist/{esm/mailbox-store-bb21512c.js.map → nylas-web-elements/mailbox-store-d48269de.js.map} +1 -1
  664. package/dist/nylas-web-elements/microsoft-logo-icon.entry.js +1 -1
  665. package/dist/nylas-web-elements/multi-select-dropdown.entry.js +3 -3
  666. package/dist/nylas-web-elements/nylas-additional-participants.entry.js +3 -3
  667. package/dist/nylas-web-elements/nylas-api-request-b085294d.js +58 -0
  668. package/dist/nylas-web-elements/nylas-api-request-b085294d.js.map +1 -0
  669. package/dist/nylas-web-elements/nylas-availability-picker.entry.js +33 -16
  670. package/dist/nylas-web-elements/nylas-availability-picker.entry.js.map +1 -1
  671. package/dist/nylas-web-elements/nylas-booked-event-card.entry.js +3 -3
  672. package/dist/nylas-web-elements/nylas-booking-calendar-picker.entry.js +12 -6
  673. package/dist/nylas-web-elements/nylas-booking-calendar-picker.entry.js.map +1 -1
  674. package/dist/nylas-web-elements/nylas-booking-form.entry.js +2 -2
  675. package/dist/nylas-web-elements/nylas-buffer-time.entry.js +2 -2
  676. package/dist/nylas-web-elements/nylas-calendar-picker.entry.js +13 -8
  677. package/dist/nylas-web-elements/nylas-calendar-picker.entry.js.map +1 -1
  678. package/dist/nylas-web-elements/nylas-cancel-booking-form.entry.js +3 -3
  679. package/dist/nylas-web-elements/nylas-cancelled-event-card.entry.js +3 -3
  680. package/dist/nylas-web-elements/nylas-composer.entry.js +2 -2
  681. package/dist/nylas-web-elements/nylas-custom-booking-flow.entry.js +21 -12
  682. package/dist/nylas-web-elements/nylas-custom-booking-flow.entry.js.map +1 -1
  683. package/dist/nylas-web-elements/nylas-date-picker.entry.js +2 -2
  684. package/dist/nylas-web-elements/nylas-editor-tabs.entry.js +86 -40
  685. package/dist/nylas-web-elements/nylas-editor-tabs.entry.js.map +1 -1
  686. package/dist/nylas-web-elements/nylas-event-description.entry.js +15 -6
  687. package/dist/nylas-web-elements/nylas-event-description.entry.js.map +1 -1
  688. package/dist/nylas-web-elements/nylas-event-duration.entry.js +15 -10
  689. package/dist/nylas-web-elements/nylas-event-duration.entry.js.map +1 -1
  690. package/dist/nylas-web-elements/nylas-event-info.entry.js +3 -3
  691. package/dist/nylas-web-elements/nylas-event-limits.entry.js +3 -3
  692. package/dist/nylas-web-elements/nylas-event-title.entry.js +52 -12
  693. package/dist/nylas-web-elements/nylas-event-title.entry.js.map +1 -1
  694. package/dist/nylas-web-elements/nylas-form-card.entry.js +3 -3
  695. package/dist/nylas-web-elements/nylas-if-state.entry.js +2 -2
  696. package/dist/nylas-web-elements/nylas-limit-future-bookings.entry.js +24 -11
  697. package/dist/nylas-web-elements/nylas-limit-future-bookings.entry.js.map +1 -1
  698. package/dist/nylas-web-elements/nylas-list-configurations.entry.js +125 -0
  699. package/dist/nylas-web-elements/nylas-list-configurations.entry.js.map +1 -0
  700. package/dist/nylas-web-elements/nylas-list-folders.entry.js +3 -3
  701. package/dist/nylas-web-elements/nylas-list-threads.entry.js +3 -3
  702. package/dist/nylas-web-elements/nylas-locale-switch.entry.js +3 -3
  703. package/dist/nylas-web-elements/nylas-location-component.entry.js +17 -6
  704. package/dist/nylas-web-elements/nylas-location-component.entry.js.map +1 -1
  705. package/dist/nylas-web-elements/nylas-login.entry.js +3 -3
  706. package/dist/nylas-web-elements/nylas-logo.entry.js +1 -1
  707. package/dist/nylas-web-elements/nylas-mailbox-pagination.entry.js +2 -2
  708. package/dist/nylas-web-elements/nylas-mailbox-toolbar-button.entry.js +3 -3
  709. package/dist/nylas-web-elements/nylas-mailbox.entry.js +4 -4
  710. package/dist/nylas-web-elements/nylas-min-cancellation-notice.entry.js +28 -13
  711. package/dist/nylas-web-elements/nylas-min-cancellation-notice.entry.js.map +1 -1
  712. package/dist/nylas-web-elements/nylas-notification.entry.js +2 -2
  713. package/dist/nylas-web-elements/nylas-provider.entry.js +6 -6
  714. package/dist/nylas-web-elements/nylas-scheduler-editor.entry.js +202 -76
  715. package/dist/nylas-web-elements/nylas-scheduler-editor.entry.js.map +1 -1
  716. package/dist/nylas-web-elements/nylas-scheduling.entry.js +3 -3
  717. package/dist/nylas-web-elements/nylas-selected-event-card.entry.js +3 -3
  718. package/dist/nylas-web-elements/nylas-summarize-message-button.entry.js +4 -4
  719. package/dist/nylas-web-elements/nylas-threads-refresh.entry.js +4 -4
  720. package/dist/nylas-web-elements/nylas-threads-search.entry.js +3 -3
  721. package/dist/nylas-web-elements/nylas-time-window-picker.entry.js +2 -2
  722. package/dist/nylas-web-elements/nylas-timeslot-picker.entry.js +2 -2
  723. package/dist/nylas-web-elements/nylas-view-email.entry.js +2 -2
  724. package/dist/nylas-web-elements/nylas-view-thread.entry.js +3 -3
  725. package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
  726. package/dist/nylas-web-elements/p-00a9efc1.entry.js +2 -0
  727. package/dist/nylas-web-elements/p-1a91cce5.entry.js +2 -0
  728. package/dist/nylas-web-elements/p-1a91cce5.entry.js.map +1 -0
  729. package/dist/nylas-web-elements/{p-3631e6e5.entry.js → p-1d25ca06.entry.js} +2 -2
  730. package/dist/nylas-web-elements/p-1e445e86.entry.js +2 -0
  731. package/dist/nylas-web-elements/{p-395f49eb.entry.js → p-2081b475.entry.js} +2 -2
  732. package/dist/nylas-web-elements/p-22e5436c.js +2 -0
  733. package/dist/nylas-web-elements/p-22e5436c.js.map +1 -0
  734. package/dist/nylas-web-elements/p-2b636359.entry.js +2 -0
  735. package/dist/nylas-web-elements/p-2b636359.entry.js.map +1 -0
  736. package/dist/nylas-web-elements/{p-4ee6f11e.entry.js → p-30784693.entry.js} +2 -2
  737. package/dist/nylas-web-elements/{p-40ed7eab.entry.js → p-33b940fb.entry.js} +2 -2
  738. package/dist/nylas-web-elements/p-343a02e1.entry.js +2 -0
  739. package/dist/nylas-web-elements/{p-4d9fceeb.entry.js → p-343b8684.entry.js} +2 -2
  740. package/dist/nylas-web-elements/p-3909ec3f.entry.js +2 -0
  741. package/dist/nylas-web-elements/{p-d85eecf4.entry.js.map → p-3909ec3f.entry.js.map} +1 -1
  742. package/dist/nylas-web-elements/{p-409d4410.entry.js → p-3b281401.entry.js} +2 -2
  743. package/dist/nylas-web-elements/{p-901f9612.js → p-41dc0d93.js} +2 -2
  744. package/dist/nylas-web-elements/p-41dc0d93.js.map +1 -0
  745. package/dist/nylas-web-elements/{p-5a3809a7.entry.js → p-42791515.entry.js} +2 -2
  746. package/dist/nylas-web-elements/p-44a9ce77.entry.js +2 -0
  747. package/dist/nylas-web-elements/{p-1819b3d7.js → p-49f716ed.js} +4 -4
  748. package/dist/nylas-web-elements/p-49f716ed.js.map +1 -0
  749. package/dist/nylas-web-elements/{p-b2208193.entry.js → p-50b4a80f.entry.js} +2 -2
  750. package/dist/nylas-web-elements/{p-42a4c2fd.entry.js → p-571472d4.entry.js} +2 -2
  751. package/dist/nylas-web-elements/{p-2523c292.entry.js → p-607b547b.entry.js} +2 -2
  752. package/dist/nylas-web-elements/{p-006ab406.entry.js → p-6110351b.entry.js} +2 -2
  753. package/dist/nylas-web-elements/{p-65062d50.entry.js → p-665ef10b.entry.js} +4 -4
  754. package/dist/nylas-web-elements/p-665ef10b.entry.js.map +1 -0
  755. package/dist/nylas-web-elements/{p-deafc6bc.entry.js → p-694b511a.entry.js} +2 -2
  756. package/dist/nylas-web-elements/{p-64364434.entry.js → p-73c062f8.entry.js} +2 -2
  757. package/dist/nylas-web-elements/p-75a8d077.entry.js +2 -0
  758. package/dist/nylas-web-elements/{p-41c1654e.entry.js.map → p-75a8d077.entry.js.map} +1 -1
  759. package/dist/nylas-web-elements/p-7c55dfa0.entry.js +2 -0
  760. package/dist/nylas-web-elements/{p-ba3d383f.entry.js.map → p-7c55dfa0.entry.js.map} +1 -1
  761. package/dist/nylas-web-elements/{p-3da66838.entry.js → p-80d6175c.entry.js} +2 -2
  762. package/dist/nylas-web-elements/p-939db546.entry.js +2 -0
  763. package/dist/nylas-web-elements/{p-a1e27dc5.entry.js → p-95a3094a.entry.js} +2 -2
  764. package/dist/nylas-web-elements/p-9ea458c3.js +2 -0
  765. package/dist/nylas-web-elements/p-9ea458c3.js.map +1 -0
  766. package/dist/nylas-web-elements/p-a628eaeb.js +2 -0
  767. package/dist/nylas-web-elements/p-a628eaeb.js.map +1 -0
  768. package/dist/nylas-web-elements/p-ad64c2b8.entry.js +2 -0
  769. package/dist/nylas-web-elements/{p-baa620b4.entry.js → p-b25821e1.entry.js} +2 -2
  770. package/dist/nylas-web-elements/{p-374527e6.entry.js → p-b53062f7.entry.js} +2 -2
  771. package/dist/nylas-web-elements/p-bbf9aff2.entry.js +2 -0
  772. package/dist/nylas-web-elements/p-c20ab972.entry.js +2 -0
  773. package/dist/nylas-web-elements/{p-7b1bb792.entry.js → p-cc674b3b.entry.js} +3 -3
  774. package/dist/nylas-web-elements/p-d8f09631.entry.js +2 -0
  775. package/dist/nylas-web-elements/p-db15d382.js +2 -0
  776. package/dist/nylas-web-elements/p-db15d382.js.map +1 -0
  777. package/dist/nylas-web-elements/{p-9dac153b.entry.js → p-df6d54c7.entry.js} +2 -2
  778. package/dist/nylas-web-elements/{p-d224c7af.entry.js → p-e03b2592.entry.js} +2 -2
  779. package/dist/nylas-web-elements/{p-9f168ff0.js → p-e22aa0b0.js} +2 -2
  780. package/dist/nylas-web-elements/{p-408dda49.js → p-eaa9151b.js} +2 -2
  781. package/dist/nylas-web-elements/p-eaa9151b.js.map +1 -0
  782. package/dist/nylas-web-elements/{p-ad9c3cab.entry.js → p-f154a362.entry.js} +2 -2
  783. package/dist/nylas-web-elements/{p-ae01e1cb.entry.js → p-f1f8f745.entry.js} +2 -2
  784. package/dist/nylas-web-elements/people-icon.entry.js +1 -1
  785. package/dist/nylas-web-elements/play-icon.entry.js +1 -1
  786. package/dist/nylas-web-elements/refresh-icon.entry.js +1 -1
  787. package/dist/{esm/register-component-0645dce0.js → nylas-web-elements/register-component-e5afe237.js} +8 -2
  788. package/dist/nylas-web-elements/register-component-e5afe237.js.map +1 -0
  789. package/dist/nylas-web-elements/reply-all-icon.entry.js +1 -1
  790. package/dist/nylas-web-elements/reply-icon.entry.js +1 -1
  791. package/dist/nylas-web-elements/scheduler-config-store-8f2e658e.js +30 -0
  792. package/dist/nylas-web-elements/scheduler-config-store-8f2e658e.js.map +1 -0
  793. package/dist/{esm/scheduler-store-4d0a4f8a.js → nylas-web-elements/scheduler-store-66c2168c.js} +16 -3
  794. package/dist/nylas-web-elements/scheduler-store-66c2168c.js.map +1 -0
  795. package/dist/nylas-web-elements/search-icon.entry.js +1 -1
  796. package/dist/nylas-web-elements/select-dropdown.entry.js +2 -2
  797. package/dist/nylas-web-elements/sent-icon.entry.js +1 -1
  798. package/dist/nylas-web-elements/spam-icon.entry.js +1 -1
  799. package/dist/nylas-web-elements/star-icon.entry.js +1 -1
  800. package/dist/nylas-web-elements/stop-icon.entry.js +1 -1
  801. package/dist/nylas-web-elements/time-period-selector.entry.js +2 -2
  802. package/dist/nylas-web-elements/tooltip-component.entry.js +1 -1
  803. package/dist/nylas-web-elements/translate-icon.entry.js +1 -1
  804. package/dist/nylas-web-elements/trash-icon.entry.js +1 -1
  805. package/dist/nylas-web-elements/underline-icon.entry.js +1 -1
  806. package/dist/nylas-web-elements/{utils-3a8d433a.js → utils-73d8a928.js} +18 -2
  807. package/dist/{esm/utils-3a8d433a.js.map → nylas-web-elements/utils-73d8a928.js.map} +1 -1
  808. package/dist/nylas-web-elements/warning-icon.entry.js +1 -1
  809. package/dist/types/common/component-types.d.ts +3 -1
  810. package/dist/types/common/constants.d.ts +2 -0
  811. package/dist/types/common/nylas-api-request.d.ts +6 -2
  812. package/dist/types/common/register-component.d.ts +1 -0
  813. package/dist/types/common/types.d.ts +3 -1
  814. package/dist/types/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.d.ts +10 -4
  815. package/dist/types/components/scheduler-editor/nylas-booking-calendar-picker/nylas-booking-calendar-picker.d.ts +2 -0
  816. package/dist/types/components/scheduler-editor/nylas-calendar-picker/nylas-calendar-picker.d.ts +3 -2
  817. package/dist/types/components/scheduler-editor/nylas-custom-booking-flow/nylas-custom-booking-flow.d.ts +4 -1
  818. package/dist/types/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.d.ts +41 -7
  819. package/dist/types/components/scheduler-editor/nylas-event-description/nylas-event-description.d.ts +3 -0
  820. package/dist/types/components/scheduler-editor/nylas-event-duration/nylas-event-duration.d.ts +3 -0
  821. package/dist/types/components/scheduler-editor/nylas-event-title/nylas-event-title.d.ts +6 -1
  822. package/dist/types/components/scheduler-editor/nylas-limit-future-bookings/nylas-limit-future-bookings.d.ts +6 -6
  823. package/dist/types/components/scheduler-editor/nylas-list-configurations/nylas-list-configurations.d.ts +27 -0
  824. package/dist/types/components/scheduler-editor/nylas-location-component/nylas-location-component.d.ts +3 -0
  825. package/dist/types/components/scheduler-editor/nylas-min-cancellation-notice/nylas-min-cancellation-notice.d.ts +4 -1
  826. package/dist/types/components/scheduler-editor/nylas-scheduler-editor/LoginRequired.d.ts +4 -0
  827. package/dist/types/components/scheduler-editor/nylas-scheduler-editor/nylas-scheduler-editor.d.ts +9 -4
  828. package/dist/types/components.d.ts +229 -18
  829. package/dist/types/connector/nylas-connector/index.d.ts +1 -1
  830. package/dist/types/connector/nylas-scheduler-config-connector/index.d.ts +3 -3
  831. package/dist/types/connector/nylas-scheduler-connector/errors/index.d.ts +1 -0
  832. package/dist/types/connector/shared/api/scheduler-config.d.ts +45 -8
  833. package/dist/types/index.d.ts +1 -1
  834. package/dist/types/stores/scheduler-config-store.d.ts +8 -2
  835. package/dist/types/utils/utils.d.ts +4 -1
  836. package/package.json +4 -3
  837. package/dist/cjs/google-logo-icon_3.cjs.entry.js +0 -302
  838. package/dist/cjs/google-logo-icon_3.cjs.entry.js.map +0 -1
  839. package/dist/cjs/index.es-447c5aca.js.map +0 -1
  840. package/dist/cjs/index.es-68425511.js.map +0 -1
  841. package/dist/cjs/nylas-api-request-8ec3a89c.js +0 -39
  842. package/dist/cjs/nylas-api-request-8ec3a89c.js.map +0 -1
  843. package/dist/cjs/nylas-api-request-ab24150d.js +0 -37
  844. package/dist/cjs/nylas-api-request-ab24150d.js.map +0 -1
  845. package/dist/cjs/register-component-d729f3f7.js.map +0 -1
  846. package/dist/cjs/register-component-f1ebc65d.js.map +0 -1
  847. package/dist/cjs/scheduler-config-store-31b83ad3.js +0 -19
  848. package/dist/cjs/scheduler-config-store-31b83ad3.js.map +0 -1
  849. package/dist/cjs/scheduler-config-store-9c2cc421.js +0 -19
  850. package/dist/cjs/scheduler-config-store-9c2cc421.js.map +0 -1
  851. package/dist/cjs/scheduler-store-4cb46b3c.js.map +0 -1
  852. package/dist/cjs/scheduler-store-7320f5d0.js.map +0 -1
  853. package/dist/cjs/utils-53dd7574.js.map +0 -1
  854. package/dist/components/_commonjsHelpers.js +0 -36
  855. package/dist/components/_commonjsHelpers.js.map +0 -1
  856. package/dist/esm/google-logo-icon_3.entry.js +0 -296
  857. package/dist/esm/google-logo-icon_3.entry.js.map +0 -1
  858. package/dist/esm/index.es-2578c6a5.js.map +0 -1
  859. package/dist/esm/index.es-bd511719.js.map +0 -1
  860. package/dist/esm/nylas-api-request-55446aba.js +0 -37
  861. package/dist/esm/nylas-api-request-55446aba.js.map +0 -1
  862. package/dist/esm/nylas-api-request-c97a0153.js +0 -35
  863. package/dist/esm/nylas-api-request-c97a0153.js.map +0 -1
  864. package/dist/esm/register-component-0645dce0.js.map +0 -1
  865. package/dist/esm/register-component-dc659dc3.js.map +0 -1
  866. package/dist/esm/scheduler-config-store-51ee4f42.js +0 -17
  867. package/dist/esm/scheduler-config-store-51ee4f42.js.map +0 -1
  868. package/dist/esm/scheduler-config-store-bc59545b.js +0 -17
  869. package/dist/esm/scheduler-config-store-bc59545b.js.map +0 -1
  870. package/dist/esm/scheduler-store-4d0a4f8a.js.map +0 -1
  871. package/dist/esm/scheduler-store-72116723.js.map +0 -1
  872. package/dist/esm/utils-c00bdc3c.js.map +0 -1
  873. package/dist/nylas-web-elements/index.es-bd511719.js.map +0 -1
  874. package/dist/nylas-web-elements/nylas-api-request-55446aba.js +0 -37
  875. package/dist/nylas-web-elements/nylas-api-request-55446aba.js.map +0 -1
  876. package/dist/nylas-web-elements/p-01bf65c2.entry.js +0 -2
  877. package/dist/nylas-web-elements/p-1819b3d7.js.map +0 -1
  878. package/dist/nylas-web-elements/p-2c5d5953.entry.js +0 -2
  879. package/dist/nylas-web-elements/p-39b280e2.entry.js +0 -2
  880. package/dist/nylas-web-elements/p-39b280e2.entry.js.map +0 -1
  881. package/dist/nylas-web-elements/p-408dda49.js.map +0 -1
  882. package/dist/nylas-web-elements/p-41c1654e.entry.js +0 -2
  883. package/dist/nylas-web-elements/p-65062d50.entry.js.map +0 -1
  884. package/dist/nylas-web-elements/p-65fdfb60.js +0 -2
  885. package/dist/nylas-web-elements/p-65fdfb60.js.map +0 -1
  886. package/dist/nylas-web-elements/p-901f9612.js.map +0 -1
  887. package/dist/nylas-web-elements/p-a0c2ce03.entry.js +0 -2
  888. package/dist/nylas-web-elements/p-a3d5a1dd.entry.js +0 -2
  889. package/dist/nylas-web-elements/p-ba3d383f.entry.js +0 -2
  890. package/dist/nylas-web-elements/p-bfdc148c.entry.js +0 -2
  891. package/dist/nylas-web-elements/p-cadc9052.js +0 -2
  892. package/dist/nylas-web-elements/p-cadc9052.js.map +0 -1
  893. package/dist/nylas-web-elements/p-d67d1c72.js +0 -2
  894. package/dist/nylas-web-elements/p-d67d1c72.js.map +0 -1
  895. package/dist/nylas-web-elements/p-d85eecf4.entry.js +0 -2
  896. package/dist/nylas-web-elements/p-d92a0405.entry.js +0 -2
  897. package/dist/nylas-web-elements/p-de63bc35.entry.js +0 -2
  898. package/dist/nylas-web-elements/p-df5e9aaf.js +0 -2
  899. package/dist/nylas-web-elements/p-df5e9aaf.js.map +0 -1
  900. package/dist/nylas-web-elements/p-eb93a363.entry.js +0 -2
  901. package/dist/nylas-web-elements/p-eb93a363.entry.js.map +0 -1
  902. package/dist/nylas-web-elements/p-f48d0571.entry.js +0 -2
  903. package/dist/nylas-web-elements/p-fbbca7a6.entry.js +0 -2
  904. package/dist/nylas-web-elements/register-component-0645dce0.js.map +0 -1
  905. package/dist/nylas-web-elements/scheduler-config-store-bc59545b.js +0 -17
  906. package/dist/nylas-web-elements/scheduler-config-store-bc59545b.js.map +0 -1
  907. package/dist/nylas-web-elements/scheduler-store-4d0a4f8a.js.map +0 -1
  908. /package/dist/nylas-web-elements/{p-de63bc35.entry.js.map → p-00a9efc1.entry.js.map} +0 -0
  909. /package/dist/nylas-web-elements/{p-3631e6e5.entry.js.map → p-1d25ca06.entry.js.map} +0 -0
  910. /package/dist/nylas-web-elements/{p-bfdc148c.entry.js.map → p-1e445e86.entry.js.map} +0 -0
  911. /package/dist/nylas-web-elements/{p-395f49eb.entry.js.map → p-2081b475.entry.js.map} +0 -0
  912. /package/dist/nylas-web-elements/{p-4ee6f11e.entry.js.map → p-30784693.entry.js.map} +0 -0
  913. /package/dist/nylas-web-elements/{p-40ed7eab.entry.js.map → p-33b940fb.entry.js.map} +0 -0
  914. /package/dist/nylas-web-elements/{p-d92a0405.entry.js.map → p-343a02e1.entry.js.map} +0 -0
  915. /package/dist/nylas-web-elements/{p-4d9fceeb.entry.js.map → p-343b8684.entry.js.map} +0 -0
  916. /package/dist/nylas-web-elements/{p-409d4410.entry.js.map → p-3b281401.entry.js.map} +0 -0
  917. /package/dist/nylas-web-elements/{p-5a3809a7.entry.js.map → p-42791515.entry.js.map} +0 -0
  918. /package/dist/nylas-web-elements/{p-a0c2ce03.entry.js.map → p-44a9ce77.entry.js.map} +0 -0
  919. /package/dist/nylas-web-elements/{p-b2208193.entry.js.map → p-50b4a80f.entry.js.map} +0 -0
  920. /package/dist/nylas-web-elements/{p-42a4c2fd.entry.js.map → p-571472d4.entry.js.map} +0 -0
  921. /package/dist/nylas-web-elements/{p-2523c292.entry.js.map → p-607b547b.entry.js.map} +0 -0
  922. /package/dist/nylas-web-elements/{p-006ab406.entry.js.map → p-6110351b.entry.js.map} +0 -0
  923. /package/dist/nylas-web-elements/{p-deafc6bc.entry.js.map → p-694b511a.entry.js.map} +0 -0
  924. /package/dist/nylas-web-elements/{p-64364434.entry.js.map → p-73c062f8.entry.js.map} +0 -0
  925. /package/dist/nylas-web-elements/{p-3da66838.entry.js.map → p-80d6175c.entry.js.map} +0 -0
  926. /package/dist/nylas-web-elements/{p-01bf65c2.entry.js.map → p-939db546.entry.js.map} +0 -0
  927. /package/dist/nylas-web-elements/{p-a1e27dc5.entry.js.map → p-95a3094a.entry.js.map} +0 -0
  928. /package/dist/nylas-web-elements/{p-f48d0571.entry.js.map → p-ad64c2b8.entry.js.map} +0 -0
  929. /package/dist/nylas-web-elements/{p-baa620b4.entry.js.map → p-b25821e1.entry.js.map} +0 -0
  930. /package/dist/nylas-web-elements/{p-374527e6.entry.js.map → p-b53062f7.entry.js.map} +0 -0
  931. /package/dist/nylas-web-elements/{p-2c5d5953.entry.js.map → p-bbf9aff2.entry.js.map} +0 -0
  932. /package/dist/nylas-web-elements/{p-a3d5a1dd.entry.js.map → p-c20ab972.entry.js.map} +0 -0
  933. /package/dist/nylas-web-elements/{p-7b1bb792.entry.js.map → p-cc674b3b.entry.js.map} +0 -0
  934. /package/dist/nylas-web-elements/{p-fbbca7a6.entry.js.map → p-d8f09631.entry.js.map} +0 -0
  935. /package/dist/nylas-web-elements/{p-9dac153b.entry.js.map → p-df6d54c7.entry.js.map} +0 -0
  936. /package/dist/nylas-web-elements/{p-d224c7af.entry.js.map → p-e03b2592.entry.js.map} +0 -0
  937. /package/dist/nylas-web-elements/{p-9f168ff0.js.map → p-e22aa0b0.js.map} +0 -0
  938. /package/dist/nylas-web-elements/{p-ad9c3cab.entry.js.map → p-f154a362.entry.js.map} +0 -0
  939. /package/dist/nylas-web-elements/{p-ae01e1cb.entry.js.map → p-f1f8f745.entry.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["iconCss","AddCircleIconStyle0","AddCircleIcon","render","h","key","width","this","height","fill","xmlns","d","buttonComponentCss","ButtonComponentStyle0","ButtonComponent","className","variant","disabled","class","type","onClick","clickHandler","onMouseOver","mouseOverHandler","onMouseOut","mouseOutHandler","onFocus","focusHandler","onBlur","blurHandler","CalendarInfoIconStyle0","CalendarInfoIcon","CalendarPatternsIconStyle0","CalendarPatternsIcon","FlowIconStyle0","FlowIcon","LocationIconStyle0","LocationIcon","LocationOffIconStyle0","LocationOffIcon","multiSelectDropdownCss","MultiSelectDropdownStyle0","MultiSelectDropdown","options","componentDidRender","debug","isOpen","shouldFocusFirstOption","ariaActivedescendant","availableOptions","value","focusOption","handleOutsideClick","event","path","composedPath","isClickInside","includes","el","selectOption","option","map","o","selected","selectedOptions","filter","selectedOptionsChanged","emit","name","toggleDropdown","handleSelectButtonKeyDown","preventDefault","handleListboxKeydown","e","items","currentIndex","findIndex","item","shiftKey","nextIndex","length","prevIndex","index","elementId","element","shadowRoot","getElementById","focus","scrollIntoView","behavior","block","getSelectedOptions","renderOption","id","role","tabindex","stopImmediatePropagation","htmlFor","checked","label","Host","part","dropbtn","open","onKeyDown","nylasAvailabilityPickerCss","NylasAvailabilityPickerStyle0","NylasAvailabilityPicker","Intl","DateTimeFormat","resolvedOptions","timeZone","SUN","MON","start","end","TUE","WED","THU","FRI","SAT","elementNameChangedHandler","newValue","host","setAttribute","scheduleChanged","oldValue","valueChanged","scheduleToOpenHours","timezone","overlapDays","Object","keys","forEach","dayTimeRanges","overlaps","getOverlaps","internals","setFormValue","setValidity","customError","JSON","stringify","selectedOptionChangedHandler","detail","schedule","connectedCallback","disconnectedCallback","componentWillLoad","componentDidLoad","openHours","updateSchedule","timeRanges","timeRangesInMinutes","range","timeToMinutes","originalIndex","sort","a","b","i","push","addTimeRange","day","currentTimeRanges","dayStart","dayEnd","lastRangeEnd","convertTo12HourFormat","minutesToTime","gapFound","currentEnd","nextStart","removeTimeRange","splice","setTime","_event","dayIndex","timeType","split","setFormError","_errorMessage","_","newSchedule","openHour","days","dayKey","getDayKey","start12hr","end12hr","timeRange","timeRangeExists","some","dayKeys","openHoursMap","Map","start24hr","convertTo24HourFormat","end24hr","has","set","entry","get","selectedOpenHours","_key","timezoneOptions","TIMEZONE_MAP","slot","exportparts","defaultSelectedOption","find","defaultTimezone","timeRangeIndex","startKey","endKey","hasError","time","additionalData","minimumStartTime","__decorate","RegisterComponent","fireRegisterEvent","nylasBookingCalendarPickerCss","NylasBookingCalendarPickerStyle0","NylasBookingCalendarPicker","defaultBookingCalendar","toString","selectedCalendar","componentWillUpdate","componentDidUpdate","componentWillRender","calendarOptions","calendars","calendar","withSearch","cal","eventToProps","async","_nylasSchedulerConfigConnector","nylasBufferTimeCss","NylasBufferTimeStyle0","NylasBufferTime","before","after","buffer","bufferTime","selectedBeforeBufferTime","selectedAfterBufferTime","parseInt","renderPreview","totalSlots","slotHeight","eventSlotHeight","slotFill","minutes","fullSlots","Math","floor","partialFillHeight","createBeforeSlots","Array","from","isActive","isPartial","slotStyle","backgroundColor","background","style","createAfterSlots","minuteOptions","min","nylasCalendarPickerCss","NylasCalendarPickerStyle0","NylasCalendarPicker","defaultSelectedCalendars","selectedOptionsChangedHandler","valueChangedHandler","selectedCalendars","organizerEmail","nylasCustomBookingFlowCss","NylasCustomBookingFlowStyle0","NylasCustomBookingFlow","bookingType","selectedBookingType","bookingOptions","nylasEventDescriptionCss","NylasEventDescriptionStyle0","NylasEventDescription","eventDescription","handleChange","description","target","maxlength","onInput","nylasEventDurationCss","NylasEventDurationStyle0","NylasEventDuration","eventDurationMinutes","durationMinutesChangedHandler","durationMinutes","duration","durationIncrement","handleBlur","undefined","durationOptions","nylasEventInfoCss","NylasEventInfoStyle0","NylasEventInfo","nylasEventLimitsCss","NylasEventLimitsStyle0","NylasEventLimits","nylasEventTitleCss","NylasEventTitleStyle0","NylasEventTitle","eventTitleTokens","token","labelHTML","availableTokens","$value","fullText","focusOffset","ariaActivedescendantChangedHandler","activeOption","classList","add","querySelectorAll","remove","updateEventTitleFromProp","eventTitle","titleRef","innerHTML","highlightTokens","outputHtml","tokenObj","regex","RegExp","replace","getCurrentSelectionForBrowser","getSelectionTextData","nodeValue","offset","node","text","dollarIndex","lastIndexOf","lastWord","substring","currentText","currentBrowser","getBrowser","console","log","shadowRootSelection","getSelection","focusNode","focusNodeValue","selection","document","anchorNodeValue","anchorNode","windowSelection","window","getComposedRanges","startContainer","endOffset","warn","textContent","currentSelection","updateEventTitle","resetDropdown","startsWith","showTokens","currentWord","populateSuggestionsDropdown","handleInputKeyDown","click","nextOption","nextElementSibling","filteredTokens","prevOption","previousElementSibling","parentNode","removeChild","word","dollarWord","currentNode","firstChild","textNode","nodeType","currentNodeText","wordText","nextSibling","indexOf","textBefore","textAfter","newTextNode","createTextNode","newRange","createRange","tagSpan","createElement","newTextNodeAfter","replaceWith","setStart","afterNode","sel","collapse","removeAllRanges","addRange","query","obj","getLabelHTML","ref","contentEditable","active","nylasLimitFutureBookingsCss","NylasLimitFutureBookingsStyle0","NylasLimitFutureBookings","availableDaysInFutureChanged","number","period","calculateNumberAndPeriodFromDays","selectedNumber","selectedPeriod","availableDaysInFuture","timePeriodChangedHandler","timePeriods","defaultSelectedNumber","defaultSelectedPeriod","nylasLocationComponentCss","NylasLocationComponentStyle0","NylasLocationComponent","eventLocation","eventLocationChangedHandler","selectedLocationOption","location","locationOptions","icons","none","custom","nylasMinCancellationNoticeCss","NylasMinCancellationNoticeStyle0","NylasMinCancellationNotice","calculateNumberAndPeriodFromMinutes","minCancellationNotice","totalMinutes","minutesInHour","minutesInDay","minutesInWeek","minutesInMonth","t","module","exports","LTS","LT","L","LL","LLL","LLLL","n","r","s","f","zone","match","concat","u","meridiem","A","afternoon","S","milliseconds","SS","SSS","ss","m","mm","H","HH","hh","D","DD","Do","ordinal","M","MM","MMM","slice","Error","month","MMMM","Y","YY","year","YYYY","Z","ZZ","c","formats","toUpperCase","l","parser","exec","call","hours","p","customParseFormat","parseTwoDigitYear","prototype","parse","date","utc","args","$u","$locale","Ls","$d","Date","seconds","getDate","getFullYear","getMonth","v","g","UTC","init","$L","locale","format","apply","isValid","nylasTimeWindowPickerCss","NylasTimeWindowPickerStyle0","dayjs","extend","TimeInput","generateTimes","showTimes","minimumStartTimeChangedHandler","formattedTime","hour","minute","toLowerCase","subtract","times","firstTime","selectedTimeFormatted","isBefore","err","shouldAutoScroll","autocompletedTime","autocompleteTimeFormat","optionIndex","scrollToViewWithinParent","handleTimeChange","input","timePart","validateTimeFormatInput","timeChange","handleTimeAutocomplete","newTime","roundToNearest15Minutes","validateExactTimeFormat","handleOnInput","startTime","diff","endOf","iterations","round","handleComboboxKeyDown","timeInput","childElement","parentElement","timeMenu","childRect","getBoundingClientRect","parentRect","top","scrollTop","bottom","left","scrollLeft","right","error","placeholder","focused"],"sources":["src/common/icons/icon.css?tag=add-circle-icon&encapsulation=scoped","src/common/icons/add-circle.tsx","src/components/design-system/button-component/button-component.scss?tag=button-component&encapsulation=scoped","src/components/design-system/button-component/button-component.tsx","src/common/icons/icon.css?tag=calendar-info-icon&encapsulation=scoped","src/common/icons/calendar-info.tsx","src/common/icons/icon.css?tag=calendar-patterns-icon&encapsulation=scoped","src/common/icons/calendar-patterns.tsx","src/common/icons/icon.css?tag=flow-icon&encapsulation=scoped","src/common/icons/flow.tsx","src/common/icons/icon.css?tag=location-icon&encapsulation=scoped","src/common/icons/location.tsx","src/common/icons/icon.css?tag=location-off-icon&encapsulation=scoped","src/common/icons/location-off.tsx","src/components/design-system/multi-select-dropdown/multi-select-dropdown.scss?tag=multi-select-dropdown&encapsulation=shadow","src/components/design-system/multi-select-dropdown/multi-select-dropdown.tsx","src/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.scss?tag=nylas-availability-picker&encapsulation=shadow","src/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.tsx","src/components/scheduler-editor/nylas-booking-calendar-picker/nylas-booking-calendar-picker.scss?tag=nylas-booking-calendar-picker&encapsulation=shadow","src/components/scheduler-editor/nylas-booking-calendar-picker/nylas-booking-calendar-picker.tsx","src/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.scss?tag=nylas-buffer-time&encapsulation=shadow","src/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.tsx","src/components/scheduler-editor/nylas-calendar-picker/nylas-calendar-picker.scss?tag=nylas-calendar-picker&encapsulation=shadow","src/components/scheduler-editor/nylas-calendar-picker/nylas-calendar-picker.tsx","src/components/scheduler-editor/nylas-custom-booking-flow/nylas-custom-booking-flow.scss?tag=nylas-custom-booking-flow&encapsulation=shadow","src/components/scheduler-editor/nylas-custom-booking-flow/nylas-custom-booking-flow.tsx","src/components/scheduler-editor/nylas-event-description/nylas-event-description.scss?tag=nylas-event-description&encapsulation=shadow","src/components/scheduler-editor/nylas-event-description/nylas-event-description.tsx","src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.scss?tag=nylas-event-duration&encapsulation=shadow","src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.tsx","src/components/scheduler-editor/nylas-event-info/nylas-event-info.scss?tag=nylas-event-info&encapsulation=shadow","src/components/scheduler-editor/nylas-event-info/nylas-event-info.tsx","src/components/scheduler-editor/nylas-event-limits/nylas-event-limits.scss?tag=nylas-event-limits&encapsulation=shadow","src/components/scheduler-editor/nylas-event-limits/nylas-event-limits.tsx","src/components/scheduler-editor/nylas-event-title/nylas-event-title.scss?tag=nylas-event-title&encapsulation=shadow","src/components/scheduler-editor/nylas-event-title/nylas-event-title.tsx","src/components/scheduler-editor/nylas-limit-future-bookings/nylas-limit-future-bookings.scss?tag=nylas-limit-future-bookings&encapsulation=shadow","src/components/scheduler-editor/nylas-limit-future-bookings/nylas-limit-future-bookings.tsx","src/components/scheduler-editor/nylas-location-component/nylas-location-component.scss?tag=nylas-location-component&encapsulation=shadow","src/components/scheduler-editor/nylas-location-component/nylas-location-component.tsx","src/components/scheduler-editor/nylas-min-cancellation-notice/nylas-min-cancellation-notice.scss?tag=nylas-min-cancellation-notice&encapsulation=shadow","src/components/scheduler-editor/nylas-min-cancellation-notice/nylas-min-cancellation-notice.tsx","../../node_modules/.pnpm/dayjs@1.11.7/node_modules/dayjs/plugin/customParseFormat.js","src/components/scheduler-editor/nylas-time-window-picker/nylas-time-window-picker.scss?tag=nylas-time-window-picker&encapsulation=shadow","src/components/scheduler-editor/nylas-time-window-picker/nylas-time-window-picker.tsx"],"sourcesContent":[":host {\n display: flex;\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'add-circle-icon',\n styleUrl: 'icon.css',\n scoped: true,\n})\nexport class AddCircleIcon {\n @Prop() width: string = '24';\n @Prop() height: string = '25';\n\n render() {\n return (\n <svg width={this.width} height={this.height} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 2.5c5.523 0 10 4.477 10 10s-4.477 10-10 10-10-4.477-10-10 4.477-10 10-10ZM12 4a8.5 8.5 0 1 0 0 17 8.5 8.5 0 0 0 0-17Zm0 3.5a.75.75 0 0 1 .75.75v3.5h3.5a.75.75 0 0 1 0 1.5h-3.5v3.5a.75.75 0 0 1-1.5 0v-3.5h-3.5a.75.75 0 0 1 0-1.5h3.5v-3.5A.75.75 0 0 1 12 7.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","@import '../../../common/mixins/buttons.scss';\n@import '../../../common/styles/variables.scss';\n\nbutton {\n height: 48px;\n border: none;\n border-radius: var(--nylas-border-radius-2x);\n font-size: 1rem;\n line-height: 24px;\n padding: 0 1rem;\n cursor: pointer;\n font-family: var(--nylas-font-family);\n font-weight: 600;\n &.button-primary {\n @include primary-button;\n }\n &.button-basic {\n border: 1px solid var(--nylas-base-300);\n color: var(--nylas-base-700);\n background: transparent;\n &:hover {\n background: transparent;\n border-color: var(--nylas-primary);\n }\n &:active {\n background: transparent;\n border-color: var(--nylas-base-600);\n border-width: 2px;\n }\n &:disabled {\n background: transparent;\n border-color: var(--nylas-base-300);\n color: var(--nylas-base-300);\n cursor: not-allowed;\n }\n }\n &.button-destructive {\n border: 1px solid var(--nylas-base-300);\n color: var(--nylas-error);\n background: transparent;\n &:hover {\n background: transparent;\n border-color: var(--nylas-error);\n }\n &:active {\n background: transparent;\n border-color: var(--nylas-error-pressed);\n border-width: 2px;\n color: var(--nylas-error-pressed);\n }\n &:disabled {\n background: transparent;\n border-color: var(--nylas-base-300);\n color: var(--nylas-base-300);\n cursor: not-allowed;\n }\n }\n}\n","import { Component, Prop, h } from '@stencil/core';\ntype ButtonType = 'primary' | 'basic' | 'destructive';\n\n@Component({\n tag: 'button-component',\n styleUrl: 'button-component.scss',\n scoped: true,\n})\nexport class ButtonComponent {\n // Define a prop to accept the button type\n @Prop() variant: ButtonType = 'primary';\n\n // Define a prop for disabled state\n @Prop() disabled: boolean = false;\n\n @Prop() type: string = 'button';\n @Prop() clickHandler?: (event: MouseEvent) => void;\n @Prop() mouseOverHandler?: (event: MouseEvent) => void;\n @Prop() mouseOutHandler?: (event: MouseEvent) => void;\n @Prop() focusHandler?: (event: FocusEvent) => void;\n @Prop() blurHandler?: (event: FocusEvent) => void;\n\n render() {\n const className = `button-${this.variant}` + (this.disabled ? ' disabled' : '');\n\n return (\n <button\n class={className}\n disabled={this.disabled}\n type=\"type\"\n onClick={this.clickHandler}\n onMouseOver={this.mouseOverHandler}\n onMouseOut={this.mouseOutHandler}\n onFocus={this.focusHandler}\n onBlur={this.blurHandler}\n >\n <slot></slot>\n </button>\n );\n }\n}\n",":host {\n display: flex;\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'calendar-info-icon',\n styleUrl: 'icon.css',\n scoped: true,\n})\nexport class CalendarInfoIcon {\n @Prop() width: string = '20';\n @Prop() height: string = '20';\n\n render() {\n return (\n <svg width={this.width} height={this.height} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 0C13.3807 0 14.5 1.11929 14.5 2.5V6.59971C14.1832 6.43777 13.8486 6.30564 13.5 6.20703V4H1.5V11.5C1.5 12.3284 2.17157 13 3 13H6.70703C6.80564 13.3486 6.93777 13.6832 7.09971 14H3C1.61929 14 0.5 12.8807 0.5 11.5V2.5C0.5 1.11929 1.61929 0 3 0H12ZM12 1H3C2.17157 1 1.5 1.67157 1.5 2.5V3H13.5V2.5C13.5 1.67157 12.8284 1 12 1ZM11.375 9.5C11.375 9.15482 11.6548 8.875 12 8.875C12.3452 8.875 12.625 9.15482 12.625 9.5C12.625 9.84518 12.3452 10.125 12 10.125C11.6548 10.125 11.375 9.84518 11.375 9.5ZM12.5 13.5C12.5 13.7761 12.2761 14 12 14C11.7239 14 11.5 13.7761 11.5 13.5V11.5C11.5 11.2239 11.7239 11 12 11C12.2761 11 12.5 11.2239 12.5 11.5V13.5ZM7.5 11.5C7.5 9.01472 9.51472 7 12 7C14.4853 7 16.5 9.01472 16.5 11.5C16.5 13.9853 14.4853 16 12 16C9.51472 16 7.5 13.9853 7.5 11.5ZM8.5 11.5C8.5 13.433 10.067 15 12 15C13.933 15 15.5 13.433 15.5 11.5C15.5 9.567 13.933 8 12 8C10.067 8 8.5 9.567 8.5 11.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n",":host {\n display: flex;\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'calendar-patterns-icon',\n styleUrl: 'icon.css',\n scoped: true,\n})\nexport class CalendarPatternsIcon {\n @Prop() width: string = '20';\n @Prop() height: string = '20';\n\n render() {\n return (\n <svg width={this.width} height={this.height} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3.25 0H11.75C13.2688 0 14.5 1.23122 14.5 2.75V11.25C14.5 12.7688 13.2688 14 11.75 14H3.25C1.73122 14 0.5 12.7688 0.5 11.25V2.75C0.5 1.23122 1.73122 0 3.25 0ZM2 2.75V4H13V2.75C13 2.05964 12.4404 1.5 11.75 1.5H3.25C2.55964 1.5 2 2.05964 2 2.75ZM12.2071 5L8.20711 9H10.7929L13 6.79289V5H12.2071ZM10.7929 5H8.20711L4.20711 9H6.79289L10.7929 5ZM2.79289 9L6.79289 5H4.20711L2 7.20711V9H2.79289ZM2 5.79289L2.79289 5H2V5.79289ZM12.2071 9H13V8.20711L12.2071 9Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n",":host {\n display: flex;\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'flow-icon',\n styleUrl: 'icon.css',\n scoped: true,\n})\nexport class FlowIcon {\n @Prop() width: string = '16';\n @Prop() height: string = '12';\n\n render() {\n return (\n <svg width={this.width} height={this.height} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 1.66211C11.8954 1.66211 11 2.55754 11 3.66211C11 4.76668 11.8954 5.66211 13 5.66211C14.1046 5.66211 15 4.76668 15 3.66211C15 2.55754 14.1046 1.66211 13 1.66211ZM10.0407 3.16678C10.2768 1.74563 11.5119 0.662109 13 0.662109C14.6569 0.662109 16 2.00526 16 3.66211C16 5.31896 14.6569 6.66211 13 6.66211C11.5162 6.66211 10.2839 5.58482 10.0428 4.16971C9.37629 4.23688 8.82682 4.7426 8.71466 5.41551L8.27173 8.07311C8.07929 9.22776 7.11428 10.087 5.9593 10.1574C5.72319 11.5786 4.48813 12.6621 3 12.6621C1.34315 12.6621 0 11.319 0 9.66211C0 8.00526 1.34315 6.66211 3 6.66211C4.48384 6.66211 5.71607 7.73939 5.95724 9.15451C6.62371 9.08734 7.17318 8.58162 7.28534 7.90871L7.72827 5.25111C7.92071 4.09646 8.88571 3.23718 10.0407 3.16678ZM3 7.66211C1.89543 7.66211 1 8.55754 1 9.66211C1 10.7667 1.89543 11.6621 3 11.6621C4.10457 11.6621 5 10.7667 5 9.66211C5 8.55754 4.10457 7.66211 3 7.66211Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n",":host {\n display: flex;\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'location-icon',\n styleUrl: 'icon.css',\n scoped: true,\n})\nexport class LocationIcon {\n @Prop() width: string = '16';\n @Prop() height: string = '18';\n\n render() {\n return (\n <svg width={this.width} height={this.height} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10 7.66211C10 9.31896 8.65685 10.6621 7 10.6621C5.34315 10.6621 4 9.31896 4 7.66211C4 6.00526 5.34315 4.66211 7 4.66211C8.65685 4.66211 10 6.00526 10 7.66211ZM9 7.66211C9 6.55754 8.10457 5.66211 7 5.66211C5.89543 5.66211 5 6.55754 5 7.66211C5 8.76668 5.89543 9.66211 7 9.66211C8.10457 9.66211 9 8.76668 9 7.66211ZM11.9497 12.6171C14.6834 9.88221 14.6834 5.44812 11.9497 2.71326C9.21608 -0.0216067 4.78392 -0.0216067 2.05025 2.71326C-0.683418 5.44812 -0.683418 9.88221 2.05025 12.6171L3.57128 14.1159L5.61408 16.101L5.74691 16.2188C6.52168 16.8468 7.65623 16.8076 8.38611 16.1012L10.8223 13.7312L11.9497 12.6171ZM2.75499 3.4183C5.09944 1.07282 8.90055 1.07282 11.245 3.4183C13.5294 5.70364 13.5879 9.3725 11.4207 11.7288L11.245 11.912L9.92371 13.216L7.69315 15.3846L7.60016 15.4642C7.24594 15.732 6.7543 15.732 6.40012 15.4642L6.30713 15.3845L3.3263 12.4791L2.75499 11.912L2.57927 11.7288C0.412077 9.3725 0.47065 5.70364 2.75499 3.4183Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n",":host {\n display: flex;\n}\n","import { Component, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'location-off-icon',\n styleUrl: 'icon.css',\n scoped: true,\n})\nexport class LocationOffIcon {\n @Prop() width: string = '16';\n @Prop() height: string = '18';\n\n render() {\n return (\n <svg width={this.width} height={this.height} fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M0.146447 0.808556C0.341709 0.613294 0.658291 0.613294 0.853553 0.808556L15.8536 15.8086C16.0488 16.0038 16.0488 16.3204 15.8536 16.5157C15.6583 16.7109 15.3417 16.7109 15.1464 16.5157L12.0938 13.463L11.8223 13.7312L9.38611 16.1012C8.65623 16.8076 7.52168 16.8468 6.74691 16.2188L6.61408 16.101L4.57128 14.1159L3.05025 12.6171C0.607421 10.1732 0.347525 6.37239 2.27056 3.63976L0.146447 1.51566C-0.0488155 1.3204 -0.0488155 1.00382 0.146447 0.808556ZM9.07768 10.4469C8.74346 10.576 8.38024 10.6468 8.0005 10.6468C6.34839 10.6468 5.00909 9.30689 5.00909 7.65406C5.00909 7.27461 5.07967 6.91166 5.20843 6.57763L2.98793 4.35713C1.49206 6.62038 1.68917 9.67377 3.57927 11.7288L3.75499 11.912L4.3263 12.4791L7.30713 15.3845L7.40012 15.4642C7.7543 15.732 8.24594 15.732 8.60016 15.4642L8.69315 15.3846L10.9237 13.216L11.3883 12.7575L9.07768 10.4469ZM9.85409 8.39486L10.5983 9.13904C10.8487 8.70143 10.9919 8.19447 10.9919 7.65406C10.9919 6.00122 9.65261 4.66134 8.0005 4.66134C7.45986 4.66134 6.95271 4.80482 6.51504 5.05581L7.25921 5.79998C7.48839 5.70819 7.73855 5.6577 8.0005 5.6577C9.10258 5.6577 9.99599 6.5515 9.99599 7.65406C9.99599 7.91581 9.94564 8.16581 9.85409 8.39486ZM4.35291 2.89368C6.70671 1.08827 10.0908 1.26314 12.245 3.4183C14.3986 5.57283 14.5739 8.95702 12.771 11.3118L13.4812 12.022C15.6702 9.27273 15.493 5.25762 12.9497 2.71326C10.4058 0.168159 6.39081 -0.00843871 3.64269 2.18347L4.35291 2.89368Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n width: inherit;\n @include default-css-variables;\n}\n\n.dropdown {\n display: inline-block;\n width: 100%;\n position: relative;\n .dropdown-label {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n color: var(--nylas-base-800);\n }\n}\n\n.dropbtn {\n width: inherit;\n height: 48px;\n color: black;\n padding: 0.5rem;\n font-size: 1rem;\n cursor: pointer;\n display: flex;\n gap: 0.5rem;\n justify-content: space-between;\n align-items: center;\n background: transparent;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n &.focus {\n background: transparent;\n }\n &:hover,\n &:active {\n border: 1px solid var(--nylas-primary);\n }\n &:active {\n outline: 2px solid var(--nylas-primary);\n }\n span {\n &.open {\n transform: rotate(90deg);\n }\n &.closed {\n transform: rotate(270deg);\n }\n }\n}\n\n.dropdown-content {\n display: block;\n margin-top: 0.5rem;\n background-color: var(--nylas-base-0);\n width: 100%;\n max-height: 336px;\n overflow: auto;\n border: 1px solid #ddd;\n z-index: 1;\n border-radius: 4px;\n position: absolute;\n box-shadow: 0px 4px 6px -2px #0000000d;\n box-shadow: 0px 10px 15px -3px #0000001a;\n}\n\n.dropdown-content ul {\n padding: 0;\n list-style-type: none;\n color: var(--nylas-base-900);\n max-height: 336px;\n li {\n padding: 16px, 12px, 16px, 12px;\n color: black;\n padding: 12px 16px;\n text-decoration: none;\n display: block;\n font-family: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0px;\n text-align: left;\n cursor: pointer;\n &:hover,\n &:focus {\n background-color: var(--nylas-base-100);\n }\n label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n input {\n margin: 0;\n }\n }\n }\n}\n\n.selected-options {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n padding: 0.5rem 0;\n margin-top: 0.25rem;\n background: var(--nylas-base-0);\n .selected-option {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 4px 8px;\n border-radius: var(--nylas-border-radius-2x);\n background: var(--nylas-base-100);\n color: var(--nylas-base-800);\n font-size: 16px;\n font-weight: 500;\n line-height: 1.5rem;\n letter-spacing: 0.5px;\n button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0;\n &:hover {\n color: var(--nylas-primary);\n }\n }\n }\n}\n","import { debug } from '@/utils/utils';\nimport { Component, Element, Event, EventEmitter, Host, Listen, Prop, State, h } from '@stencil/core';\n\ninterface DropdownOption {\n label: string;\n value: string;\n selected?: boolean; // Add a selected flag to each option\n}\n\n@Component({\n tag: 'multi-select-dropdown',\n styleUrl: 'multi-select-dropdown.scss',\n shadow: true,\n})\nexport class MultiSelectDropdown {\n @Element() el!: HTMLElement;\n\n // Props\n /**\n * The name of the dropdown\n */\n @Prop() name!: string;\n\n /**\n * The label of the dropdown\n */\n @Prop() label?: string;\n\n /**\n * The options to display in the dropdown\n */\n @Prop() options: DropdownOption[] = [];\n\n // States\n /**\n * The copy of the options to display in the dropdown\n */\n @State() availableOptions: DropdownOption[] = this.options;\n /**\n * The open state of the dropdown\n */\n @State() isOpen: boolean = false;\n /**\n * The aria-activedescendant attribute for the listbox element to indicate the currently active\n */\n @State() ariaActivedescendant: string = '';\n\n /**\n * This flag is used to focus the first option when the dropdown is opened\n * and reset after the first option is focused\n */\n @State() shouldFocusFirstOption: boolean = false;\n\n // Events\n /**\n * This event is fired when the selected options are changed\n */\n @Event({ bubbles: true, composed: true }) selectedOptionsChanged!: EventEmitter<{\n value: string[];\n name: string;\n }>;\n\n // Lifecycle methods\n componentDidRender() {\n debug('multi-select-dropdown', 'componentDidRender');\n if (this.isOpen && this.shouldFocusFirstOption) {\n // The dropdown is open and we should focus the first option\n this.ariaActivedescendant = this.availableOptions[0].value;\n this.focusOption(0);\n // Reset the flag\n this.shouldFocusFirstOption = false;\n }\n }\n\n // Event listeners\n @Listen('click', { target: 'document', capture: true })\n handleOutsideClick(event: MouseEvent) {\n // Get the path of the event\n const path = event.composedPath();\n\n // Check if the path includes the host element\n const isClickInside = path.includes(this.el);\n\n if (!isClickInside && this.isOpen) {\n this.isOpen = false;\n }\n }\n\n // Methods\n\n selectOption(option: DropdownOption): void {\n this.availableOptions = this.availableOptions.map(o => {\n if (o.value === option.value) {\n o.selected = option.selected ? false : true;\n }\n return o;\n });\n const selectedOptions = this.availableOptions.filter(o => o.selected).map(o => o.value);\n this.selectedOptionsChanged.emit({\n value: selectedOptions,\n name: this.name,\n });\n }\n\n toggleDropdown(): void {\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.shouldFocusFirstOption = true;\n } else {\n this.ariaActivedescendant = '';\n }\n }\n\n handleSelectButtonKeyDown(event: KeyboardEvent): void {\n switch (event.key) {\n case 'ArrowDown':\n case 'Enter':\n event.preventDefault();\n if (!this.isOpen) {\n this.toggleDropdown();\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n handleListboxKeydown(e: KeyboardEvent) {\n const items = this.availableOptions;\n const currentIndex = items.findIndex(item => item.value === this.ariaActivedescendant);\n\n switch (e.key) {\n case 'ArrowDown':\n case 'Tab':\n if (!e.shiftKey) {\n e.preventDefault();\n const nextIndex = currentIndex + 1 < items.length ? currentIndex + 1 : 0;\n this.ariaActivedescendant = items[nextIndex].value;\n this.focusOption(nextIndex);\n } else {\n e.preventDefault();\n const prevIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : items.length - 1;\n this.ariaActivedescendant = items[prevIndex].value;\n this.focusOption(prevIndex);\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n const prevIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : items.length - 1;\n this.ariaActivedescendant = items[prevIndex].value;\n this.focusOption(prevIndex);\n break;\n case 'Enter':\n e.preventDefault();\n if (this.ariaActivedescendant) {\n this.selectOption(items[currentIndex]);\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n focusOption(index: number) {\n const option = this.availableOptions[index];\n if (!option) return; // Guard clause in case index is out of bounds\n\n const elementId = option.value;\n const element = this.el.shadowRoot?.getElementById(elementId) as HTMLLIElement;\n\n if (element) {\n element.focus(); // Set focus on the element\n element.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }\n\n getSelectedOptions() {\n return this.availableOptions.filter(option => option.selected);\n }\n\n renderOption(option: DropdownOption) {\n return (\n <li\n key={option.value}\n id={option.value}\n role=\"option\"\n tabindex=\"0\"\n aria-selected={option.selected ? 'true' : 'false'}\n onClick={e => {\n e.stopImmediatePropagation();\n this.selectOption(option);\n }}\n class={{ selected: !!option.selected }}\n >\n <label htmlFor={option.value}>\n <input aria-hidden=\"true\" id={option.value} type=\"checkbox\" checked={option.selected} />\n <span>{option.label}</span>\n </label>\n </li>\n );\n }\n\n render() {\n return (\n <Host>\n <div class=\"dropdown\" part=\"msd_dropdown\">\n <label class=\"dropdown-label\">\n {this.label}\n <slot name=\"label-icon\" aria-hidden=\"true\"></slot>\n </label>\n <button\n part=\"msd_dropdown-button\"\n class={{ dropbtn: true, open: this.isOpen }}\n onClick={() => this.toggleDropdown()}\n aria-haspopup=\"listbox\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-label={this.name}\n onKeyDown={e => this.handleSelectButtonKeyDown(e)}\n >\n <slot name=\"select-icon\" aria-hidden=\"true\"></slot>\n <span class=\"selected-option\" part=\"msd_dropdown-button-selected-label\">\n {this.getSelectedOptions().length > 1\n ? `Multiple ${this.name}s selected`\n : this.availableOptions.filter(o => o.selected)[0]?.label ?? this.availableOptions[0]?.label}\n </span>\n <span class={this.isOpen ? 'open' : 'closed'} aria-hidden=\"true\">\n <chevron-icon width=\"16\" height=\"16\" />\n </span>\n </button>\n {this.isOpen ? null : (\n <div class={'selected-options'}>\n {this.getSelectedOptions().map(option => (\n <span class=\"selected-option\">\n {option.label}\n <button key={option.label} onClick={() => this.selectOption(option)}>\n <close-icon />\n </button>\n </span>\n ))}\n </div>\n )}\n {this.isOpen ? (\n <div class=\"dropdown-content\" part=\"msd_dropdown-content\">\n <ul\n tabindex=\"-1\"\n role=\"listbox\"\n aria-label={this.name}\n aria-multiselectable={true}\n aria-activedescendant={this.ariaActivedescendant}\n onKeyDown={e => this.handleListboxKeydown(e)}\n >\n {this.availableOptions.map(option => this.renderOption(option))}\n </ul>\n </div>\n ) : null}\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n width: inherit;\n}\n\n.nylas-availability-picker {\n width: inherit;\n display: flex;\n flex-direction: column;\n margin: 1rem;\n border-radius: var(--nylas-border-radius-2x);\n border: 1px solid var(--nylas-base-200);\n .header {\n padding: 1rem;\n border-bottom: 1px solid var(--nylas-base-200);\n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n line-height: 20px;\n color: var(--nylas-base-900);\n text-align: left;\n }\n p {\n margin: 0.25rem 0 0 0;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 20px;\n color: var(--nylas-base-600);\n text-align: left;\n }\n }\n .content {\n padding: 1rem;\n color: var(--nylas-base-900);\n font-size: 16px;\n font-family: var(--nylas-font-family);\n @media #{$small-mobile} {\n font-size: 15px;\n }\n .select-timezone {\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid var(--nylas-base-200);\n padding-bottom: 1rem;\n gap: 1rem;\n h4 {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n margin: 0;\n font-size: 16px;\n @media #{$small-mobile} {\n font-size: 15px;\n }\n font-weight: 500;\n line-height: 20px;\n }\n select-dropdown {\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n }\n }\n .availability {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n padding: 0 0.5rem;\n @media #{$small-mobile} {\n gap: 0.5rem;\n padding: 0;\n }\n margin: 1rem 0;\n .availability-day {\n display: grid;\n grid-template-columns: minmax(auto, 65px) 1fr minmax(auto, 40px);\n @media #{$mobile} {\n grid-template-columns: 78px 1fr auto;\n }\n @media #{$small-mobile} {\n display: inline-grid;\n gap: 8px;\n grid-template-columns: 60px 1fr auto;\n }\n gap: 1rem;\n align-items: baseline;\n .day {\n display: flex;\n gap: 0.5rem;\n @media #{$small-mobile} {\n gap: 0.25rem;\n }\n align-items: center;\n\n input[type='checkbox'] {\n transform: scale(1.3);\n }\n }\n .time-ranges {\n span.unavailable {\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .time-range {\n display: flex;\n gap: 1.5rem;\n justify-content: space-between;\n align-items: baseline;\n @media #{$small-mobile} {\n justify-content: unset;\n gap: 0.5rem;\n }\n .pickers {\n display: flex;\n gap: 1rem;\n @media #{$small-mobile} {\n gap: 0.5rem;\n }\n span {\n margin-top: 0.75rem;\n }\n }\n &:not(:last-of-type) {\n margin-bottom: 1rem;\n }\n }\n p.error {\n color: var(--nylas-error);\n }\n }\n button {\n border: none;\n background: transparent;\n height: 40px;\n cursor: pointer;\n color: var(--nylas-base-800);\n &:hover,\n &:active {\n color: var(--nylas-primary);\n }\n }\n }\n }\n }\n}\n","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';\n\ntype OpenHours = {\n days: number[];\n start: string;\n end: string;\n timezone: string;\n};\n\ntype 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 @Element() host!: HTMLNylasAvailabilityPickerElement;\n @Prop() openHours?: OpenHours[];\n @Prop() name: string = 'availability';\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: OpenHours[];\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 @State() timezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\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('schedule')\n scheduleChanged(newValue: Schedule, oldValue: Schedule) {\n if (newValue !== oldValue) {\n this.valueChanged.emit({\n value: this.scheduleToOpenHours(newValue, this.timezone),\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 this.internals.setValidity({ customError: true }, 'Overlapping time ranges found', element);\n }\n } else {\n this.internals.setValidity({ customError: false });\n this.internals.setFormValue(JSON.stringify(this.scheduleToOpenHours(newValue, this.timezone)));\n }\n }\n }\n\n @Listen('selectedOptionChanged')\n selectedOptionChangedHandler(\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(JSON.stringify(this.scheduleToOpenHours(this.schedule, this.timezone)));\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.updateSchedule(this.openHours);\n }\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n this.internals.setFormValue(JSON.stringify(this.scheduleToOpenHours(this.schedule, this.timezone)));\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 setTime(key: string, _event: Event, value: string) {\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 setFormError(key: string, _event: Event, _errorMessage: string) {\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 updateSchedule(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 if (openHours.length === 0) {\n this.timezone = openHours[0].timezone;\n }\n this.timezone = openHours[0].timezone;\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, timezone: string = 'UTC'): 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: timezone,\n });\n });\n\n return selectedOpenHours;\n }\n\n @RegisterComponent<NylasAvailabilityPicker, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-availability-picker',\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 setTime={(event, additionalData) => this.setTime(startKey, event, additionalData)}\n setFormError={(event, additionalData) => this.setFormError(startKey, event, additionalData)}\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 setTime={(event, additionalData) => this.setTime(endKey, event, additionalData)}\n setFormError={(event, additionalData) => this.setFormError(endKey, event, additionalData)}\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","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n width: inherit;\n}\n\n.nylas-booking-calendar-picker {\n width: inherit;\n display: flex;\n flex-direction: column;\n margin: 1rem;\n border-radius: var(--nylas-border-radius-2x);\n border: 1px solid var(--nylas-base-200);\n .header {\n padding: 1rem;\n border-bottom: 1px solid var(--nylas-base-200);\n h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n line-height: 20px;\n color: var(--nylas-base-900);\n text-align: left;\n }\n p {\n margin: 0.25rem 0 0 0;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 20px;\n color: var(--nylas-base-600);\n text-align: left;\n }\n }\n .nylas-booking-calendar-picker__loading {\n padding-bottom: 1rem;\n display: flex;\n flex-direction: column;\n gap: 4px;\n .label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 1rem 1rem 0;\n color: var(--nylas-base-800);\n }\n .loading-button {\n margin: 0 1rem;\n padding: 0;\n width: inherit;\n height: 48px;\n color: black;\n font-size: 1rem;\n cursor: not-allowed;\n display: flex;\n gap: 0.5rem;\n justify-content: space-between;\n align-items: center;\n background: transparent;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n span {\n padding: 0 1rem;\n }\n }\n }\n .nylas-booking-calendar-picker__dropdown {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 4px;\n span.label {\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--nylas-base-800);\n tooltip-component {\n display: flex;\n }\n }\n select-dropdown::part(sd_dropdown) {\n width: 100%;\n }\n select-dropdown::part(sd_dropdown-content) {\n width: 100%;\n max-width: unset;\n }\n select-dropdown::part(sd_dropdown-button) {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 1rem;\n }\n select-dropdown::part(sd_dropdown-button-selected-label) {\n max-width: calc(100% - 2rem);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { Calendar } from '@nylas/core';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-booking-calendar-picker` component is a UI component that displays the booking calendar picker.\n * @part nbcp - The booking calendar picker container\n * @part nbcp__header - The header of the booking calendar picker\n * @part nbcp__input-label - The input label of the booking calendar picker\n * @part nbcp__dropdown - The dropdown container\n * @part nbcp__dropdown-button - The dropdown button\n * @part nbcp__dropdown-content - The dropdown content\n */\n@Component({\n tag: 'nylas-booking-calendar-picker',\n styleUrl: 'nylas-booking-calendar-picker.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasBookingCalendarPicker {\n @Element() host!: HTMLNylasCalendarPickerElement;\n /**\n * The calendars to choose from.\n */\n @Prop() calendars?: Calendar[];\n /**\n * The name of the calendar picker.\n */\n @Prop() name: string = 'calendar';\n /**\n * The default selected calendars.\n */\n @Prop() defaultBookingCalendar: string = '';\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The selected calendars.\n */\n @State() selectedCalendar: string = '';\n\n /**\n * This event is fired when the selected calendars change.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void;\n }>;\n\n // Lifecycle methods\n connectedCallback() {\n debug('nylas-booking-calendar-picker', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-booking-calendar-picker', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-booking-calendar-picker', 'componentWillLoad');\n // See comment in the @Watch('name') decorator for more information.\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-booking-calendar-picker', 'componentDidLoad');\n // TODO: Remove this when the internals in tests are fixed.\n if (typeof this.internals.setFormValue === 'function') {\n this.internals.setFormValue(this.defaultBookingCalendar.toString(), 'booking-calendar');\n }\n this.selectedCalendar = this.defaultBookingCalendar;\n }\n\n componentWillUpdate() {\n debug('nylas-booking-calendar-picker', 'componentWillUpdate');\n }\n\n componentDidUpdate() {\n debug('nylas-booking-calendar-picker', 'componentDidUpdate');\n }\n\n componentWillRender() {\n debug('nylas-booking-calendar-picker', 'componentWillRender');\n }\n\n componentDidRender() {\n debug('nylas-booking-calendar-picker', 'componentDidRender');\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-booking-calendar-picker', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Listen('selectedOptionChanged')\n selectedOptionChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-booking-calendar-picker', 'selectedOptionChangedHandler', event.detail);\n // Pass as handler so that if event.defaultPrevented by parent app, this will be skipped.\n const valueChanged = (event: CustomEvent<{ value: string; name: string }>) => {\n const { value } = event.detail;\n this.selectedCalendar = value;\n this.internals.setFormValue(value.toString(), 'booking-calendar');\n };\n this.valueChanged.emit({ ...event.detail, valueChanged });\n }\n\n @RegisterComponent<NylasBookingCalendarPicker, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-booking-calendar-picker',\n eventToProps: {\n valueChanged: async (\n event: CustomEvent<{ value: string; name: string; valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void }>,\n _nylasSchedulerConfigConnector: NylasSchedulerConfigConnector,\n ) => {\n const { valueChanged } = event.detail;\n // If a handler is passed, call it.\n if (valueChanged) {\n valueChanged(event);\n }\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const calendarOptions =\n this.calendars?.map(calendar => {\n return {\n value: calendar.id,\n label: calendar.name,\n };\n }) ?? [];\n\n return (\n <Host>\n <div class=\"nylas-booking-calendar-picker\" part=\"nbcp\">\n <div class=\"header\" part=\"nbcp__header\">\n <h3>Calendar booking</h3>\n <p>Choose calendar where you’d like the event bookings to show up.</p>\n </div>\n\n {calendarOptions.length > 0 ? (\n <div class=\"nylas-booking-calendar-picker__dropdown\">\n <span class=\"label\" part=\"nbcp__input-label\">\n Select a calendar to book meetings on\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n Check availability across one or multiple calendars. If multiple calendars are selected, you must be available across all of them to be considered available.\n </span>\n </tooltip-component>\n </span>\n <select-dropdown\n name=\"booking-calendar\"\n options={calendarOptions}\n withSearch={false}\n exportparts=\"sd_dropdown: nbcp__dropdown, sd_dropdown-button: nbcp__dropdown-button, sd_dropdown-content: nbcp__dropdown-content\"\n defaultSelectedOption={calendarOptions.find(cal => cal.value == this.defaultBookingCalendar) ?? calendarOptions[0]}\n />\n </div>\n ) : (\n <div class=\"nylas-booking-calendar-picker__loading\">\n <span class=\"label\">\n Select a calendar to book meetings on <info-icon />\n </span>\n <div class=\"loading-button\">\n <span>Loading...</span>\n </div>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n width: inherit;\n}\n\n.nylas-buffer-time {\n width: inherit;\n display: flex;\n flex-direction: column;\n margin: 1rem;\n border-radius: var(--nylas-border-radius-2x);\n border: 1px solid var(--nylas-base-200);\n text-align: left;\n .header {\n padding: 1rem;\n border-bottom: 1px solid var(--nylas-base-200);\n h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n line-height: 20px;\n color: var(--nylas-base-900);\n text-align: left;\n }\n p {\n margin: 0.25rem 0 0 0;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 20px;\n color: var(--nylas-base-600);\n text-align: left;\n }\n }\n\n .nylas-buffer-time__body {\n display: grid;\n grid-template-columns: 1fr auto;\n .nylas-buffer-time__dropdown {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n border-right: 1px solid var(--nylas-base-200);\n .nylas-buffer-time__row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: 1rem;\n label {\n width: 200px;\n }\n .dropdown-container {\n display: flex;\n gap: 1rem;\n align-items: center;\n }\n }\n }\n .nylas-buffer-time__preview {\n width: 200px;\n padding: 1rem;\n background: var(--nylas-base-25);\n border-bottom-right-radius: var(--nylas-border-radius-2x);\n h4 {\n font-size: 12px;\n line-height: 24px;\n color: var(--nylas-base-600);\n font-family: var(--nylas-font-family);\n font-weight: 500;\n text-align: center;\n }\n .preview-container {\n .slot {\n background-color: transparent;\n border-top: 1px solid var(--nylas-base-300);\n &.active {\n background-color: var(--nylas-base-100);\n }\n &:last-of-type {\n border-bottom: 1px solid var(--nylas-base-300);\n }\n }\n .event-slot {\n background-color: var(--nylas-base-600);\n border-top: 1px solid var(--nylas-base-300);\n border-bottom: 1px solid var(--nylas-base-300);\n }\n }\n }\n }\n\n .nylas-buffer-time__dropdown {\n select-dropdown::part(sd_dropdown-button) {\n width: 104px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 1rem;\n }\n select-dropdown::part(sd_dropdown-content) {\n width: 100%;\n }\n select-dropdown::part(sd_dropdown-button-selected-label) {\n max-width: calc(100% - 2rem);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } 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';\n\n/**\n * The `nylas-buffer-time` component is a UI component that displays the booking calendar picker.\n * @part nbt - The buffer time container\n * @part nbt__header - The header of the buffer time\n * @part nbt__body - The body of the buffer time\n * @part nbt__dropdown-before - The dropdown container for the before buffer time\n * @part nbt__dropdown-button-before - The dropdown button for the before buffer time\n * @part nbt__dropdown-content-before - The dropdown content for the before buffer time\n * @part nbt__dropdown-after - The dropdown container for the after buffer time\n * @part nbt__dropdown-button-after - The dropdown button for the after buffer time\n * @part nbt__dropdown-content-after - The dropdown content for the after buffer time\n * @part nbt__preview - The preview container\n */\n@Component({\n tag: 'nylas-buffer-time',\n styleUrl: 'nylas-buffer-time.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasBufferTime {\n @Element() host!: HTMLNylasCalendarPickerElement;\n /**\n * The name of the calendar picker.\n */\n @Prop() name: string = 'buffer-time';\n /**\n * The buffer time\n */\n @Prop() buffer: { before: number; after: number } = { before: 0, after: 0 };\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The selected before buffer time.\n */\n @State() selectedBeforeBufferTime: number = this.buffer.before;\n\n /**\n * The selected after buffer time.\n */\n @State() selectedAfterBufferTime: number = this.buffer.after;\n\n /**\n * This event is fired when the selected calendars change.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void;\n }>;\n\n // Lifecycle methods\n connectedCallback() {\n debug('nylas-buffer-time', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-buffer-time', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-buffer-time', 'componentWillLoad');\n // See comment in the @Watch('name') decorator for more information.\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-buffer-time', 'componentDidLoad');\n // TODO: Remove this when the internals in tests are fixed.\n if (typeof this.internals.setFormValue === 'function') {\n const bufferTime = {\n before: this.selectedBeforeBufferTime,\n after: this.selectedAfterBufferTime,\n };\n this.internals.setFormValue(JSON.stringify(bufferTime), this.name);\n }\n this.selectedAfterBufferTime = this.buffer.after;\n this.selectedBeforeBufferTime = this.buffer.before;\n }\n\n componentWillUpdate() {\n debug('nylas-buffer-time', 'componentWillUpdate');\n }\n\n componentDidUpdate() {\n debug('nylas-buffer-time', 'componentDidUpdate');\n }\n\n componentWillRender() {\n debug('nylas-buffer-time', 'componentWillRender');\n }\n\n componentDidRender() {\n debug('nylas-buffer-time', 'componentDidRender');\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-buffer-time', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Listen('selectedOptionChanged')\n selectedOptionChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-buffer-time', 'selectedOptionChangedHandler', event.detail);\n // Pass as handler so that if event.defaultPrevented by parent app, this will be skipped.\n const valueChanged = (event: CustomEvent<{ value: string; name: string }>) => {\n const { value, name } = event.detail;\n if (name === 'before-buffer-time') {\n this.selectedBeforeBufferTime = parseInt(value);\n } else if (name === 'after-buffer-time') {\n this.selectedAfterBufferTime = parseInt(value);\n }\n const bufferTime = {\n before: this.selectedBeforeBufferTime,\n after: this.selectedAfterBufferTime,\n };\n this.internals.setFormValue(JSON.stringify(bufferTime), 'booking-calendar');\n };\n this.valueChanged.emit({ ...event.detail, valueChanged });\n }\n\n renderPreview() {\n const totalSlots = 4;\n const slotHeight = 20; // The height for each 30-minute slot\n\n // Event slot height is constant\n const eventSlotHeight = slotHeight * 2;\n\n // Helper function to determine the fill of a slot based on the minutes selected\n const slotFill = minutes => {\n const fullSlots = Math.floor(minutes / 30);\n const partialFillHeight = ((minutes % 30) / 30) * slotHeight;\n\n return {\n fullSlots,\n partialFillHeight,\n };\n };\n\n // Helper function to create before slots\n const createBeforeSlots = () => {\n const { fullSlots, partialFillHeight } = slotFill(this.selectedBeforeBufferTime);\n\n return Array.from({ length: totalSlots }, (_, index) => {\n // Slot is active if its index is greater than the total slots minus the full slots minus one\n // and there are some minutes selected.\n const isActive = this.selectedBeforeBufferTime > 0 && index > totalSlots - fullSlots - 1;\n const isPartial = this.selectedBeforeBufferTime > 0 && index === totalSlots - fullSlots - 1 && partialFillHeight > 0;\n\n let slotStyle: {\n backgroundColor?: string;\n background?: string;\n } = {};\n if (isActive && !isPartial) {\n slotStyle.backgroundColor = 'var(--nylas-base-100)';\n } else if (isPartial) {\n slotStyle.background = `linear-gradient(to top, var(--nylas-base-100) ${partialFillHeight}px, transparent 0)`;\n }\n\n return (\n <div\n key={index}\n class={`slot ${isActive ? 'active' : ''}`}\n style={{\n height: `${slotHeight}px`,\n ...slotStyle,\n }}\n ></div>\n );\n });\n };\n\n // Helper function to create after slots\n const createAfterSlots = () => {\n const { fullSlots, partialFillHeight } = slotFill(this.selectedAfterBufferTime);\n\n return Array.from({ length: totalSlots }, (_, index) => {\n const isActive = this.selectedAfterBufferTime > 0 && index < fullSlots;\n const isPartial = index === fullSlots && partialFillHeight > 0;\n\n let slotStyle: {\n backgroundColor?: string;\n background?: string;\n } = {};\n if (isActive && !isPartial) {\n slotStyle.backgroundColor = 'var(--nylas-base-100)';\n } else if (isPartial) {\n slotStyle.background = `linear-gradient(to bottom, var(--nylas-base-100) ${partialFillHeight}px, transparent 0)`;\n }\n\n return (\n <div\n key={index}\n class={`slot ${isActive ? 'active' : ''}`}\n style={{\n height: `${slotHeight}px`,\n ...slotStyle,\n }}\n ></div>\n );\n });\n };\n\n return (\n <div class=\"preview-container\">\n {createBeforeSlots()}\n <div class=\"event-slot\" style={{ height: `${eventSlotHeight}px` }}></div>\n {createAfterSlots()}\n </div>\n );\n }\n\n @RegisterComponent<NylasBufferTime, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-buffer-time',\n eventToProps: {\n valueChanged: async (\n event: CustomEvent<{ value: string; name: string; valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void }>,\n _nylasSchedulerConfigConnector: NylasSchedulerConfigConnector,\n ) => {\n const { valueChanged } = event.detail;\n // If a handler is passed, call it.\n if (valueChanged) {\n valueChanged(event);\n }\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const minuteOptions = Array.from({ length: 121 }, (_, i) => {\n return {\n label: i.toString(),\n value: i,\n };\n });\n\n return (\n <Host>\n <div class=\"nylas-buffer-time\" part=\"nbt\">\n <div class=\"header\" part=\"nbt__header\">\n <h3>Buffer time</h3>\n <p>Add buffer time before and after the event.</p>\n </div>\n <div class=\"nylas-buffer-time__body\" part=\"nbt__body\">\n <div class=\"nylas-buffer-time__dropdown\">\n <div class=\"nylas-buffer-time__row\">\n <label>Before the event</label>\n <div class=\"dropdown-container\">\n <select-dropdown\n id=\"before-buffer-time\"\n name=\"before-buffer-time\"\n exportparts=\"sd_dropdown: nbt__dropdown-before, sd_dropdown-button: nbt__dropdown-button-before, sd_dropdown-content: nbt__dropdown-content-before\"\n options={minuteOptions}\n defaultSelectedOption={minuteOptions.find(min => min.value == this.selectedBeforeBufferTime) ?? minuteOptions[0]}\n />\n <span>mins</span>\n </div>\n </div>\n <div class=\"nylas-buffer-time__row\">\n <label>After the event</label>\n <div class=\"dropdown-container\">\n <select-dropdown\n id=\"after-buffer-time\"\n name=\"after-buffer-time\"\n exportparts=\"sd_dropdown: nbt__dropdown-after, sd_dropdown-button: nbt__dropdown-button-after, sd_dropdown-content: nbt__dropdown-content-after\"\n options={minuteOptions}\n defaultSelectedOption={minuteOptions.find(min => min.value == this.selectedAfterBufferTime) ?? minuteOptions[0]}\n />\n <span>mins</span>\n </div>\n </div>\n </div>\n <div class=\"nylas-buffer-time__preview\" part=\"nbt__preview\">\n <h4>PREVIEW</h4>\n {this.renderPreview()}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n width: inherit;\n}\n\n.nylas-calendar-picker {\n width: inherit;\n display: flex;\n flex-direction: column;\n margin: 1rem;\n border-radius: var(--nylas-border-radius-2x);\n border: 1px solid var(--nylas-base-200);\n .header {\n padding: 1rem;\n border-bottom: 1px solid var(--nylas-base-200);\n h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n line-height: 20px;\n color: var(--nylas-base-900);\n text-align: left;\n }\n p {\n margin: 0.25rem 0 0 0;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 20px;\n color: var(--nylas-base-600);\n text-align: left;\n }\n }\n .nylas-calendar-picker__loading {\n padding-bottom: 1rem;\n display: flex;\n flex-direction: column;\n gap: 4px;\n .label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 1rem 1rem 0;\n color: var(--nylas-base-800);\n tooltip-component {\n display: flex;\n }\n }\n .loading-button {\n margin: 0 1rem;\n padding: 0;\n width: inherit;\n height: 48px;\n color: black;\n font-size: 1rem;\n cursor: not-allowed;\n display: flex;\n gap: 0.5rem;\n justify-content: space-between;\n align-items: center;\n background: transparent;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n span {\n padding: 0 1rem;\n }\n }\n }\n .nylas-calendar-picker__dropdown {\n padding: 1rem;\n multi-select-dropdown::part(msd_dropdown) {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n multi-select-dropdown::part(msd_dropdown-button) {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 1rem;\n }\n multi-select-dropdown::part(msd_dropdown-content) {\n width: 100%;\n max-width: unset;\n }\n multi-select-dropdown::part(msd_dropdown-button-selected-label) {\n max-width: calc(100% - 2rem);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { Calendar } from '@nylas/core';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-calendar-picker` component is a form input for selecting calendars.\n * @part ncp - The calendar picker container\n * @part ncp__header - The header of the calendar picker\n * @part ncp__dropdown - The dropdown container\n * @part ncp__dropdown-button - The dropdown button\n * @part ncp__dropdown-content - The dropdown content\n */\n@Component({\n tag: 'nylas-calendar-picker',\n styleUrl: 'nylas-calendar-picker.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasCalendarPicker {\n @Element() host!: HTMLNylasCalendarPickerElement;\n /**\n * The calendars to choose from.\n */\n @Prop() calendars?: Calendar[];\n /**\n * The organizer's email.\n */\n @Prop() organizerEmail?: string;\n /**\n * The name of the calendar picker.\n */\n @Prop() name: string = 'calendar';\n /**\n * The default selected calendars.\n */\n @Prop() defaultSelectedCalendars: string[] = [];\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The selected calendars.\n */\n @State() selectedCalendars: string[] = [];\n\n /**\n * This event is fired when the selected calendars change.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string[];\n name: string;\n valueChangedHandler?: (event: CustomEvent<{ value: string[]; name: string }>) => void;\n }>;\n\n // Lifecycle methods\n connectedCallback() {\n debug('nylas-calendar-picker', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-calendar-picker', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-calendar-picker', 'componentWillLoad');\n // See comment in the @Watch('name') decorator for more information.\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-calendar-picker', 'componentDidLoad');\n // TODO: Remove this when the internals in tests are fixed.\n if (typeof this.internals.setFormValue === 'function') {\n this.internals.setFormValue(this.defaultSelectedCalendars.toString(), 'calendar');\n }\n }\n\n componentWillUpdate() {\n debug('nylas-calendar-picker', 'componentWillUpdate');\n }\n\n componentDidUpdate() {\n debug('nylas-calendar-picker', 'componentDidUpdate');\n }\n\n componentWillRender() {\n debug('nylas-calendar-picker', 'componentWillRender');\n }\n\n componentDidRender() {\n debug('nylas-calendar-picker', 'componentDidRender');\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-calendar-picker', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Listen('selectedOptionsChanged')\n selectedOptionsChangedHandler(event: CustomEvent<{ value: string[]; name: string }>) {\n debug('nylas-calendar-picker', 'selectedOptionChangedHandler', event.detail);\n // Pass as handler so that if event.defaultPrevented by parent app, this will be skipped.\n const valueChangedHandler = (event: CustomEvent<{ value: string[]; name: string }>) => {\n const { value } = event.detail;\n this.selectedCalendars = [...value];\n this.internals.setFormValue(value.toString(), 'calendar');\n };\n this.valueChanged.emit({ ...event.detail, name: this.name, valueChangedHandler });\n }\n\n @RegisterComponent<NylasCalendarPicker, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-calendar-picker',\n eventToProps: {\n valueChanged: async (\n event: CustomEvent<{ value: string[]; name: string; valueChangedHandler?: (event: CustomEvent<{ value: string[]; name: string }>) => void }>,\n _nylasSchedulerConfigConnector: NylasSchedulerConfigConnector,\n ) => {\n const { valueChangedHandler } = event.detail;\n // If a handler is passed, call it.\n if (valueChangedHandler) {\n valueChangedHandler(event);\n }\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const calendarOptions =\n this.calendars?.map(calendar => {\n return {\n value: calendar.id,\n label: calendar.name,\n selected: this.defaultSelectedCalendars?.includes(calendar.id) || (this.defaultSelectedCalendars?.includes('primary') && calendar.id === this.organizerEmail),\n };\n }) ?? [];\n\n return (\n <Host>\n <div class=\"nylas-calendar-picker\" part=\"ncp\">\n <div class=\"header\" part=\"ncp__header\">\n <h3>Calendar availability</h3>\n <p>Select calendars that you’d like to use for checking your availability.</p>\n </div>\n\n {calendarOptions.length > 0 ? (\n <div class=\"nylas-calendar-picker__dropdown\">\n <multi-select-dropdown\n name={'calendar'}\n label=\"Select calendars that will be checked for availability\"\n options={calendarOptions}\n exportparts=\"msd__dropdown: ncp__dropdown, msd__dropdown-button: ncp__dropdown-button, msd__dropdown-content: ncp__dropdown-content\"\n >\n <span slot=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n Check availability across one or multiple calendars. If multiple calendars are selected, you must be available across all of them to be considered available.\n The default is your primary calendar if none are selected.\n </span>\n </tooltip-component>\n </span>\n </multi-select-dropdown>\n </div>\n ) : (\n <div class=\"nylas-calendar-picker__loading\">\n <span class=\"label\">\n Select calendars that will be checked for availability <info-icon />\n </span>\n <div class=\"loading-button\">\n <span>Loading...</span>\n </div>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n width: inherit;\n}\n\n.nylas-custom-booking-flow {\n width: inherit;\n display: flex;\n flex-direction: column;\n margin: 1rem;\n border-radius: var(--nylas-border-radius-2x);\n border: 1px solid var(--nylas-base-200);\n .header {\n padding: 1rem;\n border-bottom: 1px solid var(--nylas-base-200);\n h3 {\n margin: 0;\n font-size: 1rem;\n font-weight: 600;\n line-height: 20px;\n color: var(--nylas-base-900);\n text-align: left;\n }\n p {\n margin: 0.25rem 0 0 0;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 20px;\n color: var(--nylas-base-600);\n text-align: left;\n }\n }\n .nylas-custom-booking-flow__loading {\n padding-bottom: 1rem;\n .label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin: 1rem 1rem 0;\n color: var(--nylas-base-800);\n }\n .loading-button {\n margin: 0 1rem;\n padding: 0;\n width: inherit;\n height: 48px;\n color: black;\n font-size: 1rem;\n cursor: not-allowed;\n display: flex;\n gap: 0.5rem;\n justify-content: space-between;\n align-items: center;\n background: transparent;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n span {\n padding: 0 1rem;\n }\n }\n }\n .nylas-custom-booking-flow__dropdown {\n padding: 1rem;\n span.label {\n display: flex;\n align-items: center;\n gap: 4px;\n color: var(--nylas-base-800);\n tooltip-component {\n display: flex;\n }\n }\n select-dropdown::part(sd_dropdown) {\n width: 100%;\n }\n select-dropdown::part(sd_dropdown-button) {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 1rem;\n }\n select-dropdown::part(sd_dropdown-content) {\n width: 100%;\n max-width: unset;\n }\n select-dropdown::part(sd_dropdown-button-selected-label) {\n max-width: calc(100% - 2rem);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } 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';\n\n/**\n * The `nylas-custom-booking-flow` component is a UI component that displays the booking calendar picker.\n * @part ncbf - The custom booking flow container\n * @part ncbf__header - The header of the custom booking flow\n * @part ncbf__dropdown - The dropdown container\n * @part ncbf__dropdown-button - The dropdown button\n * @part ncbf__dropdown-content - The dropdown content\n */\n@Component({\n tag: 'nylas-custom-booking-flow',\n styleUrl: 'nylas-custom-booking-flow.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasCustomBookingFlow {\n @Element() host!: HTMLNylasCustomBookingFlowElement;\n /**\n * The name of the calendar picker.\n */\n @Prop() name: string = 'booking-type';\n /**\n * The booking type.\n */\n @Prop() bookingType: string = '';\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The selected bookingType.\n */\n @State() selectedBookingType: string = '';\n\n /**\n * This event is fired when the selected bookingType changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void;\n }>;\n\n // Lifecycle methods\n connectedCallback() {\n debug('nylas-custom-booking-flow', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-custom-booking-flow', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-custom-booking-flow', 'componentWillLoad');\n // See comment in the @Watch('name') decorator for more information.\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-custom-booking-flow', 'componentDidLoad');\n // TODO: Remove this when the internals in tests are fixed.\n if (typeof this.internals.setFormValue === 'function') {\n this.internals.setFormValue(this.bookingType.toString(), 'booking-calendar');\n }\n this.selectedBookingType = this.bookingType;\n }\n\n componentWillUpdate() {\n debug('nylas-custom-booking-flow', 'componentWillUpdate');\n }\n\n componentDidUpdate() {\n debug('nylas-custom-booking-flow', 'componentDidUpdate');\n }\n\n componentWillRender() {\n debug('nylas-custom-booking-flow', 'componentWillRender');\n }\n\n componentDidRender() {\n debug('nylas-custom-booking-flow', 'componentDidRender');\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-custom-booking-flow', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Listen('selectedOptionChanged')\n selectedOptionChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-custom-booking-flow', 'selectedOptionChangedHandler', event.detail);\n // Pass as handler so that if event.defaultPrevented by parent app, this will be skipped.\n const valueChanged = (event: CustomEvent<{ value: string; name: string }>) => {\n const { value } = event.detail;\n this.selectedBookingType = value;\n this.internals.setFormValue(value.toString(), 'booking-calendar');\n };\n this.valueChanged.emit({ ...event.detail, valueChanged });\n }\n\n @RegisterComponent<NylasCustomBookingFlow, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-custom-booking-flow',\n eventToProps: {\n valueChanged: async (\n event: CustomEvent<{ value: string; name: string; valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void }>,\n _nylasSchedulerConfigConnector: NylasSchedulerConfigConnector,\n ) => {\n const { valueChanged } = event.detail;\n // If a handler is passed, call it.\n if (valueChanged) {\n valueChanged(event);\n }\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const bookingOptions = [\n {\n label: 'Automatically accept bookings',\n value: 'booking',\n },\n {\n label: 'Manually confirm/decline bookings',\n value: 'pre-booking',\n },\n ];\n\n return (\n <Host>\n <div class=\"nylas-custom-booking-flow\" part=\"ncbf\">\n <div class=\"header\" part=\"ncbf__header\">\n <h3>Customize booking flow</h3>\n <p>Customize how new bookings are handled when a booking is completed.</p>\n </div>\n\n {bookingOptions.length > 0 ? (\n <div class=\"nylas-custom-booking-flow__dropdown\">\n <span class=\"label\">\n After a booking is confirmed\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n Choose how you’d like to handle new bookings. If you choose to manually confirm/decline bookings, you will be able to review and accept or decline each booking\n request.\n </span>\n </tooltip-component>\n </span>\n <select-dropdown\n name=\"booking-type\"\n options={bookingOptions}\n withSearch={false}\n exportparts=\"sd_dropdown: ncbf__dropdown, sd_dropdown-button: ncbf__dropdown-button, sd_dropdown-content: ncbf__dropdown-content\"\n defaultSelectedOption={bookingOptions.find(cal => cal.value == this.bookingType) ?? bookingOptions[0]}\n />\n </div>\n ) : (\n <div class=\"nylas-custom-booking-flow__loading\">\n <span class=\"label\">\n Select a calendar to book meetings on <info-icon />\n </span>\n <div class=\"loading-button\">\n <span>Loading...</span>\n </div>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n @include default-css-variables;\n}\n\n.nylas-event-description {\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n textarea {\n padding: 12px 16px;\n border-width: 1;\n resize: vertical;\n border-radius: 8px;\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n border: 1px solid var(--nylas-base-200);\n &::-webkit-resizer {\n display: none;\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, State, h, Element, Prop, Watch, Event, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-event-description` component is a form input for the description of an event.\n * @part nedesc - The event description container\n * @part nedesc__textarea - The event description textarea\n */\n@Component({\n tag: 'nylas-event-description',\n styleUrl: 'nylas-event-description.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDescription {\n @Prop() eventDescription?: string;\n @State() description: string = this.eventDescription ?? '';\n @AttachInternals() internals!: ElementInternals;\n @Element() host!: HTMLElement;\n @Prop() name: string = 'description';\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-event-description', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-description', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-description', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-event-description', 'componentDidLoad');\n }\n\n disconnectedCallback() {\n debug('nylas-event-description', 'disconnectedCallback');\n }\n\n handleChange(event) {\n this.description = event.target.value;\n this.internals.setFormValue(event.target.value, 'description');\n this.valueChanged.emit({ value: event.target.value, name: this.name });\n }\n\n @RegisterComponent<NylasEventDescription, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-description',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-event-description\" part=\"nedesc\">\n <label htmlFor=\"description\">\n Event description\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">Provide any additional details for your event.</span>\n </tooltip-component>\n </span>\n </label>\n <textarea id=\"description\" part=\"nedesc__textarea\" name=\"description\" value={this.description} maxlength=\"8192\" onInput={e => this.handleChange(e)}></textarea>\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n}\n\n.nylas-event-duration {\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.required {\n color: var(--nylas-error, #cc4841);\n }\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n.nylas-event-duration__wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n input {\n padding: 12px 16px;\n border-width: 1;\n border-radius: 8px;\n border: 1px solid var(--nylas-base-200);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n width: 48px;\n }\n select-dropdown::part(sd_dropdown-button) {\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 12px 16px;\n }\n select-dropdown::part(sd_dropdown-button-selected-label) {\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, Listen, State, h, Element, Prop, Watch, Event, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-event-duration` component is a form input for the duration of an event.\n * @part ned - The event duration container\n * @part ned_input - The event duration input\n * @part ned__dropdown - The dropdown container\n * @part ned__dropdown-button - The dropdown button\n * @part ned__dropdown-content - The dropdown content\n */\n@Component({\n tag: 'nylas-event-duration',\n styleUrl: 'nylas-event-duration.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDuration {\n @Element() host!: HTMLElement;\n\n @Prop() name: string = 'duration';\n @Prop() eventDurationMinutes?: number;\n\n @State() duration: number = this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 5;\n @State() durationMinutes: number = this.eventDurationMinutes ?? 5;\n @State() durationIncrement: number = this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? 60 : 1) : 1;\n\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-event-duration', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('durationMinutes')\n durationMinutesChangedHandler(newValue: number, oldValue: number) {\n debug('nylas-event-duration', 'durationMinutesChangedHandler', newValue);\n if (newValue === oldValue) {\n return;\n }\n this.valueChanged.emit({ value: newValue.toString(), name: this.name });\n }\n\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-duration', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-duration', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-event-duration', 'componentDidLoad');\n this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n\n disconnectedCallback() {\n debug('nylas-event-duration', 'disconnectedCallback');\n }\n\n handleChange(event) {\n this.duration = event.target.value;\n this.durationMinutes = this.duration * this.durationIncrement;\n this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n }\n handleBlur() {\n if ((this.duration === null || this.duration === undefined) && this.durationIncrement === 1) {\n this.duration = 5;\n }\n if ((this.duration <= 0 || this.duration === null || this.duration === undefined) && this.durationIncrement === 60) {\n this.duration = 1;\n }\n if (this.duration < 5 && this.durationIncrement === 1) {\n this.duration = 5;\n }\n if (this.duration > 720 && this.durationIncrement === 1) {\n this.duration = 720;\n }\n if (this.duration > 12 && this.durationIncrement === 60) {\n this.duration = 12;\n }\n this.durationMinutes = this.duration * this.durationIncrement;\n this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n\n @Listen('selectedOptionChanged')\n selectedOptionChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-calendar-picker', 'selectedOptionChangedHandler', event.detail);\n const { value } = event.detail;\n this.durationIncrement = parseInt(value);\n if (this.durationIncrement === 1) {\n this.duration = 5;\n } else {\n this.duration = 1;\n }\n\n this.durationMinutes = this.duration * this.durationIncrement;\n this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n\n @RegisterComponent<NylasEventDuration, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-duration',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n const durationOptions = [\n { value: 1, label: 'minutes' },\n { value: 60, label: 'hours' },\n ];\n return (\n <Host>\n <div class=\"nylas-event-duration\" part=\"ned\">\n <label htmlFor=\"duration\">\n Event duration<span class=\"required\">*</span>\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">Set the duration of your event.</span>\n </tooltip-component>\n </span>\n </label>\n <div class=\"nylas-event-duration__wrapper\">\n <input\n type=\"number\"\n part=\"ned_input\"\n id=\"duration\"\n name=\"duration\"\n value={this.duration}\n onBlur={() => this.handleBlur()}\n onInput={e => this.handleChange(e)}\n min={5}\n />\n <select-dropdown\n name={'event-duration'}\n options={durationOptions}\n exportparts=\"sd__dropdown: ned__dropdown, sd__dropdown-button: ned__dropdown-button, sd__dropdown-content: ned__dropdown-content\"\n defaultSelectedOption={durationOptions.find(i => i.value == this.durationIncrement) ?? durationOptions[0]}\n withSearch={false}\n />\n </div>\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n margin: 1rem;\n @include default-css-variables;\n}\n\n.nylas-event-info__title {\n color: var(--nylas-base-900);\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 20px; /* 125% */\n margin: 0;\n text-align: left;\n}\n.nylas-event-info__subtitle {\n color: var(--nylas-base-600);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n margin: 0.25rem 0px 0px;\n text-align: left;\n}\n.nylas-event-info__content {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.nylas-event-info__block {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-event-info` component is a input form for the event information.\n * ```\n */\n@Component({\n tag: 'nylas-event-info',\n styleUrl: 'nylas-event-info.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventInfo {\n @AttachInternals() internals!: ElementInternals;\n\n connectedCallback() {\n debug('nylas-event-info', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-info', 'componentWillLoad');\n }\n\n componentDidLoad() {\n debug('nylas-event-info', 'componentDidLoad');\n }\n\n disconnectedCallback() {\n debug('nylas-event-info', 'disconnectedCallback');\n }\n\n @RegisterComponent<NylasEventInfo, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-info',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <nylas-form-card>\n <h1 slot=\"header-title\" class=\"nylas-event-info__title\">\n Event information\n </h1>\n <h3 slot=\"header-subtitle\" class=\"nylas-event-info__subtitle\">\n Enter all event information.\n </h3>\n <div slot=\"content\" class=\"nylas-event-info__content\">\n <slot name=\"inputs\"></slot>\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n margin: 1rem;\n @include default-css-variables;\n}\n\n.nylas-event-limits__title {\n color: var(--nylas-base-900);\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 20px; /* 125% */\n margin: 0;\n text-align: left;\n}\n.nylas-event-limits__subtitle {\n color: var(--nylas-base-600);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n margin: 0.25rem 0px 0px;\n text-align: left;\n}\n.nylas-event-limits__content {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.nylas-event-limits__block {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-event-limits` component is a input form for the event information.\n * ```\n */\n@Component({\n tag: 'nylas-event-limits',\n styleUrl: 'nylas-event-limits.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventLimits {\n @AttachInternals() internals!: ElementInternals;\n\n connectedCallback() {\n debug('nylas-event-limits', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-limits', 'componentWillLoad');\n }\n\n componentDidLoad() {\n debug('nylas-event-limits', 'componentDidLoad');\n }\n\n disconnectedCallback() {\n debug('nylas-event-limits', 'disconnectedCallback');\n }\n\n @RegisterComponent<NylasEventLimits, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-limits',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <nylas-form-card>\n <h1 slot=\"header-title\" class=\"nylas-event-limits__title\">\n Set event limits\n </h1>\n <h3 slot=\"header-subtitle\" class=\"nylas-event-limits__subtitle\">\n Customize event limits for the event.\n </h3>\n <div slot=\"content\" class=\"nylas-event-limits__content\">\n <slot name=\"inputs\"></slot>\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n}\n\n.nylas-event-title {\n display: flex;\n flex-direction: column;\n gap: 4px;\n position: relative;\n text-align: left;\n div.title {\n padding: 12px 16px;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n overflow: scroll;\n white-space: nowrap;\n scrollbar-width: thin;\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n }\n input {\n padding: 12px 16px;\n border-width: 1;\n border-radius: 8px;\n border: 1px solid var(--nylas-base-200);\n }\n span.help-text {\n color: var(--nylas-base-800);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 21px;\n }\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.required {\n color: var(--nylas-error, #cc4841);\n }\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n\n.highlighted-tag {\n background-color: var(--nylas-base-200);\n border-radius: var(--nylas-border-radius);\n padding: 5px;\n margin-left: 4px;\n}\n\n.token-options {\n display: block;\n background-color: var(--nylas-base-0);\n width: 100%;\n max-height: 336px;\n overflow: auto;\n z-index: 1;\n border-radius: 4px;\n position: absolute;\n top: calc(48px + 24px + 8px); // 48px is the height of the input, 24px is the height of the label, 8px is the gap between the label and the input\n @media #{$mobile} {\n right: 0;\n width: 325px;\n max-width: unset;\n }\n box-shadow: 0px 4px 6px -2px #0000000d;\n box-shadow: 0px 10px 15px -3px #0000001a;\n ul {\n padding: 0;\n list-style-type: none;\n color: var(--nylas-base-900);\n max-height: 336px;\n margin: 0;\n li {\n padding: 16px, 12px, 16px, 12px;\n color: black;\n padding: 12px 16px;\n text-decoration: none;\n display: block;\n font-family: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0px;\n text-align: left;\n cursor: pointer;\n .token-label {\n display: flex;\n flex-direction: column;\n font-weight: 400;\n .token {\n color: var(--nylas-abse-900);\n font-size: 16px;\n line-height: 24px;\n }\n .description {\n color: var(--nylas-base-600);\n font-size: 14px;\n line-height: 21px;\n }\n }\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: var(--nylas-base-100);\n .token-label {\n .token {\n color: var(--nylas-primary);\n }\n }\n }\n }\n }\n .selected {\n background-color: var(--nylas-base-100);\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug, getBrowser } from '@/utils/utils';\nimport { AttachInternals, Component, Host, State, h, Element, Prop, Watch, Event, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { EVENT_TITLE_TOKENS as eventTitleTokens } from '@/common/constants';\n\ninterface CustomShadowRoot extends ShadowRoot {\n getSelection: () => Selection | null;\n}\n\ntype Token = {\n token: string;\n value: string;\n description: string;\n};\n\n/**\n * The `nylas-event-title` component is a form input for the title of an event.\n * @part net - The event title container\n * @part net__title - The event title input\n * @part net__dropdown-content - The token options container\n */\n@Component({\n tag: 'nylas-event-title',\n styleUrl: 'nylas-event-title.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventTitle {\n @Element() host!: HTMLElement;\n @AttachInternals() internals!: ElementInternals;\n\n // Properties\n /**\n * The title of the event from the cofiguration.\n */\n @Prop() eventTitle?: string;\n /**\n * The name attribute of this component.\n */\n @Prop() name: string = 'title';\n\n // State variables\n /**\n * Whether to show the tokens dropdown.\n */\n @State() showTokens: boolean = false;\n /**\n * The available token options for the dropdown.\n */\n @State() availableTokens: { label: string; value: string; labelHTML: Token }[] = eventTitleTokens.map(token => ({\n label: token.token,\n value: token.value,\n labelHTML: token,\n }));\n /**\n * The filtered token options for the dropdown based on the current query.\n */\n @State() filteredTokens: { label: string; value: string; labelHTML: Token }[] = this.availableTokens;\n /**\n * The aria-activedescendant attribute value. This is used to indicate the\n * currently active descendant in the tokens dropdown.\n */\n @State() ariaActivedescendant: string = '';\n /**\n * Stores the reference to the current word being typed.\n * This is used to update the event title with the selected token tag when\n * an option is selected from the dropdown by clicking on it.\n */\n @State() currentWord: {\n $value: string;\n fullText: string;\n index: number;\n focusOffset: number;\n } = { $value: '', fullText: '', index: -1, focusOffset: -1 };\n\n // Reference to the title div element\n private titleRef!: HTMLDivElement;\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-event-title', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('ariaActivedescendant')\n ariaActivedescendantChangedHandler(newValue: string) {\n debug('nylas-event-title', 'ariaActivedescendantChangedHandler', newValue);\n if (newValue !== '') {\n const activeOption = this.host.shadowRoot?.getElementById(newValue);\n activeOption?.classList.add('active');\n } else {\n const options = this.host.shadowRoot?.querySelectorAll('.token-options li.active');\n options?.forEach(option => option.classList.remove('active'));\n }\n }\n\n // Events\n /**\n * This event is fired when the value of the event title changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n // Lifecycle methods\n connectedCallback() {\n debug('nylas-event-title', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-title', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-event-title', 'componentDidLoad');\n this.updateEventTitleFromProp(this.eventTitle || '');\n }\n\n disconnectedCallback() {\n debug('nylas-event-title', 'disconnectedCallback');\n }\n\n updateEventTitleFromProp(newValue: string) {\n debug('nylas-event-title', 'eventTitleChangedHandler', newValue);\n\n this.titleRef.innerHTML = this.highlightTokens();\n this.titleRef.focus();\n }\n\n highlightTokens() {\n let outputHtml = this.eventTitle || '';\n\n eventTitleTokens.forEach(tokenObj => {\n const token = tokenObj.value;\n // Create a regular expression that matches the token as a whole word\n const regex = new RegExp(`(\\\\${token})(?!\\\\w)`, 'g');\n // Replace the token with a span element\n outputHtml = outputHtml.replace(regex, '<span class=\"highlighted-tag\">$1</span>');\n });\n return outputHtml;\n }\n\n getCurrentSelectionForBrowser() {\n const getSelectionTextData = (nodeValue, offset, node) => {\n // Remove zero-width space characters from the text, because they are not visible and cause issues with the selection\n const text = nodeValue.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n const dollarIndex = text.lastIndexOf('$');\n const lastWord = text.substring(dollarIndex).split(' ')[0];\n return {\n focusOffset: offset,\n dollarIndex,\n lastWord,\n currentText: text,\n node,\n };\n };\n\n const currentBrowser = getBrowser();\n console.log('currentBrowser', currentBrowser);\n switch (currentBrowser) {\n case 'Chrome':\n const shadowRootSelection = (this.host.shadowRoot as CustomShadowRoot)?.getSelection();\n const focusNode = shadowRootSelection?.focusNode;\n const focusNodeValue = focusNode?.nodeValue || '';\n return getSelectionTextData(focusNodeValue, shadowRootSelection?.focusOffset || -1, focusNode);\n case 'Firefox':\n const selection = document.getSelection();\n const anchorNodeValue = selection?.anchorNode?.nodeValue || '';\n return getSelectionTextData(anchorNodeValue, selection?.focusOffset || -1, selection?.anchorNode);\n case 'Safari':\n const windowSelection = window.getSelection();\n const anchorNode = (windowSelection as any)?.getComposedRanges(this.host.shadowRoot as CustomShadowRoot)[0];\n const currentText = anchorNode?.startContainer?.nodeValue || '';\n return getSelectionTextData(currentText, anchorNode?.endOffset || -1, anchorNode?.startContainer);\n default:\n console.warn('Browser not supported');\n return null;\n }\n }\n\n handleChange(event: Event) {\n const textContent = (event.target as HTMLDivElement).textContent || '';\n // All browsers handle Selection within Shadow DOM differently, so get the current selection based on the browser\n const currentSelection = this.getCurrentSelectionForBrowser();\n if (!currentSelection) {\n this.updateEventTitle(textContent);\n this.resetDropdown();\n return;\n }\n const { focusOffset, dollarIndex, lastWord, currentText } = currentSelection;\n\n if (dollarIndex === -1 || focusOffset < dollarIndex) {\n this.updateEventTitle(textContent);\n this.resetDropdown();\n return;\n }\n if (lastWord.startsWith('$')) {\n this.showTokens = true;\n // Update the current word being typed, we need this reference to update the event title with the selected token\n // because the user can select an option from the dropdown by clicking on it, which will not trigger the input event.\n this.currentWord = {\n $value: lastWord,\n fullText: currentText,\n index: dollarIndex,\n focusOffset,\n };\n this.populateSuggestionsDropdown(lastWord);\n } else {\n this.resetDropdown();\n }\n this.updateEventTitle(textContent);\n }\n\n handleInputKeyDown(event) {\n if (event.key === 'Enter') {\n event.preventDefault();\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n activeOption.click();\n this.ariaActivedescendant = '';\n }\n } else if (event.key === 'ArrowDown') {\n event.preventDefault();\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n const nextOption = activeOption.nextElementSibling;\n if (nextOption) {\n this.ariaActivedescendant = nextOption.id;\n } else {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n } else {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n const prevOption = activeOption.previousElementSibling;\n if (prevOption) {\n this.ariaActivedescendant = prevOption.id;\n } else {\n this.ariaActivedescendant = this.filteredTokens[this.filteredTokens.length - 1].label;\n }\n } else {\n this.ariaActivedescendant = this.filteredTokens[this.filteredTokens.length - 1].label;\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.resetDropdown();\n } else if (event.key === 'Backspace' || event.key === 'Delete') {\n const selection = this.getCurrentSelectionForBrowser();\n if (selection?.currentText.startsWith('${')) {\n selection?.node?.parentNode && selection.node.parentNode.removeChild(selection.node);\n }\n }\n }\n\n selectOption(e: Event, option: { label: string; value: string; labelHTML: Token }) {\n e.preventDefault();\n const word = this.currentWord.fullText;\n const dollarWord = this.currentWord.$value;\n\n // Traverse the DOM to find the text node that contains the current word fullText\n let currentNode = this.titleRef.firstChild;\n let textNode: ChildNode | null = null;\n\n while (currentNode) {\n if (currentNode.nodeType === 3) {\n const currentNodeText = currentNode.textContent?.replace(/[\\u200B-\\u200D\\uFEFF]/g, '') || '';\n const wordText = word.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n if (currentNodeText.includes(wordText)) {\n textNode = currentNode;\n break;\n }\n }\n currentNode = currentNode.nextSibling;\n }\n\n if (!textNode) {\n return;\n }\n // Split the text node into three parts: text before the token, the token, and text after the token\n const text = textNode.textContent || '';\n const index = text.indexOf(dollarWord);\n const textBefore = text.substring(0, index);\n const textAfter = text.substring(index + dollarWord.length);\n const newTextNode = document.createTextNode(textBefore);\n const newRange = document.createRange();\n\n // Create a new span element to replace the text node\n const tagSpan = document.createElement('span');\n tagSpan.classList.add('highlighted-tag');\n tagSpan.textContent = `${option.value}`;\n const newTextNodeAfter = document.createTextNode(textAfter);\n\n if (textAfter !== '') {\n // If there is text after the token, add it to the new span element\n textNode.replaceWith(newTextNode, tagSpan, newTextNodeAfter);\n newRange.setStart(newTextNodeAfter, 0);\n } else {\n // If there is no text after the token, add a zero-width space character (Without this, the cursor will not move outside the highlighted span element)\n const afterNode = document.createTextNode('\\u200B');\n textNode.replaceWith(newTextNode, tagSpan, afterNode);\n newRange.setStart(afterNode, 0);\n }\n\n // Hide the dropdown\n this.resetDropdown();\n this.titleRef.focus();\n\n // Set the focus to the new span element\n const sel = window.getSelection();\n newRange.collapse(true);\n sel?.removeAllRanges();\n sel?.addRange(newRange);\n\n // Update the event title with the selected token\n this.updateEventTitle(this.titleRef.textContent || '');\n }\n\n populateSuggestionsDropdown(query: string = '') {\n this.filteredTokens = this.availableTokens.filter(obj => {\n return obj.label.startsWith(query.toString()) || obj.value.startsWith(query.toString());\n });\n\n // Set the first option as the active descendant\n if (this.filteredTokens.length > 0) {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n }\n\n updateEventTitle(text: string) {\n const value = text.replace(/ +/g, ' ');\n this.valueChanged.emit({ value: value, name: this.name });\n }\n\n resetDropdown() {\n this.showTokens = false;\n this.ariaActivedescendant = '';\n }\n\n getLabelHTML(token: { token: string; description: string }) {\n return (\n <div class=\"token-label\">\n <span class=\"token\">{token.token}</span>\n <span class=\"description\">{token.description}</span>\n </div>\n );\n }\n\n @RegisterComponent<NylasEventTitle, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-title',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-event-title\" part=\"net\">\n <label htmlFor=\"title\">\n Event title<span class=\"required\">*</span>\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">Enter a title for your event.</span>\n </tooltip-component>\n </span>\n </label>\n <div\n class=\"title\"\n part=\"net__title\"\n ref={el => (this.titleRef = el as HTMLDivElement)}\n contentEditable=\"true\"\n onInput={e => this.handleChange(e)}\n onKeyDown={event => this.handleInputKeyDown(event)}\n ></div>\n {this.showTokens && this.filteredTokens?.length > 0 && (\n <div class=\"token-options\" part=\"net__dropdown-content\">\n <ul tabindex=\"-1\" role=\"listbox\" aria-label={this.name} aria-activedescendant={this.ariaActivedescendant}>\n {this.filteredTokens.map(option => (\n <li\n tabindex=\"0\"\n key={option.label}\n id={option.label}\n class={{ active: this.ariaActivedescendant === option.label }}\n onClick={e => this.selectOption(e, option)}\n role=\"option\"\n >\n {this.getLabelHTML(option.labelHTML)}\n </li>\n ))}\n </ul>\n </div>\n )}\n <span class=\"help-text\">Create a dynamic templated event title by typing $. Learn more</span>\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n @include default-css-variables;\n}\n\n.nylas-limit-future-bookings {\n display: flex;\n justify-content: space-between;\n font-family: var(--nylas-font-family);\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, State, h, Element, Prop, Watch, Event, EventEmitter, Listen } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-limit-future-bookings` component is a form input for the description of an event.\n * @part nlfb - The limit future bookings container\n * @part nlfb__number-dropdown - The number dropdown container\n * @part nlfb__number-dropdown-button - The number dropdown button\n * @part nlfb__number-dropdown-content - The number dropdown content\n * @part nlfb__period-dropdown - The period dropdown container\n * @part nlfb__period-dropdown-button - The period dropdown button\n * @part nlfb__period-dropdown-content - The period dropdown content\n */\n@Component({\n tag: 'nylas-limit-future-bookings',\n styleUrl: 'nylas-limit-future-bookings.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasLimitFutureBookings {\n @Prop() availableDaysInFuture?: number;\n @AttachInternals() internals!: ElementInternals;\n @Element() host!: HTMLElement;\n @Prop() name: string = 'limit-future-bookings';\n\n @State() selectedNumber: number = 1;\n @State() selectedPeriod: string = 'day';\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-limit-future-bookings', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('availableDaysInFuture')\n availableDaysInFutureChanged(newValue: number) {\n const { number, period } = this.calculateNumberAndPeriodFromDays(newValue);\n this.selectedNumber = number;\n this.selectedPeriod = period;\n }\n\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-limit-future-bookings', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-limit-future-bookings', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-limit-future-bookings', 'componentDidLoad');\n this.availableDaysInFutureChanged(this.availableDaysInFuture ?? 1);\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n this.internals.setFormValue(this.availableDaysInFuture?.toString() ?? '1', this.name);\n }\n\n disconnectedCallback() {\n debug('nylas-limit-future-bookings', 'disconnectedCallback');\n }\n\n @Listen('timePeriodChanged')\n timePeriodChangedHandler(\n event: CustomEvent<{\n number: number;\n period: string;\n }>,\n ) {\n const { number, period } = event.detail;\n let availableDaysInFuture;\n if (period === 'day') {\n availableDaysInFuture = number;\n } else if (period === 'week') {\n availableDaysInFuture = number * 7;\n } else {\n availableDaysInFuture = number * 30;\n }\n this.valueChanged.emit({ value: availableDaysInFuture, name: this.name });\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n this.internals.setFormValue(availableDaysInFuture.toString(), this.name);\n }\n\n calculateNumberAndPeriodFromDays(days: number): { number: number; period: string } {\n if (days >= 30 && days % 30 === 0) {\n return { number: days / 30, period: 'month' };\n } else if (days >= 7 && days % 7 === 0) {\n return { number: days / 7, period: 'week' };\n } else {\n return { number: days, period: 'day' };\n }\n }\n\n @RegisterComponent<NylasLimitFutureBookings, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-limit-future-bookings',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-limit-future-bookings\" part=\"nlfb\">\n <label>\n Limit future bookings\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">Set a limit on how far in the future bookings can be made.</span>\n </tooltip-component>\n </span>\n </label>\n <time-period-selector\n id=\"limit-future-bookings\"\n timePeriods={['day', 'week', 'month']}\n exportparts=\"tps__number-dropdown: nlfb__number-dropdown, tps__number-dropdown-button: nlfb__number-dropdown-button, tps__number-dropdown-content: nlfb__number-dropdown-content, tps__period-dropdown: nlfb__period-dropdown, tps__period-dropdown-button: nlfb__period-dropdown-button, tps__period-dropdown-content: nlfb__period-dropdown-content\"\n defaultSelectedNumber={this.selectedNumber}\n defaultSelectedPeriod={this.selectedPeriod}\n />\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n @include default-css-variables;\n}\n\n.nylas-event-location {\n display: flex;\n flex-direction: column;\n gap: 4px;\n font-family: var(--nylas-font-family);\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-nylas-base-800);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n\n span[slot='select-icon'] {\n border-right: 1px solid var(--nylas-base-200);\n padding: 16px 0.75rem 16px 0.5rem;\n border-radius: var(--nylas-border-radius-2x);\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n height: 20px;\n }\n div.location-input {\n display: grid;\n grid-template-columns: auto 1fr;\n width: 100%;\n gap: 0.5rem;\n input {\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 12px 16px;\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n }\n select-dropdown {\n width: 208px;\n @media #{$mobile} {\n width: 100%;\n }\n }\n select-dropdown::part(sd_dropdown) {\n width: 100%;\n }\n select-dropdown::part(sd_dropdown-content) {\n left: calc(35px + 0.5rem);\n }\n select-dropdown::part(sd_dropdown-button) {\n display: flex;\n justify-content: space-between;\n width: 100%;\n border: 1px solid var(--nylas-base-200);\n padding: 0 0.5rem;\n }\n select-dropdown::part(sd_dropdown-button-selected-label) {\n display: inline-flex;\n align-self: center;\n padding: 14px 0;\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, State, h, Element, Prop, Watch, Event, EventEmitter, Listen } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-location-component` component is a form input for the description of an event.\n * @part nel - The event location container\n * @part nel__location - The event location input\n * @part nel__dropdown - The dropdown container\n * @part nel__dropdown-button - The dropdown button\n * @part nel__dropdown-content - The dropdown content\n */\n@Component({\n tag: 'nylas-location-component',\n styleUrl: 'nylas-location-component.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasLocationComponent {\n @Prop() eventLocation?: string;\n @State() location: string = this.eventLocation ?? '';\n @State() selectedLocationOption: string = this.eventLocation ? 'custom' : 'none';\n @AttachInternals() internals!: ElementInternals;\n @Element() host!: HTMLElement;\n @Prop() name: string = 'location';\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-location-component', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n @Watch('eventLocation')\n eventLocationChangedHandler(newValue: string, oldValue: string) {\n debug('nylas-location-component', 'eventLocationChangedHandler', newValue);\n if (newValue === oldValue) {\n return;\n }\n this.selectedLocationOption = newValue ? 'custom' : 'none';\n }\n\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-location-component', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-location-component', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-location-component', 'componentDidLoad');\n }\n\n disconnectedCallback() {\n debug('nylas-location-component', 'disconnectedCallback');\n }\n\n @Listen('selectedOptionChanged')\n selectedOptionChangedHandler(event: CustomEvent<{ value: string }>) {\n this.selectedLocationOption = event.detail.value;\n if (this.selectedLocationOption === 'none') {\n this.location = '';\n this.setFormValue('', 'location');\n this.valueChanged.emit({ value: '', name: this.name });\n }\n }\n\n setFormValue(value: string, name: string) {\n if (typeof this.internals.setFormValue === 'function') {\n this.internals.setFormValue(value, name);\n }\n }\n\n handleChange(event) {\n this.location = event.target.value;\n this.setFormValue(event.target.value, 'location');\n this.valueChanged.emit({ value: event.target.value, name: this.name });\n }\n\n @RegisterComponent<NylasLocationComponent, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-location-component',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n const locationOptions = [\n { value: 'none', label: 'None' },\n { value: 'custom', label: 'Custom location' },\n ];\n const icons = {\n none: <location-off-icon />,\n custom: <location-icon />,\n };\n\n return (\n <Host>\n <div class=\"nylas-event-location\" part=\"nel\">\n <label htmlFor=\"location\">\n Location type\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n Choose how you’ll meet with the participants at the scheduled time. Pick from available conferencing options or add a custom location.\n </span>\n </tooltip-component>\n </span>\n </label>\n <div class=\"location-input\">\n <select-dropdown\n withSearch={false}\n name=\"location\"\n options={locationOptions}\n defaultSelectedOption={locationOptions.find(i => i.value == this.selectedLocationOption)}\n exportparts=\"sd__dropdown: nel__dropdown, sd__dropdown-button: nel__dropdown-button, sd__dropdown-content: nel__dropdown-content\"\n >\n <span slot=\"select-icon\">{icons[this.selectedLocationOption]}</span>\n </select-dropdown>\n {this.selectedLocationOption === 'custom' && (\n <input type=\"text\" part=\"nel__location\" id=\"location\" name=\"location\" maxlength=\"1024\" value={this.location} onInput={e => this.handleChange(e)} />\n )}\n </div>\n </div>\n </Host>\n );\n }\n}\n","@import '../../../common/styles/variables.scss';\n\n:host {\n @include default-css-variables;\n}\n\n.nylas-min-cancellation-notice {\n display: flex;\n justify-content: space-between;\n font-family: var(--nylas-font-family);\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, State, h, Element, Prop, Watch, Event, EventEmitter, Listen } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\n\n/**\n * The `nylas-min-cancellation-notice` component is a form input for the description of an event.\n * @part nmcn - The minimum cancellation notice container\n * @part nmcn__number-dropdown - The number dropdown container\n * @part nmcn__number-dropdown-button - The number dropdown button\n * @part nmcn__number-dropdown-content - The number dropdown content\n * @part nmcn__period-dropdown - The period dropdown container\n * @part nmcn__period-dropdown-button - The period dropdown button\n * @part nmcn__period-dropdown-content - The period dropdown content\n */\n@Component({\n tag: 'nylas-min-cancellation-notice',\n styleUrl: 'nylas-min-cancellation-notice.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasMinCancellationNotice {\n @Prop() minCancellationNotice?: number;\n @AttachInternals() internals!: ElementInternals;\n @Element() host!: HTMLElement;\n @Prop() name: string = 'min-cancellation-notice';\n\n @State() selectedNumber: number = 1;\n @State() selectedPeriod: string = 'day';\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-min-cancellation-notice', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('availableDaysInFuture')\n availableDaysInFutureChanged(newValue: number) {\n const { number, period } = this.calculateNumberAndPeriodFromMinutes(newValue);\n this.selectedNumber = number;\n this.selectedPeriod = period;\n }\n\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-min-cancellation-notice', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-min-cancellation-notice', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-min-cancellation-notice', 'componentDidLoad');\n this.availableDaysInFutureChanged(this.minCancellationNotice ?? 1);\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n this.internals.setFormValue(this.minCancellationNotice?.toString() ?? '1', this.name);\n }\n\n disconnectedCallback() {\n debug('nylas-min-cancellation-notice', 'disconnectedCallback');\n }\n\n @Listen('timePeriodChanged')\n timePeriodChangedHandler(\n event: CustomEvent<{\n number: number;\n period: string;\n }>,\n ) {\n const { number, period } = event.detail;\n let totalMinutes;\n const minutesInHour = 60;\n const minutesInDay = minutesInHour * 24;\n const minutesInWeek = minutesInDay * 7;\n const minutesInMonth = minutesInDay * 30; // Assuming 30 days in a month for simplification\n\n if (period === 'minute') {\n totalMinutes = number;\n } else if (period === 'hour') {\n totalMinutes = number * minutesInHour;\n } else if (period === 'day') {\n totalMinutes = number * minutesInDay;\n } else if (period === 'week') {\n totalMinutes = number * minutesInWeek;\n } else if (period === 'month') {\n totalMinutes = number * minutesInMonth;\n } else {\n totalMinutes = 0;\n }\n this.valueChanged.emit({ value: totalMinutes, name: this.name });\n if (typeof this.internals.setFormValue !== 'function') {\n return;\n }\n this.internals.setFormValue(totalMinutes.toString(), this.name);\n }\n\n private calculateNumberAndPeriodFromMinutes(minutes: number): { number: number; period: string } {\n const minutesInHour = 60;\n const minutesInDay = minutesInHour * 24;\n const minutesInWeek = minutesInDay * 7;\n const minutesInMonth = minutesInDay * 30; // Assuming 30 days in a month for simplification\n\n if (minutes >= minutesInMonth) {\n return { number: Math.floor(minutes / minutesInMonth), period: 'month' };\n } else if (minutes >= minutesInWeek) {\n return { number: Math.floor(minutes / minutesInWeek), period: 'week' };\n } else if (minutes >= minutesInDay) {\n return { number: Math.floor(minutes / minutesInDay), period: 'day' };\n } else if (minutes >= minutesInHour) {\n return { number: Math.floor(minutes / minutesInHour), period: 'hour' };\n } else {\n return { number: minutes, period: 'minute' };\n }\n }\n\n @RegisterComponent<NylasMinCancellationNotice, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-min-cancellation-notice',\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-min-cancellation-notice\" part=\"nmcn\">\n <label>\n Minimum cancellation notice\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">Set the minimum amount of time required to cancel an event.</span>\n </tooltip-component>\n </span>\n </label>\n <time-period-selector\n id=\"min-cancellation-notice\"\n exportparts=\"tps__number-dropdown: nmcn__number-dropdown, tps__number-dropdown-button: nmcn__number-dropdown-button, tps__number-dropdown-content: nmcn__number-dropdown-content, tps__period-dropdown: nmcn__period-dropdown, tps__period-dropdown-button: nmcn__period-dropdown-button, tps__period-dropdown-content: nmcn__period-dropdown-content\"\n timePeriods={['minute', 'hour', 'day', 'week']}\n defaultSelectedNumber={this.selectedNumber}\n defaultSelectedPeriod={this.selectedPeriod}\n />\n </div>\n </Host>\n );\n }\n}\n","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","@import '../../../common/styles/variables.scss';\n:host {\n display: block;\n position: relative;\n @include default-css-variables;\n}\n\n.time-picker {\n display: inline-block;\n width: 150px;\n font-family: var(--nylas-font-family);\n @media #{$mobile} {\n width: auto;\n }\n position: relative;\n input {\n width: 150px;\n height: 48px;\n text-align: center;\n font-size: 16px;\n font-family: inherit;\n @media #{$mobile} {\n width: 88px;\n }\n @media #{$small-mobile} {\n width: 68px;\n font-size: 15px;\n }\n cursor: pointer;\n background: transparent;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n &.focus {\n background: transparent;\n }\n &:hover,\n &:active {\n border: 1px solid var(--nylas-primary);\n }\n &:active {\n outline: 2px solid var(--nylas-primary);\n }\n span {\n &.open {\n transform: rotate(90deg);\n }\n &.closed {\n transform: rotate(270deg);\n }\n }\n &.error {\n border: 1px solid var(--nylas-error);\n }\n }\n p.error {\n color: var(--nylas-error);\n font-size: 0.875rem;\n margin: 0;\n }\n}\n.times {\n display: block;\n margin-top: 0.5rem;\n background-color: var(--nylas-base-0);\n width: 100%;\n max-height: 336px;\n overflow: auto;\n border: 1px solid #ddd;\n z-index: 1;\n border-radius: 4px;\n position: absolute;\n box-shadow: 0px 4px 6px -2px #0000000d;\n box-shadow: 0px 10px 15px -3px #0000001a;\n ul {\n padding: 0;\n list-style-type: none;\n color: var(--nylas-base-900);\n max-height: 336px;\n li {\n padding: 16px, 12px, 16px, 12px;\n color: black;\n padding: 12px 16px;\n text-decoration: none;\n display: block;\n font-family: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0px;\n text-align: center;\n cursor: pointer;\n &.focused {\n background-color: var(--nylas-base-100);\n }\n &:hover,\n &:focus {\n background-color: var(--nylas-base-100);\n }\n label {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n input {\n margin: 0;\n }\n }\n }\n }\n}\n","import { autocompleteTimeFormat, roundToNearest15Minutes, validateExactTimeFormat, validateTimeFormatInput } from '@/utils/utils';\nimport { Component, h, State, Prop, Event, EventEmitter, Listen, Element, Host, Watch } from '@stencil/core';\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\ndayjs.extend(customParseFormat);\n\ntype Time = { id: number; value: string };\n\n/**\n * The `nylas-time-window-picker` component is a time picker that can be used to select a time.\n * @part time-picker - The time picker container\n * @part time-input - The time input\n * @part times - The list of times\n */\n@Component({\n tag: 'nylas-time-window-picker',\n styleUrl: 'nylas-time-window-picker.scss',\n shadow: true,\n})\nexport class TimeInput {\n @Element() el!: HTMLElement;\n private timeInput!: HTMLInputElement;\n private timeMenu!: HTMLElement;\n\n /**\n * The time to display in the input.\n * This is passed by the parent component and can be updated\n * using the setTime prop function provided by the parent component.\n */\n @Prop() time!: string;\n /**\n * This is the start time value if one is set by the parent component.\n * It is useful if this component is used to render an end time which\n * should not be before the start time, defining the earliest selectable time.\n */\n @Prop() minimumStartTime: string | null = null;\n\n /**\n * The placeholder text for the input.\n */\n @Prop() placeholder: string = 'hh:mmam/pm';\n /**\n * The function to set the time in the parent component.\n */\n @Prop() setTime!: Function;\n /**\n * The name of the input.\n */\n @Prop() name!: string;\n /**\n * This sets the error state of the input.\n */\n @Prop() hasError: boolean = false;\n /**\n * The function to set the form error in the parent component.\n * This is useful if the parent component wants to display an\n * error message or set form validity.\n */\n @Prop() setFormError!: Function;\n\n /**\n * The error message to display if the time is invalid.\n */\n @State() err: string = '';\n /**\n * Toggle to show the list of times.\n */\n @State() showTimes: boolean = false;\n /**\n * The aria-activedescendant attribute for the listbox element to indicate the currently active\n * option in the list box to screen readers. The value of aria-activedescendant is the ID of\n * the active option.\n */\n @State() ariaActivedescendant: string = '';\n @State() times: Time[] = this.generateTimes();\n @State() shouldAutoScroll: boolean = false;\n\n @Event() timeChange!: EventEmitter<string>;\n\n // Event listeners\n @Listen('click', { target: 'document' })\n handleOutsideClick(event: MouseEvent) {\n // Get the path of the event\n const path = event.composedPath();\n\n // Check if the path includes the host element\n const isClickInside = path.includes(this.el);\n\n if (!isClickInside && this.showTimes) {\n this.showTimes = false;\n }\n }\n\n @Watch('minimumStartTime')\n minimumStartTimeChangedHandler() {\n if (this.minimumStartTime) {\n let formattedTime = dayjs()\n .hour(parseInt(this.minimumStartTime))\n .minute(parseInt(this.minimumStartTime.slice(-4, -2)));\n if (this.minimumStartTime.slice(-2).toLowerCase() === 'pm' && parseInt(this.minimumStartTime) !== 12) {\n formattedTime = formattedTime.add(12, 'hour');\n } else if (this.minimumStartTime.slice(-2).toLowerCase() === 'am' && parseInt(this.minimumStartTime) === 12) {\n formattedTime = formattedTime.subtract(12, 'hour');\n }\n\n this.times = this.generateTimes();\n const firstTime = dayjs(this.times[0].value, 'hh:mma');\n let selectedTimeFormatted = dayjs(this.time, 'hh:mma');\n if (selectedTimeFormatted.isBefore(firstTime)) {\n this.err = 'Invalid';\n this.setFormError(null, 'Invalid');\n }\n }\n }\n\n componentDidRender() {\n if (this.showTimes && this.shouldAutoScroll) {\n const autocompletedTime = autocompleteTimeFormat(this.time);\n const optionIndex = this.times.findIndex(time => time.value === autocompletedTime);\n if (optionIndex > -1) {\n this.shouldAutoScroll = false;\n this.scrollToViewWithinParent(optionIndex);\n }\n return;\n }\n }\n\n private handleTimeChange(e: Event, input: string) {\n const timePart = input.split(':');\n if (timePart[0] === '00' && timePart[1].slice(-2) == 'pm') {\n this.err = 'Invalid';\n this.setFormError(e, 'Invalid');\n }\n if (!validateTimeFormatInput(input)) {\n this.err = 'Invalid';\n this.setFormError(e, 'Invalid');\n } else {\n this.err = '';\n this.setFormError(null);\n }\n this.setTime(e, input);\n this.timeChange.emit(input);\n }\n\n private handleTimeAutocomplete(event: Event) {\n const input = (event.target as HTMLInputElement)?.value;\n if (!validateTimeFormatInput(input)) {\n this.err = 'Invalid';\n this.setFormError(event, 'Invalid');\n return;\n }\n if (input === '') {\n const newTime = roundToNearest15Minutes().format('hh:mma');\n this.setTime(event, newTime);\n return;\n }\n if (!validateExactTimeFormat(input)) {\n const autocompletedTime = autocompleteTimeFormat(input);\n this.setTime(autocompletedTime);\n return;\n }\n this.setTime(event, input);\n }\n\n private handleOnInput(event: Event) {\n const input = (event.target as HTMLInputElement)?.value;\n if (!validateTimeFormatInput(input)) {\n return;\n }\n if (input === '') {\n const newTime = roundToNearest15Minutes().format('hh:mma');\n const optionIndex = this.times.findIndex(time => time.value === newTime);\n if (optionIndex > -1) {\n this.scrollToViewWithinParent(optionIndex);\n }\n return;\n }\n if (!validateExactTimeFormat(input)) {\n const autocompletedTime = autocompleteTimeFormat(input);\n const optionIndex = this.times.findIndex(time => time.value === autocompletedTime);\n if (optionIndex > -1) {\n this.scrollToViewWithinParent(optionIndex);\n }\n return;\n }\n }\n\n private generateTimes() {\n const times: Time[] = [];\n let startTime = dayjs().set('hour', 0).set('minute', 0).set('second', 0); // Set to 12:00 am\n if (this.minimumStartTime) {\n startTime = dayjs(this.minimumStartTime, 'hh:mma');\n }\n const diff = startTime.endOf('day').diff(startTime, 'minutes');\n const iterations = Math.round(diff / 15);\n for (let i = 0; i < iterations + 1; i++) {\n // 96 represents the total number of 15-minute increments in a day (24 hours * 60 minutes / 15 minutes)\n const time = startTime.add(i * 15, 'minute');\n if (i == iterations && time.format('hh:mma').includes('am')) {\n break;\n }\n times.push({ id: i, value: time.format('hh:mma') });\n }\n return times;\n }\n\n private handleComboboxKeyDown(event: KeyboardEvent): void {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!this.showTimes) {\n this.showTimes = true;\n this.shouldAutoScroll = true;\n return;\n }\n if (this.ariaActivedescendant === '') {\n this.ariaActivedescendant = this.times[0].id.toString();\n this.focusOption(0);\n } else {\n const currentIndex = this.times.findIndex(time => time.id.toString() === this.ariaActivedescendant);\n const nextIndex = currentIndex + 1 < this.times.length ? currentIndex + 1 : 0;\n this.ariaActivedescendant = this.times[nextIndex].id.toString();\n this.focusOption(nextIndex);\n }\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n if (this.ariaActivedescendant === '') {\n this.ariaActivedescendant = this.times[this.times.length - 1].id.toString();\n this.focusOption(this.times.length - 1);\n } else {\n const currentIndex = this.times.findIndex(time => time.id.toString() === this.ariaActivedescendant);\n const prevIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : this.times.length - 1;\n this.ariaActivedescendant = this.times[prevIndex].id.toString();\n this.focusOption(prevIndex);\n }\n } else if (event.key === 'Escape') {\n this.showTimes = false;\n this.timeInput.focus();\n }\n }\n\n private handleListboxKeydown(e: KeyboardEvent) {\n const items = this.times;\n const currentIndex = items.findIndex(item => item.id.toString() === this.ariaActivedescendant);\n\n if (e.key === 'ArrowDown' || (e.key === 'Tab' && !e.shiftKey)) {\n e.preventDefault();\n const nextIndex = currentIndex + 1 < items.length ? currentIndex + 1 : 0;\n this.ariaActivedescendant = items[nextIndex].id.toString();\n this.focusOption(nextIndex);\n } else if (e.key === 'ArrowUp' || (e.key === 'Tab' && e.shiftKey)) {\n e.preventDefault();\n const prevIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : items.length - 1;\n this.ariaActivedescendant = items[prevIndex].id.toString();\n this.focusOption(prevIndex);\n } else if (e.key === 'Enter') {\n e.preventDefault();\n if (this.ariaActivedescendant) {\n const option = items[currentIndex];\n this.handleTimeChange(e, option.value);\n this.showTimes = false;\n this.ariaActivedescendant = '';\n this.timeInput.focus();\n }\n } else if (e.key === 'Escape') {\n this.showTimes = false;\n this.timeInput.focus();\n }\n }\n\n scrollToViewWithinParent(optionIndex: number) {\n const option = this.times[optionIndex];\n const childElement = this.el.shadowRoot?.getElementById(option.id.toString()) as HTMLLIElement;\n const parentElement = this.timeMenu;\n\n this.ariaActivedescendant = option.id.toString();\n\n // Scroll child into view within parent\n const childRect = childElement.getBoundingClientRect();\n const parentRect = parentElement.getBoundingClientRect();\n\n if (childRect.top < parentRect.top) {\n // Child is above the visible area of the parent\n parentElement.scrollTop -= parentRect.top - childRect.top;\n } else if (childRect.bottom > parentRect.bottom) {\n // Child is below the visible area of the parent\n parentElement.scrollTop += childRect.bottom - parentRect.bottom;\n }\n\n if (childRect.left < parentRect.left) {\n // Child is to the left of the visible area of the parent\n parentElement.scrollLeft -= parentRect.left - childRect.left;\n } else if (childRect.right > parentRect.right) {\n // Child is to the right of the visible area of the parent\n parentElement.scrollLeft += childRect.right - parentRect.right;\n }\n }\n\n focusOption(index: number) {\n const option = this.times[index];\n if (!option) return; // Guard clause in case index is out of bounds\n\n const elementId = option.id.toString();\n const element = this.el.shadowRoot?.getElementById(elementId) as HTMLLIElement;\n\n if (element) {\n element.focus(); // Set focus on the element\n element.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }\n\n render() {\n return (\n <Host>\n <div class=\"time-picker\" part=\"time-picker\">\n <input\n type=\"text\"\n name={this.name}\n id={this.name}\n part=\"time-input\"\n class={{\n 'time-input': true,\n 'error': !!this.err || this.hasError,\n }}\n ref={el => (this.timeInput = el as HTMLInputElement)}\n value={this.time}\n onClick={() => {\n this.showTimes = true;\n this.shouldAutoScroll = true;\n }}\n aria-haspopup=\"listbox\"\n aria-label={this.name}\n aria-expanded={this.showTimes ? 'true' : 'false'}\n placeholder={this.placeholder}\n onKeyDown={e => this.handleComboboxKeyDown(e)}\n onInput={event => this.handleOnInput(event)}\n onBlur={event => this.handleTimeAutocomplete(event)}\n />\n {this.err && <div class=\"invalid-time-icon\">{/* Icon here */}</div>}\n {this.showTimes && (\n <div class=\"times\" part=\"times\" ref={el => (this.timeMenu = el as HTMLElement)}>\n <ul tabindex=\"-1\" role=\"listbox\" aria-label={this.name} aria-activedescendant={this.ariaActivedescendant} onKeyDown={e => this.handleListboxKeydown(e)}>\n {this.times.map(option => (\n <li\n tabindex=\"0\"\n key={option.id}\n id={option.id.toString()}\n class={{\n focused: this.ariaActivedescendant === option.id.toString(),\n }}\n onClick={e => {\n this.handleTimeChange(e, option.value);\n this.showTimes = false;\n this.timeInput.focus();\n }}\n role=\"option\"\n >\n {`${option.value}`}\n </li>\n ))}\n </ul>\n </div>\n )}\n {!this.showTimes && this.err && (\n <p class=\"error\" id=\"email-error\">\n {this.err}\n </p>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}