@nylas/web-elements 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) 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/calendar-agenda-fill-icon_36.cjs.entry.js +36 -21
  6. package/dist/cjs/calendar-agenda-fill-icon_36.cjs.entry.js.map +1 -1
  7. package/dist/cjs/{calendar-check-icon_2.cjs.entry.js → calendar-check-icon.cjs.entry.js} +3 -19
  8. package/dist/cjs/calendar-check-icon.cjs.entry.js.map +1 -0
  9. package/dist/cjs/checkbox-component_2.cjs.entry.js +1 -1
  10. package/dist/cjs/checkbox-group_4.cjs.entry.js +3 -3
  11. package/dist/cjs/checkmark-circle-icon.cjs.entry.js +24 -0
  12. package/dist/cjs/checkmark-circle-icon.cjs.entry.js.map +1 -0
  13. package/dist/cjs/checkmark-icon_15.cjs.entry.js +11 -7
  14. package/dist/cjs/checkmark-icon_15.cjs.entry.js.map +1 -1
  15. package/dist/cjs/{customParseFormat-bb3a23c5.js → customParseFormat-95790293.js} +2 -2
  16. package/dist/cjs/{customParseFormat-bb3a23c5.js.map → customParseFormat-95790293.js.map} +1 -1
  17. package/dist/cjs/{feedbackSync-1c5ec9aa.js → feedbackSync-4ed99749.js} +2 -2
  18. package/dist/cjs/{feedbackSync-1c5ec9aa.js.map → feedbackSync-4ed99749.js.map} +1 -1
  19. package/dist/cjs/globe-icon_2.cjs.entry.js +2 -2
  20. package/dist/cjs/google-logo-icon_6.cjs.entry.js +8 -8
  21. package/dist/cjs/index-e07e3a7e.js +6 -2
  22. package/dist/cjs/index.cjs.js +2 -2
  23. package/dist/cjs/{index.es-c563f3ba.js → index.es-62161daa.js} +2 -2
  24. package/dist/cjs/{index.es-c563f3ba.js.map → index.es-62161daa.js.map} +1 -1
  25. package/dist/cjs/input-component.cjs.entry.js +1 -1
  26. package/dist/cjs/input-dropdown_2.cjs.entry.js +1 -1
  27. package/dist/cjs/loader.cjs.js +1 -1
  28. package/dist/cjs/multi-select-dropdown.cjs.entry.js +1 -1
  29. package/dist/cjs/{nylas-api-request-4d148ff1.js → nylas-api-request-03d7f604.js} +2 -2
  30. package/dist/cjs/{nylas-api-request-4d148ff1.js.map → nylas-api-request-03d7f604.js.map} +1 -1
  31. package/dist/cjs/nylas-booked-event-card_11.cjs.entry.js +82 -25
  32. package/dist/cjs/nylas-booked-event-card_11.cjs.entry.js.map +1 -1
  33. package/dist/cjs/nylas-form-card.cjs.entry.js +2 -2
  34. package/dist/cjs/nylas-notification_2.cjs.entry.js +1 -1
  35. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +6 -6
  36. package/dist/cjs/nylas-scheduling.cjs.entry.js +42 -14
  37. package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
  38. package/dist/cjs/nylas-web-elements.cjs.js +1 -1
  39. package/dist/cjs/{register-component-70744713.js → register-component-f4ad9751.js} +2 -2
  40. package/dist/cjs/{register-component-70744713.js.map → register-component-f4ad9751.js.map} +1 -1
  41. package/dist/cjs/textarea-component.cjs.entry.js +1 -1
  42. package/dist/cjs/{utils-dd3b6f4c.js → utils-03b13826.js} +154 -55
  43. package/dist/cjs/utils-03b13826.js.map +1 -0
  44. package/dist/collection/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.js +11 -3
  45. package/dist/collection/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.js.map +1 -1
  46. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js +49 -4
  47. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js.map +1 -1
  48. package/dist/collection/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.js +3 -3
  49. package/dist/collection/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.js.map +1 -1
  50. package/dist/collection/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.js +37 -1
  51. package/dist/collection/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.js.map +1 -1
  52. package/dist/collection/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.js +34 -2
  53. package/dist/collection/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.js.map +1 -1
  54. package/dist/collection/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.css +1 -1
  55. package/dist/collection/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.js +34 -1
  56. package/dist/collection/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.js.map +1 -1
  57. package/dist/collection/components/scheduler/nylas-date-picker/nylas-date-picker.js +10 -4
  58. package/dist/collection/components/scheduler/nylas-date-picker/nylas-date-picker.js.map +1 -1
  59. package/dist/collection/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.js +10 -2
  60. package/dist/collection/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.js.map +1 -1
  61. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.css +13 -0
  62. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js +66 -7
  63. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js.map +1 -1
  64. package/dist/collection/components/scheduler/nylas-scheduling/test/nylas-scheduling.spec.js +33 -0
  65. package/dist/collection/components/scheduler/nylas-scheduling/test/nylas-scheduling.spec.js.map +1 -1
  66. package/dist/collection/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.js +20 -5
  67. package/dist/collection/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.js.map +1 -1
  68. package/dist/collection/components/scheduler/nylas-timeslot-picker/nylas-timeslot-picker.js.map +1 -1
  69. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js +12 -6
  70. package/dist/collection/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.js.map +1 -1
  71. package/dist/collection/components/scheduler-editor/nylas-booking-confirmation-redirect/nylas-booking-confirmation-redirect.js +12 -6
  72. package/dist/collection/components/scheduler-editor/nylas-booking-confirmation-redirect/nylas-booking-confirmation-redirect.js.map +1 -1
  73. package/dist/collection/components/scheduler-editor/nylas-confirmation-email/nylas-confirmation-email.js +6 -3
  74. package/dist/collection/components/scheduler-editor/nylas-confirmation-email/nylas-confirmation-email.js.map +1 -1
  75. package/dist/collection/components/scheduler-editor/nylas-custom-event-slug/nylas-custom-event-slug.js +14 -8
  76. package/dist/collection/components/scheduler-editor/nylas-custom-event-slug/nylas-custom-event-slug.js.map +1 -1
  77. package/dist/collection/components/scheduler-editor/nylas-reminder-emails/nylas-reminder-emails.js +8 -4
  78. package/dist/collection/components/scheduler-editor/nylas-reminder-emails/nylas-reminder-emails.js.map +1 -1
  79. package/dist/components/nylas-additional-participants2.js +12 -6
  80. package/dist/components/nylas-additional-participants2.js.map +1 -1
  81. package/dist/components/nylas-booked-event-card2.js +13 -6
  82. package/dist/components/nylas-booked-event-card2.js.map +1 -1
  83. package/dist/components/nylas-booking-confirmation-redirect2.js +12 -6
  84. package/dist/components/nylas-booking-confirmation-redirect2.js.map +1 -1
  85. package/dist/components/nylas-booking-form2.js +28 -6
  86. package/dist/components/nylas-booking-form2.js.map +1 -1
  87. package/dist/components/nylas-cancel-booking-form2.js +13 -3
  88. package/dist/components/nylas-cancel-booking-form2.js.map +1 -1
  89. package/dist/components/nylas-cancelled-event-card2.js +12 -3
  90. package/dist/components/nylas-cancelled-event-card2.js.map +1 -1
  91. package/dist/components/nylas-confirmation-email2.js +6 -3
  92. package/dist/components/nylas-confirmation-email2.js.map +1 -1
  93. package/dist/components/nylas-confirmed-event-card2.js +18 -8
  94. package/dist/components/nylas-confirmed-event-card2.js.map +1 -1
  95. package/dist/components/nylas-custom-event-slug2.js +15 -9
  96. package/dist/components/nylas-custom-event-slug2.js.map +1 -1
  97. package/dist/components/nylas-date-picker2.js +1 -1
  98. package/dist/components/nylas-date-picker2.js.map +1 -1
  99. package/dist/components/nylas-editor-tabs-group2.js +2 -2
  100. package/dist/components/nylas-editor-tabs2.js +2 -2
  101. package/dist/components/nylas-organizer-confirmation-card2.js +12 -5
  102. package/dist/components/nylas-organizer-confirmation-card2.js.map +1 -1
  103. package/dist/components/nylas-reminder-emails2.js +8 -4
  104. package/dist/components/nylas-reminder-emails2.js.map +1 -1
  105. package/dist/components/nylas-scheduler-editor.js +2 -2
  106. package/dist/components/nylas-scheduling.js +42 -12
  107. package/dist/components/nylas-scheduling.js.map +1 -1
  108. package/dist/components/nylas-selected-event-card2.js +12 -5
  109. package/dist/components/nylas-selected-event-card2.js.map +1 -1
  110. package/dist/components/nylas-timeslot-picker2.js.map +1 -1
  111. package/dist/components/utils.js +153 -54
  112. package/dist/components/utils.js.map +1 -1
  113. package/dist/esm/{abstract-provider-efe136bd.js → abstract-provider-bdb7d9b4.js} +2 -2
  114. package/dist/esm/{abstract-provider-efe136bd.js.map → abstract-provider-bdb7d9b4.js.map} +1 -1
  115. package/dist/esm/calendar-agenda-fill-icon_36.entry.js +36 -21
  116. package/dist/esm/calendar-agenda-fill-icon_36.entry.js.map +1 -1
  117. package/dist/esm/{calendar-check-icon_2.entry.js → calendar-check-icon.entry.js} +4 -19
  118. package/dist/esm/calendar-check-icon.entry.js.map +1 -0
  119. package/dist/esm/checkbox-component_2.entry.js +1 -1
  120. package/dist/esm/checkbox-group_4.entry.js +3 -3
  121. package/dist/esm/checkmark-circle-icon.entry.js +20 -0
  122. package/dist/esm/checkmark-circle-icon.entry.js.map +1 -0
  123. package/dist/esm/checkmark-icon_15.entry.js +11 -7
  124. package/dist/esm/checkmark-icon_15.entry.js.map +1 -1
  125. package/dist/esm/{customParseFormat-edc38d83.js → customParseFormat-f0d21eb3.js} +2 -2
  126. package/dist/esm/{customParseFormat-edc38d83.js.map → customParseFormat-f0d21eb3.js.map} +1 -1
  127. package/dist/esm/{feedbackSync-e4378c0b.js → feedbackSync-b9c9e719.js} +2 -2
  128. package/dist/esm/{feedbackSync-e4378c0b.js.map → feedbackSync-b9c9e719.js.map} +1 -1
  129. package/dist/esm/globe-icon_2.entry.js +2 -2
  130. package/dist/esm/google-logo-icon_6.entry.js +8 -8
  131. package/dist/esm/index-091600eb.js +6 -2
  132. package/dist/esm/{index.es-6a9d55cf.js → index.es-ccb2a286.js} +2 -2
  133. package/dist/esm/{index.es-6a9d55cf.js.map → index.es-ccb2a286.js.map} +1 -1
  134. package/dist/esm/index.js +2 -2
  135. package/dist/esm/input-component.entry.js +1 -1
  136. package/dist/esm/input-dropdown_2.entry.js +1 -1
  137. package/dist/esm/loader.js +1 -1
  138. package/dist/esm/multi-select-dropdown.entry.js +1 -1
  139. package/dist/esm/{nylas-api-request-f2e4e9b6.js → nylas-api-request-7d702661.js} +2 -2
  140. package/dist/esm/{nylas-api-request-f2e4e9b6.js.map → nylas-api-request-7d702661.js.map} +1 -1
  141. package/dist/esm/nylas-booked-event-card_11.entry.js +82 -25
  142. package/dist/esm/nylas-booked-event-card_11.entry.js.map +1 -1
  143. package/dist/esm/nylas-form-card.entry.js +2 -2
  144. package/dist/esm/nylas-notification_2.entry.js +1 -1
  145. package/dist/esm/nylas-scheduler-editor.entry.js +6 -6
  146. package/dist/esm/nylas-scheduling.entry.js +43 -15
  147. package/dist/esm/nylas-scheduling.entry.js.map +1 -1
  148. package/dist/esm/nylas-web-elements.js +1 -1
  149. package/dist/esm/{register-component-a1c3d7b4.js → register-component-9d4ceee5.js} +2 -2
  150. package/dist/esm/{register-component-a1c3d7b4.js.map → register-component-9d4ceee5.js.map} +1 -1
  151. package/dist/esm/textarea-component.entry.js +1 -1
  152. package/dist/esm/{utils-b7f9cbcc.js → utils-fb8a9ce4.js} +154 -55
  153. package/dist/esm/utils-fb8a9ce4.js.map +1 -0
  154. package/dist/nylas-web-elements/index.esm.js +1 -1
  155. package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
  156. package/dist/nylas-web-elements/nylas-web-elements.esm.js.map +1 -1
  157. package/dist/nylas-web-elements/{p-3ce8e281.js → p-094be30f.js} +2 -2
  158. package/dist/nylas-web-elements/p-18c58ea1.entry.js +2 -0
  159. package/dist/nylas-web-elements/p-18c58ea1.entry.js.map +1 -0
  160. package/dist/nylas-web-elements/{p-c12c18b2.entry.js → p-1dbaf879.entry.js} +2 -2
  161. package/dist/nylas-web-elements/p-2830522f.entry.js +2 -0
  162. package/dist/nylas-web-elements/p-2830522f.entry.js.map +1 -0
  163. package/dist/nylas-web-elements/{p-35297f33.entry.js → p-3b56d656.entry.js} +2 -2
  164. package/dist/nylas-web-elements/{p-8e7882a1.js → p-3c8b7ba1.js} +2 -2
  165. package/dist/nylas-web-elements/{p-3204882f.entry.js → p-3f5e1e6b.entry.js} +2 -2
  166. package/dist/nylas-web-elements/{p-5aae729f.js → p-4c1fafb4.js} +2 -2
  167. package/dist/nylas-web-elements/p-522270a2.entry.js +2 -0
  168. package/dist/nylas-web-elements/p-522270a2.entry.js.map +1 -0
  169. package/dist/nylas-web-elements/p-67e936ce.entry.js +2 -0
  170. package/dist/nylas-web-elements/p-67e936ce.entry.js.map +1 -0
  171. package/dist/nylas-web-elements/{p-9e11eb2c.js → p-6d8e2c6b.js} +2 -2
  172. package/dist/nylas-web-elements/{p-3362cf82.entry.js → p-8f82f281.entry.js} +2 -2
  173. package/dist/nylas-web-elements/p-920812bd.entry.js +8 -0
  174. package/dist/nylas-web-elements/p-920812bd.entry.js.map +1 -0
  175. package/dist/nylas-web-elements/{p-b40f7a77.entry.js → p-a42f41f7.entry.js} +2 -2
  176. package/dist/nylas-web-elements/{p-8340d845.entry.js → p-aad611b4.entry.js} +2 -2
  177. package/dist/nylas-web-elements/{p-6e56eb3f.js → p-ab88518b.js} +2 -2
  178. package/dist/nylas-web-elements/{p-5cf6301e.entry.js → p-b3500bf1.entry.js} +2 -2
  179. package/dist/nylas-web-elements/{p-4d8f9740.entry.js → p-b6d863e0.entry.js} +2 -2
  180. package/dist/nylas-web-elements/{p-50c255fa.entry.js → p-b8cf836f.entry.js} +2 -2
  181. package/dist/nylas-web-elements/{p-996c827d.entry.js → p-bf37be06.entry.js} +2 -2
  182. package/dist/nylas-web-elements/p-de4b01ac.entry.js +2 -0
  183. package/dist/nylas-web-elements/p-de4b01ac.entry.js.map +1 -0
  184. package/dist/nylas-web-elements/{p-308e7adb.entry.js → p-f42e87c6.entry.js} +3 -3
  185. package/dist/nylas-web-elements/{p-dea32251.js → p-f4825eb1.js} +2 -2
  186. package/dist/nylas-web-elements/p-faa30369.js +14 -0
  187. package/dist/nylas-web-elements/{p-59e4ab2d.js.map → p-faa30369.js.map} +1 -1
  188. package/dist/types/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.d.ts +2 -0
  189. package/dist/types/components/scheduler/nylas-booking-form/nylas-booking-form.d.ts +7 -0
  190. package/dist/types/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.d.ts +3 -0
  191. package/dist/types/components/scheduler/nylas-cancelled-event-card/nylas-cancelled-event-card.d.ts +3 -1
  192. package/dist/types/components/scheduler/nylas-confirmed-event-card/nylas-confirmed-event-card.d.ts +3 -1
  193. package/dist/types/components/scheduler/nylas-date-picker/nylas-date-picker.d.ts +2 -1
  194. package/dist/types/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.d.ts +2 -0
  195. package/dist/types/components/scheduler/nylas-scheduling/nylas-scheduling.d.ts +6 -0
  196. package/dist/types/components/scheduler/nylas-selected-event-card/nylas-selected-event-card.d.ts +3 -1
  197. package/dist/types/components/scheduler/nylas-timeslot-picker/nylas-timeslot-picker.d.ts +2 -1
  198. package/dist/types/components/scheduler-editor/nylas-additional-participants/nylas-additional-participants.d.ts +2 -0
  199. package/dist/types/components/scheduler-editor/nylas-booking-confirmation-redirect/nylas-booking-confirmation-redirect.d.ts +2 -0
  200. package/dist/types/components/scheduler-editor/nylas-custom-event-slug/nylas-custom-event-slug.d.ts +2 -0
  201. package/dist/types/components.d.ts +46 -6
  202. package/package.json +1 -1
  203. package/dist/cjs/calendar-check-icon_2.cjs.entry.js.map +0 -1
  204. package/dist/cjs/utils-dd3b6f4c.js.map +0 -1
  205. package/dist/esm/calendar-check-icon_2.entry.js.map +0 -1
  206. package/dist/esm/utils-b7f9cbcc.js.map +0 -1
  207. package/dist/nylas-web-elements/p-2b52b854.entry.js +0 -2
  208. package/dist/nylas-web-elements/p-2b52b854.entry.js.map +0 -1
  209. package/dist/nylas-web-elements/p-59e4ab2d.js +0 -14
  210. package/dist/nylas-web-elements/p-8a3965ba.entry.js +0 -2
  211. package/dist/nylas-web-elements/p-8a3965ba.entry.js.map +0 -1
  212. package/dist/nylas-web-elements/p-97128be4.entry.js +0 -8
  213. package/dist/nylas-web-elements/p-97128be4.entry.js.map +0 -1
  214. package/dist/nylas-web-elements/p-d69f9d47.entry.js +0 -2
  215. package/dist/nylas-web-elements/p-d69f9d47.entry.js.map +0 -1
  216. package/dist/nylas-web-elements/p-dcc8ca35.entry.js +0 -2
  217. package/dist/nylas-web-elements/p-dcc8ca35.entry.js.map +0 -1
  218. /package/dist/nylas-web-elements/{p-3ce8e281.js.map → p-094be30f.js.map} +0 -0
  219. /package/dist/nylas-web-elements/{p-c12c18b2.entry.js.map → p-1dbaf879.entry.js.map} +0 -0
  220. /package/dist/nylas-web-elements/{p-35297f33.entry.js.map → p-3b56d656.entry.js.map} +0 -0
  221. /package/dist/nylas-web-elements/{p-8e7882a1.js.map → p-3c8b7ba1.js.map} +0 -0
  222. /package/dist/nylas-web-elements/{p-3204882f.entry.js.map → p-3f5e1e6b.entry.js.map} +0 -0
  223. /package/dist/nylas-web-elements/{p-5aae729f.js.map → p-4c1fafb4.js.map} +0 -0
  224. /package/dist/nylas-web-elements/{p-9e11eb2c.js.map → p-6d8e2c6b.js.map} +0 -0
  225. /package/dist/nylas-web-elements/{p-3362cf82.entry.js.map → p-8f82f281.entry.js.map} +0 -0
  226. /package/dist/nylas-web-elements/{p-b40f7a77.entry.js.map → p-a42f41f7.entry.js.map} +0 -0
  227. /package/dist/nylas-web-elements/{p-8340d845.entry.js.map → p-aad611b4.entry.js.map} +0 -0
  228. /package/dist/nylas-web-elements/{p-6e56eb3f.js.map → p-ab88518b.js.map} +0 -0
  229. /package/dist/nylas-web-elements/{p-5cf6301e.entry.js.map → p-b3500bf1.entry.js.map} +0 -0
  230. /package/dist/nylas-web-elements/{p-4d8f9740.entry.js.map → p-b6d863e0.entry.js.map} +0 -0
  231. /package/dist/nylas-web-elements/{p-50c255fa.entry.js.map → p-b8cf836f.entry.js.map} +0 -0
  232. /package/dist/nylas-web-elements/{p-996c827d.entry.js.map → p-bf37be06.entry.js.map} +0 -0
  233. /package/dist/nylas-web-elements/{p-308e7adb.entry.js.map → p-f42e87c6.entry.js.map} +0 -0
  234. /package/dist/nylas-web-elements/{p-dea32251.js.map → p-f4825eb1.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-booking-form.spec.js","sourceRoot":"","sources":["../../../../../src/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wDAAwD,CAAC;AACxF,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,wDAAwD,CAAC;AAExF,MAAM,cAAc,GAAG;IACrB,SAAS,EAAE;QACT,wBAAwB,EAAE,EAAE;QAC5B,uBAAuB,EAAE,CAAC;QAC1B,kBAAkB,EAAE,EAAE;QACtB,yBAAyB,EAAE,KAAK;QAChC,yBAAyB,EAAE,KAAK;QAChC,sBAAsB,EAAE,KAAK;QAC7B,iBAAiB,EAAE;YACjB,gBAAgB,EAAE;gBAChB,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,8BAA8B;aACxC;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,gBAAgB;gBACvB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC;aACT;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,gBAAgB;gBACvB,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;aACvB;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC;aACT;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE,cAAc;gBACrB,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC;aACT;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC;aACvB;YACD,UAAU,EAAE;gBACV,KAAK,EAAE,kBAAkB;gBACzB,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,CAAC;aACT;SACF;QACD,cAAc,EAAE;YACd,iBAAiB,EAAE,EAAE;SACtB;KACF;IACD,SAAS,EAAE;QACT,KAAK,EAAE,gBAAgB;QACvB,IAAI,EAAE,WAAW;KAClB;CACF,CAAC;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,UAAU,CAAC,GAAG,EAAE;QAEd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,IAAI,eAAe,CAAC;IAEpB,UAAU,CAAC,GAAG,EAAE;QAEd,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QAEb,eAAe,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,WAAW,GAAG;YAClB,kBAAkB,EAAE;gBAClB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,sBAAsB;aAC9B;SACF,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACpC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC5J,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;QAC7B,SAAS,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5C,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,2CAA2C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC9J,UAAU,CAAC,KAAK,GAAG,eAAe,CAAC;QACnC,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAG7C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAoB,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU;YACzC,EAAE,aAAa,CAAC,uEAAuE,CAAC;YACxF,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAoB,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAC1C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,6BAA6B,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,sDAAsD,CAAqB,CAAC;QACxJ,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAElH,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAC3E,6BAA6B,CAAC,KAAK,GAAG,gBAAgB,CAAC;QAEvD,IAAI,CAAC,IAAI,EAAE,aAAa,CACtB,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACvC,MAAM,EAAE;gBACN,KAAK,EAAE,6BAA6B,CAAC,KAAK;gBAC1C,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,kBAAkB;aAC1B;SACF,CAAC,CACH,CAAC;QAEF,MAAM,aAAa,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,iDAAiD,CAAqB,CAAC;QACnI,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,IAAI,EAAE,aAAa,CACtB,IAAI,WAAW,CAAC,0BAA0B,EAAE;YAC1C,MAAM,EAAE;gBACN,OAAO,EAAE,aAAa,CAAC,OAAO;gBAC9B,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,gBAAgB;aACxB;SACF,CAAC,CACH,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG;YACtB,kBAAkB,EAAE;gBAClB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,qBAAqB;aAC7B;YACD,gBAAgB,EAAE;gBAChB,gBAAgB,EAAE;oBAChB,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,OAAO;iBACd;aACF;SACF,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,6BAA6B,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,sDAAsD,CAAqB,CAAC;QACxJ,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAElH,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAE9D,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,CAAC;YACtH,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG;YACtB,kBAAkB,EAAE;gBAClB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,qBAAqB;gBAC5B,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,IAAI;aACpB;YACD,gBAAgB,EAAE;gBAChB,gBAAgB,EAAE;oBAChB,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,IAAI;iBACf;gBACD,QAAQ,EAAE;oBACR,KAAK,EAAE,MAAM;oBACb,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,IAAI;iBACf;gBACD,QAAQ,EAAE;oBACR,KAAK,EAAE,IAAI;oBACX,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,IAAI;iBACf;gBACD,SAAS,EAAE;oBACT,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,iBAAiB;oBACvB,QAAQ,EAAE,IAAI;iBACf;gBACD,YAAY,EAAE;oBACZ,KAAK,EAAE,IAAI;oBACX,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,IAAI;iBACf;aACF;SACF,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,kBAAkB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAqB,CAAC;QACjI,MAAM,SAAS,GAAG,kBAAkB,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC5F,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAE9C,MAAM,mBAAmB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,2CAA2C,CAAqB,CAAC;QACnI,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC9F,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACxD,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,6BAA6B,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,sDAAsD,CAAqB,CAAC;QACxJ,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAElH,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC9D,MAAM,CAAC,oBAAoB,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEzD,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,iBAAiB,CAA8B,CAAC;QACvG,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAsB,CAAC;QACzF,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAiC,CAAC;QAC7G,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QACtF,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAEjD,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAgC,CAAC;QAC9G,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QACrF,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,oBAAoB,CAAiC,CAAC;QAC7G,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAwB,CAAC;QAC5F,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAsB,CAAC;QAChG,cAAc,CAAC,KAAK,EAAE,CAAC;QAEvB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,gBAAgB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC,mDAAmD,CAAiC,CAAC;QACvJ,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAGH,MAAM,cAAc,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAsB,CAAC;QAChG,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,MAAM,gBAAgB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC,sBAAsB,CAAiC,CAAC;QAC1H,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAGH,MAAM,cAAc,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAsB,CAAC;QAChG,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,iBAAiB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,eAAe,CAAsB,CAAC;QACtG,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,MAAM,gBAAgB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,gBAAgB,CAAC,sBAAsB,CAAiC,CAAC;QAC1H,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAElC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;QACzD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAE3D,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,aAAa,CAAqB,CAAC;QAClK,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;QAE7B,IAAI,CAAC,IAAI,EAAE,aAAa,CACtB,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACvC,MAAM,EAAE;gBACN,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CAAC,CACH,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,2CAA2C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,aAAa,CAAqB,CAAC;QACpK,UAAU,CAAC,KAAK,GAAG,sBAAsB,CAAC;QAE1C,IAAI,CAAC,IAAI,EAAE,aAAa,CACtB,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACvC,MAAM,EAAE;gBACN,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE;aACV;SACF,CAAC,CACH,CAAC;QAEF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAsB,CAAC;QACvF,MAAM,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;QACrE,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,oBAAoB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAIH,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC5J,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,2CAA2C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAE9J,SAAS,CAAC,KAAK,EAAE,CAAC;QAClB,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC;QACzB,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAIH,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC5J,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;QAC7B,SAAS,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAoB,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,IAAI,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,yDAAyD,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAoB,CAAC;QAChL,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QAGhC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;QACrB,SAAS,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,yDAAyD,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAoB,CAAC;QAC5K,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,0BAA0B,CAAqB,CAAC;QAC/K,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;QAC7B,SAAS,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAG5C,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU;YACvC,EAAE,aAAa,CAAC,2CAA2C,CAAC;YAC5D,EAAE,UAAU,EAAE,aAAa,CAAC,2BAA2B,CAAqB,CAAC;QAC/E,UAAU,CAAC,KAAK,GAAG,sBAAsB,CAAC;QAC1C,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7C,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAoB,CAAC;QAC5E,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,IAAI,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU;YACvC,EAAE,aAAa,CAAC,uEAAuE,CAAC;YACxF,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAoB,CAAC;QAC/D,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QAGhC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QACtB,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAoB,CAAC;QACxE,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU;YACnC,EAAE,aAAa,CAAC,uEAAuE,CAAC;YACxF,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAoB,CAAC;QAC/D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;YAC9C,IAAI,EAAE,2CAA2C;SAClD,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC5J,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;QAC7B,SAAS,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE5C,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,2CAA2C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC9J,UAAU,CAAC,KAAK,GAAG,sBAAsB,CAAC;QAC1C,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAG7C,MAAM,cAAc,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,YAAY,CAAsB,CAAC;QAChG,cAAc,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,eAAe,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,oDAAoD,CAAqB,CAAC;QAGxI,eAAe,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,MAAM,YAAY,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,wDAAwD,CAAyB,CAAC;QAC7I,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAG5D,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC;QACxC,eAAe,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAoB,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,wBAAwB,GAAG;YAC/B,IAAI,EAAE,EAAE;YACR,gBAAgB,EAAE,sCAAsC;YACxD,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE;gBACT,wBAAwB,EAAE,EAAE;gBAC5B,uBAAuB,EAAE,CAAC;gBAC1B,kBAAkB,EAAE,EAAE;gBACtB,gBAAgB,EAAE,gDAAgD;gBAClE,gBAAgB,EAAE,4CAA4C;gBAC9D,0BAA0B,EAAE,6CAA6C;gBACzE,yBAAyB,EAAE,EAAE;gBAC7B,yBAAyB,EAAE,KAAK;gBAChC,yBAAyB,EAAE,KAAK;gBAChC,sBAAsB,EAAE,KAAK;gBAC7B,mBAAmB,EAAE,EAAE;gBACvB,iBAAiB,EAAE;oBACjB,2BAA2B,EAAE;wBAC3B,KAAK,EAAE,gBAAgB;wBACvB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,CAAC;qBACT;oBACD,mCAAmC,EAAE;wBACnC,KAAK,EAAE,oBAAoB;wBAC3B,IAAI,EAAE,cAAc;wBACpB,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,YAAY;wBACrB,KAAK,EAAE,CAAC;qBACT;oBACD,cAAc,EAAE;wBACd,OAAO,EAAE,QAAQ;wBACjB,KAAK,EAAE,wBAAwB;wBAC/B,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,cAAc;wBACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;qBAC/C;oBACD,mCAAmC,EAAE;wBACnC,KAAK,EAAE,iBAAiB;wBACxB,IAAI,EAAE,iBAAiB;wBACvB,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,CAAC;qBACT;iBACF;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,EAAE;oBACR,iBAAiB,EAAE,EAAE;iBACtB;aACF;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,gBAAgB;gBACvB,IAAI,EAAE,WAAW;aAClB;YACD,YAAY,EAAE,SAAS;YACvB,OAAO,EAAE;gBACP,YAAY,EAAE;oBACZ;wBACE,KAAK,EAAE,gBAAgB;wBACvB,YAAY,EAAE,IAAI;wBAClB,IAAI,EAAE,WAAW;wBACjB,YAAY,EAAE;4BACZ,YAAY,EAAE,CAAC,gBAAgB,CAAC;yBACjC;wBACD,OAAO,EAAE;4BACP,WAAW,EAAE,gBAAgB;yBAC9B;wBACD,QAAQ,EAAE,iBAAiB;qBAC5B;iBACF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,oBAAoB;iBAC5B;gBACD,QAAQ,EAAE,iBAAiB;gBAC3B,cAAc,EAAE,IAAI;gBACpB,mBAAmB,EAAE,EAAE;gBACvB,iBAAiB,EAAE;oBACjB;wBACE,KAAK,EAAE,cAAc;wBACrB,IAAI,EAAE,UAAU;qBACjB;iBACF;gBACD,iBAAiB,EAAE;oBACjB,2BAA2B,EAAE,KAAK;oBAClC,mCAAmC,EAAE,YAAY;iBAClD;gBACD,WAAW,EAAE,kBAAkB;gBAC/B,gBAAgB,EAAE,EAAE;gBACpB,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,cAAc,EAAE,iBAAiB;wBACjC,YAAY,EAAE,iBAAiB;wBAC/B,MAAM,EAAE,UAAU;wBAClB,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;wBACvC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;qBACtC;oBACD,QAAQ,EAAE,EAAE;iBACb;gBACD,eAAe,EAAE;oBACf,KAAK,EAAE,gBAAgB;oBACvB,YAAY,EAAE,IAAI;oBAClB,IAAI,EAAE,WAAW;oBACjB,YAAY,EAAE;wBACZ,YAAY,EAAE,CAAC,gBAAgB,CAAC;qBACjC;oBACD,OAAO,EAAE;wBACP,WAAW,EAAE,gBAAgB;qBAC9B;oBACD,QAAQ,EAAE,iBAAiB;iBAC5B;aACF;YACD,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,CAAC;YACjE,QAAQ,EAAE,GAAG,EAAE,CAAC,0BAAoB,cAAc,EAAE,wBAAwB,GAAI;SACjF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QAEpC,MAAM,eAAe,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,mDAAmD,CAAqB,CAAC;QACvI,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,mDAAmD,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC1K,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAExD,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAoB,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,iBAAiB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,sDAAsD,CAAiC,CAAC;QACxJ,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAwB,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;QAE/C,QAAQ,CAAC,KAAK,GAAG,qBAAqB,CAAC;QACvC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACrD,MAAM,EAAE;gBACN,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,IAAI,EAAE,mCAAmC;gBACzC,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,iBAAiB;aACzB;SACF,CAAC,CAAC;QACF,IAAI,CAAC,YAA4C,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACvF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG;YACV,gBAAgB,EAAE;gBAChB,2BAA2B,EAAE,KAAK;gBAClC,mCAAmC,EAAE,YAAY;gBACjD,cAAc,EAAE,QAAQ;gBACxB,mCAAmC,EAAE,qBAAqB;aAC3D;YACD,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,cAAc;iBACrB;aACF;YACD,kBAAkB,EAAE;gBAClB,KAAK,EAAE,oBAAoB;gBAC3B,IAAI,EAAE,gBAAgB;aACvB;SACF,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;QACxG,MAAM,wBAAwB,GAAG;YAC/B,IAAI,EAAE,EAAE;YACR,gBAAgB,EAAE,sCAAsC;YACxD,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE;gBACT,wBAAwB,EAAE,EAAE;gBAC5B,uBAAuB,EAAE,CAAC;gBAC1B,kBAAkB,EAAE,EAAE;gBACtB,gBAAgB,EAAE,gDAAgD;gBAClE,gBAAgB,EAAE,4CAA4C;gBAC9D,0BAA0B,EAAE,6CAA6C;gBACzE,yBAAyB,EAAE,EAAE;gBAC7B,yBAAyB,EAAE,KAAK;gBAChC,yBAAyB,EAAE,KAAK;gBAChC,sBAAsB,EAAE,KAAK;gBAC7B,mBAAmB,EAAE,EAAE;gBACvB,iBAAiB,EAAE;oBACjB,2BAA2B,EAAE;wBAC3B,KAAK,EAAE,gBAAgB;wBACvB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,CAAC;qBACT;oBACD,mCAAmC,EAAE;wBACnC,KAAK,EAAE,oBAAoB;wBAC3B,IAAI,EAAE,cAAc;wBACpB,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,YAAY;wBACrB,KAAK,EAAE,CAAC;qBACT;oBACD,cAAc,EAAE;wBACd,OAAO,EAAE,QAAQ;wBACjB,KAAK,EAAE,wBAAwB;wBAC/B,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,cAAc;wBACpB,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;qBAC/C;oBACD,mCAAmC,EAAE;wBACnC,KAAK,EAAE,iBAAiB;wBACxB,IAAI,EAAE,iBAAiB;wBACvB,QAAQ,EAAE,IAAI;wBACd,KAAK,EAAE,CAAC;qBACT;iBACF;gBACD,cAAc,EAAE;oBACd,IAAI,EAAE,EAAE;oBACR,iBAAiB,EAAE,EAAE;iBACtB;aACF;YACD,SAAS,EAAE;gBACT,KAAK,EAAE,gBAAgB;gBACvB,IAAI,EAAE,WAAW;aAClB;YACD,YAAY,EAAE,SAAS;YACvB,OAAO,EAAE;gBACP,YAAY,EAAE;oBACZ;wBACE,KAAK,EAAE,gBAAgB;wBACvB,YAAY,EAAE,IAAI;wBAClB,IAAI,EAAE,WAAW;wBACjB,YAAY,EAAE;4BACZ,YAAY,EAAE,CAAC,gBAAgB,CAAC;yBACjC;wBACD,OAAO,EAAE;4BACP,WAAW,EAAE,gBAAgB;yBAC9B;wBACD,QAAQ,EAAE,iBAAiB;qBAC5B;iBACF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,gBAAgB;oBACtB,KAAK,EAAE,oBAAoB;iBAC5B;gBACD,QAAQ,EAAE,iBAAiB;gBAC3B,cAAc,EAAE,IAAI;gBACpB,mBAAmB,EAAE,EAAE;gBACvB,iBAAiB,EAAE;oBACjB;wBACE,KAAK,EAAE,cAAc;wBACrB,IAAI,EAAE,UAAU;qBACjB;iBACF;gBACD,iBAAiB,EAAE;oBACjB,2BAA2B,EAAE,KAAK;oBAClC,mCAAmC,EAAE,YAAY;oBACjD,cAAc,EAAE,OAAO;iBACxB;gBACD,WAAW,EAAE,kBAAkB;gBAC/B,gBAAgB,EAAE,EAAE;gBACpB,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,cAAc,EAAE,iBAAiB;wBACjC,YAAY,EAAE,iBAAiB;wBAC/B,MAAM,EAAE,UAAU;wBAClB,UAAU,EAAE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;wBACvC,QAAQ,EAAE,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;qBACtC;oBACD,QAAQ,EAAE,EAAE;iBACb;gBACD,eAAe,EAAE;oBACf,KAAK,EAAE,gBAAgB;oBACvB,YAAY,EAAE,IAAI;oBAClB,IAAI,EAAE,WAAW;oBACjB,YAAY,EAAE;wBACZ,YAAY,EAAE,CAAC,gBAAgB,CAAC;qBACjC;oBACD,OAAO,EAAE;wBACP,WAAW,EAAE,gBAAgB;qBAC9B;oBACD,QAAQ,EAAE,iBAAiB;iBAC5B;aACF;YACD,UAAU,EAAE,EAAE;SACf,CAAC;QACF,MAAM,WAAW,GAAG;YAClB,kBAAkB,EAAE;gBAClB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,gBAAgB;aACxB;YACD,gBAAgB,EAAE;gBAChB,2BAA2B,EAAE;oBAC3B,KAAK,EAAE,KAAK;iBACb;gBACD,mCAAmC,EAAE;oBACnC,KAAK,EAAE,YAAY;oBACnB,QAAQ,EAAE,IAAI;iBACf;aACF;SACF,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,CAAC;YACjE,QAAQ,EAAE,GAAG,EAAE,CAAC,0BAAoB,cAAc,EAAE,wBAAwB,GAAI;SACjF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACpC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;QAEpC,MAAM,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,0CAA0C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC5J,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,2CAA2C,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC9J,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAEnD,MAAM,eAAe,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,mDAAmD,CAAqB,CAAC;QACvI,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEtD,MAAM,cAAc,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,mDAAmD,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAqB,CAAC;QAC1K,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAExD,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,MAAM,CAAoB,CAAC;QAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,iBAAiB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,sDAAsD,CAAiC,CAAC;QACxJ,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAwB,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;QAE/C,QAAQ,CAAC,KAAK,GAAG,qBAAqB,CAAC;QACvC,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,uBAAuB,EAAE;YACrD,MAAM,EAAE;gBACN,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,IAAI,EAAE,mCAAmC;gBACzC,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,iBAAiB;aACzB;SACF,CAAC,CAAC;QACF,IAAI,CAAC,YAA4C,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACvF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAExC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG;YACV,gBAAgB,EAAE;gBAChB,2BAA2B,EAAE,KAAK;gBAClC,mCAAmC,EAAE,YAAY;gBACjD,cAAc,EAAE,OAAO;gBACvB,mCAAmC,EAAE,qBAAqB;aAC3D;YACD,MAAM,EAAE;gBACN;oBACE,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,cAAc;iBACrB;aACF;YACD,kBAAkB,EAAE;gBAClB,KAAK,EAAE,gBAAgB;gBACvB,IAAI,EAAE,UAAU;aACjB;SACF,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { NylasBookingForm } from '../nylas-booking-form';\nimport { InputComponent } from '../../../design-system/input-component/input-component';\nimport { h } from '@stencil/core';\nimport { RadioButtonGroup } from '../../../design-system/radio-button-group/radio-button-group';\nimport { CheckboxComponent } from '../../../design-system/checkbox-component/checkbox-component';\nimport { TextareaComponent } from '../../../design-system/textarea-component/textarea-component';\nimport { SelectDropdown } from '../../../design-system/select-dropdown/select-dropdown';\n\nconst configSettings = {\n scheduler: {\n available_days_in_future: 30,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n additional_fields: {\n additional_email: {\n label: 'Additional email',\n type: 'email',\n required: false,\n order: 2,\n default: 'additional_email@example.com',\n },\n checkbox: {\n label: 'Checkbox Label',\n type: 'checkbox',\n required: false,\n order: 6,\n },\n dropdown: {\n label: 'Dropdown Label',\n type: 'dropdown',\n required: false,\n order: 3,\n options: ['Yes', 'No'],\n },\n long_text: {\n label: 'Long text Label',\n type: 'multi_line_text',\n required: false,\n order: 5,\n },\n phone_number: {\n label: 'Phone Number',\n type: 'phone_number',\n required: false,\n order: 1,\n },\n radio_button: {\n label: 'Radio Button Label',\n type: 'radio_button',\n required: false,\n order: 7,\n options: ['Yes', 'No'],\n },\n short_text: {\n label: 'Short Text Label',\n type: 'text',\n required: false,\n order: 4,\n },\n },\n email_template: {\n booking_confirmed: {},\n },\n },\n organizer: {\n email: 'test@nylas.com',\n name: 'Test User',\n },\n};\n\ndescribe('nylas-booking-form', () => {\n beforeEach(() => {\n // Clear and reset the mock before each test if needed\n jest.clearAllMocks();\n });\n let consoleErrorSpy;\n\n beforeEach(() => {\n // Spy on console.error before each test\n consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});\n });\n\n afterEach(() => {\n // Restore the original console.error after each test\n consoleErrorSpy.mockRestore();\n });\n\n it('renders correctly with initial props', async () => {\n const bookingInfo = {\n primaryParticipant: {\n name: 'John Doe',\n email: 'john.doe@example.com',\n },\n };\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.bookingInfo = bookingInfo;\n await page.waitForChanges();\n expect(page.rootInstance.name).toEqual('John Doe');\n expect(page.rootInstance.email).toEqual('john.doe@example.com');\n expect(page.root).toMatchSnapshot();\n });\n\n it('renders an email error message when email is invalid', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n emailInput.value = 'invalid-email';\n emailInput.dispatchEvent(new Event('input'));\n\n // Submit the form to trigger validation\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n const errorMessage = page?.root?.shadowRoot\n ?.querySelector('.input-wrapper:nth-child(2) [part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n console.debug(errorMessage.className);\n expect(errorMessage.textContent).toBe('Email has invalid format.');\n });\n\n it('renders correctly with additional fields from the config', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.configSettings = configSettings;\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const additionalEmailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"additional_email\"]') as HTMLInputElement;\n const additionalEmailInput = additionalEmailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n expect(additionalEmailInput.value).not.toBeNull();\n expect(additionalEmailInput.value).toEqual('additional_email@example.com');\n additionalEmailInputComponent.value = 'abcd@gmail.com';\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: additionalEmailInputComponent.value,\n name: 'additional_email',\n error: '',\n label: 'Additional email',\n },\n }),\n );\n\n const checkboxInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__checkbox-component\"][id=\"checkbox\"]') as HTMLInputElement;\n checkboxInput.checked = true;\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormCheckboxToggled', {\n detail: {\n checked: checkboxInput.checked,\n name: 'checkbox',\n error: '',\n label: 'Checkbox Label',\n },\n }),\n );\n\n await page.waitForChanges();\n expect(page.rootInstance.additionalFields).toEqual({ additional_email: 'abcd@gmail.com', checkbox: 'true' });\n });\n\n it('renders the values passed in the booking info by overriding the defaults', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.configSettings = configSettings;\n page.root.bookingInfo = {\n primaryParticipant: {\n name: 'John Doe',\n email: 'johndoe@example.com',\n },\n additionalFields: {\n additional_email: {\n value: 'xyz@example.com',\n type: 'email',\n },\n },\n };\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const additionalEmailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"additional_email\"]') as HTMLInputElement;\n const additionalEmailInput = additionalEmailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n expect(additionalEmailInput.value).not.toBeNull();\n expect(additionalEmailInput.value).toEqual('xyz@example.com');\n\n await page.waitForChanges();\n });\n\n it('renders the fields as read only if bookingInfo passes readOnly additional fields', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent, RadioButtonGroup, CheckboxComponent, TextareaComponent, SelectDropdown],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.configSettings = configSettings;\n page.root.bookingInfo = {\n primaryParticipant: {\n name: 'John Doe',\n email: 'johndoe@example.com',\n nameReadOnly: true,\n emailReadOnly: true,\n },\n additionalFields: {\n additional_email: {\n value: 'xyz@example.com',\n type: 'email',\n readOnly: true,\n },\n checkbox: {\n value: 'true',\n type: 'checkbox',\n readOnly: true,\n },\n dropdown: {\n value: 'No',\n type: 'dropdown',\n readOnly: true,\n },\n long_text: {\n value: 'Long text Label',\n type: 'multi_line_text',\n readOnly: true,\n },\n radio_button: {\n value: 'No',\n type: 'radio_button',\n readOnly: true,\n },\n },\n };\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const nameInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]') as HTMLInputElement;\n const nameInput = nameInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(nameInput.value).not.toBeNull();\n expect(nameInput.value).toEqual('John Doe');\n expect(nameInput).toHaveAttribute('readOnly');\n\n const emailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]') as HTMLInputElement;\n const emailInput = emailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(emailInput.value).not.toBeNull();\n expect(emailInput.value).toEqual('johndoe@example.com');\n expect(emailInput).toHaveAttribute('readOnly');\n\n const additionalEmailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"additional_email\"]') as HTMLInputElement;\n const additionalEmailInput = additionalEmailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n expect(additionalEmailInput.value).not.toBeNull();\n expect(additionalEmailInput.value).toEqual('xyz@example.com');\n expect(additionalEmailInput).toHaveAttribute('readOnly');\n\n const dropdown = page?.root?.shadowRoot?.querySelector('select-dropdown') as HTMLSelectDropdownElement;\n const dropdownButton = dropdown.shadowRoot?.querySelector('button') as HTMLButtonElement;\n expect(dropdownButton).toHaveAttribute('disabled');\n\n const checkbox = page?.root?.shadowRoot?.querySelector('checkbox-component') as HTMLCheckboxComponentElement;\n const checkboxInput = checkbox.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(checkboxInput).toHaveAttribute('disabled');\n expect(checkboxInput).toHaveAttribute('checked');\n\n const radioGroup = page?.root?.shadowRoot?.querySelector('radio-button-group') as HTMLRadioButtonGroupElement;\n const radioInput = radioGroup.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(radioInput).toHaveAttribute('disabled');\n\n const textarea = page?.root?.shadowRoot?.querySelector('textarea-component') as HTMLTextareaComponentElement;\n const textareaInput = textarea.shadowRoot?.querySelector('textarea') as HTMLTextAreaElement;\n expect(textareaInput).toHaveAttribute('readonly');\n });\n\n xit('renders guest email input on add guest button click', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n\n await page.waitForChanges();\n\n const guestEmailInputs = page?.root?.shadowRoot?.querySelectorAll('[part=\"nbf__input-textfield\"][id^=\"guest-email-\"]') as NodeListOf<HTMLInputElement>;\n expect(guestEmailInputs.length).toEqual(1);\n });\n\n xit('allows multiple guest emails to be added', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Simulate clicking the 'Add Guest' button twice\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n addGuestButton.click();\n await page.waitForChanges();\n\n // Check if two guest email inputs are present\n const guestEmailInputs = page?.root?.shadowRoot?.querySelectorAll('[id^=\"guest-email-\"]') as NodeListOf<HTMLInputElement>;\n expect(guestEmailInputs.length).toBe(2);\n });\n\n xit('removes a guest email input on remove button click', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Add two guests then remove one\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n addGuestButton.click();\n await page.waitForChanges();\n\n const removeGuestButton = page?.root?.shadowRoot?.querySelector('.remove-guest') as HTMLButtonElement;\n removeGuestButton.click();\n await page.waitForChanges();\n\n // Check if one guest email input remains\n const guestEmailInputs = page?.root?.shadowRoot?.querySelectorAll('[id^=\"guest-email-\"]') as NodeListOf<HTMLInputElement>;\n expect(guestEmailInputs.length).toBe(1);\n });\n\n it('emits nameChanged and emailChanged events on input change', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameChangedSpy = jest.fn();\n const emailChangedSpy = jest.fn();\n\n page.win.addEventListener('nameChanged', nameChangedSpy);\n page.win.addEventListener('emailChanged', emailChangedSpy);\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('label input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: nameInput.value,\n name: 'name',\n error: '',\n },\n }),\n );\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('label input') as HTMLInputElement;\n emailInput.value = 'john.doe@example.com';\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: emailInput.value,\n name: 'email',\n error: '',\n },\n }),\n );\n\n await page.waitForChanges();\n\n expect(nameChangedSpy.mock.calls[0][0].detail).toEqual('John Doe');\n expect(emailChangedSpy.mock.calls[0][0].detail).toEqual('john.doe@example.com');\n });\n\n it('emits backButtonClicked event on back button click', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const backButton = page?.root?.shadowRoot?.querySelector('.back') as HTMLButtonElement;\n const backButtonClickedSpy = jest.fn();\n page.win.addEventListener('backButtonClicked', backButtonClickedSpy);\n backButton.click();\n await page.waitForChanges();\n expect(backButtonClickedSpy).toHaveBeenCalled();\n });\n\n it('on entering name input and focusing on email input there are no errors', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Simulate actions\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n nameInput.focus();\n nameInput.value = 'text';\n emailInput.focus();\n await page.waitForChanges();\n\n expect(consoleErrorSpy).not.toHaveBeenCalled();\n });\n\n it('validates name input correctly', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Simulate entering a valid name\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert no validation error message for name\n let errorMessage = page?.root?.shadowRoot?.querySelector('.input-wrapper [part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n expect(errorMessage).toBeNull();\n\n // Simulate clearing the name, triggering validation error\n nameInput.value = '';\n nameInput.dispatchEvent(new Event('input'));\n\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for name\n errorMessage = page?.root?.shadowRoot?.querySelector('.input-wrapper [part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n expect(errorMessage.textContent).toBe('Name is required.');\n });\n\n it('validates email input correctly', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('label input[name=\"name\"]') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n\n // Simulate entering a valid email\n const emailInput = page?.root?.shadowRoot\n ?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('label input[name=\"email\"]') as HTMLInputElement;\n emailInput.value = 'john.doe@example.com';\n emailInput.dispatchEvent(new Event('input'));\n\n let form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert no validation error message for email\n let errorMessage = page?.root?.shadowRoot\n ?.querySelector('.input-wrapper:nth-child(2) [part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n await page.waitForChanges();\n\n expect(errorMessage).toBeNull();\n\n // Simulate clearing the email, triggering validation error\n emailInput.value = '';\n emailInput.dispatchEvent(new Event('input'));\n await page.waitForChanges();\n form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for empty email\n errorMessage = page?.root?.shadowRoot\n ?.querySelector('.input-wrapper:nth-child(2) [part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n expect(errorMessage.textContent).toBe('Email is required.');\n });\n\n xit('validates guest email inputs correctly', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n emailInput.value = 'john.doe@example.com';\n emailInput.dispatchEvent(new Event('input'));\n\n // Simulate adding a guest\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n await page.waitForChanges();\n\n const guestEmailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id^=\"guest-email-0\"]') as HTMLInputElement;\n\n // Simulate on blur event to trigger validation\n guestEmailInput.dispatchEvent(new Event('blur'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for empty guest email\n const errorMessage = page?.root?.shadowRoot?.querySelector('.input-wrapper:nth-child(3) .button-wrapper .help-text') as HTMLParagraphElement;\n expect(errorMessage.textContent).toBe('Email is required.');\n\n // Simulate entering an ivalid guest email\n guestEmailInput.value = 'invalid-email';\n guestEmailInput.dispatchEvent(new Event('input'));\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for invalid guest email\n expect(errorMessage.textContent).toBe('Invalid format. ');\n });\n\n it('prefills rescheduling form with the correct data', async () => {\n const rescheduleConfigSettings = {\n name: '',\n configuration_id: '4115ac80-d606-4b64-98b8-9c0420c8f318',\n slug: 'test-slug',\n scheduler: {\n available_days_in_future: 58,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n rescheduling_url: 'https://book.nylas.com/reschedule/:booking_ref',\n cancellation_url: 'https://book.nylas.com/cancel/:booking_ref',\n organizer_confirmation_url: 'https://book.nylas.com/confirm/:booking_ref',\n confirmation_redirect_url: '',\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n cancellation_policy: '',\n additional_fields: {\n 'metadata_Metadata-Label_1': {\n label: 'Metadata Label',\n type: 'metadata',\n required: false,\n default: 'xyz',\n order: 1,\n },\n 'phone_number_Phone-Number-Label_1': {\n label: 'Phone Number Label',\n type: 'phone_number',\n required: false,\n default: '9964646442',\n order: 2,\n },\n 'multi-select': {\n default: 'orange',\n label: 'Select favorite fruits',\n order: 3,\n required: true,\n type: 'multi_select',\n options: ['orange', 'apple', 'banana', 'kiwi'],\n },\n 'multi_line_text_Long-text-Label_1': {\n label: 'Long text Label',\n type: 'multi_line_text',\n required: true,\n order: 4,\n },\n },\n email_template: {\n logo: '',\n booking_confirmed: {},\n },\n },\n organizer: {\n email: 'test@nylas.com',\n name: 'Test User',\n },\n booking_type: 'booking',\n booking: {\n participants: [\n {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n ],\n guest: {\n name: 'Dalmia Fanning',\n email: 'dalmia@company.com',\n },\n timezone: 'America/Toronto',\n email_language: 'en',\n cancellation_reason: '',\n additional_guests: [\n {\n email: 'dale@fur.com',\n name: 'Dale Fur',\n },\n ],\n additional_fields: {\n 'metadata_Metadata-Label_1': 'xyz',\n 'phone_number_Phone-Number-Label_1': '1234567890',\n },\n booking_ref: 'test-booking-ref',\n booking_ref_salt: '',\n event_data: {\n when: {\n start_timezone: 'America/Toronto',\n end_timezone: 'America/Toronto',\n object: 'timespan',\n start_time: new Date(1730952000 * 1000),\n end_time: new Date(1730953800 * 1000),\n },\n location: '',\n },\n event_organizer: {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n },\n appearance: {},\n };\n\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent, TextareaComponent],\n template: () => <nylas-booking-form configSettings={rescheduleConfigSettings} />,\n });\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const guestEmailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"guest-email-0\"]') as HTMLInputElement;\n expect(guestEmailInput.value).toEqual('dale@fur.com');\n\n const inputComponent = page?.root?.shadowRoot?.querySelector('input-component#phone_number_Phone-Number-Label_1')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(inputComponent.value).toEqual('1234567890');\n\n const spyEvent = jest.fn();\n page.win.addEventListener('detailsConfirmed', spyEvent);\n\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n const textAreaComponent = page?.root?.shadowRoot?.querySelector('textarea-component#multi_line_text_Long-text-Label_1') as HTMLTextareaComponentElement;\n const textArea = textAreaComponent.shadowRoot?.querySelector('textarea') as HTMLTextAreaElement;\n console.log('###textAreaComponent:', textArea);\n\n textArea.value = 'This is a long text';\n textArea.dispatchEvent(new Event('input'));\n\n const event = new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: textArea.value,\n name: 'multi_line_text_Long-text-Label_1',\n error: '',\n label: 'Long text Label',\n },\n });\n (page.rootInstance as unknown as NylasBookingForm).nylasFormInputChangedHandler(event);\n await page.waitForChanges();\n\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n expect(spyEvent).toHaveBeenCalled();\n const obj = {\n additionalFields: {\n 'metadata_Metadata-Label_1': 'xyz',\n 'phone_number_Phone-Number-Label_1': '1234567890',\n 'multi-select': 'orange',\n 'multi_line_text_Long-text-Label_1': 'This is a long text',\n },\n guests: [\n {\n email: 'dale@fur.com',\n name: 'dale@fur.com',\n },\n ],\n primaryParticipant: {\n email: 'dalmia@company.com',\n name: 'Dalmia Fanning',\n },\n };\n expect(spyEvent.mock.calls[0][0].detail).toEqual(obj);\n });\n\n it('reschedule flow: overrides the booking data from the config with the booking info passed', async () => {\n const rescheduleConfigSettings = {\n name: '',\n configuration_id: '4115ac80-d606-4b64-98b8-9c0420c8f318',\n slug: 'test-slug',\n scheduler: {\n available_days_in_future: 58,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n rescheduling_url: 'https://book.nylas.com/reschedule/:booking_ref',\n cancellation_url: 'https://book.nylas.com/cancel/:booking_ref',\n organizer_confirmation_url: 'https://book.nylas.com/confirm/:booking_ref',\n confirmation_redirect_url: '',\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n cancellation_policy: '',\n additional_fields: {\n 'metadata_Metadata-Label_1': {\n label: 'Metadata Label',\n type: 'metadata',\n required: false,\n default: 'xyz',\n order: 1,\n },\n 'phone_number_Phone-Number-Label_1': {\n label: 'Phone Number Label',\n type: 'phone_number',\n required: false,\n default: '9964646442',\n order: 2,\n },\n 'multi-select': {\n default: 'orange',\n label: 'Select favorite fruits',\n order: 3,\n required: true,\n type: 'multi_select',\n options: ['orange', 'apple', 'banana', 'kiwi'],\n },\n 'multi_line_text_Long-text-Label_1': {\n label: 'Long text Label',\n type: 'multi_line_text',\n required: true,\n order: 4,\n },\n },\n email_template: {\n logo: '',\n booking_confirmed: {},\n },\n },\n organizer: {\n email: 'test@nylas.com',\n name: 'Test User',\n },\n booking_type: 'booking',\n booking: {\n participants: [\n {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n ],\n guest: {\n name: 'Dalmia Fanning',\n email: 'dalmia@company.com',\n },\n timezone: 'America/Toronto',\n email_language: 'en',\n cancellation_reason: '',\n additional_guests: [\n {\n email: 'dale@fur.com',\n name: 'Dale Fur',\n },\n ],\n additional_fields: {\n 'metadata_Metadata-Label_1': 'xyz',\n 'phone_number_Phone-Number-Label_1': '1234567890',\n 'multi-select': 'apple',\n },\n booking_ref: 'test-booking-ref',\n booking_ref_salt: '',\n event_data: {\n when: {\n start_timezone: 'America/Toronto',\n end_timezone: 'America/Toronto',\n object: 'timespan',\n start_time: new Date(1730952000 * 1000),\n end_time: new Date(1730953800 * 1000),\n },\n location: '',\n },\n event_organizer: {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n },\n appearance: {},\n };\n const bookingInfo = {\n primaryParticipant: {\n name: 'Dale Fur',\n email: 'dale@nylas.com',\n },\n additionalFields: {\n 'metadata_Metadata-Label_1': {\n value: 'abc',\n },\n 'phone_number_Phone-Number-Label_1': {\n value: '3111111111',\n readOnly: true,\n },\n },\n };\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent, TextareaComponent],\n template: () => <nylas-booking-form configSettings={rescheduleConfigSettings} />,\n });\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.bookingInfo = bookingInfo;\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(nameInput.value).toEqual('Dale Fur');\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(emailInput.value).toEqual('dale@nylas.com');\n\n const guestEmailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"guest-email-0\"]') as HTMLInputElement;\n expect(guestEmailInput.value).toEqual('dale@fur.com');\n\n const inputComponent = page?.root?.shadowRoot?.querySelector('input-component#phone_number_Phone-Number-Label_1')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(inputComponent.value).toEqual('3111111111');\n expect(inputComponent).toHaveAttribute('readonly');\n\n const spyEvent = jest.fn();\n page.win.addEventListener('detailsConfirmed', spyEvent);\n\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n const textAreaComponent = page?.root?.shadowRoot?.querySelector('textarea-component#multi_line_text_Long-text-Label_1') as HTMLTextareaComponentElement;\n const textArea = textAreaComponent.shadowRoot?.querySelector('textarea') as HTMLTextAreaElement;\n console.log('###textAreaComponent:', textArea);\n\n textArea.value = 'This is a long text';\n textArea.dispatchEvent(new Event('input'));\n\n const event = new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: textArea.value,\n name: 'multi_line_text_Long-text-Label_1',\n error: '',\n label: 'Long text Label',\n },\n });\n (page.rootInstance as unknown as NylasBookingForm).nylasFormInputChangedHandler(event);\n await page.waitForChanges();\n\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n expect(spyEvent).toHaveBeenCalled();\n const obj = {\n additionalFields: {\n 'metadata_Metadata-Label_1': 'abc',\n 'phone_number_Phone-Number-Label_1': '3111111111',\n 'multi-select': 'apple',\n 'multi_line_text_Long-text-Label_1': 'This is a long text',\n },\n guests: [\n {\n email: 'dale@fur.com',\n name: 'dale@fur.com',\n },\n ],\n primaryParticipant: {\n email: 'dale@nylas.com',\n name: 'Dale Fur',\n },\n };\n expect(spyEvent.mock.calls[0][0].detail).toEqual(obj);\n });\n});\n"]}
1
+ {"version":3,"file":"nylas-booking-form.spec.js","sourceRoot":"","sources":["../../../../../src/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { NylasBookingForm } from '../nylas-booking-form';\nimport { InputComponent } from '../../../design-system/input-component/input-component';\nimport { h } from '@stencil/core';\nimport { RadioButtonGroup } from '../../../design-system/radio-button-group/radio-button-group';\nimport { CheckboxComponent } from '../../../design-system/checkbox-component/checkbox-component';\nimport { TextareaComponent } from '../../../design-system/textarea-component/textarea-component';\nimport { SelectDropdown } from '../../../design-system/select-dropdown/select-dropdown';\n\nconst configSettings = {\n scheduler: {\n available_days_in_future: 30,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n additional_fields: {\n additional_email: {\n label: 'Additional email',\n type: 'email',\n required: false,\n order: 2,\n default: 'additional_email@example.com',\n },\n checkbox: {\n label: 'Checkbox Label',\n type: 'checkbox',\n required: false,\n order: 6,\n },\n dropdown: {\n label: 'Dropdown Label',\n type: 'dropdown',\n required: false,\n order: 3,\n options: ['Yes', 'No'],\n },\n long_text: {\n label: 'Long text Label',\n type: 'multi_line_text',\n required: false,\n order: 5,\n },\n phone_number: {\n label: 'Phone Number',\n type: 'phone_number',\n required: false,\n order: 1,\n },\n radio_button: {\n label: 'Radio Button Label',\n type: 'radio_button',\n required: false,\n order: 7,\n options: ['Yes', 'No'],\n },\n short_text: {\n label: 'Short Text Label',\n type: 'text',\n required: false,\n order: 4,\n },\n },\n email_template: {\n booking_confirmed: {},\n },\n },\n organizer: {\n email: 'test@nylas.com',\n name: 'Test User',\n },\n};\n\ndescribe('nylas-booking-form', () => {\n beforeEach(() => {\n // Clear and reset the mock before each test if needed\n jest.clearAllMocks();\n });\n let consoleErrorSpy;\n\n beforeEach(() => {\n // Spy on console.error before each test\n consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});\n });\n\n afterEach(() => {\n // Restore the original console.error after each test\n consoleErrorSpy.mockRestore();\n });\n\n it('renders correctly with initial props', async () => {\n const bookingInfo = {\n primaryParticipant: {\n name: 'John Doe',\n email: 'john.doe@example.com',\n },\n };\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.bookingInfo = bookingInfo;\n await page.waitForChanges();\n expect(page.rootInstance.name).toEqual('John Doe');\n expect(page.rootInstance.email).toEqual('john.doe@example.com');\n expect(page.root).toMatchSnapshot();\n });\n\n it('renders an email error message when email is invalid', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n emailInput.value = 'invalid-email';\n emailInput.dispatchEvent(new Event('input'));\n\n // Submit the form to trigger validation\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n const errorMessage = page?.root?.shadowRoot\n ?.querySelector('.input-wrapper:nth-child(2) [part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n console.debug(errorMessage.className);\n expect(errorMessage.textContent).toBe('Invalid format.');\n });\n\n it('renders correctly with additional fields from the config', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.configSettings = configSettings;\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const additionalEmailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"additional_email\"]') as HTMLInputElement;\n const additionalEmailInput = additionalEmailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n expect(additionalEmailInput.value).not.toBeNull();\n expect(additionalEmailInput.value).toEqual('additional_email@example.com');\n additionalEmailInputComponent.value = 'abcd@gmail.com';\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: additionalEmailInputComponent.value,\n name: 'additional_email',\n error: '',\n label: 'Additional email',\n },\n }),\n );\n\n const checkboxInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__checkbox-component\"][id=\"checkbox\"]') as HTMLInputElement;\n checkboxInput.checked = true;\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormCheckboxToggled', {\n detail: {\n checked: checkboxInput.checked,\n name: 'checkbox',\n error: '',\n label: 'Checkbox Label',\n },\n }),\n );\n\n await page.waitForChanges();\n expect(page.rootInstance.additionalFields).toEqual({ additional_email: 'abcd@gmail.com', checkbox: 'true' });\n });\n\n it('renders the values passed in the booking info by overriding the defaults', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.configSettings = configSettings;\n page.root.bookingInfo = {\n primaryParticipant: {\n name: 'John Doe',\n email: 'johndoe@example.com',\n },\n additionalFields: {\n additional_email: {\n value: 'xyz@example.com',\n type: 'email',\n },\n },\n };\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const additionalEmailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"additional_email\"]') as HTMLInputElement;\n const additionalEmailInput = additionalEmailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n expect(additionalEmailInput.value).not.toBeNull();\n expect(additionalEmailInput.value).toEqual('xyz@example.com');\n\n await page.waitForChanges();\n });\n\n it('renders the fields as read only if bookingInfo passes readOnly additional fields', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent, RadioButtonGroup, CheckboxComponent, TextareaComponent, SelectDropdown],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.configSettings = configSettings;\n page.root.bookingInfo = {\n primaryParticipant: {\n name: 'John Doe',\n email: 'johndoe@example.com',\n nameReadOnly: true,\n emailReadOnly: true,\n },\n additionalFields: {\n additional_email: {\n value: 'xyz@example.com',\n type: 'email',\n readOnly: true,\n },\n checkbox: {\n value: 'true',\n type: 'checkbox',\n readOnly: true,\n },\n dropdown: {\n value: 'No',\n type: 'dropdown',\n readOnly: true,\n },\n long_text: {\n value: 'Long text Label',\n type: 'multi_line_text',\n readOnly: true,\n },\n radio_button: {\n value: 'No',\n type: 'radio_button',\n readOnly: true,\n },\n },\n };\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n const nameInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]') as HTMLInputElement;\n const nameInput = nameInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(nameInput.value).not.toBeNull();\n expect(nameInput.value).toEqual('John Doe');\n expect(nameInput).toHaveAttribute('readOnly');\n\n const emailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]') as HTMLInputElement;\n const emailInput = emailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(emailInput.value).not.toBeNull();\n expect(emailInput.value).toEqual('johndoe@example.com');\n expect(emailInput).toHaveAttribute('readOnly');\n\n const additionalEmailInputComponent = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"additional_email\"]') as HTMLInputElement;\n const additionalEmailInput = additionalEmailInputComponent.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n expect(additionalEmailInput.value).not.toBeNull();\n expect(additionalEmailInput.value).toEqual('xyz@example.com');\n expect(additionalEmailInput).toHaveAttribute('readOnly');\n\n const dropdown = page?.root?.shadowRoot?.querySelector('select-dropdown') as HTMLSelectDropdownElement;\n const dropdownButton = dropdown.shadowRoot?.querySelector('button') as HTMLButtonElement;\n expect(dropdownButton).toHaveAttribute('disabled');\n\n const checkbox = page?.root?.shadowRoot?.querySelector('checkbox-component') as HTMLCheckboxComponentElement;\n const checkboxInput = checkbox.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(checkboxInput).toHaveAttribute('disabled');\n expect(checkboxInput).toHaveAttribute('checked');\n\n const radioGroup = page?.root?.shadowRoot?.querySelector('radio-button-group') as HTMLRadioButtonGroupElement;\n const radioInput = radioGroup.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(radioInput).toHaveAttribute('disabled');\n\n const textarea = page?.root?.shadowRoot?.querySelector('textarea-component') as HTMLTextareaComponentElement;\n const textareaInput = textarea.shadowRoot?.querySelector('textarea') as HTMLTextAreaElement;\n expect(textareaInput).toHaveAttribute('readonly');\n });\n\n xit('renders guest email input on add guest button click', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n\n await page.waitForChanges();\n\n const guestEmailInputs = page?.root?.shadowRoot?.querySelectorAll('[part=\"nbf__input-textfield\"][id^=\"guest-email-\"]') as NodeListOf<HTMLInputElement>;\n expect(guestEmailInputs.length).toEqual(1);\n });\n\n xit('allows multiple guest emails to be added', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Simulate clicking the 'Add Guest' button twice\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n addGuestButton.click();\n await page.waitForChanges();\n\n // Check if two guest email inputs are present\n const guestEmailInputs = page?.root?.shadowRoot?.querySelectorAll('[id^=\"guest-email-\"]') as NodeListOf<HTMLInputElement>;\n expect(guestEmailInputs.length).toBe(2);\n });\n\n xit('removes a guest email input on remove button click', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Add two guests then remove one\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n addGuestButton.click();\n await page.waitForChanges();\n\n const removeGuestButton = page?.root?.shadowRoot?.querySelector('.remove-guest') as HTMLButtonElement;\n removeGuestButton.click();\n await page.waitForChanges();\n\n // Check if one guest email input remains\n const guestEmailInputs = page?.root?.shadowRoot?.querySelectorAll('[id^=\"guest-email-\"]') as NodeListOf<HTMLInputElement>;\n expect(guestEmailInputs.length).toBe(1);\n });\n\n it('emits nameChanged and emailChanged events on input change', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameChangedSpy = jest.fn();\n const emailChangedSpy = jest.fn();\n\n page.win.addEventListener('nameChanged', nameChangedSpy);\n page.win.addEventListener('emailChanged', emailChangedSpy);\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('label input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: nameInput.value,\n name: 'name',\n error: '',\n },\n }),\n );\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('label input') as HTMLInputElement;\n emailInput.value = 'john.doe@example.com';\n\n page.root?.dispatchEvent(\n new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: emailInput.value,\n name: 'email',\n error: '',\n },\n }),\n );\n\n await page.waitForChanges();\n\n expect(nameChangedSpy.mock.calls[0][0].detail).toEqual('John Doe');\n expect(emailChangedSpy.mock.calls[0][0].detail).toEqual('john.doe@example.com');\n });\n\n it('emits backButtonClicked event on back button click', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const backButton = page?.root?.shadowRoot?.querySelector('.back') as HTMLButtonElement;\n const backButtonClickedSpy = jest.fn();\n page.win.addEventListener('backButtonClicked', backButtonClickedSpy);\n backButton.click();\n await page.waitForChanges();\n expect(backButtonClickedSpy).toHaveBeenCalled();\n });\n\n it('on entering name input and focusing on email input there are no errors', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Simulate actions\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n\n nameInput.focus();\n nameInput.value = 'text';\n emailInput.focus();\n await page.waitForChanges();\n\n expect(consoleErrorSpy).not.toHaveBeenCalled();\n });\n\n it('validates name input correctly', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n // Simulate entering a valid name\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert no validation error message for name\n let errorMessage = page?.root?.shadowRoot?.querySelector('.input-wrapper [part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n expect(errorMessage).toBeNull();\n\n // Simulate clearing the name, triggering validation error\n nameInput.value = '';\n nameInput.dispatchEvent(new Event('input'));\n\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for name\n errorMessage = page?.root?.shadowRoot?.querySelector('.input-wrapper [part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n expect(errorMessage.textContent).toBe('This field is required.');\n });\n\n it('validates email input correctly', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('label input[name=\"name\"]') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n\n // Simulate entering a valid email\n const emailInput = page?.root?.shadowRoot\n ?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('label input[name=\"email\"]') as HTMLInputElement;\n emailInput.value = 'john.doe@example.com';\n emailInput.dispatchEvent(new Event('input'));\n\n let form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert no validation error message for email\n let errorMessage = page?.root?.shadowRoot\n ?.querySelector('.input-wrapper:nth-child(2) [part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n await page.waitForChanges();\n\n expect(errorMessage).toBeNull();\n\n // Simulate clearing the email, triggering validation error\n emailInput.value = '';\n emailInput.dispatchEvent(new Event('input'));\n await page.waitForChanges();\n form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for empty email\n errorMessage = page?.root?.shadowRoot\n ?.querySelector('.input-wrapper:nth-child(2) [part=\"nbf__input-textfield\"][id=\"email\"]')\n ?.shadowRoot?.querySelector('.help-text') as HTMLSpanElement;\n expect(errorMessage.textContent).toBe('This field is required.');\n });\n\n xit('validates guest email inputs correctly', async () => {\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent],\n html: `<nylas-booking-form></nylas-booking-form>`,\n });\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n nameInput.value = 'John Doe';\n nameInput.dispatchEvent(new Event('input'));\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n emailInput.value = 'john.doe@example.com';\n emailInput.dispatchEvent(new Event('input'));\n\n // Simulate adding a guest\n const addGuestButton = page?.root?.shadowRoot?.querySelector('.add-guest') as HTMLButtonElement;\n addGuestButton.click();\n await page.waitForChanges();\n\n const guestEmailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id^=\"guest-email-0\"]') as HTMLInputElement;\n\n // Simulate on blur event to trigger validation\n guestEmailInput.dispatchEvent(new Event('blur'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for empty guest email\n const errorMessage = page?.root?.shadowRoot?.querySelector('.input-wrapper:nth-child(3) .button-wrapper .help-text') as HTMLParagraphElement;\n expect(errorMessage.textContent).toBe('Email is required.');\n\n // Simulate entering an ivalid guest email\n guestEmailInput.value = 'invalid-email';\n guestEmailInput.dispatchEvent(new Event('input'));\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n await page.waitForChanges();\n\n // Assert validation error message is shown for invalid guest email\n expect(errorMessage.textContent).toBe('Invalid format. ');\n });\n\n it('prefills rescheduling form with the correct data', async () => {\n const rescheduleConfigSettings = {\n name: '',\n configuration_id: '4115ac80-d606-4b64-98b8-9c0420c8f318',\n slug: 'test-slug',\n scheduler: {\n available_days_in_future: 58,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n rescheduling_url: 'https://book.nylas.com/reschedule/:booking_ref',\n cancellation_url: 'https://book.nylas.com/cancel/:booking_ref',\n organizer_confirmation_url: 'https://book.nylas.com/confirm/:booking_ref',\n confirmation_redirect_url: '',\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n cancellation_policy: '',\n additional_fields: {\n 'metadata_Metadata-Label_1': {\n label: 'Metadata Label',\n type: 'metadata',\n required: false,\n default: 'xyz',\n order: 1,\n },\n 'phone_number_Phone-Number-Label_1': {\n label: 'Phone Number Label',\n type: 'phone_number',\n required: false,\n default: '9964646442',\n order: 2,\n },\n 'multi-select': {\n default: 'orange',\n label: 'Select favorite fruits',\n order: 3,\n required: true,\n type: 'multi_select',\n options: ['orange', 'apple', 'banana', 'kiwi'],\n },\n 'multi_line_text_Long-text-Label_1': {\n label: 'Long text Label',\n type: 'multi_line_text',\n required: true,\n order: 4,\n },\n },\n email_template: {\n logo: '',\n booking_confirmed: {},\n },\n },\n organizer: {\n email: 'test@nylas.com',\n name: 'Test User',\n },\n booking_type: 'booking',\n booking: {\n participants: [\n {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n ],\n guest: {\n name: 'Dalmia Fanning',\n email: 'dalmia@company.com',\n },\n timezone: 'America/Toronto',\n email_language: 'en',\n cancellation_reason: '',\n additional_guests: [\n {\n email: 'dale@fur.com',\n name: 'Dale Fur',\n },\n ],\n additional_fields: {\n 'metadata_Metadata-Label_1': 'xyz',\n 'phone_number_Phone-Number-Label_1': '1234567890',\n },\n booking_ref: 'test-booking-ref',\n booking_ref_salt: '',\n event_data: {\n when: {\n start_timezone: 'America/Toronto',\n end_timezone: 'America/Toronto',\n object: 'timespan',\n start_time: new Date(1730952000 * 1000),\n end_time: new Date(1730953800 * 1000),\n },\n location: '',\n },\n event_organizer: {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n },\n appearance: {},\n };\n\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent, TextareaComponent],\n template: () => <nylas-booking-form configSettings={rescheduleConfigSettings} />,\n });\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const guestEmailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"guest-email-0\"]') as HTMLInputElement;\n expect(guestEmailInput.value).toEqual('dale@fur.com');\n\n const inputComponent = page?.root?.shadowRoot?.querySelector('input-component#phone_number_Phone-Number-Label_1')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(inputComponent.value).toEqual('1234567890');\n\n const spyEvent = jest.fn();\n page.win.addEventListener('detailsConfirmed', spyEvent);\n\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n const textAreaComponent = page?.root?.shadowRoot?.querySelector('textarea-component#multi_line_text_Long-text-Label_1') as HTMLTextareaComponentElement;\n const textArea = textAreaComponent.shadowRoot?.querySelector('textarea') as HTMLTextAreaElement;\n console.log('###textAreaComponent:', textArea);\n\n textArea.value = 'This is a long text';\n textArea.dispatchEvent(new Event('input'));\n\n const event = new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: textArea.value,\n name: 'multi_line_text_Long-text-Label_1',\n error: '',\n label: 'Long text Label',\n },\n });\n (page.rootInstance as unknown as NylasBookingForm).nylasFormInputChangedHandler(event);\n await page.waitForChanges();\n\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n expect(spyEvent).toHaveBeenCalled();\n const obj = {\n additionalFields: {\n 'metadata_Metadata-Label_1': 'xyz',\n 'phone_number_Phone-Number-Label_1': '1234567890',\n 'multi-select': 'orange',\n 'multi_line_text_Long-text-Label_1': 'This is a long text',\n },\n guests: [\n {\n email: 'dale@fur.com',\n name: 'dale@fur.com',\n },\n ],\n primaryParticipant: {\n email: 'dalmia@company.com',\n name: 'Dalmia Fanning',\n },\n };\n expect(spyEvent.mock.calls[0][0].detail).toEqual(obj);\n });\n\n it('reschedule flow: overrides the booking data from the config with the booking info passed', async () => {\n const rescheduleConfigSettings = {\n name: '',\n configuration_id: '4115ac80-d606-4b64-98b8-9c0420c8f318',\n slug: 'test-slug',\n scheduler: {\n available_days_in_future: 58,\n min_cancellation_notice: 0,\n min_booking_notice: 60,\n rescheduling_url: 'https://book.nylas.com/reschedule/:booking_ref',\n cancellation_url: 'https://book.nylas.com/cancel/:booking_ref',\n organizer_confirmation_url: 'https://book.nylas.com/confirm/:booking_ref',\n confirmation_redirect_url: '',\n hide_rescheduling_options: false,\n hide_cancellation_options: false,\n hide_additional_guests: false,\n cancellation_policy: '',\n additional_fields: {\n 'metadata_Metadata-Label_1': {\n label: 'Metadata Label',\n type: 'metadata',\n required: false,\n default: 'xyz',\n order: 1,\n },\n 'phone_number_Phone-Number-Label_1': {\n label: 'Phone Number Label',\n type: 'phone_number',\n required: false,\n default: '9964646442',\n order: 2,\n },\n 'multi-select': {\n default: 'orange',\n label: 'Select favorite fruits',\n order: 3,\n required: true,\n type: 'multi_select',\n options: ['orange', 'apple', 'banana', 'kiwi'],\n },\n 'multi_line_text_Long-text-Label_1': {\n label: 'Long text Label',\n type: 'multi_line_text',\n required: true,\n order: 4,\n },\n },\n email_template: {\n logo: '',\n booking_confirmed: {},\n },\n },\n organizer: {\n email: 'test@nylas.com',\n name: 'Test User',\n },\n booking_type: 'booking',\n booking: {\n participants: [\n {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n ],\n guest: {\n name: 'Dalmia Fanning',\n email: 'dalmia@company.com',\n },\n timezone: 'America/Toronto',\n email_language: 'en',\n cancellation_reason: '',\n additional_guests: [\n {\n email: 'dale@fur.com',\n name: 'Dale Fur',\n },\n ],\n additional_fields: {\n 'metadata_Metadata-Label_1': 'xyz',\n 'phone_number_Phone-Number-Label_1': '1234567890',\n 'multi-select': 'apple',\n },\n booking_ref: 'test-booking-ref',\n booking_ref_salt: '',\n event_data: {\n when: {\n start_timezone: 'America/Toronto',\n end_timezone: 'America/Toronto',\n object: 'timespan',\n start_time: new Date(1730952000 * 1000),\n end_time: new Date(1730953800 * 1000),\n },\n location: '',\n },\n event_organizer: {\n email: 'test@nylas.com',\n is_organizer: true,\n name: 'Test User',\n availability: {\n calendar_ids: ['test@nylas.com'],\n },\n booking: {\n calendar_id: 'test@nylas.com',\n },\n timezone: 'America/Toronto',\n },\n },\n appearance: {},\n };\n const bookingInfo = {\n primaryParticipant: {\n name: 'Dale Fur',\n email: 'dale@nylas.com',\n },\n additionalFields: {\n 'metadata_Metadata-Label_1': {\n value: 'abc',\n },\n 'phone_number_Phone-Number-Label_1': {\n value: '3111111111',\n readOnly: true,\n },\n },\n };\n const page = await newSpecPage({\n components: [NylasBookingForm, InputComponent, TextareaComponent],\n template: () => <nylas-booking-form configSettings={rescheduleConfigSettings} />,\n });\n if (!page.root) {\n throw new Error('Component did not render.');\n }\n\n page.root.bookingInfo = bookingInfo;\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n\n const nameInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"name\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(nameInput.value).toEqual('Dale Fur');\n\n const emailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"email\"]')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(emailInput.value).toEqual('dale@nylas.com');\n\n const guestEmailInput = page?.root?.shadowRoot?.querySelector('[part=\"nbf__input-textfield\"][id=\"guest-email-0\"]') as HTMLInputElement;\n expect(guestEmailInput.value).toEqual('dale@fur.com');\n\n const inputComponent = page?.root?.shadowRoot?.querySelector('input-component#phone_number_Phone-Number-Label_1')?.shadowRoot?.querySelector('input') as HTMLInputElement;\n expect(inputComponent.value).toEqual('3111111111');\n expect(inputComponent).toHaveAttribute('readonly');\n\n const spyEvent = jest.fn();\n page.win.addEventListener('detailsConfirmed', spyEvent);\n\n const form = page?.root?.shadowRoot?.querySelector('form') as HTMLFormElement;\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n const textAreaComponent = page?.root?.shadowRoot?.querySelector('textarea-component#multi_line_text_Long-text-Label_1') as HTMLTextareaComponentElement;\n const textArea = textAreaComponent.shadowRoot?.querySelector('textarea') as HTMLTextAreaElement;\n console.log('###textAreaComponent:', textArea);\n\n textArea.value = 'This is a long text';\n textArea.dispatchEvent(new Event('input'));\n\n const event = new CustomEvent('nylasFormInputChanged', {\n detail: {\n value: textArea.value,\n name: 'multi_line_text_Long-text-Label_1',\n error: '',\n label: 'Long text Label',\n },\n });\n (page.rootInstance as unknown as NylasBookingForm).nylasFormInputChangedHandler(event);\n await page.waitForChanges();\n\n form.dispatchEvent(new Event('submit'));\n\n await page.waitForChanges();\n\n expect(spyEvent).toHaveBeenCalled();\n const obj = {\n additionalFields: {\n 'metadata_Metadata-Label_1': 'abc',\n 'phone_number_Phone-Number-Label_1': '3111111111',\n 'multi-select': 'apple',\n 'multi_line_text_Long-text-Label_1': 'This is a long text',\n },\n guests: [\n {\n email: 'dale@fur.com',\n name: 'dale@fur.com',\n },\n ],\n primaryParticipant: {\n email: 'dale@nylas.com',\n name: 'Dale Fur',\n },\n };\n expect(spyEvent.mock.calls[0][0].detail).toEqual(obj);\n });\n});\n"]}
@@ -61,6 +61,7 @@ export class NylasCancelBookingForm {
61
61
  this.eventInfo = undefined;
62
62
  this.isLoading = undefined;
63
63
  this.themeConfig = undefined;
64
+ this.selectedLanguage = undefined;
64
65
  this.cancellationReason = '';
65
66
  this.cancellationError = '';
66
67
  this.cancellationPolicy = this.configSettings?.scheduler?.cancellation_policy || 'Your current timeslot will become available to others.';
@@ -71,6 +72,11 @@ export class NylasCancelBookingForm {
71
72
  themeConfigChanged(newThemeConfig) {
72
73
  this.applyThemeConfig(newThemeConfig);
73
74
  }
75
+ selectedLanguageChangedHandler(newVal, oldVal) {
76
+ if (newVal === oldVal)
77
+ return;
78
+ i18next.changeLanguage(newVal);
79
+ }
74
80
  connectedCallback() {
75
81
  debug(`[nylas-cancel-booking-form] Component connected`);
76
82
  }
@@ -103,7 +109,7 @@ export class NylasCancelBookingForm {
103
109
  }
104
110
  }
105
111
  render() {
106
- return (h(Host, { key: 'fadd772e62a6fcebcb4d8e9a3f9cea3fc689b310', part: "ncbf" }, h("div", { key: '2303b8e9cb36668cd1a7f0429d2587adc22e5a9e', class: "nylas-cancel-booking-form", part: "ncbf__card" }, h("div", { key: '669128a92b3df3413b520b426f92663cbbff69c6', class: "nylas-cancel-booking-form__calendar-icon", part: "ncbf__icon" }, h("calendar-cancel-icon", { key: '937705a14282087ecbb73477da36af8c131719f8' })), h("h3", { key: '2f5f3126c312353e347547e9cbed87cfb604837b', class: "nylas-cancel-booking-form__title", part: "ncbf__title" }, i18next.t('cancelBookingTitle')), h("div", { key: 'e42825b3199b10de28813e9ed296fbe6a8811951', class: "nylas-cancel-booking-form__description", part: "ncbf__description" }, !this.configSettings?.scheduler?.cancellation_policy ? `${i18next.t('cancelBookingMessage')}` : this.cancellationPolicy), h("form", { key: 'd8f0c2b3ab2a598a05b69ebaa779f69f95390356', onSubmit: this.handleSubmitCancelBooking }, h("textarea-component", { key: 'edaeec669058428d46ded041622d93e158c5837a', id: "cancel-reason", name: "cancel-reason", ref: el => (this.textareaRef = el), required: true, label: i18next.t('reasonForCancellation'), class: this.cancellationError ? 'error' : '', part: "ncbf__reason-textarea", defaultValue: this.cancellationReason }), h("div", { key: 'deb0f8441e371d110b587d47c9e5fb01174a3391', class: "footer" }, h("button-component", { key: '7671d441dbeaa05aa75ac6dd383373c121e81678', variant: 'destructive', class: "cancel", type: "submit", part: "ncbf__button-cta", disabled: this.isLoading }, i18next.t('cancelBookingButton')), !!this.eventInfo && (h("button-component", { variant: 'basic', class: "back", part: "ncbf__button-outline", onClick: this.handleGoBackClicked }, i18next.t('goBackButton'))))))));
112
+ return (h(Host, { key: '3b22e6567ab54d6f2cb568d75fee896a643da4c8', part: "ncbf" }, h("div", { key: 'f046c04a7e3960a64e7da64c9a65a76566224f7d', class: "nylas-cancel-booking-form", part: "ncbf__card" }, h("div", { key: 'a979e7bea8d4ec498f52d06843d81f48720a0c8c', class: "nylas-cancel-booking-form__calendar-icon", part: "ncbf__icon" }, h("calendar-cancel-icon", { key: '85015b6f8078d9159f348ddf323f31dec8f705d4' })), h("h3", { key: '78ecd8321eb0a3c12abef90033d8244ffbfee674', class: "nylas-cancel-booking-form__title", part: "ncbf__title" }, i18next.t('cancelBookingTitle')), h("div", { key: '524ca54afd1054d39d732fc17af3d75ce7586eae', class: "nylas-cancel-booking-form__description", part: "ncbf__description" }, !this.configSettings?.scheduler?.cancellation_policy ? `${i18next.t('cancelBookingMessage')}` : this.cancellationPolicy), h("form", { key: '997e3b3723ac23316214682b8f03714d22c73271', onSubmit: this.handleSubmitCancelBooking }, h("textarea-component", { key: 'dd909a7998a66404c9ca4a0a880c65b8f38274d6', id: "cancel-reason", name: "cancel-reason", ref: el => (this.textareaRef = el), required: true, label: i18next.t('reasonForCancellation'), class: this.cancellationError ? 'error' : '', part: "ncbf__reason-textarea", defaultValue: this.cancellationReason }), h("div", { key: '8a2331c8d00f1c6df904c3758fd5adcbb0a7095f', class: "footer" }, h("button-component", { key: 'dd16407657ac2e6e181a213d172364d66466d2ad', variant: 'destructive', class: "cancel", type: "submit", part: "ncbf__button-cta", disabled: this.isLoading }, i18next.t('cancelBookingButton')), !!this.eventInfo && (h("button-component", { variant: 'basic', class: "back", part: "ncbf__button-outline", onClick: this.handleGoBackClicked }, i18next.t('goBackButton'))))))));
107
113
  }
108
114
  static get is() { return "nylas-cancel-booking-form"; }
109
115
  static get encapsulation() { return "shadow"; }
@@ -261,6 +267,32 @@ export class NylasCancelBookingForm {
261
267
  },
262
268
  "attribute": "theme-config",
263
269
  "reflect": false
270
+ },
271
+ "selectedLanguage": {
272
+ "type": "string",
273
+ "mutable": false,
274
+ "complexType": {
275
+ "original": "LANGUAGE_CODE",
276
+ "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",
277
+ "references": {
278
+ "LANGUAGE_CODE": {
279
+ "location": "import",
280
+ "path": "@/common/constants",
281
+ "id": "src/common/constants.ts::LANGUAGE_CODE"
282
+ }
283
+ }
284
+ },
285
+ "required": false,
286
+ "optional": true,
287
+ "docs": {
288
+ "tags": [{
289
+ "name": "standalone",
290
+ "text": "The default language."
291
+ }],
292
+ "text": ""
293
+ },
294
+ "attribute": "selected-language",
295
+ "reflect": false
264
296
  }
265
297
  };
266
298
  }
@@ -379,6 +411,9 @@ export class NylasCancelBookingForm {
379
411
  }, {
380
412
  "propName": "themeConfig",
381
413
  "methodName": "themeConfigChanged"
414
+ }, {
415
+ "propName": "selectedLanguage",
416
+ "methodName": "selectedLanguageChangedHandler"
382
417
  }];
383
418
  }
384
419
  static get listeners() {
@@ -402,6 +437,7 @@ __decorate([
402
437
  ['scheduler.cancelBookingId', 'cancelBookingId'],
403
438
  ['scheduler.rejectBookingId', 'rejectBookingId'],
404
439
  ['scheduler.themeConfig', 'themeConfig'],
440
+ ['scheduler.selectedLanguage', 'selectedLanguage'],
405
441
  ]),
406
442
  eventToProps: {
407
443
  cancelBookingFormSubmitted: async (event, nylasSchedulerConnector) => {
@@ -1 +1 @@
1
- {"version":3,"file":"nylas-cancel-booking-form.js","sourceRoot":"","sources":["../../../../src/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.tsx"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG7G,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGtC,OAAO,OAAO,MAAM,cAAc,CAAC;AAqBnC,MAAM,OAAO,sBAAsB;;QA4HzB,wBAAmB,GAAG,GAAG,EAAE;YACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC,CAAC;QAEM,8BAAyB,GAAG,CAAC,KAAY,EAAE,EAAE;YACnD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;gBAC/D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;gBACpI,OAAO;YACT,CAAC;YAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,uBAAuB,CAAC;YACtF,IAAI,IAAI,CAAC,gBAAgB,IAAI,qBAAqB,EAAE,CAAC;gBACnD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;gBAC9D,MAAM,oBAAoB,GAAG,SAAS,CAAC,OAAO,EAAE,GAAG,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;gBAErF,IAAI,oBAAoB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;oBAChD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;wBAC/B,KAAK,EAAE;4BACL,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC;4BAC1C,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC,EAAE,EAAE,qBAAqB,EAAE,CAAC;yBACvF;qBACF,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;YACH,CAAC;YAED,KAAK,CAAC,0EAA0E,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC3G,MAAM,YAAY,GAAG,CAAC,KAAkC,EAAE,EAAE;gBAC1D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC,CAAC;YACF,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,EAAE,CAAC,CAAC;YAC7I,CAAC;iBAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,EAAE,CAAC,CAAC;YAC7I,CAAC;QACH,CAAC,CAAC;;;;;;;;kCAnFoC,EAAE;iCAEH,EAAE;kCAED,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,mBAAmB,IAAI,wDAAwD;;IAGrJ,4BAA4B,CAAC,QAAwB;QACnD,IAAI,CAAC,kBAAkB,GAAG,QAAQ,EAAE,SAAS,EAAE,mBAAmB,IAAI,wDAAwD,CAAC;IACjI,CAAC;IAGD,kBAAkB,CAAC,cAA2B;QAC5C,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAED,iBAAiB;QACf,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC3D,CAAC;IAED,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,eAAe,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAC;QAC1G,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,oBAAoB;QAClB,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAC9D,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;gBAC7C,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IA2CD,2BAA2B,CAAC,KAA+F;QACzH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7C,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QAC9C,CAAC;IACH,CAAC;IAgDD,MAAM;QACJ,OAAO,CACL,EAAC,IAAI,qDAAC,IAAI,EAAC,MAAM;YACf,4DAAK,KAAK,EAAC,2BAA2B,EAAC,IAAI,EAAC,YAAY;gBACtD,4DAAK,KAAK,EAAC,0CAA0C,EAAC,IAAI,EAAC,YAAY;oBACrE,8EAAwB,CACpB;gBACN,2DAAI,KAAK,EAAC,kCAAkC,EAAC,IAAI,EAAC,aAAa,IAC5D,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAC7B;gBACL,4DAAK,KAAK,EAAC,wCAAwC,EAAC,IAAI,EAAC,mBAAmB,IACzE,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CACpH;gBACN,6DAAM,QAAQ,EAAE,IAAI,CAAC,yBAAyB;oBAC5C,2EACE,EAAE,EAAC,eAAe,EAClB,IAAI,EAAC,eAAe,EACpB,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,EAClC,QAAQ,EAAE,IAAI,EACd,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,EACzC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAC5C,IAAI,EAAC,uBAAuB,EAC5B,YAAY,EAAE,IAAI,CAAC,kBAAkB,GACjB;oBACtB,4DAAK,KAAK,EAAC,QAAQ;wBACjB,yEAAkB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,kBAAkB,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,IACpH,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAChB;wBAClB,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CACnB,wBAAkB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,sBAAsB,EAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,IAC3G,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CACT,CACpB,CACG,CACD,CACH,CACD,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF;AAvCC;IA9CC,iBAAiB,CAAiG;QACjH,IAAI,EAAE,2BAA2B;QACjC,YAAY,EAAE,IAAI,GAAG,CAAC;YACpB,CAAC,0BAA0B,EAAE,gBAAgB,CAAC;YAC9C,CAAC,4BAA4B,EAAE,kBAAkB,CAAC;YAClD,CAAC,qBAAqB,EAAE,WAAW,CAAC;YACpC,CAAC,qBAAqB,EAAE,WAAW,CAAC;YACpC,CAAC,2BAA2B,EAAE,iBAAiB,CAAC;YAChD,CAAC,2BAA2B,EAAE,iBAAiB,CAAC;YAChD,CAAC,uBAAuB,EAAE,aAAa,CAAC;SACzC,CAAC;QACF,YAAY,EAAE;YACZ,0BAA0B,EAAE,KAAK,EAC/B,KAAmJ,EACnJ,uBAAgD,EAChD,EAAE;gBACF,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC9C,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACxB,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAClH,IAAI,YAAY,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;wBACnD,YAAY,CAAC,MAAM,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,aAAa,CAAC;wBACnE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;wBACjC,MAAM,EAAE,WAAW;wBACnB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;qBAC5B,CAAC,CAAC;oBACH,IAAI,YAAY,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC;wBACnD,YAAY,CAAC,MAAM,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,mBAAmB,EAAE,KAAK,EAAE,KAAwB,EAAE,uBAAgD,EAAE,EAAE;gBACxG,KAAK,CAAC,2BAA2B,EAAE,qBAAqB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACxE,uBAAuB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC7C,CAAC;YACD,sBAAsB,EAAE,KAAK,EAAE,KAA+C,EAAE,wBAAiD,EAAE,EAAE;gBACnI,KAAK,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7E,CAAC;YACD,sBAAsB,EAAE,KAAK,EAAE,KAAyC,EAAE,wBAAiD,EAAE,EAAE;gBAC7H,KAAK,CAAC,2BAA2B,EAAE,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7E,CAAC;SACF;QACD,iBAAiB,EAAE,IAAI;KACxB,CAAC;;;;oDAuCD","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { Component, Element, Event, EventEmitter, h, Host, Listen, Prop, State, Watch } from '@stencil/core';\nimport { NylasSchedulerConnector } from '../../..';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { debug } from '@/utils/utils';\nimport { Notification, NylasSchedulerErrorResponse, ThemeConfig, Timeslot } from '@nylas/core';\nimport { ConfigSettings } from '@/stores/scheduler-store';\nimport i18next from '@/utils/i18n';\nimport { NylasEvent } from '@/common/types';\n\n/**\n * The `nylas-cancel-booking-form` component is a UI component that allows users to cancel a booking (DELETE request).\n * This component is also used to reject a booking (PUT request) by the organizer, if the prop `rejectBookingId` is provided.\n *\n * @part ncbf - The cancel booking form container.\n * @part ncbf__icon - The calendar icon.\n * @part ncbf__title - The title of the cancel booking form.\n * @part ncbf__description - The description of the cancel booking form.\n * @part ncbf__reason-textarea - The reason textarea.\n * @part ncbf__button-cta - The cancel booking form CTA button.\n * @part ncbf__button-outline - The cancel booking form outline button.\n * @part ncbf__card - The cancel booking form card.\n */\n@Component({\n tag: 'nylas-cancel-booking-form',\n styleUrl: 'nylas-cancel-booking-form.scss',\n shadow: true,\n})\nexport class NylasCancelBookingForm {\n private textareaRef?: HTMLTextareaComponentElement;\n /**\n * The host element.\n * Used to manage the host element of the provider.\n */\n @Element() private host!: HTMLNylasCancelBookingFormElement;\n\n /**\n * The booking ID to cancel.\n */\n @Prop() readonly cancelBookingId?: string;\n\n /**\n * The booking ID to reject.\n */\n @Prop() readonly rejectBookingId?: string;\n\n /**\n * The selected timeslot.\n */\n @Prop() readonly selectedTimeslot!: Timeslot;\n\n /**\n * @standalone\n * The config settings.\n */\n @Prop() readonly configSettings?: ConfigSettings;\n\n /**\n * @standalone\n * The event info.\n */\n @Prop() readonly eventInfo?: NylasEvent;\n\n /**\n * @standalone\n * The loading state.\n */\n @Prop() readonly isLoading?: boolean;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: any;\n\n /**\n * This event is fired when the Go back button is clicked on the cancel booking form.\n */\n @Event() readonly goBackButtonClicked!: EventEmitter<void>;\n\n /**\n * This event is fired when the cancel booking form is submitted.\n */\n @Event() readonly cancelBookingFormSubmitted!: EventEmitter<{\n bookingId: string;\n action: 'reject' | 'cancel';\n reason: string;\n errorHandler?: (error: NylasSchedulerErrorResponse) => void;\n }>;\n\n /**\n * This event is only for triggering the validation on the text area for cancellation reason. This is for internal purposes only.\n */\n @Event() readonly triggerValidation!: EventEmitter<{}>;\n /**\n * This event is fired when an error occurs while cancelling the booking.\n */\n @Event() readonly cancelBookedEventError!: EventEmitter<NylasSchedulerErrorResponse>;\n\n /**\n * This event is fired when an error occurs in the booking form.\n */\n @Event() cancelBookingFormError!: EventEmitter<Partial<Notification>>;\n\n /**\n * The reason for cancellation.\n */\n @State() cancellationReason: string = '';\n\n @State() cancellationError: string = '';\n\n @State() cancellationPolicy: string = this.configSettings?.scheduler?.cancellation_policy || 'Your current timeslot will become available to others.';\n\n @Watch('configSettings')\n configSettingsChangedHandler(newValue: ConfigSettings) {\n this.cancellationPolicy = newValue?.scheduler?.cancellation_policy || 'Your current timeslot will become available to others.';\n }\n\n @Watch('themeConfig')\n themeConfigChanged(newThemeConfig: ThemeConfig) {\n this.applyThemeConfig(newThemeConfig);\n }\n\n connectedCallback() {\n debug(`[nylas-cancel-booking-form] Component connected`);\n }\n\n async componentWillLoad() {\n debug(`[nylas-cancel-booking-form] Component will load`);\n }\n\n async componentDidLoad() {\n debug(`[nylas-cancel-booking-form] Component did load`);\n if (!this.cancelBookingId) {\n console.warn(`[nylas-cancel-booking-form] No booking ID provided, \"cancelBookingId\" prop is required.`);\n }\n this.applyThemeConfig(this.themeConfig);\n }\n\n disconnectedCallback() {\n debug(`[nylas-cancel-booking-form] Component disconnected`);\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 this.textareaRef?.style.setProperty(`${key}`, value);\n }\n }\n }\n\n private handleGoBackClicked = () => {\n this.goBackButtonClicked.emit();\n };\n\n private handleSubmitCancelBooking = (event: Event) => {\n this.triggerValidation.emit({});\n event.preventDefault();\n if (!this.cancellationReason) {\n this.cancellationError = i18next.t('cancellationErrorMessage');\n this.cancelBookingFormError.emit({ title: i18next.t('cancelBokingFormError'), description: i18next.t('cancellationErrorMessage') });\n return;\n }\n\n const minCancellationNotice = this.configSettings?.scheduler?.min_cancellation_notice;\n if (this.selectedTimeslot && minCancellationNotice) {\n const startTime = new Date(this.selectedTimeslot?.start_time);\n const dateTillCancellation = startTime.getTime() - minCancellationNotice * 60 * 1000;\n\n if (dateTillCancellation < new Date().getTime()) {\n this.cancelBookedEventError.emit({\n error: {\n title: i18next.t('cancellationErrorTitle'),\n message: i18next.t('minimumCancellationNoticeErrorMessage', { minCancellationNotice }),\n },\n });\n return;\n }\n }\n\n debug(`[nylas-cancel-booking-form] Cancel booking form submitted with reason: ${this.cancellationReason}`);\n const errorHandler = (error: NylasSchedulerErrorResponse) => {\n this.cancelBookedEventError.emit(error);\n };\n if (this.cancelBookingId) {\n this.cancelBookingFormSubmitted.emit({ bookingId: this.cancelBookingId, action: 'cancel', reason: this.cancellationReason, errorHandler });\n } else if (this.rejectBookingId) {\n this.cancelBookingFormSubmitted.emit({ bookingId: this.rejectBookingId, action: 'reject', reason: this.cancellationReason, errorHandler });\n }\n };\n\n @Listen('nylasFormInputChanged')\n handleNylasFormInputChanged(event: CustomEvent<{ value: string; name: string; error: string; label: string; type: string }>) {\n this.triggerValidation.emit({});\n if (event.detail.name === 'cancel-reason') {\n this.cancellationReason = event.detail.value;\n this.cancellationError = event.detail.error;\n }\n }\n\n @RegisterComponent<NylasCancelBookingForm, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-cancel-booking-form',\n stateToProps: new Map([\n ['scheduler.configSettings', 'configSettings'],\n ['scheduler.selectedTimeslot', 'selectedTimeslot'],\n ['scheduler.eventInfo', 'eventInfo'],\n ['scheduler.isLoading', 'isLoading'],\n ['scheduler.cancelBookingId', 'cancelBookingId'],\n ['scheduler.rejectBookingId', 'rejectBookingId'],\n ['scheduler.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {\n cancelBookingFormSubmitted: async (\n event: CustomEvent<{ bookingId: string; action: 'reject' | 'cancel'; reason: string; errorHandler?: (error: NylasSchedulerErrorResponse) => void }>,\n nylasSchedulerConnector: NylasSchedulerConnector,\n ) => {\n const { action, errorHandler } = event.detail;\n if (action === 'cancel') {\n const result = await nylasSchedulerConnector.scheduler.cancelBooking(event.detail.bookingId, event.detail.reason);\n if (errorHandler && (!result || 'error' in result)) {\n errorHandler(result);\n }\n } else if (action === 'reject') {\n const result = await nylasSchedulerConnector.scheduler.updateBooking({\n bookingId: event.detail.bookingId,\n status: 'cancelled',\n reason: event.detail.reason,\n });\n if (errorHandler && (!result || 'error' in result)) {\n errorHandler(result);\n }\n }\n },\n goBackButtonClicked: async (event: CustomEvent<void>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-cancel-booking-form', 'goBackButtonClicked', event.detail);\n nylasSchedulerConnector.scheduler.goBack();\n },\n cancelBookedEventError: async (event: CustomEvent<NylasSchedulerErrorResponse>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-cancel-booking-form', 'cancelBookedEventError', event.detail);\n },\n cancelBookingFormError: async (event: CustomEvent<Partial<Notification>>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-cancel-booking-form', 'cancelBookingFormError', event.detail);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host part=\"ncbf\">\n <div class=\"nylas-cancel-booking-form\" part=\"ncbf__card\">\n <div class=\"nylas-cancel-booking-form__calendar-icon\" part=\"ncbf__icon\">\n <calendar-cancel-icon />\n </div>\n <h3 class=\"nylas-cancel-booking-form__title\" part=\"ncbf__title\">\n {i18next.t('cancelBookingTitle')}\n </h3>\n <div class=\"nylas-cancel-booking-form__description\" part=\"ncbf__description\">\n {!this.configSettings?.scheduler?.cancellation_policy ? `${i18next.t('cancelBookingMessage')}` : this.cancellationPolicy}\n </div>\n <form onSubmit={this.handleSubmitCancelBooking}>\n <textarea-component\n id=\"cancel-reason\"\n name=\"cancel-reason\"\n ref={el => (this.textareaRef = el)}\n required={true}\n label={i18next.t('reasonForCancellation')}\n class={this.cancellationError ? 'error' : ''}\n part=\"ncbf__reason-textarea\"\n defaultValue={this.cancellationReason}\n ></textarea-component>\n <div class=\"footer\">\n <button-component variant={'destructive'} class=\"cancel\" type=\"submit\" part=\"ncbf__button-cta\" disabled={this.isLoading}>\n {i18next.t('cancelBookingButton')}\n </button-component>\n {!!this.eventInfo && (\n <button-component variant={'basic'} class=\"back\" part=\"ncbf__button-outline\" onClick={this.handleGoBackClicked}>\n {i18next.t('goBackButton')}\n </button-component>\n )}\n </div>\n </form>\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"nylas-cancel-booking-form.js","sourceRoot":"","sources":["../../../../src/components/scheduler/nylas-cancel-booking-form/nylas-cancel-booking-form.tsx"],"names":[],"mappings":"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","sourcesContent":["import { RegisterComponent } from '@/common/register-component';\nimport { Component, Element, Event, EventEmitter, h, Host, Listen, Prop, State, Watch } from '@stencil/core';\nimport { NylasSchedulerConnector } from '../../..';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { debug } from '@/utils/utils';\nimport { Notification, NylasSchedulerErrorResponse, ThemeConfig, Timeslot } from '@nylas/core';\nimport { ConfigSettings } from '@/stores/scheduler-store';\nimport i18next from '@/utils/i18n';\nimport { NylasEvent } from '@/common/types';\nimport { LANGUAGE_CODE } from '@/common/constants';\n\n/**\n * The `nylas-cancel-booking-form` component is a UI component that allows users to cancel a booking (DELETE request).\n * This component is also used to reject a booking (PUT request) by the organizer, if the prop `rejectBookingId` is provided.\n *\n * @part ncbf - The cancel booking form container.\n * @part ncbf__icon - The calendar icon.\n * @part ncbf__title - The title of the cancel booking form.\n * @part ncbf__description - The description of the cancel booking form.\n * @part ncbf__reason-textarea - The reason textarea.\n * @part ncbf__button-cta - The cancel booking form CTA button.\n * @part ncbf__button-outline - The cancel booking form outline button.\n * @part ncbf__card - The cancel booking form card.\n */\n@Component({\n tag: 'nylas-cancel-booking-form',\n styleUrl: 'nylas-cancel-booking-form.scss',\n shadow: true,\n})\nexport class NylasCancelBookingForm {\n private textareaRef?: HTMLTextareaComponentElement;\n /**\n * The host element.\n * Used to manage the host element of the provider.\n */\n @Element() private host!: HTMLNylasCancelBookingFormElement;\n\n /**\n * The booking ID to cancel.\n */\n @Prop() readonly cancelBookingId?: string;\n\n /**\n * The booking ID to reject.\n */\n @Prop() readonly rejectBookingId?: string;\n\n /**\n * The selected timeslot.\n */\n @Prop() readonly selectedTimeslot!: Timeslot;\n\n /**\n * @standalone\n * The config settings.\n */\n @Prop() readonly configSettings?: ConfigSettings;\n\n /**\n * @standalone\n * The event info.\n */\n @Prop() readonly eventInfo?: NylasEvent;\n\n /**\n * @standalone\n * The loading state.\n */\n @Prop() readonly isLoading?: boolean;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: any;\n\n /**\n * @standalone\n * The default language.\n */\n @Prop() readonly selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * This event is fired when the Go back button is clicked on the cancel booking form.\n */\n @Event() readonly goBackButtonClicked!: EventEmitter<void>;\n\n /**\n * This event is fired when the cancel booking form is submitted.\n */\n @Event() readonly cancelBookingFormSubmitted!: EventEmitter<{\n bookingId: string;\n action: 'reject' | 'cancel';\n reason: string;\n errorHandler?: (error: NylasSchedulerErrorResponse) => void;\n }>;\n\n /**\n * This event is only for triggering the validation on the text area for cancellation reason. This is for internal purposes only.\n */\n @Event() readonly triggerValidation!: EventEmitter<{}>;\n /**\n * This event is fired when an error occurs while cancelling the booking.\n */\n @Event() readonly cancelBookedEventError!: EventEmitter<NylasSchedulerErrorResponse>;\n\n /**\n * This event is fired when an error occurs in the booking form.\n */\n @Event() cancelBookingFormError!: EventEmitter<Partial<Notification>>;\n\n /**\n * The reason for cancellation.\n */\n @State() cancellationReason: string = '';\n\n @State() cancellationError: string = '';\n\n @State() cancellationPolicy: string = this.configSettings?.scheduler?.cancellation_policy || 'Your current timeslot will become available to others.';\n\n @Watch('configSettings')\n configSettingsChangedHandler(newValue: ConfigSettings) {\n this.cancellationPolicy = newValue?.scheduler?.cancellation_policy || 'Your current timeslot will become available to others.';\n }\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 debug(`[nylas-cancel-booking-form] Component connected`);\n }\n\n async componentWillLoad() {\n debug(`[nylas-cancel-booking-form] Component will load`);\n }\n\n async componentDidLoad() {\n debug(`[nylas-cancel-booking-form] Component did load`);\n if (!this.cancelBookingId) {\n console.warn(`[nylas-cancel-booking-form] No booking ID provided, \"cancelBookingId\" prop is required.`);\n }\n this.applyThemeConfig(this.themeConfig);\n }\n\n disconnectedCallback() {\n debug(`[nylas-cancel-booking-form] Component disconnected`);\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 this.textareaRef?.style.setProperty(`${key}`, value);\n }\n }\n }\n\n private handleGoBackClicked = () => {\n this.goBackButtonClicked.emit();\n };\n\n private handleSubmitCancelBooking = (event: Event) => {\n this.triggerValidation.emit({});\n event.preventDefault();\n if (!this.cancellationReason) {\n this.cancellationError = i18next.t('cancellationErrorMessage');\n this.cancelBookingFormError.emit({ title: i18next.t('cancelBokingFormError'), description: i18next.t('cancellationErrorMessage') });\n return;\n }\n\n const minCancellationNotice = this.configSettings?.scheduler?.min_cancellation_notice;\n if (this.selectedTimeslot && minCancellationNotice) {\n const startTime = new Date(this.selectedTimeslot?.start_time);\n const dateTillCancellation = startTime.getTime() - minCancellationNotice * 60 * 1000;\n\n if (dateTillCancellation < new Date().getTime()) {\n this.cancelBookedEventError.emit({\n error: {\n title: i18next.t('cancellationErrorTitle'),\n message: i18next.t('minimumCancellationNoticeErrorMessage', { minCancellationNotice }),\n },\n });\n return;\n }\n }\n\n debug(`[nylas-cancel-booking-form] Cancel booking form submitted with reason: ${this.cancellationReason}`);\n const errorHandler = (error: NylasSchedulerErrorResponse) => {\n this.cancelBookedEventError.emit(error);\n };\n if (this.cancelBookingId) {\n this.cancelBookingFormSubmitted.emit({ bookingId: this.cancelBookingId, action: 'cancel', reason: this.cancellationReason, errorHandler });\n } else if (this.rejectBookingId) {\n this.cancelBookingFormSubmitted.emit({ bookingId: this.rejectBookingId, action: 'reject', reason: this.cancellationReason, errorHandler });\n }\n };\n\n @Listen('nylasFormInputChanged')\n handleNylasFormInputChanged(event: CustomEvent<{ value: string; name: string; error: string; label: string; type: string }>) {\n this.triggerValidation.emit({});\n if (event.detail.name === 'cancel-reason') {\n this.cancellationReason = event.detail.value;\n this.cancellationError = event.detail.error;\n }\n }\n\n @RegisterComponent<NylasCancelBookingForm, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-cancel-booking-form',\n stateToProps: new Map([\n ['scheduler.configSettings', 'configSettings'],\n ['scheduler.selectedTimeslot', 'selectedTimeslot'],\n ['scheduler.eventInfo', 'eventInfo'],\n ['scheduler.isLoading', 'isLoading'],\n ['scheduler.cancelBookingId', 'cancelBookingId'],\n ['scheduler.rejectBookingId', 'rejectBookingId'],\n ['scheduler.themeConfig', 'themeConfig'],\n ['scheduler.selectedLanguage', 'selectedLanguage'],\n ]),\n eventToProps: {\n cancelBookingFormSubmitted: async (\n event: CustomEvent<{ bookingId: string; action: 'reject' | 'cancel'; reason: string; errorHandler?: (error: NylasSchedulerErrorResponse) => void }>,\n nylasSchedulerConnector: NylasSchedulerConnector,\n ) => {\n const { action, errorHandler } = event.detail;\n if (action === 'cancel') {\n const result = await nylasSchedulerConnector.scheduler.cancelBooking(event.detail.bookingId, event.detail.reason);\n if (errorHandler && (!result || 'error' in result)) {\n errorHandler(result);\n }\n } else if (action === 'reject') {\n const result = await nylasSchedulerConnector.scheduler.updateBooking({\n bookingId: event.detail.bookingId,\n status: 'cancelled',\n reason: event.detail.reason,\n });\n if (errorHandler && (!result || 'error' in result)) {\n errorHandler(result);\n }\n }\n },\n goBackButtonClicked: async (event: CustomEvent<void>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-cancel-booking-form', 'goBackButtonClicked', event.detail);\n nylasSchedulerConnector.scheduler.goBack();\n },\n cancelBookedEventError: async (event: CustomEvent<NylasSchedulerErrorResponse>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-cancel-booking-form', 'cancelBookedEventError', event.detail);\n },\n cancelBookingFormError: async (event: CustomEvent<Partial<Notification>>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-cancel-booking-form', 'cancelBookingFormError', event.detail);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host part=\"ncbf\">\n <div class=\"nylas-cancel-booking-form\" part=\"ncbf__card\">\n <div class=\"nylas-cancel-booking-form__calendar-icon\" part=\"ncbf__icon\">\n <calendar-cancel-icon />\n </div>\n <h3 class=\"nylas-cancel-booking-form__title\" part=\"ncbf__title\">\n {i18next.t('cancelBookingTitle')}\n </h3>\n <div class=\"nylas-cancel-booking-form__description\" part=\"ncbf__description\">\n {!this.configSettings?.scheduler?.cancellation_policy ? `${i18next.t('cancelBookingMessage')}` : this.cancellationPolicy}\n </div>\n <form onSubmit={this.handleSubmitCancelBooking}>\n <textarea-component\n id=\"cancel-reason\"\n name=\"cancel-reason\"\n ref={el => (this.textareaRef = el)}\n required={true}\n label={i18next.t('reasonForCancellation')}\n class={this.cancellationError ? 'error' : ''}\n part=\"ncbf__reason-textarea\"\n defaultValue={this.cancellationReason}\n ></textarea-component>\n <div class=\"footer\">\n <button-component variant={'destructive'} class=\"cancel\" type=\"submit\" part=\"ncbf__button-cta\" disabled={this.isLoading}>\n {i18next.t('cancelBookingButton')}\n </button-component>\n {!!this.eventInfo && (\n <button-component variant={'basic'} class=\"back\" part=\"ncbf__button-outline\" onClick={this.handleGoBackClicked}>\n {i18next.t('goBackButton')}\n </button-component>\n )}\n </div>\n </form>\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -28,9 +28,15 @@ export class NylasCancelledEventCard {
28
28
  };
29
29
  this.configSettings = undefined;
30
30
  this.themeConfig = undefined;
31
+ this.selectedLanguage = undefined;
31
32
  this.cancelledEventInfo = undefined;
32
33
  this.isClosing = false;
33
34
  }
35
+ selectedLanguageChangedHandler(newVal, oldVal) {
36
+ if (newVal === oldVal)
37
+ return;
38
+ i18next.changeLanguage(newVal);
39
+ }
34
40
  themeConfigChanged(newThemeConfig) {
35
41
  this.applyThemeConfig(newThemeConfig);
36
42
  }
@@ -58,7 +64,7 @@ export class NylasCancelledEventCard {
58
64
  }
59
65
  }
60
66
  render() {
61
- return (h(Host, { key: '083fbbc7ef04f3e037a0fe3c2aa1dd70a8e1c049', part: "ncec" }, h("div", { key: '0955ff30d911fee7b8e63953ac127b72737e4835', class: "nylas-cancelled-event-card", part: "ncec__card" }, h("div", { key: 'ef03e95d6193b50d9630ca7efd019c901efe30b3', class: "nylas-cancelled-event-card__calendar-icon", part: "ncec__icon" }, h("calendar-cancel-icon", { key: 'eb8436c4eda440723aa9ff667ca9489cfe913647' })), h("h3", { key: '1ca9672ad9493238bbd2f4a2a560c74bb165e077', class: "nylas-cancelled-event-card__title", part: "ncec__title" }, i18next.t('bookingCancelledTitle'), "!"), h("div", { key: '49a5eea71ee9b1ec821795b974625f684d9af4a4', class: "nylas-cancelled-event-card__description", part: "ncec__description" }, i18next.t('bookingCancelledMessage'), " ", this.configSettings?.organizer?.name || i18next.t('bookingCancelledMessage_theParticipants'), "."), h("div", { key: 'c4680cc9a2765eeec5bf57be71f5c3a209f71a03', class: "nylas-cancelled-event-card__cta" }, h("button-component", { key: 'a74c16a527d0f448ac18041d257cb64af7c7c1ba', variant: "basic", disabled: this.isClosing, part: "ncec__button-outline", onClick: this.handleCloseClicked }, this.isClosing ? `${i18next.t('closingButton')}...` : `${i18next.t('closeButton')}`)))));
67
+ return (h(Host, { key: 'bde7d46555a6f6033089f6d49f853df1a7cd0dab', part: "ncec" }, h("div", { key: 'a1be2ed4bead0b89572565d00ace39f9a3c0a50d', class: "nylas-cancelled-event-card", part: "ncec__card" }, h("div", { key: 'e963d4ab8e599fac8809b3d264602cfc2954064a', class: "nylas-cancelled-event-card__calendar-icon", part: "ncec__icon" }, h("calendar-cancel-icon", { key: '5cccb2a26d77253b99ed377366e312f114406d03' })), h("h3", { key: '9fed1c485eafff15e04d5a36c58488cc337de9e9', class: "nylas-cancelled-event-card__title", part: "ncec__title" }, i18next.t('bookingCancelledTitle'), "!"), h("div", { key: '081f5d0b0615663c0e79aea7b70ea602375f9547', class: "nylas-cancelled-event-card__description", part: "ncec__description" }, i18next.t('bookingCancelledMessage'), " ", this.configSettings?.organizer?.name || i18next.t('bookingCancelledMessage_theParticipants'), "."), h("div", { key: '697fbb9cccb9c665d35769f44ae16ff7a2a8ad36', class: "nylas-cancelled-event-card__cta" }, h("button-component", { key: 'e4f77128ff98787aca19549e51406d5d88b6fe1a', variant: "basic", disabled: this.isClosing, part: "ncec__button-outline", onClick: this.handleCloseClicked }, this.isClosing ? `${i18next.t('closingButton')}...` : `${i18next.t('closeButton')}`)))));
62
68
  }
63
69
  static get is() { return "nylas-cancelled-event-card"; }
64
70
  static get encapsulation() { return "shadow"; }
@@ -118,6 +124,29 @@ export class NylasCancelledEventCard {
118
124
  "attribute": "theme-config",
119
125
  "reflect": false
120
126
  },
127
+ "selectedLanguage": {
128
+ "type": "string",
129
+ "mutable": false,
130
+ "complexType": {
131
+ "original": "LANGUAGE_CODE",
132
+ "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",
133
+ "references": {
134
+ "LANGUAGE_CODE": {
135
+ "location": "import",
136
+ "path": "../../..",
137
+ "id": "src/index.ts::LANGUAGE_CODE"
138
+ }
139
+ }
140
+ },
141
+ "required": false,
142
+ "optional": true,
143
+ "docs": {
144
+ "tags": [],
145
+ "text": "The selected language."
146
+ },
147
+ "attribute": "selected-language",
148
+ "reflect": false
149
+ },
121
150
  "cancelledEventInfo": {
122
151
  "type": "unknown",
123
152
  "mutable": false,
@@ -198,6 +227,9 @@ export class NylasCancelledEventCard {
198
227
  static get elementRef() { return "host"; }
199
228
  static get watchers() {
200
229
  return [{
230
+ "propName": "selectedLanguage",
231
+ "methodName": "selectedLanguageChangedHandler"
232
+ }, {
201
233
  "propName": "themeConfig",
202
234
  "methodName": "themeConfigChanged"
203
235
  }];
@@ -209,7 +241,7 @@ __decorate([
209
241
  stateToProps: new Map([
210
242
  ['scheduler.configSettings', 'configSettings'],
211
243
  ['scheduler.themeConfig', 'themeConfig'],
212
- ['scheduler.themeConfig', 'themeConfig'],
244
+ ['scheduler.selectedLanguage', 'selectedLanguage'],
213
245
  ]),
214
246
  eventToProps: {
215
247
  closeCancelEventCardClicked: async (_, nylasschedulerconnector) => {