@nylas/web-elements 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/cdn/nylas-scheduler-editor/nylas-scheduler-editor.es.js +191 -95
  2. package/dist/cdn/nylas-scheduling/nylas-scheduling.es.js +10418 -10260
  3. package/dist/cjs/{abstract-provider-ca4f7e4f.js → abstract-provider-f84a6735.js} +2 -2
  4. package/dist/cjs/{abstract-provider-ca4f7e4f.js.map → abstract-provider-f84a6735.js.map} +1 -1
  5. package/dist/cjs/app-globals-ee500b74.js.map +1 -1
  6. package/dist/cjs/calendar-agenda-fill-icon_36.cjs.entry.js +36 -21
  7. package/dist/cjs/calendar-agenda-fill-icon_36.cjs.entry.js.map +1 -1
  8. package/dist/cjs/{calendar-check-icon_2.cjs.entry.js → calendar-check-icon.cjs.entry.js} +3 -19
  9. package/dist/cjs/calendar-check-icon.cjs.entry.js.map +1 -0
  10. package/dist/cjs/checkbox-component_2.cjs.entry.js +1 -1
  11. package/dist/cjs/checkbox-group_4.cjs.entry.js +3 -3
  12. package/dist/cjs/checkmark-circle-icon.cjs.entry.js +24 -0
  13. package/dist/cjs/checkmark-circle-icon.cjs.entry.js.map +1 -0
  14. package/dist/cjs/checkmark-icon_15.cjs.entry.js +11 -7
  15. package/dist/cjs/checkmark-icon_15.cjs.entry.js.map +1 -1
  16. package/dist/cjs/{customParseFormat-bb3a23c5.js → customParseFormat-95790293.js} +2 -2
  17. package/dist/cjs/{customParseFormat-bb3a23c5.js.map → customParseFormat-95790293.js.map} +1 -1
  18. package/dist/cjs/{feedbackSync-1c5ec9aa.js → feedbackSync-4ed99749.js} +2 -2
  19. package/dist/cjs/{feedbackSync-1c5ec9aa.js.map → feedbackSync-4ed99749.js.map} +1 -1
  20. package/dist/cjs/globe-icon_2.cjs.entry.js +2 -2
  21. package/dist/cjs/google-logo-icon_6.cjs.entry.js +8 -8
  22. package/dist/cjs/index-e07e3a7e.js +6 -2
  23. package/dist/cjs/index.cjs.js +2 -2
  24. package/dist/cjs/{index.es-c563f3ba.js → index.es-62161daa.js} +2 -2
  25. package/dist/cjs/{index.es-c563f3ba.js.map → index.es-62161daa.js.map} +1 -1
  26. package/dist/cjs/input-component.cjs.entry.js +1 -1
  27. package/dist/cjs/input-dropdown_2.cjs.entry.js +1 -1
  28. package/dist/cjs/loader.cjs.js +1 -1
  29. package/dist/cjs/multi-select-dropdown.cjs.entry.js +1 -1
  30. package/dist/cjs/{nylas-api-request-4d148ff1.js → nylas-api-request-03d7f604.js} +2 -2
  31. package/dist/cjs/{nylas-api-request-4d148ff1.js.map → nylas-api-request-03d7f604.js.map} +1 -1
  32. package/dist/cjs/nylas-booked-event-card_11.cjs.entry.js +82 -25
  33. package/dist/cjs/nylas-booked-event-card_11.cjs.entry.js.map +1 -1
  34. package/dist/cjs/nylas-form-card.cjs.entry.js +2 -2
  35. package/dist/cjs/nylas-notification_2.cjs.entry.js +1 -1
  36. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +6 -6
  37. package/dist/cjs/nylas-scheduling.cjs.entry.js +42 -14
  38. package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
  39. package/dist/cjs/nylas-web-elements.cjs.js +1 -1
  40. package/dist/cjs/{register-component-70744713.js → register-component-f4ad9751.js} +2 -2
  41. package/dist/cjs/{register-component-70744713.js.map → register-component-f4ad9751.js.map} +1 -1
  42. package/dist/cjs/textarea-component.cjs.entry.js +1 -1
  43. package/dist/cjs/{utils-dd3b6f4c.js → utils-03b13826.js} +154 -55
  44. package/dist/cjs/utils-03b13826.js.map +1 -0
  45. package/dist/collection/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.js +11 -3
  46. package/dist/collection/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.js.map +1 -1
  47. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js +49 -4
  48. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js.map +1 -1
  49. package/dist/collection/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.js +3 -3
  50. package/dist/collection/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.js.map +1 -1
  51. package/dist/collection/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.js +37 -1
  52. package/dist/collection/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.js.map +1 -1
  53. package/dist/collection/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.js +34 -2
  54. package/dist/collection/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.js.map +1 -1
  55. package/dist/collection/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.css +1 -1
  56. package/dist/collection/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.js +34 -1
  57. package/dist/collection/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.js.map +1 -1
  58. package/dist/collection/components/scheduler/nylas-date-picker/nylas-date-picker.js +10 -4
  59. package/dist/collection/components/scheduler/nylas-date-picker/nylas-date-picker.js.map +1 -1
  60. package/dist/collection/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.js +10 -2
  61. package/dist/collection/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.js.map +1 -1
  62. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.css +13 -0
  63. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js +66 -7
  64. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js.map +1 -1
  65. package/dist/collection/components/scheduler/nylas-scheduling/test/nylas-scheduling.spec.js +33 -0
  66. package/dist/collection/components/scheduler/nylas-scheduling/test/nylas-scheduling.spec.js.map +1 -1
  67. package/dist/collection/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.js +20 -5
  68. package/dist/collection/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.js.map +1 -1
  69. package/dist/collection/components/scheduler/nylas-timeslot-picker/nylas-timeslot-picker.js.map +1 -1
  70. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js +12 -6
  71. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js.map +1 -1
  72. package/dist/collection/components/scheduler-editor/nylas-availability-picker/nylas-availability-picker.js +1 -1
  73. package/dist/collection/components/scheduler-editor/nylas-booking-confirmation-redirect/nylas-booking-confirmation-redirect.js +12 -6
  74. package/dist/collection/components/scheduler-editor/nylas-booking-confirmation-redirect/nylas-booking-confirmation-redirect.js.map +1 -1
  75. package/dist/collection/components/scheduler-editor/nylas-confirmation-email/nylas-confirmation-email.js +6 -3
  76. package/dist/collection/components/scheduler-editor/nylas-confirmation-email/nylas-confirmation-email.js.map +1 -1
  77. package/dist/collection/components/scheduler-editor/nylas-custom-event-slug/nylas-custom-event-slug.js +14 -8
  78. package/dist/collection/components/scheduler-editor/nylas-custom-event-slug/nylas-custom-event-slug.js.map +1 -1
  79. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js +3 -3
  80. package/dist/collection/components/scheduler-editor/nylas-event-calendar/nylas-event-calendar.js +1 -1
  81. package/dist/collection/components/scheduler-editor/nylas-reminder-emails/nylas-reminder-emails.js +8 -4
  82. package/dist/collection/components/scheduler-editor/nylas-reminder-emails/nylas-reminder-emails.js.map +1 -1
  83. package/dist/components/index.js.map +1 -1
  84. package/dist/components/nylas-additional-participants2.js +12 -6
  85. package/dist/components/nylas-additional-participants2.js.map +1 -1
  86. package/dist/components/nylas-booked-event-card2.js +13 -6
  87. package/dist/components/nylas-booked-event-card2.js.map +1 -1
  88. package/dist/components/nylas-booking-confirmation-redirect2.js +12 -6
  89. package/dist/components/nylas-booking-confirmation-redirect2.js.map +1 -1
  90. package/dist/components/nylas-booking-form2.js +28 -6
  91. package/dist/components/nylas-booking-form2.js.map +1 -1
  92. package/dist/components/nylas-cancel-booking-form2.js +13 -3
  93. package/dist/components/nylas-cancel-booking-form2.js.map +1 -1
  94. package/dist/components/nylas-cancelled-event-card2.js +12 -3
  95. package/dist/components/nylas-cancelled-event-card2.js.map +1 -1
  96. package/dist/components/nylas-confirmation-email2.js +6 -3
  97. package/dist/components/nylas-confirmation-email2.js.map +1 -1
  98. package/dist/components/nylas-confirmed-event-card2.js +18 -8
  99. package/dist/components/nylas-confirmed-event-card2.js.map +1 -1
  100. package/dist/components/nylas-custom-event-slug2.js +15 -9
  101. package/dist/components/nylas-custom-event-slug2.js.map +1 -1
  102. package/dist/components/nylas-date-picker2.js +1 -1
  103. package/dist/components/nylas-date-picker2.js.map +1 -1
  104. package/dist/components/nylas-editor-tabs-group2.js +2 -2
  105. package/dist/components/nylas-editor-tabs2.js +2 -2
  106. package/dist/components/nylas-organizer-confirmation-card2.js +12 -5
  107. package/dist/components/nylas-organizer-confirmation-card2.js.map +1 -1
  108. package/dist/components/nylas-reminder-emails2.js +8 -4
  109. package/dist/components/nylas-reminder-emails2.js.map +1 -1
  110. package/dist/components/nylas-scheduler-editor.js +2 -2
  111. package/dist/components/nylas-scheduling.js +42 -12
  112. package/dist/components/nylas-scheduling.js.map +1 -1
  113. package/dist/components/nylas-selected-event-card2.js +12 -5
  114. package/dist/components/nylas-selected-event-card2.js.map +1 -1
  115. package/dist/components/nylas-timeslot-picker2.js.map +1 -1
  116. package/dist/components/utils.js +153 -54
  117. package/dist/components/utils.js.map +1 -1
  118. package/dist/esm/{abstract-provider-efe136bd.js → abstract-provider-bdb7d9b4.js} +2 -2
  119. package/dist/esm/{abstract-provider-efe136bd.js.map → abstract-provider-bdb7d9b4.js.map} +1 -1
  120. package/dist/esm/app-globals-295a87be.js.map +1 -1
  121. package/dist/esm/calendar-agenda-fill-icon_36.entry.js +36 -21
  122. package/dist/esm/calendar-agenda-fill-icon_36.entry.js.map +1 -1
  123. package/dist/esm/{calendar-check-icon_2.entry.js → calendar-check-icon.entry.js} +4 -19
  124. package/dist/esm/calendar-check-icon.entry.js.map +1 -0
  125. package/dist/esm/checkbox-component_2.entry.js +1 -1
  126. package/dist/esm/checkbox-group_4.entry.js +3 -3
  127. package/dist/esm/checkmark-circle-icon.entry.js +20 -0
  128. package/dist/esm/checkmark-circle-icon.entry.js.map +1 -0
  129. package/dist/esm/checkmark-icon_15.entry.js +11 -7
  130. package/dist/esm/checkmark-icon_15.entry.js.map +1 -1
  131. package/dist/esm/{customParseFormat-edc38d83.js → customParseFormat-f0d21eb3.js} +2 -2
  132. package/dist/esm/{customParseFormat-edc38d83.js.map → customParseFormat-f0d21eb3.js.map} +1 -1
  133. package/dist/esm/{feedbackSync-e4378c0b.js → feedbackSync-b9c9e719.js} +2 -2
  134. package/dist/esm/{feedbackSync-e4378c0b.js.map → feedbackSync-b9c9e719.js.map} +1 -1
  135. package/dist/esm/globe-icon_2.entry.js +2 -2
  136. package/dist/esm/google-logo-icon_6.entry.js +8 -8
  137. package/dist/esm/index-091600eb.js +6 -2
  138. package/dist/esm/{index.es-6a9d55cf.js → index.es-ccb2a286.js} +2 -2
  139. package/dist/esm/{index.es-6a9d55cf.js.map → index.es-ccb2a286.js.map} +1 -1
  140. package/dist/esm/index.js +2 -2
  141. package/dist/esm/input-component.entry.js +1 -1
  142. package/dist/esm/input-dropdown_2.entry.js +1 -1
  143. package/dist/esm/loader.js +1 -1
  144. package/dist/esm/multi-select-dropdown.entry.js +1 -1
  145. package/dist/esm/{nylas-api-request-f2e4e9b6.js → nylas-api-request-7d702661.js} +2 -2
  146. package/dist/esm/{nylas-api-request-f2e4e9b6.js.map → nylas-api-request-7d702661.js.map} +1 -1
  147. package/dist/esm/nylas-booked-event-card_11.entry.js +82 -25
  148. package/dist/esm/nylas-booked-event-card_11.entry.js.map +1 -1
  149. package/dist/esm/nylas-form-card.entry.js +2 -2
  150. package/dist/esm/nylas-notification_2.entry.js +1 -1
  151. package/dist/esm/nylas-scheduler-editor.entry.js +6 -6
  152. package/dist/esm/nylas-scheduling.entry.js +43 -15
  153. package/dist/esm/nylas-scheduling.entry.js.map +1 -1
  154. package/dist/esm/nylas-web-elements.js +1 -1
  155. package/dist/esm/{register-component-a1c3d7b4.js → register-component-9d4ceee5.js} +2 -2
  156. package/dist/esm/{register-component-a1c3d7b4.js.map → register-component-9d4ceee5.js.map} +1 -1
  157. package/dist/esm/textarea-component.entry.js +1 -1
  158. package/dist/esm/{utils-b7f9cbcc.js → utils-fb8a9ce4.js} +154 -55
  159. package/dist/esm/utils-fb8a9ce4.js.map +1 -0
  160. package/dist/nylas-web-elements/index.esm.js +1 -1
  161. package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
  162. package/dist/nylas-web-elements/nylas-web-elements.esm.js.map +1 -1
  163. package/dist/nylas-web-elements/{p-3ce8e281.js → p-094be30f.js} +2 -2
  164. package/dist/nylas-web-elements/p-18c58ea1.entry.js +2 -0
  165. package/dist/nylas-web-elements/p-18c58ea1.entry.js.map +1 -0
  166. package/dist/nylas-web-elements/{p-c12c18b2.entry.js → p-1dbaf879.entry.js} +2 -2
  167. package/dist/nylas-web-elements/p-2830522f.entry.js +2 -0
  168. package/dist/nylas-web-elements/p-2830522f.entry.js.map +1 -0
  169. package/dist/nylas-web-elements/{p-35297f33.entry.js → p-3b56d656.entry.js} +2 -2
  170. package/dist/nylas-web-elements/{p-8e7882a1.js → p-3c8b7ba1.js} +2 -2
  171. package/dist/nylas-web-elements/{p-3204882f.entry.js → p-3f5e1e6b.entry.js} +2 -2
  172. package/dist/nylas-web-elements/{p-5aae729f.js → p-4c1fafb4.js} +2 -2
  173. package/dist/nylas-web-elements/p-522270a2.entry.js +2 -0
  174. package/dist/nylas-web-elements/p-522270a2.entry.js.map +1 -0
  175. package/dist/nylas-web-elements/p-67e936ce.entry.js +2 -0
  176. package/dist/nylas-web-elements/p-67e936ce.entry.js.map +1 -0
  177. package/dist/nylas-web-elements/{p-9e11eb2c.js → p-6d8e2c6b.js} +2 -2
  178. package/dist/nylas-web-elements/{p-3362cf82.entry.js → p-8f82f281.entry.js} +2 -2
  179. package/dist/nylas-web-elements/p-920812bd.entry.js +8 -0
  180. package/dist/nylas-web-elements/p-920812bd.entry.js.map +1 -0
  181. package/dist/nylas-web-elements/{p-b40f7a77.entry.js → p-a42f41f7.entry.js} +2 -2
  182. package/dist/nylas-web-elements/p-a6e2e49c.js.map +1 -1
  183. package/dist/nylas-web-elements/{p-8340d845.entry.js → p-aad611b4.entry.js} +2 -2
  184. package/dist/nylas-web-elements/{p-6e56eb3f.js → p-ab88518b.js} +2 -2
  185. package/dist/nylas-web-elements/{p-5cf6301e.entry.js → p-b3500bf1.entry.js} +2 -2
  186. package/dist/nylas-web-elements/{p-4d8f9740.entry.js → p-b6d863e0.entry.js} +2 -2
  187. package/dist/nylas-web-elements/{p-50c255fa.entry.js → p-b8cf836f.entry.js} +2 -2
  188. package/dist/nylas-web-elements/{p-996c827d.entry.js → p-bf37be06.entry.js} +2 -2
  189. package/dist/nylas-web-elements/p-de4b01ac.entry.js +2 -0
  190. package/dist/nylas-web-elements/p-de4b01ac.entry.js.map +1 -0
  191. package/dist/nylas-web-elements/{p-308e7adb.entry.js → p-f42e87c6.entry.js} +3 -3
  192. package/dist/nylas-web-elements/{p-dea32251.js → p-f4825eb1.js} +2 -2
  193. package/dist/nylas-web-elements/p-faa30369.js +14 -0
  194. package/dist/nylas-web-elements/{p-59e4ab2d.js.map → p-faa30369.js.map} +1 -1
  195. package/dist/types/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.d.ts +2 -0
  196. package/dist/types/components/scheduler/nylas-booking-form/nylas-booking-form.d.ts +7 -0
  197. package/dist/types/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.d.ts +3 -0
  198. package/dist/types/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.d.ts +3 -1
  199. package/dist/types/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.d.ts +3 -1
  200. package/dist/types/components/scheduler/nylas-date-picker/nylas-date-picker.d.ts +2 -1
  201. package/dist/types/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.d.ts +2 -0
  202. package/dist/types/components/scheduler/nylas-scheduling/nylas-scheduling.d.ts +6 -0
  203. package/dist/types/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.d.ts +3 -1
  204. package/dist/types/components/scheduler/nylas-timeslot-picker/nylas-timeslot-picker.d.ts +2 -1
  205. package/dist/types/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.d.ts +2 -0
  206. package/dist/types/components/scheduler-editor/nylas-booking-confirmation-redirect/nylas-booking-confirmation-redirect.d.ts +2 -0
  207. package/dist/types/components/scheduler-editor/nylas-custom-event-slug/nylas-custom-event-slug.d.ts +2 -0
  208. package/dist/types/components.d.ts +46 -6
  209. package/package.json +3 -5
  210. package/dist/cjs/calendar-check-icon_2.cjs.entry.js.map +0 -1
  211. package/dist/cjs/utils-dd3b6f4c.js.map +0 -1
  212. package/dist/esm/calendar-check-icon_2.entry.js.map +0 -1
  213. package/dist/esm/utils-b7f9cbcc.js.map +0 -1
  214. package/dist/nylas-web-elements/p-2b52b854.entry.js +0 -2
  215. package/dist/nylas-web-elements/p-2b52b854.entry.js.map +0 -1
  216. package/dist/nylas-web-elements/p-59e4ab2d.js +0 -14
  217. package/dist/nylas-web-elements/p-8a3965ba.entry.js +0 -2
  218. package/dist/nylas-web-elements/p-8a3965ba.entry.js.map +0 -1
  219. package/dist/nylas-web-elements/p-97128be4.entry.js +0 -8
  220. package/dist/nylas-web-elements/p-97128be4.entry.js.map +0 -1
  221. package/dist/nylas-web-elements/p-d69f9d47.entry.js +0 -2
  222. package/dist/nylas-web-elements/p-d69f9d47.entry.js.map +0 -1
  223. package/dist/nylas-web-elements/p-dcc8ca35.entry.js +0 -2
  224. package/dist/nylas-web-elements/p-dcc8ca35.entry.js.map +0 -1
  225. /package/dist/nylas-web-elements/{p-3ce8e281.js.map → p-094be30f.js.map} +0 -0
  226. /package/dist/nylas-web-elements/{p-c12c18b2.entry.js.map → p-1dbaf879.entry.js.map} +0 -0
  227. /package/dist/nylas-web-elements/{p-35297f33.entry.js.map → p-3b56d656.entry.js.map} +0 -0
  228. /package/dist/nylas-web-elements/{p-8e7882a1.js.map → p-3c8b7ba1.js.map} +0 -0
  229. /package/dist/nylas-web-elements/{p-3204882f.entry.js.map → p-3f5e1e6b.entry.js.map} +0 -0
  230. /package/dist/nylas-web-elements/{p-5aae729f.js.map → p-4c1fafb4.js.map} +0 -0
  231. /package/dist/nylas-web-elements/{p-9e11eb2c.js.map → p-6d8e2c6b.js.map} +0 -0
  232. /package/dist/nylas-web-elements/{p-3362cf82.entry.js.map → p-8f82f281.entry.js.map} +0 -0
  233. /package/dist/nylas-web-elements/{p-b40f7a77.entry.js.map → p-a42f41f7.entry.js.map} +0 -0
  234. /package/dist/nylas-web-elements/{p-8340d845.entry.js.map → p-aad611b4.entry.js.map} +0 -0
  235. /package/dist/nylas-web-elements/{p-6e56eb3f.js.map → p-ab88518b.js.map} +0 -0
  236. /package/dist/nylas-web-elements/{p-5cf6301e.entry.js.map → p-b3500bf1.entry.js.map} +0 -0
  237. /package/dist/nylas-web-elements/{p-4d8f9740.entry.js.map → p-b6d863e0.entry.js.map} +0 -0
  238. /package/dist/nylas-web-elements/{p-50c255fa.entry.js.map → p-b8cf836f.entry.js.map} +0 -0
  239. /package/dist/nylas-web-elements/{p-996c827d.entry.js.map → p-bf37be06.entry.js.map} +0 -0
  240. /package/dist/nylas-web-elements/{p-308e7adb.entry.js.map → p-f42e87c6.entry.js.map} +0 -0
  241. /package/dist/nylas-web-elements/{p-dea32251.js.map → p-f4825eb1.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-scheduling.spec.js","sourceRoot":"","sources":["../../../../../src/components/scheduler/nylas-scheduling/test/nylas-scheduling.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { NylasScheduling } from '../nylas-scheduling';\nimport { NylasBookingForm } from '../../nylas-booking-form/nylas-booking-form';\nimport { NylasSelectedEventCard } from '../../nylas-selected-event-card/nylas-selected-event-card';\nimport { h } from '@stencil/core';\nimport { NylasDatePicker } from '../../nylas-date-picker/nylas-date-picker';\nimport { NylasTimeslotPicker } from '../../nylas-timeslot-picker/nylas-timeslot-picker';\nimport { NylasLocaleSwitch } from '../../nylas-locale-switch/nylas-locale-switch';\nimport { SelectDropdown } from '../../../design-system/select-dropdown/select-dropdown';\n\nconst configSettings = {\n name: '',\n slug: '',\n configuration_id: '19ca4a10-be05-4d1b-a830-5b639a362cef',\n scheduler: {\n available_days_in_future: 30,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n rescheduling_url: 'https://book.nylas.com/scheduler/reschedule/:booking_ref',\n cancellation_url: 'https://book.nylas.com/scheduler/cancel/:booking_ref',\n organizer_confirmation_url: 'https://book.nylas.com/scheduler/confirm/:booking_ref',\n confirmation_redirect_url: 'https://nylas.com',\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n cancellation_policy: '',\n additional_fields: {\n dropdown: {\n label: 'Dropdown Label',\n type: 'dropdown',\n required: false,\n order: 2,\n options: ['option 1', 'option 2'],\n },\n short_text: {\n label: 'Short Text Label',\n type: 'text',\n required: false,\n order: 1,\n },\n },\n },\n organizer: {\n email: 'pooja.g@nylas.com',\n name: '',\n },\n booking_type: 'booking',\n appearance: {\n company_logo_url: '',\n },\n};\nconst defaultSchedulerState = {\n showBookingForm: true,\n availability: [\n {\n emails: ['pooja.g@nylas.com'],\n end_time: 1728639000 as any,\n start_time: 1728637200 as any,\n },\n ],\n selectableDates: [new Date(1728639000000)],\n selectedDate: new Date(1728639000000),\n selectedTimeslot: {\n end_time: 1728639000 as any,\n start_time: 1728637200 as any,\n emails: ['janedoe@example.com'],\n },\n selectedTimezone: 'America/Los_Angeles',\n bookingInfo: {\n primaryParticipant: {\n name: 'John Doe',\n email: 'johndoe@example.com',\n },\n guests: [],\n additionalFields: {\n short_text: {\n value: 'some value',\n type: 'text',\n },\n dropdown: {\n value: 'option 2',\n type: 'dropdown',\n },\n field2: {\n value: 'some value',\n type: 'text',\n },\n },\n },\n configSettings: { ...configSettings },\n};\n\ndescribe('nylas-scheduling', () => {\n const REAL_DATE = Date;\n const testBookingRef = 'Of_H8WLEQ4aZTtx0NKajeAF1l9qpekHbo4by7AaZc8M=';\n beforeEach(() => {\n // Clear and reset the mock before each test if needed\n jest.clearAllMocks();\n });\n\n beforeAll(() => {\n const originalDate = Date;\n global.Date = class extends originalDate {\n constructor(date?: string | number) {\n super(date ? date : '2022-01-01T00:00:00.000Z');\n }\n } as DateConstructor;\n });\n\n afterAll(() => {\n global.Date = REAL_DATE;\n });\n\n it('renders', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling></nylas-scheduling>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it('listens for NylasSchedulingError event and updates state', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling></nylas-scheduling>`,\n });\n\n const mockError = { title: 'Error', description: 'Test Error', type: 'error', category: 'component', ttl: 'none' };\n const errorEvent = new CustomEvent('NylasSchedulingError', { detail: mockError, bubbles: true });\n page.win.dispatchEvent(errorEvent);\n await page.waitForChanges();\n\n const notification = page?.root?.shadowRoot?.querySelector('nylas-notification');\n expect(notification).not.toBeNull();\n const notifRoot = notification?.shadowRoot?.querySelector('.notif');\n expect(notifRoot).not.toBeNull();\n });\n\n it('shows no error when configID is set, and no sessionID is set', async () => {\n const availability = [\n {\n emails: ['xyz@gmail.com'],\n end_time: new Date(1709303400000),\n start_time: new Date(1709301600000),\n },\n ];\n const page = await newSpecPage({\n components: [NylasScheduling],\n template: () => (\n <nylas-scheduling\n config-id=\"configid\"\n defaultSchedulerState={{\n availability,\n }}\n ></nylas-scheduling>\n ),\n });\n\n await page.waitForChanges();\n\n const notification = page?.root?.shadowRoot?.querySelector('nylas-notification');\n const notifRoot = notification?.shadowRoot?.querySelector('.notif');\n expect(notifRoot).toBeUndefined();\n });\n\n it('listens for dateSelected event and updates date label', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling></nylas-scheduling>`,\n });\n\n const selectedDate = new Date();\n const dateSelectedEvent = new CustomEvent('dateSelected', { detail: selectedDate, bubbles: true });\n page.win.dispatchEvent(dateSelectedEvent);\n await page.waitForChanges();\n\n const selectedDateLabel = page?.root?.shadowRoot?.querySelector('#selectedDate');\n expect(selectedDateLabel?.textContent).toBe('No date selected');\n });\n\n it('conditionally renders cancel flow based on cancelBookingRef prop', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling cancel-booking-ref=${testBookingRef}></nylas-scheduling>`,\n });\n\n await page.waitForChanges();\n const cancelFlowPage = page?.root?.shadowRoot?.querySelector('.cancel-flow-page');\n expect(cancelFlowPage).not.toBeNull();\n });\n\n it('renders composable UI when mode is set to composable', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling mode=\"composable\">\n <nylas-if-state state=\"scheduler.eventInfo\" is-state-set=\"false\">\n <div class=\"flex\">\n <div class=\"flex flex-col gap-4 px-6 pt-4 h-[514px] w-[433px] border-slate-200 dark:border-slate-700 border-r\">\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"false\">\n <nylas-date-picker></nylas-date-picker>\n <div class=\"border-slate-200 dark:border-slate-700 border-t -mx-6 h-px\"></div>\n <nylas-locale-switch></nylas-locale-switch>\n </nylas-if-state>\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"true\">\n <div class=\"flex flex-col justify-center h-[496px]\">\n <nylas-selected-event-card></nylas-selected-event-card>\n </div>\n </nylas-if-state>\n </div>\n <div class=\"flex flex-col items-center min-w-[360px] overflow-hidden bg-slate-50 dark:bg-slate-700\">\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"false\" class=\"w-full\">\n <div class=\"flex flex-col justify-start w-full\">\n <nylas-if-state state=\"scheduler.selectableDates\" is-state-set=\"true\">\n <h2 class=\"flex items-center justify-center text-lg font-semibold w-full text-center gap-1 mb-4 mt-6 text-slate-700 dark:text-white\">\n <calendar-icon></calendar-icon>\n <nylas-if-state state=\"scheduler.selectedDate\" is-state-set=\"false\">\n <span>No date selected</span>\n </nylas-if-state>\n <nylas-if-state state=\"scheduler.selectedDate\" is-state-set=\"true\">\n <span id=\"selectedDate\"></span>\n </nylas-if-state>\n </h2>\n </nylas-if-state>\n <nylas-timeslot-picker></nylas-timeslot-picker>\n </div>\n </nylas-if-state>\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"true\" class=\"w-full\">\n <div class=\"flex flex-col justify-center h-[496px]\">\n <nylas-booking-form></nylas-booking-form>\n </div>\n </nylas-if-state>\n </div>\n </div>\n </nylas-if-state>\n </nylas-scheduling>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it('exposes getNylasSchedulingStore method and returns store', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling session-id=\"sessionid\"></nylas-scheduling>`,\n });\n const scheduler = page.rootInstance as NylasScheduling;\n\n const store = await scheduler.getNylasSchedulerStore();\n expect(store).toBeDefined();\n });\n\n it('exposes getNylasSchedulingConnector method and returns connector', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling session-id=\"sessionid\"></nylas-scheduling>`,\n });\n const scheduler = page.rootInstance as NylasScheduling;\n\n const connector = await scheduler.getNylasSchedulerConnector();\n expect(connector).toBeDefined();\n });\n\n it('should render the reschedule flow when rescheduleBookingRef is set', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling reschedule-booking-ref=${testBookingRef}></nylas-scheduling>`,\n });\n\n await page.waitForChanges();\n\n const messageBanner = page?.root?.shadowRoot?.querySelector('.message-banner');\n expect(messageBanner).not.toBeNull();\n });\n\n it('hides the nylas logo in the footer if nylasBranding is set', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n template: () => <nylas-scheduling config-id=\"configid\" nylasBranding={false}></nylas-scheduling>,\n });\n\n await page.waitForChanges();\n\n const footer = page?.root?.shadowRoot?.querySelector('.footer');\n expect(footer?.textContent).not.toContain('Powered by Nylas');\n });\n\n it('applies themeConfig to sub components', async () => {\n jest.spyOn(global, 'fetch').mockImplementation(url => {\n if (url === 'https://api.us.nylas.com/v3/scheduling/ui-settings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({ request_id: 'test', data: configSettings } as any);\n } else if (url === 'https://api.us.nylas.com/v3/scheduling/bookings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({\n json: () =>\n Promise.resolve({\n request_id: '1729109187-ffa7e86e-c276-45c2-8cda-e3205e46d234',\n data: {\n event_id: 'jlid5nji0nmoupl87ls85iv8do',\n booking_id: '8f9f5145-c40c-4477-8d30-5c43256ddb60',\n title: 'm',\n description: '',\n organizer: {\n email: 'johndoe@example.com',\n name: '',\n },\n status: 'booked',\n },\n } as any),\n } as Response);\n }\n\n return fetch(url); // Fallback for unmocked URLs\n });\n\n const page = await newSpecPage({\n components: [NylasDatePicker, NylasTimeslotPicker, NylasScheduling],\n template: () => (\n <nylas-scheduling\n configurationId={'19ca4a10-be05-4d1b-a830-5b639a362cef'}\n bookingInfo={defaultSchedulerState.bookingInfo}\n defaultSchedulerState={{ ...defaultSchedulerState, showBookingForm: false }}\n themeConfig={{\n '--nylas-primary': 'red',\n '--nylas-base-500': 'orange',\n }}\n ></nylas-scheduling>\n ),\n });\n\n await page.waitForChanges();\n\n const datePicker = page?.root?.shadowRoot?.querySelector('nylas-date-picker') as HTMLNylasDatePickerElement;\n const timeslotPicker = page?.root?.shadowRoot?.querySelector('nylas-timeslot-picker') as HTMLNylasTimeslotPickerElement;\n datePicker.themeConfig = {\n '--nylas-primary': 'red',\n '--nylas-base-500': 'orange',\n };\n timeslotPicker.themeConfig = {\n '--nylas-primary': 'red',\n '--nylas-base-500': 'orange',\n };\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const datePickerHost = datePicker?.shadowRoot?.host as HTMLNylasDatePickerElement;\n expect(datePickerHost?.style.getPropertyValue('--nylas-primary')).toBe('red');\n expect(datePickerHost?.style.getPropertyValue('--nylas-base-500')).toBe('orange');\n const timeslotPickerHost = timeslotPicker?.shadowRoot?.host as HTMLNylasTimeslotPickerElement;\n expect(timeslotPickerHost?.style.getPropertyValue('--nylas-primary')).toBe('red');\n expect(timeslotPickerHost?.style.getPropertyValue('--nylas-base-500')).toBe('orange');\n });\n\n it('applies bookingInfo timezone and language to sub components', async () => {\n jest.spyOn(global, 'fetch').mockImplementation(url => {\n if (url === 'https://api.us.nylas.com/v3/scheduling/ui-settings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({ request_id: 'test', data: configSettings } as any);\n } else if (url === 'https://api.us.nylas.com/v3/scheduling/bookings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({\n json: () =>\n Promise.resolve({\n request_id: '1729109187-ffa7e86e-c276-45c2-8cda-e3205e46d234',\n data: {\n event_id: 'jlid5nji0nmoupl87ls85iv8do',\n booking_id: '8f9f5145-c40c-4477-8d30-5c43256ddb60',\n title: 'm',\n description: '',\n organizer: {\n email: 'johndoe@example.com',\n name: '',\n },\n status: 'booked',\n },\n } as any),\n } as Response);\n }\n\n return fetch(url); // Fallback for unmocked URLs\n });\n\n const page = await newSpecPage({\n components: [SelectDropdown, NylasDatePicker, NylasTimeslotPicker, NylasLocaleSwitch, NylasScheduling],\n template: () => (\n <nylas-scheduling\n configurationId={'19ca4a10-be05-4d1b-a830-5b639a362cef'}\n bookingInfo={{ ...defaultSchedulerState.bookingInfo, timezone: 'America/Toronto' }}\n defaultSchedulerState={{ ...defaultSchedulerState, showBookingForm: false }}\n ></nylas-scheduling>\n ),\n });\n\n await page.waitForChanges();\n\n const localeSwitch = page?.root?.shadowRoot?.querySelector('nylas-locale-switch') as HTMLNylasLocaleSwitchElement;\n localeSwitch.bookingInfo = { ...defaultSchedulerState.bookingInfo, language: 'fr', timezone: 'America/Toronto' };\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const timezoneSelectDropdown = localeSwitch?.shadowRoot?.querySelector('.timezone select-dropdown') as HTMLSelectDropdownElement;\n const timezoneButton = timezoneSelectDropdown?.shadowRoot?.querySelector('button');\n expect(timezoneButton?.textContent).toContain('America / Toronto');\n\n const languageSelectDropdown = localeSwitch?.shadowRoot?.querySelector('.language select-dropdown') as HTMLSelectDropdownElement;\n const languageButton = languageSelectDropdown?.shadowRoot?.querySelector('button');\n expect(languageButton?.textContent).toContain('Français');\n });\n\n it('redirects with the query params when redirectUrl is set', async () => {\n jest.spyOn(global, 'fetch').mockImplementation(url => {\n if (url === 'https://api.us.nylas.com/v3/scheduling/ui-settings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({ request_id: 'test', data: configSettings } as any);\n } else if (url === 'https://api.us.nylas.com/v3/scheduling/bookings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({\n json: () =>\n Promise.resolve({\n request_id: '1729109187-ffa7e86e-c276-45c2-8cda-e3205e46d234',\n data: {\n event_id: 'jlid5nji0nmoupl87ls85iv8do',\n booking_id: '8f9f5145-c40c-4477-8d30-5c43256ddb60',\n title: 'm',\n description: '',\n organizer: {\n email: 'johndoe@example.com',\n name: '',\n },\n location: 'Nylas HQ',\n booking_ref: 'booking_ref',\n status: 'booked',\n },\n } as any),\n } as Response);\n }\n\n return fetch(url); // Fallback for unmocked URLs\n });\n const page = await newSpecPage({\n components: [NylasSelectedEventCard, NylasBookingForm, NylasScheduling],\n template: () => (\n <nylas-scheduling\n mode=\"app\"\n configurationId={'19ca4a10-be05-4d1b-a830-5b639a362cef'}\n bookingInfo={defaultSchedulerState.bookingInfo}\n defaultSchedulerState={{ ...defaultSchedulerState, selectedTimezone: 'America/Toronto', selectedLanguage: 'en-US' }}\n ></nylas-scheduling>\n ),\n });\n const nylasScheduling: NylasScheduling = page.rootInstance as NylasScheduling;\n const redirectSpy = jest.spyOn(nylasScheduling, 'redirectToCustomUrl');\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const nylasBookingForm = page?.root?.shadowRoot?.querySelector('nylas-booking-form') as HTMLNylasBookingFormElement;\n nylasBookingForm.bookingInfo = defaultSchedulerState.bookingInfo;\n await page.waitForChanges();\n const form = nylasBookingForm?.shadowRoot?.querySelector('form');\n expect(form).not.toBeNull();\n\n const detailsConfirmedEvent = new CustomEvent('detailsConfirmed', {\n detail: {\n additionalFields: { dropdown: 'option 2', short_text: 'hello' },\n guests: [],\n start_time: new Date(1729013400000),\n timezone: 'America/Toronto',\n email_language: 'en-US',\n end_time: new Date(1729015200000),\n timeslot: {\n start_time: new Date(1729013400000),\n end_time: new Date(1729015200000),\n },\n primaryParticipant: { name: 'John Doe', email: 'johndoe@example.com' },\n },\n bubbles: true,\n });\n\n await nylasScheduling.bookButtonClickedHandler(detailsConfirmedEvent);\n await page.waitForChanges();\n expect(redirectSpy).toHaveBeenCalled();\n // Assert that the redirect happened with the correct URL (includes field_2 in the additional_values)\n expect(redirectSpy).toHaveBeenCalledWith(\n 'https://nylas.com?booking_id=8f9f5145-c40c-4477-8d30-5c43256ddb60&name=John+Doe&email=johndoe%40example.com&start_time=1728637.2&end_time=1728639&tz=America%2FToronto&language=en-US&additional_values=%7B%22dropdown%22%3A%22option+2%22%2C%22short_text%22%3A%22hello%22%2C%22field2%22%3A%22some+value%22%7D&config_id=19ca4a10-be05-4d1b-a830-5b639a362cef&location=Nylas+HQ&booking_ref=booking_ref',\n );\n });\n});\n"]}
1
+ {"version":3,"file":"nylas-scheduling.spec.js","sourceRoot":"","sources":["../../../../../src/components/scheduler/nylas-scheduling/test/nylas-scheduling.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { NylasScheduling } from '../nylas-scheduling';\nimport { NylasBookingForm } from '../../nylas-booking-form/nylas-booking-form';\nimport { NylasSelectedEventCard } from '../../nylas-selected-event-card/nylas-selected-event-card';\nimport { h } from '@stencil/core';\nimport { NylasDatePicker } from '../../nylas-date-picker/nylas-date-picker';\nimport { NylasTimeslotPicker } from '../../nylas-timeslot-picker/nylas-timeslot-picker';\nimport { NylasLocaleSwitch } from '../../nylas-locale-switch/nylas-locale-switch';\nimport { SelectDropdown } from '../../../design-system/select-dropdown/select-dropdown';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { NylasCancelBookingForm } from '../../nylas-cancel-booking-form/nylas-cancel-booking-form';\n\nconst configSettings = {\n name: '',\n slug: '',\n configuration_id: '19ca4a10-be05-4d1b-a830-5b639a362cef',\n scheduler: {\n available_days_in_future: 30,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n rescheduling_url: 'https://book.nylas.com/scheduler/reschedule/:booking_ref',\n cancellation_url: 'https://book.nylas.com/scheduler/cancel/:booking_ref',\n organizer_confirmation_url: 'https://book.nylas.com/scheduler/confirm/:booking_ref',\n confirmation_redirect_url: 'https://nylas.com',\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n cancellation_policy: '',\n additional_fields: {\n dropdown: {\n label: 'Dropdown Label',\n type: 'dropdown',\n required: false,\n order: 2,\n options: ['option 1', 'option 2'],\n },\n short_text: {\n label: 'Short Text Label',\n type: 'text',\n required: false,\n order: 1,\n },\n },\n },\n organizer: {\n email: 'pooja.g@nylas.com',\n name: '',\n },\n booking_type: 'booking',\n appearance: {\n company_logo_url: '',\n },\n};\nconst defaultSchedulerState = {\n showBookingForm: true,\n availability: [\n {\n emails: ['pooja.g@nylas.com'],\n end_time: 1728639000 as any,\n start_time: 1728637200 as any,\n },\n ],\n selectableDates: [new Date(1728639000000)],\n selectedDate: new Date(1728639000000),\n selectedTimeslot: {\n end_time: 1728639000 as any,\n start_time: 1728637200 as any,\n emails: ['janedoe@example.com'],\n },\n selectedTimezone: 'America/Los_Angeles',\n bookingInfo: {\n primaryParticipant: {\n name: 'John Doe',\n email: 'johndoe@example.com',\n },\n guests: [],\n additionalFields: {\n short_text: {\n value: 'some value',\n type: 'text',\n },\n dropdown: {\n value: 'option 2',\n type: 'dropdown',\n },\n field2: {\n value: 'some value',\n type: 'text',\n },\n },\n },\n configSettings: { ...configSettings },\n};\n\ndescribe('nylas-scheduling', () => {\n const REAL_DATE = Date;\n const testBookingRef = 'Of_H8WLEQ4aZTtx0NKajeAF1l9qpekHbo4by7AaZc8M=';\n beforeEach(() => {\n // Clear and reset the mock before each test if needed\n jest.clearAllMocks();\n });\n\n beforeAll(() => {\n const originalDate = Date;\n global.Date = class extends originalDate {\n constructor(date?: string | number) {\n super(date ? date : '2022-01-01T00:00:00.000Z');\n }\n } as DateConstructor;\n });\n\n afterAll(() => {\n global.Date = REAL_DATE;\n });\n\n it('renders', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling></nylas-scheduling>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it('listens for NylasSchedulingError event and updates state', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling></nylas-scheduling>`,\n });\n\n const mockError = { title: 'Error', description: 'Test Error', type: 'error', category: 'component', ttl: 'none' };\n const errorEvent = new CustomEvent('NylasSchedulingError', { detail: mockError, bubbles: true });\n page.win.dispatchEvent(errorEvent);\n await page.waitForChanges();\n\n const notification = page?.root?.shadowRoot?.querySelector('nylas-notification');\n expect(notification).not.toBeNull();\n const notifRoot = notification?.shadowRoot?.querySelector('.notif');\n expect(notifRoot).not.toBeNull();\n });\n\n it('shows no error when configID is set, and no sessionID is set', async () => {\n const availability = [\n {\n emails: ['xyz@gmail.com'],\n end_time: new Date(1709303400000),\n start_time: new Date(1709301600000),\n },\n ];\n const page = await newSpecPage({\n components: [NylasScheduling],\n template: () => (\n <nylas-scheduling\n config-id=\"configid\"\n defaultSchedulerState={{\n availability,\n }}\n ></nylas-scheduling>\n ),\n });\n\n await page.waitForChanges();\n\n const notification = page?.root?.shadowRoot?.querySelector('nylas-notification');\n const notifRoot = notification?.shadowRoot?.querySelector('.notif');\n expect(notifRoot).toBeUndefined();\n });\n\n it('listens for dateSelected event and updates date label', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling></nylas-scheduling>`,\n });\n\n const selectedDate = new Date();\n const dateSelectedEvent = new CustomEvent('dateSelected', { detail: selectedDate, bubbles: true });\n page.win.dispatchEvent(dateSelectedEvent);\n await page.waitForChanges();\n\n const selectedDateLabel = page?.root?.shadowRoot?.querySelector('#selectedDate');\n expect(selectedDateLabel?.textContent).toBe('No date selected');\n });\n\n it('conditionally renders cancel flow based on cancelBookingRef prop', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling cancel-booking-ref=${testBookingRef}></nylas-scheduling>`,\n });\n\n await page.waitForChanges();\n const cancelFlowPage = page?.root?.shadowRoot?.querySelector('.cancel-flow-page');\n expect(cancelFlowPage).not.toBeNull();\n });\n\n it('renders composable UI when mode is set to composable', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling mode=\"composable\">\n <nylas-if-state state=\"scheduler.eventInfo\" is-state-set=\"false\">\n <div class=\"flex\">\n <div class=\"flex flex-col gap-4 px-6 pt-4 h-[514px] w-[433px] border-slate-200 dark:border-slate-700 border-r\">\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"false\">\n <nylas-date-picker></nylas-date-picker>\n <div class=\"border-slate-200 dark:border-slate-700 border-t -mx-6 h-px\"></div>\n <nylas-locale-switch></nylas-locale-switch>\n </nylas-if-state>\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"true\">\n <div class=\"flex flex-col justify-center h-[496px]\">\n <nylas-selected-event-card></nylas-selected-event-card>\n </div>\n </nylas-if-state>\n </div>\n <div class=\"flex flex-col items-center min-w-[360px] overflow-hidden bg-slate-50 dark:bg-slate-700\">\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"false\" class=\"w-full\">\n <div class=\"flex flex-col justify-start w-full\">\n <nylas-if-state state=\"scheduler.selectableDates\" is-state-set=\"true\">\n <h2 class=\"flex items-center justify-center text-lg font-semibold w-full text-center gap-1 mb-4 mt-6 text-slate-700 dark:text-white\">\n <calendar-icon></calendar-icon>\n <nylas-if-state state=\"scheduler.selectedDate\" is-state-set=\"false\">\n <span>No date selected</span>\n </nylas-if-state>\n <nylas-if-state state=\"scheduler.selectedDate\" is-state-set=\"true\">\n <span id=\"selectedDate\"></span>\n </nylas-if-state>\n </h2>\n </nylas-if-state>\n <nylas-timeslot-picker></nylas-timeslot-picker>\n </div>\n </nylas-if-state>\n <nylas-if-state state=\"scheduler.showBookingForm\" is-boolean=\"true\" class=\"w-full\">\n <div class=\"flex flex-col justify-center h-[496px]\">\n <nylas-booking-form></nylas-booking-form>\n </div>\n </nylas-if-state>\n </div>\n </div>\n </nylas-if-state>\n </nylas-scheduling>`,\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it('exposes getNylasSchedulingStore method and returns store', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling session-id=\"sessionid\"></nylas-scheduling>`,\n });\n const scheduler = page.rootInstance as NylasScheduling;\n\n const store = await scheduler.getNylasSchedulerStore();\n expect(store).toBeDefined();\n });\n\n it('exposes getNylasSchedulingConnector method and returns connector', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling session-id=\"sessionid\"></nylas-scheduling>`,\n });\n const scheduler = page.rootInstance as NylasScheduling;\n\n const connector = await scheduler.getNylasSchedulerConnector();\n expect(connector).toBeDefined();\n });\n\n it('should render the reschedule flow when rescheduleBookingRef is set', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n html: `<nylas-scheduling reschedule-booking-ref=${testBookingRef}></nylas-scheduling>`,\n });\n\n await page.waitForChanges();\n\n const messageBanner = page?.root?.shadowRoot?.querySelector('.message-banner');\n expect(messageBanner).not.toBeNull();\n });\n\n it('hides the nylas logo in the footer if nylasBranding is set', async () => {\n const page = await newSpecPage({\n components: [NylasScheduling],\n template: () => <nylas-scheduling config-id=\"configid\" nylasBranding={false}></nylas-scheduling>,\n });\n\n await page.waitForChanges();\n\n const footer = page?.root?.shadowRoot?.querySelector('.footer');\n expect(footer?.textContent).not.toContain('Powered by Nylas');\n });\n\n it('applies themeConfig to sub components', async () => {\n jest.spyOn(global, 'fetch').mockImplementation(url => {\n if (url === 'https://api.us.nylas.com/v3/scheduling/ui-settings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({ request_id: 'test', data: configSettings } as any);\n } else if (url === 'https://api.us.nylas.com/v3/scheduling/bookings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({\n json: () =>\n Promise.resolve({\n request_id: '1729109187-ffa7e86e-c276-45c2-8cda-e3205e46d234',\n data: {\n event_id: 'jlid5nji0nmoupl87ls85iv8do',\n booking_id: '8f9f5145-c40c-4477-8d30-5c43256ddb60',\n title: 'm',\n description: '',\n organizer: {\n email: 'johndoe@example.com',\n name: '',\n },\n status: 'booked',\n },\n } as any),\n } as Response);\n }\n\n return fetch(url); // Fallback for unmocked URLs\n });\n\n const page = await newSpecPage({\n components: [NylasDatePicker, NylasTimeslotPicker, NylasScheduling],\n template: () => (\n <nylas-scheduling\n configurationId={'19ca4a10-be05-4d1b-a830-5b639a362cef'}\n bookingInfo={defaultSchedulerState.bookingInfo}\n defaultSchedulerState={{ ...defaultSchedulerState, showBookingForm: false }}\n themeConfig={{\n '--nylas-primary': 'red',\n '--nylas-base-500': 'orange',\n }}\n ></nylas-scheduling>\n ),\n });\n\n await page.waitForChanges();\n\n const datePicker = page?.root?.shadowRoot?.querySelector('nylas-date-picker') as HTMLNylasDatePickerElement;\n const timeslotPicker = page?.root?.shadowRoot?.querySelector('nylas-timeslot-picker') as HTMLNylasTimeslotPickerElement;\n datePicker.themeConfig = {\n '--nylas-primary': 'red',\n '--nylas-base-500': 'orange',\n };\n timeslotPicker.themeConfig = {\n '--nylas-primary': 'red',\n '--nylas-base-500': 'orange',\n };\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const datePickerHost = datePicker?.shadowRoot?.host as HTMLNylasDatePickerElement;\n expect(datePickerHost?.style.getPropertyValue('--nylas-primary')).toBe('red');\n expect(datePickerHost?.style.getPropertyValue('--nylas-base-500')).toBe('orange');\n const timeslotPickerHost = timeslotPicker?.shadowRoot?.host as HTMLNylasTimeslotPickerElement;\n expect(timeslotPickerHost?.style.getPropertyValue('--nylas-primary')).toBe('red');\n expect(timeslotPickerHost?.style.getPropertyValue('--nylas-base-500')).toBe('orange');\n });\n\n it('applies bookingInfo timezone and language to sub components', async () => {\n jest.spyOn(global, 'fetch').mockImplementation(url => {\n if (url === 'https://api.us.nylas.com/v3/scheduling/ui-settings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({ request_id: 'test', data: configSettings } as any);\n } else if (url === 'https://api.us.nylas.com/v3/scheduling/bookings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({\n json: () =>\n Promise.resolve({\n request_id: '1729109187-ffa7e86e-c276-45c2-8cda-e3205e46d234',\n data: {\n event_id: 'jlid5nji0nmoupl87ls85iv8do',\n booking_id: '8f9f5145-c40c-4477-8d30-5c43256ddb60',\n title: 'm',\n description: '',\n organizer: {\n email: 'johndoe@example.com',\n name: '',\n },\n status: 'booked',\n },\n } as any),\n } as Response);\n }\n\n return fetch(url); // Fallback for unmocked URLs\n });\n\n const page = await newSpecPage({\n components: [SelectDropdown, NylasDatePicker, NylasTimeslotPicker, NylasLocaleSwitch, NylasScheduling],\n template: () => (\n <nylas-scheduling\n configurationId={'19ca4a10-be05-4d1b-a830-5b639a362cef'}\n bookingInfo={{ ...defaultSchedulerState.bookingInfo, timezone: 'America/Toronto' }}\n defaultSchedulerState={{ ...defaultSchedulerState, showBookingForm: false }}\n ></nylas-scheduling>\n ),\n });\n\n await page.waitForChanges();\n\n const localeSwitch = page?.root?.shadowRoot?.querySelector('nylas-locale-switch') as HTMLNylasLocaleSwitchElement;\n localeSwitch.bookingInfo = { ...defaultSchedulerState.bookingInfo, language: 'fr', timezone: 'America/Toronto' };\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const timezoneSelectDropdown = localeSwitch?.shadowRoot?.querySelector('.timezone select-dropdown') as HTMLSelectDropdownElement;\n const timezoneButton = timezoneSelectDropdown?.shadowRoot?.querySelector('button');\n expect(timezoneButton?.textContent).toContain('America / Toronto');\n\n const languageSelectDropdown = localeSwitch?.shadowRoot?.querySelector('.language select-dropdown') as HTMLSelectDropdownElement;\n const languageButton = languageSelectDropdown?.shadowRoot?.querySelector('button');\n expect(languageButton?.textContent).toContain('Français');\n });\n\n it('applies selectedLanguage to sub components', async () => {\n jest.spyOn(global, 'fetch').mockImplementation(url => {\n if (url === 'https://api.us.nylas.com/v3/scheduling/ui-settings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({ request_id: 'test', data: configSettings } as any);\n } else if (url === 'https://api.us.nylas.com/v3/scheduling/bookings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({\n json: () =>\n Promise.resolve({\n request_id: '1729109187-ffa7e86e-c276-45c2-8cda-e3205e46d234',\n data: {\n event_id: 'jlid5nji0nmoupl87ls85iv8do',\n booking_id: '8f9f5145-c40c-4477-8d30-5c43256ddb60',\n title: 'm',\n description: '',\n organizer: {\n email: 'johndoe@example.com',\n name: '',\n },\n status: 'booked',\n },\n } as any),\n } as Response);\n }\n\n return fetch(url); // Fallback for unmocked URLs\n });\n\n const page = await newSpecPage({\n components: [SelectDropdown, NylasCancelBookingForm, NylasScheduling],\n template: () => (\n <nylas-scheduling\n cancelBookingRef={testBookingRef}\n defaultLanguage={'de' as LANGUAGE_CODE}\n bookingInfo={{ ...defaultSchedulerState.bookingInfo, timezone: 'America/Toronto' }}\n ></nylas-scheduling>\n ),\n });\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n });\n\n it('redirects with the query params when redirectUrl is set', async () => {\n jest.spyOn(global, 'fetch').mockImplementation(url => {\n if (url === 'https://api.us.nylas.com/v3/scheduling/ui-settings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({ request_id: 'test', data: configSettings } as any);\n } else if (url === 'https://api.us.nylas.com/v3/scheduling/bookings?configuration_id=19ca4a10-be05-4d1b-a830-5b639a362cef') {\n return Promise.resolve({\n json: () =>\n Promise.resolve({\n request_id: '1729109187-ffa7e86e-c276-45c2-8cda-e3205e46d234',\n data: {\n event_id: 'jlid5nji0nmoupl87ls85iv8do',\n booking_id: '8f9f5145-c40c-4477-8d30-5c43256ddb60',\n title: 'm',\n description: '',\n organizer: {\n email: 'johndoe@example.com',\n name: '',\n },\n location: 'Nylas HQ',\n booking_ref: 'booking_ref',\n status: 'booked',\n },\n } as any),\n } as Response);\n }\n\n return fetch(url); // Fallback for unmocked URLs\n });\n const page = await newSpecPage({\n components: [NylasSelectedEventCard, NylasBookingForm, NylasScheduling],\n template: () => (\n <nylas-scheduling\n mode=\"app\"\n configurationId={'19ca4a10-be05-4d1b-a830-5b639a362cef'}\n bookingInfo={defaultSchedulerState.bookingInfo}\n defaultSchedulerState={{ ...defaultSchedulerState, selectedTimezone: 'America/Toronto', selectedLanguage: 'en-US' }}\n ></nylas-scheduling>\n ),\n });\n const nylasScheduling: NylasScheduling = page.rootInstance as NylasScheduling;\n const redirectSpy = jest.spyOn(nylasScheduling, 'redirectToCustomUrl');\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const nylasBookingForm = page?.root?.shadowRoot?.querySelector('nylas-booking-form') as HTMLNylasBookingFormElement;\n nylasBookingForm.bookingInfo = defaultSchedulerState.bookingInfo;\n await page.waitForChanges();\n const form = nylasBookingForm?.shadowRoot?.querySelector('form');\n expect(form).not.toBeNull();\n\n const detailsConfirmedEvent = new CustomEvent('detailsConfirmed', {\n detail: {\n additionalFields: { dropdown: 'option 2', short_text: 'hello' },\n guests: [],\n start_time: new Date(1729013400000),\n timezone: 'America/Toronto',\n email_language: 'en-US',\n end_time: new Date(1729015200000),\n timeslot: {\n start_time: new Date(1729013400000),\n end_time: new Date(1729015200000),\n },\n primaryParticipant: { name: 'John Doe', email: 'johndoe@example.com' },\n },\n bubbles: true,\n });\n\n await nylasScheduling.bookButtonClickedHandler(detailsConfirmedEvent);\n await page.waitForChanges();\n expect(redirectSpy).toHaveBeenCalled();\n // Assert that the redirect happened with the correct URL (includes field_2 in the additional_values)\n expect(redirectSpy).toHaveBeenCalledWith(\n 'https://nylas.com?booking_id=8f9f5145-c40c-4477-8d30-5c43256ddb60&name=John+Doe&email=johndoe%40example.com&start_time=1728637.2&end_time=1728639&tz=America%2FToronto&language=en-US&additional_values=%7B%22dropdown%22%3A%22option+2%22%2C%22short_text%22%3A%22hello%22%2C%22field2%22%3A%22some+value%22%7D&config_id=19ca4a10-be05-4d1b-a830-5b639a362cef&location=Nylas+HQ&booking_ref=booking_ref',\n );\n });\n});\n"]}
@@ -16,6 +16,7 @@ import { RegisterComponent } from "../../../common/register-component";
16
16
  import { h, Host } from "@stencil/core";
17
17
  import { capitalizeFirstLetter, debug, formatBookedEventDate } from "../../../utils/utils";
18
18
  import { LANGUAGE_CODE_TO_LOCALE_MAP, TIMEZONE_MAP } from "../../../common/constants";
19
+ import i18next from "../../../utils/i18n";
19
20
  export class NylasSelectedEventCard {
20
21
  constructor() {
21
22
  this.themeConfig = undefined;
@@ -30,6 +31,11 @@ export class NylasSelectedEventCard {
30
31
  themeConfigChanged(newThemeConfig) {
31
32
  this.applyThemeConfig(newThemeConfig);
32
33
  }
34
+ selectedLanguageChangedHandler(newVal, oldVal) {
35
+ if (newVal === oldVal)
36
+ return;
37
+ i18next.changeLanguage(newVal);
38
+ }
33
39
  connectedCallback() { }
34
40
  disconnectedCallback() { }
35
41
  async componentWillLoad() {
@@ -62,9 +68,9 @@ export class NylasSelectedEventCard {
62
68
  }
63
69
  }
64
70
  render() {
65
- return (h(Host, { key: '22b7e4f0f55d7a75188ebd3e8cc009497ad5a598', part: "nsec" }, h("div", { key: '0082bd129fe4704e4bf9bcc82ab401f7c50237fe', class: "event-card", part: "nsec__card" }, h("div", { key: '37093be5b192f8a8a533cb677b432df2cec80d14', class: "calendar-icon", part: "nsec__icon" }, h("calendar-icon", { key: '253a63fa567065c7a12f6fc8b82333568b52b777' })), h("div", { key: 'a2d5218bd85c6f94652b0f24a11e68f53a8920d3', class: "nylas-selected-event-card__date", part: "nsec__date" }, this.selectedDate
71
+ return (h(Host, { key: '94fd07366e885e81fb62049c5a44fe6679897aba', part: "nsec" }, h("div", { key: '8ca223250ff59a898eae64b4eaf1ad24e690d3a7', class: "event-card", part: "nsec__card" }, h("div", { key: '77c0fbd4495f0811e5bb05ea95f59d4b2bad90af', class: "calendar-icon", part: "nsec__icon" }, h("calendar-icon", { key: '3c1a395ec15145153c3d0d4b4986aea9a7943ddf' })), h("div", { key: '1c5ed82612ce165f89bd240b21482c916dbf166b', class: "nylas-selected-event-card__date", part: "nsec__date" }, this.selectedDate
66
72
  ? capitalizeFirstLetter(formatBookedEventDate(this.selectedTimeslot?.start_time, this.selectedTimezone, LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en']))
67
- : '-'), h("div", { key: '2f11d6deedb50cb0d7b3e9791088266e06cdca1e', class: "nylas-selected-event-card__time", part: "nsec__time" }, this.startTime, " - ", this.endTime)), h("div", { key: '634bd96488b5b1a51064c9bf015b054648f43011', class: "event-timezone", part: "nsec__timezone" }, h("globe-icon", { key: 'b327dfa7747116da0ab29ddebcb6d20c82a0a80b' }), TIMEZONE_MAP[this.selectedTimezone])));
73
+ : '-'), h("div", { key: 'e62af1aba1c260d178f1cc95f3405e94448cdf29', class: "nylas-selected-event-card__time", part: "nsec__time" }, this.startTime, " - ", this.endTime)), h("div", { key: '6eea1eca90bde0bb49a747ad8ed3a5ca57971db4', class: "event-timezone", part: "nsec__timezone" }, h("globe-icon", { key: 'feac1b95d2177a39f84648ec0e8356026ebc9ef7' }), TIMEZONE_MAP[this.selectedTimezone])));
68
74
  }
69
75
  static get is() { return "nylas-selected-event-card"; }
70
76
  static get encapsulation() { return "shadow"; }
@@ -163,9 +169,15 @@ export class NylasSelectedEventCard {
163
169
  "type": "string",
164
170
  "mutable": false,
165
171
  "complexType": {
166
- "original": "string",
167
- "resolved": "string | undefined",
168
- "references": {}
172
+ "original": "LANGUAGE_CODE",
173
+ "resolved": "LANGUAGE_CODE.de | LANGUAGE_CODE.en | LANGUAGE_CODE.es | LANGUAGE_CODE.fr | LANGUAGE_CODE.ja | LANGUAGE_CODE.ko | LANGUAGE_CODE.nl | LANGUAGE_CODE.sv | LANGUAGE_CODE.zh | undefined",
174
+ "references": {
175
+ "LANGUAGE_CODE": {
176
+ "location": "import",
177
+ "path": "@/common/constants",
178
+ "id": "src/common/constants.ts::LANGUAGE_CODE"
179
+ }
180
+ }
169
181
  },
170
182
  "required": false,
171
183
  "optional": true,
@@ -206,6 +218,9 @@ export class NylasSelectedEventCard {
206
218
  return [{
207
219
  "propName": "themeConfig",
208
220
  "methodName": "themeConfigChanged"
221
+ }, {
222
+ "propName": "selectedLanguage",
223
+ "methodName": "selectedLanguageChangedHandler"
209
224
  }];
210
225
  }
211
226
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-selected-event-card.js","sourceRoot":"","sources":["../../../../src/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAIhF,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiB/E,MAAM,OAAO,sBAAsB;;;;;gCA0B6C,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;;;yBAWjG,EAAE;uBACJ,EAAE;;IAG7B,kBAAkB,CAAC,cAA2B;QAC5C,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,iBAAiB,KAAI,CAAC;IAEtB,oBAAoB,KAAI,CAAC;IAEzB,KAAK,CAAC,iBAAiB;QACrB,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;YACjD,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;YACjB,QAAQ,EAAE,IAAI,CAAC,gBAAgB;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAkB,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAgB,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,gBAAgB,CAAC,WAAyB;QACxC,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;IACH,CAAC;IAeD,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,qDAAC,IAAI,EAAC,MAAM;YACf,4DAAK,KAAK,EAAC,YAAY,EAAC,IAAI,EAAC,YAAY;gBACvC,4DAAK,KAAK,EAAC,eAAe,EAAC,IAAI,EAAC,YAAY;oBAC1C,uEAAiB,CACb;gBACN,4DAAK,KAAK,EAAC,iCAAiC,EAAC,IAAI,EAAC,YAAY,IAC3D,IAAI,CAAC,YAAY;oBAChB,CAAC,CAAC,qBAAqB,CACnB,qBAAqB,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAkB,EAAE,IAAI,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CACpJ;oBACH,CAAC,CAAC,GAAG,CACH;gBACN,4DAAK,KAAK,EAAC,iCAAiC,EAAC,IAAI,EAAC,YAAY;oBAC3D,IAAI,CAAC,SAAS;;oBAAK,IAAI,CAAC,OAAO,CAC5B,CACF;YACN,4DAAK,KAAK,EAAC,gBAAgB,EAAC,IAAI,EAAC,gBAAgB;gBAC/C,oEAAyB;gBACxB,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAChC,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF;AAzBC;IAbC,iBAAiB,CAAiG;QACjH,IAAI,EAAE,2BAA2B;QACjC,YAAY,EAAE,IAAI,GAAG,CAAC;YACpB,CAAC,wBAAwB,EAAE,cAAc,CAAC;YAC1C,CAAC,4BAA4B,EAAE,kBAAkB,CAAC;YAClD,CAAC,4BAA4B,EAAE,kBAAkB,CAAC;YAClD,CAAC,4BAA4B,EAAE,kBAAkB,CAAC;YAClD,CAAC,uBAAuB,EAAE,aAAa,CAAC;YACxC,CAAC,kBAAkB,EAAE,QAAQ,CAAC;SAC/B,CAAC;QACF,YAAY,EAAE,EAAE;QAChB,iBAAiB,EAAE,IAAI;KACxB,CAAC;;;;oDAyBD","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core';\nimport type { NylasSchedulerConnector } from '../../..';\nimport type { ThemeConfig, Timeslot } from '@nylas/core';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { capitalizeFirstLetter, debug, formatBookedEventDate } from '@/utils/utils';\nimport { LANGUAGE_CODE_TO_LOCALE_MAP, TIMEZONE_MAP } from '@/common/constants';\n\n/**\n * The `nylas-selected-event-card` component is a UI component that displays the selected event card.\n *\n * @part nsec - The selected event card component.\n * @part nsec__card - The card component.\n * @part nsec__icon - The calendar icon.\n * @part nsec__date - The date selected.\n * @part nsec__time - The timeslot selected.\n * @part nsec__timezone - The timezone selected.\n */\n@Component({\n tag: 'nylas-selected-event-card',\n styleUrl: 'nylas-selected-event-card.scss',\n shadow: true,\n})\nexport class NylasSelectedEventCard {\n /**\n * The host element.\n * Used to manage the host element of the provider.\n */\n @Element() private host!: HTMLNylasSelectedEventCardElement;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: any;\n\n /**\n * The selected date.\n */\n @Prop({ attribute: 'selected-date' }) readonly selectedDate?: Date;\n\n /**\n * The selected time.\n */\n @Prop({ attribute: 'selected-timeslot' }) readonly selectedTimeslot?: Timeslot;\n\n /**\n * The selected timezone.\n */\n @Prop({ attribute: 'selected-timezone' }) readonly selectedTimezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n /**\n * The selected language.\n */\n @Prop({ attribute: 'selected-language' }) readonly selectedLanguage?: string;\n /**\n * The 12-hour time format.\n */\n @Prop() hour12?: boolean;\n\n @State() startTime: string = '';\n @State() endTime: string = '';\n\n @Watch('themeConfig')\n themeConfigChanged(newThemeConfig: ThemeConfig) {\n this.applyThemeConfig(newThemeConfig);\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n async componentWillLoad() {\n debug(`[nylas-selected-event-card] Component will load`);\n }\n\n async componentDidLoad() {\n debug(`[nylas-selected-event-card] Component did load`);\n if (!this.selectedDate) {\n console.warn('[nylas-selected-event-card] \"selectedDate\" prop is not provided.');\n }\n if (!this.selectedTimeslot) {\n console.warn('[nylas-selected-event-card] \"selectedTimeslot\" prop is not provided.');\n }\n this.applyThemeConfig(this.themeConfig);\n const locale = LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en'];\n const timeFormat = new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n timeZone: this.selectedTimezone,\n hour12: this.hour12,\n });\n\n this.startTime = timeFormat.format(new Date(this.selectedTimeslot?.start_time as Date));\n this.endTime = timeFormat.format(new Date(this.selectedTimeslot?.end_time as Date));\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n @RegisterComponent<NylasSelectedEventCard, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-selected-event-card',\n stateToProps: new Map([\n ['scheduler.selectedDate', 'selectedDate'],\n ['scheduler.selectedTimeslot', 'selectedTimeslot'],\n ['scheduler.selectedTimezone', 'selectedTimezone'],\n ['scheduler.selectedLanguage', 'selectedLanguage'],\n ['scheduler.themeConfig', 'themeConfig'],\n ['scheduler.hour12', 'hour12'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host part=\"nsec\">\n <div class=\"event-card\" part=\"nsec__card\">\n <div class=\"calendar-icon\" part=\"nsec__icon\">\n <calendar-icon />\n </div>\n <div class=\"nylas-selected-event-card__date\" part=\"nsec__date\">\n {this.selectedDate\n ? capitalizeFirstLetter(\n formatBookedEventDate(this.selectedTimeslot?.start_time as Date, this.selectedTimezone, LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en']),\n )\n : '-'}\n </div>\n <div class=\"nylas-selected-event-card__time\" part=\"nsec__time\">\n {this.startTime} - {this.endTime}\n </div>\n </div>\n <div class=\"event-timezone\" part=\"nsec__timezone\">\n <globe-icon></globe-icon>\n {TIMEZONE_MAP[this.selectedTimezone]}\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"nylas-selected-event-card.js","sourceRoot":"","sources":["../../../../src/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core';\nimport type { NylasSchedulerConnector } from '../../..';\nimport type { ThemeConfig, Timeslot } from '@nylas/core';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { capitalizeFirstLetter, debug, formatBookedEventDate } from '@/utils/utils';\nimport { LANGUAGE_CODE, LANGUAGE_CODE_TO_LOCALE_MAP, TIMEZONE_MAP } from '@/common/constants';\nimport i18next from '@/utils/i18n';\n\n/**\n * The `nylas-selected-event-card` component is a UI component that displays the selected event card.\n *\n * @part nsec - The selected event card component.\n * @part nsec__card - The card component.\n * @part nsec__icon - The calendar icon.\n * @part nsec__date - The date selected.\n * @part nsec__time - The timeslot selected.\n * @part nsec__timezone - The timezone selected.\n */\n@Component({\n tag: 'nylas-selected-event-card',\n styleUrl: 'nylas-selected-event-card.scss',\n shadow: true,\n})\nexport class NylasSelectedEventCard {\n /**\n * The host element.\n * Used to manage the host element of the provider.\n */\n @Element() private host!: HTMLNylasSelectedEventCardElement;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: any;\n\n /**\n * The selected date.\n */\n @Prop({ attribute: 'selected-date' }) readonly selectedDate?: Date;\n\n /**\n * The selected time.\n */\n @Prop({ attribute: 'selected-timeslot' }) readonly selectedTimeslot?: Timeslot;\n\n /**\n * The selected timezone.\n */\n @Prop({ attribute: 'selected-timezone' }) readonly selectedTimezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n /**\n * The selected language.\n */\n @Prop({ attribute: 'selected-language' }) readonly selectedLanguage?: LANGUAGE_CODE;\n /**\n * The 12-hour time format.\n */\n @Prop() hour12?: boolean;\n\n @State() startTime: string = '';\n @State() endTime: string = '';\n\n @Watch('themeConfig')\n themeConfigChanged(newThemeConfig: ThemeConfig) {\n this.applyThemeConfig(newThemeConfig);\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n async componentWillLoad() {\n debug(`[nylas-selected-event-card] Component will load`);\n }\n\n async componentDidLoad() {\n debug(`[nylas-selected-event-card] Component did load`);\n if (!this.selectedDate) {\n console.warn('[nylas-selected-event-card] \"selectedDate\" prop is not provided.');\n }\n if (!this.selectedTimeslot) {\n console.warn('[nylas-selected-event-card] \"selectedTimeslot\" prop is not provided.');\n }\n this.applyThemeConfig(this.themeConfig);\n const locale = LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en'];\n const timeFormat = new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n timeZone: this.selectedTimezone,\n hour12: this.hour12,\n });\n\n this.startTime = timeFormat.format(new Date(this.selectedTimeslot?.start_time as Date));\n this.endTime = timeFormat.format(new Date(this.selectedTimeslot?.end_time as Date));\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n @RegisterComponent<NylasSelectedEventCard, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-selected-event-card',\n stateToProps: new Map([\n ['scheduler.selectedDate', 'selectedDate'],\n ['scheduler.selectedTimeslot', 'selectedTimeslot'],\n ['scheduler.selectedTimezone', 'selectedTimezone'],\n ['scheduler.selectedLanguage', 'selectedLanguage'],\n ['scheduler.themeConfig', 'themeConfig'],\n ['scheduler.hour12', 'hour12'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host part=\"nsec\">\n <div class=\"event-card\" part=\"nsec__card\">\n <div class=\"calendar-icon\" part=\"nsec__icon\">\n <calendar-icon />\n </div>\n <div class=\"nylas-selected-event-card__date\" part=\"nsec__date\">\n {this.selectedDate\n ? capitalizeFirstLetter(\n formatBookedEventDate(this.selectedTimeslot?.start_time as Date, this.selectedTimezone, LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en']),\n )\n : '-'}\n </div>\n <div class=\"nylas-selected-event-card__time\" part=\"nsec__time\">\n {this.startTime} - {this.endTime}\n </div>\n </div>\n <div class=\"event-timezone\" part=\"nsec__timezone\">\n <globe-icon></globe-icon>\n {TIMEZONE_MAP[this.selectedTimezone]}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-timeslot-picker.js","sourceRoot":"","sources":["../../../../src/components/scheduler/nylas-timeslot-picker/nylas-timeslot-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { debug, isSameDayTimezone } from '@/utils/utils';\nimport { Component, Element, Event, EventEmitter, Host, Method, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerConnector } from '../../..';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { AvailabilityTimeslot } from '@/stores/scheduler-store';\nimport type { ThemeConfig, Timeslot } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE_TO_LOCALE_MAP } from '@/common/constants';\n\n/**\n * The `nylas-timeslot-picker` component is a UI component that allows users to select a timeslot from a list of available timeslots.\n *\n * @slot timeslot-picker-cta-label - The label for the timeslot picker CTA. Default is \"Next\".\n * @part ntp - The timeslot picker component.\n * @part ntp__timeslot - The timeslot button.\n * @part ntp__timeslot--selected - The selected timeslot button.\n * @part ntp__button-primary - The timeslot picker CTA.\n * @part ntp__time-picker-wrapper - The timeslot picker wrapper.\n * @part ntp__timeslots - The timeslot picker timeslots.\n */\n@Component({\n tag: 'nylas-timeslot-picker',\n styleUrl: 'nylas-timeslot-picker.scss',\n shadow: true,\n})\nexport class NylasTimeslotPicker {\n /**\n * The host element.\n * Used to manage the host element of the provider.\n */\n @Element() private host!: HTMLNylasTimeslotPickerElement;\n /**\n * @standalone\n * The available timeslots.\n */\n @Prop({ attribute: 'availability' }) readonly availability?: AvailabilityTimeslot[];\n /**\n * @standalone\n * The loading state prop. Used to display loading state when fetching availability.\n */\n @Prop({ attribute: 'loading-state' }) readonly isLoading?: boolean;\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: any;\n /**\n * The selected timeslot.\n */\n @Prop({ attribute: 'selected-timeslot' }) readonly selectedTimeslot?: Timeslot;\n /**\n * The selected timezone.\n */\n @Prop({ attribute: 'selected-timezone' }) readonly selectedTimezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n /**\n * The selected date.\n */\n @Prop({ attribute: 'selected-date' }) readonly selectedDate?: Date = new Date();\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: string;\n /**\n * The 12-hour time format.\n */\n @Prop() hour12?: boolean;\n\n /**\n * This event is fired when a timeslot is selected.\n */\n @Event() readonly timeslotSelected!: EventEmitter<Timeslot>;\n /**\n * This event is fired when a timeslot is confirmed. By default, this will proceed to the booking form page.\n */\n @Event() readonly timeslotConfirmed!: EventEmitter<{ timeslot: Timeslot; host: HTMLNylasTimeslotPickerElement }>;\n\n @Event() readonly validateTimeslotError!: EventEmitter<{ error: string; type: 'error' | 'info' }>;\n\n @State() times: AvailabilityTimeslot[] = [];\n @State() hoveredTimeslotIndex?: number;\n @State() selectedTimeslotIndex?: string;\n\n @Watch('selectedLanguage')\n selectedLanguageChanged(newLanguage: string) {\n i18next.changeLanguage(newLanguage);\n }\n\n @Watch('selectedDate')\n selectedDateChanged(newVal: Date | null | undefined) {\n debug(`[nylas-timeslot-picker] Selected date changed`, { newVal });\n\n if (newVal) {\n this.selectedTimeslotIndex = '';\n if (typeof newVal !== 'undefined') {\n const availableTimes = this.availability?.filter(timeslot => isSameDayTimezone(timeslot.start_time, newVal, this.selectedTimezone)).map(timeslot => timeslot);\n this.times = availableTimes || [];\n }\n }\n }\n\n @Watch('availability')\n availabilityChanged(newVal: AvailabilityTimeslot[] | undefined) {\n debug(`[nylas-timeslot-picker] Available times changed`, { newVal, selectedDate: this.selectedDate });\n if (typeof newVal !== 'undefined') {\n const availableTimes = newVal\n ?.filter(timeslot => this.selectedDate && isSameDayTimezone(timeslot.start_time, this.selectedDate, this.selectedTimezone))\n .map(timeslot => timeslot);\n this.times = availableTimes || [];\n }\n }\n\n @Watch('themeConfig')\n themeConfigChanged(newThemeConfig: ThemeConfig) {\n this.applyThemeConfig(newThemeConfig);\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n async componentWillLoad() {\n debug(`[nylas-timeslot-picker] Component will load`, { selectedDate: this.selectedDate, availability: this.availability, times: this.times });\n }\n\n async componentDidLoad() {\n debug(`[nylas-timeslot-picker] Component did load`);\n const availableTimes = this.availability\n ?.filter(timeslot => this.selectedDate && isSameDayTimezone(timeslot.start_time, this.selectedDate, this.selectedTimezone))\n .map(timeslot => timeslot);\n this.times = availableTimes || [];\n this.applyThemeConfig(this.themeConfig);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n private getTimeslotId(timeslot: Timeslot, index: number) {\n const date = new Date(timeslot.start_time);\n const eventId = timeslot.event_id;\n return `${date.toLocaleDateString()}-${index}${eventId ? `-${eventId}` : ''}`;\n }\n\n private onClickSelectTime(timeslot: Timeslot, index: number) {\n debug(`[nylas-timeslot-picker] Time selected`, timeslot, index);\n this.selectedTimeslotIndex = this.getTimeslotId(timeslot, index);\n this.timeslotSelected.emit({\n start_time: timeslot.start_time,\n end_time: timeslot.end_time,\n emails: timeslot.emails,\n capacity: timeslot?.capacity,\n event_id: timeslot?.event_id,\n master_id: timeslot?.master_id,\n calendar_id: timeslot?.calendar_id,\n });\n }\n\n private handleConfirmedTimeslot = async (event: Event, timeslot: Timeslot | undefined) => {\n event.preventDefault();\n debug(`[nylas-timeslot-picker] Confirm timeslot`, timeslot);\n if (timeslot) {\n this.timeslotConfirmed.emit({ timeslot, host: this.host });\n }\n };\n\n @Method()\n async emitValidateTimeslotError(error: string, type: 'error' | 'info') {\n this.validateTimeslotError.emit({ error, type });\n }\n\n private handleMouseEnter = (index: number) => {\n this.hoveredTimeslotIndex = index;\n };\n\n private handleMouseLeave = () => {\n this.hoveredTimeslotIndex = -1;\n };\n\n private getTimeSlotLabel(timeslot: Timeslot) {\n const locale = LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en'];\n const timeFormat = new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n timeZone: this.selectedTimezone,\n hour12: this.hour12,\n });\n return `${timeFormat.format(timeslot.start_time)} - ${timeFormat.format(timeslot.end_time)}`;\n }\n\n @RegisterComponent<NylasTimeslotPicker, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-timeslot-picker',\n stateToProps: new Map([\n ['scheduler.selectedDate', 'selectedDate'],\n ['scheduler.availability', 'availability'],\n ['scheduler.selectedTimeslot', 'selectedTimeslot'],\n ['scheduler.selectedTimezone', 'selectedTimezone'],\n ['scheduler.selectedLanguage', 'selectedLanguage'],\n ['scheduler.isLoading', 'isLoading'],\n ['scheduler.themeConfig', 'themeConfig'],\n ['scheduler.hour12', 'hour12'],\n ]),\n eventToProps: {\n timeslotSelected: async (event: CustomEvent<Timeslot>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-timeslot-picker', 'timeslotSelected', event.detail);\n nylasSchedulerConnector.scheduler.selectTime(event.detail);\n },\n timeslotConfirmed: async (event: CustomEvent<{ timeslot: Timeslot; host: HTMLNylasTimeslotPickerElement }>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-timeslot-picker', 'timeslotConfirmed', event.detail);\n const { timeslot, host } = event.detail;\n if (timeslot && timeslot?.event_id && timeslot?.capacity) {\n const result = await nylasSchedulerConnector.scheduler.validateGroupEventTimeslot(timeslot);\n if (result && 'error' in result) {\n const errorMessage = result.error?.message || 'An error occurred while validating the timeslot';\n if (errorMessage === 'Event is full') {\n host.emitValidateTimeslotError(errorMessage, 'info');\n } else {\n host.emitValidateTimeslotError(errorMessage, 'error');\n }\n }\n } else {\n nylasSchedulerConnector.scheduler.toggleAdditionalData(true);\n }\n },\n validateTimeslotError: async (event: CustomEvent<{ error: string }>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-timeslot-picker', 'validateTimeslotError', event.detail);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const locale = LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en'];\n if (this.isLoading) {\n return (\n <Host>\n <div class={'loading'}>\n {new Array(6).fill(0).map((_, i) => (\n <div class={'timeslot-skeleton'} style={{ animationDelay: `${i * 20}ms` }} />\n ))}\n </div>\n </Host>\n );\n }\n\n if (this.availability && this.availability.length === 0) {\n return (\n <Host>\n <div class={'empty'}>\n <span>No dates available</span>\n </div>\n </Host>\n );\n }\n\n const filteredTimes = this.times.filter(timeslot => {\n const groupEvent = timeslot?.event_id || timeslot?.master_id;\n const showCapacity = typeof timeslot?.capacity === 'number' && timeslot?.capacity > 0;\n return !(groupEvent && !showCapacity);\n });\n\n if ((!this.times || this.times.length === 0 || filteredTimes.length === 0) && !!this.selectedDate) {\n return (\n <Host>\n <div class={'empty'}>\n <span>No time slots available for selected date</span>\n </div>\n </Host>\n );\n }\n\n if (!this.selectedDate) return <Host></Host>;\n\n return (\n <Host part=\"ntp\">\n <div class={'time-picker-wrapper'} part=\"ntp__time-picker-wrapper\">\n <div class={'timeslots'} part=\"ntp__timeslots\">\n {filteredTimes.map((timeslot, index) => {\n const showCapacity = typeof timeslot?.capacity === 'number' && timeslot?.capacity > 0;\n const isSelected = this.selectedTimeslotIndex == this.getTimeslotId(timeslot, index);\n return (\n <button\n part={`ntp__timeslot ${this.selectedTimeslot?.start_time?.getTime() === timeslot.start_time.getTime() ? 'ntp__timeslot--selected' : ''}`}\n class={{\n time: true,\n selected: typeof this.selectedTimeslot !== 'undefined' && isSelected,\n }}\n onClick={() => this.onClickSelectTime(timeslot, index)}\n onMouseEnter={() => this.handleMouseEnter(index)}\n onMouseLeave={() => this.handleMouseLeave()}\n >\n <div class=\"time-label\" part=\"ntp__time-label\">\n {this.hoveredTimeslotIndex == index || isSelected\n ? this.getTimeSlotLabel(timeslot)\n : timeslot.start_time.toLocaleTimeString(locale, { hour: '2-digit', minute: '2-digit', timeZone: this.selectedTimezone, hour12: this.hour12 })}\n <span class=\"spots\">{showCapacity ? i18next.t('spotsLeft', { count: timeslot?.capacity }) : null}</span>\n </div>\n </button>\n );\n })}\n </div>\n {this.selectedTimeslot && (\n <div class={'footer'}>\n <button-component variant={'primary'} onClick={(event: Event) => this.handleConfirmedTimeslot(event, this.selectedTimeslot)} part=\"ntp__button-primary\">\n <slot name=\"timeslot-picker-cta-label\">{i18next.t('nextButton')}</slot>\n </button-component>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"nylas-timeslot-picker.js","sourceRoot":"","sources":["../../../../src/components/scheduler/nylas-timeslot-picker/nylas-timeslot-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { debug, isSameDayTimezone } from '@/utils/utils';\nimport { Component, Element, Event, EventEmitter, Host, Method, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerConnector } from '../../..';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { AvailabilityTimeslot } from '@/stores/scheduler-store';\nimport type { ThemeConfig, Timeslot } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE, LANGUAGE_CODE_TO_LOCALE_MAP } from '@/common/constants';\n\n/**\n * The `nylas-timeslot-picker` component is a UI component that allows users to select a timeslot from a list of available timeslots.\n *\n * @slot timeslot-picker-cta-label - The label for the timeslot picker CTA. Default is \"Next\".\n * @part ntp - The timeslot picker component.\n * @part ntp__timeslot - The timeslot button.\n * @part ntp__timeslot--selected - The selected timeslot button.\n * @part ntp__button-primary - The timeslot picker CTA.\n * @part ntp__time-picker-wrapper - The timeslot picker wrapper.\n * @part ntp__timeslots - The timeslot picker timeslots.\n */\n@Component({\n tag: 'nylas-timeslot-picker',\n styleUrl: 'nylas-timeslot-picker.scss',\n shadow: true,\n})\nexport class NylasTimeslotPicker {\n /**\n * The host element.\n * Used to manage the host element of the provider.\n */\n @Element() private host!: HTMLNylasTimeslotPickerElement;\n /**\n * @standalone\n * The available timeslots.\n */\n @Prop({ attribute: 'availability' }) readonly availability?: AvailabilityTimeslot[];\n /**\n * @standalone\n * The loading state prop. Used to display loading state when fetching availability.\n */\n @Prop({ attribute: 'loading-state' }) readonly isLoading?: boolean;\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: any;\n /**\n * The selected timeslot.\n */\n @Prop({ attribute: 'selected-timeslot' }) readonly selectedTimeslot?: Timeslot;\n /**\n * The selected timezone.\n */\n @Prop({ attribute: 'selected-timezone' }) readonly selectedTimezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;\n /**\n * The selected date.\n */\n @Prop({ attribute: 'selected-date' }) readonly selectedDate?: Date = new Date();\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: string;\n /**\n * The 12-hour time format.\n */\n @Prop() hour12?: boolean;\n\n /**\n * This event is fired when a timeslot is selected.\n */\n @Event() readonly timeslotSelected!: EventEmitter<Timeslot>;\n /**\n * This event is fired when a timeslot is confirmed. By default, this will proceed to the booking form page.\n */\n @Event() readonly timeslotConfirmed!: EventEmitter<{ timeslot: Timeslot; host: HTMLNylasTimeslotPickerElement }>;\n\n @Event() readonly validateTimeslotError!: EventEmitter<{ error: string; type: 'error' | 'info' }>;\n\n @State() times: AvailabilityTimeslot[] = [];\n @State() hoveredTimeslotIndex?: number;\n @State() selectedTimeslotIndex?: string;\n\n @Watch('selectedLanguage')\n selectedLanguageChanged(newLanguage: LANGUAGE_CODE) {\n i18next.changeLanguage(newLanguage);\n }\n\n @Watch('selectedDate')\n selectedDateChanged(newVal: Date | null | undefined) {\n debug(`[nylas-timeslot-picker] Selected date changed`, { newVal });\n\n if (newVal) {\n this.selectedTimeslotIndex = '';\n if (typeof newVal !== 'undefined') {\n const availableTimes = this.availability?.filter(timeslot => isSameDayTimezone(timeslot.start_time, newVal, this.selectedTimezone)).map(timeslot => timeslot);\n this.times = availableTimes || [];\n }\n }\n }\n\n @Watch('availability')\n availabilityChanged(newVal: AvailabilityTimeslot[] | undefined) {\n debug(`[nylas-timeslot-picker] Available times changed`, { newVal, selectedDate: this.selectedDate });\n if (typeof newVal !== 'undefined') {\n const availableTimes = newVal\n ?.filter(timeslot => this.selectedDate && isSameDayTimezone(timeslot.start_time, this.selectedDate, this.selectedTimezone))\n .map(timeslot => timeslot);\n this.times = availableTimes || [];\n }\n }\n\n @Watch('themeConfig')\n themeConfigChanged(newThemeConfig: ThemeConfig) {\n this.applyThemeConfig(newThemeConfig);\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n async componentWillLoad() {\n debug(`[nylas-timeslot-picker] Component will load`, { selectedDate: this.selectedDate, availability: this.availability, times: this.times });\n }\n\n async componentDidLoad() {\n debug(`[nylas-timeslot-picker] Component did load`);\n const availableTimes = this.availability\n ?.filter(timeslot => this.selectedDate && isSameDayTimezone(timeslot.start_time, this.selectedDate, this.selectedTimezone))\n .map(timeslot => timeslot);\n this.times = availableTimes || [];\n this.applyThemeConfig(this.themeConfig);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n private getTimeslotId(timeslot: Timeslot, index: number) {\n const date = new Date(timeslot.start_time);\n const eventId = timeslot.event_id;\n return `${date.toLocaleDateString()}-${index}${eventId ? `-${eventId}` : ''}`;\n }\n\n private onClickSelectTime(timeslot: Timeslot, index: number) {\n debug(`[nylas-timeslot-picker] Time selected`, timeslot, index);\n this.selectedTimeslotIndex = this.getTimeslotId(timeslot, index);\n this.timeslotSelected.emit({\n start_time: timeslot.start_time,\n end_time: timeslot.end_time,\n emails: timeslot.emails,\n capacity: timeslot?.capacity,\n event_id: timeslot?.event_id,\n master_id: timeslot?.master_id,\n calendar_id: timeslot?.calendar_id,\n });\n }\n\n private handleConfirmedTimeslot = async (event: Event, timeslot: Timeslot | undefined) => {\n event.preventDefault();\n debug(`[nylas-timeslot-picker] Confirm timeslot`, timeslot);\n if (timeslot) {\n this.timeslotConfirmed.emit({ timeslot, host: this.host });\n }\n };\n\n @Method()\n async emitValidateTimeslotError(error: string, type: 'error' | 'info') {\n this.validateTimeslotError.emit({ error, type });\n }\n\n private handleMouseEnter = (index: number) => {\n this.hoveredTimeslotIndex = index;\n };\n\n private handleMouseLeave = () => {\n this.hoveredTimeslotIndex = -1;\n };\n\n private getTimeSlotLabel(timeslot: Timeslot) {\n const locale = LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en'];\n const timeFormat = new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n timeZone: this.selectedTimezone,\n hour12: this.hour12,\n });\n return `${timeFormat.format(timeslot.start_time)} - ${timeFormat.format(timeslot.end_time)}`;\n }\n\n @RegisterComponent<NylasTimeslotPicker, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-timeslot-picker',\n stateToProps: new Map([\n ['scheduler.selectedDate', 'selectedDate'],\n ['scheduler.availability', 'availability'],\n ['scheduler.selectedTimeslot', 'selectedTimeslot'],\n ['scheduler.selectedTimezone', 'selectedTimezone'],\n ['scheduler.selectedLanguage', 'selectedLanguage'],\n ['scheduler.isLoading', 'isLoading'],\n ['scheduler.themeConfig', 'themeConfig'],\n ['scheduler.hour12', 'hour12'],\n ]),\n eventToProps: {\n timeslotSelected: async (event: CustomEvent<Timeslot>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-timeslot-picker', 'timeslotSelected', event.detail);\n nylasSchedulerConnector.scheduler.selectTime(event.detail);\n },\n timeslotConfirmed: async (event: CustomEvent<{ timeslot: Timeslot; host: HTMLNylasTimeslotPickerElement }>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-timeslot-picker', 'timeslotConfirmed', event.detail);\n const { timeslot, host } = event.detail;\n if (timeslot && timeslot?.event_id && timeslot?.capacity) {\n const result = await nylasSchedulerConnector.scheduler.validateGroupEventTimeslot(timeslot);\n if (result && 'error' in result) {\n const errorMessage = result.error?.message || 'An error occurred while validating the timeslot';\n if (errorMessage === 'Event is full') {\n host.emitValidateTimeslotError(errorMessage, 'info');\n } else {\n host.emitValidateTimeslotError(errorMessage, 'error');\n }\n }\n } else {\n nylasSchedulerConnector.scheduler.toggleAdditionalData(true);\n }\n },\n validateTimeslotError: async (event: CustomEvent<{ error: string }>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-timeslot-picker', 'validateTimeslotError', event.detail);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const locale = LANGUAGE_CODE_TO_LOCALE_MAP[this.selectedLanguage || 'en'];\n if (this.isLoading) {\n return (\n <Host>\n <div class={'loading'}>\n {new Array(6).fill(0).map((_, i) => (\n <div class={'timeslot-skeleton'} style={{ animationDelay: `${i * 20}ms` }} />\n ))}\n </div>\n </Host>\n );\n }\n\n if (this.availability && this.availability.length === 0) {\n return (\n <Host>\n <div class={'empty'}>\n <span>No dates available</span>\n </div>\n </Host>\n );\n }\n\n const filteredTimes = this.times.filter(timeslot => {\n const groupEvent = timeslot?.event_id || timeslot?.master_id;\n const showCapacity = typeof timeslot?.capacity === 'number' && timeslot?.capacity > 0;\n return !(groupEvent && !showCapacity);\n });\n\n if ((!this.times || this.times.length === 0 || filteredTimes.length === 0) && !!this.selectedDate) {\n return (\n <Host>\n <div class={'empty'}>\n <span>No time slots available for selected date</span>\n </div>\n </Host>\n );\n }\n\n if (!this.selectedDate) return <Host></Host>;\n\n return (\n <Host part=\"ntp\">\n <div class={'time-picker-wrapper'} part=\"ntp__time-picker-wrapper\">\n <div class={'timeslots'} part=\"ntp__timeslots\">\n {filteredTimes.map((timeslot, index) => {\n const showCapacity = typeof timeslot?.capacity === 'number' && timeslot?.capacity > 0;\n const isSelected = this.selectedTimeslotIndex == this.getTimeslotId(timeslot, index);\n return (\n <button\n part={`ntp__timeslot ${this.selectedTimeslot?.start_time?.getTime() === timeslot.start_time.getTime() ? 'ntp__timeslot--selected' : ''}`}\n class={{\n time: true,\n selected: typeof this.selectedTimeslot !== 'undefined' && isSelected,\n }}\n onClick={() => this.onClickSelectTime(timeslot, index)}\n onMouseEnter={() => this.handleMouseEnter(index)}\n onMouseLeave={() => this.handleMouseLeave()}\n >\n <div class=\"time-label\" part=\"ntp__time-label\">\n {this.hoveredTimeslotIndex == index || isSelected\n ? this.getTimeSlotLabel(timeslot)\n : timeslot.start_time.toLocaleTimeString(locale, { hour: '2-digit', minute: '2-digit', timeZone: this.selectedTimezone, hour12: this.hour12 })}\n <span class=\"spots\">{showCapacity ? i18next.t('spotsLeft', { count: timeslot?.capacity }) : null}</span>\n </div>\n </button>\n );\n })}\n </div>\n {this.selectedTimeslot && (\n <div class={'footer'}>\n <button-component variant={'primary'} onClick={(event: Event) => this.handleConfirmedTimeslot(event, this.selectedTimeslot)} part=\"ntp__button-primary\">\n <slot name=\"timeslot-picker-cta-label\">{i18next.t('nextButton')}</slot>\n </button-component>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -31,6 +31,8 @@ export class NylasAdditionalParticipants {
31
31
  this.includeOrganizerAsParticipant = true;
32
32
  this.isRoundRobinConfig = false;
33
33
  this.error = '';
34
+ this.requiredError = '';
35
+ this.patternError = '';
34
36
  }
35
37
  elementNameChangedHandler(newValue) {
36
38
  debug('nylas-additional-participants', 'elementNameChangedHandler', newValue);
@@ -49,6 +51,8 @@ export class NylasAdditionalParticipants {
49
51
  if (newVal === oldVal)
50
52
  return;
51
53
  i18next.changeLanguage(newVal);
54
+ this.requiredError = i18next.t('fieldRequired', { field: i18next.t('email') });
55
+ this.patternError = i18next.t('invalidInputFormat', { field: i18next.t('email') });
52
56
  if (this.error) {
53
57
  this.error = i18next.t('nylasAdditionalParticipants.error');
54
58
  }
@@ -98,8 +102,8 @@ export class NylasAdditionalParticipants {
98
102
  return;
99
103
  }
100
104
  else if (!participant && !EMAIL_REGEX.test(event.detail.value)) {
101
- this.isInternalsAvailable && this.internals.setValidity({ customError: true }, 'Please enter a valid email address');
102
- this.participantErrors[index] = 'Please enter a valid email address';
105
+ this.isInternalsAvailable && this.internals.setValidity({ customError: true }, i18next.t('nylasAdditionalParticipants.error_email'));
106
+ this.participantErrors[index] = i18next.t('nylasAdditionalParticipants.error_email');
103
107
  this.participants[index].is_valid = false;
104
108
  this.participants = [...this.participants];
105
109
  return;
@@ -177,17 +181,17 @@ export class NylasAdditionalParticipants {
177
181
  });
178
182
  }
179
183
  render() {
180
- return (h(Host, { key: 'e5bf56a74ed62d66965f84a42680421cf225153a', part: "nadtnlpart" }, h("nylas-form-card", { key: '89c24d867dd1165e92b18dc97fbd63ff71066d43', exportparts: "nfc, nfc__header" }, h("h3", { key: '4b22a68a32ae9837bbc34677d298e85d2195e98e', slot: "header-title", class: "nylas-additional-participants__title", part: "nadtnlpart__title" }, i18next.t('nylasAdditionalParticipants.headerTitle')), h("p", { key: 'a366560957ab5b9121c2fed9f11764abc7a80734', slot: "header-subtitle", class: "nylas-additional-participants__subtitle", part: "nadtnlpart__subtitle" }, i18next.t('nylasAdditionalParticipants.headerSubTitle')), h("div", { key: 'ff1da62576ffd233f3fefedf561aa27a0507a744', slot: "content", class: "nylas-additional-participants__content", part: "nadtnlpart__content" }, h("div", { key: '46a0f90f4081c4d594c28ad10be43559b0ec4594' }, this.participants.map((participant, index) => {
184
+ return (h(Host, { key: '4d547fe2488b5019af5d63d9691a740e8efb5f43', part: "nadtnlpart" }, h("nylas-form-card", { key: '627e61e9080b989b5871d798339e718e68bb639d', exportparts: "nfc, nfc__header" }, h("h3", { key: '447dc3fee1b9e4014a7aa6e54a01dbf84d4893ac', slot: "header-title", class: "nylas-additional-participants__title", part: "nadtnlpart__title" }, i18next.t('nylasAdditionalParticipants.headerTitle')), h("p", { key: 'f116167709f9464422d4dedba69a1db6c3b55b0e', slot: "header-subtitle", class: "nylas-additional-participants__subtitle", part: "nadtnlpart__subtitle" }, i18next.t('nylasAdditionalParticipants.headerSubTitle')), h("div", { key: 'f231168dcab771100276cbd76710ec0446cdfa8c', slot: "content", class: "nylas-additional-participants__content", part: "nadtnlpart__content" }, h("div", { key: '47f0cf5882fa4f88a09ba74b70136e7911cae75f' }, this.participants.map((participant, index) => {
181
185
  return (h("div", { class: 'nylas-additional-participants__input_group', part: "nadtnlpart__input_group" }, !participant.is_organizer && h("label", null, `${i18next.t('nylasAdditionalParticipants.participant')} ${index}`), h("div", { part: "nadtnlpart__input_wrapper", class: {
182
186
  'nylas-additional-participants__input_wrapper': true,
183
187
  'nylas-additional-participants__input_wrapper_organizer': participant?.is_organizer === true,
184
188
  'nylas-additional-participants__input_wrapper_invalid': participant.is_valid === false,
185
189
  'error': participant.is_valid === false,
186
- } }, h("div", { class: { 'nylas-additional-participants__input': true, 'organizer': participant?.is_organizer === true }, part: "nadtnlpart__input" }, participant.is_organizer ? (h("input-component", { class: 'label-input', name: `${index}`, key: index, label: i18next.t('nylasAdditionalParticipants.organizer'), required: false, readOnly: participant.is_organizer, defaultValue: participant.email }, this.isRoundRobinConfig && (h("div", { class: "required-input", slot: "additional-input" }, h("input", { type: "checkbox", name: `organizer_participant`, id: `organizer_participant`, onClick: () => {
190
+ } }, h("div", { class: { 'nylas-additional-participants__input': true, 'organizer': participant?.is_organizer === true }, part: "nadtnlpart__input" }, participant.is_organizer ? (h("input-component", { class: 'label-input', name: `${index}`, key: index, label: i18next.t('nylasAdditionalParticipants.organizer'), required: false, requiredError: this.requiredError, patternError: this.patternError, readOnly: participant.is_organizer, defaultValue: participant.email }, this.isRoundRobinConfig && (h("div", { class: "required-input", slot: "additional-input" }, h("input", { type: "checkbox", name: `organizer_participant`, id: `organizer_participant`, onClick: () => {
187
191
  this.includeOrganizerAsParticipant = !this.includeOrganizerAsParticipant;
188
192
  this.updateFormValue();
189
193
  }, checked: this.includeOrganizerAsParticipant }), h("label", { htmlFor: `organizer_participant`, "aria-label": "Include as participant" }, h("span", { class: "org-as-participant", part: "nadtnlpart__org-as-participant" }, i18next.t('nylasAdditionalParticipants.organizerAsParticipant')), h("tooltip-component", { id: "organizer_participant_tooltip" }, h("info-icon", { slot: "tooltip-icon" }), h("span", { slot: "tooltip-content" }, h("strong", null, i18next.t('nylasAdditionalParticipants.tooltip.includeOrganizer'), ":"), ' ', i18next.t('nylasAdditionalParticipants.tooltip.includeOrganizerDesc'), " ", h("br", null), h("strong", null, i18next.t('nylasAdditionalParticipants.tooltip.excludeOrganizer'), ":"), ' ', i18next.t('nylasAdditionalParticipants.tooltip.excludeOrganizerDesc')))))))) : (h("input-dropdown", { id: `${index}`, name: `${index}`, filterable: true, inputValue: participant.email, options: this.getArrayDifference(this.participantOptions || [], this.participants) })), !participant.is_organizer && (h("button", { onClick: () => this.removeParticipant(index), part: "nadtnlpart__remove-participant" }, h("close-icon", null))))), !participant.is_valid && (h("p", { class: "nylas-additional-participants__error", part: "nadtnlpart__error" }, this.participantErrors[index]))));
190
- }), h("p", { key: '435290314ef0093403a2f6e246cc9c397b6f31f0', class: "nylas-additional-participants__error", part: "nadtnlpart__error" }, this.error)), h("button", { key: '15b2a6224f5a8c79ff094b4b6626bdb080395050', class: "nylas-additional-participants__add", part: "nadtnlpart__add-participant", onClick: () => this.addParticipant() }, h("add-circle-icon", { key: '0d1de27342ca1b0882c4f3874834f3ac96b8df2c' }), ' ', h("span", { key: 'b8a39bdf5ed3fdc998efe5a3ed0610abf28cb49f' }, this.participants.length > 1
194
+ }), h("p", { key: 'd2b56b8aedb241aa6f30d7a1cd6bbb65c3b3df83', class: "nylas-additional-participants__error", part: "nadtnlpart__error" }, this.error)), h("button", { key: 'e9ae0842ddbfa5e99216104204e944931c234d2a', class: "nylas-additional-participants__add", part: "nadtnlpart__add-participant", onClick: () => this.addParticipant() }, h("add-circle-icon", { key: '72c4f18b78923e41c5bf85203dfddce1faf69c66' }), ' ', h("span", { key: 'aa8f679690c7a591d120bafb6d3df96e74db4b5e' }, this.participants.length > 1
191
195
  ? i18next.t('nylasAdditionalParticipants.addParticipant', { context: 'next' })
192
196
  : i18next.t('nylasAdditionalParticipants.addParticipant', { context: 'first' })))))));
193
197
  }
@@ -397,7 +401,9 @@ export class NylasAdditionalParticipants {
397
401
  "participantErrors": {},
398
402
  "includeOrganizerAsParticipant": {},
399
403
  "isRoundRobinConfig": {},
400
- "error": {}
404
+ "error": {},
405
+ "requiredError": {},
406
+ "patternError": {}
401
407
  };
402
408
  }
403
409
  static get events() {