@nylas/web-elements 0.0.0-test-20250319204140 → 0.0.0-test-20250320184617

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 (172) hide show
  1. package/dist/cdn/nylas-scheduler-editor/nylas-scheduler-editor.es.js +26 -26
  2. package/dist/cdn/nylas-scheduling/nylas-scheduling.es.js +4813 -4805
  3. package/dist/cjs/button-component_2.cjs.entry.js +1 -1
  4. package/dist/cjs/button-component_2.cjs.entry.js.map +1 -1
  5. package/dist/cjs/calendar-agenda-fill-icon_36.cjs.entry.js +17 -18
  6. package/dist/cjs/calendar-agenda-fill-icon_36.cjs.entry.js.map +1 -1
  7. package/dist/cjs/chevron-icon_3.cjs.entry.js +1 -1
  8. package/dist/cjs/chevron-icon_3.cjs.entry.js.map +1 -1
  9. package/dist/cjs/google-logo-icon_6.cjs.entry.js +5 -5
  10. package/dist/cjs/google-logo-icon_6.cjs.entry.js.map +1 -1
  11. package/dist/cjs/input-dropdown_2.cjs.entry.js +2 -2
  12. package/dist/cjs/input-dropdown_2.cjs.entry.js.map +1 -1
  13. package/dist/cjs/loader.cjs.js +1 -1
  14. package/dist/cjs/multi-select-dropdown_2.cjs.entry.js +2 -2
  15. package/dist/cjs/multi-select-dropdown_2.cjs.entry.js.map +1 -1
  16. package/dist/cjs/nylas-booked-event-card_12.cjs.entry.js +14 -10
  17. package/dist/cjs/nylas-booked-event-card_12.cjs.entry.js.map +1 -1
  18. package/dist/cjs/nylas-key-points.cjs.entry.js +1 -1
  19. package/dist/cjs/nylas-key-points.cjs.entry.js.map +1 -1
  20. package/dist/cjs/nylas-provider.cjs.entry.js +1 -1
  21. package/dist/cjs/nylas-provider.cjs.entry.js.map +1 -1
  22. package/dist/cjs/nylas-scheduling.cjs.entry.js +1 -1
  23. package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
  24. package/dist/cjs/nylas-web-elements.cjs.js +1 -1
  25. package/dist/cjs/{scheduler-store-c1fc5cf3.js → scheduler-store-df3a9a3a.js} +9 -1
  26. package/dist/cjs/scheduler-store-df3a9a3a.js.map +1 -0
  27. package/dist/collection/components/design-system/button-component/button-component.js +4 -3
  28. package/dist/collection/components/design-system/button-component/button-component.js.map +1 -1
  29. package/dist/collection/components/design-system/input-dropdown/input-dropdown.js +10 -7
  30. package/dist/collection/components/design-system/input-dropdown/input-dropdown.js.map +1 -1
  31. package/dist/collection/components/design-system/multi-select-dropdown/multi-select-dropdown.js +5 -4
  32. package/dist/collection/components/design-system/multi-select-dropdown/multi-select-dropdown.js.map +1 -1
  33. package/dist/collection/components/design-system/select-dropdown/select-dropdown.js +13 -9
  34. package/dist/collection/components/design-system/select-dropdown/select-dropdown.js.map +1 -1
  35. package/dist/collection/components/design-system/time-period-selector/time-period-selector.js +3 -3
  36. package/dist/collection/components/design-system/time-period-selector/time-period-selector.js.map +1 -1
  37. package/dist/collection/components/nylas-notebook/nylas-key-points/nylas-key-points.js +4 -3
  38. package/dist/collection/components/nylas-notebook/nylas-key-points/nylas-key-points.js.map +1 -1
  39. package/dist/collection/components/nylas-provider/nylas-provider.js +1 -1
  40. package/dist/collection/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.js +13 -11
  41. package/dist/collection/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.js.map +1 -1
  42. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js +3 -3
  43. package/dist/collection/components/scheduler/nylas-booking-form/nylas-booking-form.js.map +1 -1
  44. package/dist/collection/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.js +8 -6
  45. package/dist/collection/components/scheduler/nylas-booking-form/test/nylas-booking-form.spec.js.map +1 -1
  46. package/dist/collection/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.js +8 -10
  47. package/dist/collection/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.js.map +1 -1
  48. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js +2 -2
  49. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js.map +1 -1
  50. package/dist/collection/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.js +2 -2
  51. package/dist/collection/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.js.map +1 -1
  52. package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js +36 -21
  53. package/dist/collection/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.js.map +1 -1
  54. package/dist/collection/components/scheduler-editor/nylas-event-duration/nylas-event-duration.js +15 -16
  55. package/dist/collection/components/scheduler-editor/nylas-event-duration/nylas-event-duration.js.map +1 -1
  56. package/dist/collection/connector/nylas-scheduler-connector/errors/index.js +1 -29
  57. package/dist/collection/connector/nylas-scheduler-connector/errors/index.js.map +1 -1
  58. package/dist/collection/connector/shared/api/auth.js.map +1 -1
  59. package/dist/collection/connector/shared/api/scheduler.js.map +1 -1
  60. package/dist/collection/types/index.js +29 -0
  61. package/dist/collection/types/index.js.map +1 -1
  62. package/dist/components/button-component2.js +1 -1
  63. package/dist/components/button-component2.js.map +1 -1
  64. package/dist/components/input-dropdown2.js +1 -1
  65. package/dist/components/input-dropdown2.js.map +1 -1
  66. package/dist/components/multi-select-dropdown2.js +2 -2
  67. package/dist/components/multi-select-dropdown2.js.map +1 -1
  68. package/dist/components/nylas-booked-event-card2.js +9 -5
  69. package/dist/components/nylas-booked-event-card2.js.map +1 -1
  70. package/dist/components/nylas-booking-form2.js +3 -3
  71. package/dist/components/nylas-booking-form2.js.map +1 -1
  72. package/dist/components/nylas-buffer-time2.js +2 -2
  73. package/dist/components/nylas-buffer-time2.js.map +1 -1
  74. package/dist/components/nylas-editor-tabs-group2.js +5 -5
  75. package/dist/components/nylas-editor-tabs-group2.js.map +1 -1
  76. package/dist/components/nylas-event-duration2.js +15 -16
  77. package/dist/components/nylas-event-duration2.js.map +1 -1
  78. package/dist/components/nylas-key-points.js +1 -1
  79. package/dist/components/nylas-key-points.js.map +1 -1
  80. package/dist/components/nylas-organizer-confirmation-card2.js +4 -4
  81. package/dist/components/nylas-organizer-confirmation-card2.js.map +1 -1
  82. package/dist/components/nylas-provider.js.map +1 -1
  83. package/dist/components/nylas-scheduling.js.map +1 -1
  84. package/dist/components/scheduler-store.js +8 -0
  85. package/dist/components/scheduler-store.js.map +1 -1
  86. package/dist/components/select-dropdown2.js +1 -1
  87. package/dist/components/select-dropdown2.js.map +1 -1
  88. package/dist/components/time-period-selector2.js +1 -1
  89. package/dist/components/time-period-selector2.js.map +1 -1
  90. package/dist/esm/button-component_2.entry.js +1 -1
  91. package/dist/esm/button-component_2.entry.js.map +1 -1
  92. package/dist/esm/calendar-agenda-fill-icon_36.entry.js +17 -18
  93. package/dist/esm/calendar-agenda-fill-icon_36.entry.js.map +1 -1
  94. package/dist/esm/chevron-icon_3.entry.js +1 -1
  95. package/dist/esm/chevron-icon_3.entry.js.map +1 -1
  96. package/dist/esm/google-logo-icon_6.entry.js +5 -5
  97. package/dist/esm/google-logo-icon_6.entry.js.map +1 -1
  98. package/dist/esm/input-dropdown_2.entry.js +2 -2
  99. package/dist/esm/input-dropdown_2.entry.js.map +1 -1
  100. package/dist/esm/loader.js +1 -1
  101. package/dist/esm/multi-select-dropdown_2.entry.js +2 -2
  102. package/dist/esm/multi-select-dropdown_2.entry.js.map +1 -1
  103. package/dist/esm/nylas-booked-event-card_12.entry.js +14 -10
  104. package/dist/esm/nylas-booked-event-card_12.entry.js.map +1 -1
  105. package/dist/esm/nylas-key-points.entry.js +1 -1
  106. package/dist/esm/nylas-key-points.entry.js.map +1 -1
  107. package/dist/esm/nylas-provider.entry.js +1 -1
  108. package/dist/esm/nylas-provider.entry.js.map +1 -1
  109. package/dist/esm/nylas-scheduling.entry.js +1 -1
  110. package/dist/esm/nylas-scheduling.entry.js.map +1 -1
  111. package/dist/esm/nylas-web-elements.js +1 -1
  112. package/dist/esm/{scheduler-store-bbb4cf8d.js → scheduler-store-ef022be9.js} +9 -1
  113. package/dist/esm/scheduler-store-ef022be9.js.map +1 -0
  114. package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
  115. package/dist/nylas-web-elements/nylas-web-elements.esm.js.map +1 -1
  116. package/dist/nylas-web-elements/{p-c3cfe486.entry.js → p-09bbd467.entry.js} +2 -2
  117. package/dist/nylas-web-elements/p-09bbd467.entry.js.map +1 -0
  118. package/dist/nylas-web-elements/{p-6371e0a3.entry.js → p-0d80f50b.entry.js} +2 -2
  119. package/dist/nylas-web-elements/p-0d80f50b.entry.js.map +1 -0
  120. package/dist/nylas-web-elements/p-13a6c977.entry.js +2 -0
  121. package/dist/nylas-web-elements/p-13a6c977.entry.js.map +1 -0
  122. package/dist/nylas-web-elements/{p-14569ed8.entry.js → p-1fb32e0e.entry.js} +2 -2
  123. package/dist/nylas-web-elements/p-1fb32e0e.entry.js.map +1 -0
  124. package/dist/nylas-web-elements/{p-19f6fcf8.entry.js → p-3ca36162.entry.js} +2 -2
  125. package/dist/nylas-web-elements/p-3ca36162.entry.js.map +1 -0
  126. package/dist/nylas-web-elements/{p-78bd1f85.entry.js → p-51434e4a.entry.js} +2 -2
  127. package/dist/nylas-web-elements/p-51434e4a.entry.js.map +1 -0
  128. package/dist/nylas-web-elements/p-731a856b.js +2 -0
  129. package/dist/nylas-web-elements/p-731a856b.js.map +1 -0
  130. package/dist/nylas-web-elements/p-7b787c73.entry.js +8 -0
  131. package/dist/nylas-web-elements/p-7b787c73.entry.js.map +1 -0
  132. package/dist/nylas-web-elements/{p-f7ea608d.entry.js → p-a906d005.entry.js} +2 -2
  133. package/dist/nylas-web-elements/p-a906d005.entry.js.map +1 -0
  134. package/dist/nylas-web-elements/p-ab3ba8dc.entry.js +2 -0
  135. package/dist/nylas-web-elements/p-ab3ba8dc.entry.js.map +1 -0
  136. package/dist/nylas-web-elements/{p-91bc630c.entry.js → p-b1c57792.entry.js} +2 -2
  137. package/dist/nylas-web-elements/p-b1c57792.entry.js.map +1 -0
  138. package/dist/types/components/design-system/button-component/button-component.d.ts +1 -2
  139. package/dist/types/components/design-system/input-dropdown/input-dropdown.d.ts +1 -6
  140. package/dist/types/components/design-system/multi-select-dropdown/multi-select-dropdown.d.ts +1 -7
  141. package/dist/types/components/design-system/select-dropdown/select-dropdown.d.ts +1 -6
  142. package/dist/types/components/design-system/time-period-selector/time-period-selector.d.ts +1 -1
  143. package/dist/types/components/nylas-notebook/nylas-key-points/nylas-key-points.d.ts +1 -6
  144. package/dist/types/components/scheduler/nylas-booked-event-card/nylas-booked-event-card.d.ts +2 -1
  145. package/dist/types/components/scheduler/nylas-booking-form/nylas-booking-form.d.ts +1 -1
  146. package/dist/types/components/scheduler/nylas-organizer-confirmation-card/nylas-organizer-confirmation-card.d.ts +1 -1
  147. package/dist/types/components/scheduler-editor/nylas-editor-tabs-group/nylas-editor-tabs-group.d.ts +17 -16
  148. package/dist/types/components/scheduler-editor/nylas-event-duration/nylas-event-duration.d.ts +2 -2
  149. package/dist/types/components.d.ts +17 -17
  150. package/dist/types/connector/nylas-connector/index.d.ts +1 -1
  151. package/dist/types/connector/nylas-scheduler-connector/errors/index.d.ts +1 -31
  152. package/dist/types/connector/shared/api/auth.d.ts +1 -1
  153. package/dist/types/connector/shared/api/scheduler.d.ts +1 -1
  154. package/dist/types/types/index.d.ts +36 -0
  155. package/package.json +2 -2
  156. package/dist/cjs/scheduler-store-c1fc5cf3.js.map +0 -1
  157. package/dist/esm/scheduler-store-bbb4cf8d.js.map +0 -1
  158. package/dist/nylas-web-elements/p-14569ed8.entry.js.map +0 -1
  159. package/dist/nylas-web-elements/p-19f6fcf8.entry.js.map +0 -1
  160. package/dist/nylas-web-elements/p-463d9c42.entry.js +0 -8
  161. package/dist/nylas-web-elements/p-463d9c42.entry.js.map +0 -1
  162. package/dist/nylas-web-elements/p-6371e0a3.entry.js.map +0 -1
  163. package/dist/nylas-web-elements/p-78bd1f85.entry.js.map +0 -1
  164. package/dist/nylas-web-elements/p-91bc630c.entry.js.map +0 -1
  165. package/dist/nylas-web-elements/p-ac757a7b.entry.js +0 -2
  166. package/dist/nylas-web-elements/p-ac757a7b.entry.js.map +0 -1
  167. package/dist/nylas-web-elements/p-b0f18064.entry.js +0 -2
  168. package/dist/nylas-web-elements/p-b0f18064.entry.js.map +0 -1
  169. package/dist/nylas-web-elements/p-c3cfe486.entry.js.map +0 -1
  170. package/dist/nylas-web-elements/p-f0c25e38.js +0 -2
  171. package/dist/nylas-web-elements/p-f0c25e38.js.map +0 -1
  172. package/dist/nylas-web-elements/p-f7ea608d.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"file":"nylas-booking-form2.js","mappings":"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","names":["i18next"],"sources":["src/components/scheduler/nylas-booking-form/nylas-booking-form.scss?tag=nylas-booking-form&encapsulation=shadow","src/components/scheduler/nylas-booking-form/nylas-booking-form.tsx"],"sourcesContent":["@import '../../../common/mixins/inputs.scss';\n@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n height: 100%;\n @include default-css-variables;\n}\n\n.nylas-booking-form {\n width: 100%;\n padding: 1.5rem;\n box-sizing: border-box;\n height: 450px;\n overflow-y: auto;\n height: 100%;\n}\n\nform {\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n}\n\n.cta {\n width: 100%;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0.5rem;\n\n @media #{$mobile} {\n grid-template-columns: 1fr;\n }\n\n align-items: flex-start;\n justify-content: space-between;\n gap: 0.5rem;\n padding: 14px;\n box-sizing: border-box;\n border-top: 1px solid var(--nylas-base-200);\n}\n\n.input-wrapper {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n margin-bottom: 1rem;\n\n input::placeholder {\n color: var(--nylas-base-300);\n }\n\n label,\n input {\n font-family: var(--nylas-font-family);\n font-size: 16px;\n }\n\n .help-text {\n margin: 0;\n color: var(--nylas-error);\n }\n}\n\n.button-wrapper {\n width: 100%;\n align-items: flex-start;\n height: max-content;\n position: relative;\n}\n\n.button-content {\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\ninput[type='text'],\ninput[type='email'] {\n @include textfield;\n\n &.guest-email {\n color: var(--nylas-base-900);\n padding-right: 52px; // Infield button width\n }\n}\n\nlabel {\n @include input-label;\n}\n\nbutton-component.remove-guest {\n position: absolute;\n height: 51px;\n right: 0;\n\n &.error {\n button {\n border-color: var(--nylas-error);\n }\n }\n\n button {\n height: inherit;\n border-top-left-radius: initial;\n border-bottom-left-radius: initial;\n border: none !important;\n border-left: 1px solid var(--nylas-base-300) !important;\n\n &:hover,\n &:focus {\n outline: 1px solid var(--nylas-primary) !important;\n color: var(--nylas-primary);\n }\n }\n}\n\nbutton-component.back {\n button {\n --dot-color: var(--nylas-base-800);\n }\n}\n\n.guest-email-input {\n position: relative;\n display: flex;\n width: 100%;\n}\n\nmulti-select-dropdown {\n &::part(msd_dropdown-label) {\n margin-bottom: 4px;\n }\n\n &::part(msd_dropdown_error) {\n font-size: 16px;\n }\n\n &::part(msd_dropdown-button) {\n height: 52px;\n border-color: var(--nylas-base-300);\n }\n\n &::part(msd_dropdown-button--error) {\n border-width: 2px;\n border-color: var(--nylas-error);\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConnector } from '@/connector/nylas-scheduler-connector';\nimport type { ConfigSettings } from '@/stores/scheduler-store';\nimport type { NylasSchedulerBookingDataWithFlatFields, NylasSchedulerBookingData, NylasEvent } from '@/common/types';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { debug, sanitize } from '@/utils/utils';\nimport { Notification, NylasSchedulerBookingParticipant, ThemeConfig } from '@nylas/core';\nimport sanitizeHtml from 'sanitize-html';\nimport i18next from '@/utils/i18n';\n\nconst emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n\n/**\n * The `nylas-booking-form` component is a UI component that allows users to book an event.\n *\n * The booking form component.\n * @part nbf - The booking form host.\n * @part nbf__input-textfield - The input textfield.\n * @part nbf__button-ghost - The ghost button.\n * @part nbf__button-outline - The outline button.\n * @part nbf__button-primary - The primary button.\n * @part nbf__input-wrapper - The input wrapper.\n * @part nbf__checkbox-component - The checkbox component.\n * @part nbf__radio-button-group - The radio button group.\n * @part nbf__textarea-component - The textarea component.\n * @part nbf__dropdown - The dropdown component.\n * @part nbf__dropdown-button - The dropdown button.\n * @part nbf__dropdown-content - The dropdown content.\n *\n */\n@Component({\n tag: 'nylas-booking-form',\n styleUrl: 'nylas-booking-form.scss',\n shadow: true,\n})\nexport class NylasBookingForm {\n private formRef?: HTMLFormElement;\n /**\n * The host element\n */\n @Element() readonly host!: HTMLNylasBookingFormElement;\n\n /**\n * @standalone\n * The loading state.\n */\n @Prop() readonly isLoading?: boolean;\n\n /**\n * @standalone\n * The booking info.\n */\n @Prop() readonly bookingInfo?: NylasSchedulerBookingData;\n\n /**\n * @standalone\n * The booked event (Used to track if a booking is created in an eventOverride).\n */\n @Prop() readonly eventInfo?: NylasEvent;\n\n /**\n * @standalone\n * The config settings for the scheduler.\n */\n @Prop() readonly configSettings?: ConfigSettings;\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 name is changed.\n */\n @Event() nameChanged!: EventEmitter<string>;\n\n /**\n * This event is fired when the email is changed.\n */\n @Event() emailChanged!: EventEmitter<string>;\n\n /**\n * This event is fired when the cancel button is clicked.\n */\n @Event() backButtonClicked!: EventEmitter<boolean>;\n\n /**\n * This event is fired when the book button is clicked and the form validation is complete and successful.\n * This event is fired before the booking request is sent.\n */\n @Event() detailsConfirmed!: EventEmitter<NylasSchedulerBookingDataWithFlatFields>;\n\n /**\n * This event is fired when an error occurs in the booking form validation.\n */\n @Event() bookingFormError!: EventEmitter<Partial<Notification>>;\n\n /**\n * This event is fired immediately after the book button is clicked.\n * The booking form validation is not complete at this point.\n */\n @Event() bookingFormSubmitted!: EventEmitter<void>;\n\n /**\n * The name of the user.\n */\n @State() name: string = '';\n\n /**\n * The email address of the user.\n */\n @State() email: string = '';\n\n /**\n * The guests of the user.\n */\n @State() guestEmails: string[] = [];\n\n /**\n * Guest email input errors.\n */\n @State() guestEmailErrors: { [key: number]: string } = {};\n\n /**\n * State to check if name is valid.\n */\n @State() isNameValid: boolean = true;\n\n /**\n * State to check if email is valid.\n */\n @State() isEmailValid: boolean = true;\n\n @State() additionalFields?: Record<string, string> = {};\n\n /**\n * Error message state.\n */\n @State() validationError: { name: string; email: string } = { name: '', email: '' };\n\n @State() backButtonLoading: boolean = false;\n\n @State() firstRender: boolean = true;\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n componentWillLoad() {\n debug('nylas-booking-form', 'componentWillLoad', this.bookingInfo);\n }\n\n componentDidLoad() {\n debug('nylas-booking-form', 'componentDidLoad', this.bookingInfo);\n // Set the name and email from the bookingInfo if it exists,\n // otherwise set it from the config settings.\n if (this.configSettings?.booking) {\n this.configSettingsChangedHandler(this.configSettings);\n } else if (this.bookingInfo) {\n this.bookingInfoChangedHandler(this.bookingInfo);\n }\n\n this.applyThemeConfig(this.themeConfig);\n }\n\n componentDidRender() {\n if (this.firstRender) {\n this.applyThemeConfig(this.themeConfig);\n }\n }\n\n @Watch('bookingInfo')\n bookingInfoChangedHandler(newValue: NylasSchedulerBookingData | undefined) {\n if (newValue && newValue.primaryParticipant) {\n this.name = newValue.primaryParticipant.name || this.name;\n this.email = newValue.primaryParticipant.email || this.email;\n }\n if (newValue?.guests && Array.isArray(newValue.guests)) {\n this.guestEmails = newValue.guests.map(guest => guest.email);\n }\n }\n\n @Watch('configSettings')\n configSettingsChangedHandler(newValue: ConfigSettings | undefined) {\n if (!this.bookingInfo?.primaryParticipant?.name && newValue && newValue.booking?.guest?.name) {\n this.name = newValue.booking.guest.name || this.name;\n }\n if (!this.bookingInfo?.primaryParticipant?.email && newValue && newValue.booking?.guest?.email) {\n this.email = newValue.booking.guest.email || this.email;\n }\n\n if (!this.bookingInfo?.guests && newValue?.booking?.additional_guests && Array.isArray(newValue.booking.additional_guests)) {\n this.guestEmails = newValue.booking.additional_guests.map(guest => guest.email);\n }\n }\n\n @Watch('themeConfig')\n themeConfigChanged(newThemeConfig: ThemeConfig) {\n this.applyThemeConfig(newThemeConfig);\n }\n\n iterateFormComponents() {\n // Select the form element\n const form = this.formRef;\n const customComponentsList = [\n 'input-component',\n 'button-component',\n 'select-dropdown',\n 'checkbox-component',\n 'radio-button-group',\n 'textarea-component',\n 'nylas-date-component',\n 'multi-select-dropdown',\n ];\n\n const customComponents: unknown[] = [];\n if (form) {\n // Recursive function to traverse all children\n const traverseElements = (element: HTMLElement) => {\n Array.from(element.children).forEach(child => {\n const tagName = child.tagName.toLowerCase();\n if (customComponentsList.includes(tagName)) {\n customComponents.push(child as HTMLElement);\n }\n // Recursively traverse child elements\n traverseElements(child as HTMLElement);\n });\n };\n\n // Start traversal from the form\n traverseElements(form);\n }\n return customComponents;\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 const customComponents = this.iterateFormComponents();\n customComponents.forEach(component => {\n (component as any).style.setProperty(`${key}`, value);\n (component as any).shadowRoot?.host.style.setProperty(`${key}`, value);\n });\n }\n }\n }\n\n /**\n * Change the name.\n * @param name The name to select.\n */\n changeName(name: string) {\n // Reset the validation error\n this.isNameValid = true;\n this.validationError.name = '';\n\n this.name = sanitize(name);\n this.nameChanged.emit(name);\n }\n\n /**\n * Change the email.\n * @param email The email to select.\n */\n changeEmail(email: string) {\n // Reset the validation error\n this.isEmailValid = true;\n this.validationError.email = '';\n\n this.email = sanitizeHtml(email);\n this.emailChanged.emit(email);\n }\n\n resetGuestEmailError(guestIndex: number) {\n const errors = { ...this.guestEmailErrors };\n delete errors[guestIndex];\n this.guestEmailErrors = { ...errors };\n }\n\n /**\n * Handle guest emails changed.\n */\n handleGuestChange = (guestIndex: number, email: string) => {\n // Reset the validation error\n this.resetGuestEmailError(guestIndex);\n const guests = [...this.guestEmails];\n guests[guestIndex] = sanitizeHtml(email);\n this.guestEmails = [...guests];\n };\n\n /**\n * Handle guest input blur.\n */\n handleGuestBlur = (guestIndex: number, email: string) => {\n this.resetGuestEmailError(guestIndex);\n\n if (email === '') {\n this.guestEmailErrors[guestIndex] = i18next.t('fieldRequired', { field: i18next.t('email') });\n return;\n }\n if (!emailRegex.test(email)) {\n this.guestEmailErrors[guestIndex] = i18next.t('invalidInputFormat', { field: i18next.t('email') });\n return;\n }\n this.handleGuestChange(guestIndex, email);\n };\n\n /**\n * Handle add guest button clicked.\n */\n addGuestButtonClickedHandler = e => {\n e.preventDefault();\n this.guestEmails = [...this.guestEmails, ''];\n };\n\n /**\n * Handle remove guest button clicked.\n */\n removeGuestButtonClickHandler = (e: Event, guestIndex: number) => {\n e.preventDefault();\n this.resetGuestEmailError(guestIndex);\n\n const guests = [...this.guestEmails];\n guests.splice(guestIndex, 1);\n this.guestEmails = [...guests];\n };\n\n /**\n * Handle back button clicked.\n */\n handleBackButtonClicked = e => {\n e.preventDefault();\n this.backButtonLoading = true;\n this.backButtonClicked.emit();\n };\n\n /**\n * Handle book button clicked.\n */\n bookButtonClickedHandler = async (e: Event) => {\n e.preventDefault();\n const formSubmittedEvent = this.bookingFormSubmitted.emit();\n if (formSubmittedEvent.defaultPrevented) {\n return;\n }\n\n debug('nylas-booking-form', 'bookButtonClickedHandler', this.bookingInfo);\n const name = this.name;\n const email = this.email;\n\n if (!name || name === '') {\n this.isNameValid = false;\n this.validationError.name = i18next.t('fieldRequired', { field: i18next.t('name') }) || 'Name is required';\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: 'Name is required',\n });\n return;\n }\n if (!email || email === '') {\n this.isEmailValid = false;\n this.validationError.email = i18next.t('fieldRequired', { field: i18next.t('email') }) || 'Email is required';\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: 'Email is required',\n });\n return;\n }\n if (!emailRegex.test(email)) {\n this.isEmailValid = false;\n this.validationError.email = i18next.t('invalidInputFormat', { field: i18next.t('email') });\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: i18next.t('invalidInputFormat', { field: i18next.t('email') }) || 'Invalid email',\n });\n return;\n }\n\n let guests: NylasSchedulerBookingParticipant[] = [];\n if (this.guestEmails.length > 0) {\n let hasError = false;\n this.guestEmails.forEach((email: string, i: number) => {\n if (email === '') {\n hasError = true;\n this.guestEmailErrors = { ...this.guestEmailErrors, [i]: i18next.t('fieldRequired', { field: i18next.t('email') }) };\n } else if (!emailRegex.test(email)) {\n hasError = true;\n this.guestEmailErrors = { ...this.guestEmailErrors, [i]: i18next.t('invalidInputFormat', { field: i18next.t('email') }) };\n }\n });\n if (hasError) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: i18next.t('invalidInputFormat', { field: i18next.t('guestEmail') }) || 'Invalid guest email',\n });\n return;\n }\n guests = this.guestEmails.map((email: string) => ({ name: email.trim(), email: email.trim() }));\n }\n\n const bookingInfoAdditionalFields = {};\n const configAdditionalFields = this.configSettings?.scheduler?.additional_fields || {};\n const configSettingsBookingAdditionalFields = this.configSettings?.booking?.additional_fields || {};\n if (this.bookingInfo?.additionalFields) {\n Object.entries(this.bookingInfo.additionalFields).forEach(([key, obj]) => {\n if (key in configAdditionalFields && typeof obj.value !== 'undefined') {\n bookingInfoAdditionalFields[key] = obj.value;\n }\n });\n }\n // If the additional field is not passed in the bookingInfo, set it to the default value if it exists\n Object.entries(configAdditionalFields).forEach(([key, obj]) => {\n if (!(key in bookingInfoAdditionalFields)) {\n const value = configSettingsBookingAdditionalFields[key] || obj.default || '';\n bookingInfoAdditionalFields[key] = value;\n }\n });\n\n this.detailsConfirmed.emit({\n primaryParticipant: {\n name: name,\n email: email,\n },\n guests: guests,\n additionalFields: { ...bookingInfoAdditionalFields, ...this.additionalFields },\n });\n };\n\n updateAdditionalFields = (name: string, value: string) => {\n if (this.additionalFields) {\n this.additionalFields[name] = value;\n }\n };\n\n @Listen('nylasFormInputChanged')\n nylasFormInputChangedHandler(event: CustomEvent<{ value: string; name: string; error: string; label: string; type?: string }>) {\n switch (event.detail.name) {\n case 'name':\n this.changeName(event.detail.value);\n break;\n case 'email':\n this.changeEmail(event.detail.value);\n break;\n default:\n if (event.detail.error) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: event.detail.error,\n });\n return;\n }\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n break;\n }\n }\n\n @Listen('nylasFormDropdownChanged')\n selectOptionChangedHandler(event: CustomEvent<{ value: string; name: string; label: string; error?: string }>) {\n if (event.detail.error) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: event.detail.error,\n });\n return;\n }\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n }\n\n @Listen('selectedOptionsChanged')\n selecedOptionsChangedHandler(event: CustomEvent<{ value: string; name: string; label: string; error?: string }>) {\n if (event.detail.error) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: event.detail.error,\n });\n return;\n }\n const values = event.detail.value.toString();\n this.updateAdditionalFields(event.detail.name, values);\n }\n\n @Listen('nylasFormSwitchToggled')\n switchToggledHandler(event: CustomEvent<{ checked: boolean; name: string; label: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.checked ? 'true' : 'false');\n }\n\n @Listen('nylasFormCheckboxToggled')\n checkboxToggledHandler(event: CustomEvent<{ checked: boolean; name: string; label: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.checked ? 'true' : 'false');\n }\n\n @Listen('nylasFormRadioChanged')\n radioChangedHandler(event: CustomEvent<{ value: string; name: string; label: string; type: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n }\n\n @Listen('nylasFormDropdownDefaultSelected')\n dropdownDefaultSelectedHandler(event: CustomEvent<{ value: string; name: string; label: string; error?: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n }\n\n @RegisterComponent<NylasBookingForm, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-booking-form',\n stateToProps: new Map([\n ['scheduler.isLoading', 'isLoading'],\n ['scheduler.bookingInfo', 'bookingInfo'],\n ['scheduler.eventInfo', 'eventInfo'],\n ['scheduler.configSettings', 'configSettings'],\n ['scheduler.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {\n backButtonClicked: async (_event: CustomEvent<boolean>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n nylasSchedulerConnector.scheduler.toggleAdditionalData(false);\n },\n nameChanged: async (event: CustomEvent<string>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n nylasSchedulerConnector.scheduler.setParticipantName(event.detail);\n },\n emailChanged: async (event: CustomEvent<string>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n nylasSchedulerConnector.scheduler.setParticipantEmail(event.detail);\n },\n detailsConfirmed: async (event: CustomEvent<NylasSchedulerBookingDataWithFlatFields>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-booking-form', 'detailsConfirmed', event.detail);\n },\n bookingFormSubmitted: async (event: CustomEvent<void>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-booking-form', 'bookingFormSubmitted', event.detail);\n },\n bookingFormError: async (event: CustomEvent<Partial<Notification>>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-booking-form', 'bookingFormError', event.detail);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <form onSubmit={e => this.bookButtonClickedHandler(e)} ref={el => (this.formRef = el)} noValidate>\n <div class=\"nylas-booking-form\" part=\"nbf\">\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <input-component\n label={i18next.t('name')}\n name=\"name\"\n id=\"name\"\n defaultValue={this.bookingInfo?.primaryParticipant?.name || this.configSettings?.booking?.guest?.name || this.name}\n placeholder={i18next.t('namePlaceholder')}\n type=\"text\"\n readOnly={this.bookingInfo?.primaryParticipant?.nameReadOnly || false}\n required={true}\n requiredError={i18next.t('fieldRequired', { field: i18next.t('name') })}\n patternError={i18next.t('invalidInputFormat', { field: i18next.t('name') })}\n part=\"nbf__input-textfield\"\n />\n </div>\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <input-component\n label={i18next.t('email')}\n name=\"email\"\n id=\"email\"\n pattern={emailRegex}\n defaultValue={this.bookingInfo?.primaryParticipant?.email || this.configSettings?.booking?.guest?.email || this.email}\n placeholder={i18next.t('emailPlaceholder')}\n type=\"email\"\n readOnly={this.bookingInfo?.primaryParticipant?.emailReadOnly || false}\n required={true}\n requiredError={i18next.t('fieldRequired', { field: i18next.t('email') })}\n patternError={i18next.t('invalidInputFormat', { field: i18next.t('email') })}\n part=\"nbf__input-textfield\"\n />\n </div>\n {this.configSettings?.scheduler?.hide_additional_guests !== true && (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n {this.guestEmails.map((email, index) => (\n <div class=\"input-wrapper button-wrapper\">\n <label\n class={{\n error: !!this.guestEmailErrors[index],\n }}\n >\n {i18next.t('guestEmail')}\n </label>\n <div class=\"guest-email-input\">\n <input\n type=\"email\"\n id={`guest-email-${index}`}\n maxLength={100}\n class={{\n 'guest-email': true,\n 'error': !!this.guestEmailErrors[index],\n }}\n placeholder={i18next.t('guestEmailPlaceholder')}\n value={email}\n data-index={index}\n part=\"nbf__input-textfield\"\n onBlur={(e: Event) => this.handleGuestBlur(index, (e.target as HTMLInputElement)?.value)}\n onInput={(e: Event) => this.handleGuestChange(index, (e.target as HTMLInputElement)?.value)}\n ></input>\n <button-component\n variant=\"basic\"\n tooltip=\"Remove guest\"\n onClick={(e: Event) => this.removeGuestButtonClickHandler(e, index)}\n class={{\n 'remove-guest': true,\n 'error': !!this.guestEmailErrors[index],\n }}\n >\n <close-icon />\n </button-component>\n </div>\n <p class=\"help-text\">{this.guestEmailErrors[index]}</p>\n </div>\n ))}\n <button-component class=\"add-guest\" variant=\"invisible\" part=\"nbf__button-ghost\" onClick={e => this.addGuestButtonClickedHandler(e)}>\n <div class=\"button-content\">\n <add-circle-icon slot=\"icon\"></add-circle-icon>\n {this.guestEmails.length > 0 ? `${i18next.t('addAnotherGuest')}` : `${i18next.t('addGuest')}`}\n </div>\n </button-component>\n </div>\n )}\n {Object.entries(\n (this.configSettings?.scheduler?.additional_fields || {}) as Record<\n string,\n {\n required: boolean;\n type: 'email' | 'text' | 'phone_number' | 'dropdown' | 'checkbox' | 'radio_button' | 'multi_line_text' | 'metadata' | 'date' | 'multi_select';\n order: number;\n options?: string[];\n label: string;\n default?: string;\n }\n >,\n )\n ?.sort((a, b) => a[1].order - b[1].order)\n .map(x => {\n const field = x[1];\n const label = field.label;\n const key = x[0];\n const defaultValue = this.bookingInfo?.additionalFields?.[key]?.value || this.configSettings?.booking?.additional_fields?.[key] || field.default || '';\n const fieldReadOnly = this.bookingInfo?.additionalFields?.[key]?.readOnly || false;\n\n switch (field.type) {\n case 'dropdown':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <select-dropdown\n label={label}\n name={key}\n id={key}\n readOnly={fieldReadOnly}\n withSearch={false}\n emptyValue={i18next.t('nylasBookingCalendarPicker.selectOptionLabel')}\n defaultSelectedOption={defaultValue ? { value: defaultValue, label: defaultValue } : undefined}\n options={[\n { value: '', label: i18next.t('nylasBookingCalendarPicker.selectOptionLabel') },\n ...(field.options?.map(option => ({ value: option, label: option })) || []),\n ]}\n required={field.required}\n exportparts=\"sd_dropdown: nbf__dropdown, sd_dropdown-button: nbf__dropdown-button, sd_dropdown-content: nbf__dropdown-content\"\n />\n </div>\n );\n case 'checkbox':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <checkbox-component\n readOnly={fieldReadOnly}\n label={label}\n name={key}\n id={key}\n checked={defaultValue === 'true'}\n required={field.required}\n part=\"nbf__checkbox-component\"\n />\n </div>\n );\n case 'radio_button':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <radio-button-group\n label={label}\n name={key}\n id={key}\n readOnly={fieldReadOnly}\n defaultSelectedValue={defaultValue || field.options?.[0] || ''}\n options={field.options?.map(option => ({ value: option, label: option }))}\n required={field.required}\n part=\"nbf__radio-button-group\"\n />\n </div>\n );\n case 'multi_line_text':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <textarea-component\n readOnly={fieldReadOnly}\n label={label}\n defaultValue={defaultValue}\n name={key}\n id={key}\n required={field.required}\n part=\"nbf__textarea-component\"\n />\n </div>\n );\n case 'date':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <nylas-date-component\n readOnly={fieldReadOnly}\n label={label}\n defaultValue={defaultValue}\n name={key}\n id={key}\n required={field.required}\n part=\"nbf__date-component\"\n />\n </div>\n );\n case 'multi_select': {\n const defaultValues = defaultValue?.split(',').map(item => item.trim()) || [];\n return (\n <div>\n <multi-select-dropdown\n label={label}\n name={key}\n id={key}\n readOnly={fieldReadOnly}\n options={field.options?.map(option => ({ value: option, label: option, selected: defaultValues.includes(option) }))}\n required={field.required}\n exportparts=\"msd_dropdown: nbf__ms_dropdown, msd_dropdown-label: nbf__ms_dropdown-label, msd_dropdown-button: nbf__ms_dropdown-button, msd_dropdown-content: nbf__ms_dropdown-content, msd_dropdown_error: nbf__ms_dropdown_error, msd_dropdown-button--error: nbf__ms_dropdown-button--error\"\n ></multi-select-dropdown>\n </div>\n );\n }\n case 'metadata':\n return null;\n default:\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <input-component\n label={label}\n name={key}\n id={key}\n type={field.type}\n readOnly={fieldReadOnly}\n defaultValue={defaultValue || ''}\n requiredError={i18next.t('fieldRequired', { field: label })}\n required={field.required}\n part=\"nbf__input-textfield\"\n />\n </div>\n );\n }\n })}\n {/* <slot name=\"custom-booking-form\"></slot> */}\n </div>\n <div class=\"cta\">\n <button-component variant={'basic'} class=\"back\" part=\"nbf__button-outline\" isLoading={this.backButtonLoading && this.isLoading} onClick={this.handleBackButtonClicked}>\n <slot name=\"booking-form-back-label\">{`${i18next.t('backButton')}`}</slot>\n </button-component>\n <button-component variant={'primary'} isLoading={!this.backButtonLoading && this.isLoading} disabled={this.isLoading} part=\"nbf__button-primary\" type=\"submit\">\n <slot name=\"booking-form-book-label\">{`${i18next.t('bookNowButton')}`}</slot>\n </button-component>\n </div>\n </form>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"nylas-booking-form2.js","mappings":"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","names":["i18next"],"sources":["src/components/scheduler/nylas-booking-form/nylas-booking-form.scss?tag=nylas-booking-form&encapsulation=shadow","src/components/scheduler/nylas-booking-form/nylas-booking-form.tsx"],"sourcesContent":["@import '../../../common/mixins/inputs.scss';\n@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n height: 100%;\n @include default-css-variables;\n}\n\n.nylas-booking-form {\n width: 100%;\n padding: 1.5rem;\n box-sizing: border-box;\n height: 450px;\n overflow-y: auto;\n height: 100%;\n}\n\nform {\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n}\n\n.cta {\n width: 100%;\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0.5rem;\n\n @media #{$mobile} {\n grid-template-columns: 1fr;\n }\n\n align-items: flex-start;\n justify-content: space-between;\n gap: 0.5rem;\n padding: 14px;\n box-sizing: border-box;\n border-top: 1px solid var(--nylas-base-200);\n}\n\n.input-wrapper {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 4px;\n margin-bottom: 1rem;\n\n input::placeholder {\n color: var(--nylas-base-300);\n }\n\n label,\n input {\n font-family: var(--nylas-font-family);\n font-size: 16px;\n }\n\n .help-text {\n margin: 0;\n color: var(--nylas-error);\n }\n}\n\n.button-wrapper {\n width: 100%;\n align-items: flex-start;\n height: max-content;\n position: relative;\n}\n\n.button-content {\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\ninput[type='text'],\ninput[type='email'] {\n @include textfield;\n\n &.guest-email {\n color: var(--nylas-base-900);\n padding-right: 52px; // Infield button width\n }\n}\n\nlabel {\n @include input-label;\n}\n\nbutton-component.remove-guest {\n position: absolute;\n height: 51px;\n right: 0;\n\n &.error {\n button {\n border-color: var(--nylas-error);\n }\n }\n\n button {\n height: inherit;\n border-top-left-radius: initial;\n border-bottom-left-radius: initial;\n border: none !important;\n border-left: 1px solid var(--nylas-base-300) !important;\n\n &:hover,\n &:focus {\n outline: 1px solid var(--nylas-primary) !important;\n color: var(--nylas-primary);\n }\n }\n}\n\nbutton-component.back {\n button {\n --dot-color: var(--nylas-base-800);\n }\n}\n\n.guest-email-input {\n position: relative;\n display: flex;\n width: 100%;\n}\n\nmulti-select-dropdown {\n &::part(msd_dropdown-label) {\n margin-bottom: 4px;\n }\n\n &::part(msd_dropdown_error) {\n font-size: 16px;\n }\n\n &::part(msd_dropdown-button) {\n height: 52px;\n border-color: var(--nylas-base-300);\n }\n\n &::part(msd_dropdown-button--error) {\n border-width: 2px;\n border-color: var(--nylas-error);\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConnector } from '@/connector/nylas-scheduler-connector';\nimport { ConfigSettings } from '@/stores/scheduler-store';\nimport type { NylasSchedulerBookingDataWithFlatFields, NylasSchedulerBookingData, NylasEvent } from '@/common/types';\nimport { NylasScheduling } from '../nylas-scheduling/nylas-scheduling';\nimport { debug, sanitize } from '@/utils/utils';\nimport { Notification, NylasSchedulerBookingParticipant, ThemeConfig } from '@nylas/core';\nimport sanitizeHtml from 'sanitize-html';\nimport i18next from '@/utils/i18n';\n\nconst emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n\n/**\n * The `nylas-booking-form` component is a UI component that allows users to book an event.\n *\n * The booking form component.\n * @part nbf - The booking form host.\n * @part nbf__input-textfield - The input textfield.\n * @part nbf__button-ghost - The ghost button.\n * @part nbf__button-outline - The outline button.\n * @part nbf__button-primary - The primary button.\n * @part nbf__input-wrapper - The input wrapper.\n * @part nbf__checkbox-component - The checkbox component.\n * @part nbf__radio-button-group - The radio button group.\n * @part nbf__textarea-component - The textarea component.\n * @part nbf__dropdown - The dropdown component.\n * @part nbf__dropdown-button - The dropdown button.\n * @part nbf__dropdown-content - The dropdown content.\n *\n */\n@Component({\n tag: 'nylas-booking-form',\n styleUrl: 'nylas-booking-form.scss',\n shadow: true,\n})\nexport class NylasBookingForm {\n private formRef?: HTMLFormElement;\n /**\n * The host element\n */\n @Element() readonly host!: HTMLNylasBookingFormElement;\n\n /**\n * @standalone\n * The loading state.\n */\n @Prop() readonly isLoading?: boolean;\n\n /**\n * @standalone\n * The booking info.\n */\n @Prop() readonly bookingInfo?: NylasSchedulerBookingData;\n\n /**\n * @standalone\n * The booked event (Used to track if a booking is created in an eventOverride).\n */\n @Prop() readonly eventInfo?: NylasEvent;\n\n /**\n * @standalone\n * The config settings for the scheduler.\n */\n @Prop() readonly configSettings?: ConfigSettings;\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 name is changed.\n */\n @Event() nameChanged!: EventEmitter<string>;\n\n /**\n * This event is fired when the email is changed.\n */\n @Event() emailChanged!: EventEmitter<string>;\n\n /**\n * This event is fired when the cancel button is clicked.\n */\n @Event() backButtonClicked!: EventEmitter<boolean>;\n\n /**\n * This event is fired when the book button is clicked and the form validation is complete and successful.\n * This event is fired before the booking request is sent.\n */\n @Event() detailsConfirmed!: EventEmitter<NylasSchedulerBookingDataWithFlatFields>;\n\n /**\n * This event is fired when an error occurs in the booking form validation.\n */\n @Event() bookingFormError!: EventEmitter<Partial<Notification>>;\n\n /**\n * This event is fired immediately after the book button is clicked.\n * The booking form validation is not complete at this point.\n */\n @Event() bookingFormSubmitted!: EventEmitter<void>;\n\n /**\n * The name of the user.\n */\n @State() name: string = '';\n\n /**\n * The email address of the user.\n */\n @State() email: string = '';\n\n /**\n * The guests of the user.\n */\n @State() guestEmails: string[] = [];\n\n /**\n * Guest email input errors.\n */\n @State() guestEmailErrors: { [key: number]: string } = {};\n\n /**\n * State to check if name is valid.\n */\n @State() isNameValid: boolean = true;\n\n /**\n * State to check if email is valid.\n */\n @State() isEmailValid: boolean = true;\n\n @State() additionalFields?: Record<string, string> = {};\n\n /**\n * Error message state.\n */\n @State() validationError: { name: string; email: string } = { name: '', email: '' };\n\n @State() backButtonLoading: boolean = false;\n\n @State() firstRender: boolean = true;\n\n connectedCallback() {}\n\n disconnectedCallback() {}\n\n componentWillLoad() {\n debug('nylas-booking-form', 'componentWillLoad', this.bookingInfo);\n }\n\n componentDidLoad() {\n debug('nylas-booking-form', 'componentDidLoad', this.bookingInfo);\n // Set the name and email from the bookingInfo if it exists,\n // otherwise set it from the config settings.\n if (this.configSettings?.booking) {\n this.configSettingsChangedHandler(this.configSettings);\n } else if (this.bookingInfo) {\n this.bookingInfoChangedHandler(this.bookingInfo);\n }\n\n this.applyThemeConfig(this.themeConfig);\n }\n\n componentDidRender() {\n if (this.firstRender) {\n this.applyThemeConfig(this.themeConfig);\n }\n }\n\n @Watch('bookingInfo')\n bookingInfoChangedHandler(newValue: NylasSchedulerBookingData | undefined) {\n if (newValue && newValue.primaryParticipant) {\n this.name = newValue.primaryParticipant.name || this.name;\n this.email = newValue.primaryParticipant.email || this.email;\n }\n if (newValue?.guests && Array.isArray(newValue.guests)) {\n this.guestEmails = newValue.guests.map(guest => guest.email);\n }\n }\n\n @Watch('configSettings')\n configSettingsChangedHandler(newValue: ConfigSettings | undefined) {\n if (!this.bookingInfo?.primaryParticipant?.name && newValue && newValue.booking?.guest?.name) {\n this.name = newValue.booking.guest.name || this.name;\n }\n if (!this.bookingInfo?.primaryParticipant?.email && newValue && newValue.booking?.guest?.email) {\n this.email = newValue.booking.guest.email || this.email;\n }\n\n if (!this.bookingInfo?.guests && newValue?.booking?.additional_guests && Array.isArray(newValue.booking.additional_guests)) {\n this.guestEmails = newValue.booking.additional_guests.map(guest => guest.email);\n }\n }\n\n @Watch('themeConfig')\n themeConfigChanged(newThemeConfig: ThemeConfig) {\n this.applyThemeConfig(newThemeConfig);\n }\n\n iterateFormComponents() {\n // Select the form element\n const form = this.formRef;\n const customComponentsList = [\n 'input-component',\n 'button-component',\n 'select-dropdown',\n 'checkbox-component',\n 'radio-button-group',\n 'textarea-component',\n 'nylas-date-component',\n 'multi-select-dropdown',\n ];\n\n const customComponents: unknown[] = [];\n if (form) {\n // Recursive function to traverse all children\n const traverseElements = (element: HTMLElement) => {\n Array.from(element.children).forEach(child => {\n const tagName = child.tagName.toLowerCase();\n if (customComponentsList.includes(tagName)) {\n customComponents.push(child as HTMLElement);\n }\n // Recursively traverse child elements\n traverseElements(child as HTMLElement);\n });\n };\n\n // Start traversal from the form\n traverseElements(form);\n }\n return customComponents;\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 const customComponents = this.iterateFormComponents();\n customComponents.forEach(component => {\n (component as any).style.setProperty(`${key}`, value);\n (component as any).shadowRoot?.host.style.setProperty(`${key}`, value);\n });\n }\n }\n }\n\n /**\n * Change the name.\n * @param name The name to select.\n */\n changeName(name: string) {\n // Reset the validation error\n this.isNameValid = true;\n this.validationError.name = '';\n\n this.name = sanitize(name);\n this.nameChanged.emit(name);\n }\n\n /**\n * Change the email.\n * @param email The email to select.\n */\n changeEmail(email: string) {\n // Reset the validation error\n this.isEmailValid = true;\n this.validationError.email = '';\n\n this.email = sanitizeHtml(email);\n this.emailChanged.emit(email);\n }\n\n resetGuestEmailError(guestIndex: number) {\n const errors = { ...this.guestEmailErrors };\n delete errors[guestIndex];\n this.guestEmailErrors = { ...errors };\n }\n\n /**\n * Handle guest emails changed.\n */\n handleGuestChange = (guestIndex: number, email: string) => {\n // Reset the validation error\n this.resetGuestEmailError(guestIndex);\n const guests = [...this.guestEmails];\n guests[guestIndex] = sanitizeHtml(email);\n this.guestEmails = [...guests];\n };\n\n /**\n * Handle guest input blur.\n */\n handleGuestBlur = (guestIndex: number, email: string) => {\n this.resetGuestEmailError(guestIndex);\n\n if (email === '') {\n this.guestEmailErrors[guestIndex] = i18next.t('fieldRequired', { field: i18next.t('email') });\n return;\n }\n if (!emailRegex.test(email)) {\n this.guestEmailErrors[guestIndex] = i18next.t('invalidInputFormat', { field: i18next.t('email') });\n return;\n }\n this.handleGuestChange(guestIndex, email);\n };\n\n /**\n * Handle add guest button clicked.\n */\n addGuestButtonClickedHandler = e => {\n e.preventDefault();\n this.guestEmails = [...this.guestEmails, ''];\n };\n\n /**\n * Handle remove guest button clicked.\n */\n removeGuestButtonClickHandler = (e: Event, guestIndex: number) => {\n e.preventDefault();\n this.resetGuestEmailError(guestIndex);\n\n const guests = [...this.guestEmails];\n guests.splice(guestIndex, 1);\n this.guestEmails = [...guests];\n };\n\n /**\n * Handle back button clicked.\n */\n handleBackButtonClicked = e => {\n e.preventDefault();\n this.backButtonLoading = true;\n this.backButtonClicked.emit();\n };\n\n /**\n * Handle book button clicked.\n */\n bookButtonClickedHandler = async (e: Event) => {\n e.preventDefault();\n const formSubmittedEvent = this.bookingFormSubmitted.emit();\n if (formSubmittedEvent.defaultPrevented) {\n return;\n }\n\n debug('nylas-booking-form', 'bookButtonClickedHandler', this.bookingInfo);\n const name = this.name;\n const email = this.email;\n\n if (!name || name === '') {\n this.isNameValid = false;\n this.validationError.name = i18next.t('fieldRequired', { field: i18next.t('name') }) || 'Name is required';\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: 'Name is required',\n });\n return;\n }\n if (!email || email === '') {\n this.isEmailValid = false;\n this.validationError.email = i18next.t('fieldRequired', { field: i18next.t('email') }) || 'Email is required';\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: 'Email is required',\n });\n return;\n }\n if (!emailRegex.test(email)) {\n this.isEmailValid = false;\n this.validationError.email = i18next.t('invalidInputFormat', { field: i18next.t('email') });\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: i18next.t('invalidInputFormat', { field: i18next.t('email') }) || 'Invalid email',\n });\n return;\n }\n\n let guests: NylasSchedulerBookingParticipant[] = [];\n if (this.guestEmails.length > 0) {\n let hasError = false;\n this.guestEmails.forEach((email: string, i: number) => {\n if (email === '') {\n hasError = true;\n this.guestEmailErrors = { ...this.guestEmailErrors, [i]: i18next.t('fieldRequired', { field: i18next.t('email') }) };\n } else if (!emailRegex.test(email)) {\n hasError = true;\n this.guestEmailErrors = { ...this.guestEmailErrors, [i]: i18next.t('invalidInputFormat', { field: i18next.t('email') }) };\n }\n });\n if (hasError) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: i18next.t('invalidInputFormat', { field: i18next.t('guestEmail') }) || 'Invalid guest email',\n });\n return;\n }\n guests = this.guestEmails.map((email: string) => ({ name: email.trim(), email: email.trim() }));\n }\n\n const bookingInfoAdditionalFields = {};\n const configAdditionalFields = this.configSettings?.scheduler?.additional_fields || {};\n const configSettingsBookingAdditionalFields = this.configSettings?.booking?.additional_fields || {};\n if (this.bookingInfo?.additionalFields) {\n Object.entries(this.bookingInfo.additionalFields).forEach(([key, obj]) => {\n if (key in configAdditionalFields && typeof obj.value !== 'undefined') {\n bookingInfoAdditionalFields[key] = obj.value;\n }\n });\n }\n // If the additional field is not passed in the bookingInfo, set it to the default value if it exists\n Object.entries(configAdditionalFields).forEach(([key, obj]) => {\n if (!(key in bookingInfoAdditionalFields)) {\n const value = configSettingsBookingAdditionalFields[key] || obj.default || '';\n bookingInfoAdditionalFields[key] = value;\n }\n });\n\n this.detailsConfirmed.emit({\n primaryParticipant: {\n name: name,\n email: email,\n },\n guests: guests,\n additionalFields: { ...bookingInfoAdditionalFields, ...this.additionalFields },\n });\n };\n\n updateAdditionalFields = (name: string, value: string) => {\n if (this.additionalFields) {\n this.additionalFields[name] = value;\n }\n };\n\n @Listen('nylasFormInputChanged')\n nylasFormInputChangedHandler(event: CustomEvent<{ value: string; name: string; error: string; label: string; type?: string }>) {\n switch (event.detail.name) {\n case 'name':\n this.changeName(event.detail.value);\n break;\n case 'email':\n this.changeEmail(event.detail.value);\n break;\n default:\n if (event.detail.error) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: event.detail.error,\n });\n return;\n }\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n break;\n }\n }\n\n @Listen('nylasFormDropdownChanged')\n selectOptionChangedHandler(event: CustomEvent<{ value: string; name: string; label: string; error?: string }>) {\n if (event.detail.error) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: event.detail.error,\n });\n return;\n }\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n }\n\n @Listen('selectedOptionsChanged')\n selecedOptionsChangedHandler(event: CustomEvent<{ value: string; name: string; label: string; error?: string }>) {\n if (event.detail.error) {\n this.bookingFormError.emit({\n title: 'Booking form error',\n description: event.detail.error,\n });\n return;\n }\n const values = event.detail.value.toString();\n this.updateAdditionalFields(event.detail.name, values);\n }\n\n @Listen('nylasFormSwitchToggled')\n switchToggledHandler(event: CustomEvent<{ checked: boolean; name: string; label: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.checked ? 'true' : 'false');\n }\n\n @Listen('nylasFormCheckboxToggled')\n checkboxToggledHandler(event: CustomEvent<{ checked: boolean; name: string; label: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.checked ? 'true' : 'false');\n }\n\n @Listen('nylasFormRadioChanged')\n radioChangedHandler(event: CustomEvent<{ value: string; name: string; label: string; type: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n }\n\n @Listen('nylasFormDropdownDefaultSelected')\n dropdownDefaultSelectedHandler(event: CustomEvent<{ value: string; name: string; label: string; error?: string }>) {\n this.updateAdditionalFields(event.detail.name, event.detail.value);\n }\n\n @RegisterComponent<NylasBookingForm, NylasSchedulerConnector, Exclude<NylasScheduling['stores'], undefined>>({\n name: 'nylas-booking-form',\n stateToProps: new Map([\n ['scheduler.isLoading', 'isLoading'],\n ['scheduler.bookingInfo', 'bookingInfo'],\n ['scheduler.eventInfo', 'eventInfo'],\n ['scheduler.configSettings', 'configSettings'],\n ['scheduler.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {\n backButtonClicked: async (_event: CustomEvent<boolean>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n nylasSchedulerConnector.scheduler.toggleAdditionalData(false);\n },\n nameChanged: async (event: CustomEvent<string>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n nylasSchedulerConnector.scheduler.setParticipantName(event.detail);\n },\n emailChanged: async (event: CustomEvent<string>, nylasSchedulerConnector: NylasSchedulerConnector) => {\n nylasSchedulerConnector.scheduler.setParticipantEmail(event.detail);\n },\n detailsConfirmed: async (event: CustomEvent<NylasSchedulerBookingDataWithFlatFields>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-booking-form', 'detailsConfirmed', event.detail);\n },\n bookingFormSubmitted: async (event: CustomEvent<void>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-booking-form', 'bookingFormSubmitted', event.detail);\n },\n bookingFormError: async (event: CustomEvent<Partial<Notification>>, _nylasSchedulerConnector: NylasSchedulerConnector) => {\n debug('nylas-booking-form', 'bookingFormError', event.detail);\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <form onSubmit={e => this.bookButtonClickedHandler(e)} ref={el => (this.formRef = el)} noValidate>\n <div class=\"nylas-booking-form\" part=\"nbf\">\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <input-component\n label={i18next.t('name')}\n name=\"name\"\n id=\"name\"\n defaultValue={this.bookingInfo?.primaryParticipant?.name || this.configSettings?.booking?.guest?.name || this.name}\n placeholder={i18next.t('namePlaceholder')}\n type=\"text\"\n readOnly={this.bookingInfo?.primaryParticipant?.nameReadOnly || false}\n required={true}\n requiredError={i18next.t('fieldRequired', { field: i18next.t('name') })}\n patternError={i18next.t('invalidInputFormat', { field: i18next.t('name') })}\n part=\"nbf__input-textfield\"\n />\n </div>\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <input-component\n label={i18next.t('email')}\n name=\"email\"\n id=\"email\"\n pattern={emailRegex}\n defaultValue={this.bookingInfo?.primaryParticipant?.email || this.configSettings?.booking?.guest?.email || this.email}\n placeholder={i18next.t('emailPlaceholder')}\n type=\"email\"\n readOnly={this.bookingInfo?.primaryParticipant?.emailReadOnly || false}\n required={true}\n requiredError={i18next.t('fieldRequired', { field: i18next.t('email') })}\n patternError={i18next.t('invalidInputFormat', { field: i18next.t('email') })}\n part=\"nbf__input-textfield\"\n />\n </div>\n {this.configSettings?.scheduler?.hide_additional_guests !== true && (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n {this.guestEmails.map((email, index) => (\n <div class=\"input-wrapper button-wrapper\">\n <label\n class={{\n error: !!this.guestEmailErrors[index],\n }}\n >\n {i18next.t('guestEmail')}\n </label>\n <div class=\"guest-email-input\">\n <input\n type=\"email\"\n id={`guest-email-${index}`}\n maxLength={100}\n class={{\n 'guest-email': true,\n 'error': !!this.guestEmailErrors[index],\n }}\n placeholder={i18next.t('guestEmailPlaceholder')}\n value={email}\n data-index={index}\n part=\"nbf__input-textfield\"\n onBlur={(e: Event) => this.handleGuestBlur(index, (e.target as HTMLInputElement)?.value)}\n onInput={(e: Event) => this.handleGuestChange(index, (e.target as HTMLInputElement)?.value)}\n ></input>\n <button-component\n variant=\"basic\"\n tooltip=\"Remove guest\"\n onClick={(e: Event) => this.removeGuestButtonClickHandler(e, index)}\n class={{\n 'remove-guest': true,\n 'error': !!this.guestEmailErrors[index],\n }}\n >\n <close-icon />\n </button-component>\n </div>\n <p class=\"help-text\">{this.guestEmailErrors[index]}</p>\n </div>\n ))}\n <button-component class=\"add-guest\" variant=\"invisible\" part=\"nbf__button-ghost\" onClick={e => this.addGuestButtonClickedHandler(e)}>\n <div class=\"button-content\">\n <add-circle-icon slot=\"icon\"></add-circle-icon>\n {this.guestEmails.length > 0 ? `${i18next.t('addAnotherGuest')}` : `${i18next.t('addGuest')}`}\n </div>\n </button-component>\n </div>\n )}\n {Object.entries(\n (this.configSettings?.scheduler?.additional_fields || {}) as Record<\n string,\n {\n required: boolean;\n type: 'email' | 'text' | 'phone_number' | 'dropdown' | 'checkbox' | 'radio_button' | 'multi_line_text' | 'metadata' | 'date' | 'multi_select';\n order: number;\n options?: string[];\n label: string;\n default?: string;\n }\n >,\n )\n ?.sort((a, b) => a[1].order - b[1].order)\n .map(x => {\n const field = x[1];\n const label = field.label;\n const key = x[0];\n const defaultValue = this.bookingInfo?.additionalFields?.[key]?.value || this.configSettings?.booking?.additional_fields?.[key] || field.default || '';\n const fieldReadOnly = this.bookingInfo?.additionalFields?.[key]?.readOnly || false;\n\n switch (field.type) {\n case 'dropdown':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <select-dropdown\n label={label}\n name={key}\n id={key}\n readOnly={fieldReadOnly}\n withSearch={false}\n emptyValue={i18next.t('nylasBookingCalendarPicker.selectOptionLabel')}\n defaultSelectedOption={defaultValue ? { value: defaultValue, label: defaultValue } : undefined}\n options={[\n { value: '', label: i18next.t('nylasBookingCalendarPicker.selectOptionLabel') },\n ...(field.options?.map(option => ({ value: option, label: option })) || []),\n ]}\n required={field.required}\n exportparts=\"sd_dropdown: nbf__dropdown, sd_dropdown-button: nbf__dropdown-button, sd_dropdown-content: nbf__dropdown-content\"\n />\n </div>\n );\n case 'checkbox':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <checkbox-component\n readOnly={fieldReadOnly}\n label={label}\n name={key}\n id={key}\n checked={defaultValue === 'true'}\n required={field.required}\n part=\"nbf__checkbox-component\"\n />\n </div>\n );\n case 'radio_button':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <radio-button-group\n label={label}\n name={key}\n id={key}\n readOnly={fieldReadOnly}\n defaultSelectedValue={defaultValue || field.options?.[0] || ''}\n options={field.options?.map(option => ({ value: option, label: option }))}\n required={field.required}\n part=\"nbf__radio-button-group\"\n />\n </div>\n );\n case 'multi_line_text':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <textarea-component\n readOnly={fieldReadOnly}\n label={label}\n defaultValue={defaultValue}\n name={key}\n id={key}\n required={field.required}\n part=\"nbf__textarea-component\"\n />\n </div>\n );\n case 'date':\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <nylas-date-component\n readOnly={fieldReadOnly}\n label={label}\n defaultValue={defaultValue}\n name={key}\n id={key}\n required={field.required}\n part=\"nbf__date-component\"\n />\n </div>\n );\n case 'multi_select': {\n const defaultValues = defaultValue?.split(',').map(item => item.trim()) || [];\n return (\n <div>\n <multi-select-dropdown\n label={label}\n name={key}\n id={key}\n readOnly={fieldReadOnly}\n multipleOptionsSelectedLabel={i18next.t('multipleOptionsSelected')}\n options={field.options?.map(option => ({ value: option, label: option, selected: defaultValues.includes(option) }))}\n required={field.required}\n exportparts=\"msd_dropdown: nbf__ms_dropdown, msd_dropdown-label: nbf__ms_dropdown-label, msd_dropdown-button: nbf__ms_dropdown-button, msd_dropdown-content: nbf__ms_dropdown-content, msd_dropdown_error: nbf__ms_dropdown_error, msd_dropdown-button--error: nbf__ms_dropdown-button--error\"\n ></multi-select-dropdown>\n </div>\n );\n }\n case 'metadata':\n return null;\n default:\n return (\n <div class=\"input-wrapper\" part=\"nbf__input-wrapper\">\n <input-component\n label={label}\n name={key}\n id={key}\n type={field.type}\n readOnly={fieldReadOnly}\n defaultValue={defaultValue || ''}\n requiredError={i18next.t('fieldRequired', { field: label })}\n required={field.required}\n part=\"nbf__input-textfield\"\n />\n </div>\n );\n }\n })}\n {/* <slot name=\"custom-booking-form\"></slot> */}\n </div>\n <div class=\"cta\">\n <button-component variant={'basic'} class=\"back\" part=\"nbf__button-outline\" isLoading={this.backButtonLoading && this.isLoading} onClick={this.handleBackButtonClicked}>\n <slot name=\"booking-form-back-label\">{`${i18next.t('backButton')}`}</slot>\n </button-component>\n <button-component variant={'primary'} isLoading={!this.backButtonLoading && this.isLoading} disabled={this.isLoading} part=\"nbf__button-primary\" type=\"submit\">\n <slot name=\"booking-form-book-label\">{`${i18next.t('bookNowButton')}`}</slot>\n </button-component>\n </div>\n </form>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -168,10 +168,10 @@ const NylasBufferTime = proxyCustomElement(class NylasBufferTime extends HTMLEle
168
168
  const value = i * 5;
169
169
  return {
170
170
  label: value.toString(),
171
- value: value,
171
+ value: value.toString(),
172
172
  };
173
173
  });
