@descope/web-components-ui 1.32.0 → 1.33.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 +481 -364
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +524 -438
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/1408.js +382 -0
- package/dist/umd/1408.js.LICENSE.txt +17 -0
- package/dist/umd/1408.js.map +1 -0
- package/dist/umd/{9243.js → 1519.js} +7 -6
- package/dist/umd/1519.js.map +1 -0
- package/dist/umd/189.js +109 -276
- package/dist/umd/189.js.LICENSE.txt +12 -0
- package/dist/umd/189.js.map +1 -0
- package/dist/umd/{7979.js → 1899.js} +11 -10
- package/dist/umd/1899.js.map +1 -0
- package/dist/umd/{1172.js → 1995.js} +10 -9
- package/dist/umd/1995.js.map +1 -0
- package/dist/umd/2540.js +2 -1
- package/dist/umd/2540.js.map +1 -0
- package/dist/umd/2672.js +2 -0
- package/dist/umd/2672.js.map +1 -0
- package/dist/umd/2739.js +2 -0
- package/dist/umd/2739.js.map +1 -0
- package/dist/umd/{2570.js → 2894.js} +6 -5
- package/dist/umd/2894.js.map +1 -0
- package/dist/umd/{404.js → 3620.js} +9 -8
- package/dist/umd/3620.js.map +1 -0
- package/dist/umd/{4455.js → 384.js} +8 -7
- package/dist/umd/384.js.map +1 -0
- package/dist/umd/4467.js +3 -0
- package/dist/umd/4467.js.map +1 -0
- package/dist/umd/{4127.js → 4518.js} +11 -10
- package/dist/umd/4518.js.map +1 -0
- package/dist/umd/{1902.js → 4550.js} +7 -6
- package/dist/umd/4550.js.map +1 -0
- package/dist/umd/{4554.js → 4623.js} +7 -6
- package/dist/umd/4623.js.map +1 -0
- package/dist/umd/{742.js → 4914.js} +3 -2
- package/dist/umd/4914.js.map +1 -0
- package/dist/umd/{9478.js → 513.js} +6 -5
- package/dist/umd/513.js.map +1 -0
- package/dist/umd/{201.js → 5260.js} +6 -5
- package/dist/umd/5260.js.map +1 -0
- package/dist/umd/5414.js +2 -1
- package/dist/umd/5414.js.map +1 -0
- package/dist/umd/5648.js +110 -0
- package/dist/umd/5648.js.map +1 -0
- package/dist/umd/5780.js +2 -0
- package/dist/umd/5780.js.map +1 -0
- package/dist/umd/{5563.js → 6227.js} +6 -5
- package/dist/umd/6227.js.map +1 -0
- package/dist/umd/6424.js +149 -0
- package/dist/umd/6424.js.map +1 -0
- package/dist/umd/{7097.js → 6649.js} +6 -5
- package/dist/umd/6649.js.map +1 -0
- package/dist/umd/676.js +3 -0
- package/dist/umd/676.js.map +1 -0
- package/dist/umd/{1738.js → 7092.js} +2 -1
- package/dist/umd/7092.js.map +1 -0
- package/dist/umd/{3638.js → 7182.js} +3 -2
- package/dist/umd/7182.js.map +1 -0
- package/dist/umd/{507.js → 7291.js} +6 -5
- package/dist/umd/7291.js.map +1 -0
- package/dist/umd/{4187.js → 7565.js} +3 -2
- package/dist/umd/7565.js.map +1 -0
- package/dist/umd/{3191.js → 7620.js} +11 -7
- package/dist/umd/7620.js.map +1 -0
- package/dist/umd/{6050.js → 7774.js} +10 -9
- package/dist/umd/7774.js.map +1 -0
- package/dist/umd/{2666.js → 7939.js} +5 -4
- package/dist/umd/7939.js.map +1 -0
- package/dist/umd/{4114.js → 8618.js} +5 -4
- package/dist/umd/8618.js.map +1 -0
- package/dist/umd/8961.js +2 -0
- package/dist/umd/8961.js.map +1 -0
- package/dist/umd/{4574.js → 8983.js} +6 -5
- package/dist/umd/8983.js.map +1 -0
- package/dist/umd/9030.js +265 -307
- package/dist/umd/9030.js.LICENSE.txt +0 -6
- package/dist/umd/9030.js.map +1 -0
- package/dist/umd/9365.js +2 -0
- package/dist/umd/9365.js.map +1 -0
- package/dist/umd/{4218.js → 9380.js} +5 -4
- package/dist/umd/9380.js.map +1 -0
- package/dist/umd/9871.js +276 -0
- package/dist/umd/9871.js.map +1 -0
- package/dist/umd/9970.js +833 -0
- package/dist/umd/9970.js.map +1 -0
- package/dist/umd/DescopeDev.js +2 -1
- package/dist/umd/DescopeDev.js.map +1 -0
- package/dist/umd/boolean-fields-descope-boolean-field-internal-index-js.js +2 -1
- package/dist/umd/boolean-fields-descope-boolean-field-internal-index-js.js.map +1 -0
- package/dist/umd/boolean-fields-descope-checkbox-index-js.js +2 -1
- package/dist/umd/boolean-fields-descope-checkbox-index-js.js.map +1 -0
- package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js +2 -1
- package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js.map +1 -0
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js +2 -1
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js.map +1 -0
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-internal-index-js.js +2 -1
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-internal-index-js.js.map +1 -0
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js +2 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js.map +1 -0
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-internal-index-js.js +2 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-internal-index-js.js.map +1 -0
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js +2 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js.map +1 -0
- package/dist/umd/descope-address-field.js +2 -1
- package/dist/umd/descope-address-field.js.map +1 -0
- package/dist/umd/descope-alert-index-js.js +2 -1
- package/dist/umd/descope-alert-index-js.js.map +1 -0
- package/dist/umd/descope-apps-list-index-js.js +2 -1
- package/dist/umd/descope-apps-list-index-js.js.map +1 -0
- package/dist/umd/descope-autocomplete-field.js +2 -1
- package/dist/umd/descope-autocomplete-field.js.map +1 -0
- package/dist/umd/descope-avatar.js +2 -1
- package/dist/umd/descope-avatar.js.map +1 -0
- package/dist/umd/descope-badge-index-js.js +2 -1
- package/dist/umd/descope-badge-index-js.js.map +1 -0
- package/dist/umd/descope-button-index-js.js +5 -4
- package/dist/umd/descope-button-index-js.js.map +1 -0
- package/dist/umd/descope-code-snippet-index-js.js +2 -1
- package/dist/umd/descope-code-snippet-index-js.js.map +1 -0
- package/dist/umd/descope-combo-box.js +7 -6
- package/dist/umd/descope-combo-box.js.map +1 -0
- package/dist/umd/descope-container-index-js.js +2 -1
- package/dist/umd/descope-container-index-js.js.map +1 -0
- package/dist/umd/descope-date-field-descope-calendar-index-js.js +2 -1
- package/dist/umd/descope-date-field-descope-calendar-index-js.js.map +1 -0
- package/dist/umd/descope-date-field-index-js.js +2 -1
- package/dist/umd/descope-date-field-index-js.js.map +1 -0
- package/dist/umd/descope-divider-index-js.js +2 -1
- package/dist/umd/descope-divider-index-js.js.map +1 -0
- package/dist/umd/descope-email-field-index-js.js +5 -4
- package/dist/umd/descope-email-field-index-js.js.map +1 -0
- package/dist/umd/descope-enriched-text-index-js.js +2 -1
- package/dist/umd/descope-enriched-text-index-js.js.map +1 -0
- package/dist/umd/descope-grid-descope-grid-custom-column-index-js.js +5 -4
- package/dist/umd/descope-grid-descope-grid-custom-column-index-js.js.map +1 -0
- package/dist/umd/descope-grid-descope-grid-item-details-column-index-js.js +6 -5
- package/dist/umd/descope-grid-descope-grid-item-details-column-index-js.js.map +1 -0
- package/dist/umd/descope-grid-descope-grid-selection-column-index-js.js +2 -1
- package/dist/umd/descope-grid-descope-grid-selection-column-index-js.js.map +1 -0
- package/dist/umd/descope-grid-descope-grid-text-column-index-js.js +5 -4
- package/dist/umd/descope-grid-descope-grid-text-column-index-js.js.map +1 -0
- package/dist/umd/descope-grid-index-js.js +2 -1
- package/dist/umd/descope-grid-index-js.js.map +1 -0
- package/dist/umd/descope-hybrid-field-index-js.js +4 -3
- package/dist/umd/descope-hybrid-field-index-js.js.map +1 -0
- package/dist/umd/descope-icon-index-js.js +2 -1
- package/dist/umd/descope-icon-index-js.js.map +1 -0
- package/dist/umd/descope-image-index-js.js +2 -1
- package/dist/umd/descope-image-index-js.js.map +1 -0
- package/dist/umd/descope-link-index-js.js +2 -1
- package/dist/umd/descope-link-index-js.js.map +1 -0
- package/dist/umd/descope-list-index-js.js +2 -1
- package/dist/umd/descope-list-index-js.js.map +1 -0
- package/dist/umd/descope-loader-linear-index-js.js +2 -1
- package/dist/umd/descope-loader-linear-index-js.js.map +1 -0
- package/dist/umd/descope-loader-radial-index-js.js +2 -1
- package/dist/umd/descope-loader-radial-index-js.js.map +1 -0
- package/dist/umd/descope-logo-index-js.js +2 -1
- package/dist/umd/descope-logo-index-js.js.map +1 -0
- package/dist/umd/descope-modal-index-js.js +2 -1
- package/dist/umd/descope-modal-index-js.js.map +1 -0
- package/dist/umd/descope-multi-select-combo-box-index-js.js +2 -1
- package/dist/umd/descope-multi-select-combo-box-index-js.js.map +1 -0
- package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js +2 -1
- package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js.map +1 -0
- package/dist/umd/descope-new-password-index-js.js +2 -1
- package/dist/umd/descope-new-password-index-js.js.map +1 -0
- package/dist/umd/descope-notification-descope-notification-card-index-js.js +2 -1
- package/dist/umd/descope-notification-descope-notification-card-index-js.js.map +1 -0
- package/dist/umd/descope-notification-index-js.js +2 -1
- package/dist/umd/descope-notification-index-js.js.map +1 -0
- package/dist/umd/descope-notp-image-index-js.js +2 -1
- package/dist/umd/descope-notp-image-index-js.js.map +1 -0
- package/dist/umd/descope-number-field-index-js.js +2 -1
- package/dist/umd/descope-number-field-index-js.js.map +1 -0
- package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js +2 -1
- package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js.map +1 -0
- package/dist/umd/descope-passcode-index-js.js +3 -2
- package/dist/umd/descope-passcode-index-js.js.map +1 -0
- package/dist/umd/descope-password-index-js.js +2 -1
- package/dist/umd/descope-password-index-js.js.map +1 -0
- package/dist/umd/descope-policy-validation-index-js.js +2 -1
- package/dist/umd/descope-policy-validation-index-js.js.map +1 -0
- package/dist/umd/descope-radio-group-index-js.js +2 -1
- package/dist/umd/descope-radio-group-index-js.js.map +1 -0
- package/dist/umd/descope-recaptcha-index-js.js +2 -1
- package/dist/umd/descope-recaptcha-index-js.js.map +1 -0
- package/dist/umd/descope-scopes-list-index-js.js +2 -1
- package/dist/umd/descope-scopes-list-index-js.js.map +1 -0
- package/dist/umd/descope-security-questions-setup-index-js.js +2 -1
- package/dist/umd/descope-security-questions-setup-index-js.js.map +1 -0
- package/dist/umd/descope-security-questions-verify-index-js.js +3 -2
- package/dist/umd/descope-security-questions-verify-index-js.js.map +1 -0
- package/dist/umd/descope-text-area-index-js.js +2 -1
- package/dist/umd/descope-text-area-index-js.js.map +1 -0
- package/dist/umd/descope-text-field-index-js.js +3 -2
- package/dist/umd/descope-text-field-index-js.js.map +1 -0
- package/dist/umd/descope-text.js +2 -1
- package/dist/umd/descope-text.js.map +1 -0
- package/dist/umd/descope-third-party-app-logo-index-js.js +2 -1
- package/dist/umd/descope-third-party-app-logo-index-js.js.map +1 -0
- package/dist/umd/descope-totp-image-index-js.js +2 -1
- package/dist/umd/descope-totp-image-index-js.js.map +1 -0
- package/dist/umd/descope-upload-file-index-js.js +2 -1
- package/dist/umd/descope-upload-file-index-js.js.map +1 -0
- package/dist/umd/descope-user-attribute-index-js.js +2 -1
- package/dist/umd/descope-user-attribute-index-js.js.map +1 -0
- package/dist/umd/descope-user-auth-method-index-js.js +2 -1
- package/dist/umd/descope-user-auth-method-index-js.js.map +1 -0
- package/dist/umd/fonts/font-1364590020.woff +0 -0
- package/dist/umd/fonts/font-1949233557.woff +0 -0
- package/dist/umd/index.js +2 -1
- package/dist/umd/index.js.map +1 -0
- package/dist/umd/mapping-fields-descope-mappings-field-descope-mapping-item-index-js.js +2 -1
- package/dist/umd/mapping-fields-descope-mappings-field-descope-mapping-item-index-js.js.map +1 -0
- package/dist/umd/mapping-fields-descope-mappings-field-descope-mappings-field-internal-index-js.js +2 -1
- package/dist/umd/mapping-fields-descope-mappings-field-descope-mappings-field-internal-index-js.js.map +1 -0
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +2 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js.map +1 -0
- package/dist/umd/mapping-fields-descope-saml-group-mappings-descope-saml-group-mappings-internal-index-js.js +2 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-descope-saml-group-mappings-internal-index-js.js.map +1 -0
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +2 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js.map +1 -0
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +2 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js.map +1 -0
- package/dist/umd/phone-fields-descope-phone-field-index-js.js +2 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js.map +1 -0
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js +3 -2
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js.map +1 -0
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +8 -7
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js.map +1 -0
- package/package.json +10 -8
- package/src/baseClasses/createCssVarImageClass.js +10 -5
- package/src/components/button-selection-group-fields/baseButtonSelectionGroup.js +7 -0
- package/src/components/button-selection-group-fields/createBaseButtonSelectionGroupInternalClass.js +1 -8
- package/src/components/button-selection-group-fields/descope-button-selection-group-item/ButtonSelectionGroupItemClass.js +11 -6
- package/src/components/descope-alert/AlertClass.js +16 -12
- package/src/components/descope-badge/BadgeClass.js +11 -6
- package/src/components/descope-code-snippet/CodeSnippetClass.js +9 -4
- package/src/components/descope-container/ContainerClass.js +9 -4
- package/src/components/descope-date-field/DateFieldClass.js +22 -17
- package/src/components/descope-date-field/descope-calendar/CalendarClass.js +28 -18
- package/src/components/descope-date-field/descope-calendar/helpers.js +1 -2
- package/src/components/descope-divider/DividerClass.js +14 -9
- package/src/components/descope-enriched-text/EnrichedTextClass.js +9 -4
- package/src/components/descope-grid/GridClass.js +1 -1
- package/src/components/descope-hybrid-field/HybridFieldClass.js +15 -10
- package/src/components/descope-icon/IconClass.js +9 -4
- package/src/components/descope-image/ImageClass.js +10 -5
- package/src/components/descope-link/LinkClass.js +14 -9
- package/src/components/descope-list/ListClass.js +15 -13
- package/src/components/descope-list/ListItemClass.js +16 -14
- package/src/components/descope-loader-linear/LoaderLinearClass.js +10 -5
- package/src/components/descope-loader-radial/LoaderRadialClass.js +10 -5
- package/src/components/descope-modal/ModalClass.js +16 -4
- package/src/components/descope-new-password/NewPasswordClass.js +1 -1
- package/src/components/descope-new-password/descope-new-password-internal/NewPasswordInternal.js +8 -6
- package/src/components/descope-passcode/PasscodeClass.js +28 -1
- package/src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js +26 -23
- package/src/components/descope-passcode/descope-passcode-internal/helpers.js +3 -22
- package/src/components/descope-policy-validation/PolicyValidationClass.js +8 -3
- package/src/components/descope-recaptcha/RecaptchaClass.js +13 -8
- package/src/components/descope-scopes-list/ScopesListClass.js +9 -5
- package/src/components/descope-security-questions-setup/SecurityQuestionsSetupClass.js +9 -5
- package/src/components/descope-security-questions-verify/SecurityQuestionsVerifyClass.js +9 -5
- package/src/components/descope-text-field/TextFieldClass.js +1 -1
- package/src/components/descope-third-party-app-logo/ThirdPartyAppLogoClass.js +20 -16
- package/src/components/descope-upload-file/UploadFileClass.js +20 -15
- package/src/components/descope-user-attribute/UserAttributeClass.js +25 -22
- package/src/components/descope-user-auth-method/UserAuthMethodClass.js +25 -22
- package/src/components/mapping-fields/descope-mappings-field/descope-mapping-item/MappingItem.js +15 -9
- package/src/components/phone-fields/descope-phone-field/PhoneFieldClass.js +1 -0
- package/src/components/phone-fields/descope-phone-field/helpers.js +0 -1
- package/src/mixins/createProxy.js +3 -1
- package/src/mixins/createStyleMixin/index.js +9 -22
- package/src/mixins/draggableMixin.js +3 -2
- package/dist/umd/1402.js +0 -1
- package/dist/umd/1484.js +0 -148
- package/dist/umd/3110.js +0 -275
- package/dist/umd/3437.js +0 -2
- package/dist/umd/4619.js +0 -1
- package/dist/umd/4902.js +0 -170
- package/dist/umd/4902.js.LICENSE.txt +0 -23
- package/dist/umd/5096.js +0 -109
- package/dist/umd/5318.js +0 -1
- package/dist/umd/5459.js +0 -1
- package/dist/umd/7150.js +0 -2
- package/dist/umd/731.js +0 -832
- package/dist/umd/8823.js +0 -1
- /package/dist/umd/{9243.js.LICENSE.txt → 1519.js.LICENSE.txt} +0 -0
- /package/dist/umd/{1902.js.LICENSE.txt → 1899.js.LICENSE.txt} +0 -0
- /package/dist/umd/{1172.js.LICENSE.txt → 1995.js.LICENSE.txt} +0 -0
- /package/dist/umd/{2570.js.LICENSE.txt → 2894.js.LICENSE.txt} +0 -0
- /package/dist/umd/{1484.js.LICENSE.txt → 3620.js.LICENSE.txt} +0 -0
- /package/dist/umd/{2666.js.LICENSE.txt → 384.js.LICENSE.txt} +0 -0
- /package/dist/umd/{3437.js.LICENSE.txt → 4467.js.LICENSE.txt} +0 -0
- /package/dist/umd/{404.js.LICENSE.txt → 4518.js.LICENSE.txt} +0 -0
- /package/dist/umd/{4455.js.LICENSE.txt → 4550.js.LICENSE.txt} +0 -0
- /package/dist/umd/{4554.js.LICENSE.txt → 4623.js.LICENSE.txt} +0 -0
- /package/dist/umd/{742.js.LICENSE.txt → 4914.js.LICENSE.txt} +0 -0
- /package/dist/umd/{507.js.LICENSE.txt → 513.js.LICENSE.txt} +0 -0
- /package/dist/umd/{201.js.LICENSE.txt → 5260.js.LICENSE.txt} +0 -0
- /package/dist/umd/{5096.js.LICENSE.txt → 5648.js.LICENSE.txt} +0 -0
- /package/dist/umd/{5563.js.LICENSE.txt → 6227.js.LICENSE.txt} +0 -0
- /package/dist/umd/{4127.js.LICENSE.txt → 6424.js.LICENSE.txt} +0 -0
- /package/dist/umd/{7097.js.LICENSE.txt → 6649.js.LICENSE.txt} +0 -0
- /package/dist/umd/{7150.js.LICENSE.txt → 676.js.LICENSE.txt} +0 -0
- /package/dist/umd/{3638.js.LICENSE.txt → 7182.js.LICENSE.txt} +0 -0
- /package/dist/umd/{7979.js.LICENSE.txt → 7291.js.LICENSE.txt} +0 -0
- /package/dist/umd/{4187.js.LICENSE.txt → 7565.js.LICENSE.txt} +0 -0
- /package/dist/umd/{3191.js.LICENSE.txt → 7620.js.LICENSE.txt} +0 -0
- /package/dist/umd/{6050.js.LICENSE.txt → 7774.js.LICENSE.txt} +0 -0
- /package/dist/umd/{9478.js.LICENSE.txt → 7939.js.LICENSE.txt} +0 -0
- /package/dist/umd/{4114.js.LICENSE.txt → 8618.js.LICENSE.txt} +0 -0
- /package/dist/umd/{4574.js.LICENSE.txt → 8983.js.LICENSE.txt} +0 -0
- /package/dist/umd/{4218.js.LICENSE.txt → 9380.js.LICENSE.txt} +0 -0
- /package/dist/umd/{3110.js.LICENSE.txt → 9871.js.LICENSE.txt} +0 -0
- /package/dist/umd/{731.js.LICENSE.txt → 9970.js.LICENSE.txt} +0 -0
- /package/dist/umd/{bcdfe87ae253c2cf789c9a737f8d8c22.woff → fonts/font-38673212.woff} +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"9871.js","mappings":"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","sources":["webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-data-provider-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-item-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/field-base/src/virtual-keyboard-controller.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-overlay-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-placeholder.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/src/vaadin-combo-box-scroller-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/theme/lumo/vaadin-combo-box-item-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/combo-box/theme/lumo/vaadin-combo-box-overlay-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/item/theme/lumo/vaadin-item-styles.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/overlay/src/vaadin-overlay-position-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/vaadin-lumo-styles/mixins/loader.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/vaadin-lumo-styles/mixins/menu-overlay.js"],"sourcesContent":["/**\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 { ComboBoxPlaceholder } from './vaadin-combo-box-placeholder.js';\n\n/**\n * @polymerMixin\n */\nexport const ComboBoxDataProviderMixin = (superClass) =>\n class DataProviderMixin extends superClass {\n static get properties() {\n return {\n /**\n * Number of items fetched at a time from the dataprovider.\n * @attr {number} page-size\n * @type {number}\n */\n pageSize: {\n type: Number,\n value: 50,\n observer: '_pageSizeChanged',\n },\n\n /**\n * Total number of items.\n * @type {number | undefined}\n */\n size: {\n type: Number,\n observer: '_sizeChanged',\n },\n\n /**\n * Function that provides items lazily. Receives arguments `params`, `callback`\n *\n * `params.page` Requested page index\n *\n * `params.pageSize` Current page size\n *\n * `params.filter` Currently applied filter\n *\n * `callback(items, size)` Callback function with arguments:\n * - `items` Current page of items\n * - `size` Total number of items.\n * @type {ComboBoxDataProvider | undefined}\n */\n dataProvider: {\n type: Object,\n observer: '_dataProviderChanged',\n },\n\n /** @private */\n _pendingRequests: {\n value: () => {\n return {};\n },\n },\n\n /** @private */\n __placeHolder: {\n value: new ComboBoxPlaceholder(),\n },\n\n /** @private */\n __previousDataProviderFilter: {\n type: String,\n },\n };\n }\n\n static get observers() {\n return [\n '_dataProviderFilterChanged(filter)',\n '_warnDataProviderValue(dataProvider, value)',\n '_ensureFirstPage(opened)',\n ];\n }\n\n /** @protected */\n ready() {\n super.ready();\n this._scroller.addEventListener('index-requested', (e) => {\n const index = e.detail.index;\n const currentScrollerPos = e.detail.currentScrollerPos;\n const allowedIndexRange = Math.floor(this.pageSize * 1.5);\n\n // Ignores the indexes, which are being re-sent during scrolling reset,\n // if the corresponding page is around the current scroller position.\n // Otherwise, there might be a last pages duplicates, which cause the\n // loading indicator hanging and blank items\n if (this._shouldSkipIndex(index, allowedIndexRange, currentScrollerPos)) {\n return;\n }\n\n if (index !== undefined) {\n const page = this._getPageForIndex(index);\n if (this._shouldLoadPage(page)) {\n this._loadPage(page);\n }\n }\n });\n }\n\n /** @private */\n _dataProviderFilterChanged(filter) {\n if (this.__previousDataProviderFilter === undefined && filter === '') {\n this.__previousDataProviderFilter = filter;\n return;\n }\n\n if (this.__previousDataProviderFilter !== filter) {\n this.__previousDataProviderFilter = filter;\n\n this._pendingRequests = {};\n // Immediately mark as loading if this refresh leads to re-fetching pages\n // This prevents some issues with the properties below triggering\n // observers that also rely on the loading state\n this.loading = this._shouldFetchData();\n // Reset size and internal loading state\n this.size = undefined;\n\n this.clearCache();\n }\n }\n\n /** @private */\n _shouldFetchData() {\n if (!this.dataProvider) {\n return false;\n }\n\n return this.opened || (this.filter && this.filter.length);\n }\n\n /** @private */\n _ensureFirstPage(opened) {\n if (opened && this._shouldLoadPage(0)) {\n this._loadPage(0);\n }\n }\n\n /** @private */\n _shouldSkipIndex(index, allowedIndexRange, currentScrollerPos) {\n return (\n currentScrollerPos !== 0 &&\n index >= currentScrollerPos - allowedIndexRange &&\n index <= currentScrollerPos + allowedIndexRange\n );\n }\n\n /** @private */\n _shouldLoadPage(page) {\n if (!this.filteredItems || this._forceNextRequest) {\n this._forceNextRequest = false;\n return true;\n }\n\n const loadedItem = this.filteredItems[page * this.pageSize];\n if (loadedItem !== undefined) {\n return loadedItem instanceof ComboBoxPlaceholder;\n }\n return this.size === undefined;\n }\n\n /** @private */\n _loadPage(page) {\n // Make sure same page isn't requested multiple times.\n if (this._pendingRequests[page] || !this.dataProvider) {\n return;\n }\n\n const params = {\n page,\n pageSize: this.pageSize,\n filter: this.filter,\n };\n\n const callback = (items, size) => {\n if (this._pendingRequests[page] !== callback) {\n return;\n }\n\n const filteredItems = this.filteredItems ? [...this.filteredItems] : [];\n filteredItems.splice(params.page * params.pageSize, items.length, ...items);\n this.filteredItems = filteredItems;\n\n if (!this.opened && !this._isInputFocused()) {\n this._commitValue();\n }\n\n if (size !== undefined) {\n this.size = size;\n }\n\n delete this._pendingRequests[page];\n\n if (Object.keys(this._pendingRequests).length === 0) {\n this.loading = false;\n }\n };\n\n this._pendingRequests[page] = callback;\n // Set the `loading` flag only after marking the request as pending\n // to prevent the same page from getting requested multiple times\n // as a result of `__loadingChanged` in the scroller which requests\n // a virtualizer update which in turn may trigger a data provider page request.\n this.loading = true;\n this.dataProvider(params, callback);\n }\n\n /** @private */\n _getPageForIndex(index) {\n return Math.floor(index / this.pageSize);\n }\n\n /**\n * Clears the cached pages and reloads data from dataprovider when needed.\n */\n clearCache() {\n if (!this.dataProvider) {\n return;\n }\n\n this._pendingRequests = {};\n const filteredItems = [];\n for (let i = 0; i < (this.size || 0); i++) {\n filteredItems.push(this.__placeHolder);\n }\n this.filteredItems = filteredItems;\n\n if (this._shouldFetchData()) {\n this._forceNextRequest = false;\n this._loadPage(0);\n } else {\n this._forceNextRequest = true;\n }\n }\n\n /** @private */\n _sizeChanged(size = 0) {\n const filteredItems = (this.filteredItems || []).slice(0, size);\n for (let i = 0; i < size; i++) {\n filteredItems[i] = filteredItems[i] !== undefined ? filteredItems[i] : this.__placeHolder;\n }\n this.filteredItems = filteredItems;\n\n // Cleans up the redundant pending requests for pages > size\n // Refers to https://github.com/vaadin/vaadin-flow-components/issues/229\n this._flushPendingRequests(size);\n }\n\n /** @private */\n _pageSizeChanged(pageSize, oldPageSize) {\n if (Math.floor(pageSize) !== pageSize || pageSize < 1) {\n this.pageSize = oldPageSize;\n throw new Error('`pageSize` value must be an integer > 0');\n }\n this.clearCache();\n }\n\n /** @private */\n _dataProviderChanged(dataProvider, oldDataProvider) {\n this._ensureItemsOrDataProvider(() => {\n this.dataProvider = oldDataProvider;\n });\n\n this.clearCache();\n }\n\n /** @private */\n _ensureItemsOrDataProvider(restoreOldValueCallback) {\n if (this.items !== undefined && this.dataProvider !== undefined) {\n restoreOldValueCallback();\n throw new Error('Using `items` and `dataProvider` together is not supported');\n } else if (this.dataProvider && !this.filteredItems) {\n this.filteredItems = [];\n }\n }\n\n /** @private */\n _warnDataProviderValue(dataProvider, value) {\n if (dataProvider && value !== '' && (this.selectedItem === undefined || this.selectedItem === null)) {\n const valueIndex = this.__getItemIndexByValue(this.filteredItems, value);\n if (valueIndex < 0 || !this._getItemLabel(this.filteredItems[valueIndex])) {\n console.warn(\n 'Warning: unable to determine the label for the provided `value`. ' +\n 'Nothing to display in the text field. This usually happens when ' +\n 'setting an initial `value` before any items are returned from ' +\n 'the `dataProvider` callback. Consider setting `selectedItem` ' +\n 'instead of `value`',\n );\n }\n }\n }\n\n /**\n * This method cleans up the page callbacks which refers to the\n * non-existing pages, i.e. which item indexes are greater than the\n * changed size.\n * This case is basically happens when:\n * 1. Users scroll fast to the bottom and combo box generates the\n * redundant page request/callback\n * 2. Server side uses undefined size lazy loading and suddenly reaches\n * the exact size which is on the range edge\n * (for default page size = 50, it will be 100, 200, 300, ...).\n * @param size the new size of items\n * @private\n */\n _flushPendingRequests(size) {\n if (this._pendingRequests) {\n const lastPage = Math.ceil(size / this.pageSize);\n Object.entries(this._pendingRequests).forEach(([page, callback]) => {\n if (parseInt(page) >= lastPage) {\n callback([], size);\n }\n });\n }\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 */\n\n/**\n * @polymerMixin\n */\nexport const ComboBoxItemMixin = (superClass) =>\n class ComboBoxItemMixinClass extends superClass {\n static get properties() {\n return {\n /**\n * The index of the item.\n */\n index: {\n type: Number,\n },\n\n /**\n * The item to render.\n */\n item: {\n type: Object,\n },\n\n /**\n * The text to render in the item.\n */\n label: {\n type: String,\n },\n\n /**\n * True when item is selected.\n */\n selected: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n },\n\n /**\n * True when item is focused.\n */\n focused: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n },\n\n /**\n * Custom function for rendering the item content.\n */\n renderer: {\n type: Function,\n },\n };\n }\n\n static get observers() {\n return ['__rendererOrItemChanged(renderer, index, item.*, selected, focused)', '__updateLabel(label, renderer)'];\n }\n\n static get observedAttributes() {\n return [...super.observedAttributes, 'hidden'];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n if (name === 'hidden' && newValue !== null) {\n // The element is being hidden (by virtualizer). Mark one of the __rendererOrItemChanged\n // dependencies as undefined to make sure it's called when the element is shown again\n // and assigned properties with possibly identical values as before hiding.\n this.index = undefined;\n } else {\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n\n this._owner = this.parentNode.owner;\n\n const hostDir = this._owner.getAttribute('dir');\n if (hostDir) {\n this.setAttribute('dir', hostDir);\n }\n }\n\n /**\n * Requests an update for the content of the item.\n * While performing the update, it invokes the renderer passed in the `renderer` property.\n *\n * It is not guaranteed that the update happens immediately (synchronously) after it is requested.\n */\n requestContentUpdate() {\n if (!this.renderer) {\n return;\n }\n\n const model = {\n index: this.index,\n item: this.item,\n focused: this.focused,\n selected: this.selected,\n };\n\n this.renderer(this, this._owner, model);\n }\n\n /** @private */\n __rendererOrItemChanged(renderer, index, item) {\n if (item === undefined || index === undefined) {\n return;\n }\n\n if (this._oldRenderer !== renderer) {\n this.innerHTML = '';\n // Whenever a Lit-based renderer is used, it assigns a Lit part to the node it was rendered into.\n // When clearing the rendered content, this part needs to be manually disposed of.\n // Otherwise, using a Lit-based renderer on the same node will throw an exception or render nothing afterward.\n delete this._$litPart$;\n }\n\n if (renderer) {\n this._oldRenderer = renderer;\n this.requestContentUpdate();\n }\n }\n\n /** @private */\n __updateLabel(label, renderer) {\n if (renderer) {\n return;\n }\n\n this.textContent = label;\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 */\n\n/**\n * A controller which prevents the virtual keyboard from showing up on mobile devices\n * when the field's overlay is closed.\n */\nexport class VirtualKeyboardController {\n /**\n * @param {{ inputElement?: HTMLElement; opened: boolean } & HTMLElement} host\n */\n constructor(host) {\n this.host = host;\n\n host.addEventListener('opened-changed', () => {\n if (!host.opened) {\n // Prevent opening the virtual keyboard when the input gets re-focused on dropdown close\n this.__setVirtualKeyboardEnabled(false);\n }\n });\n\n // Re-enable virtual keyboard on blur, so it gets opened when the field is focused again\n host.addEventListener('blur', () => this.__setVirtualKeyboardEnabled(true));\n\n // Re-enable the virtual keyboard whenever the field is touched\n host.addEventListener('touchstart', () => this.__setVirtualKeyboardEnabled(true));\n }\n\n /** @private */\n __setVirtualKeyboardEnabled(value) {\n if (this.host.inputElement) {\n this.host.inputElement.inputMode = value ? '' : 'none';\n }\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 { DisabledMixin } from '@vaadin/a11y-base/src/disabled-mixin.js';\nimport { FocusMixin } from '@vaadin/a11y-base/src/focus-mixin.js';\nimport { isElementFocused } from '@vaadin/a11y-base/src/focus-utils.js';\nimport { KeyboardMixin } from '@vaadin/a11y-base/src/keyboard-mixin.js';\nimport { isTouch } from '@vaadin/component-base/src/browser-utils.js';\nimport { ControllerMixin } from '@vaadin/component-base/src/controller-mixin.js';\nimport { OverlayClassMixin } from '@vaadin/component-base/src/overlay-class-mixin.js';\nimport { get } from '@vaadin/component-base/src/path-utils.js';\nimport { processTemplates } from '@vaadin/component-base/src/templates.js';\nimport { InputMixin } from '@vaadin/field-base/src/input-mixin.js';\nimport { ValidateMixin } from '@vaadin/field-base/src/validate-mixin.js';\nimport { VirtualKeyboardController } from '@vaadin/field-base/src/virtual-keyboard-controller.js';\nimport { ComboBoxPlaceholder } from './vaadin-combo-box-placeholder.js';\n\n/**\n * Checks if the value is supported as an item value in this control.\n *\n * @param {unknown} value\n * @return {boolean}\n */\nfunction isValidValue(value) {\n return value !== undefined && value !== null;\n}\n\n/**\n * Returns the index of the first item that satisfies the provided testing function\n * ignoring placeholder items.\n *\n * @param {Array<ComboBoxItem | string>} items\n * @param {Function} callback\n * @return {number}\n */\nfunction findItemIndex(items, callback) {\n return items.findIndex((item) => {\n if (item instanceof ComboBoxPlaceholder) {\n return false;\n }\n\n return callback(item);\n });\n}\n\n/**\n * @polymerMixin\n * @mixes ControllerMixin\n * @mixes ValidateMixin\n * @mixes DisabledMixin\n * @mixes InputMixin\n * @mixes KeyboardMixin\n * @mixes FocusMixin\n * @mixes OverlayClassMixin\n * @param {function(new:HTMLElement)} subclass\n */\nexport const ComboBoxMixin = (subclass) =>\n class ComboBoxMixinClass extends OverlayClassMixin(\n ControllerMixin(ValidateMixin(FocusMixin(KeyboardMixin(InputMixin(DisabledMixin(subclass)))))),\n ) {\n static get properties() {\n return {\n /**\n * True if the dropdown is open, false otherwise.\n * @type {boolean}\n */\n opened: {\n type: Boolean,\n notify: true,\n value: false,\n reflectToAttribute: true,\n observer: '_openedChanged',\n },\n\n /**\n * Set true to prevent the overlay from opening automatically.\n * @attr {boolean} auto-open-disabled\n */\n autoOpenDisabled: {\n type: Boolean,\n },\n\n /**\n * When present, it specifies that the field is read-only.\n * @type {boolean}\n */\n readonly: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n },\n\n /**\n * Custom function for rendering the content of every item.\n * Receives three arguments:\n *\n * - `root` The `<vaadin-combo-box-item>` internal container DOM element.\n * - `comboBox` The reference to the `<vaadin-combo-box>` element.\n * - `model` The object with the properties related with the rendered\n * item, contains:\n * - `model.index` The index of the rendered item.\n * - `model.item` The item.\n * @type {ComboBoxRenderer | undefined}\n */\n renderer: Function,\n\n /**\n * A full set of items to filter the visible options from.\n * The items can be of either `String` or `Object` type.\n * @type {!Array<!ComboBoxItem | string> | undefined}\n */\n items: {\n type: Array,\n observer: '_itemsChanged',\n },\n\n /**\n * If `true`, the user can input a value that is not present in the items list.\n * `value` property will be set to the input value in this case.\n * Also, when `value` is set programmatically, the input value will be set\n * to reflect that value.\n * @attr {boolean} allow-custom-value\n * @type {boolean}\n */\n allowCustomValue: {\n type: Boolean,\n value: false,\n },\n\n /**\n * A subset of items, filtered based on the user input. Filtered items\n * can be assigned directly to omit the internal filtering functionality.\n * The items can be of either `String` or `Object` type.\n * @type {!Array<!ComboBoxItem | string> | undefined}\n */\n filteredItems: {\n type: Array,\n observer: '_filteredItemsChanged',\n },\n\n /**\n * Used to detect user value changes and fire `change` events.\n * @private\n */\n _lastCommittedValue: String,\n\n /**\n * When set to `true`, \"loading\" attribute is added to host and the overlay element.\n * @type {boolean}\n */\n loading: {\n type: Boolean,\n value: false,\n reflectToAttribute: true,\n },\n\n /**\n * @type {number}\n * @protected\n */\n _focusedIndex: {\n type: Number,\n observer: '_focusedIndexChanged',\n value: -1,\n },\n\n /**\n * Filtering string the user has typed into the input field.\n * @type {string}\n */\n filter: {\n type: String,\n value: '',\n notify: true,\n },\n\n /**\n * The selected item from the `items` array.\n * @type {ComboBoxItem | string | undefined}\n */\n selectedItem: {\n type: Object,\n notify: true,\n },\n\n /**\n * Path for label of the item. If `items` is an array of objects, the\n * `itemLabelPath` is used to fetch the displayed string label for each\n * item.\n *\n * The item label is also used for matching items when processing user\n * input, i.e., for filtering and selecting items.\n * @attr {string} item-label-path\n * @type {string}\n */\n itemLabelPath: {\n type: String,\n value: 'label',\n observer: '_itemLabelPathChanged',\n },\n\n /**\n * Path for the value of the item. If `items` is an array of objects, the\n * `itemValuePath:` is used to fetch the string value for the selected\n * item.\n *\n * The item value is used in the `value` property of the combo box,\n * to provide the form value.\n * @attr {string} item-value-path\n * @type {string}\n */\n itemValuePath: {\n type: String,\n value: 'value',\n },\n\n /**\n * Path for the id of the item. If `items` is an array of objects,\n * the `itemIdPath` is used to compare and identify the same item\n * in `selectedItem` and `filteredItems` (items given by the\n * `dataProvider` callback).\n * @attr {string} item-id-path\n */\n itemIdPath: String,\n\n /**\n * @type {!HTMLElement | undefined}\n * @protected\n */\n _toggleElement: {\n type: Object,\n observer: '_toggleElementChanged',\n },\n\n /**\n * Set of items to be rendered in the dropdown.\n * @protected\n */\n _dropdownItems: {\n type: Array,\n },\n\n /** @private */\n _closeOnBlurIsPrevented: Boolean,\n\n /** @private */\n _scroller: Object,\n\n /** @private */\n _overlayOpened: {\n type: Boolean,\n observer: '_overlayOpenedChanged',\n },\n };\n }\n\n static get observers() {\n return [\n '_selectedItemChanged(selectedItem, itemValuePath, itemLabelPath)',\n '_openedOrItemsChanged(opened, _dropdownItems, loading)',\n '_updateScroller(_scroller, _dropdownItems, opened, loading, selectedItem, itemIdPath, _focusedIndex, renderer, theme)',\n ];\n }\n\n constructor() {\n super();\n this._boundOverlaySelectedItemChanged = this._overlaySelectedItemChanged.bind(this);\n this._boundOnClearButtonMouseDown = this.__onClearButtonMouseDown.bind(this);\n this._boundOnClick = this._onClick.bind(this);\n this._boundOnOverlayTouchAction = this._onOverlayTouchAction.bind(this);\n this._boundOnTouchend = this._onTouchend.bind(this);\n }\n\n /**\n * Tag name prefix used by scroller and items.\n * @protected\n * @return {string}\n */\n get _tagNamePrefix() {\n return 'vaadin-combo-box';\n }\n\n /**\n * Get a reference to the native `<input>` element.\n * Override to provide a custom input.\n * @protected\n * @return {HTMLInputElement | undefined}\n */\n get _nativeInput() {\n return this.inputElement;\n }\n\n /**\n * Override method inherited from `InputMixin`\n * to customize the input element.\n * @protected\n * @override\n */\n _inputElementChanged(inputElement) {\n super._inputElementChanged(inputElement);\n\n const input = this._nativeInput;\n\n if (input) {\n input.autocomplete = 'off';\n input.autocapitalize = 'off';\n\n input.setAttribute('role', 'combobox');\n input.setAttribute('aria-autocomplete', 'list');\n input.setAttribute('aria-expanded', !!this.opened);\n\n // Disable the macOS Safari spell check auto corrections.\n input.setAttribute('spellcheck', 'false');\n\n // Disable iOS autocorrect suggestions.\n input.setAttribute('autocorrect', 'off');\n\n this._revertInputValueToValue();\n\n if (this.clearElement) {\n this.clearElement.addEventListener('mousedown', this._boundOnClearButtonMouseDown);\n }\n }\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this._initOverlay();\n this._initScroller();\n\n this._lastCommittedValue = this.value;\n\n this.addEventListener('click', this._boundOnClick);\n this.addEventListener('touchend', this._boundOnTouchend);\n\n const bringToFrontListener = () => {\n requestAnimationFrame(() => {\n this._overlayElement.bringToFront();\n });\n };\n\n this.addEventListener('mousedown', bringToFrontListener);\n this.addEventListener('touchstart', bringToFrontListener);\n\n processTemplates(this);\n\n this.addController(new VirtualKeyboardController(this));\n }\n\n /** @protected */\n disconnectedCallback() {\n super.disconnectedCallback();\n\n // Close the overlay on detach\n this.close();\n }\n\n /**\n * Requests an update for the content of items.\n * While performing the update, it invokes the renderer (passed in the `renderer` property) once an item.\n *\n * It is not guaranteed that the update happens immediately (synchronously) after it is requested.\n */\n requestContentUpdate() {\n if (!this._scroller) {\n return;\n }\n\n this._scroller.requestContentUpdate();\n\n this._getItemElements().forEach((item) => {\n item.requestContentUpdate();\n });\n }\n\n /**\n * Opens the dropdown list.\n */\n open() {\n // Prevent _open() being called when input is disabled or read-only\n if (!this.disabled && !this.readonly) {\n this.opened = true;\n }\n }\n\n /**\n * Closes the dropdown list.\n */\n close() {\n this.opened = false;\n }\n\n /**\n * Override Polymer lifecycle callback to handle `filter` property change after\n * the observer for `opened` property is triggered. This is needed when opening\n * combo-box on user input to ensure the focused index is set correctly.\n *\n * @param {!Object} currentProps Current accessor values\n * @param {?Object} changedProps Properties changed since the last call\n * @param {?Object} oldProps Previous values for each changed property\n * @protected\n * @override\n */\n _propertiesChanged(currentProps, changedProps, oldProps) {\n super._propertiesChanged(currentProps, changedProps, oldProps);\n\n if (changedProps.filter !== undefined) {\n this._filterChanged(changedProps.filter);\n }\n }\n\n /** @private */\n _initOverlay() {\n const overlay = this.$.overlay;\n\n // Store instance for detecting \"dir\" attribute on opening\n overlay._comboBox = this;\n\n overlay.addEventListener('touchend', this._boundOnOverlayTouchAction);\n overlay.addEventListener('touchmove', this._boundOnOverlayTouchAction);\n\n // Prevent blurring the input when clicking inside the overlay\n overlay.addEventListener('mousedown', (e) => e.preventDefault());\n\n // Manual two-way binding for the overlay \"opened\" property\n overlay.addEventListener('opened-changed', (e) => {\n this._overlayOpened = e.detail.value;\n });\n\n this._overlayElement = overlay;\n }\n\n /**\n * Create and initialize the scroller element.\n * Override to provide custom host reference.\n *\n * @protected\n */\n _initScroller(host) {\n const scrollerTag = `${this._tagNamePrefix}-scroller`;\n\n const overlay = this._overlayElement;\n\n overlay.renderer = (root) => {\n if (!root.firstChild) {\n root.appendChild(document.createElement(scrollerTag));\n }\n };\n\n // Ensure the scroller is rendered\n overlay.requestContentUpdate();\n\n const scroller = overlay.querySelector(scrollerTag);\n\n scroller.owner = host || this;\n scroller.getItemLabel = this._getItemLabel.bind(this);\n scroller.addEventListener('selection-changed', this._boundOverlaySelectedItemChanged);\n\n // Trigger the observer to set properties\n this._scroller = scroller;\n }\n\n /** @private */\n // eslint-disable-next-line max-params\n _updateScroller(scroller, items, opened, loading, selectedItem, itemIdPath, focusedIndex, renderer, theme) {\n if (scroller) {\n if (opened) {\n scroller.style.maxHeight =\n getComputedStyle(this).getPropertyValue(`--${this._tagNamePrefix}-overlay-max-height`) || '65vh';\n }\n\n scroller.setProperties({\n items: opened ? items : [],\n opened,\n loading,\n selectedItem,\n itemIdPath,\n focusedIndex,\n renderer,\n theme,\n });\n }\n }\n\n /** @private */\n _openedOrItemsChanged(opened, items, loading) {\n // Close the overlay if there are no items to display.\n // See https://github.com/vaadin/vaadin-combo-box/pull/964\n this._overlayOpened = !!(opened && (loading || (items && items.length)));\n }\n\n /** @private */\n _overlayOpenedChanged(opened, wasOpened) {\n if (opened) {\n this.dispatchEvent(new CustomEvent('vaadin-combo-box-dropdown-opened', { bubbles: true, composed: true }));\n\n this._onOpened();\n } else if (wasOpened && this._dropdownItems && this._dropdownItems.length) {\n this.close();\n\n this.dispatchEvent(new CustomEvent('vaadin-combo-box-dropdown-closed', { bubbles: true, composed: true }));\n }\n }\n\n /** @private */\n _focusedIndexChanged(index, oldIndex) {\n if (oldIndex === undefined) {\n return;\n }\n this._updateActiveDescendant(index);\n }\n\n /** @protected */\n _isInputFocused() {\n return this.inputElement && isElementFocused(this.inputElement);\n }\n\n /** @private */\n _updateActiveDescendant(index) {\n const input = this._nativeInput;\n if (!input) {\n return;\n }\n\n const item = this._getItemElements().find((el) => el.index === index);\n if (item) {\n input.setAttribute('aria-activedescendant', item.id);\n } else {\n input.removeAttribute('aria-activedescendant');\n }\n }\n\n /** @private */\n _openedChanged(opened, wasOpened) {\n // Prevent _close() being called when opened is set to its default value (false).\n if (wasOpened === undefined) {\n return;\n }\n\n if (opened) {\n this._openedWithFocusRing = this.hasAttribute('focus-ring');\n // For touch devices, we don't want to popup virtual keyboard\n // unless input element is explicitly focused by the user.\n if (!this._isInputFocused() && !isTouch) {\n if (this.inputElement) {\n this.inputElement.focus();\n }\n }\n\n this._overlayElement.restoreFocusOnClose = true;\n } else {\n this._onClosed();\n if (this._openedWithFocusRing && this._isInputFocused()) {\n this.setAttribute('focus-ring', '');\n }\n }\n\n const input = this._nativeInput;\n if (input) {\n input.setAttribute('aria-expanded', !!opened);\n\n if (opened) {\n input.setAttribute('aria-controls', this._scroller.id);\n } else {\n input.removeAttribute('aria-controls');\n }\n }\n }\n\n /** @private */\n _onOverlayTouchAction() {\n // On touch devices, blur the input on touch start inside the overlay, in order to hide\n // the virtual keyboard. But don't close the overlay on this blur.\n this._closeOnBlurIsPrevented = true;\n this.inputElement.blur();\n this._closeOnBlurIsPrevented = false;\n }\n\n /** @protected */\n _isClearButton(event) {\n return event.composedPath()[0] === this.clearElement;\n }\n\n /** @private */\n __onClearButtonMouseDown(event) {\n event.preventDefault(); // Prevent native focusout event\n this.inputElement.focus();\n }\n\n /**\n * @param {Event} event\n * @protected\n */\n _onClearButtonClick(event) {\n event.preventDefault();\n this._onClearAction();\n\n // De-select dropdown item\n if (this.opened) {\n this.requestContentUpdate();\n }\n }\n\n /**\n * @param {Event} event\n * @private\n */\n _onToggleButtonClick(event) {\n // Prevent parent components such as `vaadin-grid`\n // from handling the click event after it bubbles.\n event.preventDefault();\n\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * @param {Event} event\n * @protected\n */\n _onHostClick(event) {\n if (!this.autoOpenDisabled) {\n event.preventDefault();\n this.open();\n }\n }\n\n /** @private */\n _onClick(event) {\n if (this._isClearButton(event)) {\n this._onClearButtonClick(event);\n } else if (event.composedPath().includes(this._toggleElement)) {\n this._onToggleButtonClick(event);\n } else {\n this._onHostClick(event);\n }\n }\n\n /**\n * Override an event listener from `KeyboardMixin`.\n *\n * @param {KeyboardEvent} e\n * @protected\n * @override\n */\n _onKeyDown(e) {\n super._onKeyDown(e);\n\n if (e.key === 'Tab') {\n this._overlayElement.restoreFocusOnClose = false;\n } else if (e.key === 'ArrowDown') {\n this._onArrowDown();\n\n // Prevent caret from moving\n e.preventDefault();\n } else if (e.key === 'ArrowUp') {\n this._onArrowUp();\n\n // Prevent caret from moving\n e.preventDefault();\n }\n }\n\n /** @private */\n _getItemLabel(item) {\n let label = item && this.itemLabelPath ? get(this.itemLabelPath, item) : undefined;\n if (label === undefined || label === null) {\n label = item ? item.toString() : '';\n }\n return label;\n }\n\n /** @private */\n _getItemValue(item) {\n let value = item && this.itemValuePath ? get(this.itemValuePath, item) : undefined;\n if (value === undefined) {\n value = item ? item.toString() : '';\n }\n return value;\n }\n\n /** @private */\n _onArrowDown() {\n if (this.opened) {\n const items = this._dropdownItems;\n if (items) {\n this._focusedIndex = Math.min(items.length - 1, this._focusedIndex + 1);\n this._prefillFocusedItemLabel();\n }\n } else {\n this.open();\n }\n }\n\n /** @private */\n _onArrowUp() {\n if (this.opened) {\n if (this._focusedIndex > -1) {\n this._focusedIndex = Math.max(0, this._focusedIndex - 1);\n } else {\n const items = this._dropdownItems;\n if (items) {\n this._focusedIndex = items.length - 1;\n }\n }\n\n this._prefillFocusedItemLabel();\n } else {\n this.open();\n }\n }\n\n /** @private */\n _prefillFocusedItemLabel() {\n if (this._focusedIndex > -1) {\n const focusedItem = this._dropdownItems[this._focusedIndex];\n this._inputElementValue = this._getItemLabel(focusedItem);\n this._markAllSelectionRange();\n }\n }\n\n /** @private */\n _setSelectionRange(start, end) {\n // Setting selection range focuses and/or moves the caret in some browsers,\n // and there's no need to modify the selection range if the input isn't focused anyway.\n // This affects Safari. When the overlay is open, and then hitting tab, browser should focus\n // the next focusable element instead of the combo-box itself.\n if (this._isInputFocused() && this.inputElement.setSelectionRange) {\n this.inputElement.setSelectionRange(start, end);\n }\n }\n\n /** @private */\n _markAllSelectionRange() {\n if (this._inputElementValue !== undefined) {\n this._setSelectionRange(0, this._inputElementValue.length);\n }\n }\n\n /** @private */\n _clearSelectionRange() {\n if (this._inputElementValue !== undefined) {\n const pos = this._inputElementValue ? this._inputElementValue.length : 0;\n this._setSelectionRange(pos, pos);\n }\n }\n\n /** @private */\n _closeOrCommit() {\n if (!this.opened && !this.loading) {\n this._commitValue();\n } else {\n this.close();\n }\n }\n\n /**\n * Override an event listener from `KeyboardMixin`.\n *\n * @param {KeyboardEvent} e\n * @protected\n * @override\n */\n _onEnter(e) {\n // Do not commit value when custom values are disallowed and input value is not a valid option\n // also stop propagation of the event, otherwise the user could submit a form while the input\n // still contains an invalid value\n if (!this._hasValidInputValue()) {\n // Do not submit the surrounding form.\n e.preventDefault();\n // Do not trigger global listeners\n e.stopPropagation();\n return;\n }\n\n // Stop propagation of the enter event only if the dropdown is opened, this\n // \"consumes\" the enter event for the action of closing the dropdown\n if (this.opened) {\n // Do not submit the surrounding form.\n e.preventDefault();\n // Do not trigger global listeners\n e.stopPropagation();\n }\n\n this._closeOrCommit();\n }\n\n /**\n * @protected\n */\n _hasValidInputValue() {\n const hasInvalidOption =\n this._focusedIndex < 0 &&\n this._inputElementValue !== '' &&\n this._getItemLabel(this.selectedItem) !== this._inputElementValue;\n\n return this.allowCustomValue || !hasInvalidOption;\n }\n\n /**\n * Override an event listener from `KeyboardMixin`.\n * Do not call `super` in order to override clear\n * button logic defined in `InputControlMixin`.\n *\n * @param {!KeyboardEvent} e\n * @protected\n * @override\n */\n _onEscape(e) {\n if (this.autoOpenDisabled) {\n // Auto-open is disabled\n if (this.opened || (this.value !== this._inputElementValue && this._inputElementValue.length > 0)) {\n // The overlay is open or\n // The input value has changed but the change hasn't been committed, so cancel it.\n e.stopPropagation();\n this._focusedIndex = -1;\n this.cancel();\n } else if (this.clearButtonVisible && !this.opened && !!this.value) {\n e.stopPropagation();\n // The clear button is visible and the overlay is closed, so clear the value.\n this._onClearAction();\n }\n } else if (this.opened) {\n // Auto-open is enabled\n // The overlay is open\n e.stopPropagation();\n\n if (this._focusedIndex > -1) {\n // An item is focused, revert the input to the filtered value\n this._focusedIndex = -1;\n this._revertInputValue();\n } else {\n // No item is focused, cancel the change and close the overlay\n this.cancel();\n }\n } else if (this.clearButtonVisible && !!this.value) {\n e.stopPropagation();\n // The clear button is visible and the overlay is closed, so clear the value.\n this._onClearAction();\n }\n }\n\n /** @private */\n _toggleElementChanged(toggleElement) {\n if (toggleElement) {\n // Don't blur the input on toggle mousedown\n toggleElement.addEventListener('mousedown', (e) => e.preventDefault());\n // Unfocus previously focused element if focus is not inside combo box (on touch devices)\n toggleElement.addEventListener('click', () => {\n if (isTouch && !this._isInputFocused()) {\n document.activeElement.blur();\n }\n });\n }\n }\n\n /**\n * Clears the current value.\n * @protected\n */\n _onClearAction() {\n this.selectedItem = null;\n\n if (this.allowCustomValue) {\n this.value = '';\n }\n\n this._detectAndDispatchChange();\n }\n\n /**\n * Reverts back to original value.\n */\n cancel() {\n this._revertInputValueToValue();\n // In the next _detectAndDispatchChange() call, the change detection should not pass\n this._lastCommittedValue = this.value;\n this._closeOrCommit();\n }\n\n /** @private */\n _onOpened() {\n // _detectAndDispatchChange() should not consider value changes done before opening\n this._lastCommittedValue = this.value;\n }\n\n /** @private */\n _onClosed() {\n if (!this.loading || this.allowCustomValue) {\n this._commitValue();\n }\n }\n\n /** @private */\n _commitValue() {\n if (this._focusedIndex > -1) {\n const focusedItem = this._dropdownItems[this._focusedIndex];\n if (this.selectedItem !== focusedItem) {\n this.selectedItem = focusedItem;\n }\n // Make sure input field is updated in case value doesn't change (i.e. FOO -> foo)\n this._inputElementValue = this._getItemLabel(this.selectedItem);\n this._focusedIndex = -1;\n } else if (this._inputElementValue === '' || this._inputElementValue === undefined) {\n this.selectedItem = null;\n\n if (this.allowCustomValue) {\n this.value = '';\n }\n } else {\n // Try to find an item which label matches the input value.\n const items = [this.selectedItem, ...(this._dropdownItems || [])];\n const itemMatchingInputValue = items[this.__getItemIndexByLabel(items, this._inputElementValue)];\n\n if (\n this.allowCustomValue &&\n // To prevent a repetitive input value being saved after pressing ESC and Tab.\n !itemMatchingInputValue\n ) {\n const customValue = this._inputElementValue;\n\n // Store reference to the last custom value for checking it on focusout.\n this._lastCustomValue = customValue;\n\n // An item matching by label was not found, but custom values are allowed.\n // Dispatch a custom-value-set event with the input value.\n const e = new CustomEvent('custom-value-set', {\n detail: customValue,\n composed: true,\n cancelable: true,\n bubbles: true,\n });\n this.dispatchEvent(e);\n if (!e.defaultPrevented) {\n this.value = customValue;\n }\n } else if (!this.allowCustomValue && !this.opened && itemMatchingInputValue) {\n // An item matching by label was found, select it.\n this.value = this._getItemValue(itemMatchingInputValue);\n } else {\n // Revert the input value\n this._inputElementValue = this.selectedItem ? this._getItemLabel(this.selectedItem) : this.value || '';\n }\n }\n\n this._detectAndDispatchChange();\n\n this._clearSelectionRange();\n\n this.filter = '';\n }\n\n /**\n * Override an event listener from `InputMixin`.\n * @param {!Event} event\n * @protected\n * @override\n */\n _onInput(event) {\n const filter = this._inputElementValue;\n\n // When opening dropdown on user input, both `opened` and `filter` properties are set.\n // Perform a batched property update instead of relying on sync property observers.\n // This is necessary to avoid an extra data-provider request for loading first page.\n const props = {};\n\n if (this.filter === filter) {\n // Filter and input value might get out of sync, while keyboard navigating for example.\n // Afterwards, input value might be changed to the same value as used in filtering.\n // In situation like these, we need to make sure all the filter changes handlers are run.\n this._filterChanged(this.filter);\n } else {\n props.filter = filter;\n }\n\n if (!this.opened && !this._isClearButton(event) && !this.autoOpenDisabled) {\n props.opened = true;\n }\n\n this.setProperties(props);\n }\n\n /**\n * Override an event listener from `InputMixin`.\n * @param {!Event} event\n * @protected\n * @override\n */\n _onChange(event) {\n // Suppress the native change event fired on the native input.\n // We use `_detectAndDispatchChange` to fire a custom event.\n event.stopPropagation();\n }\n\n /** @private */\n _itemLabelPathChanged(itemLabelPath) {\n if (typeof itemLabelPath !== 'string') {\n console.error('You should set itemLabelPath to a valid string');\n }\n }\n\n /** @private */\n _filterChanged(filter) {\n // Scroll to the top of the list whenever the filter changes.\n this._scrollIntoView(0);\n\n this._focusedIndex = -1;\n\n if (this.items) {\n this.filteredItems = this._filterItems(this.items, filter);\n } else {\n // With certain use cases (e. g., external filtering), `items` are\n // undefined. Filtering is unnecessary per se, but the filteredItems\n // observer should still be invoked to update focused item.\n this._filteredItemsChanged(this.filteredItems);\n }\n }\n\n /** @protected */\n _revertInputValue() {\n if (this.filter !== '') {\n this._inputElementValue = this.filter;\n } else {\n this._revertInputValueToValue();\n }\n this._clearSelectionRange();\n }\n\n /** @private */\n _revertInputValueToValue() {\n if (this.allowCustomValue && !this.selectedItem) {\n this._inputElementValue = this.value;\n } else {\n this._inputElementValue = this._getItemLabel(this.selectedItem);\n }\n }\n\n /** @private */\n _selectedItemChanged(selectedItem) {\n if (selectedItem === null || selectedItem === undefined) {\n if (this.filteredItems) {\n if (!this.allowCustomValue) {\n this.value = '';\n }\n\n this._toggleHasValue(this._hasValue);\n this._inputElementValue = this.value;\n }\n } else {\n const value = this._getItemValue(selectedItem);\n if (this.value !== value) {\n this.value = value;\n if (this.value !== value) {\n // The value was changed to something else in value-changed listener,\n // so prevent from resetting it to the previous value.\n return;\n }\n }\n\n this._toggleHasValue(true);\n this._inputElementValue = this._getItemLabel(selectedItem);\n }\n }\n\n /**\n * Override an observer from `InputMixin`.\n * @protected\n * @override\n */\n _valueChanged(value, oldVal) {\n if (value === '' && oldVal === undefined) {\n // Initializing, no need to do anything\n // See https://github.com/vaadin/vaadin-combo-box/issues/554\n return;\n }\n\n if (isValidValue(value)) {\n if (this._getItemValue(this.selectedItem) !== value) {\n this._selectItemForValue(value);\n }\n\n if (!this.selectedItem && this.allowCustomValue) {\n this._inputElementValue = value;\n }\n\n this._toggleHasValue(this._hasValue);\n } else {\n this.selectedItem = null;\n }\n\n this.filter = '';\n\n // In the next _detectAndDispatchChange() call, the change detection should pass\n this._lastCommittedValue = undefined;\n }\n\n /** @private */\n _detectAndDispatchChange() {\n // Do not validate when focusout is caused by document\n // losing focus, which happens on browser tab switch.\n if (document.hasFocus()) {\n this.validate();\n }\n\n if (this.value !== this._lastCommittedValue) {\n this.dispatchEvent(new CustomEvent('change', { bubbles: true }));\n this._lastCommittedValue = this.value;\n }\n }\n\n /** @private */\n _itemsChanged(items, oldItems) {\n this._ensureItemsOrDataProvider(() => {\n this.items = oldItems;\n });\n\n if (items) {\n this.filteredItems = items.slice(0);\n } else if (oldItems) {\n // Only clear filteredItems if the component had items previously but got cleared\n this.filteredItems = null;\n }\n }\n\n /** @private */\n _filteredItemsChanged(filteredItems, oldFilteredItems) {\n this._setDropdownItems(filteredItems);\n\n // Store the currently focused item if any. The focused index preserves\n // in the case when more filtered items are loading but it is reset\n // when the user types in a filter query.\n const focusedItem = oldFilteredItems ? oldFilteredItems[this._focusedIndex] : null;\n\n // Try to sync `selectedItem` based on `value` once a new set of `filteredItems` is available\n // (as a result of external filtering or when they have been loaded by the data provider).\n // When `value` is specified but `selectedItem` is not, it means that there was no item\n // matching `value` at the moment `value` was set, so `selectedItem` has remained unsynced.\n const valueIndex = this.__getItemIndexByValue(filteredItems, this.value);\n if ((this.selectedItem === null || this.selectedItem === undefined) && valueIndex >= 0) {\n this.selectedItem = filteredItems[valueIndex];\n }\n\n // Try to first set focus on the item that had been focused before `filteredItems` were updated\n // if it is still present in the `filteredItems` array. Otherwise, set the focused index\n // depending on the selected item or the filter query.\n const focusedItemIndex = this.__getItemIndexByValue(filteredItems, this._getItemValue(focusedItem));\n if (focusedItemIndex > -1) {\n this._focusedIndex = focusedItemIndex;\n } else {\n // When the user filled in something that is different from the current value = filtering is enabled,\n // set the focused index to the item that matches the filter query.\n this._focusedIndex = this.__getItemIndexByLabel(this.filteredItems, this.filter);\n }\n }\n\n /** @private */\n _filterItems(arr, filter) {\n if (!arr) {\n return arr;\n }\n\n const filteredItems = arr.filter((item) => {\n filter = filter ? filter.toString().toLowerCase() : '';\n // Check if item contains input value.\n return this._getItemLabel(item).toString().toLowerCase().indexOf(filter) > -1;\n });\n\n return filteredItems;\n }\n\n /** @private */\n _selectItemForValue(value) {\n const valueIndex = this.__getItemIndexByValue(this.filteredItems, value);\n const previouslySelectedItem = this.selectedItem;\n\n if (valueIndex >= 0) {\n this.selectedItem = this.filteredItems[valueIndex];\n } else if (this.dataProvider && this.selectedItem === undefined) {\n this.selectedItem = undefined;\n } else {\n this.selectedItem = null;\n }\n\n if (this.selectedItem === null && previouslySelectedItem === null) {\n this._selectedItemChanged(this.selectedItem);\n }\n }\n\n /**\n * Provide items to be rendered in the dropdown.\n * Override this method to show custom items.\n *\n * @protected\n */\n _setDropdownItems(items) {\n this._dropdownItems = items;\n }\n\n /** @private */\n _getItemElements() {\n return Array.from(this._scroller.querySelectorAll(`${this._tagNamePrefix}-item`));\n }\n\n /** @private */\n _scrollIntoView(index) {\n if (!this._scroller) {\n return;\n }\n this._scroller.scrollIntoView(index);\n }\n\n /**\n * Returns the first item that matches the provided value.\n *\n * @private\n */\n __getItemIndexByValue(items, value) {\n if (!items || !isValidValue(value)) {\n return -1;\n }\n\n return findItemIndex(items, (item) => {\n return this._getItemValue(item) === value;\n });\n }\n\n /**\n * Returns the first item that matches the provided label.\n * Labels are matched against each other case insensitively.\n *\n * @private\n */\n __getItemIndexByLabel(items, label) {\n if (!items || !label) {\n return -1;\n }\n\n return findItemIndex(items, (item) => {\n return this._getItemLabel(item).toString().toLowerCase() === label.toString().toLowerCase();\n });\n }\n\n /** @private */\n _overlaySelectedItemChanged(e) {\n // Stop this private event from leaking outside.\n e.stopPropagation();\n\n if (e.detail.item instanceof ComboBoxPlaceholder) {\n // Placeholder items should not be selectable.\n return;\n }\n\n if (this.opened) {\n this._focusedIndex = this.filteredItems.indexOf(e.detail.item);\n this.close();\n }\n }\n\n /**\n * Override method inherited from `FocusMixin`\n * to close the overlay on blur and commit the value.\n *\n * @param {boolean} focused\n * @protected\n * @override\n */\n _setFocused(focused) {\n super._setFocused(focused);\n\n if (!focused && !this.readonly && !this._closeOnBlurIsPrevented) {\n // User's logic in `custom-value-set` event listener might cause input to blur,\n // which will result in attempting to commit the same custom value once again.\n if (!this.opened && this.allowCustomValue && this._inputElementValue === this._lastCustomValue) {\n delete this._lastCustomValue;\n return;\n }\n\n this._closeOrCommit();\n }\n }\n\n /**\n * Override method inherited from `FocusMixin` to not remove focused\n * state when focus moves to the overlay.\n *\n * @param {FocusEvent} event\n * @return {boolean}\n * @protected\n * @override\n */\n _shouldRemoveFocus(event) {\n // VoiceOver on iOS fires `focusout` event when moving focus to the item in the dropdown.\n // Do not focus the input in this case, because it would break announcement for the item.\n if (event.relatedTarget && event.relatedTarget.localName === `${this._tagNamePrefix}-item`) {\n return false;\n }\n\n // Do not blur when focus moves to the overlay\n // Also, fixes the problem with `focusout` happening when clicking on the scroll bar on Edge\n if (event.relatedTarget === this._overlayElement) {\n event.composedPath()[0].focus();\n return false;\n }\n\n return true;\n }\n\n /** @private */\n _onTouchend(event) {\n if (!this.clearElement || event.composedPath()[0] !== this.clearElement) {\n return;\n }\n\n event.preventDefault();\n this._onClearAction();\n }\n\n /**\n * Fired when the value changes.\n *\n * @event value-changed\n * @param {Object} detail\n * @param {String} detail.value the combobox value\n */\n\n /**\n * Fired when selected item changes.\n *\n * @event selected-item-changed\n * @param {Object} detail\n * @param {Object|String} detail.value the selected item. Type is the same as the type of `items`.\n */\n\n /**\n * Fired when the user sets a custom value.\n * @event custom-value-set\n * @param {String} detail the custom value\n */\n\n /**\n * Fired when value changes.\n * To comply with https://developer.mozilla.org/en-US/docs/Web/Events/change\n * @event change\n */\n\n /**\n * Fired after the `vaadin-combo-box-overlay` opens.\n *\n * @event vaadin-combo-box-dropdown-opened\n */\n\n /**\n * Fired after the `vaadin-combo-box-overlay` closes.\n *\n * @event vaadin-combo-box-dropdown-closed\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 { PositionMixin } from '@vaadin/overlay/src/vaadin-overlay-position-mixin.js';\n\n/**\n * @polymerMixin\n * @mixes PositionMixin\n */\nexport const ComboBoxOverlayMixin = (superClass) =>\n class ComboBoxOverlayMixin extends PositionMixin(superClass) {\n static get observers() {\n return ['_setOverlayWidth(positionTarget, opened)'];\n }\n\n constructor() {\n super();\n\n this.requiredVerticalSpace = 200;\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n\n const comboBox = this._comboBox;\n\n const hostDir = comboBox && comboBox.getAttribute('dir');\n if (hostDir) {\n this.setAttribute('dir', hostDir);\n }\n }\n\n /**\n * Override method inherited from `Overlay`\n * to not close on position target click.\n *\n * @param {Event} event\n * @return {boolean}\n * @protected\n */\n _shouldCloseOnOutsideClick(event) {\n const eventPath = event.composedPath();\n return !eventPath.includes(this.positionTarget) && !eventPath.includes(this);\n }\n\n /** @protected */\n _updateOverlayWidth() {\n const propPrefix = this.localName;\n this.style.setProperty(`--_${propPrefix}-default-width`, `${this.positionTarget.clientWidth}px`);\n\n const customWidth = getComputedStyle(this._comboBox).getPropertyValue(`--${propPrefix}-width`);\n\n if (customWidth === '') {\n this.style.removeProperty(`--${propPrefix}-width`);\n } else {\n this.style.setProperty(`--${propPrefix}-width`, customWidth);\n }\n }\n\n /** @private */\n _setOverlayWidth(positionTarget, opened) {\n if (positionTarget && opened) {\n this._updateOverlayWidth();\n\n this._updatePosition();\n }\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 */\n\n/*\n * Placeholder object class representing items being loaded.\n *\n * @private\n */\nexport const ComboBoxPlaceholder = class ComboBoxPlaceholder {\n toString() {\n return '';\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 { get } from '@vaadin/component-base/src/path-utils.js';\nimport { generateUniqueId } from '@vaadin/component-base/src/unique-id-utils.js';\nimport { Virtualizer } from '@vaadin/component-base/src/virtualizer.js';\nimport { ComboBoxPlaceholder } from './vaadin-combo-box-placeholder.js';\n\n/**\n * @polymerMixin\n */\nexport const ComboBoxScrollerMixin = (superClass) =>\n class ComboBoxScrollerMixin extends superClass {\n static get properties() {\n return {\n /**\n * A full set of items to filter the visible options from.\n * Set to an empty array when combo-box is not opened.\n */\n items: {\n type: Array,\n observer: '__itemsChanged',\n },\n\n /**\n * Index of an item that has focus outline and is scrolled into view.\n * The actual focus still remains in the input field.\n */\n focusedIndex: {\n type: Number,\n observer: '__focusedIndexChanged',\n },\n\n /**\n * Set to true while combo-box fetches new page from the data provider.\n */\n loading: {\n type: Boolean,\n observer: '__loadingChanged',\n },\n\n /**\n * Whether the combo-box is currently opened or not. If set to false,\n * calling `scrollIntoView` does not have any effect.\n */\n opened: {\n type: Boolean,\n observer: '__openedChanged',\n },\n\n /**\n * The selected item from the `items` array.\n */\n selectedItem: {\n type: Object,\n observer: '__selectedItemChanged',\n },\n\n /**\n * Path for the id of the item, used to detect whether the item is selected.\n */\n itemIdPath: {\n type: String,\n },\n\n /**\n * Reference to the owner (combo-box owner), used by the item elements.\n */\n owner: {\n type: Object,\n },\n\n /**\n * Function used to set a label for every combo-box item.\n */\n getItemLabel: {\n type: Object,\n },\n\n /**\n * Function used to render the content of every combo-box item.\n */\n renderer: {\n type: Object,\n observer: '__rendererChanged',\n },\n\n /**\n * Used to propagate the `theme` attribute from the host element.\n */\n theme: {\n type: String,\n },\n };\n }\n\n constructor() {\n super();\n this.__boundOnItemClick = this.__onItemClick.bind(this);\n }\n\n /** @private */\n get _viewportTotalPaddingBottom() {\n if (this._cachedViewportTotalPaddingBottom === undefined) {\n const itemsStyle = window.getComputedStyle(this.$.selector);\n this._cachedViewportTotalPaddingBottom = [itemsStyle.paddingBottom, itemsStyle.borderBottomWidth]\n .map((v) => {\n return parseInt(v, 10);\n })\n .reduce((sum, v) => {\n return sum + v;\n });\n }\n\n return this._cachedViewportTotalPaddingBottom;\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this.setAttribute('role', 'listbox');\n\n // Ensure every instance has unique ID\n this.id = `${this.localName}-${generateUniqueId()}`;\n\n // Allow extensions to customize tag name for the items\n this.__hostTagName = this.constructor.is.replace('-scroller', '');\n\n this.addEventListener('click', (e) => e.stopPropagation());\n\n this.__patchWheelOverScrolling();\n\n this.__virtualizer = new Virtualizer({\n createElements: this.__createElements.bind(this),\n updateElement: this._updateElement.bind(this),\n elementsContainer: this,\n scrollTarget: this,\n scrollContainer: this.$.selector,\n });\n }\n\n /**\n * Requests an update for the virtualizer to re-render items.\n */\n requestContentUpdate() {\n if (this.__virtualizer) {\n this.__virtualizer.update();\n }\n }\n\n /**\n * Scrolls an item at given index into view and adjusts `scrollTop`\n * so that the element gets fully visible on Arrow Down key press.\n * @param {number} index\n */\n scrollIntoView(index) {\n if (!(this.opened && index >= 0)) {\n return;\n }\n\n const visibleItemsCount = this._visibleItemsCount();\n\n let targetIndex = index;\n\n if (index > this.__virtualizer.lastVisibleIndex - 1) {\n // Index is below the bottom, scrolling down. Make the item appear at the bottom.\n // First scroll to target (will be at the top of the scroller) to make sure it's rendered.\n this.__virtualizer.scrollToIndex(index);\n // Then calculate the index for the following scroll (to get the target to bottom of the scroller).\n targetIndex = index - visibleItemsCount + 1;\n } else if (index > this.__virtualizer.firstVisibleIndex) {\n // The item is already visible, scrolling is unnecessary per se. But we need to trigger iron-list to set\n // the correct scrollTop on the scrollTarget. Scrolling to firstVisibleIndex.\n targetIndex = this.__virtualizer.firstVisibleIndex;\n }\n this.__virtualizer.scrollToIndex(Math.max(0, targetIndex));\n\n // Sometimes the item is partly below the bottom edge, detect and adjust.\n const lastPhysicalItem = [...this.children].find(\n (el) => !el.hidden && el.index === this.__virtualizer.lastVisibleIndex,\n );\n if (!lastPhysicalItem || index !== lastPhysicalItem.index) {\n return;\n }\n const lastPhysicalItemRect = lastPhysicalItem.getBoundingClientRect();\n const scrollerRect = this.getBoundingClientRect();\n const scrollTopAdjust = lastPhysicalItemRect.bottom - scrollerRect.bottom + this._viewportTotalPaddingBottom;\n if (scrollTopAdjust > 0) {\n this.scrollTop += scrollTopAdjust;\n }\n }\n\n /**\n * @param {string | object} item\n * @param {string | object} selectedItem\n * @param {string} itemIdPath\n * @protected\n */\n _isItemSelected(item, selectedItem, itemIdPath) {\n if (item instanceof ComboBoxPlaceholder) {\n return false;\n } else if (itemIdPath && item !== undefined && selectedItem !== undefined) {\n return get(itemIdPath, item) === get(itemIdPath, selectedItem);\n }\n return item === selectedItem;\n }\n\n /** @private */\n __itemsChanged(items) {\n if (this.__virtualizer && items) {\n this.__virtualizer.size = items.length;\n this.__virtualizer.flush();\n this.requestContentUpdate();\n }\n }\n\n /** @private */\n __loadingChanged() {\n this.requestContentUpdate();\n }\n\n /** @private */\n __openedChanged(opened) {\n if (opened) {\n this.requestContentUpdate();\n }\n }\n\n /** @private */\n __selectedItemChanged() {\n this.requestContentUpdate();\n }\n\n /** @private */\n __focusedIndexChanged(index, oldIndex) {\n if (index !== oldIndex) {\n this.requestContentUpdate();\n }\n\n // Do not jump back to the previously focused item while loading\n // when requesting next page from the data provider on scroll.\n if (index >= 0 && !this.loading) {\n this.scrollIntoView(index);\n }\n }\n\n /** @private */\n __rendererChanged(renderer, oldRenderer) {\n if (renderer || oldRenderer) {\n this.requestContentUpdate();\n }\n }\n\n /** @private */\n __createElements(count) {\n return [...Array(count)].map(() => {\n const item = document.createElement(`${this.__hostTagName}-item`);\n item.addEventListener('click', this.__boundOnItemClick);\n // Negative tabindex prevents the item content from being focused.\n item.tabIndex = '-1';\n item.style.width = '100%';\n return item;\n });\n }\n\n /**\n * @param {HTMLElement} el\n * @param {number} index\n * @protected\n */\n _updateElement(el, index) {\n const item = this.items[index];\n const focusedIndex = this.focusedIndex;\n const selected = this._isItemSelected(item, this.selectedItem, this.itemIdPath);\n\n el.setProperties({\n item,\n index,\n label: this.getItemLabel(item),\n selected,\n renderer: this.renderer,\n focused: !this.loading && focusedIndex === index,\n });\n\n el.id = `${this.__hostTagName}-item-${index}`;\n el.setAttribute('role', index !== undefined ? 'option' : false);\n el.setAttribute('aria-selected', selected.toString());\n el.setAttribute('aria-posinset', index + 1);\n el.setAttribute('aria-setsize', this.items.length);\n\n if (this.theme) {\n el.setAttribute('theme', this.theme);\n } else {\n el.removeAttribute('theme');\n }\n\n if (item instanceof ComboBoxPlaceholder) {\n this.__requestItemByIndex(index);\n }\n }\n\n /** @private */\n __onItemClick(e) {\n this.dispatchEvent(new CustomEvent('selection-changed', { detail: { item: e.currentTarget.item } }));\n }\n\n /**\n * We want to prevent the kinetic scrolling energy from being transferred from the overlay contents over to the parent.\n * Further improvement ideas: after the contents have been scrolled to the top or bottom and scrolling has stopped, it could allow\n * scrolling the parent similarly to touch scrolling.\n * @private\n */\n __patchWheelOverScrolling() {\n this.$.selector.addEventListener('wheel', (e) => {\n const scrolledToTop = this.scrollTop === 0;\n const scrolledToBottom = this.scrollHeight - this.scrollTop - this.clientHeight <= 1;\n if (scrolledToTop && e.deltaY < 0) {\n e.preventDefault();\n } else if (scrolledToBottom && e.deltaY > 0) {\n e.preventDefault();\n }\n });\n }\n\n /**\n * Dispatches an `index-requested` event for the given index to notify\n * the data provider that it should start loading the page containing the requested index.\n *\n * The event is dispatched asynchronously to prevent an immediate page request and therefore\n * a possible infinite recursion in case the data provider implements page request cancelation logic\n * by invoking data provider page callbacks with an empty array.\n * The infinite recursion may occur otherwise since invoking a data provider page callback with an empty array\n * triggers a synchronous scroller update and, if the callback corresponds to the currently visible page,\n * the scroller will synchronously request the page again which may lead to looping in the end.\n * That was the case for the Flow counterpart:\n * https://github.com/vaadin/flow-components/issues/3553#issuecomment-1239344828\n * @private\n */\n __requestItemByIndex(index) {\n requestAnimationFrame(() => {\n this.dispatchEvent(\n new CustomEvent('index-requested', {\n detail: {\n index,\n currentScrollerPos: this._oldScrollerPosition,\n },\n }),\n );\n });\n }\n\n /** @private */\n _visibleItemsCount() {\n // Ensure items are positioned\n this.__virtualizer.scrollToIndex(this.__virtualizer.firstVisibleIndex);\n const hasItems = this.__virtualizer.size > 0;\n return hasItems ? this.__virtualizer.lastVisibleIndex - this.__virtualizer.firstVisibleIndex + 1 : 0;\n }\n };\n","import '@vaadin/vaadin-lumo-styles/color.js';\nimport '@vaadin/vaadin-lumo-styles/spacing.js';\nimport '@vaadin/vaadin-lumo-styles/style.js';\nimport { item } from '@vaadin/item/theme/lumo/vaadin-item-styles.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst comboBoxItem = css`\n :host {\n transition: background-color 100ms;\n overflow: hidden;\n --_lumo-item-selected-icon-display: block;\n --_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct));\n --_focus-ring-width: var(--vaadin-focus-ring-width, 2px);\n }\n\n @media (any-hover: hover) {\n :host([focused]:not([disabled])) {\n box-shadow: inset 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);\n }\n }\n`;\n\nregisterStyles('vaadin-combo-box-item', [item, comboBoxItem], {\n moduleId: 'lumo-combo-box-item',\n});\n\nexport { comboBoxItem };\n","import '@vaadin/vaadin-lumo-styles/color.js';\nimport '@vaadin/vaadin-lumo-styles/spacing.js';\nimport '@vaadin/vaadin-lumo-styles/style.js';\nimport { loader } from '@vaadin/vaadin-lumo-styles/mixins/loader.js';\nimport { menuOverlayCore } from '@vaadin/vaadin-lumo-styles/mixins/menu-overlay.js';\nimport { overlay } from '@vaadin/vaadin-lumo-styles/mixins/overlay.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst comboBoxOverlay = css`\n [part='content'] {\n padding: 0;\n }\n\n /* When items are empty, the spinner needs some room */\n :host(:not([closing])) [part~='content'] {\n min-height: calc(2 * var(--lumo-space-s) + var(--lumo-icon-size-s));\n }\n\n [part~='overlay'] {\n position: relative;\n }\n\n :host([top-aligned]) [part~='overlay'] {\n margin-top: var(--lumo-space-xs);\n }\n\n :host([bottom-aligned]) [part~='overlay'] {\n margin-bottom: var(--lumo-space-xs);\n }\n`;\n\nconst comboBoxLoader = css`\n [part~='loader'] {\n position: absolute;\n z-index: 1;\n left: var(--lumo-space-s);\n right: var(--lumo-space-s);\n top: var(--lumo-space-s);\n margin-left: auto;\n margin-inline-start: auto;\n margin-inline-end: 0;\n }\n\n :host([dir='rtl']) [part~='loader'] {\n left: auto;\n margin-left: 0;\n margin-right: auto;\n margin-inline-start: 0;\n margin-inline-end: auto;\n }\n`;\n\nregisterStyles(\n 'vaadin-combo-box-overlay',\n [\n overlay,\n menuOverlayCore,\n comboBoxOverlay,\n loader,\n comboBoxLoader,\n css`\n :host {\n --_vaadin-combo-box-items-container-border-width: var(--lumo-space-xs);\n --_vaadin-combo-box-items-container-border-style: solid;\n }\n `,\n ],\n { moduleId: 'lumo-combo-box-overlay' },\n);\n\nexport { comboBoxLoader, comboBoxOverlay };\n","import '@vaadin/vaadin-lumo-styles/font-icons.js';\nimport '@vaadin/vaadin-lumo-styles/sizing.js';\nimport '@vaadin/vaadin-lumo-styles/spacing.js';\nimport '@vaadin/vaadin-lumo-styles/style.js';\nimport '@vaadin/vaadin-lumo-styles/typography.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst item = css`\n :host {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n font-family: var(--lumo-font-family);\n font-size: var(--lumo-font-size-m);\n line-height: var(--lumo-line-height-xs);\n padding: 0.5em calc(var(--lumo-space-l) + var(--lumo-border-radius-m) / 4) 0.5em\n var(--_lumo-list-box-item-padding-left, calc(var(--lumo-border-radius-m) / 4));\n min-height: var(--lumo-size-m);\n outline: none;\n border-radius: var(--lumo-border-radius-m);\n cursor: var(--lumo-clickable-cursor);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n -webkit-tap-highlight-color: var(--lumo-primary-color-10pct);\n --_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct));\n --_focus-ring-width: var(--vaadin-focus-ring-width, 2px);\n --_selection-color-text: var(--vaadin-selection-color-text, var(--lumo-primary-text-color));\n }\n\n /* Checkmark */\n [part='checkmark']::before {\n display: var(--_lumo-item-selected-icon-display, none);\n content: var(--lumo-icons-checkmark);\n font-family: lumo-icons;\n font-size: var(--lumo-icon-size-m);\n line-height: 1;\n font-weight: normal;\n width: 1em;\n height: 1em;\n margin: calc((1 - var(--lumo-line-height-xs)) * var(--lumo-font-size-m) / 2) 0;\n color: var(--_selection-color-text);\n flex: none;\n opacity: 0;\n transition: transform 0.2s cubic-bezier(0.12, 0.32, 0.54, 2), opacity 0.1s;\n }\n\n :host([selected]) [part='checkmark']::before {\n opacity: 1;\n }\n\n :host([active]:not([selected])) [part='checkmark']::before {\n transform: scale(0.8);\n opacity: 0;\n transition-duration: 0s;\n }\n\n [part='content'] {\n flex: auto;\n }\n\n /* Disabled */\n :host([disabled]) {\n color: var(--lumo-disabled-text-color);\n cursor: default;\n pointer-events: none;\n }\n\n /* TODO a workaround until we have \"focus-follows-mouse\". After that, use the hover style for focus-ring as well */\n @media (any-hover: hover) {\n :host(:hover:not([disabled])) {\n background-color: var(--lumo-primary-color-10pct);\n }\n }\n\n :host([focus-ring]:not([disabled])) {\n box-shadow: inset 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color);\n }\n\n /* RTL specific styles */\n :host([dir='rtl']) {\n padding-left: calc(var(--lumo-space-l) + var(--lumo-border-radius-m) / 4);\n padding-right: var(--_lumo-list-box-item-padding-left, calc(var(--lumo-border-radius-m) / 4));\n }\n\n /* Slotted icons */\n :host ::slotted(vaadin-icon) {\n width: var(--lumo-icon-size-m);\n height: var(--lumo-icon-size-m);\n }\n`;\n\nregisterStyles('vaadin-item', item, { moduleId: 'lumo-item' });\n\nexport { item };\n","/**\n * @license\n * Copyright (c) 2017 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { getAncestorRootNodes } from '@vaadin/component-base/src/dom-utils.js';\n\nconst PROP_NAMES_VERTICAL = {\n start: 'top',\n end: 'bottom',\n};\n\nconst PROP_NAMES_HORIZONTAL = {\n start: 'left',\n end: 'right',\n};\n\nconst targetResizeObserver = new ResizeObserver((entries) => {\n setTimeout(() => {\n entries.forEach((entry) => {\n if (entry.target.__overlay) {\n entry.target.__overlay._updatePosition();\n }\n });\n });\n});\n\n/**\n * @polymerMixin\n */\nexport const PositionMixin = (superClass) =>\n class PositionMixin extends superClass {\n static get properties() {\n return {\n /**\n * The element next to which this overlay should be aligned.\n * The position of the overlay relative to the positionTarget can be adjusted\n * with properties `horizontalAlign`, `verticalAlign`, `noHorizontalOverlap`\n * and `noVerticalOverlap`.\n */\n positionTarget: {\n type: Object,\n value: null,\n sync: true,\n },\n\n /**\n * When `positionTarget` is set, this property defines whether to align the overlay's\n * left or right side to the target element by default.\n * Possible values are `start` and `end`.\n * RTL is taken into account when interpreting the value.\n * The overlay is automatically flipped to the opposite side when it doesn't fit into\n * the default side defined by this property.\n *\n * @attr {start|end} horizontal-align\n */\n horizontalAlign: {\n type: String,\n value: 'start',\n sync: true,\n },\n\n /**\n * When `positionTarget` is set, this property defines whether to align the overlay's\n * top or bottom side to the target element by default.\n * Possible values are `top` and `bottom`.\n * The overlay is automatically flipped to the opposite side when it doesn't fit into\n * the default side defined by this property.\n *\n * @attr {top|bottom} vertical-align\n */\n verticalAlign: {\n type: String,\n value: 'top',\n sync: true,\n },\n\n /**\n * When `positionTarget` is set, this property defines whether the overlay should overlap\n * the target element in the x-axis, or be positioned right next to it.\n *\n * @attr {boolean} no-horizontal-overlap\n */\n noHorizontalOverlap: {\n type: Boolean,\n value: false,\n sync: true,\n },\n\n /**\n * When `positionTarget` is set, this property defines whether the overlay should overlap\n * the target element in the y-axis, or be positioned right above/below it.\n *\n * @attr {boolean} no-vertical-overlap\n */\n noVerticalOverlap: {\n type: Boolean,\n value: false,\n sync: true,\n },\n\n /**\n * If the overlay content has no intrinsic height, this property can be used to set\n * the minimum vertical space (in pixels) required by the overlay. Setting a value to\n * the property effectively disables the content measurement in favor of using this\n * fixed value for determining the open direction.\n *\n * @attr {number} required-vertical-space\n */\n requiredVerticalSpace: {\n type: Number,\n value: 0,\n sync: true,\n },\n };\n }\n\n static get observers() {\n return [\n '__positionSettingsChanged(horizontalAlign, verticalAlign, noHorizontalOverlap, noVerticalOverlap, requiredVerticalSpace)',\n '__overlayOpenedChanged(opened, positionTarget)',\n ];\n }\n\n constructor() {\n super();\n\n this.__onScroll = this.__onScroll.bind(this);\n this._updatePosition = this._updatePosition.bind(this);\n }\n\n /** @protected */\n connectedCallback() {\n super.connectedCallback();\n\n if (this.opened) {\n this.__addUpdatePositionEventListeners();\n }\n }\n\n /** @protected */\n disconnectedCallback() {\n super.disconnectedCallback();\n this.__removeUpdatePositionEventListeners();\n }\n\n /** @private */\n __addUpdatePositionEventListeners() {\n window.visualViewport.addEventListener('resize', this._updatePosition);\n window.visualViewport.addEventListener('scroll', this.__onScroll, true);\n\n this.__positionTargetAncestorRootNodes = getAncestorRootNodes(this.positionTarget);\n this.__positionTargetAncestorRootNodes.forEach((node) => {\n node.addEventListener('scroll', this.__onScroll, true);\n });\n }\n\n /** @private */\n __removeUpdatePositionEventListeners() {\n window.visualViewport.removeEventListener('resize', this._updatePosition);\n window.visualViewport.removeEventListener('scroll', this.__onScroll, true);\n\n if (this.__positionTargetAncestorRootNodes) {\n this.__positionTargetAncestorRootNodes.forEach((node) => {\n node.removeEventListener('scroll', this.__onScroll, true);\n });\n this.__positionTargetAncestorRootNodes = null;\n }\n }\n\n /** @private */\n __overlayOpenedChanged(opened, positionTarget) {\n this.__removeUpdatePositionEventListeners();\n\n if (positionTarget) {\n positionTarget.__overlay = null;\n targetResizeObserver.unobserve(positionTarget);\n\n if (opened) {\n this.__addUpdatePositionEventListeners();\n positionTarget.__overlay = this;\n targetResizeObserver.observe(positionTarget);\n }\n }\n\n if (opened) {\n const computedStyle = getComputedStyle(this);\n if (!this.__margins) {\n this.__margins = {};\n ['top', 'bottom', 'left', 'right'].forEach((propName) => {\n this.__margins[propName] = parseInt(computedStyle[propName], 10);\n });\n }\n this.setAttribute('dir', computedStyle.direction);\n\n this._updatePosition();\n // Schedule another position update (to cover virtual keyboard opening for example)\n requestAnimationFrame(() => this._updatePosition());\n }\n }\n\n __positionSettingsChanged() {\n this._updatePosition();\n }\n\n /** @private */\n __onScroll(e) {\n // If the scroll event occurred inside the overlay, ignore it.\n if (e.target instanceof Node && this.contains(e.target)) {\n return;\n }\n\n this._updatePosition();\n }\n\n _updatePosition() {\n if (!this.positionTarget || !this.opened) {\n return;\n }\n\n const targetRect = this.positionTarget.getBoundingClientRect();\n\n if (targetRect.width === 0 && targetRect.height === 0 && this.opened) {\n this.opened = false;\n return;\n }\n\n // Detect the desired alignment and update the layout accordingly\n const shouldAlignStartVertically = this.__shouldAlignStartVertically(targetRect);\n this.style.justifyContent = shouldAlignStartVertically ? 'flex-start' : 'flex-end';\n\n const isRTL = this.__isRTL;\n const shouldAlignStartHorizontally = this.__shouldAlignStartHorizontally(targetRect, isRTL);\n const flexStart = (!isRTL && shouldAlignStartHorizontally) || (isRTL && !shouldAlignStartHorizontally);\n this.style.alignItems = flexStart ? 'flex-start' : 'flex-end';\n\n // Get the overlay rect after possible overlay alignment changes\n const overlayRect = this.getBoundingClientRect();\n\n // Obtain vertical positioning properties\n const verticalProps = this.__calculatePositionInOneDimension(\n targetRect,\n overlayRect,\n this.noVerticalOverlap,\n PROP_NAMES_VERTICAL,\n this,\n shouldAlignStartVertically,\n );\n\n // Obtain horizontal positioning properties\n const horizontalProps = this.__calculatePositionInOneDimension(\n targetRect,\n overlayRect,\n this.noHorizontalOverlap,\n PROP_NAMES_HORIZONTAL,\n this,\n shouldAlignStartHorizontally,\n );\n\n // Apply the positioning properties to the overlay\n Object.assign(this.style, verticalProps, horizontalProps);\n\n this.toggleAttribute('bottom-aligned', !shouldAlignStartVertically);\n this.toggleAttribute('top-aligned', shouldAlignStartVertically);\n\n this.toggleAttribute('end-aligned', !flexStart);\n this.toggleAttribute('start-aligned', flexStart);\n }\n\n __shouldAlignStartHorizontally(targetRect, rtl) {\n // Using previous size to fix a case where window resize may cause the overlay to be squeezed\n // smaller than its current space before the fit-calculations.\n const contentWidth = Math.max(this.__oldContentWidth || 0, this.$.overlay.offsetWidth);\n this.__oldContentWidth = this.$.overlay.offsetWidth;\n\n const viewportWidth = Math.min(window.innerWidth, document.documentElement.clientWidth);\n const defaultAlignLeft = (!rtl && this.horizontalAlign === 'start') || (rtl && this.horizontalAlign === 'end');\n\n return this.__shouldAlignStart(\n targetRect,\n contentWidth,\n viewportWidth,\n this.__margins,\n defaultAlignLeft,\n this.noHorizontalOverlap,\n PROP_NAMES_HORIZONTAL,\n );\n }\n\n __shouldAlignStartVertically(targetRect) {\n // Using previous size to fix a case where window resize may cause the overlay to be squeezed\n // smaller than its current space before the fit-calculations.\n const contentHeight =\n this.requiredVerticalSpace || Math.max(this.__oldContentHeight || 0, this.$.overlay.offsetHeight);\n this.__oldContentHeight = this.$.overlay.offsetHeight;\n\n const viewportHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);\n const defaultAlignTop = this.verticalAlign === 'top';\n\n return this.__shouldAlignStart(\n targetRect,\n contentHeight,\n viewportHeight,\n this.__margins,\n defaultAlignTop,\n this.noVerticalOverlap,\n PROP_NAMES_VERTICAL,\n );\n }\n\n // eslint-disable-next-line max-params\n __shouldAlignStart(targetRect, contentSize, viewportSize, margins, defaultAlignStart, noOverlap, propNames) {\n const spaceForStartAlignment =\n viewportSize - targetRect[noOverlap ? propNames.end : propNames.start] - margins[propNames.end];\n const spaceForEndAlignment = targetRect[noOverlap ? propNames.start : propNames.end] - margins[propNames.start];\n\n const spaceForDefaultAlignment = defaultAlignStart ? spaceForStartAlignment : spaceForEndAlignment;\n const spaceForOtherAlignment = defaultAlignStart ? spaceForEndAlignment : spaceForStartAlignment;\n\n const shouldGoToDefaultSide =\n spaceForDefaultAlignment > spaceForOtherAlignment || spaceForDefaultAlignment > contentSize;\n\n return defaultAlignStart === shouldGoToDefaultSide;\n }\n\n /**\n * Returns an adjusted value after resizing the browser window,\n * to avoid wrong calculations when e.g. previously set `bottom`\n * CSS property value is larger than the updated viewport height.\n * See https://github.com/vaadin/web-components/issues/4604\n */\n __adjustBottomProperty(cssPropNameToSet, propNames, currentValue) {\n let adjustedProp;\n\n if (cssPropNameToSet === propNames.end) {\n // Adjust horizontally\n if (propNames.end === PROP_NAMES_VERTICAL.end) {\n const viewportHeight = Math.min(window.innerHeight, document.documentElement.clientHeight);\n\n if (currentValue > viewportHeight && this.__oldViewportHeight) {\n const heightDiff = this.__oldViewportHeight - viewportHeight;\n adjustedProp = currentValue - heightDiff;\n }\n\n this.__oldViewportHeight = viewportHeight;\n }\n\n // Adjust vertically\n if (propNames.end === PROP_NAMES_HORIZONTAL.end) {\n const viewportWidth = Math.min(window.innerWidth, document.documentElement.clientWidth);\n\n if (currentValue > viewportWidth && this.__oldViewportWidth) {\n const widthDiff = this.__oldViewportWidth - viewportWidth;\n adjustedProp = currentValue - widthDiff;\n }\n\n this.__oldViewportWidth = viewportWidth;\n }\n }\n\n return adjustedProp;\n }\n\n /**\n * Returns an object with CSS position properties to set,\n * e.g. { top: \"100px\" }\n */\n // eslint-disable-next-line max-params\n __calculatePositionInOneDimension(targetRect, overlayRect, noOverlap, propNames, overlay, shouldAlignStart) {\n const cssPropNameToSet = shouldAlignStart ? propNames.start : propNames.end;\n const cssPropNameToClear = shouldAlignStart ? propNames.end : propNames.start;\n\n const currentValue = parseFloat(overlay.style[cssPropNameToSet] || getComputedStyle(overlay)[cssPropNameToSet]);\n const adjustedValue = this.__adjustBottomProperty(cssPropNameToSet, propNames, currentValue);\n\n const diff =\n overlayRect[shouldAlignStart ? propNames.start : propNames.end] -\n targetRect[noOverlap === shouldAlignStart ? propNames.end : propNames.start];\n\n const valueToSet = adjustedValue\n ? `${adjustedValue}px`\n : `${currentValue + diff * (shouldAlignStart ? -1 : 1)}px`;\n\n return {\n [cssPropNameToSet]: valueToSet,\n [cssPropNameToClear]: '',\n };\n }\n };\n","/**\n * @license\n * Copyright (c) 2022 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport '../color.js';\nimport '../sizing.js';\nimport { css } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nconst loader = css`\n [part~='loader'] {\n box-sizing: border-box;\n width: var(--lumo-icon-size-s);\n height: var(--lumo-icon-size-s);\n border: 2px solid transparent;\n border-color: var(--lumo-primary-color-10pct) var(--lumo-primary-color-10pct) var(--lumo-primary-color)\n var(--lumo-primary-color);\n border-radius: calc(0.5 * var(--lumo-icon-size-s));\n opacity: 0;\n pointer-events: none;\n }\n\n :host(:not([loading])) [part~='loader'] {\n display: none;\n }\n\n :host([loading]) [part~='loader'] {\n animation: 1s linear infinite lumo-loader-rotate, 0.3s 0.1s lumo-loader-fade-in both;\n }\n\n @keyframes lumo-loader-fade-in {\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n }\n\n @keyframes lumo-loader-rotate {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport { loader };\n","/**\n * @license\n * Copyright (c) 2017 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport '../spacing.js';\nimport '../style.js';\nimport { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { overlay } from './overlay.js';\n\nconst menuOverlayCore = css`\n :host([opening]),\n :host([closing]) {\n animation: 0.14s lumo-overlay-dummy-animation;\n }\n\n [part='overlay'] {\n will-change: opacity, transform;\n }\n\n :host([opening]) [part='overlay'] {\n animation: 0.1s lumo-menu-overlay-enter ease-out both;\n }\n\n @keyframes lumo-menu-overlay-enter {\n 0% {\n opacity: 0;\n transform: translateY(-4px);\n }\n }\n\n :host([closing]) [part='overlay'] {\n animation: 0.1s lumo-menu-overlay-exit both;\n }\n\n @keyframes lumo-menu-overlay-exit {\n 100% {\n opacity: 0;\n }\n }\n`;\n\nregisterStyles('', menuOverlayCore, { moduleId: 'lumo-menu-overlay-core' });\n\nconst menuOverlayExt = css`\n /* Small viewport (bottom sheet) styles */\n /* Use direct media queries instead of the state attributes ([phone] and [fullscreen]) provided by the elements */\n @media (max-width: 420px), (max-height: 420px) {\n :host {\n top: 0 !important;\n right: 0 !important;\n bottom: var(--vaadin-overlay-viewport-bottom, 0) !important;\n left: 0 !important;\n align-items: stretch !important;\n justify-content: flex-end !important;\n }\n\n [part='overlay'] {\n max-height: 50vh;\n width: 100vw;\n border-radius: 0;\n box-shadow: var(--lumo-box-shadow-xl);\n }\n\n /* The content part scrolls instead of the overlay part, because of the gradient fade-out */\n [part='content'] {\n padding: 30px var(--lumo-space-m);\n max-height: inherit;\n box-sizing: border-box;\n -webkit-overflow-scrolling: touch;\n overflow: auto;\n -webkit-mask-image: linear-gradient(transparent, #000 40px, #000 calc(100% - 40px), transparent);\n mask-image: linear-gradient(transparent, #000 40px, #000 calc(100% - 40px), transparent);\n }\n\n [part='backdrop'] {\n display: block;\n }\n\n /* Animations */\n\n :host([opening]) [part='overlay'] {\n animation: 0.2s lumo-mobile-menu-overlay-enter cubic-bezier(0.215, 0.61, 0.355, 1) both;\n }\n\n :host([closing]),\n :host([closing]) [part='backdrop'] {\n animation-delay: 0.14s;\n }\n\n :host([closing]) [part='overlay'] {\n animation: 0.14s 0.14s lumo-mobile-menu-overlay-exit cubic-bezier(0.55, 0.055, 0.675, 0.19) both;\n }\n }\n\n @keyframes lumo-mobile-menu-overlay-enter {\n 0% {\n transform: translateY(150%);\n }\n }\n\n @keyframes lumo-mobile-menu-overlay-exit {\n 100% {\n transform: translateY(150%);\n }\n }\n`;\n\nconst menuOverlay = [overlay, menuOverlayCore, menuOverlayExt];\n\nregisterStyles('', menuOverlay, { moduleId: 'lumo-menu-overlay' });\n\nexport { menuOverlayCore, menuOverlay };\n"],"names":["ComboBoxDataProviderMixin","superClass","properties","pageSize","type","Number","value","observer","size","dataProvider","Object","_pendingRequests","__placeHolder","__previousDataProviderFilter","String","observers","ready","super","this","_scroller","addEventListener","e","index","detail","currentScrollerPos","allowedIndexRange","Math","floor","_shouldSkipIndex","undefined","page","_getPageForIndex","_shouldLoadPage","_loadPage","_dataProviderFilterChanged","filter","loading","_shouldFetchData","clearCache","opened","length","_ensureFirstPage","filteredItems","_forceNextRequest","loadedItem","params","callback","items","splice","_isInputFocused","_commitValue","keys","i","push","_sizeChanged","slice","_flushPendingRequests","_pageSizeChanged","oldPageSize","Error","_dataProviderChanged","oldDataProvider","_ensureItemsOrDataProvider","restoreOldValueCallback","_warnDataProviderValue","selectedItem","valueIndex","__getItemIndexByValue","_getItemLabel","console","warn","lastPage","ceil","entries","forEach","parseInt","ComboBoxItemMixin","item","label","selected","Boolean","reflectToAttribute","focused","renderer","Function","observedAttributes","attributeChangedCallback","name","oldValue","newValue","connectedCallback","_owner","parentNode","owner","hostDir","getAttribute","setAttribute","requestContentUpdate","model","__rendererOrItemChanged","_oldRenderer","innerHTML","_$litPart$","__updateLabel","textContent","VirtualKeyboardController","constructor","host","__setVirtualKeyboardEnabled","inputElement","inputMode","isValidValue","findItemIndex","findIndex","ComboBoxMixin","subclass","notify","autoOpenDisabled","readonly","Array","allowCustomValue","_lastCommittedValue","_focusedIndex","itemLabelPath","itemValuePath","itemIdPath","_toggleElement","_dropdownItems","_closeOnBlurIsPrevented","_overlayOpened","_boundOverlaySelectedItemChanged","_overlaySelectedItemChanged","bind","_boundOnClearButtonMouseDown","__onClearButtonMouseDown","_boundOnClick","_onClick","_boundOnOverlayTouchAction","_onOverlayTouchAction","_boundOnTouchend","_onTouchend","_tagNamePrefix","_nativeInput","_inputElementChanged","input","autocomplete","autocapitalize","_revertInputValueToValue","clearElement","_initOverlay","_initScroller","bringToFrontListener","requestAnimationFrame","_overlayElement","bringToFront","addController","disconnectedCallback","close","_getItemElements","open","disabled","_propertiesChanged","currentProps","changedProps","oldProps","_filterChanged","overlay","$","_comboBox","preventDefault","scrollerTag","root","firstChild","appendChild","document","createElement","scroller","querySelector","getItemLabel","_updateScroller","focusedIndex","theme","style","maxHeight","getComputedStyle","getPropertyValue","setProperties","_openedOrItemsChanged","_overlayOpenedChanged","wasOpened","dispatchEvent","CustomEvent","bubbles","composed","_onOpened","_focusedIndexChanged","oldIndex","_updateActiveDescendant","find","el","id","removeAttribute","_openedChanged","_openedWithFocusRing","hasAttribute","focus","restoreFocusOnClose","_onClosed","blur","_isClearButton","event","composedPath","_onClearButtonClick","_onClearAction","_onToggleButtonClick","_onHostClick","includes","_onKeyDown","key","_onArrowDown","_onArrowUp","toString","_getItemValue","min","_prefillFocusedItemLabel","max","focusedItem","_inputElementValue","_markAllSelectionRange","_setSelectionRange","start","end","setSelectionRange","_clearSelectionRange","pos","_closeOrCommit","_onEnter","_hasValidInputValue","stopPropagation","hasInvalidOption","_onEscape","cancel","clearButtonVisible","_revertInputValue","_toggleElementChanged","toggleElement","activeElement","_detectAndDispatchChange","itemMatchingInputValue","__getItemIndexByLabel","customValue","_lastCustomValue","cancelable","defaultPrevented","_onInput","props","_onChange","_itemLabelPathChanged","error","_scrollIntoView","_filterItems","_filteredItemsChanged","_selectedItemChanged","_toggleHasValue","_hasValue","_valueChanged","oldVal","_selectItemForValue","hasFocus","validate","_itemsChanged","oldItems","oldFilteredItems","_setDropdownItems","focusedItemIndex","arr","toLowerCase","indexOf","previouslySelectedItem","from","querySelectorAll","scrollIntoView","_setFocused","_shouldRemoveFocus","relatedTarget","localName","ComboBoxOverlayMixin","requiredVerticalSpace","comboBox","_shouldCloseOnOutsideClick","eventPath","positionTarget","_updateOverlayWidth","propPrefix","setProperty","clientWidth","customWidth","removeProperty","_setOverlayWidth","_updatePosition","ComboBoxPlaceholder","ComboBoxScrollerMixin","__boundOnItemClick","__onItemClick","_viewportTotalPaddingBottom","_cachedViewportTotalPaddingBottom","itemsStyle","window","selector","paddingBottom","borderBottomWidth","map","v","reduce","sum","__hostTagName","is","replace","__patchWheelOverScrolling","__virtualizer","createElements","__createElements","updateElement","_updateElement","elementsContainer","scrollTarget","scrollContainer","update","visibleItemsCount","_visibleItemsCount","targetIndex","lastVisibleIndex","scrollToIndex","firstVisibleIndex","lastPhysicalItem","children","hidden","lastPhysicalItemRect","getBoundingClientRect","scrollerRect","scrollTopAdjust","bottom","scrollTop","_isItemSelected","__itemsChanged","flush","__loadingChanged","__openedChanged","__selectedItemChanged","__focusedIndexChanged","__rendererChanged","oldRenderer","count","tabIndex","width","__requestItemByIndex","currentTarget","scrolledToTop","scrolledToBottom","scrollHeight","clientHeight","deltaY","_oldScrollerPosition","comboBoxItem","moduleId","comboBoxOverlay","comboBoxLoader","PROP_NAMES_VERTICAL","PROP_NAMES_HORIZONTAL","targetResizeObserver","ResizeObserver","setTimeout","entry","target","__overlay","PositionMixin","sync","horizontalAlign","verticalAlign","noHorizontalOverlap","noVerticalOverlap","__onScroll","__addUpdatePositionEventListeners","__removeUpdatePositionEventListeners","visualViewport","__positionTargetAncestorRootNodes","node","removeEventListener","__overlayOpenedChanged","unobserve","observe","computedStyle","__margins","propName","direction","__positionSettingsChanged","Node","contains","targetRect","height","shouldAlignStartVertically","__shouldAlignStartVertically","justifyContent","isRTL","__isRTL","shouldAlignStartHorizontally","__shouldAlignStartHorizontally","flexStart","alignItems","overlayRect","verticalProps","__calculatePositionInOneDimension","horizontalProps","assign","toggleAttribute","rtl","contentWidth","__oldContentWidth","offsetWidth","viewportWidth","innerWidth","documentElement","defaultAlignLeft","__shouldAlignStart","contentHeight","__oldContentHeight","offsetHeight","viewportHeight","innerHeight","defaultAlignTop","contentSize","viewportSize","margins","defaultAlignStart","noOverlap","propNames","spaceForStartAlignment","spaceForEndAlignment","spaceForDefaultAlignment","__adjustBottomProperty","cssPropNameToSet","currentValue","adjustedProp","__oldViewportHeight","__oldViewportWidth","shouldAlignStart","cssPropNameToClear","parseFloat","adjustedValue","diff","valueToSet","loader","menuOverlayCore","menuOverlayExt","menuOverlay"],"sourceRoot":""}
|