@descope/web-components-ui 3.12.0 → 3.13.0
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/cjs/index.cjs.js +4121 -2426
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +3165 -1468
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/6618.js +591 -0
- package/dist/umd/{7387.js.LICENSE.txt → 6618.js.LICENSE.txt} +6 -0
- package/dist/umd/6618.js.map +1 -0
- package/dist/umd/8350.js +2 -0
- package/dist/umd/8350.js.map +1 -0
- package/dist/umd/9265.js +2 -0
- package/dist/umd/9265.js.map +1 -0
- package/dist/umd/DescopeDev.js +1 -1
- package/dist/umd/DescopeDev.js.map +1 -1
- package/dist/umd/descope-date-field-descope-calendar-index-js.js +449 -1
- package/dist/umd/descope-date-field-descope-calendar-index-js.js.map +1 -1
- package/dist/umd/descope-date-field-index-js.js +1 -1
- package/dist/umd/descope-date-field-index-js.js.map +1 -1
- package/dist/umd/descope-email-field-index-js.js +2 -2
- package/dist/umd/descope-email-field-index-js.js.map +1 -1
- package/dist/umd/descope-hybrid-field-index-js.js +1 -1
- package/dist/umd/descope-hybrid-field-index-js.js.map +1 -1
- package/dist/umd/descope-month-day-field-picker.js +114 -0
- package/dist/umd/descope-month-day-field-picker.js.LICENSE.txt +11 -0
- package/dist/umd/descope-month-day-field-picker.js.map +1 -0
- package/dist/umd/descope-month-day-field.js +2 -0
- package/dist/umd/descope-month-day-field.js.map +1 -0
- package/dist/umd/descope-new-password-index-js.js +1 -1
- package/dist/umd/descope-new-password-index-js.js.map +1 -1
- package/dist/umd/descope-number-field-index-js.js +1 -1
- package/dist/umd/descope-number-field-index-js.js.map +1 -1
- package/dist/umd/descope-passcode-index-js.js +1 -1
- package/dist/umd/descope-passcode-index-js.js.map +1 -1
- package/dist/umd/descope-radio-group-index-js.js +1 -1
- package/dist/umd/descope-radio-group-index-js.js.map +1 -1
- package/dist/umd/descope-security-questions-setup-index-js.js +1 -1
- package/dist/umd/descope-security-questions-setup-index-js.js.map +1 -1
- package/dist/umd/descope-security-questions-verify-index-js.js +1 -1
- package/dist/umd/descope-security-questions-verify-index-js.js.map +1 -1
- package/dist/umd/descope-text-field.js +38 -0
- package/dist/umd/descope-text-field.js.map +1 -0
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js.map +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js.map +1 -1
- package/package.json +39 -36
- package/src/components/descope-date-field/DateFieldClass.js +1 -1
- package/src/components/descope-date-field/index.js +1 -1
- package/src/components/descope-email-field/EmailFieldClass.js +1 -1
- package/src/components/descope-new-password/index.js +1 -1
- package/src/components/descope-number-field/NumberFieldClass.js +1 -1
- package/src/components/descope-passcode/PasscodeClass.js +1 -1
- package/src/components/descope-passcode/index.js +1 -1
- package/src/components/descope-radio-group/RadioGroupClass.js +1 -1
- package/src/components/descope-security-questions-setup/SecurityQuestionsSetupClass.js +1 -1
- package/src/components/descope-security-questions-setup/index.js +1 -1
- package/src/components/descope-security-questions-verify/SecurityQuestionsVerifyClass.js +1 -1
- package/src/components/descope-security-questions-verify/index.js +1 -1
- package/src/components/mapping-fields/descope-mappings-field/index.js +1 -1
- package/src/components/mapping-fields/descope-saml-group-mappings/index.js +1 -1
- package/src/components/phone-fields/descope-phone-field/PhoneFieldClass.js +1 -1
- package/src/components/phone-fields/descope-phone-field/descope-phone-field-internal/index.js +1 -1
- package/src/components/phone-fields/descope-phone-field/index.js +1 -1
- package/src/components/phone-fields/descope-phone-input-box-field/PhoneFieldInputBoxClass.js +1 -1
- package/src/components/phone-fields/descope-phone-input-box-field/descope-phone-input-box-internal/index.js +1 -1
- package/src/components/phone-fields/descope-phone-input-box-field/index.js +1 -1
- package/src/index.cjs.js +2 -2
- package/src/index.js +0 -1
- package/src/theme/components/index.js +5 -1
- package/stories/descope-text-field.stories.js +1 -1
- package/dist/umd/3685.js +0 -2
- package/dist/umd/3685.js.map +0 -1
- package/dist/umd/4518.js +0 -450
- package/dist/umd/4518.js.map +0 -1
- package/dist/umd/7387.js +0 -144
- package/dist/umd/7387.js.map +0 -1
- package/dist/umd/descope-text-field-index-js.js +0 -38
- package/dist/umd/descope-text-field-index-js.js.map +0 -1
- package/src/components/descope-text-field/TextFieldClass.js +0 -142
- package/src/components/descope-text-field/index.js +0 -9
- package/src/components/descope-text-field/textFieldMappings.js +0 -169
- package/src/theme/components/textField.js +0 -71
- /package/dist/umd/{4518.js.LICENSE.txt → descope-date-field-descope-calendar-index-js.js.LICENSE.txt} +0 -0
- /package/dist/umd/{descope-text-field-index-js.js.LICENSE.txt → descope-text-field.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descope-hybrid-field-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../../../node_modules/@vaadin/email-field/theme/lumo/vaadin-email-field-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/email-field/src/vaadin-email-field-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/email-field/src/vaadin-email-field.js","webpack://@descope/web-components-ui/./src/components/descope-email-field/EmailFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-email-field/index.js","webpack://@descope/web-components-ui/./src/components/descope-hybrid-field/helpers.js","webpack://@descope/web-components-ui/./src/components/descope-hybrid-field/HybridFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-hybrid-field/index.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/PhoneFieldInputBoxClass.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/descope-phone-input-box-internal/PhoneFieldInternalInputBox.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/descope-phone-input-box-internal/index.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/index.js","webpack://@descope/web-components-ui/./src/components/phone-fields/helpers.js"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { inputFieldShared } from '@vaadin/vaadin-lumo-styles/mixins/input-field-shared.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst emailField = css`\n :host([dir='rtl']) [part='input-field'] ::slotted(input) {\n --_lumo-text-field-overflow-mask-image: linear-gradient(to left, transparent, #000 1.25em);\n }\n\n :host([dir='rtl']) [part='input-field'] ::slotted(input:placeholder-shown) {\n --_lumo-text-field-overflow-mask-image: none;\n }\n`;\n\nregisterStyles('vaadin-email-field', [inputFieldShared, emailField], {\n moduleId: 'lumo-email-field',\n});\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { css } from 'lit';\n\n// See https://github.com/vaadin/vaadin-text-field/issues/466\nexport const emailFieldStyles = css`\n :host([dir='rtl']) [part='input-field'] {\n direction: ltr;\n }\n\n :host([dir='rtl']) [part='input-field'] ::slotted(input)::placeholder {\n direction: rtl;\n text-align: left;\n }\n`;\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { TextField } from '@vaadin/text-field/src/vaadin-text-field.js';\nimport { registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { emailFieldStyles } from './vaadin-email-field-styles.js';\n\nregisterStyles('vaadin-email-field', emailFieldStyles, { moduleId: 'vaadin-email-field-styles' });\n\n/**\n * `<vaadin-email-field>` is a Web Component for email field control in forms.\n *\n * ```html\n * <vaadin-email-field label=\"Email\"></vaadin-email-field>\n * ```\n *\n * ### Styling\n *\n * `<vaadin-email-field>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.\n * See [`<vaadin-text-field>`](#/elements/vaadin-text-field) for the styling documentation.\n *\n * See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.\n *\n * @fires {Event} input - Fired when the value is changed by the user: on every typing keystroke, and the value is cleared using the clear button.\n * @fires {Event} change - Fired when the user commits a value change.\n * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.\n * @fires {CustomEvent} value-changed - Fired when the `value` property changes.\n * @fires {CustomEvent} validated - Fired whenever the field is validated.\n *\n * @customElement\n * @extends TextField\n */\nexport class EmailField extends TextField {\n static get is() {\n return 'vaadin-email-field';\n }\n\n constructor() {\n super();\n this._setType('email');\n this.pattern = '^([a-zA-Z0-9_\\\\.\\\\-+])+@[a-zA-Z0-9\\\\-.]+\\\\.[a-zA-Z0-9\\\\-]{2,}$';\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n if (this.inputElement) {\n this.inputElement.autocapitalize = 'off';\n }\n }\n}\n\ndefineCustomElement(EmailField);\n","import {\n createStyleMixin,\n draggableMixin,\n createProxy,\n proxyInputMixin,\n componentNameValidationMixin,\n externalInputMixin,\n} from '../../mixins';\nimport textFieldMappings from '../descope-text-field/textFieldMappings';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\nimport {\n inputFloatingLabelStyle,\n resetInputLabelPosition,\n resetInputOverrides,\n useHostExternalPadding,\n} from '../../helpers/themeHelpers/resetHelpers';\n\nexport const componentName = getComponentName('email-field');\n\nconst defaultPattern = \"^[\\\\w\\\\.\\\\%\\\\+\\\\-']+@[\\\\w\\\\.\\\\-]+\\\\.[A-Za-z]{2,}$\";\nconst defaultAutocomplete = 'username';\n\nconst customMixin = (superclass) =>\n class EmailFieldMixinClass extends superclass {\n init() {\n super.init?.();\n\n // we need to set the pattern on the base element because vaadin-email-field is overriding it\n this.baseElement.setAttribute('pattern', defaultPattern);\n\n if (!this.getAttribute('autocomplete')) {\n this.setAttribute('autocomplete', defaultAutocomplete);\n }\n\n this.createExternalInput();\n }\n };\n\nexport const EmailFieldClass = compose(\n createStyleMixin({\n mappings: textFieldMappings,\n }),\n draggableMixin,\n externalInputMixin({\n inputType: 'email',\n inputName: 'email',\n autocompleteType: 'username',\n includeAttrs: ['disabled', 'readonly', 'pattern'],\n }),\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'], useProxyTargets: true }),\n componentNameValidationMixin,\n customMixin\n)(\n createProxy({\n slots: ['', 'suffix'],\n wrappedEleName: 'vaadin-email-field',\n style: () => `\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tpadding: calc(var(${EmailFieldClass.cssVarList.inputOutlineWidth}) + var(${\n EmailFieldClass.cssVarList.inputOutlineOffset\n }));\n box-sizing: border-box;\n\t\t\t}\n ${resetInputLabelPosition('vaadin-email-field')}\n\t\t\t${useHostExternalPadding(EmailFieldClass.cssVarList)}\n\t\t\t${resetInputOverrides('vaadin-email-field', EmailFieldClass.cssVarList)}\n ${inputFloatingLabelStyle()}\n\n vaadin-email-field[label-type=\"floating\"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-email-field[label-type=\"floating\"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n\n :host ::slotted(*) {\n -webkit-mask-image: none;\n }\n\n vaadin-email-field[external-input=\"true\"] > input:not(:placeholder-shown) {\n opacity: 0;\n }\n\t\t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n","import '@vaadin/email-field';\nimport { componentName, EmailFieldClass } from './EmailFieldClass';\n\ncustomElements.define(componentName, EmailFieldClass);\n\nexport { EmailFieldClass, componentName };\n","// Matches any character that is not a digit, whitespace, or phone formatting character (+, -, (, ))\nconst INVALID_PHONE_CHARS_RE = /[^\\d\\s+\\-()]/;\n\nexport const isNumericValue = (val) => !!val && !INVALID_PHONE_CHARS_RE.test(val);\n\nexport const sanitizeCountryCodePrefix = (val) => val.replace(/\\+\\d+-/, '');\n","import { injectStyle } from '@descope-ui/common/components-helpers';\nimport { createStyleMixin, draggableMixin, componentNameValidationMixin } from '../../mixins';\nimport { createBaseClass } from '../../baseClasses/createBaseClass';\nimport { compose } from '../../helpers';\nimport { forwardAttrs, getComponentName } from '../../helpers/componentHelpers';\nimport { isNumericValue, sanitizeCountryCodePrefix as sanitizeValue } from './helpers';\nimport { PhoneFieldClass } from '../phone-fields/descope-phone-field/PhoneFieldClass';\nimport { PhoneFieldInputBoxClass } from '../phone-fields/descope-phone-input-box-field/PhoneFieldInputBoxClass';\n\nexport const componentName = getComponentName('hybrid-field');\n\nconst attrs = {\n shared: [\n 'label',\n 'bordered',\n 'full-width',\n 'label-type',\n 'size',\n 'disabled',\n 'readonly',\n 'required',\n 'st-host-direction',\n 'st-error-message-icon',\n 'st-error-message-icon-size',\n 'st-error-message-icon-padding',\n ],\n email: [\n 'placeholder',\n 'data-errormessage-value-missing-email',\n 'data-errormessage-pattern-mismatch-email',\n 'external-input',\n ],\n phone: {\n countryCode: [\n 'phone-input-label',\n 'country-input-label',\n 'country-input-placeholder',\n 'restrict-countries',\n 'default-code',\n 'phone-minlength',\n 'phone-format-value',\n 'phone-strict-validation',\n 'phone-input-type',\n 'data-errormessage-value-missing-phone',\n ],\n inputBox: [\n 'restrict-countries',\n 'default-code',\n 'phone-minlength',\n 'phone-format-value',\n 'phone-strict-validation',\n 'phone-input-type',\n 'data-errormessage-value-missing-phone',\n ],\n },\n};\n\nconst attrMap = {\n email: {\n 'data-errormessage-value-missing-email': 'data-errormessage-value-missing',\n 'data-errormessage-pattern-mismatch-email': 'data-errormessage-pattern-mismatch',\n },\n phone: {\n 'phone-input-label': 'label',\n 'phone-minlength': 'minlength',\n 'phone-format-value': 'format-value',\n 'phone-strict-validation': 'strict-validation',\n 'data-errormessage-value-missing-phone': 'data-errormessage-value-missing',\n },\n};\n\nconst EMAIL_FIELD = 'descope-email-field';\nconst PHONE_FIELD = 'descope-phone-field';\nconst PHONE_INPUT_BOX_FIELD = 'descope-phone-input-box-field';\n\nconst BaseClass = createBaseClass({\n componentName,\n baseSelector: 'div',\n});\n\nclass RawHybridField extends BaseClass {\n #isReportedValidity = false;\n\n #selectionStart;\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"wrapper\">\n <descope-email-field external-input=\"${this.isExternalInput}\"></descope-email-field>\n <descope-phone-field allow-alphanumeric-input=\"true\" phone-input-type=\"text\"></descope-phone-field>\n <descope-phone-input-box-field allow-alphanumeric-input=\"true\" phone-input-type=\"text\"></descope-phone-input-box-field>\n </div>\n\t\t`;\n\n injectStyle(\n `\n :host {\n display: inline-flex;\n box-sizing: border-box;\n padding: 0;\n gap: 0;\n }\n .wrapper {\n display: grid;\n width: 100%;\n }\n descope-email-field,\n descope-phone-field,\n descope-phone-input-box-field {\n grid-area: 1/1;\n width: 100%;\n height: 100%;\n }\n .hidden {\n visibility: hidden;\n }\n `,\n this\n );\n }\n\n get isExternalInput() {\n return this.getAttribute('external-input') === 'true';\n }\n\n get emailInputEle() {\n return this.isExternalInput ? this.emailInput.externalInput : this.emailInput.inputElement;\n }\n\n get phoneVariant() {\n const isInputBox = this.getAttribute('phone-variant') === 'inputBox';\n return isInputBox ? this.phoneInputBoxInput : this.phoneCountryCodeInput;\n }\n\n get defaultCode() {\n const firstItem = this.phoneCountryCodeInput.countryCodes?.[0] || '';\n return this.getAttribute('default-code') || firstItem;\n }\n\n get activeInputEle() {\n if (this.activeInput === this.emailInput) {\n return this.emailInputEle;\n }\n return this.phoneVariant.phoneNumberInputEle;\n }\n\n get value() {\n return this.activeInput?.value || '';\n }\n\n set value(val) {\n this.handleActiveInput(val);\n setTimeout(() => {\n this.activeInput.value = val;\n });\n }\n\n async init() {\n super.init?.();\n\n this.initInputs();\n this.updateAttrs();\n this.toggleInputVisibility();\n\n await this.waitForInputs();\n\n this.initInputEles();\n this.overrideEmailInputType();\n this.overrideEmailSetAttribute();\n }\n\n waitForInputs() {\n return new Promise((resolve) => {\n const check = setInterval(() => {\n if (this.emailInputEle) {\n clearInterval(check);\n resolve();\n }\n });\n });\n }\n\n initInputs() {\n this.emailInput = this.shadowRoot.querySelector(EMAIL_FIELD);\n this.phoneCountryCodeInput = this.shadowRoot.querySelector(PHONE_FIELD);\n this.phoneInputBoxInput = this.shadowRoot.querySelector(PHONE_INPUT_BOX_FIELD);\n\n this.inputs = [this.emailInput, this.phoneCountryCodeInput, this.phoneInputBoxInput];\n\n this.activeInput = this.emailInput;\n }\n\n // we need to listen on the inner `input` element itself, otherwise we don't always get an `input` event\n initInputEles() {\n const inputEles = [\n this.emailInputEle,\n this.phoneCountryCodeInput.phoneNumberInputEle,\n this.phoneInputBoxInput.phoneNumberInputEle,\n ];\n\n inputEles.forEach((ele) => {\n ele.addEventListener('input', this.onValueChange.bind(this));\n });\n }\n\n overrideEmailInputType() {\n this.emailInputEle.addEventListener('focus', () => {\n this.emailInputEle.setAttribute('type', 'text');\n });\n this.emailInputEle.addEventListener('blur', () => {\n setTimeout(() => {\n this.emailInputEle.setAttribute('type', 'email');\n });\n });\n }\n\n // We want to prevent Vaadin from changing the input type to `email`\n // otherwise, we cannot get the selectionStart from the input.\n overrideEmailSetAttribute() {\n const origEmailSetAttr = this.emailInput.setAttribute.bind(this.emailInputEle);\n this.emailInputEle.setAttribute = (name, value) => {\n if (name !== 'type' || value !== 'email' || !this.emailInput.hasAttribute('focused')) {\n return origEmailSetAttr(name, value);\n }\n return false;\n };\n }\n\n updateAttrs() {\n forwardAttrs(this, this.emailInput, { includeAttrs: attrs.email, mapAttrs: attrMap.email });\n\n forwardAttrs(this, this.phoneCountryCodeInput, {\n includeAttrs: attrs.phone.countryCode,\n mapAttrs: attrMap.phone,\n });\n\n forwardAttrs(this, this.phoneInputBoxInput, {\n includeAttrs: attrs.phone.inputBox,\n mapAttrs: attrMap.phone,\n });\n\n this.inputs.forEach((input) => forwardAttrs(this, input, { includeAttrs: attrs.shared }));\n\n setTimeout(() => this.phoneCountryCodeInput.setAttribute('default-code', this.defaultCode));\n }\n\n onValueChange() {\n this.#selectionStart = this.activeInputEle.selectionStart;\n // phone components expose an API to their inputElement; in case of phone variants like\n // phone-input-box-field, we want to make sure that the value being passed\n // is raw value from input, and not the value with a dial-code prefix, or other decorations\n // applied behind the scenes by the phone components\n this.handleActiveInput(this.activeInputEle.value || this.activeInput.value);\n }\n\n handleActiveInput(val) {\n const expectedActiveInput = isNumericValue(val) ? this.phoneVariant : this.emailInput;\n\n if (this.activeInput !== expectedActiveInput) {\n this.setActiveInput(expectedActiveInput);\n }\n }\n\n setActiveInput(expectedActiveInput) {\n // phone components expose an API to their inputElement; in case of phone variants like\n // phone-input-box-field, we want to make sure that the value being passed\n // is raw value from input, and not the value with a dial-code prefix, or other decorations\n // applied behind the scenes by the phone components\n const val = this.activeInputEle.value || this.activeInput.value;\n\n this.activeInput = expectedActiveInput;\n this.setActiveInputValue(val);\n if (this.#isReportedValidity) this.activeInput.reportValidity();\n this.setActiveInputSelectionStart();\n this.toggleInputVisibility();\n }\n\n setActiveInputSelectionStart() {\n setTimeout(() => {\n this.activeInputEle.focus();\n this.activeInputEle.setSelectionRange?.(this.#selectionStart, this.#selectionStart);\n });\n }\n\n #getDefaultDialCode() {\n const code = this.getAttribute('default-code');\n const match = code && PhoneFieldClass.CountryCodes.find((c) => c.code === code);\n return match?.dialCode || PhoneFieldClass.CountryCodes[0]?.dialCode || '';\n }\n\n setActiveInputValue(val) {\n const sanitizedVal = sanitizeValue(val);\n const isPhoneField = this.activeInput.localName === PHONE_FIELD;\n if (isPhoneField) {\n const dialCode = this.phoneCountryCodeInput.countryCodeItems || this.#getDefaultDialCode();\n this.activeInput.value = `${dialCode}-${sanitizedVal}`;\n } else {\n this.activeInput.value = sanitizedVal;\n }\n }\n\n toggleInputVisibility() {\n this.inputs.forEach((input) => {\n input !== this.activeInput ? input.classList.add('hidden') : input.classList.remove('hidden');\n });\n }\n\n reportValidity() {\n this.#isReportedValidity = true;\n\n const ele = this.activeInputEle;\n\n // On reportValidity we want to set the caret at the end of the input value.\n // Since checkValidity triggers `focus` on the input, it sets the caret at the start of the input,\n // regardless the existing value.\n const origInputType = ele.type;\n ele.setAttribute('type', 'text');\n setTimeout(() => {\n ele.setSelectionRange?.(ele.value.length, ele.value.length);\n ele.setAttribute('type', origInputType);\n });\n\n return this.activeInput.reportValidity();\n }\n\n checkValidity() {\n return this.activeInput.checkValidity();\n }\n}\n\nexport const HybridFieldClass = compose(\n createStyleMixin({ componentNameOverride: getComponentName('input-wrapper') }),\n createStyleMixin({\n mappings: {\n hostWidth: { selector: () => ':host', property: 'width' },\n hostDirection: [\n { selector: () => 'descope-email-field', property: 'direction' },\n { selector: () => 'descope-phone-field', property: 'direction' },\n { selector: () => 'descope-phone-input-box-field', property: 'direction' },\n ],\n errorMessageIcon: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIcon,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIcon,\n },\n ],\n errorMessageIconSize: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconSize,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconSize,\n },\n ],\n errorMessageIconPadding: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconPadding,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconPadding,\n },\n ],\n errorMessageIconRepeat: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconRepeat,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconRepeat,\n },\n ],\n errorMessageIconPosition: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconPosition,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconPosition,\n },\n ],\n errorMessageFontSize: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageFontSize,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageFontSize,\n },\n ],\n labelFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.labelFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.labelFontWeight,\n },\n ],\n inputValueFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.inputValueFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.inputValueFontWeight,\n },\n ],\n inputPlaceholderFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.inputPlaceholderFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.inputPlaceholderFontWeight,\n },\n ],\n helperTextFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.helperTextFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.helperTextFontWeight,\n },\n ],\n errorMessageFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageFontWeight,\n },\n ],\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawHybridField);\n","import '../descope-email-field';\nimport '../phone-fields/descope-phone-field';\nimport '../phone-fields/descope-phone-input-box-field';\n\nimport { componentName, HybridFieldClass } from './HybridFieldClass';\n\ncustomElements.define(componentName, HybridFieldClass);\n\nexport { HybridFieldClass, componentName };\n","import { syncAttrs } from '@descope-ui/common/components-helpers';\nimport { componentName as descopeInternalComponentName } from './descope-phone-input-box-internal/PhoneFieldInternalInputBox';\nimport { forwardAttrs, getComponentName } from '../../../helpers/componentHelpers';\nimport { compose } from '../../../helpers';\nimport {\n createProxy,\n createStyleMixin,\n draggableMixin,\n inputOverrideValidConstraintsMixin,\n proxyInputMixin,\n} from '../../../mixins';\nimport { TextFieldClass } from '../../descope-text-field/TextFieldClass';\nimport CountryCodes from '../CountryCodes';\nimport {\n resetInputLabelPosition,\n resetInputCursor,\n resetInputFieldDefaultWidth,\n resetInputFieldInvalidBackgroundColor,\n useHostExternalPadding,\n inputFloatingLabelStyle,\n} from '../../../helpers/themeHelpers/resetHelpers';\n\nconst textVars = TextFieldClass.cssVarList;\n\nexport const componentName = getComponentName('phone-input-box-field');\n\nconst customMixin = (superclass) =>\n class PhoneFieldInputBoxMixinClass extends superclass {\n static get CountryCodes() {\n return CountryCodes;\n }\n\n init() {\n super.init?.();\n\n const template = document.createElement('template');\n\n template.innerHTML = `\n\t\t\t\t<${descopeInternalComponentName}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tslot=\"input\"\n\t\t\t\t></${descopeInternalComponentName}>\n `;\n\n this.baseElement.appendChild(template.content.cloneNode(true));\n\n this.inputElement = this.shadowRoot.querySelector(descopeInternalComponentName);\n\n syncAttrs(this, this.inputElement, { includeAttrs: ['has-value'] });\n\n forwardAttrs(this.shadowRoot.host, this.inputElement, {\n includeAttrs: [\n 'size',\n 'minlength',\n 'maxlength',\n 'default-code',\n 'disabled',\n 'phone-input-placeholder',\n 'label',\n 'label-type',\n 'allow-alphanumeric-input',\n 'restrict-countries',\n 'format-value',\n 'strict-validation',\n 'data-errormessage-type-mismatch',\n 'phone-input-type',\n ],\n });\n }\n\n get phoneNumberInputEle() {\n return this.inputElement?.phoneNumberInputEle;\n }\n };\n\nconst {\n host,\n label,\n inputElement,\n requiredIndicator,\n inputField,\n internalComponent,\n internalComponentAfter,\n phoneInput,\n errorMessage,\n helperText,\n} = {\n host: { selector: () => ':host' },\n label: { selector: '::part(label)' },\n placeholder: { selector: '> input:placeholder-shown' },\n inputElement: { selector: 'input' },\n requiredIndicator: { selector: '[required]::part(required-indicator)::after' },\n inputField: { selector: () => 'vaadin-text-field::part(input-field)' },\n internalComponent: {\n selector: 'descope-phone-field-internal-input-box',\n },\n internalComponentAfter: {\n selector: 'descope-phone-field-internal-input-box::after',\n },\n phoneInput: { selector: () => 'descope-text-field' },\n helperText: { selector: '::part(helper-text)' },\n errorMessage: { selector: '::part(error-message)' },\n};\n\nexport const PhoneFieldInputBoxClass = compose(\n createStyleMixin({\n mappings: {\n fontSize: [\n host,\n inputField,\n {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.fontSize,\n },\n ],\n fontFamily: [label, errorMessage, helperText],\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { ...host, property: 'min-width' },\n hostDirection: { ...host, property: 'direction' },\n\n inputHorizontalPadding: [\n { ...phoneInput, property: 'padding-left' },\n { ...phoneInput, property: 'padding-right' },\n ],\n\n labelFontSize: { ...label, property: 'font-size' },\n labelFontWeight: { ...label, property: 'font-weight' },\n inputValueFontWeight: { ...phoneInput, property: textVars.inputValueFontWeight },\n inputPlaceholderFontWeight: { ...phoneInput, property: textVars.inputPlaceholderFontWeight },\n helperTextFontWeight: { ...helperText, property: 'font-weight' },\n errorMessageFontWeight: { ...errorMessage, property: 'font-weight' },\n labelTextColor: [\n { ...label, property: 'color' },\n { ...label, property: '-webkit-text-fill-color' },\n { ...requiredIndicator, property: 'color' },\n ],\n labelRequiredIndicator: { ...requiredIndicator, property: 'content' },\n errorMessageTextColor: { ...errorMessage, property: 'color' },\n\n errorMessageIcon: { ...errorMessage, property: 'background-image' },\n errorMessageIconSize: { ...errorMessage, property: 'background-size' },\n errorMessageIconPadding: { ...errorMessage, property: 'padding-inline-start' },\n errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },\n errorMessageIconPosition: { ...errorMessage, property: 'background-position' },\n errorMessageFontSize: { ...errorMessage, property: 'font-size' },\n\n inputValueTextColor: { ...phoneInput, property: textVars.inputValueTextColor },\n\n inputPlaceholderTextColor: { ...phoneInput, property: textVars.inputPlaceholderColor },\n\n inputBorderStyle: { ...internalComponentAfter, property: 'border-style' },\n inputBorderWidth: { ...internalComponentAfter, property: 'border-width' },\n inputBorderColor: { ...internalComponentAfter, property: 'border-color' },\n inputBorderRadius: [\n { ...internalComponent, property: 'border-radius' },\n { ...internalComponentAfter, property: 'border-radius' },\n ],\n\n inputOutlineStyle: { ...internalComponent, property: 'outline-style' },\n inputOutlineColor: { ...internalComponent, property: 'outline-color' },\n inputOutlineWidth: { ...internalComponent, property: 'outline-width' },\n inputOutlineOffset: { ...internalComponent, property: 'outline-offset' },\n\n labelPosition: { ...label, property: 'position' },\n labelTopPosition: { ...label, property: 'top' },\n labelHorizontalPosition: [\n { ...label, property: 'left' },\n { ...label, property: 'right' },\n ],\n inputTransformY: { ...label, property: 'transform' },\n inputTransition: { ...label, property: 'transition' },\n marginInlineStart: { ...label, property: 'margin-inline-start' },\n valueInputHeight: { ...inputElement, property: 'height' },\n valueInputMarginBottom: {\n selector: TextFieldClass.componentName,\n property: textVars.valueInputMarginBottom,\n },\n },\n }),\n draggableMixin,\n inputOverrideValidConstraintsMixin,\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'] }),\n customMixin\n)(\n createProxy({\n slots: [],\n wrappedEleName: 'vaadin-text-field',\n style: () => `\n :host {\n display: inline-flex;\n max-width: 100%;\n box-sizing: border-box;\n }\n ${useHostExternalPadding(PhoneFieldInputBoxClass.cssVarList)}\n ${resetInputCursor('vaadin-text-field')}\n ${resetInputFieldInvalidBackgroundColor('vaadin-text-field')}\n ${resetInputFieldDefaultWidth()}\n\n vaadin-text-field {\n width: 100%;\n box-sizing: border-box;\n padding: 0;\n }\n vaadin-text-field[focus-ring]::part(input-field) {\n box-shadow: none;\n }\n vaadin-text-field::before {\n height: 0;\n }\n vaadin-text-field::part(input-field) {\n padding: 0;\n background: transparent;\n -webkit-mask-image: none;\n }\n descope-phone-field-internal-input-box {\n -webkit-mask-image: none;\n padding: 0;\n width: 100%;\n }\n descope-phone-field-internal-input-box > div {\n width: 100%;\n }\n descope-phone-field-internal-input-box descope-text-field {\n ${textVars.inputOutlineWidth}: 0;\n ${textVars.inputOutlineOffset}: 0;\n }\n descope-phone-field-internal-input-box::after {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n box-sizing: border-box;\n pointer-events: none;\n }\n descope-text-field {\n flex-grow: 1;\n width: 100%;\n direction: ltr;\n }\n vaadin-text-field[readonly] > input:placeholder-shown {\n opacity: 1;\n }\n vaadin-text-field::part(input-field)::after {\n border: none;\n }\n\n vaadin-text-field[label-type=\"floating\"]:not([focused])[readonly] input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type=\"floating\"]:not([focused])[disabled] input:placeholder-shown {\n opacity: 0;\n }\n\n ${resetInputLabelPosition('vaadin-text-field')}\n ${inputFloatingLabelStyle()}\n\t\t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n\nexport default PhoneFieldInputBoxClass;\n","import { forwardAttrs } from '@descope-ui/common/components-helpers';\nimport parsePhoneNumberFromString, { AsYouType } from 'libphonenumber-js/min';\nimport { createBaseInputClass } from '../../../../baseClasses/createBaseInputClass';\nimport { getComponentName } from '../../../../helpers/componentHelpers';\nimport { getCountryByCodeId, matchingParenthesis } from '../../helpers';\n\nexport const componentName = getComponentName('phone-field-internal-input-box');\n\nconst observedAttributes = [\n 'disabled',\n 'size',\n 'readonly',\n 'phone-input-placeholder',\n 'name',\n 'maxlength',\n 'autocomplete',\n 'label-type',\n 'phone-input-type',\n];\nconst mapAttrs = {\n 'phone-input-placeholder': 'placeholder',\n 'phone-input-type': 'type',\n};\n\nconst BaseInputClass = createBaseInputClass({ componentName, baseSelector: 'div' });\n\nclass PhoneFieldInternal extends BaseInputClass {\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttributes);\n }\n\n #ayt;\n\n constructor() {\n super();\n\n this.innerHTML = `\n <div>\n <descope-text-field tabindex=\"1\" type=\"tel\" bordered=\"false\"></descope-text-field>\n </div>\n `;\n\n this.textField = this.querySelector('descope-text-field');\n }\n\n // notice: this function is exposed in parent component\n get phoneNumberInputEle() {\n return this.textField.shadowRoot.querySelector('input');\n }\n\n get defaultDialCode() {\n return getCountryByCodeId(this.getAttribute('default-code'));\n }\n\n get defaultCode() {\n return this.getAttribute('default-code');\n }\n\n get allowAlphanumericInput() {\n return this.getAttribute('allow-alphanumeric-input') === 'true';\n }\n\n get minLength() {\n return parseInt(this.getAttribute('minlength'), 10) || 0;\n }\n\n get maxLength() {\n return parseInt(this.getAttribute('maxlength'), 10) || 50;\n }\n\n get restrictCountries() {\n return this.getAttribute('restrict-countries')?.split(',').filter(Boolean) || [];\n }\n\n get isFormatValue() {\n return this.getAttribute('format-value') === 'true';\n }\n\n get isStrictValidation() {\n return this.getAttribute('strict-validation') === 'true';\n }\n\n get value() {\n if (!this.textField.value) return '';\n\n if (!this.isStrictValidation) {\n return this.#nonParsedValue();\n }\n\n const parsedVal = this.#parseWithCountryCode();\n\n if (parsedVal?.country && parsedVal?.countryCallingCode && parsedVal?.nationalNumber) {\n return `+${[parsedVal?.countryCallingCode, parsedVal?.nationalNumber].join('-')}`;\n }\n\n // if failed to parse or to find country code return text field value\n return this.textField.value;\n }\n\n set value(val) {\n this.textField.value = val;\n }\n\n init() {\n this.addEventListener('focus', (e) => {\n // We want to ignore focus events we are dispatching\n if (e.isTrusted) this.textField.focus();\n });\n\n super.init?.();\n\n this.textField.addEventListener('input', this.#onInput.bind(this));\n this.handleFocusEventsDispatching([this.textField]);\n\n forwardAttrs(this.textField, this, { includeAttrs: ['has-value'] });\n\n forwardAttrs(this, this.textField, {\n includeAttrs: ['phone-input-type'],\n mapAttrs: { 'phone-input-type': 'type' },\n });\n }\n\n getValidity() {\n const validPhonePattern = /^\\+?\\d{1,4}-?(?:\\d-?){1,15}$/;\n const stripValue = this.#sanitizeVal(this.textField.value || '');\n\n if (this.isRequired && !this.textField.value) {\n return { valueMissing: true };\n }\n\n if (this.textField.value) {\n if (stripValue.length < this.minLength) {\n return { tooShort: true };\n }\n\n if (\n // has `strict-validation` and not properly parsed\n (this.isStrictValidation && this.textField.value && !this.#isValidParsedValue()) ||\n // if no `strict-validation` then conform with naive pattern\n (!this.isStrictValidation && this.textField.value && !validPhonePattern.test(this.value))\n ) {\n return { patternMismatch: true };\n }\n }\n\n return {};\n }\n\n setSelectionRange(...args) {\n this.textField.setSelectionRange(...args);\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n\n if (oldValue !== newValue && observedAttributes.includes(attrName)) {\n const attr = mapAttrs[attrName] || attrName;\n this.textField.setAttribute(attr, newValue);\n }\n }\n\n #onInput(e) {\n let sanitizedInput = this.#sanitizeInput(e.target.value);\n\n if (this.isFormatValue && this.#canFormat(sanitizedInput)) {\n sanitizedInput = this.#formatPhoneNumber(sanitizedInput);\n }\n\n e.target.value = sanitizedInput;\n }\n\n #nonParsedValue() {\n if (!this.defaultDialCode) {\n return this.textField.value;\n }\n\n const nationalNumber = this.#trimDuplicateCountryCode(this.textField.value);\n const sanitizedVal = this.#sanitizeVal(nationalNumber);\n\n return [this.defaultDialCode, sanitizedVal].join('-');\n }\n\n #parseWithCountryCode() {\n if (this.defaultDialCode) {\n return parsePhoneNumberFromString(\n [this.defaultDialCode, this.#sanitizeVal(this.textField.value)].filter(Boolean).join('')\n );\n }\n\n // if default-code or not parsed - try to extract country code from value\n return parsePhoneNumberFromString(this.textField.value);\n }\n\n #sanitizeVal(val) {\n return val.replace(/\\D/g, '');\n }\n\n #trimDuplicateCountryCode(val) {\n if (this.textField.value?.[0] === '+') {\n const dialCodePrefixPattern = new RegExp(`^\\\\${this.defaultDialCode}`);\n const trimmed = val.replace(dialCodePrefixPattern, '');\n return trimmed;\n }\n return val;\n }\n\n #isValidParsedValue() {\n const parsed = parsePhoneNumberFromString(this.value);\n return (\n !!parsed && // parsed successfully (not undefined)\n !!parsed.isValid?.() && // Parsed object is valid\n !!parsed.country && // Parsed object with a country code\n !!this.#isAllowedCountry(parsed.country) && // Parsed with allowed country code\n (this.defaultCode ? this.defaultCode === parsed.country : true) // In case default country code is set validate parsed country matches it\n );\n }\n\n #isAllowedCountry(countryCode) {\n if (!this.restrictCountries.length) {\n return true;\n }\n\n return this.restrictCountries.includes(countryCode);\n }\n\n #sanitizeInput(val) {\n val = val\n .replace(/^-+/, '') // dash as first char\n .replace(/(?!^)\\+/g, '') // multiple plus symbols\n .replace('--', '-') // consecutive dashes\n .replace('+-', '+'); // dash following plus symbol\n\n if (!this.allowAlphanumericInput) {\n const telDigitsRegExp = /^[+\\d-\\(\\)]+$/;\n val = val\n .split('')\n .filter((char) => telDigitsRegExp.test(char))\n .join('');\n }\n\n return val;\n }\n\n #formatPhoneNumber(phoneNumber = '') {\n // Get country code from `default-code or` from phone number\n const countryCode = this.defaultCode || this.#getCountryCodeFromValue(phoneNumber);\n\n // Skip formatting if no country code is available\n if (!countryCode) {\n return phoneNumber;\n }\n\n // Update AsYouType country code if needed\n if (!this.#ayt || this.#ayt.country !== countryCode) {\n this.#ayt = new AsYouType(countryCode);\n }\n\n // We need to reset AsYouType instance before setting new input\n this.#ayt.reset();\n\n // Set AsYouType input\n const formattedVal = this.#ayt.input(phoneNumber) || phoneNumber;\n\n return formattedVal;\n }\n\n #getCountryCodeFromValue(val) {\n const parsed = parsePhoneNumberFromString(val);\n return parsed?.country || '';\n }\n\n #canFormat(val) {\n if (!matchingParenthesis(val)) return false;\n return true;\n }\n}\n\nexport default PhoneFieldInternal;\n","import '../../../descope-text-field';\n\nimport PhoneFieldInternalInputBox, { componentName } from './PhoneFieldInternalInputBox';\n\ncustomElements.define(componentName, PhoneFieldInternalInputBox);\n","import './descope-phone-input-box-internal';\nimport '../../descope-text-field';\n\nimport { componentName, PhoneFieldInputBoxClass } from './PhoneFieldInputBoxClass';\n\ncustomElements.define(componentName, PhoneFieldInputBoxClass);\n\nexport { PhoneFieldInputBoxClass, componentName };\n","import parsePhoneNumberFromString from 'libphonenumber-js/min';\nimport CountryCodes from './CountryCodes';\n\nexport const getCountryByCodeId = (countryCode) =>\n CountryCodes.find((c) => c.code === countryCode)?.dialCode;\n\nexport const matchingParenthesis = (val) => {\n const openParenMatches = val.match(/\\(/g);\n const closeParenMatches = val.match(/\\)/g);\n return openParenMatches?.length === closeParenMatches?.length;\n};\n"],"names":["emailField","moduleId","emailFieldStyles","EmailField","is","constructor","super","this","_setType","pattern","ready","inputElement","autocapitalize","componentName","EmailFieldClass","mappings","textFieldMappings","inputType","inputName","autocompleteType","includeAttrs","proxyProps","useProxyTargets","superclass","init","baseElement","setAttribute","getAttribute","createExternalInput","slots","wrappedEleName","style","cssVarList","inputOutlineWidth","inputOutlineOffset","excludeAttrsSync","customElements","define","INVALID_PHONE_CHARS_RE","attrs","shared","email","phone","countryCode","inputBox","attrMap","PHONE_FIELD","BaseClass","createBaseClass","baseSelector","HybridFieldClass","componentNameOverride","hostWidth","selector","property","hostDirection","errorMessageIcon","PhoneFieldClass","PhoneFieldInputBoxClass","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","labelFontWeight","inputValueFontWeight","inputPlaceholderFontWeight","helperTextFontWeight","errorMessageFontWeight","attachShadow","mode","innerHTML","isExternalInput","emailInputEle","emailInput","externalInput","phoneVariant","phoneInputBoxInput","phoneCountryCodeInput","defaultCode","firstItem","countryCodes","activeInputEle","activeInput","phoneNumberInputEle","value","val","handleActiveInput","setTimeout","initInputs","updateAttrs","toggleInputVisibility","waitForInputs","initInputEles","overrideEmailInputType","overrideEmailSetAttribute","Promise","resolve","check","setInterval","clearInterval","shadowRoot","querySelector","inputs","forEach","ele","addEventListener","onValueChange","bind","origEmailSetAttr","name","hasAttribute","mapAttrs","input","selectionStart","expectedActiveInput","test","isNumericValue","setActiveInput","setActiveInputValue","reportValidity","setActiveInputSelectionStart","focus","setSelectionRange","code","match","CountryCodes","find","c","dialCode","sanitizedVal","replace","localName","countryCodeItems","classList","add","remove","origInputType","type","length","checkValidity","textVars","host","label","requiredIndicator","inputField","internalComponent","internalComponentAfter","phoneInput","errorMessage","helperText","placeholder","fontSize","fontFamily","hostMinWidth","inputHorizontalPadding","labelFontSize","labelTextColor","labelRequiredIndicator","errorMessageTextColor","inputValueTextColor","inputPlaceholderTextColor","inputPlaceholderColor","inputBorderStyle","inputBorderWidth","inputBorderColor","inputBorderRadius","inputOutlineStyle","inputOutlineColor","labelPosition","labelTopPosition","labelHorizontalPosition","inputTransformY","inputTransition","marginInlineStart","valueInputHeight","valueInputMarginBottom","template","document","createElement","appendChild","content","cloneNode","observedAttributes","BaseInputClass","concat","textField","defaultDialCode","allowAlphanumericInput","minLength","parseInt","maxLength","restrictCountries","split","filter","Boolean","isFormatValue","isStrictValidation","parsedVal","country","countryCallingCode","nationalNumber","join","e","isTrusted","handleFocusEventsDispatching","getValidity","validPhonePattern","stripValue","isRequired","valueMissing","tooShort","patternMismatch","args","attributeChangedCallback","attrName","oldValue","newValue","includes","attr","sanitizedInput","target","dialCodePrefixPattern","RegExp","parsed","isValid","telDigitsRegExp","char","phoneNumber","reset","getCountryByCodeId","matchingParenthesis","openParenMatches","closeParenMatches"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"descope-hybrid-field-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../../../node_modules/@vaadin/email-field/theme/lumo/vaadin-email-field-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/email-field/src/vaadin-email-field-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/email-field/src/vaadin-email-field.js","webpack://@descope/web-components-ui/./src/components/descope-email-field/EmailFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-email-field/index.js","webpack://@descope/web-components-ui/./src/components/descope-hybrid-field/helpers.js","webpack://@descope/web-components-ui/./src/components/descope-hybrid-field/HybridFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-hybrid-field/index.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/PhoneFieldInputBoxClass.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/descope-phone-input-box-internal/PhoneFieldInternalInputBox.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/descope-phone-input-box-internal/index.js","webpack://@descope/web-components-ui/./src/components/phone-fields/descope-phone-input-box-field/index.js","webpack://@descope/web-components-ui/./src/components/phone-fields/helpers.js"],"sourcesContent":["/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { inputFieldShared } from '@vaadin/vaadin-lumo-styles/mixins/input-field-shared.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst emailField = css`\n :host([dir='rtl']) [part='input-field'] ::slotted(input) {\n --_lumo-text-field-overflow-mask-image: linear-gradient(to left, transparent, #000 1.25em);\n }\n\n :host([dir='rtl']) [part='input-field'] ::slotted(input:placeholder-shown) {\n --_lumo-text-field-overflow-mask-image: none;\n }\n`;\n\nregisterStyles('vaadin-email-field', [inputFieldShared, emailField], {\n moduleId: 'lumo-email-field',\n});\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { css } from 'lit';\n\n// See https://github.com/vaadin/vaadin-text-field/issues/466\nexport const emailFieldStyles = css`\n :host([dir='rtl']) [part='input-field'] {\n direction: ltr;\n }\n\n :host([dir='rtl']) [part='input-field'] ::slotted(input)::placeholder {\n direction: rtl;\n text-align: left;\n }\n`;\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { TextField } from '@vaadin/text-field/src/vaadin-text-field.js';\nimport { registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { emailFieldStyles } from './vaadin-email-field-styles.js';\n\nregisterStyles('vaadin-email-field', emailFieldStyles, { moduleId: 'vaadin-email-field-styles' });\n\n/**\n * `<vaadin-email-field>` is a Web Component for email field control in forms.\n *\n * ```html\n * <vaadin-email-field label=\"Email\"></vaadin-email-field>\n * ```\n *\n * ### Styling\n *\n * `<vaadin-email-field>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.\n * See [`<vaadin-text-field>`](#/elements/vaadin-text-field) for the styling documentation.\n *\n * See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.\n *\n * @fires {Event} input - Fired when the value is changed by the user: on every typing keystroke, and the value is cleared using the clear button.\n * @fires {Event} change - Fired when the user commits a value change.\n * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.\n * @fires {CustomEvent} value-changed - Fired when the `value` property changes.\n * @fires {CustomEvent} validated - Fired whenever the field is validated.\n *\n * @customElement\n * @extends TextField\n */\nexport class EmailField extends TextField {\n static get is() {\n return 'vaadin-email-field';\n }\n\n constructor() {\n super();\n this._setType('email');\n this.pattern = '^([a-zA-Z0-9_\\\\.\\\\-+])+@[a-zA-Z0-9\\\\-.]+\\\\.[a-zA-Z0-9\\\\-]{2,}$';\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n if (this.inputElement) {\n this.inputElement.autocapitalize = 'off';\n }\n }\n}\n\ndefineCustomElement(EmailField);\n","import textFieldMappings from '@descope-ui/descope-text-field/mappings';\nimport {\n createStyleMixin,\n draggableMixin,\n createProxy,\n proxyInputMixin,\n componentNameValidationMixin,\n externalInputMixin,\n} from '../../mixins';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\nimport {\n inputFloatingLabelStyle,\n resetInputLabelPosition,\n resetInputOverrides,\n useHostExternalPadding,\n} from '../../helpers/themeHelpers/resetHelpers';\n\nexport const componentName = getComponentName('email-field');\n\nconst defaultPattern = \"^[\\\\w\\\\.\\\\%\\\\+\\\\-']+@[\\\\w\\\\.\\\\-]+\\\\.[A-Za-z]{2,}$\";\nconst defaultAutocomplete = 'username';\n\nconst customMixin = (superclass) =>\n class EmailFieldMixinClass extends superclass {\n init() {\n super.init?.();\n\n // we need to set the pattern on the base element because vaadin-email-field is overriding it\n this.baseElement.setAttribute('pattern', defaultPattern);\n\n if (!this.getAttribute('autocomplete')) {\n this.setAttribute('autocomplete', defaultAutocomplete);\n }\n\n this.createExternalInput();\n }\n };\n\nexport const EmailFieldClass = compose(\n createStyleMixin({\n mappings: textFieldMappings,\n }),\n draggableMixin,\n externalInputMixin({\n inputType: 'email',\n inputName: 'email',\n autocompleteType: 'username',\n includeAttrs: ['disabled', 'readonly', 'pattern'],\n }),\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'], useProxyTargets: true }),\n componentNameValidationMixin,\n customMixin\n)(\n createProxy({\n slots: ['', 'suffix'],\n wrappedEleName: 'vaadin-email-field',\n style: () => `\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tpadding: calc(var(${EmailFieldClass.cssVarList.inputOutlineWidth}) + var(${\n EmailFieldClass.cssVarList.inputOutlineOffset\n }));\n box-sizing: border-box;\n\t\t\t}\n ${resetInputLabelPosition('vaadin-email-field')}\n\t\t\t${useHostExternalPadding(EmailFieldClass.cssVarList)}\n\t\t\t${resetInputOverrides('vaadin-email-field', EmailFieldClass.cssVarList)}\n ${inputFloatingLabelStyle()}\n\n vaadin-email-field[label-type=\"floating\"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-email-field[label-type=\"floating\"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n\n :host ::slotted(*) {\n -webkit-mask-image: none;\n }\n\n vaadin-email-field[external-input=\"true\"] > input:not(:placeholder-shown) {\n opacity: 0;\n }\n\t\t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n","import '@vaadin/email-field';\nimport { componentName, EmailFieldClass } from './EmailFieldClass';\n\ncustomElements.define(componentName, EmailFieldClass);\n\nexport { EmailFieldClass, componentName };\n","// Matches any character that is not a digit, whitespace, or phone formatting character (+, -, (, ))\nconst INVALID_PHONE_CHARS_RE = /[^\\d\\s+\\-()]/;\n\nexport const isNumericValue = (val) => !!val && !INVALID_PHONE_CHARS_RE.test(val);\n\nexport const sanitizeCountryCodePrefix = (val) => val.replace(/\\+\\d+-/, '');\n","import { injectStyle } from '@descope-ui/common/components-helpers';\nimport { createStyleMixin, draggableMixin, componentNameValidationMixin } from '../../mixins';\nimport { createBaseClass } from '../../baseClasses/createBaseClass';\nimport { compose } from '../../helpers';\nimport { forwardAttrs, getComponentName } from '../../helpers/componentHelpers';\nimport { isNumericValue, sanitizeCountryCodePrefix as sanitizeValue } from './helpers';\nimport { PhoneFieldClass } from '../phone-fields/descope-phone-field/PhoneFieldClass';\nimport { PhoneFieldInputBoxClass } from '../phone-fields/descope-phone-input-box-field/PhoneFieldInputBoxClass';\n\nexport const componentName = getComponentName('hybrid-field');\n\nconst attrs = {\n shared: [\n 'label',\n 'bordered',\n 'full-width',\n 'label-type',\n 'size',\n 'disabled',\n 'readonly',\n 'required',\n 'st-host-direction',\n 'st-error-message-icon',\n 'st-error-message-icon-size',\n 'st-error-message-icon-padding',\n ],\n email: [\n 'placeholder',\n 'data-errormessage-value-missing-email',\n 'data-errormessage-pattern-mismatch-email',\n 'external-input',\n ],\n phone: {\n countryCode: [\n 'phone-input-label',\n 'country-input-label',\n 'country-input-placeholder',\n 'restrict-countries',\n 'default-code',\n 'phone-minlength',\n 'phone-format-value',\n 'phone-strict-validation',\n 'phone-input-type',\n 'data-errormessage-value-missing-phone',\n ],\n inputBox: [\n 'restrict-countries',\n 'default-code',\n 'phone-minlength',\n 'phone-format-value',\n 'phone-strict-validation',\n 'phone-input-type',\n 'data-errormessage-value-missing-phone',\n ],\n },\n};\n\nconst attrMap = {\n email: {\n 'data-errormessage-value-missing-email': 'data-errormessage-value-missing',\n 'data-errormessage-pattern-mismatch-email': 'data-errormessage-pattern-mismatch',\n },\n phone: {\n 'phone-input-label': 'label',\n 'phone-minlength': 'minlength',\n 'phone-format-value': 'format-value',\n 'phone-strict-validation': 'strict-validation',\n 'data-errormessage-value-missing-phone': 'data-errormessage-value-missing',\n },\n};\n\nconst EMAIL_FIELD = 'descope-email-field';\nconst PHONE_FIELD = 'descope-phone-field';\nconst PHONE_INPUT_BOX_FIELD = 'descope-phone-input-box-field';\n\nconst BaseClass = createBaseClass({\n componentName,\n baseSelector: 'div',\n});\n\nclass RawHybridField extends BaseClass {\n #isReportedValidity = false;\n\n #selectionStart;\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"wrapper\">\n <descope-email-field external-input=\"${this.isExternalInput}\"></descope-email-field>\n <descope-phone-field allow-alphanumeric-input=\"true\" phone-input-type=\"text\"></descope-phone-field>\n <descope-phone-input-box-field allow-alphanumeric-input=\"true\" phone-input-type=\"text\"></descope-phone-input-box-field>\n </div>\n\t\t`;\n\n injectStyle(\n `\n :host {\n display: inline-flex;\n box-sizing: border-box;\n padding: 0;\n gap: 0;\n }\n .wrapper {\n display: grid;\n width: 100%;\n }\n descope-email-field,\n descope-phone-field,\n descope-phone-input-box-field {\n grid-area: 1/1;\n width: 100%;\n height: 100%;\n }\n .hidden {\n visibility: hidden;\n }\n `,\n this\n );\n }\n\n get isExternalInput() {\n return this.getAttribute('external-input') === 'true';\n }\n\n get emailInputEle() {\n return this.isExternalInput ? this.emailInput.externalInput : this.emailInput.inputElement;\n }\n\n get phoneVariant() {\n const isInputBox = this.getAttribute('phone-variant') === 'inputBox';\n return isInputBox ? this.phoneInputBoxInput : this.phoneCountryCodeInput;\n }\n\n get defaultCode() {\n const firstItem = this.phoneCountryCodeInput.countryCodes?.[0] || '';\n return this.getAttribute('default-code') || firstItem;\n }\n\n get activeInputEle() {\n if (this.activeInput === this.emailInput) {\n return this.emailInputEle;\n }\n return this.phoneVariant.phoneNumberInputEle;\n }\n\n get value() {\n return this.activeInput?.value || '';\n }\n\n set value(val) {\n this.handleActiveInput(val);\n setTimeout(() => {\n this.activeInput.value = val;\n });\n }\n\n async init() {\n super.init?.();\n\n this.initInputs();\n this.updateAttrs();\n this.toggleInputVisibility();\n\n await this.waitForInputs();\n\n this.initInputEles();\n this.overrideEmailInputType();\n this.overrideEmailSetAttribute();\n }\n\n waitForInputs() {\n return new Promise((resolve) => {\n const check = setInterval(() => {\n if (this.emailInputEle) {\n clearInterval(check);\n resolve();\n }\n });\n });\n }\n\n initInputs() {\n this.emailInput = this.shadowRoot.querySelector(EMAIL_FIELD);\n this.phoneCountryCodeInput = this.shadowRoot.querySelector(PHONE_FIELD);\n this.phoneInputBoxInput = this.shadowRoot.querySelector(PHONE_INPUT_BOX_FIELD);\n\n this.inputs = [this.emailInput, this.phoneCountryCodeInput, this.phoneInputBoxInput];\n\n this.activeInput = this.emailInput;\n }\n\n // we need to listen on the inner `input` element itself, otherwise we don't always get an `input` event\n initInputEles() {\n const inputEles = [\n this.emailInputEle,\n this.phoneCountryCodeInput.phoneNumberInputEle,\n this.phoneInputBoxInput.phoneNumberInputEle,\n ];\n\n inputEles.forEach((ele) => {\n ele.addEventListener('input', this.onValueChange.bind(this));\n });\n }\n\n overrideEmailInputType() {\n this.emailInputEle.addEventListener('focus', () => {\n this.emailInputEle.setAttribute('type', 'text');\n });\n this.emailInputEle.addEventListener('blur', () => {\n setTimeout(() => {\n this.emailInputEle.setAttribute('type', 'email');\n });\n });\n }\n\n // We want to prevent Vaadin from changing the input type to `email`\n // otherwise, we cannot get the selectionStart from the input.\n overrideEmailSetAttribute() {\n const origEmailSetAttr = this.emailInput.setAttribute.bind(this.emailInputEle);\n this.emailInputEle.setAttribute = (name, value) => {\n if (name !== 'type' || value !== 'email' || !this.emailInput.hasAttribute('focused')) {\n return origEmailSetAttr(name, value);\n }\n return false;\n };\n }\n\n updateAttrs() {\n forwardAttrs(this, this.emailInput, { includeAttrs: attrs.email, mapAttrs: attrMap.email });\n\n forwardAttrs(this, this.phoneCountryCodeInput, {\n includeAttrs: attrs.phone.countryCode,\n mapAttrs: attrMap.phone,\n });\n\n forwardAttrs(this, this.phoneInputBoxInput, {\n includeAttrs: attrs.phone.inputBox,\n mapAttrs: attrMap.phone,\n });\n\n this.inputs.forEach((input) => forwardAttrs(this, input, { includeAttrs: attrs.shared }));\n\n setTimeout(() => this.phoneCountryCodeInput.setAttribute('default-code', this.defaultCode));\n }\n\n onValueChange() {\n this.#selectionStart = this.activeInputEle.selectionStart;\n // phone components expose an API to their inputElement; in case of phone variants like\n // phone-input-box-field, we want to make sure that the value being passed\n // is raw value from input, and not the value with a dial-code prefix, or other decorations\n // applied behind the scenes by the phone components\n this.handleActiveInput(this.activeInputEle.value || this.activeInput.value);\n }\n\n handleActiveInput(val) {\n const expectedActiveInput = isNumericValue(val) ? this.phoneVariant : this.emailInput;\n\n if (this.activeInput !== expectedActiveInput) {\n this.setActiveInput(expectedActiveInput);\n }\n }\n\n setActiveInput(expectedActiveInput) {\n // phone components expose an API to their inputElement; in case of phone variants like\n // phone-input-box-field, we want to make sure that the value being passed\n // is raw value from input, and not the value with a dial-code prefix, or other decorations\n // applied behind the scenes by the phone components\n const val = this.activeInputEle.value || this.activeInput.value;\n\n this.activeInput = expectedActiveInput;\n this.setActiveInputValue(val);\n if (this.#isReportedValidity) this.activeInput.reportValidity();\n this.setActiveInputSelectionStart();\n this.toggleInputVisibility();\n }\n\n setActiveInputSelectionStart() {\n setTimeout(() => {\n this.activeInputEle.focus();\n this.activeInputEle.setSelectionRange?.(this.#selectionStart, this.#selectionStart);\n });\n }\n\n #getDefaultDialCode() {\n const code = this.getAttribute('default-code');\n const match = code && PhoneFieldClass.CountryCodes.find((c) => c.code === code);\n return match?.dialCode || PhoneFieldClass.CountryCodes[0]?.dialCode || '';\n }\n\n setActiveInputValue(val) {\n const sanitizedVal = sanitizeValue(val);\n const isPhoneField = this.activeInput.localName === PHONE_FIELD;\n if (isPhoneField) {\n const dialCode = this.phoneCountryCodeInput.countryCodeItems || this.#getDefaultDialCode();\n this.activeInput.value = `${dialCode}-${sanitizedVal}`;\n } else {\n this.activeInput.value = sanitizedVal;\n }\n }\n\n toggleInputVisibility() {\n this.inputs.forEach((input) => {\n input !== this.activeInput ? input.classList.add('hidden') : input.classList.remove('hidden');\n });\n }\n\n reportValidity() {\n this.#isReportedValidity = true;\n\n const ele = this.activeInputEle;\n\n // On reportValidity we want to set the caret at the end of the input value.\n // Since checkValidity triggers `focus` on the input, it sets the caret at the start of the input,\n // regardless the existing value.\n const origInputType = ele.type;\n ele.setAttribute('type', 'text');\n setTimeout(() => {\n ele.setSelectionRange?.(ele.value.length, ele.value.length);\n ele.setAttribute('type', origInputType);\n });\n\n return this.activeInput.reportValidity();\n }\n\n checkValidity() {\n return this.activeInput.checkValidity();\n }\n}\n\nexport const HybridFieldClass = compose(\n createStyleMixin({ componentNameOverride: getComponentName('input-wrapper') }),\n createStyleMixin({\n mappings: {\n hostWidth: { selector: () => ':host', property: 'width' },\n hostDirection: [\n { selector: () => 'descope-email-field', property: 'direction' },\n { selector: () => 'descope-phone-field', property: 'direction' },\n { selector: () => 'descope-phone-input-box-field', property: 'direction' },\n ],\n errorMessageIcon: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIcon,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIcon,\n },\n ],\n errorMessageIconSize: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconSize,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconSize,\n },\n ],\n errorMessageIconPadding: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconPadding,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconPadding,\n },\n ],\n errorMessageIconRepeat: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconRepeat,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconRepeat,\n },\n ],\n errorMessageIconPosition: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageIconPosition,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageIconPosition,\n },\n ],\n errorMessageFontSize: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageFontSize,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageFontSize,\n },\n ],\n labelFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.labelFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.labelFontWeight,\n },\n ],\n inputValueFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.inputValueFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.inputValueFontWeight,\n },\n ],\n inputPlaceholderFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.inputPlaceholderFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.inputPlaceholderFontWeight,\n },\n ],\n helperTextFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.helperTextFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.helperTextFontWeight,\n },\n ],\n errorMessageFontWeight: [\n {\n selector: () => PhoneFieldClass.componentName,\n property: PhoneFieldClass.cssVarList.errorMessageFontWeight,\n },\n {\n selector: () => PhoneFieldInputBoxClass.componentName,\n property: PhoneFieldInputBoxClass.cssVarList.errorMessageFontWeight,\n },\n ],\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawHybridField);\n","import '../descope-email-field';\nimport '../phone-fields/descope-phone-field';\nimport '../phone-fields/descope-phone-input-box-field';\n\nimport { componentName, HybridFieldClass } from './HybridFieldClass';\n\ncustomElements.define(componentName, HybridFieldClass);\n\nexport { HybridFieldClass, componentName };\n","import { syncAttrs } from '@descope-ui/common/components-helpers';\nimport { TextFieldClass } from '@descope-ui/descope-text-field/class';\nimport { componentName as descopeInternalComponentName } from './descope-phone-input-box-internal/PhoneFieldInternalInputBox';\nimport { forwardAttrs, getComponentName } from '../../../helpers/componentHelpers';\nimport { compose } from '../../../helpers';\nimport {\n createProxy,\n createStyleMixin,\n draggableMixin,\n inputOverrideValidConstraintsMixin,\n proxyInputMixin,\n} from '../../../mixins';\nimport CountryCodes from '../CountryCodes';\nimport {\n resetInputLabelPosition,\n resetInputCursor,\n resetInputFieldDefaultWidth,\n resetInputFieldInvalidBackgroundColor,\n useHostExternalPadding,\n inputFloatingLabelStyle,\n} from '../../../helpers/themeHelpers/resetHelpers';\n\nconst textVars = TextFieldClass.cssVarList;\n\nexport const componentName = getComponentName('phone-input-box-field');\n\nconst customMixin = (superclass) =>\n class PhoneFieldInputBoxMixinClass extends superclass {\n static get CountryCodes() {\n return CountryCodes;\n }\n\n init() {\n super.init?.();\n\n const template = document.createElement('template');\n\n template.innerHTML = `\n\t\t\t\t<${descopeInternalComponentName}\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tslot=\"input\"\n\t\t\t\t></${descopeInternalComponentName}>\n `;\n\n this.baseElement.appendChild(template.content.cloneNode(true));\n\n this.inputElement = this.shadowRoot.querySelector(descopeInternalComponentName);\n\n syncAttrs(this, this.inputElement, { includeAttrs: ['has-value'] });\n\n forwardAttrs(this.shadowRoot.host, this.inputElement, {\n includeAttrs: [\n 'size',\n 'minlength',\n 'maxlength',\n 'default-code',\n 'disabled',\n 'phone-input-placeholder',\n 'label',\n 'label-type',\n 'allow-alphanumeric-input',\n 'restrict-countries',\n 'format-value',\n 'strict-validation',\n 'data-errormessage-type-mismatch',\n 'phone-input-type',\n ],\n });\n }\n\n get phoneNumberInputEle() {\n return this.inputElement?.phoneNumberInputEle;\n }\n };\n\nconst {\n host,\n label,\n inputElement,\n requiredIndicator,\n inputField,\n internalComponent,\n internalComponentAfter,\n phoneInput,\n errorMessage,\n helperText,\n} = {\n host: { selector: () => ':host' },\n label: { selector: '::part(label)' },\n placeholder: { selector: '> input:placeholder-shown' },\n inputElement: { selector: 'input' },\n requiredIndicator: { selector: '[required]::part(required-indicator)::after' },\n inputField: { selector: () => 'vaadin-text-field::part(input-field)' },\n internalComponent: {\n selector: 'descope-phone-field-internal-input-box',\n },\n internalComponentAfter: {\n selector: 'descope-phone-field-internal-input-box::after',\n },\n phoneInput: { selector: () => 'descope-text-field' },\n helperText: { selector: '::part(helper-text)' },\n errorMessage: { selector: '::part(error-message)' },\n};\n\nexport const PhoneFieldInputBoxClass = compose(\n createStyleMixin({\n mappings: {\n fontSize: [\n host,\n inputField,\n {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.fontSize,\n },\n ],\n fontFamily: [label, errorMessage, helperText],\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { ...host, property: 'min-width' },\n hostDirection: { ...host, property: 'direction' },\n\n inputHorizontalPadding: [\n { ...phoneInput, property: 'padding-left' },\n { ...phoneInput, property: 'padding-right' },\n ],\n\n labelFontSize: { ...label, property: 'font-size' },\n labelFontWeight: { ...label, property: 'font-weight' },\n inputValueFontWeight: { ...phoneInput, property: textVars.inputValueFontWeight },\n inputPlaceholderFontWeight: { ...phoneInput, property: textVars.inputPlaceholderFontWeight },\n helperTextFontWeight: { ...helperText, property: 'font-weight' },\n errorMessageFontWeight: { ...errorMessage, property: 'font-weight' },\n labelTextColor: [\n { ...label, property: 'color' },\n { ...label, property: '-webkit-text-fill-color' },\n { ...requiredIndicator, property: 'color' },\n ],\n labelRequiredIndicator: { ...requiredIndicator, property: 'content' },\n errorMessageTextColor: { ...errorMessage, property: 'color' },\n\n errorMessageIcon: { ...errorMessage, property: 'background-image' },\n errorMessageIconSize: { ...errorMessage, property: 'background-size' },\n errorMessageIconPadding: { ...errorMessage, property: 'padding-inline-start' },\n errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },\n errorMessageIconPosition: { ...errorMessage, property: 'background-position' },\n errorMessageFontSize: { ...errorMessage, property: 'font-size' },\n\n inputValueTextColor: { ...phoneInput, property: textVars.inputValueTextColor },\n\n inputPlaceholderTextColor: { ...phoneInput, property: textVars.inputPlaceholderColor },\n\n inputBorderStyle: { ...internalComponentAfter, property: 'border-style' },\n inputBorderWidth: { ...internalComponentAfter, property: 'border-width' },\n inputBorderColor: { ...internalComponentAfter, property: 'border-color' },\n inputBorderRadius: [\n { ...internalComponent, property: 'border-radius' },\n { ...internalComponentAfter, property: 'border-radius' },\n ],\n\n inputOutlineStyle: { ...internalComponent, property: 'outline-style' },\n inputOutlineColor: { ...internalComponent, property: 'outline-color' },\n inputOutlineWidth: { ...internalComponent, property: 'outline-width' },\n inputOutlineOffset: { ...internalComponent, property: 'outline-offset' },\n\n labelPosition: { ...label, property: 'position' },\n labelTopPosition: { ...label, property: 'top' },\n labelHorizontalPosition: [\n { ...label, property: 'left' },\n { ...label, property: 'right' },\n ],\n inputTransformY: { ...label, property: 'transform' },\n inputTransition: { ...label, property: 'transition' },\n marginInlineStart: { ...label, property: 'margin-inline-start' },\n valueInputHeight: { ...inputElement, property: 'height' },\n valueInputMarginBottom: {\n selector: TextFieldClass.componentName,\n property: textVars.valueInputMarginBottom,\n },\n },\n }),\n draggableMixin,\n inputOverrideValidConstraintsMixin,\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'] }),\n customMixin\n)(\n createProxy({\n slots: [],\n wrappedEleName: 'vaadin-text-field',\n style: () => `\n :host {\n display: inline-flex;\n max-width: 100%;\n box-sizing: border-box;\n }\n ${useHostExternalPadding(PhoneFieldInputBoxClass.cssVarList)}\n ${resetInputCursor('vaadin-text-field')}\n ${resetInputFieldInvalidBackgroundColor('vaadin-text-field')}\n ${resetInputFieldDefaultWidth()}\n\n vaadin-text-field {\n width: 100%;\n box-sizing: border-box;\n padding: 0;\n }\n vaadin-text-field[focus-ring]::part(input-field) {\n box-shadow: none;\n }\n vaadin-text-field::before {\n height: 0;\n }\n vaadin-text-field::part(input-field) {\n padding: 0;\n background: transparent;\n -webkit-mask-image: none;\n }\n descope-phone-field-internal-input-box {\n -webkit-mask-image: none;\n padding: 0;\n width: 100%;\n }\n descope-phone-field-internal-input-box > div {\n width: 100%;\n }\n descope-phone-field-internal-input-box descope-text-field {\n ${textVars.inputOutlineWidth}: 0;\n ${textVars.inputOutlineOffset}: 0;\n }\n descope-phone-field-internal-input-box::after {\n content: '';\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n box-sizing: border-box;\n pointer-events: none;\n }\n descope-text-field {\n flex-grow: 1;\n width: 100%;\n direction: ltr;\n }\n vaadin-text-field[readonly] > input:placeholder-shown {\n opacity: 1;\n }\n vaadin-text-field::part(input-field)::after {\n border: none;\n }\n\n vaadin-text-field[label-type=\"floating\"]:not([focused])[readonly] input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type=\"floating\"]:not([focused])[disabled] input:placeholder-shown {\n opacity: 0;\n }\n\n ${resetInputLabelPosition('vaadin-text-field')}\n ${inputFloatingLabelStyle()}\n\t\t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n\nexport default PhoneFieldInputBoxClass;\n","import { forwardAttrs } from '@descope-ui/common/components-helpers';\nimport parsePhoneNumberFromString, { AsYouType } from 'libphonenumber-js/min';\nimport { createBaseInputClass } from '../../../../baseClasses/createBaseInputClass';\nimport { getComponentName } from '../../../../helpers/componentHelpers';\nimport { getCountryByCodeId, matchingParenthesis } from '../../helpers';\n\nexport const componentName = getComponentName('phone-field-internal-input-box');\n\nconst observedAttributes = [\n 'disabled',\n 'size',\n 'readonly',\n 'phone-input-placeholder',\n 'name',\n 'maxlength',\n 'autocomplete',\n 'label-type',\n 'phone-input-type',\n];\nconst mapAttrs = {\n 'phone-input-placeholder': 'placeholder',\n 'phone-input-type': 'type',\n};\n\nconst BaseInputClass = createBaseInputClass({ componentName, baseSelector: 'div' });\n\nclass PhoneFieldInternal extends BaseInputClass {\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttributes);\n }\n\n #ayt;\n\n constructor() {\n super();\n\n this.innerHTML = `\n <div>\n <descope-text-field tabindex=\"1\" type=\"tel\" bordered=\"false\"></descope-text-field>\n </div>\n `;\n\n this.textField = this.querySelector('descope-text-field');\n }\n\n // notice: this function is exposed in parent component\n get phoneNumberInputEle() {\n return this.textField.shadowRoot.querySelector('input');\n }\n\n get defaultDialCode() {\n return getCountryByCodeId(this.getAttribute('default-code'));\n }\n\n get defaultCode() {\n return this.getAttribute('default-code');\n }\n\n get allowAlphanumericInput() {\n return this.getAttribute('allow-alphanumeric-input') === 'true';\n }\n\n get minLength() {\n return parseInt(this.getAttribute('minlength'), 10) || 0;\n }\n\n get maxLength() {\n return parseInt(this.getAttribute('maxlength'), 10) || 50;\n }\n\n get restrictCountries() {\n return this.getAttribute('restrict-countries')?.split(',').filter(Boolean) || [];\n }\n\n get isFormatValue() {\n return this.getAttribute('format-value') === 'true';\n }\n\n get isStrictValidation() {\n return this.getAttribute('strict-validation') === 'true';\n }\n\n get value() {\n if (!this.textField.value) return '';\n\n if (!this.isStrictValidation) {\n return this.#nonParsedValue();\n }\n\n const parsedVal = this.#parseWithCountryCode();\n\n if (parsedVal?.country && parsedVal?.countryCallingCode && parsedVal?.nationalNumber) {\n return `+${[parsedVal?.countryCallingCode, parsedVal?.nationalNumber].join('-')}`;\n }\n\n // if failed to parse or to find country code return text field value\n return this.textField.value;\n }\n\n set value(val) {\n this.textField.value = val;\n }\n\n init() {\n this.addEventListener('focus', (e) => {\n // We want to ignore focus events we are dispatching\n if (e.isTrusted) this.textField.focus();\n });\n\n super.init?.();\n\n this.textField.addEventListener('input', this.#onInput.bind(this));\n this.handleFocusEventsDispatching([this.textField]);\n\n forwardAttrs(this.textField, this, { includeAttrs: ['has-value'] });\n\n forwardAttrs(this, this.textField, {\n includeAttrs: ['phone-input-type'],\n mapAttrs: { 'phone-input-type': 'type' },\n });\n }\n\n getValidity() {\n const validPhonePattern = /^\\+?\\d{1,4}-?(?:\\d-?){1,15}$/;\n const stripValue = this.#sanitizeVal(this.textField.value || '');\n\n if (this.isRequired && !this.textField.value) {\n return { valueMissing: true };\n }\n\n if (this.textField.value) {\n if (stripValue.length < this.minLength) {\n return { tooShort: true };\n }\n\n if (\n // has `strict-validation` and not properly parsed\n (this.isStrictValidation && this.textField.value && !this.#isValidParsedValue()) ||\n // if no `strict-validation` then conform with naive pattern\n (!this.isStrictValidation && this.textField.value && !validPhonePattern.test(this.value))\n ) {\n return { patternMismatch: true };\n }\n }\n\n return {};\n }\n\n setSelectionRange(...args) {\n this.textField.setSelectionRange(...args);\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n\n if (oldValue !== newValue && observedAttributes.includes(attrName)) {\n const attr = mapAttrs[attrName] || attrName;\n this.textField.setAttribute(attr, newValue);\n }\n }\n\n #onInput(e) {\n let sanitizedInput = this.#sanitizeInput(e.target.value);\n\n if (this.isFormatValue && this.#canFormat(sanitizedInput)) {\n sanitizedInput = this.#formatPhoneNumber(sanitizedInput);\n }\n\n e.target.value = sanitizedInput;\n }\n\n #nonParsedValue() {\n if (!this.defaultDialCode) {\n return this.textField.value;\n }\n\n const nationalNumber = this.#trimDuplicateCountryCode(this.textField.value);\n const sanitizedVal = this.#sanitizeVal(nationalNumber);\n\n return [this.defaultDialCode, sanitizedVal].join('-');\n }\n\n #parseWithCountryCode() {\n if (this.defaultDialCode) {\n return parsePhoneNumberFromString(\n [this.defaultDialCode, this.#sanitizeVal(this.textField.value)].filter(Boolean).join('')\n );\n }\n\n // if default-code or not parsed - try to extract country code from value\n return parsePhoneNumberFromString(this.textField.value);\n }\n\n #sanitizeVal(val) {\n return val.replace(/\\D/g, '');\n }\n\n #trimDuplicateCountryCode(val) {\n if (this.textField.value?.[0] === '+') {\n const dialCodePrefixPattern = new RegExp(`^\\\\${this.defaultDialCode}`);\n const trimmed = val.replace(dialCodePrefixPattern, '');\n return trimmed;\n }\n return val;\n }\n\n #isValidParsedValue() {\n const parsed = parsePhoneNumberFromString(this.value);\n return (\n !!parsed && // parsed successfully (not undefined)\n !!parsed.isValid?.() && // Parsed object is valid\n !!parsed.country && // Parsed object with a country code\n !!this.#isAllowedCountry(parsed.country) && // Parsed with allowed country code\n (this.defaultCode ? this.defaultCode === parsed.country : true) // In case default country code is set validate parsed country matches it\n );\n }\n\n #isAllowedCountry(countryCode) {\n if (!this.restrictCountries.length) {\n return true;\n }\n\n return this.restrictCountries.includes(countryCode);\n }\n\n #sanitizeInput(val) {\n val = val\n .replace(/^-+/, '') // dash as first char\n .replace(/(?!^)\\+/g, '') // multiple plus symbols\n .replace('--', '-') // consecutive dashes\n .replace('+-', '+'); // dash following plus symbol\n\n if (!this.allowAlphanumericInput) {\n const telDigitsRegExp = /^[+\\d-\\(\\)]+$/;\n val = val\n .split('')\n .filter((char) => telDigitsRegExp.test(char))\n .join('');\n }\n\n return val;\n }\n\n #formatPhoneNumber(phoneNumber = '') {\n // Get country code from `default-code or` from phone number\n const countryCode = this.defaultCode || this.#getCountryCodeFromValue(phoneNumber);\n\n // Skip formatting if no country code is available\n if (!countryCode) {\n return phoneNumber;\n }\n\n // Update AsYouType country code if needed\n if (!this.#ayt || this.#ayt.country !== countryCode) {\n this.#ayt = new AsYouType(countryCode);\n }\n\n // We need to reset AsYouType instance before setting new input\n this.#ayt.reset();\n\n // Set AsYouType input\n const formattedVal = this.#ayt.input(phoneNumber) || phoneNumber;\n\n return formattedVal;\n }\n\n #getCountryCodeFromValue(val) {\n const parsed = parsePhoneNumberFromString(val);\n return parsed?.country || '';\n }\n\n #canFormat(val) {\n if (!matchingParenthesis(val)) return false;\n return true;\n }\n}\n\nexport default PhoneFieldInternal;\n","import '@descope-ui/descope-text-field';\n\nimport PhoneFieldInternalInputBox, { componentName } from './PhoneFieldInternalInputBox';\n\ncustomElements.define(componentName, PhoneFieldInternalInputBox);\n","import './descope-phone-input-box-internal';\nimport '@descope-ui/descope-text-field';\n\nimport { componentName, PhoneFieldInputBoxClass } from './PhoneFieldInputBoxClass';\n\ncustomElements.define(componentName, PhoneFieldInputBoxClass);\n\nexport { PhoneFieldInputBoxClass, componentName };\n","import parsePhoneNumberFromString from 'libphonenumber-js/min';\nimport CountryCodes from './CountryCodes';\n\nexport const getCountryByCodeId = (countryCode) =>\n CountryCodes.find((c) => c.code === countryCode)?.dialCode;\n\nexport const matchingParenthesis = (val) => {\n const openParenMatches = val.match(/\\(/g);\n const closeParenMatches = val.match(/\\)/g);\n return openParenMatches?.length === closeParenMatches?.length;\n};\n"],"names":["emailField","moduleId","emailFieldStyles","EmailField","is","constructor","super","this","_setType","pattern","ready","inputElement","autocapitalize","componentName","EmailFieldClass","mappings","textFieldMappings","inputType","inputName","autocompleteType","includeAttrs","proxyProps","useProxyTargets","superclass","init","baseElement","setAttribute","getAttribute","createExternalInput","slots","wrappedEleName","style","cssVarList","inputOutlineWidth","inputOutlineOffset","excludeAttrsSync","customElements","define","INVALID_PHONE_CHARS_RE","attrs","shared","email","phone","countryCode","inputBox","attrMap","PHONE_FIELD","BaseClass","createBaseClass","baseSelector","HybridFieldClass","componentNameOverride","hostWidth","selector","property","hostDirection","errorMessageIcon","PhoneFieldClass","PhoneFieldInputBoxClass","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","labelFontWeight","inputValueFontWeight","inputPlaceholderFontWeight","helperTextFontWeight","errorMessageFontWeight","attachShadow","mode","innerHTML","isExternalInput","emailInputEle","emailInput","externalInput","phoneVariant","phoneInputBoxInput","phoneCountryCodeInput","defaultCode","firstItem","countryCodes","activeInputEle","activeInput","phoneNumberInputEle","value","val","handleActiveInput","setTimeout","initInputs","updateAttrs","toggleInputVisibility","waitForInputs","initInputEles","overrideEmailInputType","overrideEmailSetAttribute","Promise","resolve","check","setInterval","clearInterval","shadowRoot","querySelector","inputs","forEach","ele","addEventListener","onValueChange","bind","origEmailSetAttr","name","hasAttribute","mapAttrs","input","selectionStart","expectedActiveInput","test","isNumericValue","setActiveInput","setActiveInputValue","reportValidity","setActiveInputSelectionStart","focus","setSelectionRange","code","match","CountryCodes","find","c","dialCode","sanitizedVal","replace","localName","countryCodeItems","classList","add","remove","origInputType","type","length","checkValidity","textVars","host","label","requiredIndicator","inputField","internalComponent","internalComponentAfter","phoneInput","errorMessage","helperText","placeholder","fontSize","fontFamily","hostMinWidth","inputHorizontalPadding","labelFontSize","labelTextColor","labelRequiredIndicator","errorMessageTextColor","inputValueTextColor","inputPlaceholderTextColor","inputPlaceholderColor","inputBorderStyle","inputBorderWidth","inputBorderColor","inputBorderRadius","inputOutlineStyle","inputOutlineColor","labelPosition","labelTopPosition","labelHorizontalPosition","inputTransformY","inputTransition","marginInlineStart","valueInputHeight","valueInputMarginBottom","template","document","createElement","appendChild","content","cloneNode","observedAttributes","BaseInputClass","concat","textField","defaultDialCode","allowAlphanumericInput","minLength","parseInt","maxLength","restrictCountries","split","filter","Boolean","isFormatValue","isStrictValidation","parsedVal","country","countryCallingCode","nationalNumber","join","e","isTrusted","handleFocusEventsDispatching","getValidity","validPhonePattern","stripValue","isRequired","valueMissing","tooShort","patternMismatch","args","attributeChangedCallback","attrName","oldValue","newValue","includes","attr","sanitizedInput","target","dialCodePrefixPattern","RegExp","parsed","isValid","telDigitsRegExp","char","phoneNumber","reset","getCountryByCodeId","matchingParenthesis","openParenMatches","closeParenMatches"],"sourceRoot":""}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/*! For license information please see descope-month-day-field-picker.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[1104,5691],{92661(t,e,n){n.r(e),n.d(e,{MonthDayFieldPickerClass:()=>v,componentName:()=>d}),n(27092);var o=n(72270),i=n(63200),a=n(25964),s=n(88961);const r=[31,29,31,30,31,30,31,31,30,31,30,31],l=["January","February","March","April","May","June","July","August","September","October","November","December"],d=(0,a.xE)("month-day-field-picker"),h=["initial-value","picker-months","st-host-direction","disabled","full-width"],u=(0,o.yc)({componentName:d,baseSelector:"div"}),p=(t,e)=>{const n=document.createDocumentFragment();t.forEach(({id:t,name:e})=>{const o=document.createElement("div");o.className="combo-box-item",o.setAttribute("data-id",String(t)),o.setAttribute("data-name",e),o.textContent=e,n.appendChild(o)}),e.replaceChildren(n)},{picker:c,monthInput:m,dayInput:b,inputsRow:y}={picker:{selector:()=>".picker"},monthInput:{selector:()=>".month-input"},dayInput:{selector:()=>".day-input"},inputsRow:{selector:()=>".inputs-row"}},v=(0,i.Zz)((0,s.RF)({componentNameOverride:(0,a.xE)("input-wrapper")}),(0,s.RF)({mappings:{fontSize:{},fontFamily:{},hostWidth:{selector:()=>":host",property:"width"},hostDirection:{property:"direction"},pickerPadding:{...c,property:"padding"},inputsRowGap:{...y,property:"gap"},inputWidth:[{...m,property:"width"},{...b,property:"width"}]}}),s.VO,s.tQ)(class extends u{static get observedAttributes(){return[].concat(u.observedAttributes||[],h)}#t=null;#e=null;constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <div class="picker">\n <div class="inputs-row">\n <descope-combo-box\n class="month-input"\n bordered="true"\n label-type="static"\n allow-custom-value="false"\n full-width="true"\n item-label-path="data-name"\n item-value-path="data-id"\n ></descope-combo-box>\n <descope-combo-box\n class="day-input"\n bordered="true"\n label-type="static"\n allow-custom-value="false"\n full-width="true"\n item-label-path="data-name"\n item-value-path="data-id"\n ></descope-combo-box>\n </div>\n </div>\n ',(0,a.fz)("\n :host {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .inputs-row {\n display: flex;\n }\n\n .inputs-row > descope-combo-box {\n flex: 1;\n min-width: 0;\n }\n ",this),this.monthInput=this.shadowRoot.querySelector(".month-input"),this.dayInput=this.shadowRoot.querySelector(".day-input")}get month(){return this.#t}set month(t){const e=Number(t);!Number.isInteger(e)||e<1||e>12?this.#t=null:this.#t=e,null!=this.#e&&null!=this.#t&&this.#e>r[this.#t-1]&&(this.#e=1),this.#n(),this.#o(),this.#i(),this.#a()}get day(){return this.#e}set day(t){const e=Number(t);!Number.isInteger(e)||e<1||null!=this.#t&&e>r[this.#t-1]?this.#e=null:this.#e=e,this.#i(),this.#a()}set value(t){if(!t)return void this.#s();const e=/^(0?[1-9]|1[0-2])\D(0?[1-9]|[12][0-9]|3[01])$/.exec(String(t).trim());if(!e)return;const n=Number(e[1]),o=Number(e[2]);this.month=n,this.day=o}#s(){const t=new Date;this.month=t.getMonth()+1,this.day=t.getDate()}get value(){return null==this.#t||null==this.#e?"":`${String(this.#t).padStart(2,"0")}/${String(this.#e).padStart(2,"0")}`}init(){super.init?.(),this.#r(),this.#l();const t=this.getAttribute("initial-value");t?this.value=t:null==this.#t&&this.#s(),(0,a.EA)(this,this.monthInput,{includeAttrs:["disabled","size","st-host-direction"]}),(0,a.EA)(this,this.dayInput,{includeAttrs:["disabled","size","st-host-direction"]})}attributeChangedCallback(t,e,n){super.attributeChangedCallback?.(t,e,n),e!==n&&("initial-value"===t?this.value=n:"picker-months"===t&&this.#d())}get#h(){return(t=>{const e=t?.split(",");return(t=>Array.isArray(t)&&12===t.length&&12===t.filter(Boolean).length)(e)?e:l})(this.getAttribute("picker-months"))}#r(){this.#d(),this.monthInput.addEventListener("input",this.#u.bind(this))}#l(){this.dayInput.addEventListener("input",this.#p.bind(this))}#d(){p(this.#h.map((t,e)=>({id:e+1,name:t})),this.monthInput),this.#n()}#o(){const t=r[this.#t-1]??0;p((t=>Array.from({length:t},(t,e)=>({id:e+1,name:String(e+1)})))(t),this.dayInput)}#n(){this.monthInput&&setTimeout(()=>{this.monthInput&&(this.monthInput.value=null!=this.#t?String(this.#t):"")})}#i(){setTimeout(()=>{this.dayInput&&(this.dayInput.value=null!==this.#e?String(this.#e):"")})}#u(t){const e=t.target?.value,n=e?Number(e):null;n!==this.#t&&(this.month=n)}#p(t){const e=t.target?.value,n=e?Number(e):null;n!==this.#e&&(this.day=n)}#a(){this.dispatchEvent(new CustomEvent("change",{detail:{month:this.#t,day:this.#e},bubbles:!0,composed:!0}))}getValidity(){return{}}});customElements.define(d,v)},1632(t,e,n){n(52915),n(54886),n(27397),n(25244);var o=n(47642),i=n(87550);const a=i.AH`
|
|
3
|
+
:host {
|
|
4
|
+
outline: none;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[part='toggle-button']::before {
|
|
8
|
+
content: var(--lumo-icons-dropdown);
|
|
9
|
+
}
|
|
10
|
+
`;(0,i.SF)("vaadin-combo-box",[o.k,a],{moduleId:"lumo-combo-box"}),n(86689);var s=n(13256),r=n(82901),l=n(23927),d=n(79769);class h extends((0,d.y)((0,i.cp)((0,l.v)(s.Pu)))){static get template(){return s.qy`
|
|
11
|
+
<style>
|
|
12
|
+
:host {
|
|
13
|
+
display: block;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
:host([hidden]) {
|
|
17
|
+
display: none;
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
20
|
+
<span part="checkmark" aria-hidden="true"></span>
|
|
21
|
+
<div part="content">
|
|
22
|
+
<slot></slot>
|
|
23
|
+
</div>
|
|
24
|
+
`}static get is(){return"vaadin-combo-box-item"}}(0,r.X)(h);var u=n(58069),p=n(5072),c=n(32888);const m=i.AH`
|
|
25
|
+
#overlay {
|
|
26
|
+
width: var(--vaadin-combo-box-overlay-width, var(--_vaadin-combo-box-overlay-default-width, auto));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
[part='content'] {
|
|
30
|
+
display: flex;
|
|
31
|
+
flex-direction: column;
|
|
32
|
+
height: 100%;
|
|
33
|
+
}
|
|
34
|
+
`;(0,i.SF)("vaadin-combo-box-overlay",[p.B,m],{moduleId:"vaadin-combo-box-overlay-styles"});class b extends((0,c.p)((0,u.c)((0,l.v)((0,i.cp)(s.Pu))))){static get is(){return"vaadin-combo-box-overlay"}static get template(){return s.qy`
|
|
35
|
+
<div id="backdrop" part="backdrop" hidden></div>
|
|
36
|
+
<div part="overlay" id="overlay">
|
|
37
|
+
<div part="loader"></div>
|
|
38
|
+
<div part="content" id="content"><slot></slot></div>
|
|
39
|
+
</div>
|
|
40
|
+
`}}(0,r.X)(b);var y=n(70616);class v extends((0,y.N)(s.Pu)){static get is(){return"vaadin-combo-box-scroller"}static get template(){return s.qy`
|
|
41
|
+
<style>
|
|
42
|
+
:host {
|
|
43
|
+
display: block;
|
|
44
|
+
min-height: 1px;
|
|
45
|
+
overflow: auto;
|
|
46
|
+
|
|
47
|
+
/* Fixes item background from getting on top of scrollbars on Safari */
|
|
48
|
+
transform: translate3d(0, 0, 0);
|
|
49
|
+
|
|
50
|
+
/* Enable momentum scrolling on iOS */
|
|
51
|
+
-webkit-overflow-scrolling: touch;
|
|
52
|
+
|
|
53
|
+
/* Fixes scrollbar disappearing when 'Show scroll bars: Always' enabled in Safari */
|
|
54
|
+
box-shadow: 0 0 0 white;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#selector {
|
|
58
|
+
border-width: var(--_vaadin-combo-box-items-container-border-width);
|
|
59
|
+
border-style: var(--_vaadin-combo-box-items-container-border-style);
|
|
60
|
+
border-color: var(--_vaadin-combo-box-items-container-border-color, transparent);
|
|
61
|
+
position: relative;
|
|
62
|
+
}
|
|
63
|
+
</style>
|
|
64
|
+
<div id="selector">
|
|
65
|
+
<slot></slot>
|
|
66
|
+
</div>
|
|
67
|
+
`}}(0,r.X)(v);var g=n(72562),x=n(81488),w=n(44218),f=n(18330),I=n(37720),k=n(83304);const C=t=>class extends((0,k.U)(t)){static get properties(){return{pattern:{type:String}}}static get delegateAttrs(){return[...super.delegateAttrs,"pattern"]}static get constraints(){return[...super.constraints,"pattern"]}};var _=n(86314),S=n(11402),A=n(65909);(0,i.SF)("vaadin-combo-box",_.k,{moduleId:"vaadin-combo-box-styles"});class E extends((0,S.K)((0,A.x)(C((0,w.R)((0,i.cp)((0,g.q)(s.Pu))))))){static get is(){return"vaadin-combo-box"}static get template(){return s.qy`
|
|
68
|
+
<style>
|
|
69
|
+
:host([opened]) {
|
|
70
|
+
pointer-events: auto;
|
|
71
|
+
}
|
|
72
|
+
</style>
|
|
73
|
+
|
|
74
|
+
<div class="vaadin-combo-box-container">
|
|
75
|
+
<div part="label">
|
|
76
|
+
<slot name="label"></slot>
|
|
77
|
+
<span part="required-indicator" aria-hidden="true" on-click="focus"></span>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<vaadin-input-container
|
|
81
|
+
part="input-field"
|
|
82
|
+
readonly="[[readonly]]"
|
|
83
|
+
disabled="[[disabled]]"
|
|
84
|
+
invalid="[[invalid]]"
|
|
85
|
+
theme$="[[_theme]]"
|
|
86
|
+
>
|
|
87
|
+
<slot name="prefix" slot="prefix"></slot>
|
|
88
|
+
<slot name="input"></slot>
|
|
89
|
+
<div id="clearButton" part="clear-button" slot="suffix" aria-hidden="true"></div>
|
|
90
|
+
<div id="toggleButton" part="toggle-button" slot="suffix" aria-hidden="true"></div>
|
|
91
|
+
</vaadin-input-container>
|
|
92
|
+
|
|
93
|
+
<div part="helper-text">
|
|
94
|
+
<slot name="helper"></slot>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div part="error-message">
|
|
98
|
+
<slot name="error-message"></slot>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<vaadin-combo-box-overlay
|
|
103
|
+
id="overlay"
|
|
104
|
+
opened="[[_overlayOpened]]"
|
|
105
|
+
loading$="[[loading]]"
|
|
106
|
+
theme$="[[_theme]]"
|
|
107
|
+
position-target="[[_positionTarget]]"
|
|
108
|
+
no-vertical-overlap
|
|
109
|
+
restore-focus-node="[[inputElement]]"
|
|
110
|
+
></vaadin-combo-box-overlay>
|
|
111
|
+
|
|
112
|
+
<slot name="tooltip"></slot>
|
|
113
|
+
`}static get properties(){return{_positionTarget:{type:Object}}}get clearElement(){return this.$.clearButton}ready(){super.ready(),this.addController(new f.f(this,t=>{this._setInputElement(t),this._setFocusElement(t),this.stateTarget=t,this.ariaTarget=t})),this.addController(new I.q(this.inputElement,this._labelController)),this._tooltipController=new x.I(this),this.addController(this._tooltipController),this._tooltipController.setPosition("top"),this._tooltipController.setAriaTarget(this.inputElement),this._tooltipController.setShouldShow(t=>!t.opened),this._positionTarget=this.shadowRoot.querySelector('[part="input-field"]'),this._toggleElement=this.$.toggleButton}_onClearButtonClick(t){t.stopPropagation(),super._onClearButtonClick(t)}_onHostClick(t){const e=t.composedPath();(e.includes(this._labelNode)||e.includes(this._positionTarget))&&super._onHostClick(t)}}(0,r.X)(E)}}]);
|
|
114
|
+
//# sourceMappingURL=descope-month-day-field-picker.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) 2015 - 2023 Vaadin Ltd.
|
|
4
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @license
|
|
9
|
+
* Copyright (c) 2021 - 2023 Vaadin Ltd.
|
|
10
|
+
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
11
|
+
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descope-month-day-field-picker.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/consts.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/MonthDayFieldPickerClass.js","webpack://@descope/web-components-ui/../components/descope-month-day-field-picker/src/component/index.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/theme/lumo/vaadin-combo-box-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-item.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-overlay.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-scroller.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/field-base/src/pattern-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box.js"],"sourcesContent":["// February shows 29 days even though Feb 29 only exists in leap years —\n// the picker intentionally has no year, so Feb 29 is unconditionally allowed.\nexport const DAYS_PER_MONTH = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nexport const months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n","import { createBaseInputClass } from '@descope-ui/common/base-classes';\nimport { compose } from '@descope-ui/common/utils';\nimport {\n forwardAttrs,\n getComponentName,\n injectStyle,\n} from '@descope-ui/common/components-helpers';\nimport {\n componentNameValidationMixin,\n createStyleMixin,\n draggableMixin,\n} from '@descope-ui/common/components-mixins';\n\nimport { DAYS_PER_MONTH, months as DEFAULT_MONTHS } from './consts';\n\nexport const componentName = getComponentName('month-day-field-picker');\n\nconst observedAttrs = [\n 'initial-value',\n 'picker-months',\n 'st-host-direction',\n 'disabled',\n 'full-width',\n];\n\nconst BaseInputClass = createBaseInputClass({\n componentName,\n baseSelector: 'div',\n});\n\nconst isValidMonthNamesArr = (arr) =>\n Array.isArray(arr) && arr.length === 12 && arr.filter(Boolean).length === 12;\n\nconst ensureMonthNamesArr = (attrVal) => {\n const arr = attrVal?.split(',');\n return isValidMonthNamesArr(arr) ? arr : DEFAULT_MONTHS;\n};\n\n// Build descope-combo-box items via DOM (textContent / setAttribute) rather than an\n// innerHTML template. picker-months is a user-facing attribute (localized strings,\n// admin-configured copy) so labels must never be parsed as HTML.\nconst buildOptions = (entries, parent) => {\n const fragment = document.createDocumentFragment();\n entries.forEach(({ id, name }) => {\n const item = document.createElement('div');\n item.className = 'combo-box-item';\n item.setAttribute('data-id', String(id));\n item.setAttribute('data-name', name);\n item.textContent = name;\n fragment.appendChild(item);\n });\n parent.replaceChildren(fragment);\n};\n\nconst monthEntries = (names) =>\n names.map((name, idx) => ({ id: idx + 1, name }));\n\nconst dayEntries = (count) =>\n Array.from({ length: count }, (_, i) => ({ id: i + 1, name: String(i + 1) }));\n\nclass RawMonthDayPicker extends BaseInputClass {\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttrs);\n }\n\n // 1..12 or null\n #month = null;\n\n // 1..N (N depends on month) or null\n #day = null;\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div class=\"picker\">\n <div class=\"inputs-row\">\n <descope-combo-box\n class=\"month-input\"\n bordered=\"true\"\n label-type=\"static\"\n allow-custom-value=\"false\"\n full-width=\"true\"\n item-label-path=\"data-name\"\n item-value-path=\"data-id\"\n ></descope-combo-box>\n <descope-combo-box\n class=\"day-input\"\n bordered=\"true\"\n label-type=\"static\"\n allow-custom-value=\"false\"\n full-width=\"true\"\n item-label-path=\"data-name\"\n item-value-path=\"data-id\"\n ></descope-combo-box>\n </div>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n user-select: none;\n -webkit-user-select: none;\n }\n\n .inputs-row {\n display: flex;\n }\n\n .inputs-row > descope-combo-box {\n flex: 1;\n min-width: 0;\n }\n `,\n this,\n );\n\n // Bind refs here so attributeChangedCallback (which fires before init) can\n // render into the combos instead of bailing on unbound refs and being redone.\n this.monthInput = this.shadowRoot.querySelector('.month-input');\n this.dayInput = this.shadowRoot.querySelector('.day-input');\n }\n\n // ---- public API ----\n\n get month() {\n return this.#month;\n }\n\n set month(val) {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1 || n > 12) {\n this.#month = null;\n } else {\n this.#month = n;\n }\n // If the previously selected day no longer exists in the newly selected month\n // (e.g. April 30 → February), reset to day 1. Days that still fit are kept\n // (e.g. April 30 → January keeps 30).\n if (\n this.#day != null &&\n this.#month != null &&\n this.#day > DAYS_PER_MONTH[this.#month - 1]\n ) {\n this.#day = 1;\n }\n this.#syncMonthInput();\n this.#renderDayOptions();\n this.#syncDayInput();\n this.#dispatchChange();\n }\n\n get day() {\n return this.#day;\n }\n\n set day(val) {\n const n = Number(val);\n if (!Number.isInteger(n) || n < 1) {\n this.#day = null;\n } else if (this.#month != null && n > DAYS_PER_MONTH[this.#month - 1]) {\n this.#day = null;\n } else {\n this.#day = n;\n }\n this.#syncDayInput();\n this.#dispatchChange();\n }\n\n /**\n * Sets both month and day from a string `\"MM/DD\"`. Empty / null / undefined resets to\n * today's date (current real-world month + current day). Other formats are silently ignored.\n */\n set value(val) {\n if (!val) {\n this.#defaultToToday();\n return;\n }\n const match = /^(0?[1-9]|1[0-2])\\D(0?[1-9]|[12][0-9]|3[01])$/.exec(\n String(val).trim(),\n );\n if (!match) return;\n const m = Number(match[1]);\n const d = Number(match[2]);\n this.month = m;\n // Re-assign day after month so the DAYS_PER_MONTH ceiling check uses the new month.\n this.day = d;\n }\n\n #defaultToToday() {\n const now = new Date();\n this.month = now.getMonth() + 1;\n this.day = now.getDate();\n }\n\n /** Returns `\"MM/DD\"` when both values are set; empty string otherwise. */\n get value() {\n if (this.#month == null || this.#day == null) return '';\n return `${String(this.#month).padStart(2, '0')}/${String(this.#day).padStart(2, '0')}`;\n }\n\n // ---- lifecycle ----\n\n init() {\n super.init?.();\n\n this.#initMonthInput();\n this.#initDayInput();\n\n // If we have neither initial-value nor an explicit month, default to today's date\n // (current real-world month + current day). The month/day setters paint the combos.\n const initial = this.getAttribute('initial-value');\n if (initial) {\n this.value = initial;\n } else if (this.#month == null) {\n this.#defaultToToday();\n }\n\n forwardAttrs(this, this.monthInput, {\n includeAttrs: ['disabled', 'size', 'st-host-direction'],\n });\n forwardAttrs(this, this.dayInput, {\n includeAttrs: ['disabled', 'size', 'st-host-direction'],\n });\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n super.attributeChangedCallback?.(name, oldVal, newVal);\n if (oldVal === newVal) return;\n\n if (name === 'initial-value') {\n this.value = newVal;\n } else if (name === 'picker-months') {\n this.#renderMonthOptions();\n }\n }\n\n // ---- internals ----\n\n get #monthNames() {\n return ensureMonthNamesArr(this.getAttribute('picker-months'));\n }\n\n #initMonthInput() {\n this.#renderMonthOptions();\n this.monthInput.addEventListener('input', this.#onMonthChange.bind(this));\n }\n\n #initDayInput() {\n // Day options are populated lazily — they depend on the selected month.\n this.dayInput.addEventListener('input', this.#onDayChange.bind(this));\n }\n\n #renderMonthOptions() {\n buildOptions(monthEntries(this.#monthNames), this.monthInput);\n this.#syncMonthInput();\n }\n\n #renderDayOptions() {\n const count = DAYS_PER_MONTH[this.#month - 1] ?? 0;\n buildOptions(dayEntries(count), this.dayInput);\n }\n\n #syncMonthInput() {\n if (!this.monthInput) return;\n // Defer one tick: descope-combo-box indexes its options via MutationObserver\n // (microtask). Setting `.value` synchronously right after appending options\n // silently fails to select an item, leaving the combo empty. Calendar uses\n // the same setTimeout workaround for its year input.\n setTimeout(() => {\n if (!this.monthInput) return;\n this.monthInput.value = this.#month != null ? String(this.#month) : '';\n });\n }\n\n #syncDayInput() {\n // Same microtask deferral as #syncMonthInput: the combo-box indexes its options\n // via MutationObserver, so setting `.value` synchronously after rendering options\n // silently no-ops.\n setTimeout(() => {\n if (!this.dayInput) return;\n this.dayInput.value = this.#day !== null ? String(this.#day) : '';\n });\n }\n\n #onMonthChange(e) {\n const raw = e.target?.value;\n const next = raw ? Number(raw) : null;\n if (next === this.#month) return;\n this.month = next;\n }\n\n #onDayChange(e) {\n const raw = e.target?.value;\n const next = raw ? Number(raw) : null;\n if (next === this.#day) return;\n this.day = next;\n }\n\n // Emitted on every month/day mutation (user or programmatic) so a host can observe\n // the picker's value/validity — e.g. to drive an external submit button's enabled\n // state. The host (descope-month-day-field) owns the Done/Cancel buttons.\n #dispatchChange() {\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { month: this.#month, day: this.#day },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n // The picker is popover content, not a form field, so it has no validation semantics.\n // Returning an empty validity object satisfies inputValidationMixin (the base class\n // default returns undefined and crashes the mixin's getErrorMessage destructure).\n getValidity() {\n return {};\n }\n}\n\nconst { picker, monthInput, dayInput, inputsRow } = {\n picker: { selector: () => '.picker' },\n monthInput: { selector: () => '.month-input' },\n dayInput: { selector: () => '.day-input' },\n inputsRow: { selector: () => '.inputs-row' },\n};\n\nexport const MonthDayFieldPickerClass = compose(\n createStyleMixin({\n componentNameOverride: getComponentName('input-wrapper'),\n }),\n createStyleMixin({\n mappings: {\n fontSize: {},\n fontFamily: {},\n hostWidth: { selector: () => ':host', property: 'width' },\n hostDirection: { property: 'direction' },\n\n pickerPadding: { ...picker, property: 'padding' },\n\n inputsRowGap: { ...inputsRow, property: 'gap' },\n inputWidth: [\n { ...monthInput, property: 'width' },\n { ...dayInput, property: 'width' },\n ],\n },\n }),\n draggableMixin,\n componentNameValidationMixin,\n)(RawMonthDayPicker);\n","import '@descope-ui/descope-combo-box';\n\nimport {\n componentName,\n MonthDayFieldPickerClass,\n} from './MonthDayFieldPickerClass';\n\ncustomElements.define(componentName, MonthDayFieldPickerClass);\n\nexport { MonthDayFieldPickerClass, componentName };\n","import '@vaadin/input-container/theme/lumo/vaadin-input-container-styles.js';\nimport '@vaadin/vaadin-lumo-styles/font-icons.js';\nimport { inputFieldShared } from '@vaadin/vaadin-lumo-styles/mixins/input-field-shared.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst comboBox = css`\n :host {\n outline: none;\n }\n\n [part='toggle-button']::before {\n content: var(--lumo-icons-dropdown);\n }\n`;\n\nregisterStyles('vaadin-combo-box', [inputFieldShared, comboBox], { moduleId: 'lumo-combo-box' });\n","/**\n * @license\n * Copyright (c) 2015 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { html, PolymerElement } from '@polymer/polymer/polymer-element.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';\nimport { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ComboBoxItemMixin } from './vaadin-combo-box-item-mixin.js';\n\n/**\n * An item element used by the `<vaadin-combo-box>` dropdown.\n *\n * ### Styling\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ------------|--------------\n * `checkmark` | The graphical checkmark shown for a selected item\n * `content` | The element that wraps the item content\n *\n * The following state attributes are exposed for styling:\n *\n * Attribute | Description\n * -------------|-------------\n * `selected` | Set when the item is selected\n * `focused` | Set when the item is focused\n *\n * See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.\n *\n * @customElement\n * @mixes ComboBoxItemMixin\n * @mixes ThemableMixin\n * @mixes DirMixin\n * @private\n */\nexport class ComboBoxItem extends ComboBoxItemMixin(ThemableMixin(DirMixin(PolymerElement))) {\n static get template() {\n return html`\n <style>\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none;\n }\n </style>\n <span part=\"checkmark\" aria-hidden=\"true\"></span>\n <div part=\"content\">\n <slot></slot>\n </div>\n `;\n }\n\n static get is() {\n return 'vaadin-combo-box-item';\n }\n}\n\ndefineCustomElement(ComboBoxItem);\n","/**\n * @license\n * Copyright (c) 2015 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { html, PolymerElement } from '@polymer/polymer/polymer-element.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { DirMixin } from '@vaadin/component-base/src/dir-mixin.js';\nimport { OverlayMixin } from '@vaadin/overlay/src/vaadin-overlay-mixin.js';\nimport { overlayStyles } from '@vaadin/overlay/src/vaadin-overlay-styles.js';\nimport { css, registerStyles, ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ComboBoxOverlayMixin } from './vaadin-combo-box-overlay-mixin.js';\n\nconst comboBoxOverlayStyles = css`\n #overlay {\n width: var(--vaadin-combo-box-overlay-width, var(--_vaadin-combo-box-overlay-default-width, auto));\n }\n\n [part='content'] {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n`;\n\nregisterStyles('vaadin-combo-box-overlay', [overlayStyles, comboBoxOverlayStyles], {\n moduleId: 'vaadin-combo-box-overlay-styles',\n});\n\n/**\n * An element used internally by `<vaadin-combo-box>`. Not intended to be used separately.\n *\n * @customElement\n * @extends HTMLElement\n * @mixes ComboBoxOverlayMixin\n * @mixes DirMixin\n * @mixes OverlayMixin\n * @mixes ThemableMixin\n * @private\n */\nexport class ComboBoxOverlay extends ComboBoxOverlayMixin(OverlayMixin(DirMixin(ThemableMixin(PolymerElement)))) {\n static get is() {\n return 'vaadin-combo-box-overlay';\n }\n\n static get template() {\n return html`\n <div id=\"backdrop\" part=\"backdrop\" hidden></div>\n <div part=\"overlay\" id=\"overlay\">\n <div part=\"loader\"></div>\n <div part=\"content\" id=\"content\"><slot></slot></div>\n </div>\n `;\n }\n}\n\ndefineCustomElement(ComboBoxOverlay);\n","/**\n * @license\n * Copyright (c) 2015 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { html, PolymerElement } from '@polymer/polymer/polymer-element.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { ComboBoxScrollerMixin } from './vaadin-combo-box-scroller-mixin.js';\n\n/**\n * An element used internally by `<vaadin-combo-box>`. Not intended to be used separately.\n *\n * @customElement\n * @extends HTMLElement\n * @mixes ComboBoxScrollerMixin\n * @private\n */\nexport class ComboBoxScroller extends ComboBoxScrollerMixin(PolymerElement) {\n static get is() {\n return 'vaadin-combo-box-scroller';\n }\n\n static get template() {\n return html`\n <style>\n :host {\n display: block;\n min-height: 1px;\n overflow: auto;\n\n /* Fixes item background from getting on top of scrollbars on Safari */\n transform: translate3d(0, 0, 0);\n\n /* Enable momentum scrolling on iOS */\n -webkit-overflow-scrolling: touch;\n\n /* Fixes scrollbar disappearing when 'Show scroll bars: Always' enabled in Safari */\n box-shadow: 0 0 0 white;\n }\n\n #selector {\n border-width: var(--_vaadin-combo-box-items-container-border-width);\n border-style: var(--_vaadin-combo-box-items-container-border-style);\n border-color: var(--_vaadin-combo-box-items-container-border-color, transparent);\n position: relative;\n }\n </style>\n <div id=\"selector\">\n <slot></slot>\n </div>\n `;\n }\n}\n\ndefineCustomElement(ComboBoxScroller);\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { InputConstraintsMixin } from './input-constraints-mixin.js';\n\n/**\n * A mixin to provide `pattern` property.\n *\n * @polymerMixin\n * @mixes InputConstraintsMixin\n */\nexport const PatternMixin = (superclass) =>\n class PatternMixinClass extends InputConstraintsMixin(superclass) {\n static get properties() {\n return {\n /**\n * A regular expression that the value is checked against.\n * The pattern must match the entire value, not just some subset.\n */\n pattern: {\n type: String,\n },\n };\n }\n\n static get delegateAttrs() {\n return [...super.delegateAttrs, 'pattern'];\n }\n\n static get constraints() {\n return [...super.constraints, 'pattern'];\n }\n };\n","/**\n * @license\n * Copyright (c) 2015 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport '@vaadin/input-container/src/vaadin-input-container.js';\nimport './vaadin-combo-box-item.js';\nimport './vaadin-combo-box-overlay.js';\nimport './vaadin-combo-box-scroller.js';\nimport { html, PolymerElement } from '@polymer/polymer/polymer-element.js';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';\nimport { TooltipController } from '@vaadin/component-base/src/tooltip-controller.js';\nimport { InputControlMixin } from '@vaadin/field-base/src/input-control-mixin.js';\nimport { InputController } from '@vaadin/field-base/src/input-controller.js';\nimport { LabelledInputController } from '@vaadin/field-base/src/labelled-input-controller.js';\nimport { PatternMixin } from '@vaadin/field-base/src/pattern-mixin.js';\nimport { inputFieldShared } from '@vaadin/field-base/src/styles/input-field-shared-styles.js';\nimport { registerStyles, ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { ComboBoxDataProviderMixin } from './vaadin-combo-box-data-provider-mixin.js';\nimport { ComboBoxMixin } from './vaadin-combo-box-mixin.js';\n\nregisterStyles('vaadin-combo-box', inputFieldShared, { moduleId: 'vaadin-combo-box-styles' });\n\n/**\n * `<vaadin-combo-box>` is a web component for choosing a value from a filterable list of options\n * presented in a dropdown overlay. The options can be provided as a list of strings or objects\n * by setting [`items`](#/elements/vaadin-combo-box#property-items) property on the element.\n *\n * ```html\n * <vaadin-combo-box id=\"combo-box\"></vaadin-combo-box>\n * ```\n *\n * ```js\n * document.querySelector('#combo-box').items = ['apple', 'orange', 'banana'];\n * ```\n *\n * When the selected `value` is changed, a `value-changed` event is triggered.\n *\n * ### Item rendering\n *\n * To customize the content of the `<vaadin-combo-box-item>` elements placed in the dropdown, use\n * [`renderer`](#/elements/vaadin-combo-box#property-renderer) property which accepts a function.\n * The renderer function is called with `root`, `comboBox`, and `model` as arguments.\n *\n * Generate DOM content by using `model` object properties if needed, and append it to the `root`\n * element. The `comboBox` reference is provided to access the combo-box element state. Do not\n * set combo-box properties in a `renderer` function.\n *\n * ```js\n * const comboBox = document.querySelector('#combo-box');\n * comboBox.items = [{'label': 'Hydrogen', 'value': 'H'}];\n * comboBox.renderer = (root, comboBox, model) => {\n * const item = model.item;\n * root.innerHTML = `${model.index}: ${item.label} <b>${item.value}</b>`;\n * };\n * ```\n *\n * Renderer is called on the opening of the combo-box and each time the related model is updated.\n * Before creating new content, it is recommended to check if there is already an existing DOM\n * element in `root` from a previous renderer call for reusing it. Even though combo-box uses\n * infinite scrolling, reducing DOM operations might improve performance.\n *\n * The following properties are available in the `model` argument:\n *\n * Property | Type | Description\n * -----------|------------------|-------------\n * `index` | Number | Index of the item in the `items` array\n * `item` | String or Object | The item reference\n * `selected` | Boolean | True when item is selected\n * `focused` | Boolean | True when item is focused\n *\n * ### Lazy Loading with Function Data Provider\n *\n * In addition to assigning an array to the items property, you can alternatively use the\n * [`dataProvider`](#/elements/vaadin-combo-box#property-dataProvider) function property.\n * The `<vaadin-combo-box>` calls this function lazily, only when it needs more data\n * to be displayed.\n *\n * __Note that when using function data providers, the total number of items\n * needs to be set manually. The total number of items can be returned\n * in the second argument of the data provider callback:__\n *\n * ```js\n * comboBox.dataProvider = async (params, callback) => {\n * const API = 'https://demo.vaadin.com/demo-data/1.0/filtered-countries';\n * const { filter, page, pageSize } = params;\n * const index = page * pageSize;\n *\n * const res = await fetch(`${API}?index=${index}&count=${pageSize}&filter=${filter}`);\n * if (res.ok) {\n * const { result, size } = await res.json();\n * callback(result, size);\n * }\n * };\n * ```\n *\n * ### Styling\n *\n * The following custom properties are available for styling:\n *\n * Custom property | Description | Default\n * ----------------------------------------|----------------------------|---------\n * `--vaadin-field-default-width` | Default width of the field | `12em`\n * `--vaadin-combo-box-overlay-width` | Width of the overlay | `auto`\n * `--vaadin-combo-box-overlay-max-height` | Max height of the overlay | `65vh`\n *\n * `<vaadin-combo-box>` provides the same set of shadow DOM parts and state attributes as `<vaadin-text-field>`.\n * See [`<vaadin-text-field>`](#/elements/vaadin-text-field) for the styling documentation.\n *\n * In addition to `<vaadin-text-field>` parts, the following parts are available for theming:\n *\n * Part name | Description\n * ----------------|----------------\n * `toggle-button` | The toggle button\n *\n * In addition to `<vaadin-text-field>` state attributes, the following state attributes are available for theming:\n *\n * Attribute | Description | Part name\n * ----------|-------------|------------\n * `opened` | Set when the combo box dropdown is open | :host\n * `loading` | Set when new items are expected | :host\n *\n * If you want to replace the default `<input>` and its container with a custom implementation to get full control\n * over the input field, consider using the [`<vaadin-combo-box-light>`](#/elements/vaadin-combo-box-light) element.\n *\n * ### Internal components\n *\n * In addition to `<vaadin-combo-box>` itself, the following internal\n * components are themable:\n *\n * - `<vaadin-combo-box-overlay>` - has the same API as [`<vaadin-overlay>`](#/elements/vaadin-overlay).\n * - `<vaadin-combo-box-item>` - has the same API as [`<vaadin-item>`](#/elements/vaadin-item).\n * - [`<vaadin-input-container>`](#/elements/vaadin-input-container) - an internal element wrapping the input.\n *\n * Note: the `theme` attribute value set on `<vaadin-combo-box>` is\n * propagated to the internal components listed above.\n *\n * See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.\n *\n * @fires {Event} change - Fired when the user commits a value change.\n * @fires {CustomEvent} custom-value-set - Fired when the user sets a custom value.\n * @fires {CustomEvent} filter-changed - Fired when the `filter` property changes.\n * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.\n * @fires {CustomEvent} opened-changed - Fired when the `opened` property changes.\n * @fires {CustomEvent} selected-item-changed - Fired when the `selectedItem` property changes.\n * @fires {CustomEvent} value-changed - Fired when the `value` property changes.\n * @fires {CustomEvent} validated - Fired whenever the field is validated.\n *\n * @customElement\n * @extends HTMLElement\n * @mixes ElementMixin\n * @mixes ThemableMixin\n * @mixes InputControlMixin\n * @mixes PatternMixin\n * @mixes ComboBoxDataProviderMixin\n * @mixes ComboBoxMixin\n */\nclass ComboBox extends ComboBoxDataProviderMixin(\n ComboBoxMixin(PatternMixin(InputControlMixin(ThemableMixin(ElementMixin(PolymerElement))))),\n) {\n static get is() {\n return 'vaadin-combo-box';\n }\n\n static get template() {\n return html`\n <style>\n :host([opened]) {\n pointer-events: auto;\n }\n </style>\n\n <div class=\"vaadin-combo-box-container\">\n <div part=\"label\">\n <slot name=\"label\"></slot>\n <span part=\"required-indicator\" aria-hidden=\"true\" on-click=\"focus\"></span>\n </div>\n\n <vaadin-input-container\n part=\"input-field\"\n readonly=\"[[readonly]]\"\n disabled=\"[[disabled]]\"\n invalid=\"[[invalid]]\"\n theme$=\"[[_theme]]\"\n >\n <slot name=\"prefix\" slot=\"prefix\"></slot>\n <slot name=\"input\"></slot>\n <div id=\"clearButton\" part=\"clear-button\" slot=\"suffix\" aria-hidden=\"true\"></div>\n <div id=\"toggleButton\" part=\"toggle-button\" slot=\"suffix\" aria-hidden=\"true\"></div>\n </vaadin-input-container>\n\n <div part=\"helper-text\">\n <slot name=\"helper\"></slot>\n </div>\n\n <div part=\"error-message\">\n <slot name=\"error-message\"></slot>\n </div>\n </div>\n\n <vaadin-combo-box-overlay\n id=\"overlay\"\n opened=\"[[_overlayOpened]]\"\n loading$=\"[[loading]]\"\n theme$=\"[[_theme]]\"\n position-target=\"[[_positionTarget]]\"\n no-vertical-overlap\n restore-focus-node=\"[[inputElement]]\"\n ></vaadin-combo-box-overlay>\n\n <slot name=\"tooltip\"></slot>\n `;\n }\n\n static get properties() {\n return {\n /**\n * @protected\n */\n _positionTarget: {\n type: Object,\n },\n };\n }\n\n /**\n * Used by `InputControlMixin` as a reference to the clear button element.\n * @protected\n * @return {!HTMLElement}\n */\n get clearElement() {\n return this.$.clearButton;\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this.addController(\n new InputController(this, (input) => {\n this._setInputElement(input);\n this._setFocusElement(input);\n this.stateTarget = input;\n this.ariaTarget = input;\n }),\n );\n this.addController(new LabelledInputController(this.inputElement, this._labelController));\n\n this._tooltipController = new TooltipController(this);\n this.addController(this._tooltipController);\n this._tooltipController.setPosition('top');\n this._tooltipController.setAriaTarget(this.inputElement);\n this._tooltipController.setShouldShow((target) => !target.opened);\n\n this._positionTarget = this.shadowRoot.querySelector('[part=\"input-field\"]');\n this._toggleElement = this.$.toggleButton;\n }\n\n /**\n * Override the method from `InputControlMixin`\n * to stop event propagation to prevent `ComboBoxMixin`\n * from handling this click event also on its own.\n *\n * @param {Event} event\n * @protected\n * @override\n */\n _onClearButtonClick(event) {\n event.stopPropagation();\n super._onClearButtonClick(event);\n }\n\n /**\n * @param {Event} event\n * @protected\n */\n _onHostClick(event) {\n const path = event.composedPath();\n\n // Open dropdown only when clicking on the label or input field\n if (path.includes(this._labelNode) || path.includes(this._positionTarget)) {\n super._onHostClick(event);\n }\n }\n}\n\ndefineCustomElement(ComboBox);\n\nexport { ComboBox };\n"],"names":["DAYS_PER_MONTH","months","componentName","observedAttrs","BaseInputClass","baseSelector","buildOptions","entries","parent","fragment","document","createDocumentFragment","forEach","id","name","item","createElement","className","setAttribute","String","textContent","appendChild","replaceChildren","picker","monthInput","dayInput","inputsRow","selector","MonthDayFieldPickerClass","componentNameOverride","mappings","fontSize","fontFamily","hostWidth","property","hostDirection","pickerPadding","inputsRowGap","inputWidth","observedAttributes","concat","constructor","super","this","attachShadow","mode","innerHTML","shadowRoot","querySelector","month","val","n","Number","isInteger","day","value","match","exec","trim","m","d","now","Date","getMonth","getDate","padStart","init","initial","getAttribute","includeAttrs","attributeChangedCallback","oldVal","newVal","attrVal","arr","split","Array","isArray","length","filter","Boolean","isValidMonthNamesArr","ensureMonthNamesArr","addEventListener","bind","map","idx","count","from","_","i","dayEntries","setTimeout","e","raw","target","next","dispatchEvent","CustomEvent","detail","bubbles","composed","getValidity","customElements","define","comboBox","moduleId","ComboBoxItem","template","is","comboBoxOverlayStyles","ComboBoxOverlay","ComboBoxScroller","PatternMixin","superclass","properties","pattern","type","delegateAttrs","constraints","ComboBox","_positionTarget","Object","clearElement","$","clearButton","ready","addController","input","_setInputElement","_setFocusElement","stateTarget","ariaTarget","inputElement","_labelController","_tooltipController","setPosition","setAriaTarget","setShouldShow","opened","_toggleElement","toggleButton","_onClearButtonClick","event","stopPropagation","_onHostClick","path","composedPath","includes","_labelNode"],"sourceRoot":""}
|