174
- return (h(Host, null, h("div", { class: "nylas-buffer-time", part: "nbt" }, h("div", { class: "header", part: "nbt__header" }, h("h3", null, instance.t('nylasBufferTime.headerTitle')), h("p", null, instance.t('nylasBufferTime.headerSubTitle'), h("tooltip-component", null, h("info-icon", { slot: "tooltip-icon" }), h("span", { slot: "tooltip-content" }, instance.t('nylasBufferTime.tooltip.desc'))))), h("div", { class: "nylas-buffer-time__body", part: "nbt__body" }, h("div", { class: "nylas-buffer-time__dropdown" }, h("div", { class: "nylas-buffer-time__row" }, h("label", null, instance.t('nylasBufferTime.beforeBufferLabel')), h("div", { class: "dropdown-container" }, this.componentLoaded && (h("select-dropdown", { id: "before-buffer-time", withSearch: false, name: "before-buffer-time", exportparts: "sd_dropdown: nbt__dropdown-before, sd_dropdown-button: nbt__dropdown-button-before, sd_dropdown-content: nbt__dropdown-content-before", options: minuteOptions, defaultSelectedOption: minuteOptions.find(min => min.value == this.selectedBeforeBufferTime) })), h("span", null, instance.t('nylasBufferTime.minutesShort')))), h("div", { class: "nylas-buffer-time__row" }, h("label", null, instance.t('nylasBufferTime.afterBufferLabel')), h("div", { class: "dropdown-container" }, this.componentLoaded && (h("select-dropdown", { id: "after-buffer-time", withSearch: false, name: "after-buffer-time", exportparts: "sd_dropdown: nbt__dropdown-after, sd_dropdown-button: nbt__dropdown-button-after, sd_dropdown-content: nbt__dropdown-content-after", options: minuteOptions, defaultSelectedOption: minuteOptions.find(min => min.value == this.selectedAfterBufferTime) })), h("span", null, instance.t('nylasBufferTime.minutesShort'))))), h("div", { class: "nylas-buffer-time__preview", part: "nbt__preview" }, h("h4", null, instance.t('nylasBufferTime.previewHeader')), this.renderPreview())))));
174
+ return (h(Host, null, h("div", { class: "nylas-buffer-time", part: "nbt" }, h("div", { class: "header", part: "nbt__header" }, h("h3", null, instance.t('nylasBufferTime.headerTitle')), h("p", null, instance.t('nylasBufferTime.headerSubTitle'), h("tooltip-component", null, h("info-icon", { slot: "tooltip-icon" }), h("span", { slot: "tooltip-content" }, instance.t('nylasBufferTime.tooltip.desc'))))), h("div", { class: "nylas-buffer-time__body", part: "nbt__body" }, h("div", { class: "nylas-buffer-time__dropdown" }, h("div", { class: "nylas-buffer-time__row" }, h("label", null, instance.t('nylasBufferTime.beforeBufferLabel')), h("div", { class: "dropdown-container" }, this.componentLoaded && (h("select-dropdown", { id: "before-buffer-time", withSearch: false, name: "before-buffer-time", exportparts: "sd_dropdown: nbt__dropdown-before, sd_dropdown-button: nbt__dropdown-button-before, sd_dropdown-content: nbt__dropdown-content-before", options: minuteOptions, defaultSelectedOption: minuteOptions.find(min => min.value === this.selectedBeforeBufferTime.toString()) })), h("span", null, instance.t('nylasBufferTime.minutesShort')))), h("div", { class: "nylas-buffer-time__row" }, h("label", null, instance.t('nylasBufferTime.afterBufferLabel')), h("div", { class: "dropdown-container" }, this.componentLoaded && (h("select-dropdown", { id: "after-buffer-time", withSearch: false, name: "after-buffer-time", exportparts: "sd_dropdown: nbt__dropdown-after, sd_dropdown-button: nbt__dropdown-button-after, sd_dropdown-content: nbt__dropdown-content-after", options: minuteOptions, defaultSelectedOption: minuteOptions.find(min => min.value === this.selectedAfterBufferTime.toString()) })), h("span", null, instance.t('nylasBufferTime.minutesShort'))))), h("div", { class: "nylas-buffer-time__preview", part: "nbt__preview" }, h("h4", null, instance.t('nylasBufferTime.previewHeader')), this.renderPreview())))));
175
175
  }
