@nylas/web-elements 2.2.0 → 2.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nylas-web-elements/{abstract-provider-D75Ucvku.js → abstract-provider-9AZudYSI.js} +2 -2
- package/dist/nylas-web-elements/{abstract-provider-D75Ucvku.js.map → abstract-provider-9AZudYSI.js.map} +1 -1
- package/dist/nylas-web-elements/add-circle-icon.entry.js +1 -1
- package/dist/nylas-web-elements/archive-icon.entry.js +1 -1
- package/dist/nylas-web-elements/arrow-icon.entry.js +1 -1
- package/dist/nylas-web-elements/bold-icon.entry.js +1 -1
- package/dist/nylas-web-elements/button-component.entry.js +1 -1
- package/dist/nylas-web-elements/calendar-agenda-fill-icon.entry.js +1 -1
- package/dist/nylas-web-elements/calendar-agenda-icon.entry.js +1 -1
- package/dist/nylas-web-elements/calendar-cancel-icon.entry.js +1 -1
- package/dist/nylas-web-elements/calendar-check-icon.entry.js +1 -1
- package/dist/nylas-web-elements/calendar-icon.entry.js +1 -1
- package/dist/nylas-web-elements/calendar-info-icon.entry.js +1 -1
- package/dist/nylas-web-elements/calendar-patterns-icon.entry.js +1 -1
- package/dist/nylas-web-elements/checkbox-component.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/checkbox-component.entry.js +1 -1
- package/dist/nylas-web-elements/checkbox-component.entry.js.map +1 -1
- package/dist/nylas-web-elements/checkbox-group.entry.js +1 -1
- package/dist/nylas-web-elements/checkmark-circle-icon.entry.js +1 -1
- package/dist/nylas-web-elements/checkmark-icon.entry.js +1 -1
- package/dist/nylas-web-elements/chevron-icon.entry.js +1 -1
- package/dist/nylas-web-elements/clock-icon.entry.js +1 -1
- package/dist/nylas-web-elements/close-icon.entry.js +1 -1
- package/dist/nylas-web-elements/copy-icon.entry.js +1 -1
- package/dist/nylas-web-elements/{customParseFormat-Bk5PI6Cs.js → customParseFormat-BJNMxHY2.js} +2 -2
- package/dist/nylas-web-elements/{customParseFormat-Bk5PI6Cs.js.map → customParseFormat-BJNMxHY2.js.map} +1 -1
- package/dist/nylas-web-elements/delete-icon.entry.js +1 -1
- package/dist/nylas-web-elements/document-refresh-icon.entry.js +1 -1
- package/dist/nylas-web-elements/dragable-icon.entry.js +1 -1
- package/dist/nylas-web-elements/edit-icon.entry.js +1 -1
- package/dist/nylas-web-elements/envelope-fill-icon.entry.js +1 -1
- package/dist/nylas-web-elements/envelope-icon.entry.js +1 -1
- package/dist/nylas-web-elements/eye-icon.entry.js +1 -1
- package/dist/nylas-web-elements/feedback-icon.entry.js +1 -1
- package/dist/nylas-web-elements/flow-icon.entry.js +1 -1
- package/dist/nylas-web-elements/folder-icon.entry.js +1 -1
- package/dist/nylas-web-elements/forward-icon.entry.js +1 -1
- package/dist/nylas-web-elements/globe-icon.entry.js +1 -1
- package/dist/nylas-web-elements/google-logo-icon.entry.js +1 -1
- package/dist/nylas-web-elements/google-meet-icon.entry.js +1 -1
- package/dist/nylas-web-elements/inbox-icon.entry.js +1 -1
- package/dist/nylas-web-elements/{index-BVtainOy.js → index-BPPwIJj2.js} +2 -2
- package/dist/nylas-web-elements/{index-BVtainOy.js.map → index-BPPwIJj2.js.map} +1 -1
- package/dist/nylas-web-elements/{index-B-KMpdMZ.js → index-Cbn5rIwb.js} +2 -2
- package/dist/nylas-web-elements/index-Cbn5rIwb.js.map +1 -0
- package/dist/nylas-web-elements/index.esm.js +1 -1
- package/dist/nylas-web-elements/info-icon.entry.js +1 -1
- package/dist/nylas-web-elements/input-color-picker.entry.js +1 -1
- package/dist/nylas-web-elements/input-component.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/input-component.entry.js +1 -1
- package/dist/nylas-web-elements/input-component.entry.js.map +1 -1
- package/dist/nylas-web-elements/input-dropdown.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/input-dropdown.entry.js +1 -1
- package/dist/nylas-web-elements/input-dropdown.entry.js.map +1 -1
- package/dist/nylas-web-elements/input-image-url.entry.js +1 -1
- package/dist/nylas-web-elements/italic-icon.entry.js +1 -1
- package/dist/nylas-web-elements/loading-icon.entry.js +1 -1
- package/dist/nylas-web-elements/location-icon.entry.js +1 -1
- package/dist/nylas-web-elements/location-off-icon.entry.js +1 -1
- package/dist/nylas-web-elements/microsoft-logo-icon.entry.js +1 -1
- package/dist/nylas-web-elements/microsoft-teams-icon.entry.js +1 -1
- package/dist/nylas-web-elements/multi-select-dropdown.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/multi-select-dropdown.entry.js +1 -1
- package/dist/nylas-web-elements/multi-select-dropdown.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-additional-participants.entry.js +1 -1
- package/dist/nylas-web-elements/{nylas-api-request-B1V2koVc.js → nylas-api-request-rYAjhY1J.js} +2 -2
- package/dist/nylas-web-elements/{nylas-api-request-B1V2koVc.js.map → nylas-api-request-rYAjhY1J.js.map} +1 -1
- package/dist/nylas-web-elements/nylas-availability-picker.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-booked-event-card.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-booking-calendar-picker.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-booking-confirmation-redirect.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-booking-confirmation-type.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-booking-form-config.entry.js +2 -2
- package/dist/nylas-web-elements/nylas-booking-form.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-buffer-time.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-calendar-picker.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-cancel-booking-form.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-cancellation-policy.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-cancellation-policy.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-cancellation-policy.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-cancelled-event-card.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-confirmation-email.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-confirmed-event-card.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-connected-calendars.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-custom-booking-flow.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-custom-event-slug.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-customize-booking-settings.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-customize-booking-settings.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-customize-booking-settings.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-date-component.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-date-picker.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-date-picker.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-disable-emails.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-editor-tabs-group.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-editor-tabs-group.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-editor-tabs-group.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-editor-tabs.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-editor-tabs.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-editor-tabs.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-calendar.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-capacity.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-description.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-description.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-description.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-duration.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-duration.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-duration.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-info.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-limits.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-limits.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-limits.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-location.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-location.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-location.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-timeslot.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-title.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-event-title.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-event-title.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-feedback-form.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-form-card.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-form-card.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-form-card.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-limit-future-bookings.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-list-configurations.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-locale-switch.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-logo.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-min-booking-notice.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-min-cancellation-notice.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-notification.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-notification.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-organizer-confirmation-card.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-page-name.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-page-name.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-page-name.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-page-styling.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-participant-booking-calendars.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-participants-custom-availability.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-reminder-emails.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-reminder-time.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-scheduler-editor.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-scheduler-editor.entry.js +3 -3
- package/dist/nylas-web-elements/nylas-scheduler-editor.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-scheduling-method.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-scheduling.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-select-event-type.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-selected-event-card.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-specific-time-availability-picker.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-time-window-picker.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-time-window-picker.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-time-window-picker.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-timeslot-interval.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/nylas-timeslot-interval.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-timeslot-interval.entry.js.map +1 -1
- package/dist/nylas-web-elements/nylas-timeslot-picker.entry.js +1 -1
- package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
- package/dist/nylas-web-elements/nylas-web-elements.esm.js.map +1 -1
- package/dist/nylas-web-elements/paintbrush-fill-icon.entry.js +1 -1
- package/dist/nylas-web-elements/paintbrush-icon.entry.js +1 -1
- package/dist/nylas-web-elements/people-icon.entry.js +1 -1
- package/dist/nylas-web-elements/person-clipboard-icon.entry.js +1 -1
- package/dist/nylas-web-elements/person-icon.entry.js +1 -1
- package/dist/nylas-web-elements/play-icon.entry.js +1 -1
- package/dist/nylas-web-elements/plus-icon.entry.js +1 -1
- package/dist/nylas-web-elements/radio-button-group.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/radio-button-group.entry.js +1 -1
- package/dist/nylas-web-elements/radio-button-group.entry.js.map +1 -1
- package/dist/nylas-web-elements/refresh-icon.entry.js +1 -1
- package/dist/nylas-web-elements/{register-component-BHk70oxk.js → register-component-Blj8K64f.js} +2 -2
- package/dist/nylas-web-elements/{register-component-BHk70oxk.js.map → register-component-Blj8K64f.js.map} +1 -1
- package/dist/nylas-web-elements/reply-all-icon.entry.js +1 -1
- package/dist/nylas-web-elements/reply-icon.entry.js +1 -1
- package/dist/nylas-web-elements/search-icon.entry.js +1 -1
- package/dist/nylas-web-elements/select-dropdown.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/select-dropdown.entry.js +1 -1
- package/dist/nylas-web-elements/select-dropdown.entry.js.map +1 -1
- package/dist/nylas-web-elements/sent-icon.entry.js +1 -1
- package/dist/nylas-web-elements/spam-icon.entry.js +1 -1
- package/dist/nylas-web-elements/star-icon.entry.js +1 -1
- package/dist/nylas-web-elements/stop-icon.entry.js +1 -1
- package/dist/nylas-web-elements/textarea-component.entry.esm.js.map +1 -1
- package/dist/nylas-web-elements/textarea-component.entry.js +1 -1
- package/dist/nylas-web-elements/textarea-component.entry.js.map +1 -1
- package/dist/nylas-web-elements/time-period-selector.entry.js +1 -1
- package/dist/nylas-web-elements/toggle-switch.entry.js +1 -1
- package/dist/nylas-web-elements/tooltip-component.entry.js +1 -1
- package/dist/nylas-web-elements/translate-icon.entry.js +1 -1
- package/dist/nylas-web-elements/trash-fill-icon.entry.js +1 -1
- package/dist/nylas-web-elements/trash-icon.entry.js +1 -1
- package/dist/nylas-web-elements/underline-icon.entry.js +1 -1
- package/dist/nylas-web-elements/{utils-Bj5Y75fX.js → utils-DhmCcrVs.js} +3 -3
- package/dist/nylas-web-elements/{utils-Bj5Y75fX.js.map → utils-DhmCcrVs.js.map} +1 -1
- package/dist/nylas-web-elements/warning-icon.entry.js +1 -1
- package/dist/nylas-web-elements/zoom-icon.entry.js +1 -1
- package/dist/types/components/design-system/input-component/input-component.d.ts +1 -0
- package/dist/types/components/design-system/multi-select-dropdown/multi-select-dropdown.d.ts +1 -0
- package/dist/types/components/design-system/textarea-component/textarea-component.d.ts +1 -0
- package/dist/types/components/scheduler-editor/nylas-customize-booking-settings/nylas-customize-booking-settings.d.ts +1 -1
- package/dist/types/components/scheduler-editor/nylas-time-window-picker/nylas-time-window-picker.d.ts +1 -0
- package/dist/types/components.d.ts +4 -4
- package/package.json +3 -3
- package/readme.md +1 -1
- package/dist/nylas-web-elements/index-B-KMpdMZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["nylasEventDescriptionCss","NylasEventDescription","constructor","hostRef","this","eventDescription","selectedConfiguration","event_booking","description","name","hideAutoPopulateButton","noTemplates","showTokens","availableTokens","eventDescriptionTokens","map","token","label","value","labelHTML","filteredTokens","ariaActivedescendant","currentWord","$value","fullText","index","focusOffset","validationError","additionalFieldTokens","elementNameChangedHandler","newValue","debug","host","setAttribute","selectedConfigurationChangedHandler","additionalFields","scheduler","additional_fields","newKeys","Object","keys","newTokens","key","updateEventDescriptionFromProp","selectedLanguageChangedHandler","newVal","oldVal","i18next","changeLanguage","titleTokens","$invitee","$invitee_email","$duration","t","themeConfigChangedHandler","applyThemeConfig","themeConfig","entries","style","setProperty","connectedCallback","componentWillLoad","componentDidLoad","disconnectedCallback","valueChangedHandler","event","detail","JSON","parse","toString","descriptionRef","innerHTML","highlightTokens","outputHtml","forEach","tokenObj","regex","RegExp","replace","getCurrentSelectionForBrowser","getSelectionTextData","nodeValue","offset","node","allSelected","text","dollarIndex","lastIndexOf","lastWord","substring","split","currentText","isAllSelected","selection","anchorOffset","focusNode","length","currentBrowser","getBrowser","shadowRootSelection","shadowRoot","getSelection","focusNodeValue","document","anchorNodeValue","anchorNode","allSelectedFirefox","windowSelection","window","getComposedRanges","startContainer","allSelectedSafari","endOffset","console","warn","handleChange","textContent","target","sanitize","currentSelection","updateEventDescription","resetDropdown","startsWith","populateSuggestionsDropdown","handleInputKeyDown","isNonPrintableKey","preventDefault","activeOption","getElementById","click","textNode","childNodes","newTextNode","createTextNode","insertBefore","firstChild","range","createRange","setStart","collapse","sel","removeAllRanges","addRange","nodeType","Node","TEXT_NODE","newText","slice","focus","nextOption","nextElementSibling","id","prevOption","previousElementSibling","parentNode","nodeName","removeChild","remove","selectOption","e","option","word","dollarWord","currentNode","currentNodeText","wordText","includes","nextSibling","indexOf","textBefore","textAfter","newRange","tagSpan","createElement","classList","add","newTextNodeAfter","replaceWith","afterNode","query","filter","obj","isInternalsAvailable","internals","setValidity","setFormValue","valueChanged","emit","getLabelHTML","h","class","handleAddAdditionalFields","baseDescription","startMarker","endMarker","startIndex","endIndex","additionalFieldsBlock","render","Host","part","htmlFor","slot","contentEditable","onInput","onKeyDown","ref","el","tabindex","role","active","onClick","context","field","width","height","variant","__decorate","RegisterComponent","stateToProps","Map","eventToProps","fireRegisterEvent","prototype"],"sources":["src/components/scheduler-editor/nylas-event-description/nylas-event-description.scss?tag=nylas-event-description&encapsulation=shadow","src/components/scheduler-editor/nylas-event-description/nylas-event-description.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n @include default-css-variables;\n}\n\n.nylas-event-description {\n display: flex;\n flex-direction: column;\n gap: 4px;\n position: relative;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%;\n\n /* 21px */\n span.label-icon {\n margin-left: 4px;\n\n tooltip-component {\n display: flex;\n }\n }\n }\n\n textarea {\n padding: 12px 16px;\n border-width: 1;\n resize: vertical;\n border-radius: 8px;\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n border: 1px solid var(--nylas-base-200);\n\n &::-webkit-resizer {\n display: none;\n }\n }\n\n div.event-description {\n padding: 12px 16px;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n white-space: nowrap;\n scrollbar-width: thin;\n min-height: 50px;\n overflow-y: auto;\n white-space: pre-wrap;\n line-height: 1.5;\n background-color: var(--nylas-base-0);\n /* Preserves line breaks */\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &.error {\n border-color: var(--nylas-error);\n border-width: 2px;\n outline: none;\n }\n }\n\n span.add-additional-fields {\n display: flex;\n align-items: center;\n gap: 8px;\n\n button-component {\n button {\n height: 35px;\n background-color: var(--nylas-base-0);\n }\n }\n }\n\n span.help-text {\n display: inline-block;\n gap: 4px;\n align-items: center;\n color: var(--nylas-base-500);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 21px;\n position: relative;\n\n span.label-icon {\n display: inline-block;\n\n tooltip-component {\n &::part(tc__container) {\n position: unset;\n }\n\n &::part(tc__content) {\n position: absolute;\n top: 4px;\n left: 50%;\n transform: translateX(-50%);\n }\n }\n }\n }\n\n .highlighted-tag {\n background-color: var(--nylas-base-200);\n border-radius: var(--nylas-border-radius);\n padding: 2px 5px;\n margin-left: 4px;\n margin-bottom: 4px;\n display: inline-block;\n vertical-align: baseline;\n }\n\n .token-options {\n display: block;\n background-color: var(--nylas-base-0);\n width: 100%;\n max-height: 336px;\n margin-top: 28px;\n overflow: auto;\n z-index: 1;\n border-radius: 4px;\n position: absolute;\n bottom: 108px;\n\n box-shadow: 0px 4px 6px -2px #0000000d;\n box-shadow: 0px 10px 15px -3px #0000001a;\n\n @media #{$mobile} {\n right: 0;\n width: 325px;\n max-width: unset;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n color: var(--nylas-base-900);\n max-height: 336px;\n margin: 0;\n\n li {\n padding: 16px, 12px, 16px, 12px;\n color: var(--nylas-base-900);\n padding: 12px 16px;\n text-decoration: none;\n display: block;\n font-family: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0px;\n text-align: left;\n cursor: pointer;\n\n .token-label {\n display: flex;\n flex-direction: column;\n font-weight: 400;\n\n .token {\n color: var(--nylas-abse-900);\n font-size: 16px;\n line-height: 24px;\n }\n\n .description {\n color: var(--nylas-base-600);\n font-size: 14px;\n line-height: 21px;\n }\n }\n\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: var(--nylas-base-100);\n\n .token-label {\n .token {\n color: var(--nylas-primary);\n }\n }\n }\n }\n }\n\n .selected {\n background-color: var(--nylas-base-100);\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug, getBrowser, isNonPrintableKey, sanitize } from '@/utils/utils';\nimport { AttachInternals, Component, Host, State, h, Element, Prop, Watch, Event, EventEmitter, Listen } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { EVENT_TITLE_TOKENS as eventDescriptionTokens } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\ninterface CustomShadowRoot extends ShadowRoot {\n getSelection: () => Selection | null;\n}\n\ntype Token = {\n token: string;\n value: string;\n description: string;\n};\n\n/**\n * The `nylas-event-description` component is a form input for the description of an event.\n * @part nedesc - The event description container\n * @part nedesc__textarea - The event description textarea\n */\n@Component({\n tag: 'nylas-event-description',\n styleUrl: 'nylas-event-description.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDescription {\n /**\n * The host element <nylas-event-description>\n */\n @Element() host!: HTMLElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The event description stored in the configuration\n */\n @Prop() eventDescription?: string = this.selectedConfiguration?.event_booking?.description;\n\n /**\n * @standalone\n * The name of the event description input.\n */\n @Prop() name: string = 'description';\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * Hide the auto popolate button\n */\n @Prop() hideAutoPopulateButton: boolean = false;\n\n /**\n * Whether to show the tokens dropdown.\n */\n @Prop() noTemplates: boolean = false;\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The selected event description state. This defaults to the event description from the configuration or an empty string.\n */\n @State() description: string = this.eventDescription || this.selectedConfiguration?.event_booking?.description || '';\n @State() showTokens: boolean = false;\n /**\n * The available token options for the dropdown.\n */\n @State() availableTokens: { label: string; value: string; labelHTML: Token }[] = eventDescriptionTokens.map(token => ({\n label: token.token,\n value: token.value,\n labelHTML: token,\n }));\n /**\n * The filtered token options for the dropdown based on the current query.\n */\n @State() filteredTokens: { label: string; value: string; labelHTML: Token }[] = this.availableTokens;\n /**\n * The aria-activedescendant attribute value. This is used to indicate the\n * currently active descendant in the tokens dropdown.\n */\n @State() ariaActivedescendant: string = '';\n /**\n * Stores the reference to the current word being typed.\n * This is used to update the event description with the selected token tag when\n * an option is selected from the dropdown by clicking on it.\n */\n @State() currentWord: {\n $value: string;\n fullText: string;\n index: number;\n focusOffset: number;\n } = { $value: '', fullText: '', index: -1, focusOffset: -1 };\n\n @State() validationError: string = '';\n\n @State() additionalFieldTokens: Token[] = [];\n // Reference to the description textarea element\n private descriptionRef!: HTMLDivElement;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-event-description', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newValue: Configuration) {\n debug('nylas-custom-booking-flow', 'selectedConfigurationChangedHandler', newValue);\n const description = newValue?.event_booking?.description || this.eventDescription || '';\n const additionalFields = newValue?.scheduler?.additional_fields || {};\n const newKeys = Object.keys(additionalFields) || [];\n const newTokens = newKeys.map(key => {\n return {\n token: `$${key}`,\n value: `\\${${key}}`,\n description: additionalFields[key].label || '',\n };\n });\n this.additionalFieldTokens = [...newTokens];\n this.availableTokens = [...eventDescriptionTokens, ...newTokens].map(token => ({\n label: token.token,\n value: token.value,\n labelHTML: token,\n }));\n this.filteredTokens = [...this.availableTokens];\n this.description = description;\n if (description) {\n this.updateEventDescriptionFromProp(description);\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n const titleTokens = {\n $invitee: 'invitee',\n $invitee_email: 'inviteeEmail',\n $duration: 'duration',\n };\n this.availableTokens = this.availableTokens.map(token => {\n if (titleTokens[token.label]) {\n token.labelHTML.description = i18next.t(`nylasEventTitle.eventTitleTokenDescription.${titleTokens[token.label]}`);\n }\n return token;\n });\n this.filteredTokens = [...this.availableTokens];\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n /**\n * Event emitted when the event description changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-description', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-description', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-event-description', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n } else {\n this.description = this.eventDescription || '';\n this.updateEventDescriptionFromProp(this.description);\n }\n }\n\n disconnectedCallback() {\n debug('nylas-event-description', 'disconnectedCallback');\n }\n\n @Listen('valueChanged', { target: 'document' })\n valueChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n const { name, value } = event.detail;\n if (name === 'additional-fields') {\n const additionalFields = JSON.parse(value.toString());\n const newKeys = Object.keys(additionalFields) || [];\n const newTokens = newKeys.map(key => {\n return {\n token: `$${key}`,\n value: `\\${${key}}`,\n description: additionalFields[key].label || '',\n };\n });\n this.additionalFieldTokens = [...newTokens];\n this.availableTokens = [...eventDescriptionTokens, ...newTokens].map(token => ({\n label: token.token,\n value: token.value,\n labelHTML: token,\n }));\n this.filteredTokens = [...this.availableTokens];\n }\n }\n\n updateEventDescriptionFromProp(newValue: string) {\n debug('nylas-event-description', 'updateEventDescriptionFromProp', newValue);\n const description = newValue || this.description;\n if (this.descriptionRef) {\n this.descriptionRef.innerHTML = this.highlightTokens(description);\n }\n }\n\n highlightTokens(description: string) {\n let outputHtml = description;\n [...eventDescriptionTokens, ...this.additionalFieldTokens].forEach(tokenObj => {\n const token = tokenObj.value;\n // Create a regular expression that matches the token as a whole word\n const regex = new RegExp(`(\\\\${token})(?!\\\\w)`, 'g');\n // Replace the token with a span element\n outputHtml = outputHtml?.replace(regex, '<span class=\"highlighted-tag\">$1</span>') || '';\n });\n return outputHtml;\n }\n\n getCurrentSelectionForBrowser() {\n const getSelectionTextData = (nodeValue, offset, node, allSelected) => {\n // Remove zero-width space characters from the text, because they are not visible and cause issues with the selection\n const text = nodeValue.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n const dollarIndex = text.lastIndexOf('$');\n const lastWord = text.substring(dollarIndex).split(' ')[0];\n return {\n focusOffset: offset,\n dollarIndex,\n lastWord,\n currentText: text,\n node,\n allSelected,\n };\n };\n\n // Check if the selection has selected all the text in the node, we need this to handle the case where the user selects all the text and then types or deletes\n const isAllSelected = (selection: Selection) => selection.anchorOffset === 0 && selection.focusOffset === selection.focusNode?.nodeValue?.length;\n\n const currentBrowser = getBrowser();\n switch (currentBrowser) {\n case 'Chrome': {\n const shadowRootSelection = (this.host.shadowRoot as CustomShadowRoot)?.getSelection();\n const focusNode = shadowRootSelection?.focusNode;\n const focusNodeValue = focusNode?.nodeValue || '';\n const allSelected = shadowRootSelection && isAllSelected(shadowRootSelection);\n return getSelectionTextData(focusNodeValue, shadowRootSelection?.focusOffset || -1, focusNode, allSelected);\n }\n case 'Firefox': {\n const selection = document.getSelection();\n const anchorNodeValue = selection?.anchorNode?.nodeValue || '';\n const allSelectedFirefox = selection && isAllSelected(selection);\n return getSelectionTextData(anchorNodeValue, selection?.focusOffset || -1, selection?.anchorNode, allSelectedFirefox);\n }\n case 'Safari': {\n const windowSelection = window.getSelection();\n const anchorNode = (windowSelection as any)?.getComposedRanges(this.host.shadowRoot as CustomShadowRoot)[0];\n const currentText = anchorNode?.startContainer?.nodeValue || '';\n const allSelectedSafari = windowSelection && isAllSelected(windowSelection);\n return getSelectionTextData(currentText, anchorNode?.endOffset || -1, anchorNode?.startContainer, allSelectedSafari);\n }\n default: {\n console.warn('Browser not supported');\n return null;\n }\n }\n }\n\n handleChange(event: Event) {\n let textContent = (event.target as HTMLDivElement).textContent || '';\n textContent = sanitize(textContent);\n // All browsers handle Selection within Shadow DOM differently, so get the current selection based on the browser\n const currentSelection = this.getCurrentSelectionForBrowser();\n if (!currentSelection) {\n this.updateEventDescription(textContent);\n this.resetDropdown();\n return;\n }\n const { focusOffset, dollarIndex, lastWord, currentText } = currentSelection;\n\n if (dollarIndex === -1 || focusOffset < dollarIndex) {\n this.updateEventDescription(textContent);\n this.resetDropdown();\n return;\n }\n if (lastWord.startsWith('$')) {\n this.showTokens = true;\n // Update the current word being typed, we need this reference to update the event description with the selected token\n // because the user can select an option from the dropdown by clicking on it, which will not trigger the input event.\n this.currentWord = {\n $value: lastWord,\n fullText: currentText,\n index: dollarIndex,\n focusOffset,\n };\n this.populateSuggestionsDropdown(lastWord);\n } else {\n this.resetDropdown();\n }\n this.updateEventDescription(textContent);\n }\n\n handleInputKeyDown(event) {\n const selection = this.getCurrentSelectionForBrowser();\n\n // If no text is remaining in the description, reset the description to an empty string\n if (selection?.allSelected && !isNonPrintableKey(event)) {\n this.descriptionRef.innerHTML = '';\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n activeOption.click();\n this.ariaActivedescendant = '';\n } else {\n const textNode = selection?.node;\n const offset = selection?.focusOffset || 0;\n\n if (!textNode || offset === -1 || this.descriptionRef.childNodes.length === 0) {\n // If no text node exists or invalid selection, create new line at start\n const newTextNode = document.createTextNode('\\n');\n this.descriptionRef.insertBefore(newTextNode, this.descriptionRef.firstChild);\n\n // Set cursor after newline\n const range = document.createRange();\n range.setStart(newTextNode, 1);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n } else if (textNode.nodeType === Node.TEXT_NODE) {\n const text = textNode.nodeValue || '';\n // Insert newline at cursor position\n const newText = text.slice(0, offset) + '\\n' + text.slice(offset);\n textNode.nodeValue = newText;\n\n // Move cursor after the newline\n const range = document.createRange();\n range.setStart(textNode, offset + 1);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n this.descriptionRef.focus();\n }\n } else if (event.key === 'ArrowDown') {\n if (this.showTokens) {\n event.preventDefault();\n }\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n const nextOption = activeOption.nextElementSibling;\n if (nextOption) {\n this.ariaActivedescendant = nextOption.id;\n } else {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n } else {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n } else if (event.key === 'ArrowUp') {\n if (this.showTokens) {\n event.preventDefault();\n }\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n const prevOption = activeOption.previousElementSibling;\n if (prevOption) {\n this.ariaActivedescendant = prevOption.id;\n } else {\n this.ariaActivedescendant = this.filteredTokens[this.filteredTokens.length - 1].label;\n }\n } else {\n this.ariaActivedescendant = this.filteredTokens[this.filteredTokens.length - 1].label;\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.resetDropdown();\n } else if (event.key === 'Backspace' || event.key === 'Delete') {\n const parentNode = selection?.node?.parentNode;\n if (selection?.currentText.startsWith('${') && parentNode && parentNode.nodeName === 'SPAN') {\n event.preventDefault();\n parentNode.removeChild(selection.node);\n parentNode.remove();\n this.resetDropdown();\n }\n if (this.descriptionRef.textContent === '' || selection?.allSelected) {\n this.descriptionRef.innerHTML = '';\n this.updateEventDescription('');\n }\n }\n }\n\n selectOption(e: Event, option: { label: string; value: string; labelHTML: Token }) {\n e.preventDefault();\n const word = this.currentWord.fullText;\n const dollarWord = this.currentWord.$value;\n\n // Traverse the DOM to find the text node that contains the current word fullText\n let currentNode = this.descriptionRef.firstChild;\n let textNode: ChildNode | null = null;\n\n while (currentNode) {\n if (currentNode.nodeType === 3) {\n const currentNodeText = currentNode.textContent?.replace(/[\\u200B-\\u200D\\uFEFF]/g, '') || '';\n const wordText = word.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n if (currentNodeText.includes(wordText)) {\n textNode = currentNode;\n break;\n }\n }\n currentNode = currentNode.nextSibling;\n }\n\n if (!textNode) {\n return;\n }\n // Split the text node into three parts: text before the token, the token, and text after the token\n const text = textNode.textContent || '';\n const index = text.indexOf(dollarWord);\n const textBefore = text.substring(0, index);\n const textAfter = text.substring(index + dollarWord.length);\n const newTextNode = document.createTextNode(textBefore);\n const newRange = document.createRange();\n\n // Create a new span element to replace the text node\n const tagSpan = document.createElement('span');\n tagSpan.classList.add('highlighted-tag');\n tagSpan.textContent = `${option.value}`;\n const newTextNodeAfter = document.createTextNode(textAfter);\n\n if (textAfter !== '') {\n // If there is text after the token, add it to the new span element\n textNode.replaceWith(newTextNode, tagSpan, newTextNodeAfter);\n newRange.setStart(newTextNodeAfter, 1);\n } else {\n // If there is no text after the token, add a zero-width space character (Without this, the cursor will not move outside the highlighted span element)\n const afterNode = document.createTextNode('\\u200B');\n textNode.replaceWith(newTextNode, tagSpan, afterNode);\n newRange.setStart(afterNode, 1);\n }\n\n // Hide the dropdown\n this.resetDropdown();\n this.descriptionRef.focus();\n\n // Set the focus to the new span element\n const sel = window.getSelection();\n newRange.collapse(true);\n sel?.removeAllRanges();\n sel?.addRange(newRange);\n\n // Update the event description with the selected token\n this.updateEventDescription(this.descriptionRef.textContent || '');\n }\n\n populateSuggestionsDropdown(query: string = '') {\n this.filteredTokens = this.availableTokens.filter(obj => {\n return obj.label.startsWith(query.toString()) || obj.value.startsWith(query.toString());\n });\n\n // Set the first option as the active descendant\n if (this.filteredTokens.length > 0) {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n }\n\n get isInternalsAvailable() {\n return typeof this.internals !== 'undefined' && typeof this.internals.setValidity === 'function' && typeof this.internals.setFormValue === 'function';\n }\n\n updateEventDescription(text: string) {\n const value = text.replace(/ +/g, ' ');\n this.isInternalsAvailable && this.internals?.setFormValue(value, this.name);\n this.valueChanged.emit({ value: value, name: this.name });\n }\n\n resetDropdown() {\n this.showTokens = false;\n this.ariaActivedescendant = '';\n }\n\n getLabelHTML(token: { token: string; description: string }) {\n return (\n <div class=\"token-label\">\n <span class=\"token\">{token.token}</span>\n <span class=\"description\">{token.description}</span>\n </div>\n );\n }\n\n handleAddAdditionalFields() {\n if (this.additionalFieldTokens.length === 0) {\n return;\n }\n\n // Remove any existing additional fields section while preserving content before and after\n const baseDescription = this.descriptionRef.innerHTML;\n const startMarker = '--- Additional Fields ---';\n const endMarker = '--- End Additional Fields ---';\n\n const startIndex = baseDescription.indexOf(startMarker);\n const endIndex = baseDescription.indexOf(endMarker);\n\n // Add the additional fields block with start and end markers\n let additionalFieldsBlock = startMarker + '\\n';\n this.additionalFieldTokens.forEach(token => {\n additionalFieldsBlock += `${token.description}: ${token.value}\\n`;\n });\n additionalFieldsBlock += endMarker;\n\n let description;\n if (startIndex !== -1 && endIndex !== -1) {\n // Replace existing block while maintaining text positions\n description = baseDescription.substring(0, startIndex) + additionalFieldsBlock + baseDescription.substring(endIndex + endMarker.length);\n } else {\n // First time adding the block\n description = baseDescription + additionalFieldsBlock;\n }\n\n this.updateEventDescriptionFromProp(description);\n this.updateEventDescription(description);\n }\n\n @RegisterComponent<NylasEventDescription, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-description',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-event-description\" part=\"nedesc\">\n <label htmlFor=\"description\">\n {i18next.t('nylasEventDescription.headerTitle')}\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">{i18next.t('nylasEventDescription.tooltip.desc')}</span>\n </tooltip-component>\n </span>\n </label>\n <div\n id=\"event-description\"\n class={{ 'event-description': true }}\n part=\"nedesc__textarea\"\n contentEditable=\"true\"\n onInput={e => this.handleChange(e)}\n onKeyDown={event => this.handleInputKeyDown(event)}\n ref={el => (this.descriptionRef = el as HTMLDivElement)}\n ></div>\n {!this.noTemplates && this.showTokens && this.filteredTokens?.length > 0 && (\n <div class=\"token-options\" part=\"nedesc__dropdown-content\">\n <ul tabindex=\"-1\" role=\"listbox\" aria-label={this.name} aria-activedescendant={this.ariaActivedescendant}>\n {this.filteredTokens.map(option => (\n <li\n tabindex=\"0\"\n key={option.label}\n id={option.label}\n class={{ active: this.ariaActivedescendant === option.label }}\n onClick={e => this.selectOption(e, option)}\n role=\"option\"\n >\n {this.getLabelHTML(option.labelHTML)}\n </li>\n ))}\n </ul>\n </div>\n )}\n {!this.noTemplates && (\n <span class=\"help-text\">\n {i18next.t('nylasEventTitle.helpText', { context: 'start', field: i18next.t('nylasEventTitle.description') })} <code>$</code>{' '}\n {i18next.t('nylasEventTitle.helpText', { context: 'end' })}\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" width=\"13\" height=\"13\" />\n <span slot=\"tooltip-content\">\n {i18next.t('nylasEventTitle.tooltip.desc')} <code>{'${invitee}'}</code>\n </span>\n </tooltip-component>\n </span>\n </span>\n )}\n {!this.noTemplates && !this.hideAutoPopulateButton && (\n <span class=\"add-additional-fields\">\n <button-component variant=\"basic\" onClick={() => this.handleAddAdditionalFields()}>\n {i18next.t('nylasEventDescription.addAdditionalFields.buttonText')}\n </button-component>\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n {i18next.t('nylasEventDescription.addAdditionalFields.tooltip.desc')} <code>{'${invitee}'}</code>\n </span>\n </tooltip-component>\n </span>\n </span>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["nylasEventDescriptionCss","NylasEventDescription","constructor","hostRef","this","eventDescription","selectedConfiguration","event_booking","description","name","hideAutoPopulateButton","noTemplates","showTokens","availableTokens","eventDescriptionTokens","map","token","label","value","labelHTML","filteredTokens","ariaActivedescendant","currentWord","$value","fullText","index","focusOffset","validationError","additionalFieldTokens","elementNameChangedHandler","newValue","debug","host","setAttribute","selectedConfigurationChangedHandler","additionalFields","scheduler","additional_fields","newKeys","Object","keys","newTokens","key","updateEventDescriptionFromProp","selectedLanguageChangedHandler","newVal","oldVal","i18next","changeLanguage","titleTokens","$invitee","$invitee_email","$duration","t","themeConfigChangedHandler","applyThemeConfig","themeConfig","entries","style","setProperty","connectedCallback","componentWillLoad","componentDidLoad","disconnectedCallback","valueChangedHandler","event","detail","JSON","parse","toString","descriptionRef","innerHTML","highlightTokens","outputHtml","forEach","tokenObj","regex","RegExp","replace","getCurrentSelectionForBrowser","getSelectionTextData","nodeValue","offset","node","allSelected","text","dollarIndex","lastIndexOf","lastWord","substring","split","currentText","isAllSelected","selection","anchorOffset","focusNode","length","currentBrowser","getBrowser","shadowRootSelection","shadowRoot","getSelection","focusNodeValue","document","anchorNodeValue","anchorNode","allSelectedFirefox","windowSelection","window","getComposedRanges","startContainer","allSelectedSafari","endOffset","console","warn","handleChange","textContent","target","sanitize","currentSelection","updateEventDescription","resetDropdown","startsWith","populateSuggestionsDropdown","handleInputKeyDown","isNonPrintableKey","preventDefault","activeOption","getElementById","click","textNode","childNodes","newTextNode","createTextNode","insertBefore","firstChild","range","createRange","setStart","collapse","sel","removeAllRanges","addRange","nodeType","Node","TEXT_NODE","newText","slice","focus","nextOption","nextElementSibling","id","prevOption","previousElementSibling","parentNode","nodeName","removeChild","remove","selectOption","e","option","word","dollarWord","currentNode","currentNodeText","wordText","includes","nextSibling","indexOf","textBefore","textAfter","newRange","tagSpan","createElement","classList","add","newTextNodeAfter","replaceWith","afterNode","query","filter","obj","isInternalsAvailable","internals","setValidity","setFormValue","valueChanged","emit","getLabelHTML","h","class","handleAddAdditionalFields","baseDescription","startMarker","endMarker","startIndex","endIndex","additionalFieldsBlock","render","Host","part","htmlFor","slot","contentEditable","onInput","onKeyDown","ref","el","tabindex","role","active","onClick","context","field","width","height","variant","__decorate","RegisterComponent","stateToProps","Map","eventToProps","fireRegisterEvent","prototype"],"sources":["src/components/scheduler-editor/nylas-event-description/nylas-event-description.scss?tag=nylas-event-description&encapsulation=shadow","src/components/scheduler-editor/nylas-event-description/nylas-event-description.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n @include default-css-variables;\n}\n\n.nylas-event-description {\n display: flex;\n flex-direction: column;\n gap: 4px;\n position: relative;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%;\n\n /* 21px */\n span.label-icon {\n margin-left: 4px;\n\n tooltip-component {\n display: flex;\n }\n }\n }\n\n textarea {\n padding: 12px 16px;\n border-width: 1;\n resize: vertical;\n border-radius: 8px;\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n border: 1px solid var(--nylas-base-200);\n\n &::-webkit-resizer {\n display: none;\n }\n }\n\n div.event-description {\n padding: 12px 16px;\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n white-space: nowrap;\n scrollbar-width: thin;\n min-height: 50px;\n overflow-y: auto;\n white-space: pre-wrap;\n line-height: 1.5;\n background-color: var(--nylas-base-0);\n /* Preserves line breaks */\n &::-webkit-scrollbar {\n width: 6px;\n height: 6px;\n }\n\n &.error {\n border-color: var(--nylas-error);\n border-width: 2px;\n outline: none;\n }\n }\n\n span.add-additional-fields {\n display: flex;\n align-items: center;\n gap: 8px;\n\n button-component {\n button {\n height: 35px;\n background-color: var(--nylas-base-0);\n }\n }\n }\n\n span.help-text {\n display: inline-block;\n gap: 4px;\n align-items: center;\n color: var(--nylas-base-500);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 21px;\n position: relative;\n\n span.label-icon {\n display: inline-block;\n\n tooltip-component {\n &::part(tc__container) {\n position: unset;\n }\n\n &::part(tc__content) {\n position: absolute;\n top: 4px;\n left: 50%;\n transform: translateX(-50%);\n }\n }\n }\n }\n\n .highlighted-tag {\n background-color: var(--nylas-base-200);\n border-radius: var(--nylas-border-radius);\n padding: 2px 5px;\n margin-left: 4px;\n margin-bottom: 4px;\n display: inline-block;\n vertical-align: baseline;\n }\n\n .token-options {\n display: block;\n background-color: var(--nylas-base-0);\n width: 100%;\n max-height: 336px;\n margin-top: 28px;\n overflow: auto;\n z-index: 1;\n border-radius: 4px;\n position: absolute;\n bottom: 108px;\n\n box-shadow: 0px 4px 6px -2px #0000000d;\n box-shadow: 0px 10px 15px -3px #0000001a;\n\n @media #{$mobile} {\n right: 0;\n width: 325px;\n max-width: unset;\n }\n\n ul {\n padding: 0;\n list-style-type: none;\n color: var(--nylas-base-900);\n max-height: 336px;\n margin: 0;\n\n li {\n padding: 16px, 12px, 16px, 12px;\n color: var(--nylas-base-900);\n padding: 12px 16px;\n text-decoration: none;\n display: block;\n font-family: inherit;\n font-size: 14px;\n font-weight: 400;\n line-height: 20px;\n letter-spacing: 0px;\n text-align: left;\n cursor: pointer;\n\n .token-label {\n display: flex;\n flex-direction: column;\n font-weight: 400;\n\n .token {\n color: var(--nylas-abse-900);\n font-size: 16px;\n line-height: 24px;\n }\n\n .description {\n color: var(--nylas-base-600);\n font-size: 14px;\n line-height: 21px;\n }\n }\n\n &:hover,\n &:focus,\n &:active,\n &.active {\n background-color: var(--nylas-base-100);\n\n .token-label {\n .token {\n color: var(--nylas-primary);\n }\n }\n }\n }\n }\n\n .selected {\n background-color: var(--nylas-base-100);\n }\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug, getBrowser, isNonPrintableKey, sanitize } from '@/utils/utils';\nimport { AttachInternals, Component, Host, State, h, Element, Prop, Watch, Event, EventEmitter, Listen } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { EVENT_TITLE_TOKENS as eventDescriptionTokens } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\ninterface CustomShadowRoot extends ShadowRoot {\n getSelection: () => Selection | null;\n}\n\ntype Token = {\n token: string;\n value: string;\n description: string;\n};\n\n/**\n * The `nylas-event-description` component is a form input for the description of an event.\n * @part nedesc - The event description container\n * @part nedesc__textarea - The event description textarea\n */\n@Component({\n tag: 'nylas-event-description',\n styleUrl: 'nylas-event-description.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDescription {\n /**\n * The host element <nylas-event-description>\n */\n @Element() host!: HTMLElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The event description stored in the configuration\n */\n @Prop() eventDescription?: string = this.selectedConfiguration?.event_booking?.description;\n\n /**\n * @standalone\n * The name of the event description input.\n */\n @Prop() name: string = 'description';\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * Hide the auto popolate button\n */\n @Prop() hideAutoPopulateButton: boolean = false;\n\n /**\n * Whether to show the tokens dropdown.\n */\n @Prop() noTemplates: boolean = false;\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The selected event description state. This defaults to the event description from the configuration or an empty string.\n */\n @State() description: string = this.eventDescription || this.selectedConfiguration?.event_booking?.description || '';\n @State() showTokens: boolean = false;\n /**\n * The available token options for the dropdown.\n */\n @State() availableTokens: { label: string; value: string; labelHTML: Token }[] = eventDescriptionTokens.map(token => ({\n label: token.token,\n value: token.value,\n labelHTML: token,\n }));\n /**\n * The filtered token options for the dropdown based on the current query.\n */\n @State() filteredTokens: { label: string; value: string; labelHTML: Token }[] = this.availableTokens;\n /**\n * The aria-activedescendant attribute value. This is used to indicate the\n * currently active descendant in the tokens dropdown.\n */\n @State() ariaActivedescendant: string = '';\n /**\n * Stores the reference to the current word being typed.\n * This is used to update the event description with the selected token tag when\n * an option is selected from the dropdown by clicking on it.\n */\n @State() currentWord: {\n $value: string;\n fullText: string;\n index: number;\n focusOffset: number;\n } = { $value: '', fullText: '', index: -1, focusOffset: -1 };\n\n @State() validationError: string = '';\n\n @State() additionalFieldTokens: Token[] = [];\n // Reference to the description textarea element\n private descriptionRef!: HTMLDivElement;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-event-description', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newValue: Configuration) {\n debug('nylas-custom-booking-flow', 'selectedConfigurationChangedHandler', newValue);\n const description = newValue?.event_booking?.description || this.eventDescription || '';\n const additionalFields = newValue?.scheduler?.additional_fields || {};\n const newKeys = Object.keys(additionalFields) || [];\n const newTokens = newKeys.map(key => {\n return {\n token: `$${key}`,\n value: `\\${${key}}`,\n description: additionalFields[key].label || '',\n };\n });\n this.additionalFieldTokens = [...newTokens];\n this.availableTokens = [...eventDescriptionTokens, ...newTokens].map(token => ({\n label: token.token,\n value: token.value,\n labelHTML: token,\n }));\n this.filteredTokens = [...this.availableTokens];\n this.description = description;\n if (description) {\n this.updateEventDescriptionFromProp(description);\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n const titleTokens = {\n $invitee: 'invitee',\n $invitee_email: 'inviteeEmail',\n $duration: 'duration',\n };\n this.availableTokens = this.availableTokens.map(token => {\n if (titleTokens[token.label]) {\n token.labelHTML.description = i18next.t(`nylasEventTitle.eventTitleTokenDescription.${titleTokens[token.label]}`);\n }\n return token;\n });\n this.filteredTokens = [...this.availableTokens];\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n /**\n * Event emitted when the event description changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-description', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-description', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n this.applyThemeConfig(this.themeConfig);\n }\n\n componentDidLoad() {\n debug('nylas-event-description', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n } else {\n this.description = this.eventDescription || '';\n this.updateEventDescriptionFromProp(this.description);\n }\n }\n\n disconnectedCallback() {\n debug('nylas-event-description', 'disconnectedCallback');\n }\n\n @Listen('valueChanged', { target: 'document' })\n valueChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n const { name, value } = event.detail;\n if (name === 'additional-fields') {\n const additionalFields = JSON.parse(value.toString());\n const newKeys = Object.keys(additionalFields) || [];\n const newTokens = newKeys.map(key => {\n return {\n token: `$${key}`,\n value: `\\${${key}}`,\n description: additionalFields[key].label || '',\n };\n });\n this.additionalFieldTokens = [...newTokens];\n this.availableTokens = [...eventDescriptionTokens, ...newTokens].map(token => ({\n label: token.token,\n value: token.value,\n labelHTML: token,\n }));\n this.filteredTokens = [...this.availableTokens];\n }\n }\n\n updateEventDescriptionFromProp(newValue: string) {\n debug('nylas-event-description', 'updateEventDescriptionFromProp', newValue);\n const description = newValue || this.description;\n if (this.descriptionRef) {\n this.descriptionRef.innerHTML = this.highlightTokens(description);\n }\n }\n\n highlightTokens(description: string) {\n let outputHtml = description;\n [...eventDescriptionTokens, ...this.additionalFieldTokens].forEach(tokenObj => {\n const token = tokenObj.value;\n // Create a regular expression that matches the token as a whole word\n const regex = new RegExp(`(\\\\${token})(?!\\\\w)`, 'g');\n // Replace the token with a span element\n outputHtml = outputHtml?.replace(regex, '<span class=\"highlighted-tag\">$1</span>') || '';\n });\n return outputHtml;\n }\n\n getCurrentSelectionForBrowser() {\n const getSelectionTextData = (nodeValue, offset, node, allSelected) => {\n // Remove zero-width space characters from the text, because they are not visible and cause issues with the selection\n const text = nodeValue.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n const dollarIndex = text.lastIndexOf('$');\n const lastWord = text.substring(dollarIndex).split(' ')[0];\n return {\n focusOffset: offset,\n dollarIndex,\n lastWord,\n currentText: text,\n node,\n allSelected,\n };\n };\n\n // Check if the selection has selected all the text in the node, we need this to handle the case where the user selects all the text and then types or deletes\n const isAllSelected = (selection: Selection) => selection.anchorOffset === 0 && selection.focusOffset === selection.focusNode?.nodeValue?.length;\n\n const currentBrowser = getBrowser();\n switch (currentBrowser) {\n case 'Chrome': {\n const shadowRootSelection = (this.host.shadowRoot as CustomShadowRoot)?.getSelection();\n const focusNode = shadowRootSelection?.focusNode;\n const focusNodeValue = focusNode?.nodeValue || '';\n const allSelected = shadowRootSelection && isAllSelected(shadowRootSelection);\n return getSelectionTextData(focusNodeValue, shadowRootSelection?.focusOffset || -1, focusNode, allSelected);\n }\n case 'Firefox': {\n const selection = document.getSelection();\n const anchorNodeValue = selection?.anchorNode?.nodeValue || '';\n const allSelectedFirefox = selection && isAllSelected(selection);\n return getSelectionTextData(anchorNodeValue, selection?.focusOffset || -1, selection?.anchorNode, allSelectedFirefox);\n }\n case 'Safari': {\n const windowSelection = window.getSelection();\n const anchorNode = (windowSelection as any)?.getComposedRanges(this.host.shadowRoot as CustomShadowRoot)[0];\n const currentText = anchorNode?.startContainer?.nodeValue || '';\n const allSelectedSafari = windowSelection && isAllSelected(windowSelection);\n return getSelectionTextData(currentText, anchorNode?.endOffset || -1, anchorNode?.startContainer, allSelectedSafari);\n }\n default: {\n console.warn('Browser not supported');\n return null;\n }\n }\n }\n\n handleChange(event: Event) {\n let textContent = (event.target as HTMLDivElement).textContent || '';\n textContent = sanitize(textContent);\n // All browsers handle Selection within Shadow DOM differently, so get the current selection based on the browser\n const currentSelection = this.getCurrentSelectionForBrowser();\n if (!currentSelection) {\n this.updateEventDescription(textContent);\n this.resetDropdown();\n return;\n }\n const { focusOffset, dollarIndex, lastWord, currentText } = currentSelection;\n\n if (dollarIndex === -1 || focusOffset < dollarIndex) {\n this.updateEventDescription(textContent);\n this.resetDropdown();\n return;\n }\n if (lastWord.startsWith('$')) {\n this.showTokens = true;\n // Update the current word being typed, we need this reference to update the event description with the selected token\n // because the user can select an option from the dropdown by clicking on it, which will not trigger the input event.\n this.currentWord = {\n $value: lastWord,\n fullText: currentText,\n index: dollarIndex,\n focusOffset,\n };\n this.populateSuggestionsDropdown(lastWord);\n } else {\n this.resetDropdown();\n }\n this.updateEventDescription(textContent);\n }\n\n handleInputKeyDown(event) {\n const selection = this.getCurrentSelectionForBrowser();\n\n // If no text is remaining in the description, reset the description to an empty string\n if (selection?.allSelected && !isNonPrintableKey(event)) {\n this.descriptionRef.innerHTML = '';\n }\n\n if (event.key === 'Enter') {\n event.preventDefault();\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n activeOption.click();\n this.ariaActivedescendant = '';\n } else {\n const textNode = selection?.node;\n const offset = selection?.focusOffset || 0;\n\n if (!textNode || offset === -1 || this.descriptionRef.childNodes.length === 0) {\n // If no text node exists or invalid selection, create new line at start\n const newTextNode = document.createTextNode('\\n');\n this.descriptionRef.insertBefore(newTextNode, this.descriptionRef.firstChild);\n\n // Set cursor after newline\n const range = document.createRange();\n range.setStart(newTextNode, 1);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n } else if (textNode.nodeType === Node.TEXT_NODE) {\n const text = textNode.nodeValue || '';\n // Insert newline at cursor position\n const newText = text.slice(0, offset) + '\\n' + text.slice(offset);\n textNode.nodeValue = newText;\n\n // Move cursor after the newline\n const range = document.createRange();\n range.setStart(textNode, offset + 1);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n this.descriptionRef.focus();\n }\n } else if (event.key === 'ArrowDown') {\n if (this.showTokens) {\n event.preventDefault();\n }\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n const nextOption = activeOption.nextElementSibling;\n if (nextOption) {\n this.ariaActivedescendant = nextOption.id;\n } else {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n } else {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n } else if (event.key === 'ArrowUp') {\n if (this.showTokens) {\n event.preventDefault();\n }\n const activeOption = this.host.shadowRoot?.getElementById(this.ariaActivedescendant);\n if (activeOption) {\n const prevOption = activeOption.previousElementSibling;\n if (prevOption) {\n this.ariaActivedescendant = prevOption.id;\n } else {\n this.ariaActivedescendant = this.filteredTokens[this.filteredTokens.length - 1].label;\n }\n } else {\n this.ariaActivedescendant = this.filteredTokens[this.filteredTokens.length - 1].label;\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n this.resetDropdown();\n } else if (event.key === 'Backspace' || event.key === 'Delete') {\n const parentNode = selection?.node?.parentNode;\n if (selection?.currentText.startsWith('${') && parentNode && parentNode.nodeName === 'SPAN') {\n event.preventDefault();\n parentNode.removeChild(selection.node);\n parentNode.remove();\n this.resetDropdown();\n }\n if (this.descriptionRef.textContent === '' || selection?.allSelected) {\n this.descriptionRef.innerHTML = '';\n this.updateEventDescription('');\n }\n }\n }\n\n selectOption(e: Event, option: { label: string; value: string; labelHTML: Token }) {\n e.preventDefault();\n const word = this.currentWord.fullText;\n const dollarWord = this.currentWord.$value;\n\n // Traverse the DOM to find the text node that contains the current word fullText\n let currentNode = this.descriptionRef.firstChild;\n let textNode: ChildNode | null = null;\n\n while (currentNode) {\n if (currentNode.nodeType === 3) {\n const currentNodeText = currentNode.textContent?.replace(/[\\u200B-\\u200D\\uFEFF]/g, '') || '';\n const wordText = word.replace(/[\\u200B-\\u200D\\uFEFF]/g, '');\n if (currentNodeText.includes(wordText)) {\n textNode = currentNode;\n break;\n }\n }\n currentNode = currentNode.nextSibling;\n }\n\n if (!textNode) {\n return;\n }\n // Split the text node into three parts: text before the token, the token, and text after the token\n const text = textNode.textContent || '';\n const index = text.indexOf(dollarWord);\n const textBefore = text.substring(0, index);\n const textAfter = text.substring(index + dollarWord.length);\n const newTextNode = document.createTextNode(textBefore);\n const newRange = document.createRange();\n\n // Create a new span element to replace the text node\n const tagSpan = document.createElement('span');\n tagSpan.classList.add('highlighted-tag');\n tagSpan.textContent = `${option.value}`;\n const newTextNodeAfter = document.createTextNode(textAfter);\n\n if (textAfter !== '') {\n // If there is text after the token, add it to the new span element\n textNode.replaceWith(newTextNode, tagSpan, newTextNodeAfter);\n newRange.setStart(newTextNodeAfter, 1);\n } else {\n // If there is no text after the token, add a zero-width space character (Without this, the cursor will not move outside the highlighted span element)\n const afterNode = document.createTextNode('\\u200B');\n textNode.replaceWith(newTextNode, tagSpan, afterNode);\n newRange.setStart(afterNode, 1);\n }\n\n // Hide the dropdown\n this.resetDropdown();\n this.descriptionRef.focus();\n\n // Set the focus to the new span element\n const sel = window.getSelection();\n newRange.collapse(true);\n sel?.removeAllRanges();\n sel?.addRange(newRange);\n\n // Update the event description with the selected token\n this.updateEventDescription(this.descriptionRef.textContent || '');\n }\n\n populateSuggestionsDropdown(query: string = '') {\n this.filteredTokens = this.availableTokens.filter(obj => {\n return obj.label.startsWith(query.toString()) || obj.value.startsWith(query.toString());\n });\n\n // Set the first option as the active descendant\n if (this.filteredTokens.length > 0) {\n this.ariaActivedescendant = this.filteredTokens[0].label;\n }\n }\n\n get isInternalsAvailable() {\n return typeof this.internals !== 'undefined' && typeof this.internals.setValidity === 'function' && typeof this.internals.setFormValue === 'function';\n }\n\n updateEventDescription(text: string) {\n const value = text.replace(/ +/g, ' ');\n this.isInternalsAvailable && this.internals?.setFormValue(value, this.name);\n this.valueChanged.emit({ value: value, name: this.name });\n }\n\n resetDropdown() {\n this.showTokens = false;\n this.ariaActivedescendant = '';\n }\n\n getLabelHTML(token: { token: string; description: string }) {\n return (\n <div class=\"token-label\">\n <span class=\"token\">{token.token}</span>\n <span class=\"description\">{token.description}</span>\n </div>\n );\n }\n\n handleAddAdditionalFields() {\n if (this.additionalFieldTokens.length === 0) {\n return;\n }\n\n // Remove any existing additional fields section while preserving content before and after\n const baseDescription = this.descriptionRef.innerHTML;\n const startMarker = '--- Additional Fields ---';\n const endMarker = '--- End Additional Fields ---';\n\n const startIndex = baseDescription.indexOf(startMarker);\n const endIndex = baseDescription.indexOf(endMarker);\n\n // Add the additional fields block with start and end markers\n let additionalFieldsBlock = startMarker + '\\n';\n this.additionalFieldTokens.forEach(token => {\n additionalFieldsBlock += `${token.description}: ${token.value}\\n`;\n });\n additionalFieldsBlock += endMarker;\n\n let description;\n if (startIndex !== -1 && endIndex !== -1) {\n // Replace existing block while maintaining text positions\n description = baseDescription.substring(0, startIndex) + additionalFieldsBlock + baseDescription.substring(endIndex + endMarker.length);\n } else {\n // First time adding the block\n description = baseDescription + additionalFieldsBlock;\n }\n\n this.updateEventDescriptionFromProp(description);\n this.updateEventDescription(description);\n }\n\n @RegisterComponent<NylasEventDescription, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-description',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <div class=\"nylas-event-description\" part=\"nedesc\">\n <label htmlFor=\"description\">\n {i18next.t('nylasEventDescription.headerTitle')}\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">{i18next.t('nylasEventDescription.tooltip.desc')}</span>\n </tooltip-component>\n </span>\n </label>\n <div\n id=\"event-description\"\n class={{ 'event-description': true }}\n part=\"nedesc__textarea\"\n contentEditable=\"true\"\n onInput={e => this.handleChange(e)}\n onKeyDown={event => this.handleInputKeyDown(event)}\n ref={el => (this.descriptionRef = el as HTMLDivElement)}\n ></div>\n {!this.noTemplates && this.showTokens && this.filteredTokens?.length > 0 && (\n <div class=\"token-options\" part=\"nedesc__dropdown-content\">\n <ul tabindex=\"-1\" role=\"listbox\" aria-label={this.name} aria-activedescendant={this.ariaActivedescendant}>\n {this.filteredTokens.map(option => (\n <li\n tabindex=\"0\"\n key={option.label}\n id={option.label}\n class={{ active: this.ariaActivedescendant === option.label }}\n onClick={e => this.selectOption(e, option)}\n role=\"option\"\n >\n {this.getLabelHTML(option.labelHTML)}\n </li>\n ))}\n </ul>\n </div>\n )}\n {!this.noTemplates && (\n <span class=\"help-text\">\n {i18next.t('nylasEventTitle.helpText', { context: 'start', field: i18next.t('nylasEventTitle.description') })} <code>$</code>{' '}\n {i18next.t('nylasEventTitle.helpText', { context: 'end' })}\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" width=\"13\" height=\"13\" />\n <span slot=\"tooltip-content\">\n {i18next.t('nylasEventTitle.tooltip.desc')} <code>{'${invitee}'}</code>\n </span>\n </tooltip-component>\n </span>\n </span>\n )}\n {!this.noTemplates && !this.hideAutoPopulateButton && (\n <span class=\"add-additional-fields\">\n <button-component variant=\"basic\" onClick={() => this.handleAddAdditionalFields()}>\n {i18next.t('nylasEventDescription.addAdditionalFields.buttonText')}\n </button-component>\n <span class=\"label-icon\">\n <tooltip-component>\n <info-icon slot=\"tooltip-icon\" />\n <span slot=\"tooltip-content\">\n {i18next.t('nylasEventDescription.addAdditionalFields.tooltip.desc')} <code>{'${invitee}'}</code>\n </span>\n </tooltip-component>\n </span>\n </span>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nylas-event-duration.entry.esm.js","sources":["src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.scss?tag=nylas-event-duration&encapsulation=shadow","src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n display: block;\n @include default-css-variables;\n}\n\n.nylas-event-duration {\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.required {\n color: var(--nylas-error, #cc4841);\n }\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n\n.nylas-event-duration__error-container {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition:\n max-height 0.3s ease,\n opacity 0.3s ease;\n\n &.visible {\n max-height: 20px;\n opacity: 1;\n }\n .nylas-event-duration__error {\n color: var(--nylas-error);\n font-family: var(--nylas-font-family);\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 18px */\n }\n}\n\n.nylas-event-duration__wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n input {\n padding: 12px 16px;\n border-width: 1;\n border-radius: 8px;\n border: 1px solid var(--nylas-base-200);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n width: 48px;\n }\n\n input-dropdown::part(id_dropdown-input) {\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 14px 16px;\n background-color: var(--nylas-base-0);\n color: var(--nylas-base-900);\n }\n\n input-dropdown::part(id_dropdown-content) {\n width: 100%;\n min-width: unset;\n height: 200px;\n }\n\n input-dropdown {\n width: 80px;\n\n &.error {\n &::part(id_dropdown-input) {\n border: 1px solid var(--nylas-error);\n }\n }\n }\n select-dropdown {\n width: 120px;\n @media #{$mobile} {\n width: 100%;\n }\n }\n\n select-dropdown::part(sd_dropdown-button) {\n border: 1px solid var(--nylas-base-200);\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, Listen, State, h, Element, Prop, Watch, Event, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\n\n/**\n * The `nylas-event-duration` component is a form input for the duration of an event.\n *\n * @part ned - The event duration container\n * @part ned__dropdown - The dropdown container for the duration increment\n * @part ned__dropdown-button - The dropdown button for the duration increment\n * @part ned__dropdown-content - The dropdown content for the duration increment\n * @part ned__input_dropdown - The input dropdown container for the duration minutes\n * @part ned__input_dropdown-input - The input for the duration minutes\n * @part ned__input_dropdown-content - The dropdown content for the input duration minutes\n */\n@Component({\n tag: 'nylas-event-duration',\n styleUrl: 'nylas-event-duration.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDuration {\n /**\n * The host element <nylas-event-duration>\n */\n @Element() host!: HTMLElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The name of the event duration. Default is 'duration'.\n */\n @Prop() name: string = 'duration';\n /**\n * @standalone\n * The event duration in minutes as set in the configuration.\n */\n @Prop() eventDurationMinutes?: number;\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The selected event duration state. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() duration: number = this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n /**\n * The duration in minutes. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() durationMinutes!: number;\n /**\n * The duration increment. This defaults to minute(s).\n */\n @State() durationIncrement!: number;\n /**\n * The error message for the duration.\n */\n @State() error: string = '';\n /**\n * The durationMinutesOptions for the dropdown.\n */\n @State() durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-event-duration', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newVal: Configuration) {\n const configDuration = newVal?.availability?.duration_minutes;\n if (configDuration) {\n this.duration = configDuration >= 60 ? configDuration / 60 : configDuration;\n this.durationMinutes = configDuration ? configDuration : 30;\n this.durationIncrement = configDuration >= 60 ? 60 : 1;\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n if (this.error) {\n this.validateDuration();\n }\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n /**\n * Event emitted when the event duration changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-duration', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-duration', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-event-duration', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n }\n this.duration = this.duration ? this.duration : this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n this.durationMinutes = this.durationMinutes ? this.durationMinutes : this.duration ? this.duration : 30;\n this.durationIncrement = this.durationIncrement ? this.durationIncrement : this.duration >= 60 ? 60 : 1;\n this.setDurationMintueOptions();\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n\n disconnectedCallback() {\n debug('nylas-event-duration', 'disconnectedCallback');\n }\n\n get isInternalsAvailable() {\n return typeof this.internals !== 'undefined' && typeof this.internals.setFormValue === 'function';\n }\n\n setDurationMintueOptions() {\n if (this.durationIncrement === 1) {\n this.durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n } else {\n this.durationMinutesOptions = Array.from({ length: 23 }, (_, i) => ({ value: (i + 1).toString(), label: (i + 1).toString() }));\n }\n return this.durationMinutesOptions;\n }\n\n validateDuration() {\n if (this.durationMinutes % 5 !== 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeMultipleOf5');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else if (this.durationMinutes <= 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeGreaterThan0');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else {\n this.error = '';\n this.isInternalsAvailable && this.internals.setValidity({});\n }\n return this.error;\n }\n\n @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-calendar-picker', 'nylasFormDropdownChangedHandler', event.detail);\n const { value } = event.detail;\n this.durationIncrement = parseInt(value.toString());\n if (this.durationIncrement === 1) {\n this.duration = 60;\n } else {\n this.duration = 1;\n }\n this.setDurationMintueOptions();\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @Listen('inputOptionChanged')\n inputOptionChangedHandler(event: CustomEvent<{ value: number; name: string }>) {\n debug('nylas-calendar-picker', 'inputOptionChangedHandler', event.detail);\n const { value } = event.detail;\n this.duration = parseFloat(value.toString());\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @RegisterComponent<NylasEventDuration, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-duration',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n const durationOptions = [\n { value: (1).toString(), label: i18next.t('timeDuration', { context: 'minute' }) },\n { value: (60).toString(), label: i18next.t('timeDuration', { context: 'hour' }) },\n ];\n\n return (\n <Host>\n <div class=\"nylas-event-duration\" part=\"ned\">\n <label htmlFor=\"duration\">\n {i18next.t('nylasEventDuration.headerTitle')}\n <span class=\"required\">*</span>\n </label>\n <div class=\"nylas-event-duration__wrapper\">\n <input-dropdown\n class={this.error ? 'error' : ''}\n name={'event-duration'}\n options={this.durationMinutesOptions}\n inputValue={this.duration.toString()}\n exportparts=\"id_dropdown: ned__input_dropdown, id_dropdown-input: ned__input_dropdown-input, id_dropdown-content: ned__input_dropdown-content\"\n defaultInputOption={this.durationMinutesOptions.find(i => i.value === this.duration.toString())}\n themeConfig={this.themeConfig}\n />\n {this.durationIncrement && (\n <select-dropdown\n name={'event-duration'}\n options={durationOptions}\n pluralizedLabel={\n this.duration > 1\n ? i18next.t(`time.${this.durationIncrement === 60 ? 'hours' : 'minutes'}`)\n : i18next.t(`time.${this.durationIncrement === 60 ? 'hour' : 'minute'}`)\n }\n themeConfig={this.themeConfig}\n exportparts=\"sd_dropdown: ned__dropdown, sd_dropdown-button: ned__dropdown-button, sd_dropdown-content: ned__dropdown-content\"\n defaultSelectedOption={durationOptions.find(i => i.value === this.durationIncrement.toString())}\n withSearch={false}\n />\n )}\n </div>\n <div class={`nylas-event-duration__error-container ${this.error ? 'visible' : ''}`} part=\"ned__error-container\">\n <div class=\"nylas-event-duration__error\" part=\"ned__error\">\n {this.error}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"names":["i18next"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nylas-event-duration.entry.esm.js","sources":["src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.scss?tag=nylas-event-duration&encapsulation=shadow","src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n display: block;\n @include default-css-variables;\n}\n\n.nylas-event-duration {\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.required {\n color: var(--nylas-error, #cc4841);\n }\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n\n.nylas-event-duration__error-container {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition:\n max-height 0.3s ease,\n opacity 0.3s ease;\n\n &.visible {\n max-height: 20px;\n opacity: 1;\n }\n .nylas-event-duration__error {\n color: var(--nylas-error);\n font-family: var(--nylas-font-family);\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 18px */\n }\n}\n\n.nylas-event-duration__wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n input {\n padding: 12px 16px;\n border-width: 1;\n border-radius: 8px;\n border: 1px solid var(--nylas-base-200);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n width: 48px;\n }\n\n input-dropdown::part(id_dropdown-input) {\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 14px 16px;\n background-color: var(--nylas-base-0);\n color: var(--nylas-base-900);\n }\n\n input-dropdown::part(id_dropdown-content) {\n width: 100%;\n min-width: unset;\n height: 200px;\n }\n\n input-dropdown {\n width: 80px;\n\n &.error {\n &::part(id_dropdown-input) {\n border: 1px solid var(--nylas-error);\n }\n }\n }\n select-dropdown {\n width: 120px;\n @media #{$mobile} {\n width: 100%;\n }\n }\n\n select-dropdown::part(sd_dropdown-button) {\n border: 1px solid var(--nylas-base-200);\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, Listen, State, h, Element, Prop, Watch, Event, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\n\n/**\n * The `nylas-event-duration` component is a form input for the duration of an event.\n *\n * @part ned - The event duration container\n * @part ned__dropdown - The dropdown container for the duration increment\n * @part ned__dropdown-button - The dropdown button for the duration increment\n * @part ned__dropdown-content - The dropdown content for the duration increment\n * @part ned__input_dropdown - The input dropdown container for the duration minutes\n * @part ned__input_dropdown-input - The input for the duration minutes\n * @part ned__input_dropdown-content - The dropdown content for the input duration minutes\n */\n@Component({\n tag: 'nylas-event-duration',\n styleUrl: 'nylas-event-duration.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDuration {\n /**\n * The host element <nylas-event-duration>\n */\n @Element() host!: HTMLElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The name of the event duration. Default is 'duration'.\n */\n @Prop() name: string = 'duration';\n /**\n * @standalone\n * The event duration in minutes as set in the configuration.\n */\n @Prop() eventDurationMinutes?: number;\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The selected event duration state. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() duration: number = this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n /**\n * The duration in minutes. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() durationMinutes!: number;\n /**\n * The duration increment. This defaults to minute(s).\n */\n @State() durationIncrement!: number;\n /**\n * The error message for the duration.\n */\n @State() error: string = '';\n /**\n * The durationMinutesOptions for the dropdown.\n */\n @State() durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-event-duration', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newVal: Configuration) {\n const configDuration = newVal?.availability?.duration_minutes;\n if (configDuration) {\n this.duration = configDuration >= 60 ? configDuration / 60 : configDuration;\n this.durationMinutes = configDuration ? configDuration : 30;\n this.durationIncrement = configDuration >= 60 ? 60 : 1;\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n if (this.error) {\n this.validateDuration();\n }\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n /**\n * Event emitted when the event duration changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-duration', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-duration', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n this.applyThemeConfig(this.themeConfig);\n }\n\n componentDidLoad() {\n debug('nylas-event-duration', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n }\n this.duration = this.duration ? this.duration : this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n this.durationMinutes = this.durationMinutes ? this.durationMinutes : this.duration ? this.duration : 30;\n this.durationIncrement = this.durationIncrement ? this.durationIncrement : this.duration >= 60 ? 60 : 1;\n this.setDurationMintueOptions();\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n\n disconnectedCallback() {\n debug('nylas-event-duration', 'disconnectedCallback');\n }\n\n get isInternalsAvailable() {\n return typeof this.internals !== 'undefined' && typeof this.internals.setFormValue === 'function';\n }\n\n setDurationMintueOptions() {\n if (this.durationIncrement === 1) {\n this.durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n } else {\n this.durationMinutesOptions = Array.from({ length: 23 }, (_, i) => ({ value: (i + 1).toString(), label: (i + 1).toString() }));\n }\n return this.durationMinutesOptions;\n }\n\n validateDuration() {\n if (this.durationMinutes % 5 !== 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeMultipleOf5');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else if (this.durationMinutes <= 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeGreaterThan0');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else {\n this.error = '';\n this.isInternalsAvailable && this.internals.setValidity({});\n }\n return this.error;\n }\n\n @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-calendar-picker', 'nylasFormDropdownChangedHandler', event.detail);\n const { value } = event.detail;\n this.durationIncrement = parseInt(value.toString());\n if (this.durationIncrement === 1) {\n this.duration = 60;\n } else {\n this.duration = 1;\n }\n this.setDurationMintueOptions();\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @Listen('inputOptionChanged')\n inputOptionChangedHandler(event: CustomEvent<{ value: number; name: string }>) {\n debug('nylas-calendar-picker', 'inputOptionChangedHandler', event.detail);\n const { value } = event.detail;\n this.duration = parseFloat(value.toString());\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @RegisterComponent<NylasEventDuration, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-duration',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n const durationOptions = [\n { value: (1).toString(), label: i18next.t('timeDuration', { context: 'minute' }) },\n { value: (60).toString(), label: i18next.t('timeDuration', { context: 'hour' }) },\n ];\n\n return (\n <Host>\n <div class=\"nylas-event-duration\" part=\"ned\">\n <label htmlFor=\"duration\">\n {i18next.t('nylasEventDuration.headerTitle')}\n <span class=\"required\">*</span>\n </label>\n <div class=\"nylas-event-duration__wrapper\">\n <input-dropdown\n class={this.error ? 'error' : ''}\n name={'event-duration'}\n options={this.durationMinutesOptions}\n inputValue={this.duration.toString()}\n exportparts=\"id_dropdown: ned__input_dropdown, id_dropdown-input: ned__input_dropdown-input, id_dropdown-content: ned__input_dropdown-content\"\n defaultInputOption={this.durationMinutesOptions.find(i => i.value === this.duration.toString())}\n themeConfig={this.themeConfig}\n />\n {this.durationIncrement && (\n <select-dropdown\n name={'event-duration'}\n options={durationOptions}\n pluralizedLabel={\n this.duration > 1\n ? i18next.t(`time.${this.durationIncrement === 60 ? 'hours' : 'minutes'}`)\n : i18next.t(`time.${this.durationIncrement === 60 ? 'hour' : 'minute'}`)\n }\n themeConfig={this.themeConfig}\n exportparts=\"sd_dropdown: ned__dropdown, sd_dropdown-button: ned__dropdown-button, sd_dropdown-content: ned__dropdown-content\"\n defaultSelectedOption={durationOptions.find(i => i.value === this.durationIncrement.toString())}\n withSearch={false}\n />\n )}\n </div>\n <div class={`nylas-event-duration__error-container ${this.error ? 'visible' : ''}`} part=\"ned__error-container\">\n <div class=\"nylas-event-duration__error\" part=\"ned__error\">\n {this.error}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"names":["i18next"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e,a as n,h as a,d as t,e as r}from"./index-B-KMpdMZ.js";import{R as s}from"./register-component-BHk70oxk.js";import{b as o,i as l}from"./utils-Bj5Y75fX.js";const i=':host{display:block;--nylas-primary:#2563eb;--nylas-error:#cc4841;--nylas-error-50:#ffeae8;--nylas-error-100:#ffc5bf;--nylas-error-200:#fecaca;--nylas-error-pressed:#992222;--nylas-wraning:#f06c00;--nylas-success:#16a392;--nylas-info:#2b8fc2;--nylas-base-0:#ffffff;--nylas-base-25:#fcfcfd;--nylas-base-50:#f8f9fc;--nylas-base-100:#eaecf5;--nylas-base-200:#d5d9eb;--nylas-base-300:#b3b8d8;--nylas-base-400:#717bbc;--nylas-base-500:#4e5ba6;--nylas-base-600:#3e4784;--nylas-base-700:#263f72;--nylas-base-800:#293056;--nylas-base-900:#101323;--nylas-base-950:#0e101b;--nylas-color-blue-100:#e0e6f9;--nylas-border-radius:0.25rem;--nylas-border-radius-2x:0.5rem;--nylas-border-radius-3x:0.75rem;--nylas-font-family:"Inter", sans-serif;--nylas-color-black:#000000;--nylas-color-grey-900:#2c2c2c;--nylas-color-grey-800:#4b4b4b;--nylas-color-grey-700:#6e6e6e;--nylas-color-grey-600:#8e8e8e;--nylas-color-grey-500:#b3b3b3;--nylas-color-grey-400:#cacaca;--nylas-color-grey-300:#e1e1e1;--nylas-color-grey-200:#eaeaea;--nylas-color-grey-100:#f5f5f5;--nylas-color-grey-50:#fbfcfe;--nylas-color-white:#ffffff;--nylas-color-red-900:#992222;--nylas-color-red-700:#cc4841;--nylas-color-red-500:#ff786a;--nylas-color-red-300:#ffa79e;--nylas-color-red-100:#ffc5bf;--nylas-color-red-50:#ffeae8;--nylas-color-blue-900:#213571;--nylas-color-blue-700:#314fa9;--nylas-color-blue-500:#4169e1;--nylas-color-blue-300:#bdccf9;--nylas-color-blue-100:#e0e6f9;--nylas-color-blue-50:#f6f8fd;--nylas-color-yellow-900:#7c6506;--nylas-color-yellow-700:#c29f09;--nylas-color-yellow-500:#f7c90b;--nylas-color-yellow-300:#f9de70;--nylas-color-yellow-100:#fceba9;--nylas-color-yellow-50:#fdf4ce;--nylas-color-green-900:#0e6b60;--nylas-color-green-700:#16a392;--nylas-color-green-500:#17c3b2;--nylas-color-green-300:#74dbd1;--nylas-color-green-100:#a2e7e0;--nylas-color-green-50:#d1f3f0;--nylas-color-purple-900:#643554;--nylas-color-purple-700:#954f7d;--nylas-color-purple-500:#c769a7;--nylas-color-purple-300:#dda5ca;--nylas-color-purple-100:#e0bdd6;--nylas-color-purple-50:#e9dde5;--nylas-color-sky-900:#20698f;--nylas-color-sky-700:#2b8fc2;--nylas-color-sky-500:#6dceff;--nylas-color-sky-300:#8fdaff;--nylas-color-sky-100:#b8e7ff;--nylas-color-sky-50:#d9f2ff}.nylas-event-duration{display:flex;flex-direction:column;gap:4px}.nylas-event-duration label{display:flex;align-items:center;color:var(--nylas-base-800);font-size:16px;font-style:normal;font-weight:400;line-height:150%;}.nylas-event-duration label span.required{color:var(--nylas-error, #cc4841)}.nylas-event-duration label span.label-icon{margin-left:4px}.nylas-event-duration label span.label-icon tooltip-component{display:flex}.nylas-event-duration__error-container{max-height:0;opacity:0;overflow:hidden;transition:max-height 0.3s ease, opacity 0.3s ease}.nylas-event-duration__error-container.visible{max-height:20px;opacity:1}.nylas-event-duration__error-container .nylas-event-duration__error{color:var(--nylas-error);font-family:var(--nylas-font-family);font-size:12px;font-style:normal;font-weight:400;line-height:150%;}.nylas-event-duration__wrapper{display:flex;align-items:center;gap:0.5rem}.nylas-event-duration__wrapper input{padding:12px 16px;border-width:1;border-radius:8px;border:1px solid var(--nylas-base-200);font-family:var(--nylas-font-family);font-size:16px;line-height:24px;width:48px}.nylas-event-duration__wrapper input-dropdown::part(id_dropdown-input){border:1px solid var(--nylas-base-200);border-radius:var(--nylas-border-radius-2x);padding:14px 16px;background-color:var(--nylas-base-0);color:var(--nylas-base-900)}.nylas-event-duration__wrapper input-dropdown::part(id_dropdown-content){width:100%;min-width:unset;height:200px}.nylas-event-duration__wrapper input-dropdown{width:80px}.nylas-event-duration__wrapper input-dropdown.error::part(id_dropdown-input){border:1px solid var(--nylas-error)}.nylas-event-duration__wrapper select-dropdown{width:120px}@media screen and (max-width: 768px){.nylas-event-duration__wrapper select-dropdown{width:100%}}.nylas-event-duration__wrapper select-dropdown::part(sd_dropdown-button){border:1px solid var(--nylas-base-200)}';var d=undefined&&undefined.__decorate||function(e,n,a,t){var r=arguments.length,s=r<3?n:t===null?t=Object.getOwnPropertyDescriptor(n,a):t,o;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")s=Reflect.decorate(e,n,a,t);else for(var l=e.length-1;l>=0;l--)if(o=e[l])s=(r<3?o(s):r>3?o(n,a,s):o(n,a))||s;return r>3&&s&&Object.defineProperty(n,a,s),s};var c=undefined&&undefined.__metadata||function(e,n){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(e,n)};const f=class{constructor(a){e(this,a);this.valueChanged=n(this,"valueChanged",7);if(a.$hostElement$["s-ei"]){this.internals=a.$hostElement$["s-ei"]}else{this.internals=a.$hostElement$.attachInternals();a.$hostElement$["s-ei"]=this.internals}this.name="duration";this.duration=this.eventDurationMinutes?this.eventDurationMinutes>=60?this.eventDurationMinutes/60:this.eventDurationMinutes:30;this.error="";this.durationMinutesOptions=[{value:15..toString(),label:"15"},{value:30..toString(),label:"30"},{value:45..toString(),label:"45"},{value:60..toString(),label:"60"}]}elementNameChangedHandler(e){o("nylas-event-duration","elementNameChangedHandler",e);this.host.setAttribute("name",e)}selectedConfigurationChangedHandler(e){const n=e?.availability?.duration_minutes;if(n){this.duration=n>=60?n/60:n;this.durationMinutes=n?n:30;this.durationIncrement=n>=60?60:1;this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),"duration")}}selectedLanguageChangedHandler(e,n){if(e===n)return;l.changeLanguage(e);if(this.error){this.validateDuration()}}themeConfigChangedHandler(e,n){if(e===n)return;this.applyThemeConfig(e)}applyThemeConfig(e){if(e){for(const[n,a]of Object.entries(e)){this.host.style.setProperty(`${n}`,a)}}}connectedCallback(){o("nylas-event-duration","connectedCallback")}componentWillLoad(){o("nylas-event-duration","componentWillLoad");this.host.setAttribute("name",this.name)}componentDidLoad(){o("nylas-event-duration","componentDidLoad");if(this.selectedConfiguration){this.selectedConfigurationChangedHandler(this.selectedConfiguration)}this.duration=this.duration?this.duration:this.eventDurationMinutes?this.eventDurationMinutes>=60?this.eventDurationMinutes/60:this.eventDurationMinutes:30;this.durationMinutes=this.durationMinutes?this.durationMinutes:this.duration?this.duration:30;this.durationIncrement=this.durationIncrement?this.durationIncrement:this.duration>=60?60:1;this.setDurationMintueOptions();this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),"duration")}disconnectedCallback(){o("nylas-event-duration","disconnectedCallback")}get isInternalsAvailable(){return typeof this.internals!=="undefined"&&typeof this.internals.setFormValue==="function"}setDurationMintueOptions(){if(this.durationIncrement===1){this.durationMinutesOptions=[{value:15..toString(),label:"15"},{value:30..toString(),label:"30"},{value:45..toString(),label:"45"},{value:60..toString(),label:"60"}]}else{this.durationMinutesOptions=Array.from({length:23},((e,n)=>({value:(n+1).toString(),label:(n+1).toString()})))}return this.durationMinutesOptions}validateDuration(){if(this.durationMinutes%5!==0){this.error=l.t("nylasEventDuration.error.durationMustBeMultipleOf5");this.isInternalsAvailable&&this.internals.setValidity({customError:true},this.error)}else if(this.durationMinutes<=0){this.error=l.t("nylasEventDuration.error.durationMustBeGreaterThan0");this.isInternalsAvailable&&this.internals.setValidity({customError:true},this.error)}else{this.error="";this.isInternalsAvailable&&this.internals.setValidity({})}return this.error}nylasFormDropdownChangedHandler(e){o("nylas-calendar-picker","nylasFormDropdownChangedHandler",e.detail);const{value:n}=e.detail;this.durationIncrement=parseInt(n.toString());if(this.durationIncrement===1){this.duration=60}else{this.duration=1}this.setDurationMintueOptions();this.durationMinutes=this.duration*this.durationIncrement;if(this.validateDuration()!==""){return}this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),this.name);this.valueChanged.emit({value:this.durationMinutes.toString(),name:this.name})}inputOptionChangedHandler(e){o("nylas-calendar-picker","inputOptionChangedHandler",e.detail);const{value:n}=e.detail;this.duration=parseFloat(n.toString());this.durationMinutes=this.duration*this.durationIncrement;if(this.validateDuration()!==""){return}this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),this.name);this.valueChanged.emit({value:this.durationMinutes.toString(),name:this.name})}render(){const e=[{value:1..toString(),label:l.t("timeDuration",{context:"minute"})},{value:60..toString(),label:l.t("timeDuration",{context:"hour"})}];return a(t,{key:"90b15917ca78841413a7ae0c85ae018ace90db34"},a("div",{key:"9a2c83908d3538d1c7e0a3a45a8775da3effb301",class:"nylas-event-duration",part:"ned"},a("label",{key:"003663edd7a309d3e6162b97cad7dec5dafe0a4f",htmlFor:"duration"},l.t("nylasEventDuration.headerTitle"),a("span",{key:"6bb1301ff7f501e3383f1631661231726189210c",class:"required"},"*")),a("div",{key:"5307bf80c642f094766095f9d73cabcc2cf3adb0",class:"nylas-event-duration__wrapper"},a("input-dropdown",{key:"ff1e6f81666bb24c7ed26ca3d3e67f344dcdc36b",class:this.error?"error":"",name:"event-duration",options:this.durationMinutesOptions,inputValue:this.duration.toString(),exportparts:"id_dropdown: ned__input_dropdown, id_dropdown-input: ned__input_dropdown-input, id_dropdown-content: ned__input_dropdown-content",defaultInputOption:this.durationMinutesOptions.find((e=>e.value===this.duration.toString())),themeConfig:this.themeConfig}),this.durationIncrement&&a("select-dropdown",{key:"04c07189417320c7b8c6aed5fccafcfeb22f2bed",name:"event-duration",options:e,pluralizedLabel:this.duration>1?l.t(`time.${this.durationIncrement===60?"hours":"minutes"}`):l.t(`time.${this.durationIncrement===60?"hour":"minute"}`),themeConfig:this.themeConfig,exportparts:"sd_dropdown: ned__dropdown, sd_dropdown-button: ned__dropdown-button, sd_dropdown-content: ned__dropdown-content",defaultSelectedOption:e.find((e=>e.value===this.durationIncrement.toString())),withSearch:false})),a("div",{key:"d9d5772c0a88dfc9d7db002e664010e0d2c61f40",class:`nylas-event-duration__error-container ${this.error?"visible":""}`,part:"ned__error-container"},a("div",{key:"6ae136f5b5b421086c578c81499224b53b9ab851",class:"nylas-event-duration__error",part:"ned__error"},this.error))))}static get formAssociated(){return true}get host(){return r(this)}static get watchers(){return{name:["elementNameChangedHandler"],selectedConfiguration:["selectedConfigurationChangedHandler"],selectedLanguage:["selectedLanguageChangedHandler"],themeConfig:["themeConfigChangedHandler"]}}};d([s({name:"nylas-event-duration",stateToProps:new Map([["schedulerConfig.selectedConfiguration","selectedConfiguration"],["schedulerConfig.selectedLanguage","selectedLanguage"],["schedulerConfig.themeConfig","themeConfig"]]),eventToProps:{},fireRegisterEvent:true}),c("design:type",Function),c("design:paramtypes",[]),c("design:returntype",void 0)],f.prototype,"render",null);f.style=i;export{f as nylas_event_duration};
|
|
1
|
+
import{r as e,a as n,h as a,d as t,e as r}from"./index-Cbn5rIwb.js";import{R as s}from"./register-component-Blj8K64f.js";import{b as o,i as l}from"./utils-DhmCcrVs.js";const i=':host{display:block;--nylas-primary:#2563eb;--nylas-error:#cc4841;--nylas-error-50:#ffeae8;--nylas-error-100:#ffc5bf;--nylas-error-200:#fecaca;--nylas-error-pressed:#992222;--nylas-wraning:#f06c00;--nylas-success:#16a392;--nylas-info:#2b8fc2;--nylas-base-0:#ffffff;--nylas-base-25:#fcfcfd;--nylas-base-50:#f8f9fc;--nylas-base-100:#eaecf5;--nylas-base-200:#d5d9eb;--nylas-base-300:#b3b8d8;--nylas-base-400:#717bbc;--nylas-base-500:#4e5ba6;--nylas-base-600:#3e4784;--nylas-base-700:#263f72;--nylas-base-800:#293056;--nylas-base-900:#101323;--nylas-base-950:#0e101b;--nylas-color-blue-100:#e0e6f9;--nylas-border-radius:0.25rem;--nylas-border-radius-2x:0.5rem;--nylas-border-radius-3x:0.75rem;--nylas-font-family:"Inter", sans-serif;--nylas-color-black:#000000;--nylas-color-grey-900:#2c2c2c;--nylas-color-grey-800:#4b4b4b;--nylas-color-grey-700:#6e6e6e;--nylas-color-grey-600:#8e8e8e;--nylas-color-grey-500:#b3b3b3;--nylas-color-grey-400:#cacaca;--nylas-color-grey-300:#e1e1e1;--nylas-color-grey-200:#eaeaea;--nylas-color-grey-100:#f5f5f5;--nylas-color-grey-50:#fbfcfe;--nylas-color-white:#ffffff;--nylas-color-red-900:#992222;--nylas-color-red-700:#cc4841;--nylas-color-red-500:#ff786a;--nylas-color-red-300:#ffa79e;--nylas-color-red-100:#ffc5bf;--nylas-color-red-50:#ffeae8;--nylas-color-blue-900:#213571;--nylas-color-blue-700:#314fa9;--nylas-color-blue-500:#4169e1;--nylas-color-blue-300:#bdccf9;--nylas-color-blue-100:#e0e6f9;--nylas-color-blue-50:#f6f8fd;--nylas-color-yellow-900:#7c6506;--nylas-color-yellow-700:#c29f09;--nylas-color-yellow-500:#f7c90b;--nylas-color-yellow-300:#f9de70;--nylas-color-yellow-100:#fceba9;--nylas-color-yellow-50:#fdf4ce;--nylas-color-green-900:#0e6b60;--nylas-color-green-700:#16a392;--nylas-color-green-500:#17c3b2;--nylas-color-green-300:#74dbd1;--nylas-color-green-100:#a2e7e0;--nylas-color-green-50:#d1f3f0;--nylas-color-purple-900:#643554;--nylas-color-purple-700:#954f7d;--nylas-color-purple-500:#c769a7;--nylas-color-purple-300:#dda5ca;--nylas-color-purple-100:#e0bdd6;--nylas-color-purple-50:#e9dde5;--nylas-color-sky-900:#20698f;--nylas-color-sky-700:#2b8fc2;--nylas-color-sky-500:#6dceff;--nylas-color-sky-300:#8fdaff;--nylas-color-sky-100:#b8e7ff;--nylas-color-sky-50:#d9f2ff}.nylas-event-duration{display:flex;flex-direction:column;gap:4px}.nylas-event-duration label{display:flex;align-items:center;color:var(--nylas-base-800);font-size:16px;font-style:normal;font-weight:400;line-height:150%;}.nylas-event-duration label span.required{color:var(--nylas-error, #cc4841)}.nylas-event-duration label span.label-icon{margin-left:4px}.nylas-event-duration label span.label-icon tooltip-component{display:flex}.nylas-event-duration__error-container{max-height:0;opacity:0;overflow:hidden;transition:max-height 0.3s ease, opacity 0.3s ease}.nylas-event-duration__error-container.visible{max-height:20px;opacity:1}.nylas-event-duration__error-container .nylas-event-duration__error{color:var(--nylas-error);font-family:var(--nylas-font-family);font-size:12px;font-style:normal;font-weight:400;line-height:150%;}.nylas-event-duration__wrapper{display:flex;align-items:center;gap:0.5rem}.nylas-event-duration__wrapper input{padding:12px 16px;border-width:1;border-radius:8px;border:1px solid var(--nylas-base-200);font-family:var(--nylas-font-family);font-size:16px;line-height:24px;width:48px}.nylas-event-duration__wrapper input-dropdown::part(id_dropdown-input){border:1px solid var(--nylas-base-200);border-radius:var(--nylas-border-radius-2x);padding:14px 16px;background-color:var(--nylas-base-0);color:var(--nylas-base-900)}.nylas-event-duration__wrapper input-dropdown::part(id_dropdown-content){width:100%;min-width:unset;height:200px}.nylas-event-duration__wrapper input-dropdown{width:80px}.nylas-event-duration__wrapper input-dropdown.error::part(id_dropdown-input){border:1px solid var(--nylas-error)}.nylas-event-duration__wrapper select-dropdown{width:120px}@media screen and (max-width: 768px){.nylas-event-duration__wrapper select-dropdown{width:100%}}.nylas-event-duration__wrapper select-dropdown::part(sd_dropdown-button){border:1px solid var(--nylas-base-200)}';var d=undefined&&undefined.__decorate||function(e,n,a,t){var r=arguments.length,s=r<3?n:t===null?t=Object.getOwnPropertyDescriptor(n,a):t,o;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")s=Reflect.decorate(e,n,a,t);else for(var l=e.length-1;l>=0;l--)if(o=e[l])s=(r<3?o(s):r>3?o(n,a,s):o(n,a))||s;return r>3&&s&&Object.defineProperty(n,a,s),s};var c=undefined&&undefined.__metadata||function(e,n){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(e,n)};const f=class{constructor(a){e(this,a);this.valueChanged=n(this,"valueChanged",7);if(a.$hostElement$["s-ei"]){this.internals=a.$hostElement$["s-ei"]}else{this.internals=a.$hostElement$.attachInternals();a.$hostElement$["s-ei"]=this.internals}this.name="duration";this.duration=this.eventDurationMinutes?this.eventDurationMinutes>=60?this.eventDurationMinutes/60:this.eventDurationMinutes:30;this.error="";this.durationMinutesOptions=[{value:15..toString(),label:"15"},{value:30..toString(),label:"30"},{value:45..toString(),label:"45"},{value:60..toString(),label:"60"}]}elementNameChangedHandler(e){o("nylas-event-duration","elementNameChangedHandler",e);this.host.setAttribute("name",e)}selectedConfigurationChangedHandler(e){const n=e?.availability?.duration_minutes;if(n){this.duration=n>=60?n/60:n;this.durationMinutes=n?n:30;this.durationIncrement=n>=60?60:1;this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),"duration")}}selectedLanguageChangedHandler(e,n){if(e===n)return;l.changeLanguage(e);if(this.error){this.validateDuration()}}themeConfigChangedHandler(e,n){if(e===n)return;this.applyThemeConfig(e)}applyThemeConfig(e){if(e){for(const[n,a]of Object.entries(e)){this.host.style.setProperty(`${n}`,a)}}}connectedCallback(){o("nylas-event-duration","connectedCallback")}componentWillLoad(){o("nylas-event-duration","componentWillLoad");this.host.setAttribute("name",this.name);this.applyThemeConfig(this.themeConfig)}componentDidLoad(){o("nylas-event-duration","componentDidLoad");if(this.selectedConfiguration){this.selectedConfigurationChangedHandler(this.selectedConfiguration)}this.duration=this.duration?this.duration:this.eventDurationMinutes?this.eventDurationMinutes>=60?this.eventDurationMinutes/60:this.eventDurationMinutes:30;this.durationMinutes=this.durationMinutes?this.durationMinutes:this.duration?this.duration:30;this.durationIncrement=this.durationIncrement?this.durationIncrement:this.duration>=60?60:1;this.setDurationMintueOptions();this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),"duration")}disconnectedCallback(){o("nylas-event-duration","disconnectedCallback")}get isInternalsAvailable(){return typeof this.internals!=="undefined"&&typeof this.internals.setFormValue==="function"}setDurationMintueOptions(){if(this.durationIncrement===1){this.durationMinutesOptions=[{value:15..toString(),label:"15"},{value:30..toString(),label:"30"},{value:45..toString(),label:"45"},{value:60..toString(),label:"60"}]}else{this.durationMinutesOptions=Array.from({length:23},((e,n)=>({value:(n+1).toString(),label:(n+1).toString()})))}return this.durationMinutesOptions}validateDuration(){if(this.durationMinutes%5!==0){this.error=l.t("nylasEventDuration.error.durationMustBeMultipleOf5");this.isInternalsAvailable&&this.internals.setValidity({customError:true},this.error)}else if(this.durationMinutes<=0){this.error=l.t("nylasEventDuration.error.durationMustBeGreaterThan0");this.isInternalsAvailable&&this.internals.setValidity({customError:true},this.error)}else{this.error="";this.isInternalsAvailable&&this.internals.setValidity({})}return this.error}nylasFormDropdownChangedHandler(e){o("nylas-calendar-picker","nylasFormDropdownChangedHandler",e.detail);const{value:n}=e.detail;this.durationIncrement=parseInt(n.toString());if(this.durationIncrement===1){this.duration=60}else{this.duration=1}this.setDurationMintueOptions();this.durationMinutes=this.duration*this.durationIncrement;if(this.validateDuration()!==""){return}this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),this.name);this.valueChanged.emit({value:this.durationMinutes.toString(),name:this.name})}inputOptionChangedHandler(e){o("nylas-calendar-picker","inputOptionChangedHandler",e.detail);const{value:n}=e.detail;this.duration=parseFloat(n.toString());this.durationMinutes=this.duration*this.durationIncrement;if(this.validateDuration()!==""){return}this.isInternalsAvailable&&this.internals.setFormValue(this.durationMinutes.toString(),this.name);this.valueChanged.emit({value:this.durationMinutes.toString(),name:this.name})}render(){const e=[{value:1..toString(),label:l.t("timeDuration",{context:"minute"})},{value:60..toString(),label:l.t("timeDuration",{context:"hour"})}];return a(t,{key:"3d0a347d63bed84ee9983c9604587632bb874f33"},a("div",{key:"be97caf16fa1413decc89c807ff669c70665d704",class:"nylas-event-duration",part:"ned"},a("label",{key:"a24181787e2b7c1838f9f7ae4cbabb9c03e435fc",htmlFor:"duration"},l.t("nylasEventDuration.headerTitle"),a("span",{key:"d00788b2c32663939d5808a908b31d1c2e4bd009",class:"required"},"*")),a("div",{key:"3f739822d0f0053ab5e66bd7ef87e954f03204c7",class:"nylas-event-duration__wrapper"},a("input-dropdown",{key:"885e3ae224eaf2d4f393fb32b66c86f851af4168",class:this.error?"error":"",name:"event-duration",options:this.durationMinutesOptions,inputValue:this.duration.toString(),exportparts:"id_dropdown: ned__input_dropdown, id_dropdown-input: ned__input_dropdown-input, id_dropdown-content: ned__input_dropdown-content",defaultInputOption:this.durationMinutesOptions.find((e=>e.value===this.duration.toString())),themeConfig:this.themeConfig}),this.durationIncrement&&a("select-dropdown",{key:"96b4abac5326dee9a19e4eacf8219cd177ff28ca",name:"event-duration",options:e,pluralizedLabel:this.duration>1?l.t(`time.${this.durationIncrement===60?"hours":"minutes"}`):l.t(`time.${this.durationIncrement===60?"hour":"minute"}`),themeConfig:this.themeConfig,exportparts:"sd_dropdown: ned__dropdown, sd_dropdown-button: ned__dropdown-button, sd_dropdown-content: ned__dropdown-content",defaultSelectedOption:e.find((e=>e.value===this.durationIncrement.toString())),withSearch:false})),a("div",{key:"6996190174840b184164be3814b652a80b1b5804",class:`nylas-event-duration__error-container ${this.error?"visible":""}`,part:"ned__error-container"},a("div",{key:"c1c3d47e1e732938cc72f75c7b8f9bcf8d649b13",class:"nylas-event-duration__error",part:"ned__error"},this.error))))}static get formAssociated(){return true}get host(){return r(this)}static get watchers(){return{name:["elementNameChangedHandler"],selectedConfiguration:["selectedConfigurationChangedHandler"],selectedLanguage:["selectedLanguageChangedHandler"],themeConfig:["themeConfigChangedHandler"]}}};d([s({name:"nylas-event-duration",stateToProps:new Map([["schedulerConfig.selectedConfiguration","selectedConfiguration"],["schedulerConfig.selectedLanguage","selectedLanguage"],["schedulerConfig.themeConfig","themeConfig"]]),eventToProps:{},fireRegisterEvent:true}),c("design:type",Function),c("design:paramtypes",[]),c("design:returntype",void 0)],f.prototype,"render",null);f.style=i;export{f as nylas_event_duration};
|
|
2
2
|
//# sourceMappingURL=nylas-event-duration.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["nylasEventDurationCss","NylasEventDuration","constructor","hostRef","this","name","duration","eventDurationMinutes","error","durationMinutesOptions","value","toString","label","elementNameChangedHandler","newValue","debug","host","setAttribute","selectedConfigurationChangedHandler","newVal","configDuration","availability","duration_minutes","durationMinutes","durationIncrement","isInternalsAvailable","internals","setFormValue","selectedLanguageChangedHandler","oldVal","i18next","changeLanguage","validateDuration","themeConfigChangedHandler","applyThemeConfig","themeConfig","key","Object","entries","style","setProperty","connectedCallback","componentWillLoad","componentDidLoad","selectedConfiguration","setDurationMintueOptions","disconnectedCallback","Array","from","length","_","i","t","setValidity","customError","nylasFormDropdownChangedHandler","event","detail","parseInt","valueChanged","emit","inputOptionChangedHandler","parseFloat","render","durationOptions","context","h","Host","class","part","htmlFor","options","inputValue","exportparts","defaultInputOption","find","pluralizedLabel","defaultSelectedOption","withSearch","__decorate","RegisterComponent","stateToProps","Map","eventToProps","fireRegisterEvent","prototype"],"sources":["src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.scss?tag=nylas-event-duration&encapsulation=shadow","src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n display: block;\n @include default-css-variables;\n}\n\n.nylas-event-duration {\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.required {\n color: var(--nylas-error, #cc4841);\n }\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n\n.nylas-event-duration__error-container {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition:\n max-height 0.3s ease,\n opacity 0.3s ease;\n\n &.visible {\n max-height: 20px;\n opacity: 1;\n }\n .nylas-event-duration__error {\n color: var(--nylas-error);\n font-family: var(--nylas-font-family);\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 18px */\n }\n}\n\n.nylas-event-duration__wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n input {\n padding: 12px 16px;\n border-width: 1;\n border-radius: 8px;\n border: 1px solid var(--nylas-base-200);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n width: 48px;\n }\n\n input-dropdown::part(id_dropdown-input) {\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 14px 16px;\n background-color: var(--nylas-base-0);\n color: var(--nylas-base-900);\n }\n\n input-dropdown::part(id_dropdown-content) {\n width: 100%;\n min-width: unset;\n height: 200px;\n }\n\n input-dropdown {\n width: 80px;\n\n &.error {\n &::part(id_dropdown-input) {\n border: 1px solid var(--nylas-error);\n }\n }\n }\n select-dropdown {\n width: 120px;\n @media #{$mobile} {\n width: 100%;\n }\n }\n\n select-dropdown::part(sd_dropdown-button) {\n border: 1px solid var(--nylas-base-200);\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, Listen, State, h, Element, Prop, Watch, Event, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\n\n/**\n * The `nylas-event-duration` component is a form input for the duration of an event.\n *\n * @part ned - The event duration container\n * @part ned__dropdown - The dropdown container for the duration increment\n * @part ned__dropdown-button - The dropdown button for the duration increment\n * @part ned__dropdown-content - The dropdown content for the duration increment\n * @part ned__input_dropdown - The input dropdown container for the duration minutes\n * @part ned__input_dropdown-input - The input for the duration minutes\n * @part ned__input_dropdown-content - The dropdown content for the input duration minutes\n */\n@Component({\n tag: 'nylas-event-duration',\n styleUrl: 'nylas-event-duration.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDuration {\n /**\n * The host element <nylas-event-duration>\n */\n @Element() host!: HTMLElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The name of the event duration. Default is 'duration'.\n */\n @Prop() name: string = 'duration';\n /**\n * @standalone\n * The event duration in minutes as set in the configuration.\n */\n @Prop() eventDurationMinutes?: number;\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The selected event duration state. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() duration: number = this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n /**\n * The duration in minutes. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() durationMinutes!: number;\n /**\n * The duration increment. This defaults to minute(s).\n */\n @State() durationIncrement!: number;\n /**\n * The error message for the duration.\n */\n @State() error: string = '';\n /**\n * The durationMinutesOptions for the dropdown.\n */\n @State() durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-event-duration', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newVal: Configuration) {\n const configDuration = newVal?.availability?.duration_minutes;\n if (configDuration) {\n this.duration = configDuration >= 60 ? configDuration / 60 : configDuration;\n this.durationMinutes = configDuration ? configDuration : 30;\n this.durationIncrement = configDuration >= 60 ? 60 : 1;\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n if (this.error) {\n this.validateDuration();\n }\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n /**\n * Event emitted when the event duration changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-duration', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-duration', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n }\n\n componentDidLoad() {\n debug('nylas-event-duration', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n }\n this.duration = this.duration ? this.duration : this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n this.durationMinutes = this.durationMinutes ? this.durationMinutes : this.duration ? this.duration : 30;\n this.durationIncrement = this.durationIncrement ? this.durationIncrement : this.duration >= 60 ? 60 : 1;\n this.setDurationMintueOptions();\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n\n disconnectedCallback() {\n debug('nylas-event-duration', 'disconnectedCallback');\n }\n\n get isInternalsAvailable() {\n return typeof this.internals !== 'undefined' && typeof this.internals.setFormValue === 'function';\n }\n\n setDurationMintueOptions() {\n if (this.durationIncrement === 1) {\n this.durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n } else {\n this.durationMinutesOptions = Array.from({ length: 23 }, (_, i) => ({ value: (i + 1).toString(), label: (i + 1).toString() }));\n }\n return this.durationMinutesOptions;\n }\n\n validateDuration() {\n if (this.durationMinutes % 5 !== 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeMultipleOf5');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else if (this.durationMinutes <= 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeGreaterThan0');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else {\n this.error = '';\n this.isInternalsAvailable && this.internals.setValidity({});\n }\n return this.error;\n }\n\n @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-calendar-picker', 'nylasFormDropdownChangedHandler', event.detail);\n const { value } = event.detail;\n this.durationIncrement = parseInt(value.toString());\n if (this.durationIncrement === 1) {\n this.duration = 60;\n } else {\n this.duration = 1;\n }\n this.setDurationMintueOptions();\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @Listen('inputOptionChanged')\n inputOptionChangedHandler(event: CustomEvent<{ value: number; name: string }>) {\n debug('nylas-calendar-picker', 'inputOptionChangedHandler', event.detail);\n const { value } = event.detail;\n this.duration = parseFloat(value.toString());\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @RegisterComponent<NylasEventDuration, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-duration',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n const durationOptions = [\n { value: (1).toString(), label: i18next.t('timeDuration', { context: 'minute' }) },\n { value: (60).toString(), label: i18next.t('timeDuration', { context: 'hour' }) },\n ];\n\n return (\n <Host>\n <div class=\"nylas-event-duration\" part=\"ned\">\n <label htmlFor=\"duration\">\n {i18next.t('nylasEventDuration.headerTitle')}\n <span class=\"required\">*</span>\n </label>\n <div class=\"nylas-event-duration__wrapper\">\n <input-dropdown\n class={this.error ? 'error' : ''}\n name={'event-duration'}\n options={this.durationMinutesOptions}\n inputValue={this.duration.toString()}\n exportparts=\"id_dropdown: ned__input_dropdown, id_dropdown-input: ned__input_dropdown-input, id_dropdown-content: ned__input_dropdown-content\"\n defaultInputOption={this.durationMinutesOptions.find(i => i.value === this.duration.toString())}\n themeConfig={this.themeConfig}\n />\n {this.durationIncrement && (\n <select-dropdown\n name={'event-duration'}\n options={durationOptions}\n pluralizedLabel={\n this.duration > 1\n ? i18next.t(`time.${this.durationIncrement === 60 ? 'hours' : 'minutes'}`)\n : i18next.t(`time.${this.durationIncrement === 60 ? 'hour' : 'minute'}`)\n }\n themeConfig={this.themeConfig}\n exportparts=\"sd_dropdown: ned__dropdown, sd_dropdown-button: ned__dropdown-button, sd_dropdown-content: ned__dropdown-content\"\n defaultSelectedOption={durationOptions.find(i => i.value === this.durationIncrement.toString())}\n withSearch={false}\n />\n )}\n </div>\n <div class={`nylas-event-duration__error-container ${this.error ? 'visible' : ''}`} part=\"ned__error-container\">\n <div class=\"nylas-event-duration__error\" part=\"ned__error\">\n {this.error}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["nylasEventDurationCss","NylasEventDuration","constructor","hostRef","this","name","duration","eventDurationMinutes","error","durationMinutesOptions","value","toString","label","elementNameChangedHandler","newValue","debug","host","setAttribute","selectedConfigurationChangedHandler","newVal","configDuration","availability","duration_minutes","durationMinutes","durationIncrement","isInternalsAvailable","internals","setFormValue","selectedLanguageChangedHandler","oldVal","i18next","changeLanguage","validateDuration","themeConfigChangedHandler","applyThemeConfig","themeConfig","key","Object","entries","style","setProperty","connectedCallback","componentWillLoad","componentDidLoad","selectedConfiguration","setDurationMintueOptions","disconnectedCallback","Array","from","length","_","i","t","setValidity","customError","nylasFormDropdownChangedHandler","event","detail","parseInt","valueChanged","emit","inputOptionChangedHandler","parseFloat","render","durationOptions","context","h","Host","class","part","htmlFor","options","inputValue","exportparts","defaultInputOption","find","pluralizedLabel","defaultSelectedOption","withSearch","__decorate","RegisterComponent","stateToProps","Map","eventToProps","fireRegisterEvent","prototype"],"sources":["src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.scss?tag=nylas-event-duration&encapsulation=shadow","src/components/scheduler-editor/nylas-event-duration/nylas-event-duration.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n display: block;\n @include default-css-variables;\n}\n\n.nylas-event-duration {\n display: flex;\n flex-direction: column;\n gap: 4px;\n\n label {\n display: flex;\n align-items: center;\n color: var(--nylas-base-800);\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 21px */\n span.required {\n color: var(--nylas-error, #cc4841);\n }\n span.label-icon {\n margin-left: 4px;\n tooltip-component {\n display: flex;\n }\n }\n }\n}\n\n.nylas-event-duration__error-container {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n transition:\n max-height 0.3s ease,\n opacity 0.3s ease;\n\n &.visible {\n max-height: 20px;\n opacity: 1;\n }\n .nylas-event-duration__error {\n color: var(--nylas-error);\n font-family: var(--nylas-font-family);\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 150%; /* 18px */\n }\n}\n\n.nylas-event-duration__wrapper {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n input {\n padding: 12px 16px;\n border-width: 1;\n border-radius: 8px;\n border: 1px solid var(--nylas-base-200);\n font-family: var(--nylas-font-family);\n font-size: 16px;\n line-height: 24px;\n width: 48px;\n }\n\n input-dropdown::part(id_dropdown-input) {\n border: 1px solid var(--nylas-base-200);\n border-radius: var(--nylas-border-radius-2x);\n padding: 14px 16px;\n background-color: var(--nylas-base-0);\n color: var(--nylas-base-900);\n }\n\n input-dropdown::part(id_dropdown-content) {\n width: 100%;\n min-width: unset;\n height: 200px;\n }\n\n input-dropdown {\n width: 80px;\n\n &.error {\n &::part(id_dropdown-input) {\n border: 1px solid var(--nylas-error);\n }\n }\n }\n select-dropdown {\n width: 120px;\n @media #{$mobile} {\n width: 100%;\n }\n }\n\n select-dropdown::part(sd_dropdown-button) {\n border: 1px solid var(--nylas-base-200);\n }\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { debug } from '@/utils/utils';\nimport { AttachInternals, Component, Host, Listen, State, h, Element, Prop, Watch, Event, EventEmitter } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport { Configuration } from '@nylas/core';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\n\n/**\n * The `nylas-event-duration` component is a form input for the duration of an event.\n *\n * @part ned - The event duration container\n * @part ned__dropdown - The dropdown container for the duration increment\n * @part ned__dropdown-button - The dropdown button for the duration increment\n * @part ned__dropdown-content - The dropdown content for the duration increment\n * @part ned__input_dropdown - The input dropdown container for the duration minutes\n * @part ned__input_dropdown-input - The input for the duration minutes\n * @part ned__input_dropdown-content - The dropdown content for the input duration minutes\n */\n@Component({\n tag: 'nylas-event-duration',\n styleUrl: 'nylas-event-duration.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventDuration {\n /**\n * The host element <nylas-event-duration>\n */\n @Element() host!: HTMLElement;\n /**\n * @standalone\n * The selected config\n */\n @Prop() selectedConfiguration?: Configuration;\n\n /**\n * @standalone\n * The name of the event duration. Default is 'duration'.\n */\n @Prop() name: string = 'duration';\n /**\n * @standalone\n * The event duration in minutes as set in the configuration.\n */\n @Prop() eventDurationMinutes?: number;\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * @standalone\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The selected event duration state. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() duration: number = this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n /**\n * The duration in minutes. This defaults to the event duration from the configuration or 30 minutes.\n */\n @State() durationMinutes!: number;\n /**\n * The duration increment. This defaults to minute(s).\n */\n @State() durationIncrement!: number;\n /**\n * The error message for the duration.\n */\n @State() error: string = '';\n /**\n * The durationMinutesOptions for the dropdown.\n */\n @State() durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n /**\n * When a name prop is passed, stencil does not automatically set the name attribute on the host element.\n * Since this component is form-associated, the name attribute is required for form submission.\n * This is a workaround to ensure that the name attribute is set on the host element.\n */\n @Watch('name')\n elementNameChangedHandler(newValue: string) {\n debug('nylas-event-duration', 'elementNameChangedHandler', newValue);\n this.host.setAttribute('name', newValue);\n }\n\n @Watch('selectedConfiguration')\n selectedConfigurationChangedHandler(newVal: Configuration) {\n const configDuration = newVal?.availability?.duration_minutes;\n if (configDuration) {\n this.duration = configDuration >= 60 ? configDuration / 60 : configDuration;\n this.durationMinutes = configDuration ? configDuration : 30;\n this.durationIncrement = configDuration >= 60 ? 60 : 1;\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n }\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n if (this.error) {\n this.validateDuration();\n }\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.host.style.setProperty(`${key}`, value);\n }\n }\n }\n\n /**\n * Event emitted when the event duration changes.\n */\n @Event() valueChanged!: EventEmitter<{\n value: string;\n name: string;\n }>;\n\n connectedCallback() {\n debug('nylas-event-duration', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-duration', 'componentWillLoad');\n this.host.setAttribute('name', this.name);\n this.applyThemeConfig(this.themeConfig);\n }\n\n componentDidLoad() {\n debug('nylas-event-duration', 'componentDidLoad');\n if (this.selectedConfiguration) {\n this.selectedConfigurationChangedHandler(this.selectedConfiguration);\n }\n this.duration = this.duration ? this.duration : this.eventDurationMinutes ? (this.eventDurationMinutes >= 60 ? this.eventDurationMinutes / 60 : this.eventDurationMinutes) : 30;\n this.durationMinutes = this.durationMinutes ? this.durationMinutes : this.duration ? this.duration : 30;\n this.durationIncrement = this.durationIncrement ? this.durationIncrement : this.duration >= 60 ? 60 : 1;\n this.setDurationMintueOptions();\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), 'duration');\n }\n\n disconnectedCallback() {\n debug('nylas-event-duration', 'disconnectedCallback');\n }\n\n get isInternalsAvailable() {\n return typeof this.internals !== 'undefined' && typeof this.internals.setFormValue === 'function';\n }\n\n setDurationMintueOptions() {\n if (this.durationIncrement === 1) {\n this.durationMinutesOptions = [\n { value: (15).toString(), label: '15' },\n { value: (30).toString(), label: '30' },\n { value: (45).toString(), label: '45' },\n { value: (60).toString(), label: '60' },\n ];\n } else {\n this.durationMinutesOptions = Array.from({ length: 23 }, (_, i) => ({ value: (i + 1).toString(), label: (i + 1).toString() }));\n }\n return this.durationMinutesOptions;\n }\n\n validateDuration() {\n if (this.durationMinutes % 5 !== 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeMultipleOf5');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else if (this.durationMinutes <= 0) {\n this.error = i18next.t('nylasEventDuration.error.durationMustBeGreaterThan0');\n this.isInternalsAvailable && this.internals.setValidity({ customError: true }, this.error);\n } else {\n this.error = '';\n this.isInternalsAvailable && this.internals.setValidity({});\n }\n return this.error;\n }\n\n @Listen('nylasFormDropdownChanged')\n nylasFormDropdownChangedHandler(event: CustomEvent<{ value: string; name: string }>) {\n debug('nylas-calendar-picker', 'nylasFormDropdownChangedHandler', event.detail);\n const { value } = event.detail;\n this.durationIncrement = parseInt(value.toString());\n if (this.durationIncrement === 1) {\n this.duration = 60;\n } else {\n this.duration = 1;\n }\n this.setDurationMintueOptions();\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @Listen('inputOptionChanged')\n inputOptionChangedHandler(event: CustomEvent<{ value: number; name: string }>) {\n debug('nylas-calendar-picker', 'inputOptionChangedHandler', event.detail);\n const { value } = event.detail;\n this.duration = parseFloat(value.toString());\n this.durationMinutes = this.duration * this.durationIncrement;\n if (this.validateDuration() !== '') {\n return;\n }\n this.isInternalsAvailable && this.internals.setFormValue(this.durationMinutes.toString(), this.name);\n this.valueChanged.emit({ value: this.durationMinutes.toString(), name: this.name });\n }\n\n @RegisterComponent<NylasEventDuration, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-duration',\n stateToProps: new Map([\n ['schedulerConfig.selectedConfiguration', 'selectedConfiguration'],\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n const durationOptions = [\n { value: (1).toString(), label: i18next.t('timeDuration', { context: 'minute' }) },\n { value: (60).toString(), label: i18next.t('timeDuration', { context: 'hour' }) },\n ];\n\n return (\n <Host>\n <div class=\"nylas-event-duration\" part=\"ned\">\n <label htmlFor=\"duration\">\n {i18next.t('nylasEventDuration.headerTitle')}\n <span class=\"required\">*</span>\n </label>\n <div class=\"nylas-event-duration__wrapper\">\n <input-dropdown\n class={this.error ? 'error' : ''}\n name={'event-duration'}\n options={this.durationMinutesOptions}\n inputValue={this.duration.toString()}\n exportparts=\"id_dropdown: ned__input_dropdown, id_dropdown-input: ned__input_dropdown-input, id_dropdown-content: ned__input_dropdown-content\"\n defaultInputOption={this.durationMinutesOptions.find(i => i.value === this.duration.toString())}\n themeConfig={this.themeConfig}\n />\n {this.durationIncrement && (\n <select-dropdown\n name={'event-duration'}\n options={durationOptions}\n pluralizedLabel={\n this.duration > 1\n ? i18next.t(`time.${this.durationIncrement === 60 ? 'hours' : 'minutes'}`)\n : i18next.t(`time.${this.durationIncrement === 60 ? 'hour' : 'minute'}`)\n }\n themeConfig={this.themeConfig}\n exportparts=\"sd_dropdown: ned__dropdown, sd_dropdown-button: ned__dropdown-button, sd_dropdown-content: ned__dropdown-content\"\n defaultSelectedOption={durationOptions.find(i => i.value === this.durationIncrement.toString())}\n withSearch={false}\n />\n )}\n </div>\n <div class={`nylas-event-duration__error-container ${this.error ? 'visible' : ''}`} part=\"ned__error-container\">\n <div class=\"nylas-event-duration__error\" part=\"ned__error\">\n {this.error}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{r as e,h as n,d as l,e as a}from"./index-
|
|
1
|
+
import{r as e,h as n,d as l,e as a}from"./index-Cbn5rIwb.js";import{R as o}from"./register-component-Blj8K64f.js";import{i as s,b as r,I as c}from"./utils-DhmCcrVs.js";const f=':host{display:block;margin:1rem;--nylas-primary:#2563eb;--nylas-error:#cc4841;--nylas-error-50:#ffeae8;--nylas-error-100:#ffc5bf;--nylas-error-200:#fecaca;--nylas-error-pressed:#992222;--nylas-wraning:#f06c00;--nylas-success:#16a392;--nylas-info:#2b8fc2;--nylas-base-0:#ffffff;--nylas-base-25:#fcfcfd;--nylas-base-50:#f8f9fc;--nylas-base-100:#eaecf5;--nylas-base-200:#d5d9eb;--nylas-base-300:#b3b8d8;--nylas-base-400:#717bbc;--nylas-base-500:#4e5ba6;--nylas-base-600:#3e4784;--nylas-base-700:#263f72;--nylas-base-800:#293056;--nylas-base-900:#101323;--nylas-base-950:#0e101b;--nylas-color-blue-100:#e0e6f9;--nylas-border-radius:0.25rem;--nylas-border-radius-2x:0.5rem;--nylas-border-radius-3x:0.75rem;--nylas-font-family:"Inter", sans-serif;--nylas-color-black:#000000;--nylas-color-grey-900:#2c2c2c;--nylas-color-grey-800:#4b4b4b;--nylas-color-grey-700:#6e6e6e;--nylas-color-grey-600:#8e8e8e;--nylas-color-grey-500:#b3b3b3;--nylas-color-grey-400:#cacaca;--nylas-color-grey-300:#e1e1e1;--nylas-color-grey-200:#eaeaea;--nylas-color-grey-100:#f5f5f5;--nylas-color-grey-50:#fbfcfe;--nylas-color-white:#ffffff;--nylas-color-red-900:#992222;--nylas-color-red-700:#cc4841;--nylas-color-red-500:#ff786a;--nylas-color-red-300:#ffa79e;--nylas-color-red-100:#ffc5bf;--nylas-color-red-50:#ffeae8;--nylas-color-blue-900:#213571;--nylas-color-blue-700:#314fa9;--nylas-color-blue-500:#4169e1;--nylas-color-blue-300:#bdccf9;--nylas-color-blue-100:#e0e6f9;--nylas-color-blue-50:#f6f8fd;--nylas-color-yellow-900:#7c6506;--nylas-color-yellow-700:#c29f09;--nylas-color-yellow-500:#f7c90b;--nylas-color-yellow-300:#f9de70;--nylas-color-yellow-100:#fceba9;--nylas-color-yellow-50:#fdf4ce;--nylas-color-green-900:#0e6b60;--nylas-color-green-700:#16a392;--nylas-color-green-500:#17c3b2;--nylas-color-green-300:#74dbd1;--nylas-color-green-100:#a2e7e0;--nylas-color-green-50:#d1f3f0;--nylas-color-purple-900:#643554;--nylas-color-purple-700:#954f7d;--nylas-color-purple-500:#c769a7;--nylas-color-purple-300:#dda5ca;--nylas-color-purple-100:#e0bdd6;--nylas-color-purple-50:#e9dde5;--nylas-color-sky-900:#20698f;--nylas-color-sky-700:#2b8fc2;--nylas-color-sky-500:#6dceff;--nylas-color-sky-300:#8fdaff;--nylas-color-sky-100:#b8e7ff;--nylas-color-sky-50:#d9f2ff}.nylas-event-info__title{color:var(--nylas-base-900);font-size:16px;font-style:normal;font-weight:600;line-height:20px;margin:0;text-align:left}.nylas-event-info__subtitle{color:var(--nylas-base-600);font-size:14px;font-style:normal;font-weight:400;line-height:20px;margin:0.25rem 0px 0px;text-align:left}.nylas-event-info__content{padding:1rem;display:flex;flex-direction:column;gap:1rem;background-color:var(--nylas-base-25)}.nylas-event-info__block{display:flex;justify-content:space-between;gap:0.5rem}';var t=undefined&&undefined.__decorate||function(e,n,l,a){var o=arguments.length,s=o<3?n:a===null?a=Object.getOwnPropertyDescriptor(n,l):a,r;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")s=Reflect.decorate(e,n,l,a);else for(var c=e.length-1;c>=0;c--)if(r=e[c])s=(o<3?r(s):o>3?r(n,l,s):r(n,l))||s;return o>3&&s&&Object.defineProperty(n,l,s),s};var y=undefined&&undefined.__metadata||function(e,n){if(typeof Reflect==="object"&&typeof Reflect.metadata==="function")return Reflect.metadata(e,n)};const d=class{constructor(n){e(this,n);if(n.$hostElement$["s-ei"]){this.internals=n.$hostElement$["s-ei"]}else{this.internals=n.$hostElement$.attachInternals();n.$hostElement$["s-ei"]=this.internals}}selectedLanguageChangedHandler(e,n){if(e===n)return;s.changeLanguage(e)}themeConfigChangedHandler(e,n){if(e===n)return;this.applyThemeConfig(e)}applyThemeConfig(e){if(e){for(const[n,l]of Object.entries(e)){this.el.style.setProperty(`${n}`,l)}}}connectedCallback(){r("nylas-event-info","connectedCallback")}componentWillLoad(){r("nylas-event-info","componentWillLoad")}componentDidLoad(){r("nylas-event-info","componentDidLoad");c(["inputs"],this.el)}disconnectedCallback(){r("nylas-event-info","disconnectedCallback")}render(){return n(l,{key:"8c299d4e2a2f6ea9ed26be9321806973bebd7e91"},n("nylas-form-card",{key:"211ebad397d0203bdb694ed4473ad160cfab311a",exportparts:"nfc__header: nei__header"},n("h1",{key:"69948bc7ea04a7e24d3a0935dafd74f2766b174f",slot:"header-title",class:"nylas-event-info__title",part:"nei__title"},s.t("nylasEventInfo.headerTitle")),n("div",{key:"58cdf8674f497eafe5cffbcb992cad3feed098df",slot:"content",class:"nylas-event-info__content"},n("slot",{key:"731c628454407db8a3297bddbb68ced8d01085ce",name:"inputs"}))))}static get formAssociated(){return true}get el(){return a(this)}static get watchers(){return{selectedLanguage:["selectedLanguageChangedHandler"],themeConfig:["themeConfigChangedHandler"]}}};t([o({name:"nylas-event-info",stateToProps:new Map([["schedulerConfig.selectedLanguage","selectedLanguage"],["schedulerConfig.themeConfig","themeConfig"]]),eventToProps:{},fireRegisterEvent:true}),y("design:type",Function),y("design:paramtypes",[]),y("design:returntype",void 0)],d.prototype,"render",null);d.style=f;export{d as nylas_event_info};
|
|
2
2
|
//# sourceMappingURL=nylas-event-info.entry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nylas-event-limits.entry.esm.js","sources":["src/components/scheduler-editor/nylas-event-limits/nylas-event-limits.scss?tag=nylas-event-limits&encapsulation=shadow","src/components/scheduler-editor/nylas-event-limits/nylas-event-limits.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n display: block;\n margin: 1rem;\n @include default-css-variables;\n}\n\n.nylas-event-limits__title {\n color: var(--nylas-base-900);\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 20px; /* 125% */\n margin: 0;\n text-align: left;\n}\n.nylas-event-limits__subtitle {\n color: var(--nylas-base-600);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n margin: 0.25rem 0px 0px;\n text-align: left;\n}\n.nylas-event-limits__content {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n background-color: var(--nylas-base-25);\n}\n\n.nylas-event-limits__block {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { checkForMissingSlots, debug } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Host, Prop, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\n/**\n * The `nylas-event-limits` component is an input form for event limits, such as the number of available days in the future and\n * the minimum period of notice that a guest must provide to cancel a booking.\n * This component is a container for the `nylas-limit-future-bookings` and `nylas-min-cancellation-notice` components.\n *\n * ```html\n * <nylas-event-limits>\n * <div slot=\"inputs\">\n * <nylas-limit-future-bookings></nylas-limit-future-bookings>\n * <nylas-min-cancellation-notice></nylas-min-cancellation-notice>\n * </div>\n * </nylas-event-limits>\n * ```\n *\n * @slot inputs - The event information inputs. This includes the limit future bookings and minimum cancellation notice components.\n */\n@Component({\n tag: 'nylas-event-limits',\n styleUrl: 'nylas-event-limits.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventLimits {\n @Element() el!: HTMLElement;\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.el.style.setProperty(`${key}`, value);\n }\n }\n }\n\n connectedCallback() {\n debug('nylas-event-limits', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-limits', 'componentWillLoad');\n }\n\n componentDidLoad() {\n debug('nylas-event-limits', 'componentDidLoad');\n checkForMissingSlots(['inputs'], this.el);\n }\n\n disconnectedCallback() {\n debug('nylas-event-limits', 'disconnectedCallback');\n }\n\n @RegisterComponent<NylasEventLimits, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-limits',\n stateToProps: new Map([\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <nylas-form-card exportparts=\"nfc__header: nel__header\" themeConfig={this.themeConfig}>\n <h1 slot=\"header-title\" class=\"nylas-event-limits__title\">\n {i18next.t('nylasEventLimits.headerTitle')}\n </h1>\n <div slot=\"content\" class=\"nylas-event-limits__content\">\n <slot name=\"inputs\"></slot>\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n"],"names":["i18next"],"mappings":";;;;AAAA,MAAM,mBAAmB,GAAG,gsFAAgsF;;;;;;;;;;;;;;;;MC8B/sF,gBAAgB,GAAA,MAAA;;;;;;;;;;;IAmB3B,8BAA8B,CAAC,MAAqB,EAAE,MAAqB,EAAA;QACzE,IAAI,MAAM,KAAK,MAAM;YAAE;AACvB,QAAAA,QAAO,CAAC,cAAc,CAAC,MAAM,CAAC;;IAIhC,yBAAyB,CAAC,MAAmB,EAAE,MAAmB,EAAA;QAChE,IAAI,MAAM,KAAK,MAAM;YAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;;AAG/B,IAAA,gBAAgB,CAAC,WAAyB,EAAA;QACxC,IAAI,WAAW,EAAE;AACf,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACtD,gBAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,EAAG,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;;;;IAKhD,iBAAiB,GAAA;AACf,QAAA,KAAK,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;;IAGlD,iBAAiB,GAAA;AACf,QAAA,KAAK,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;;
|
|
1
|
+
{"version":3,"file":"nylas-event-limits.entry.esm.js","sources":["src/components/scheduler-editor/nylas-event-limits/nylas-event-limits.scss?tag=nylas-event-limits&encapsulation=shadow","src/components/scheduler-editor/nylas-event-limits/nylas-event-limits.tsx"],"sourcesContent":["@use '../../../common/styles/variables' as *;\n\n:host {\n display: block;\n margin: 1rem;\n @include default-css-variables;\n}\n\n.nylas-event-limits__title {\n color: var(--nylas-base-900);\n font-size: 16px;\n font-style: normal;\n font-weight: 600;\n line-height: 20px; /* 125% */\n margin: 0;\n text-align: left;\n}\n.nylas-event-limits__subtitle {\n color: var(--nylas-base-600);\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px; /* 142.857% */\n margin: 0.25rem 0px 0px;\n text-align: left;\n}\n.nylas-event-limits__content {\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 1rem;\n background-color: var(--nylas-base-25);\n}\n\n.nylas-event-limits__block {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n}\n","import { RegisterComponent } from '@/common/register-component';\nimport { NylasSchedulerConfigConnector } from '@/connector/nylas-scheduler-config-connector';\nimport { checkForMissingSlots, debug } from '@/utils/utils';\nimport { AttachInternals, Component, Element, Host, Prop, Watch, h } from '@stencil/core';\nimport { NylasSchedulerEditor } from '../nylas-scheduler-editor/nylas-scheduler-editor';\nimport i18next from '@/utils/i18n';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { ThemeConfig } from '@nylas/core';\n/**\n * The `nylas-event-limits` component is an input form for event limits, such as the number of available days in the future and\n * the minimum period of notice that a guest must provide to cancel a booking.\n * This component is a container for the `nylas-limit-future-bookings` and `nylas-min-cancellation-notice` components.\n *\n * ```html\n * <nylas-event-limits>\n * <div slot=\"inputs\">\n * <nylas-limit-future-bookings></nylas-limit-future-bookings>\n * <nylas-min-cancellation-notice></nylas-min-cancellation-notice>\n * </div>\n * </nylas-event-limits>\n * ```\n *\n * @slot inputs - The event information inputs. This includes the limit future bookings and minimum cancellation notice components.\n */\n@Component({\n tag: 'nylas-event-limits',\n styleUrl: 'nylas-event-limits.scss',\n shadow: true,\n formAssociated: true,\n})\nexport class NylasEventLimits {\n @Element() el!: HTMLElement;\n\n /**\n * The selected language.\n */\n @Prop() selectedLanguage?: LANGUAGE_CODE;\n\n /**\n * The theme configuration.\n */\n @Prop({ attribute: 'theme-config' }) readonly themeConfig?: ThemeConfig;\n\n /**\n * The element internals.\n */\n @AttachInternals() internals!: ElementInternals;\n\n @Watch('selectedLanguage')\n selectedLanguageChangedHandler(newVal: LANGUAGE_CODE, oldVal: LANGUAGE_CODE) {\n if (newVal === oldVal) return;\n i18next.changeLanguage(newVal);\n }\n\n @Watch('themeConfig')\n themeConfigChangedHandler(newVal: ThemeConfig, oldVal: ThemeConfig) {\n if (newVal === oldVal) return;\n this.applyThemeConfig(newVal);\n }\n\n applyThemeConfig(themeConfig?: ThemeConfig) {\n if (themeConfig) {\n for (const [key, value] of Object.entries(themeConfig)) {\n this.el.style.setProperty(`${key}`, value);\n }\n }\n }\n\n connectedCallback() {\n debug('nylas-event-limits', 'connectedCallback');\n }\n\n componentWillLoad() {\n debug('nylas-event-limits', 'componentWillLoad');\n this.applyThemeConfig(this.themeConfig);\n }\n\n componentDidLoad() {\n debug('nylas-event-limits', 'componentDidLoad');\n checkForMissingSlots(['inputs'], this.el);\n }\n\n disconnectedCallback() {\n debug('nylas-event-limits', 'disconnectedCallback');\n }\n\n @RegisterComponent<NylasEventLimits, NylasSchedulerConfigConnector, Exclude<NylasSchedulerEditor['stores'], undefined>>({\n name: 'nylas-event-limits',\n stateToProps: new Map([\n ['schedulerConfig.selectedLanguage', 'selectedLanguage'],\n ['schedulerConfig.themeConfig', 'themeConfig'],\n ]),\n eventToProps: {},\n fireRegisterEvent: true,\n })\n render() {\n return (\n <Host>\n <nylas-form-card exportparts=\"nfc__header: nel__header\" themeConfig={this.themeConfig}>\n <h1 slot=\"header-title\" class=\"nylas-event-limits__title\">\n {i18next.t('nylasEventLimits.headerTitle')}\n </h1>\n <div slot=\"content\" class=\"nylas-event-limits__content\">\n <slot name=\"inputs\"></slot>\n </div>\n </nylas-form-card>\n </Host>\n );\n }\n}\n"],"names":["i18next"],"mappings":";;;;AAAA,MAAM,mBAAmB,GAAG,gsFAAgsF;;;;;;;;;;;;;;;;MC8B/sF,gBAAgB,GAAA,MAAA;;;;;;;;;;;IAmB3B,8BAA8B,CAAC,MAAqB,EAAE,MAAqB,EAAA;QACzE,IAAI,MAAM,KAAK,MAAM;YAAE;AACvB,QAAAA,QAAO,CAAC,cAAc,CAAC,MAAM,CAAC;;IAIhC,yBAAyB,CAAC,MAAmB,EAAE,MAAmB,EAAA;QAChE,IAAI,MAAM,KAAK,MAAM;YAAE;AACvB,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;;AAG/B,IAAA,gBAAgB,CAAC,WAAyB,EAAA;QACxC,IAAI,WAAW,EAAE;AACf,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACtD,gBAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA,EAAG,GAAG,CAAA,CAAE,EAAE,KAAK,CAAC;;;;IAKhD,iBAAiB,GAAA;AACf,QAAA,KAAK,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;;IAGlD,iBAAiB,GAAA;AACf,QAAA,KAAK,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;AAChD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;;IAGzC,gBAAgB,GAAA;AACd,QAAA,KAAK,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;QAC/C,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;;IAG3C,oBAAoB,GAAA;AAClB,QAAA,KAAK,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;;IAYrD,MAAM,GAAA;QACJ,QACE,EAAC,IAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACH,CAAiB,CAAA,iBAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,WAAW,EAAC,0BAA0B,EAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAA,EACnF,CAAA,CAAA,IAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAI,IAAI,EAAC,cAAc,EAAC,KAAK,EAAC,2BAA2B,EACtD,EAAAA,QAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CACvC,EACL,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,IAAI,EAAC,SAAS,EAAC,KAAK,EAAC,6BAA6B,EAAA,EACrD,CAAM,CAAA,MAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,QAAQ,EAAA,CAAQ,CACvB,CACU,CACb;;;;;;;;;AAXX,UAAA,CAAA;AATC,IAAA,iBAAiB,CAAsG;AACtH,QAAA,IAAI,EAAE,oBAAoB;QAC1B,YAAY,EAAE,IAAI,GAAG,CAAC;YACpB,CAAC,kCAAkC,EAAE,kBAAkB,CAAC;YACxD,CAAC,6BAA6B,EAAE,aAAa,CAAC;SAC/C,CAAC;AACF,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,iBAAiB,EAAE,IAAI;KACxB,CAAC;;;;CAcD,EAAA,gBAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,CAAA;;;;;"}
|