176
176
  static get formAssociated() { return true; }
177
177
  get host() { return this; }
@@ -1 +1 @@
1
- {"file":"nylas-buffer-time2.js","mappings":"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","names":["i18next"],"sources":["src/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.scss?tag=nylas-buffer-time&encapsulation=shadow","src/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.tsx"],"sourcesContent":["@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n width: inherit;\n}\n\n.nylas-buffer-time {\n width: inherit;\n display: flex;\n flex-direction: column;\n margin: 1rem;\n border-radius: var(--nylas-border-radius-2x);\n border: 1px solid var(--nylas-base-200);\n text-align: left;\n\n .header {\n padding: 1rem;\n border-bottom: 1px solid var(--nylas-base-200);\n\n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n line-height: 20px;\n color: var(--nylas-base-900);\n text-align: left;\n }\n\n p {\n display: flex;\n gap: 4px;\n align-items: center;\n margin: 0.25rem 0 0 0;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 20px;\n color: var(--nylas-base-600);\n text-align: left;\n }\n }\n\n .nylas-buffer-time__body {\n display: grid;\n grid-template-columns: 1fr auto;\n\n @media #{$mobile} {\n grid-template-columns: 1fr;\n }\n\n .nylas-buffer-time__dropdown {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n border-right: 1px solid var(--nylas-base-200);\n color: var(--nylas-base-800);\n\n @media #{$mobile} {\n border: none;\n }\n\n .nylas-buffer-time__row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: 1rem;\n\n label {\n width: 200px;\n }\n\n .dropdown-container {\n display: flex;\n gap: 1rem;\n align-items: center;\n justify-content: flex-end;\n\n span {\n width: -webkit-fill-available;\n width: fill-available;\n width: -moz-available;\n text-align: end;\n }\n }\n }\n }\n\n .nylas-buffer-time__preview {\n width: 208px;\n background: var(--nylas-base-25);\n border-bottom-right-radius: var(--nylas-border-radius-2x);\n\n @media #{$mobile} {\n width: inherit;\n border-bottom-left-radius: var(--nylas-border-radius-2x);\n }\n\n h4 {\n font-size: 14px;\n line-height: 24px;\n color: var(--nylas-base-600);\n font-family: var(--nylas-font-family);\n font-weight: 500;\n text-align: center;\n margin: 0.75rem 0;\n }\n\n .preview-container {\n padding: 0 2rem 1rem;\n\n .slot {\n background-color: transparent;\n border-top: 1px solid var(--nylas-base-300);\n\n &.active {\n background-color: var(--nylas-base-100);\n }\n\n &:last-of-type {\n border-bottom: 1px solid var(--nylas-base-300);\n }\n }\n\n .event-slot {\n background-color: var(--nylas-base-600);\n border-top: 1px solid var(--nylas-base-300);\n }\n }\n }\n }\n\n .nylas-buffer-time__dropdown {\n select-dropdown::part(sd_dropdown-button) {\n width: 104px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 14px;\n }\n\n select-dropdown::part(sd_dropdown-content) {\n width: 100%;\n }\n\n select-dropdown::part(sd_dropdown-button-selected-label) {\n max-width: calc(100% - 2rem);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\n\n/**\n * The `nylas-buffer-time` component is a UI component that allows users to set buffer time before and after an event.\n *\n * @part nbt - The buffer time container\n * @part nbt__header - The header of the buffer time\n * @part nbt__body - The body of the buffer time\n * @part nbt__dropdown-before - The dropdown container for the before buffer time\n * @part nbt__dropdown-button-before - The dropdown button for the before buffer time\n * @part nbt__dropdown-content-before - The dropdown content for the before buffer time\n * @part nbt__dropdown-after - The dropdown container for the after buffer time\n * @part nbt__dropdown-button-after - The dropdown button for the after buffer time\n * @part nbt__dropdown-content-after - The dropdown content for the after buffer time\n * @part nbt__preview - The preview container\n */\n@Component({\n tag: 'nylas-buffer-time',\n styleUrl: 'nylas-buffer-time.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasBufferTime {\n @Element() host!: HTMLNylasCalendarPickerElement;\n /**\n * @internal\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n /**\n * The name of the calendar picker.\n */\n @Prop() name: string = 'buffer-time';\n /**\n * @standalone\n * The buffer time\n */\n @Prop() buffer: { before: number; after: number } = this.selectedConfiguration?.availability?.availability_rules?.buffer ?? { before: 0, after: 0 };\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The selected before buffer time.\n */\n @State() selectedBeforeBufferTime: number = this.buffer.before;\n\n /**\n * The selected after buffer time.\n */\n @State() selectedAfterBufferTime: number = this.buffer.after;\n\n @State() componentLoaded: boolean = false;\n\n /**\n * This event is fired when the selected buffer time is changed.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void;\n }>;\n\n // Lifecycle methods\n connectedCallback() {\n debug('nylas-buffer-time', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-buffer-time', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-buffer-time', 'componentWillLoad');\n // See comment in the @Watch('name') decorator for more information.\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-buffer-time', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n } else {\n this.selectedBeforeBufferTime = this.buffer.before;\n this.selectedAfterBufferTime = this.buffer.after;\n }\n this.updateFormValue(false);\n this.componentLoaded = true;\n }\n\n componentWillUpdate() {\n debug('nylas-buffer-time', 'componentWillUpdate');\n }\n\n componentDidUpdate() {\n debug('nylas-buffer-time', 'componentDidUpdate');\n }\n\n componentWillRender() {\n debug('nylas-buffer-time', 'componentWillRender');\n }\n\n componentDidRender() {\n debug('nylas-buffer-time', 'componentDidRender');\n }\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-buffer-time', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newValue: Configuration) {\n debug('nylas-buffer-time', 'selectedConfigurationChangedHandler', newValue);\n const buffer = newValue?.availability?.availability_rules?.buffer;\n this.selectedAfterBufferTime = buffer?.after ? buffer.after : this.buffer.after;\n this.selectedBeforeBufferTime = buffer?.before ? buffer.before : this.buffer.before;\n this.updateFormValue(false);\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 @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-buffer-time', 'nylasFormDropdownChangedHandler', event.detail);\n const { value, name } = event.detail;\n if (name === 'before-buffer-time') {\n this.selectedBeforeBufferTime = parseInt(value);\n } else if (name === 'after-buffer-time') {\n this.selectedAfterBufferTime = parseInt(value);\n }\n this.updateFormValue();\n }\n\n /**\n * This method is essentially a workaround to check if the internals are available because\n * the unit tests in stencil do not support the internals.\n * @returns boolean\n */\n get isInternalsAvailable() {\n return this.internals !== undefined && typeof this.internals.setFormValue === 'function';\n }\n\n updateFormValue(valueChanged: boolean = true) {\n const bufferTime = {\n before: this.selectedBeforeBufferTime,\n after: this.selectedAfterBufferTime,\n };\n this.isInternalsAvailable && this.internals.setFormValue(JSON.stringify(bufferTime), this.name);\n if (valueChanged) {\n this.valueChanged.emit({ value: JSON.stringify(bufferTime), name: this.name });\n }\n }\n\n renderPreview() {\n const totalSlots = 4;\n const slotHeight = 10; // The height for each 30-minute slot\n\n // Event slot height is constant\n const eventSlotHeight = slotHeight * 2;\n\n // Helper function to determine the fill of a slot based on the minutes selected\n const slotFill = minutes => {\n const fullSlots = Math.floor(minutes / 30);\n const partialFillHeight = ((minutes % 30) / 30) * slotHeight;\n\n return {\n fullSlots,\n partialFillHeight,\n };\n };\n\n // Helper function to create before slots\n const createBeforeSlots = () => {\n const { fullSlots, partialFillHeight } = slotFill(this.selectedBeforeBufferTime);\n\n return Array.from({ length: totalSlots }, (_, index) => {\n // Slot is active if its index is greater than the total slots minus the full slots minus one\n // and there are some minutes selected.\n const isActive = this.selectedBeforeBufferTime > 0 && index > totalSlots - fullSlots - 1;\n const isPartial = this.selectedBeforeBufferTime > 0 && index === totalSlots - fullSlots - 1 && partialFillHeight > 0;\n\n const slotStyle: {\n backgroundColor?: string;\n background?: string;\n } = {};\n if (isActive && !isPartial) {\n slotStyle.backgroundColor = 'var(--nylas-base-100)';\n } else if (isPartial) {\n slotStyle.background = `linear-gradient(to top, var(--nylas-base-100) ${partialFillHeight}px, transparent 0)`;\n }\n\n return (\n <div\n key={index}\n class={`slot ${isActive ? 'active' : ''}`}\n style={{\n height: `${slotHeight}px`,\n ...slotStyle,\n }}\n ></div>\n );\n });\n };\n\n // Helper function to create after slots\n const createAfterSlots = () => {\n const { fullSlots, partialFillHeight } = slotFill(this.selectedAfterBufferTime);\n\n return Array.from({ length: totalSlots }, (_, index) => {\n const isActive = this.selectedAfterBufferTime > 0 && index < fullSlots;\n const isPartial = index === fullSlots && partialFillHeight > 0;\n\n const slotStyle: {\n backgroundColor?: string;\n background?: string;\n } = {};\n if (isActive && !isPartial) {\n slotStyle.backgroundColor = 'var(--nylas-base-100)';\n } else if (isPartial) {\n slotStyle.background = `linear-gradient(to bottom, var(--nylas-base-100) ${partialFillHeight}px, transparent 0)`;\n }\n\n return (\n <div\n key={index}\n class={`slot ${isActive ? 'active' : ''}`}\n style={{\n height: `${slotHeight}px`,\n ...slotStyle,\n }}\n ></div>\n );\n });\n };\n\n return (\n <div class=\"preview-container\">\n {createBeforeSlots()}\n <div class=\"event-slot\" style={{ height: `${eventSlotHeight}px` }}></div>\n {createAfterSlots()}\n </div>\n );\n }\n\n @RegisterComponent<NylasBufferTime, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-buffer-time',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ]),\n eventToProps: {\n valueChanged: async (\n event: CustomEvent<{ value: string; name: string; valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void }>,\n _nylasSchedulerConfigConnector: NylasSchedulerConfigConnector,\n ) => {\n const { valueChanged } = event.detail;\n // If a handler is passed, call it.\n if (valueChanged) {\n valueChanged(event);\n }\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const minuteOptions = Array.from({ length: 25 }, (_, i) => {\n const value = i * 5;\n return {\n label: value.toString(),\n value: value,\n };\n });\n\n return (\n <Host>\n <div class=\"nylas-buffer-time\" part=\"nbt\">\n <div class=\"header\" part=\"nbt__header\">\n <h3>{i18next.t('nylasBufferTime.headerTitle')}</h3>\n <p>\n {i18next.t('nylasBufferTime.headerSubTitle')}\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">{i18next.t('nylasBufferTime.tooltip.desc')}</span>\n </tooltip-component>\n </p>\n </div>\n <div class=\"nylas-buffer-time__body\" part=\"nbt__body\">\n <div class=\"nylas-buffer-time__dropdown\">\n <div class=\"nylas-buffer-time__row\">\n <label>{i18next.t('nylasBufferTime.beforeBufferLabel')}</label>\n <div class=\"dropdown-container\">\n {this.componentLoaded && (\n <select-dropdown\n id=\"before-buffer-time\"\n withSearch={false}\n name=\"before-buffer-time\"\n exportparts=\"sd_dropdown: nbt__dropdown-before, sd_dropdown-button: nbt__dropdown-button-before, sd_dropdown-content: nbt__dropdown-content-before\"\n options={minuteOptions}\n defaultSelectedOption={minuteOptions.find(min => min.value == this.selectedBeforeBufferTime)}\n />\n )}\n <span>{i18next.t('nylasBufferTime.minutesShort')}</span>\n </div>\n </div>\n <div class=\"nylas-buffer-time__row\">\n <label>{i18next.t('nylasBufferTime.afterBufferLabel')}</label>\n <div class=\"dropdown-container\">\n {this.componentLoaded && (\n <select-dropdown\n id=\"after-buffer-time\"\n withSearch={false}\n name=\"after-buffer-time\"\n exportparts=\"sd_dropdown: nbt__dropdown-after, sd_dropdown-button: nbt__dropdown-button-after, sd_dropdown-content: nbt__dropdown-content-after\"\n options={minuteOptions}\n defaultSelectedOption={minuteOptions.find(min => min.value == this.selectedAfterBufferTime)}\n />\n )}\n <span>{i18next.t('nylasBufferTime.minutesShort')}</span>\n </div>\n </div>\n </div>\n <div class=\"nylas-buffer-time__preview\" part=\"nbt__preview\">\n <h4>{i18next.t('nylasBufferTime.previewHeader')}</h4>\n {this.renderPreview()}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"nylas-buffer-time2.js","mappings":"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","names":["i18next"],"sources":["src/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.scss?tag=nylas-buffer-time&encapsulation=shadow","src/components/scheduler-editor/nylas-buffer-time/nylas-buffer-time.tsx"],"sourcesContent":["@import '../../../common/styles/variables.scss';\n\n:host {\n display: block;\n @include default-css-variables;\n width: inherit;\n}\n\n.nylas-buffer-time {\n width: inherit;\n display: flex;\n flex-direction: column;\n margin: 1rem;\n border-radius: var(--nylas-border-radius-2x);\n border: 1px solid var(--nylas-base-200);\n text-align: left;\n\n .header {\n padding: 1rem;\n border-bottom: 1px solid var(--nylas-base-200);\n\n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n line-height: 20px;\n color: var(--nylas-base-900);\n text-align: left;\n }\n\n p {\n display: flex;\n gap: 4px;\n align-items: center;\n margin: 0.25rem 0 0 0;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 20px;\n color: var(--nylas-base-600);\n text-align: left;\n }\n }\n\n .nylas-buffer-time__body {\n display: grid;\n grid-template-columns: 1fr auto;\n\n @media #{$mobile} {\n grid-template-columns: 1fr;\n }\n\n .nylas-buffer-time__dropdown {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n border-right: 1px solid var(--nylas-base-200);\n color: var(--nylas-base-800);\n\n @media #{$mobile} {\n border: none;\n }\n\n .nylas-buffer-time__row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: center;\n gap: 1rem;\n\n label {\n width: 200px;\n }\n\n .dropdown-container {\n display: flex;\n gap: 1rem;\n align-items: center;\n justify-content: flex-end;\n\n span {\n width: -webkit-fill-available;\n width: fill-available;\n width: -moz-available;\n text-align: end;\n }\n }\n }\n }\n\n .nylas-buffer-time__preview {\n width: 208px;\n background: var(--nylas-base-25);\n border-bottom-right-radius: var(--nylas-border-radius-2x);\n\n @media #{$mobile} {\n width: inherit;\n border-bottom-left-radius: var(--nylas-border-radius-2x);\n }\n\n h4 {\n font-size: 14px;\n line-height: 24px;\n color: var(--nylas-base-600);\n font-family: var(--nylas-font-family);\n font-weight: 500;\n text-align: center;\n margin: 0.75rem 0;\n }\n\n .preview-container {\n padding: 0 2rem 1rem;\n\n .slot {\n background-color: transparent;\n border-top: 1px solid var(--nylas-base-300);\n\n &.active {\n background-color: var(--nylas-base-100);\n }\n\n &:last-of-type {\n border-bottom: 1px solid var(--nylas-base-300);\n }\n }\n\n .event-slot {\n background-color: var(--nylas-base-600);\n border-top: 1px solid var(--nylas-base-300);\n }\n }\n }\n }\n\n .nylas-buffer-time__dropdown {\n select-dropdown::part(sd_dropdown-button) {\n width: 104px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 14px;\n }\n\n select-dropdown::part(sd_dropdown-content) {\n width: 100%;\n }\n\n select-dropdown::part(sd_dropdown-button-selected-label) {\n max-width: calc(100% - 2rem);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\n\n/**\n * The `nylas-buffer-time` component is a UI component that allows users to set buffer time before and after an event.\n *\n * @part nbt - The buffer time container\n * @part nbt__header - The header of the buffer time\n * @part nbt__body - The body of the buffer time\n * @part nbt__dropdown-before - The dropdown container for the before buffer time\n * @part nbt__dropdown-button-before - The dropdown button for the before buffer time\n * @part nbt__dropdown-content-before - The dropdown content for the before buffer time\n * @part nbt__dropdown-after - The dropdown container for the after buffer time\n * @part nbt__dropdown-button-after - The dropdown button for the after buffer time\n * @part nbt__dropdown-content-after - The dropdown content for the after buffer time\n * @part nbt__preview - The preview container\n */\n@Component({\n tag: 'nylas-buffer-time',\n styleUrl: 'nylas-buffer-time.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasBufferTime {\n @Element() host!: HTMLNylasCalendarPickerElement;\n /**\n * @internal\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n /**\n * The name of the calendar picker.\n */\n @Prop() name: string = 'buffer-time';\n /**\n * @standalone\n * The buffer time\n */\n @Prop() buffer: { before: number; after: number } = this.selectedConfiguration?.availability?.availability_rules?.buffer ?? { before: 0, after: 0 };\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * The selected before buffer time.\n */\n @State() selectedBeforeBufferTime: number = this.buffer.before;\n\n /**\n * The selected after buffer time.\n */\n @State() selectedAfterBufferTime: number = this.buffer.after;\n\n @State() componentLoaded: boolean = false;\n\n /**\n * This event is fired when the selected buffer time is changed.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void;\n }>;\n\n // Lifecycle methods\n connectedCallback() {\n debug('nylas-buffer-time', 'connectedCallback');\n }\n\n disconnectedCallback() {\n debug('nylas-buffer-time', 'disconnectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-buffer-time', 'componentWillLoad');\n // See comment in the @Watch('name') decorator for more information.\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-buffer-time', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n } else {\n this.selectedBeforeBufferTime = this.buffer.before;\n this.selectedAfterBufferTime = this.buffer.after;\n }\n this.updateFormValue(false);\n this.componentLoaded = true;\n }\n\n componentWillUpdate() {\n debug('nylas-buffer-time', 'componentWillUpdate');\n }\n\n componentDidUpdate() {\n debug('nylas-buffer-time', 'componentDidUpdate');\n }\n\n componentWillRender() {\n debug('nylas-buffer-time', 'componentWillRender');\n }\n\n componentDidRender() {\n debug('nylas-buffer-time', 'componentDidRender');\n }\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-buffer-time', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newValue: Configuration) {\n debug('nylas-buffer-time', 'selectedConfigurationChangedHandler', newValue);\n const buffer = newValue?.availability?.availability_rules?.buffer;\n this.selectedAfterBufferTime = buffer?.after ? buffer.after : this.buffer.after;\n this.selectedBeforeBufferTime = buffer?.before ? buffer.before : this.buffer.before;\n this.updateFormValue(false);\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 @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-buffer-time', 'nylasFormDropdownChangedHandler', event.detail);\n const { value, name } = event.detail;\n if (name === 'before-buffer-time') {\n this.selectedBeforeBufferTime = parseInt(value);\n } else if (name === 'after-buffer-time') {\n this.selectedAfterBufferTime = parseInt(value);\n }\n this.updateFormValue();\n }\n\n /**\n * This method is essentially a workaround to check if the internals are available because\n * the unit tests in stencil do not support the internals.\n * @returns boolean\n */\n get isInternalsAvailable() {\n return this.internals !== undefined && typeof this.internals.setFormValue === 'function';\n }\n\n updateFormValue(valueChanged: boolean = true) {\n const bufferTime = {\n before: this.selectedBeforeBufferTime,\n after: this.selectedAfterBufferTime,\n };\n this.isInternalsAvailable && this.internals.setFormValue(JSON.stringify(bufferTime), this.name);\n if (valueChanged) {\n this.valueChanged.emit({ value: JSON.stringify(bufferTime), name: this.name });\n }\n }\n\n renderPreview() {\n const totalSlots = 4;\n const slotHeight = 10; // The height for each 30-minute slot\n\n // Event slot height is constant\n const eventSlotHeight = slotHeight * 2;\n\n // Helper function to determine the fill of a slot based on the minutes selected\n const slotFill = minutes => {\n const fullSlots = Math.floor(minutes / 30);\n const partialFillHeight = ((minutes % 30) / 30) * slotHeight;\n\n return {\n fullSlots,\n partialFillHeight,\n };\n };\n\n // Helper function to create before slots\n const createBeforeSlots = () => {\n const { fullSlots, partialFillHeight } = slotFill(this.selectedBeforeBufferTime);\n\n return Array.from({ length: totalSlots }, (_, index) => {\n // Slot is active if its index is greater than the total slots minus the full slots minus one\n // and there are some minutes selected.\n const isActive = this.selectedBeforeBufferTime > 0 && index > totalSlots - fullSlots - 1;\n const isPartial = this.selectedBeforeBufferTime > 0 && index === totalSlots - fullSlots - 1 && partialFillHeight > 0;\n\n const slotStyle: {\n backgroundColor?: string;\n background?: string;\n } = {};\n if (isActive && !isPartial) {\n slotStyle.backgroundColor = 'var(--nylas-base-100)';\n } else if (isPartial) {\n slotStyle.background = `linear-gradient(to top, var(--nylas-base-100) ${partialFillHeight}px, transparent 0)`;\n }\n\n return (\n <div\n key={index}\n class={`slot ${isActive ? 'active' : ''}`}\n style={{\n height: `${slotHeight}px`,\n ...slotStyle,\n }}\n ></div>\n );\n });\n };\n\n // Helper function to create after slots\n const createAfterSlots = () => {\n const { fullSlots, partialFillHeight } = slotFill(this.selectedAfterBufferTime);\n\n return Array.from({ length: totalSlots }, (_, index) => {\n const isActive = this.selectedAfterBufferTime > 0 && index < fullSlots;\n const isPartial = index === fullSlots && partialFillHeight > 0;\n\n const slotStyle: {\n backgroundColor?: string;\n background?: string;\n } = {};\n if (isActive && !isPartial) {\n slotStyle.backgroundColor = 'var(--nylas-base-100)';\n } else if (isPartial) {\n slotStyle.background = `linear-gradient(to bottom, var(--nylas-base-100) ${partialFillHeight}px, transparent 0)`;\n }\n\n return (\n <div\n key={index}\n class={`slot ${isActive ? 'active' : ''}`}\n style={{\n height: `${slotHeight}px`,\n ...slotStyle,\n }}\n ></div>\n );\n });\n };\n\n return (\n <div class=\"preview-container\">\n {createBeforeSlots()}\n <div class=\"event-slot\" style={{ height: `${eventSlotHeight}px` }}></div>\n {createAfterSlots()}\n </div>\n );\n }\n\n @RegisterComponent<NylasBufferTime, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-buffer-time',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ]),\n eventToProps: {\n valueChanged: async (\n event: CustomEvent<{ value: string; name: string; valueChanged?: (event: CustomEvent<{ value: string; name: string }>) => void }>,\n _nylasSchedulerConfigConnector: NylasSchedulerConfigConnector,\n ) => {\n const { valueChanged } = event.detail;\n // If a handler is passed, call it.\n if (valueChanged) {\n valueChanged(event);\n }\n },\n },\n fireRegisterEvent: true,\n })\n render() {\n const minuteOptions = Array.from({ length: 25 }, (_, i) => {\n const value = i * 5;\n return {\n label: value.toString(),\n value: value.toString(),\n };\n });\n\n return (\n <Host>\n <div class=\"nylas-buffer-time\" part=\"nbt\">\n <div class=\"header\" part=\"nbt__header\">\n <h3>{i18next.t('nylasBufferTime.headerTitle')}</h3>\n <p>\n {i18next.t('nylasBufferTime.headerSubTitle')}\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">{i18next.t('nylasBufferTime.tooltip.desc')}</span>\n </tooltip-component>\n </p>\n </div>\n <div class=\"nylas-buffer-time__body\" part=\"nbt__body\">\n <div class=\"nylas-buffer-time__dropdown\">\n <div class=\"nylas-buffer-time__row\">\n <label>{i18next.t('nylasBufferTime.beforeBufferLabel')}</label>\n <div class=\"dropdown-container\">\n {this.componentLoaded && (\n <select-dropdown\n id=\"before-buffer-time\"\n withSearch={false}\n name=\"before-buffer-time\"\n exportparts=\"sd_dropdown: nbt__dropdown-before, sd_dropdown-button: nbt__dropdown-button-before, sd_dropdown-content: nbt__dropdown-content-before\"\n options={minuteOptions}\n defaultSelectedOption={minuteOptions.find(min => min.value === this.selectedBeforeBufferTime.toString())}\n />\n )}\n <span>{i18next.t('nylasBufferTime.minutesShort')}</span>\n </div>\n </div>\n <div class=\"nylas-buffer-time__row\">\n <label>{i18next.t('nylasBufferTime.afterBufferLabel')}</label>\n <div class=\"dropdown-container\">\n {this.componentLoaded && (\n <select-dropdown\n id=\"after-buffer-time\"\n withSearch={false}\n name=\"after-buffer-time\"\n exportparts=\"sd_dropdown: nbt__dropdown-after, sd_dropdown-button: nbt__dropdown-button-after, sd_dropdown-content: nbt__dropdown-content-after\"\n options={minuteOptions}\n defaultSelectedOption={minuteOptions.find(min => min.value === this.selectedAfterBufferTime.toString())}\n />\n )}\n <span>{i18next.t('nylasBufferTime.minutesShort')}</span>\n </div>\n </div>\n </div>\n <div class=\"nylas-buffer-time__preview\" part=\"nbt__preview\">\n <h4>{i18next.t('nylasBufferTime.previewHeader')}</h4>\n {this.renderPreview()}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -612,9 +612,9 @@ const NylasEditorTabsGroup = proxyCustomElement(class NylasEditorTabsGroup exten
612
612
  }
613
613
  render() {
614
614
  debug('[nylas-editor-tabs-group]', 'render', this.formState);
615
- return (h(Host, { key: 'afdf097ad3a673c5290d560773673f555319dcfb' }, h("form", { key: '7f7e51ad07c4b8f2c95a546fa847f4b14f002b15', onSubmit: this.formSubmissionHandler, class: "scheduler-editor", ref: el => (this.formRef = el), noValidate: true }, this.mode === 'app' ? (h("div", { class: "return-to-calendar-view", part: "editor__return-to-calendar-view net__return-to-calendar-view" }, h("button-component", { id: "return-to-calendar-view-button", variant: "invisible", part: "nset__header__back-button", type: "button", onClick: e => {
615
+ return (h(Host, { key: '3876ed63289b6d9f50ada8cf0f45e6bf89ce5144' }, h("form", { key: '0811e2531ad2a510fa0d3d0361c6013f24debd15', onSubmit: this.formSubmissionHandler, class: "scheduler-editor", ref: el => (this.formRef = el), noValidate: true }, this.mode === 'app' ? (h("div", { class: "return-to-calendar-view", part: "editor__return-to-calendar-view net__return-to-calendar-view" }, h("button-component", { id: "return-to-calendar-view-button", variant: "invisible", part: "nset__header__back-button", type: "button", onClick: e => {
616
616
  this.setActiveTab(e, TabGroup.CalendarView);
617
- } }, h("chevron-icon", { width: "16", height: "16" }), h("span", null, "Return to Calendar view")))) : null, this.mode === 'app' ? (h("div", { class: "form-contents", part: "editor__form-contents net__form-contents" }, h("div", { class: "tabs", part: "editor__tabs net__tabs" }, h("button", { name: TabGroup.BookingOptions, class: { tab: true, active: this.activeTab == TabGroup.BookingOptions, hide: this.hideTab(TabGroup.BookingOptions) }, part: "editortab__booking-options net__tab-booking-options", onClick: e => this.setActiveTab(e, TabGroup.BookingOptions) }, h("flow-icon", { width: "16", height: "16" }), instance.t('bookingOptionsTab')), h("button", { name: TabGroup.BookingForm, class: { tab: true, active: this.activeTab == 'bookingForm', hide: this.hideTab(TabGroup.BookingForm) }, part: "editortab__booking-form net__tab-booking-form", onClick: e => this.setActiveTab(e, TabGroup.BookingForm) }, this.activeTab == TabGroup.BookingForm ? h("calendar-agenda-fill-icon", { width: "16", height: "16" }) : h("calendar-agenda-icon", { width: "16", height: "16" }), instance.t('bookingFormTab')), h("button", { name: TabGroup.Communications, class: { tab: true, active: this.activeTab == 'communications', hide: this.hideTab(TabGroup.Communications) }, onClick: e => this.setActiveTab(e, TabGroup.Communications), part: "editortab__communications net__tab-communications" }, this.activeTab == TabGroup.Communications ? h("envelope-fill-icon", { width: "16", height: "16" }) : h("envelope-icon", { width: "16", height: "16" }), instance.t('communicationsTab')), h("button", { name: TabGroup.PageStyles, class: { tab: true, active: this.activeTab == 'pageStyles', hide: this.hideTab(TabGroup.PageStyles) }, onClick: e => this.setActiveTab(e, TabGroup.PageStyles), part: "editortab__page-styles net__tab-page-styles" }, this.activeTab == TabGroup.PageStyles ? h("paintbrush-fill-icon", { width: "16", height: "16" }) : h("paintbrush-icon", { width: "16", height: "16" }), instance.t('pageStylesTab'))), h("div", { class: "tab-content", part: "editor__tab-content net__tab-content" }, h(TabContentsGroup, { formState: this.formState, activeTab: this.activeTab, currentUser: this.currentUser, calendars: this.calendars, id: this.selectedConfiguration?.id ?? 'new', i18next: instance })))) : (h("div", { class: "composable", key: this.selectedConfiguration?.id }, h("slot", null))), h("div", { key: '922210f9a184ff3ddb83630db4ae6ee1d9dd2944', class: "footer", part: "editor__footer net__footer" }, h("div", { key: '5d8a938c31b831833ebe3030fee8da39acb12edb', class: "preview", part: "editor__footer-preview net__footer-preview" }, this.enableUserFeedback && (h("button-component", { title: "Share your feedback", id: "report-issue", variant: 'basic', onClick: e => this.onFeedbackClick(e) }, h("feedback-icon", null))), this.activeTab === TabGroup.CalendarView && (h("button-component", { title: "Go to page settings", id: "page-settings", variant: 'basic', onClick: e => this.setActiveTab(e, TabGroup.BookingOptions) }, "Page settings"))), h("div", { key: '07889582bf417de6ccc1ce5a74f2a1c39559f9c0', class: "buttons", part: "editor__footer-buttons net__footer-buttons" }, h("p", { key: 'ad80bbca9db6703743093ca6fee0bb3a949e66c6', class: {
617
+ } }, h("chevron-icon", { width: "16", height: "16" }), h("span", null, "Return to Calendar view")))) : null, this.mode === 'app' ? (h("div", { class: "form-contents", part: "editor__form-contents net__form-contents" }, h("div", { class: "tabs", part: "editor__tabs net__tabs" }, h("button", { name: TabGroup.BookingOptions, class: { tab: true, active: this.activeTab == TabGroup.BookingOptions, hide: this.hideTab(TabGroup.BookingOptions) }, part: "editortab__booking-options net__tab-booking-options", onClick: e => this.setActiveTab(e, TabGroup.BookingOptions) }, h("flow-icon", { width: "16", height: "16" }), instance.t('bookingOptionsTab')), h("button", { name: TabGroup.BookingForm, class: { tab: true, active: this.activeTab == TabGroup.BookingForm, hide: this.hideTab(TabGroup.BookingForm) }, part: "editortab__booking-form net__tab-booking-form", onClick: e => this.setActiveTab(e, TabGroup.BookingForm) }, this.activeTab == TabGroup.BookingForm ? h("calendar-agenda-fill-icon", { width: "16", height: "16" }) : h("calendar-agenda-icon", { width: "16", height: "16" }), instance.t('bookingFormTab')), h("button", { name: TabGroup.Communications, class: { tab: true, active: this.activeTab == TabGroup.Communications, hide: this.hideTab(TabGroup.Communications) }, onClick: e => this.setActiveTab(e, TabGroup.Communications), part: "editortab__communications net__tab-communications" }, this.activeTab == TabGroup.Communications ? h("envelope-fill-icon", { width: "16", height: "16" }) : h("envelope-icon", { width: "16", height: "16" }), instance.t('communicationsTab')), h("button", { name: TabGroup.PageStyles, class: { tab: true, active: this.activeTab == TabGroup.PageStyles, hide: this.hideTab(TabGroup.PageStyles) }, onClick: e => this.setActiveTab(e, TabGroup.PageStyles), part: "editortab__page-styles net__tab-page-styles" }, this.activeTab == TabGroup.PageStyles ? h("paintbrush-fill-icon", { width: "16", height: "16" }) : h("paintbrush-icon", { width: "16", height: "16" }), instance.t('pageStylesTab'))), h("div", { class: "tab-content", part: "editor__tab-content net__tab-content" }, h(TabContentsGroup, { formState: this.formState, activeTab: this.activeTab, currentUser: this.currentUser, calendars: this.calendars, id: this.selectedConfiguration?.id ?? 'new', i18next: instance })))) : (h("div", { class: "composable", key: this.selectedConfiguration?.id }, h("slot", null))), h("div", { key: 'aeac48a6fb617c41599578ea1daaa077d8460eb7', class: "footer", part: "editor__footer net__footer" }, h("div", { key: 'c6ae59dfb5a785a61005aded9cccef25b5bc988d', class: "preview", part: "editor__footer-preview net__footer-preview" }, this.enableUserFeedback && (h("button-component", { title: "Share your feedback", id: "report-issue", variant: 'basic', onClick: e => this.onFeedbackClick(e) }, h("feedback-icon", null))), this.activeTab === TabGroup.CalendarView && (h("button-component", { title: "Go to page settings", id: "page-settings", variant: 'basic', onClick: e => this.setActiveTab(e, TabGroup.BookingOptions) }, "Page settings"))), h("div", { key: 'c8173bb6d4c0f7c3c032e69ba90a168690213d61', class: "buttons", part: "editor__footer-buttons net__footer-buttons" }, h("p", { key: '647a5d28a97e96da3cd1244eedb9ad7a9a5b659e', class: {
618
618
  'unsaved-changes': this.hasUnsavedChanges && !this.changesSaved,
619
619
  'saved-changes': this.changesSaved,
620
620
  'error': this.error !== '',
@@ -623,17 +623,17 @@ const NylasEditorTabsGroup = proxyCustomElement(class NylasEditorTabsGroup exten
623
623
  ? instance.t('unsavedChangesLabel')
624
624
  : this.error == '' && this.changesSaved
625
625
  ? `${instance.t('changesSavedLabel')}!`
626
- : ''), h("div", { key: 'a53e7d929f8e0cdaf36d2e43e98b8703cd6f2379', class: "footer-buttons__row" }, this.schedulerPreviewLink !== '' && this.action === 'edit' && (h("button-component", { title: "Preview", type: "button", disabled: this.isLoading, clickHandler: event => {
626
+ : ''), h("div", { key: '13f02e12c253380c196501d819e26dbef36f5532', class: "footer-buttons__row" }, this.schedulerPreviewLink !== '' && this.action === 'edit' && (h("button-component", { title: "Preview", type: "button", disabled: this.isLoading, clickHandler: event => {
627
627
  event.preventDefault();
628
628
  const previewEvent = this.previewButtonClicked.emit(this.host);
629
629
  if (!previewEvent.defaultPrevented) {
630
630
  window.open(parsePreviewLink(this.schedulerPreviewLink, this.selectedConfiguration), '_blank');
631
631
  }
632
- }, variant: 'basic' }, h("eye-icon", null))), h("button-component", { key: '9c048ca1576e4bd508461a172f3ffdfafcf39698', type: "button", disabled: this.isLoading, clickHandler: event => {
632
+ }, variant: 'basic' }, h("eye-icon", null))), h("button-component", { key: '945a4b3405ff6e8a90d87dfea5928c86939d1666', type: "button", disabled: this.isLoading, clickHandler: event => {
633
633
  event.preventDefault();
634
634
  this.cancelButtonClick.emit();
635
635
  this.error = '';
636
- }, variant: 'basic', part: "editor__footer-cancel net__footer-cancel" }, instance.t('backButton')), h("button-component", { key: '778f71bc70660a4e279db51a56fda244966a5694', type: "submit", disabled: this.isLoading, part: "editor__footer-cta, net__footer-cta" }, this.isLoading ? (h("span", null, instance.t('savingButtonText'), h("loading-icon", null), ' ')) : this.action === 'create' ? (`${instance.t('createButtonText')}`) : (`${instance.t('saveChangesButtonText')}`)))))), this.showFeedbackModal && h("nylas-feedback-form", null)));
636
+ }, variant: 'basic', part: "editor__footer-cancel net__footer-cancel" }, instance.t('backButton')), h("button-component", { key: 'd412db23e9fff9450174caa83d39a5dae05b5022', type: "submit", disabled: this.isLoading, part: "editor__footer-cta, net__footer-cta" }, this.isLoading ? (h("span", null, instance.t('savingButtonText'), h("loading-icon", null), ' ')) : this.action === 'create' ? (`${instance.t('createButtonText')}`) : (`${instance.t('saveChangesButtonText')}`)))))), this.showFeedbackModal && h("nylas-feedback-form", null)));
637
637
  }
638
638
  get host() { return this; }
639
639
  static get watchers() { return {