@descope/web-components-ui 2.3.3 → 3.0.1
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 +16884 -16946
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +5291 -5373
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/9365.js +1 -1
- package/dist/umd/9365.js.map +1 -1
- package/dist/umd/DescopeDev.js +1 -1
- package/dist/umd/DescopeDev.js.map +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-index-js.js.map +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-multi-selection-group-internal-index-js.js.map +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-index-js.js.map +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-internal-index-js.js.map +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js +1 -1
- package/dist/umd/button-selection-group-fields-descope-button-selection-group-item-index-js.js.map +1 -1
- package/dist/umd/descope-alert-index-js.js +1 -1
- package/dist/umd/descope-alert-index-js.js.map +1 -1
- package/dist/umd/descope-code-snippet-index-js.js +1 -1
- package/dist/umd/descope-code-snippet-index-js.js.map +1 -1
- package/dist/umd/descope-container-index-js.js +1 -1
- package/dist/umd/descope-container-index-js.js.map +1 -1
- package/dist/umd/descope-date-field-descope-calendar-index-js.js +1 -1
- package/dist/umd/descope-date-field-descope-calendar-index-js.js.map +1 -1
- package/dist/umd/descope-date-field-index-js.js +1 -1
- package/dist/umd/descope-date-field-index-js.js.map +1 -1
- package/dist/umd/descope-divider-index-js.js +1 -1
- package/dist/umd/descope-divider-index-js.js.map +1 -1
- package/dist/umd/descope-grid-descope-grid-custom-column-index-js.js.map +1 -1
- package/dist/umd/descope-grid-descope-grid-item-details-column-index-js.js.map +1 -1
- package/dist/umd/descope-grid-descope-grid-selection-column-index-js.js.map +1 -1
- package/dist/umd/descope-grid-descope-grid-text-column-index-js.js.map +1 -1
- package/dist/umd/descope-grid-index-js.js +1 -1
- package/dist/umd/descope-grid-index-js.js.map +1 -1
- package/dist/umd/descope-hybrid-field-index-js.js +1 -1
- package/dist/umd/descope-hybrid-field-index-js.js.map +1 -1
- package/dist/umd/descope-loader-linear-index-js.js +1 -1
- package/dist/umd/descope-loader-linear-index-js.js.map +1 -1
- package/dist/umd/descope-loader-radial-index-js.js +1 -1
- package/dist/umd/descope-loader-radial-index-js.js.map +1 -1
- package/dist/umd/descope-multi-select-combo-box-index-js.js.map +1 -1
- package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js +1 -1
- package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js.map +1 -1
- package/dist/umd/descope-new-password-index-js.js +1 -1
- package/dist/umd/descope-new-password-index-js.js.map +1 -1
- package/dist/umd/descope-notification-index-js.js.map +1 -1
- package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js +1 -1
- package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js.map +1 -1
- package/dist/umd/descope-passcode-index-js.js +1 -1
- package/dist/umd/descope-passcode-index-js.js.map +1 -1
- package/dist/umd/descope-policy-validation-index-js.js +1 -1
- package/dist/umd/descope-policy-validation-index-js.js.map +1 -1
- package/dist/umd/descope-radio-group-index-js.js.map +1 -1
- package/dist/umd/descope-recaptcha-index-js.js +1 -1
- package/dist/umd/descope-recaptcha-index-js.js.map +1 -1
- package/dist/umd/descope-scopes-list-index-js.js.map +1 -1
- package/dist/umd/descope-security-questions-setup-index-js.js +1 -1
- package/dist/umd/descope-security-questions-setup-index-js.js.map +1 -1
- package/dist/umd/descope-security-questions-verify-index-js.js +1 -1
- package/dist/umd/descope-security-questions-verify-index-js.js.map +1 -1
- package/dist/umd/descope-third-party-app-logo-index-js.js +1 -1
- package/dist/umd/descope-third-party-app-logo-index-js.js.map +1 -1
- package/dist/umd/descope-upload-file-index-js.js +1 -1
- package/dist/umd/descope-upload-file-index-js.js.map +1 -1
- package/dist/umd/descope-user-attribute-index-js.js +1 -1
- package/dist/umd/descope-user-attribute-index-js.js.map +1 -1
- package/dist/umd/descope-user-auth-method-index-js.js +1 -1
- package/dist/umd/descope-user-auth-method-index-js.js.map +1 -1
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-descope-mappings-field-internal-index-js.js.map +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-mappings-field-index-js.js.map +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
- package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-descope-phone-field-internal-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-field-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-descope-phone-input-box-internal-index-js.js.map +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js +1 -1
- package/dist/umd/phone-fields-descope-phone-input-box-field-index-js.js.map +1 -1
- package/package.json +32 -32
- package/src/baseClasses/createBaseClass.js +1 -1
- package/src/components/button-selection-group-fields/baseButtonSelectionGroup.js +0 -2
- package/src/components/button-selection-group-fields/createBaseButtonSelectionGroupInternalClass.js +1 -3
- package/src/components/button-selection-group-fields/descope-button-multi-selection-group-internal/ButtonMultiSelectionGroupInternalClass.js +0 -1
- package/src/components/button-selection-group-fields/descope-button-selection-group-item/ButtonSelectionGroupItemClass.js +2 -2
- package/src/components/descope-alert/AlertClass.js +2 -2
- package/src/components/descope-code-snippet/CodeSnippetClass.js +1 -1
- package/src/components/descope-code-snippet/helpers.js +1 -3
- package/src/components/descope-container/ContainerClass.js +1 -1
- package/src/components/descope-date-field/DateCounterClass.js +1 -1
- package/src/components/descope-date-field/DateFieldClass.js +4 -5
- package/src/components/descope-date-field/descope-calendar/CalendarClass.js +2 -2
- package/src/components/descope-date-field/descope-calendar/helpers.js +1 -3
- package/src/components/descope-divider/DividerClass.js +2 -2
- package/src/components/descope-grid/GridClass.js +15 -19
- package/src/components/descope-grid/descope-grid-custom-column/GridCustomColumnClass.js +0 -1
- package/src/components/descope-grid/descope-grid-custom-column/index.js +0 -1
- package/src/components/descope-grid/descope-grid-item-details-column/GridItemDetailsColumnClass.js +0 -2
- package/src/components/descope-grid/descope-grid-selection-column/GridSelectionColumnClass.js +0 -3
- package/src/components/descope-grid/descope-grid-text-column/GridTextColumnClass.js +0 -1
- package/src/components/descope-grid/helpers.js +1 -3
- package/src/components/descope-hybrid-field/HybridFieldClass.js +1 -1
- package/src/components/descope-loader-linear/LoaderLinearClass.js +1 -1
- package/src/components/descope-loader-radial/LoaderRadialClass.js +1 -1
- package/src/components/descope-multi-select-combo-box/MultiSelectComboBoxClass.js +3 -9
- package/src/components/descope-new-password/descope-new-password-internal/NewPasswordInternal.js +3 -6
- package/src/components/descope-notification/NotificationClass.js +0 -2
- package/src/components/descope-passcode/PasscodeClass.js +1 -1
- package/src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js +1 -3
- package/src/components/descope-passcode/descope-passcode-internal/helpers.js +1 -3
- package/src/components/descope-policy-validation/PolicyValidationClass.js +1 -2
- package/src/components/descope-radio-group/RadioGroupClass.js +3 -8
- package/src/components/descope-recaptcha/RecaptchaClass.js +1 -1
- package/src/components/descope-scopes-list/ScopesListClass.js +0 -3
- package/src/components/descope-security-questions-setup/SecurityQuestionsSetupClass.js +5 -8
- package/src/components/descope-security-questions-verify/SecurityQuestionsVerifyClass.js +3 -4
- package/src/components/descope-third-party-app-logo/ThirdPartyAppLogoClass.js +1 -1
- package/src/components/descope-upload-file/UploadFileClass.js +2 -2
- package/src/components/descope-upload-file/helpers.js +3 -6
- package/src/components/descope-user-attribute/UserAttributeClass.js +4 -4
- package/src/components/descope-user-auth-method/UserAuthMethodClass.js +5 -5
- package/src/components/mapping-fields/descope-mappings-field/MappingsFieldClass.js +1 -1
- package/src/components/mapping-fields/descope-mappings-field/descope-mappings-field-internal/MappingsFieldInternal.js +0 -1
- package/src/components/phone-fields/descope-phone-field/PhoneFieldClass.js +1 -1
- package/src/components/phone-fields/descope-phone-field/descope-phone-field-internal/PhoneFieldInternal.js +1 -1
- package/src/components/phone-fields/descope-phone-input-box-field/PhoneFieldInputBoxClass.js +1 -1
- package/src/components/phone-fields/descope-phone-input-box-field/descope-phone-input-box-internal/PhoneFieldInternalInputBox.js +1 -1
- package/src/components/phone-fields/helpers.js +2 -3
- package/src/helpers/componentHelpers.js +0 -1
- package/src/helpers/themeHelpers/colorsHelpers.js +2 -3
- package/src/helpers/themeHelpers/index.js +4 -6
- package/src/helpers/themeHelpers/resetHelpers.js +1 -3
- package/src/index.umd.js +0 -1
- package/src/mixins/createDynamicDataMixin.js +0 -1
- package/src/mixins/createStyleMixin/helpers.js +1 -1
- package/src/mixins/createStyleMixin/index.js +1 -2
- package/src/mixins/externalInputHelpers.js +0 -2
- package/src/mixins/externalInputMixin.js +1 -1
- package/src/mixins/inputValidationMixin.js +0 -4
- package/src/mixins/normalizeBooleanAttributesMixin.js +1 -3
- package/src/mixins/portalMixin.js +0 -1
- package/src/mixins/proxyInputMixin.js +0 -1
- package/src/theme/components/alert.js +1 -1
- package/src/theme/components/index.js +22 -22
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*! For license information please see descope-passcode-index-js.js.LICENSE.txt */
|
|
2
|
-
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[3359,4838,5166,7163,8884],{3393(t,e,r){r.d(e,{y:()=>a});var i=r(9696),n=r(79365),o=r(81365);const a=(...t)=>(0,i.Zz)(n.XX,n._$,n.yF,n.jd)((0,o.q)(...t))},74713(t,e,r){r.d(e,{T:()=>l,l:()=>d});var i=r(79365),n=r(81365),o=r(9696),a=r(97810),s=r(25964);const l=(0,a.xE)("loader-radial");class p extends((0,n.q)({componentName:l,baseSelector:":host > div"})){constructor(){super(),this.attachShadow({mode:"open"}).innerHTML="\n\t\t<div></div>\n\t",(0,s.fz)("\n @keyframes spin {\n\t\t\t\t0% { transform: rotate(0deg); }\n\t\t\t\t100% { transform: rotate(360deg); }\n\t\t\t}\n\t\t\t:host {\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t}\n\t\t\t:host > div {\n\t\t\t\tanimation-name: spin;\n\t\t\t}\n ",this)}}const d=(0,o.Zz)((0,i.RF)({mappings:{hostDisplay:{property:"display"},spinnerSize:[{property:"width"},{property:"height"}],spinnerBorderWidth:{property:"border-width"},spinnerBorderStyle:{property:"border-style"},spinnerBorderRadius:{property:"border-radius"},spinnerQuadrant1Color:{property:"border-top-color"},spinnerQuadrant2Color:{property:"border-bottom-color"},spinnerQuadrant3Color:{property:"border-right-color"},spinnerQuadrant4Color:{property:"border-left-color"},animationDuration:{},animationTimingFunction:{},animationIterationCount:{}}}),i.VO,i.tQ)(p)},54249(t,e,r){r.r(e),r.d(e,{LoaderRadialClass:()=>i.l,componentName:()=>i.T});var i=r(74713);customElements.define(i.T,i.l)},47168(t,e,r){r.d(e,{A:()=>h,T:()=>p});var i=r(68049),n=r.n(i),o=r(3393),a=r(97810),s=r(18280),l=r(25964);const p=(0,a.xE)("passcode-internal"),d=["digits","loading"],c=["disabled","bordered","size","invalid","readonly","aria-labelledby"],u=(0,o.y)({componentName:p,baseSelector:"div"}),h=class extends u{static get observedAttributes(){return d.concat(u.observedAttributes||[])}constructor(){super(),this.innerHTML='\n\t\t<div class="wrapper"></div>\n\t\t<div class="loader-container">\n <descope-loader-radial size="xs" mode="primary"></descope-loader-radial>\n </div>\n\t\t',this.wrapperEle=this.querySelector(".wrapper"),this.loaderContainer=this.querySelector(".loader-container")}renderInputs(){const t=[...Array(this.digits).keys()].map(t=>`\n\t\t<descope-text-field\n\t\t\tdata-id=${t}\n\t\t\ttype="tel"\n\t\t\tautocomplete="one-time-code"\n\t\t\tinputMode="numeric"\n\t\t></descope-text-field>\n\t`);this.wrapperEle.innerHTML=t.join(""),this.inputs=Array.from(this.querySelectorAll("descope-text-field")),this.initInputs()}handleLoadingState(t){t?this.setAttribute("inert","true"):this.removeAttribute("inert")}get digits(){return Number.parseInt(this.getAttribute("digits"),10)||6}get value(){return this.inputs?.map(({value:t})=>t).join("")||""}set value(t){t!==this.value&&this.parseInputValue(this.inputs[0],(0,s.zj)(t))}getValidity(){return this.isRequired&&!this.value?{valueMissing:!0}:this.pattern&&!new RegExp(this.pattern).test(this.value)?{patternMismatch:!0}:{}}init(){this.addEventListener("focus",t=>{t.isTrusted&&this.inputs[0].focus()}),super.init?.(),this.renderInputs()}getInputIdx(t){return Number.parseInt(t.getAttribute("data-id"),10)}getNextInput(t){const e=this.getInputIdx(t),r=Math.min(e+1,this.inputs.length-1);return this.inputs[r]}getPrevInput(t){const e=this.getInputIdx(t),r=Math.max(e-1,0);return this.inputs[r]}fillDigits(t,e){for(let r=0;r<t.length;r+=1){e.value=t[r]??"";const i=this.getNextInput(e);if(i===e)break;e=i}(0,s.pW)(e)}parseInputValue(t,e=""){const r=e.split("");r.length?this.fillDigits(r,t):t.value=""}initInputs(){this.inputs.forEach(t=>{(0,l.fz)(`\n vaadin-text-field::part(input-field)::before {\n ${s.vz}: '';\n content: var(${s._B}, var(${s.vz}));\n position: absolute;\n width: 100%;\n height: 100%;\n display: var(${s.n6}, none);\n align-items: center;\n justify-content: center;\n }`,t);const e=n()(e=>{this.parseInputValue(t,e),(0,s.Z)(t)},0,{trailing:!0});t.addEventListener("input",r=>{t.value=(0,s.zj)(t.value),t.value&&(0,s.Z)(t,t.value[0]),setTimeout(()=>{"deleteContentBackward"===r?.inputType&&(0,s.pW)(this.getPrevInput(t))}),e(t.value)}),t.onkeydown=({key:e})=>{"Backspace"===e?t.value?t.setSelectionRange(1,1):setTimeout(()=>(0,s.pW)(this.getPrevInput(t)),0):1===e.length&&(t.value="")},(0,a.EA)(this,t,{includeAttrs:c}),t.shadowRoot.querySelector("input").setAttribute("aria-label","passcode digit")}),this.handleFocusEventsDispatching(this.inputs),this.handleInputEventDispatching()}attributeChangedCallback(t,e,r){super.attributeChangedCallback?.(t,e,r),e!==r&&d.includes(t)&&("digits"===t&&this.renderInputs(),"loading"===t&&this.handleLoadingState("true"===r))}get pattern(){return`^$|^\\d{${this.digits},}$`}}},18280(t,e,r){r.d(e,{Z:()=>l,_B:()=>i,n6:()=>n,pW:()=>a,vz:()=>o,zj:()=>s});const i="--descope-input-mask-content",n="--descope-input-mask-display",o="--descope-input-mask-fallback",a=t=>{t?.focus(),t?.setSelectionRange?.(1,1)},s=t=>t.replace(/\D/g,"")||"",l=(t,e)=>{e?(t.style.setProperty(i,`"${e}"`),t.style.setProperty(n,"flex")):(t.style.removeProperty(i),t.style.removeProperty(n))}},59053(t,e,r){r.r(e);var i=r(47168);customElements.define(i.T,i.A)},54690(t,e,r){r.r(e),r.d(e,{PasscodeClass:()=>C,componentName:()=>c});var i=r(79365),n=r(47168),o=r(79275),a=r(74713),s=r(9696),l=r(97810),p=r(73551),d=r(25964);const c=(0,l.xE)("passcode"),u=["digits"],{host:h,digitField:y,label:g,requiredIndicator:b,internalWrapper:m,focusedDigitField:f,errorMessage:v}={host:{selector:()=>":host"},focusedDigitField:{selector:()=>`${o.w.componentName}[focused="true"]`},digitField:{selector:()=>o.w.componentName},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},internalWrapper:{selector:"descope-passcode-internal .wrapper"},errorMessage:{selector:"::part(error-message)"}},x=o.w.cssVarList,w=a.l.cssVarList,C=(0,s.Zz)((0,i.RF)({mappings:{fontSize:[{...y,property:x.fontSize},h],hostWidth:{property:"width"},hostDirection:{...h,property:"direction"},fontFamily:[h,{...g}],labelTextColor:[{...g,property:"color"},{...g,property:"-webkit-text-fill-color"},{...b,property:"color"},{...b,property:"-webkit-text-fill-color"}],labelRequiredIndicator:{...b,property:"content"},errorMessageTextColor:{...v,property:"color"},errorMessageIcon:{...v,property:"background-image"},errorMessageIconSize:{...v,property:"background-size"},errorMessageIconPadding:{...v,property:"padding-inline-start"},errorMessageIconRepeat:{...v,property:"background-repeat"},errorMessageIconPosition:{...v,property:"background-position"},errorMessageFontSize:{...v,property:"font-size"},digitValueTextColor:{selector:o.w.componentName,property:x.inputValueTextColor},digitSize:[{...y,property:"height"},{...y,property:"width"}],digitPadding:{...y,property:x.inputHorizontalPadding},digitTextAlign:{...y,property:x.inputTextAlign},digitCaretTextColor:{...y,property:x.inputCaretTextColor},digitSpacing:{...m,property:"gap"},digitOutlineColor:{...y,property:x.inputOutlineColor},digitOutlineWidth:{...y,property:x.inputOutlineWidth},focusedDigitFieldOutlineColor:{...f,property:x.inputOutlineColor},overlayOpacity:{...m,property:"opacity"},spinnerSize:{selector:a.l.componentName,property:w.spinnerSize}}}),i.VO,i.Yg,(0,i.OZ)({proxyProps:["value","selectionStart"]}),i.tQ,t=>class extends t{static get observedAttributes(){return u.concat(t.observedAttributes||[])}get digits(){return Number.parseInt(this.getAttribute("digits"),10)||6}init(){super.init?.(),(0,d.fz)("\n .wrapper {\n display: flex;\n width: 100%;\n justify-content: space-between;\n direction: ltr;\n position: relative;\n }\n\n descope-text-field {\n direction: ltr;\n }\n\n .loader-container {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n ",this);const t=document.createElement("template");t.innerHTML=`\n <${n.T}\n bordered="true"\n name="code"\n tabindex="-1"\n slot="input"\n role="textbox"\n ><slot></slot></${n.T}>\n `,this.baseElement.appendChild(t.content.cloneNode(!0)),this.inputElement=this.shadowRoot.querySelector(n.T),(0,l.EA)(this,this.inputElement,{includeAttrs:["digits","size","loading","disabled"]})}attributeChangedCallback(t,e,r){super.attributeChangedCallback?.(t,e,r),"digits"===t&&(this.style["--passcode-digits-count"]=r)}})((0,i.tz)({slots:[],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tmin-width: calc(var(--passcode-digits-count) * 2em);\n\t\t\t}\n\t\t\t${(0,p.X6)()}\n\t\t\t:host::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\t\t\t:host::part(input-field)::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n :host([loading="true"]) descope-passcode-internal .loader-container {\n display: block;\n }\n\n\t\t\tdescope-passcode-internal {\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tmin-height: initial;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal .wrapper {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tmin-height: initial;\n\t\t\t\theight: 100%;\n\t\t\t\tjustify-content: space-between;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal descope-text-field {\n\t\t\t\tmin-width: 2em;\n\t\t\t\tmax-width: var(${x.inputHeight});\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tpadding: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t}\n\n /* safari */\n\t\t\tvaadin-text-field::part(input-field)::after {\n opacity: 0;\n }\n\n\t\t\tvaadin-text-field {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\tvaadin-text-field::before {\n\t\t\t\theight: 0;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly] > input:placeholder-shown {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly]::part(input-field)::after {\n\t\t\t\tborder: 0 solid;\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\n ${(0,p.$J)("vaadin-text-field")}\n\t\t\t${(0,p.I4)("vaadin-text-field")}\n \t`,excludeAttrsSync:["tabindex","style"],componentName:c}));r(21374),r(54249),r(59053),customElements.define(c,C)},79275(t,e,r){r.d(e,{T:()=>l,w:()=>d});var i=r(79365),n=r(6424),o=r(9696),a=r(97810),s=r(73551);const l=(0,a.xE)("text-field"),p=["type","label-type","copy-to-clipboard"],d=(0,o.Zz)((0,i.RF)({mappings:n.A}),i.VO,(0,i.OZ)({proxyProps:["value","selectionStart"],useProxyTargets:!0}),i.tQ,t=>class extends t{static get observedAttributes(){return p.concat(t.observedAttributes||[])}icon;init(){super.init?.()}renderCopyToClipboard(t){if(!t)return void this.icon?.remove();const e={icon:"vaadin:copy-o",title:"Copy",style:"cursor: pointer"},r={icon:"vaadin:check-circle-o",title:"Copied",style:"cursor: initial"};this.icon=Object.assign(document.createElement("vaadin-icon"),{slot:"suffix",...e}),this.baseElement.appendChild(this.icon),this.icon.addEventListener("click",()=>{navigator.clipboard.writeText(this.value),Object.assign(this.icon,r),setTimeout(()=>{Object.assign(this.icon,e)},5e3)})}onLabelClick(){this.focus()}attributeChangedCallback(t,e,r){super.attributeChangeCallback?.(t,e,r),"type"===t&&this.baseElement._setType(r),e!==r&&("label-type"===t?"floating"===r?this.addEventListener("click",this.onLabelClick):this.removeEventListener("click",this.onLabelClick):"copy-to-clipboard"===t&&this.renderCopyToClipboard("true"===r))}})((0,i.tz)({slots:["prefix","suffix"],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tpadding: calc(var(${d.cssVarList.inputOutlineWidth}) + var(${d.cssVarList.inputOutlineOffset}));\n box-sizing: border-box;\n\t\t\t}\n :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) {\n opacity: 1;\n }\n\n vaadin-text-field[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n ${(0,s.$J)("vaadin-text-field")}\n\t\t\t${(0,s.cy)(d.cssVarList)}\n\t\t\t${(0,s.LJ)("vaadin-text-field",d.cssVarList)}\n ${(0,s.Kl)()}\n\n vaadin-text-field vaadin-icon {\n align-self: center;\n }\n\t\t`,excludeAttrsSync:["tabindex","style"],componentName:l}))},21374(t,e,r){r.r(e),r.d(e,{TextFieldClass:()=>i.w,componentName:()=>i.T}),r(11284),r(37182),r(95260);var i=r(79275);customElements.define(i.T,i.w)},6424(t,e,r){r.d(e,{A:()=>v});const{host:i,label:n,placeholder:o,requiredIndicator:a,inputField:s,input:l,inputMask:p,helperText:d,errorMessage:c,disabledPlaceholder:u,inputDisabled:h,inputIcon:y,externalInput:g,externalInputDisabled:b,externalPlaceholder:m,externalDisabledPlaceholder:f}={host:{selector:()=>":host"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},placeholder:[{selector:"> input:placeholder-shown"},{selector:()=>":host::slotted(input:placeholder-shown)"}],disabledPlaceholder:{selector:"> input:disabled::placeholder"},inputField:{selector:"::part(input-field)"},input:{selector:"input"},inputMask:{selector:"::part(input-field)::before"},inputDisabled:{selector:"input:disabled"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"},inputIcon:{selector:"vaadin-icon"},externalInput:{selector:()=>"::slotted(input)"},externalInputDisabled:{selector:()=>"::slotted(input:disabled)"},externalPlaceholder:{selector:()=>"::slotted(input:placeholder-shown)"},externalDisabledPlaceholder:{selector:()=>"::slotted(input:disabled::placeholder)"}},v={fontSize:[{},i],fontFamily:[n,s,d,c],labelFontSize:{...n,property:"font-size"},labelFontWeight:{...n,property:"font-weight"},labelTextColor:[{...n,property:"color"},{...a,property:"color"},{...n,property:"-webkit-text-fill-color"},{...a,property:"-webkit-text-fill-color"}],hostWidth:{...i,property:"width"},hostMinWidth:{...i,property:"min-width"},hostDirection:{...i,property:"direction"},inputDirection:{...l,property:"direction"},inputBackgroundColor:[{...s,property:"background-color"},{...p,property:"background-color"}],errorMessageTextColor:{...c,property:"color"},errorMessageIcon:{...c,property:"background-image"},errorMessageIconSize:{...c,property:"background-size"},errorMessageIconPadding:{...c,property:"padding-inline-start"},errorMessageIconRepeat:{...c,property:"background-repeat"},errorMessageIconPosition:{...c,property:"background-position"},errorMessageFontSize:{...c,property:"font-size"},helperTextColor:{...d,property:"-webkit-text-fill-color"},inputValueTextColor:[{...s,property:"color"},{...h,property:"-webkit-text-fill-color"},{...b,property:"-webkit-text-fill-color"}],inputCaretTextColor:[{...l,property:"caret-color"},{...g,property:"caret-color"}],labelRequiredIndicator:{...a,property:"content"},inputBorderColor:{...s,property:"border-color"},inputBorderWidth:{...s,property:"border-width"},inputBorderStyle:{...s,property:"border-style"},inputBorderRadius:{...s,property:"border-radius"},inputHeight:{...s,property:"height"},inputHorizontalPadding:[{...l,property:"padding-left"},{...l,property:"padding-right"},{...g,property:"padding-left"},{...g,property:"padding-right"}],inputOutlineColor:{...s,property:"outline-color"},inputOutlineStyle:{...s,property:"outline-style"},inputOutlineWidth:{...s,property:"outline-width"},inputOutlineOffset:{...s,property:"outline-offset"},textAlign:{},inputTextAlign:[{...l,property:"text-align"},{...g,property:"text-align"}],inputPlaceholderColor:[{selector:()=>":host input:placeholder-shown",property:"color"},{...m,property:"color"},{...o,property:"color"},{...u,property:"-webkit-text-fill-color"},{...f,property:"-webkit-text-fill-color"}],labelPosition:{...n,property:"position"},labelTopPosition:{...n,property:"top"},labelHorizontalPosition:[{...n,property:"left"},{...n,property:"right"}],inputTransformY:{...n,property:"transform"},inputTransition:{...n,property:"transition"},marginInlineStart:{...n,property:"margin-inline-start"},placeholderOpacity:[{selector:"> input:placeholder-shown",property:"opacity"},{...m,property:"opacity"}],inputVerticalAlignment:[{...s,property:"align-items"},{...g,property:"align-items"}],valueInputHeight:[{...l,property:"height"},{...g,property:"height"}],valueInputMarginBottom:[{...l,property:"margin-bottom"},{...g,property:"margin-bottom"}],inputIconOffset:[{...y,property:"margin-right"},{...y,property:"margin-left"}],inputIconSize:{...y,property:"font-size"},inputIconColor:{...y,property:"color"},inputTextSecurity:[{...l,property:"-webkit-text-security"},{...l,property:"text-security"},{...g,property:"-webkit-text-security"},{...g,property:"text-security"}]}},18330(t,e,r){r.d(e,{f:()=>n});var i=r(44099);class n extends i.r{constructor(t,e){super(t,"input","input",{initializer:(t,r)=>{r.value&&(t.value=r.value),r.type&&t.setAttribute("type",r.type),t.id=this.defaultId,"function"==typeof e&&e(t)},useUniqueId:!0})}}},37436(t,e,r){r.d(e,{a:()=>n});var i=r(44218);const n=t=>class extends((0,i.R)(t)){static get properties(){return{autocomplete:{type:String},autocorrect:{type:String},autocapitalize:{type:String,reflectToAttribute:!0}}}static get delegateAttrs(){return[...super.delegateAttrs,"autocapitalize","autocomplete","autocorrect"]}get __data(){return this.__dataValue||{}}set __data(t){this.__dataValue=t}_inputElementChanged(t){super._inputElementChanged(t),t&&(t.value&&t.value!==this.value&&(console.warn(`Please define value on the <${this.localName}> component!`),t.value=""),this.value&&(t.value=this.value))}_setFocused(t){super._setFocused(t),!t&&document.hasFocus()&&this.validate()}_onInput(t){super._onInput(t),this.invalid&&this.validate()}_valueChanged(t,e){super._valueChanged(t,e),void 0!==e&&this.invalid&&this.validate()}}},27136(t,e,r){r.d(e,{A:()=>h}),r(86689);var i=r(13256),n=r(82901),o=r(72562),a=r(81488),s=r(86314),l=r(87550),p=r(18330),d=r(37436),c=r(37720);const u=t=>class extends((0,d.a)(t)){static get properties(){return{maxlength:{type:Number},minlength:{type:Number},pattern:{type:String}}}static get delegateAttrs(){return[...super.delegateAttrs,"maxlength","minlength","pattern"]}static get constraints(){return[...super.constraints,"maxlength","minlength","pattern"]}constructor(){super(),this._setType("text")}get clearElement(){return this.$.clearButton}ready(){super.ready(),this.addController(new p.f(this,t=>{this._setInputElement(t),this._setFocusElement(t),this.stateTarget=t,this.ariaTarget=t})),this.addController(new c.q(this.inputElement,this._labelController))}};(0,l.SF)("vaadin-text-field",s.k,{moduleId:"vaadin-text-field-styles"});class h extends(u((0,l.cp)((0,o.q)(i.Pu)))){static get is(){return"vaadin-text-field"}static get template(){return i.qy`
|
|
2
|
+
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[3359,4838,5166,7163,8884],{3393(t,e,r){r.d(e,{y:()=>a});var i=r(9696),n=r(79365),o=r(81365);const a=(...t)=>(0,i.Zz)(n.XX,n._$,n.yF,n.jd)((0,o.q)(...t))},74713(t,e,r){r.d(e,{T:()=>s,l:()=>p});var i=r(25964),n=r(79365),o=r(81365),a=r(9696);const s=(0,r(97810).xE)("loader-radial");class l extends((0,o.q)({componentName:s,baseSelector:":host > div"})){constructor(){super(),this.attachShadow({mode:"open"}).innerHTML="\n\t\t<div></div>\n\t",(0,i.fz)("\n @keyframes spin {\n\t\t\t\t0% { transform: rotate(0deg); }\n\t\t\t\t100% { transform: rotate(360deg); }\n\t\t\t}\n\t\t\t:host {\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t}\n\t\t\t:host > div {\n\t\t\t\tanimation-name: spin;\n\t\t\t}\n ",this)}}const p=(0,a.Zz)((0,n.RF)({mappings:{hostDisplay:{property:"display"},spinnerSize:[{property:"width"},{property:"height"}],spinnerBorderWidth:{property:"border-width"},spinnerBorderStyle:{property:"border-style"},spinnerBorderRadius:{property:"border-radius"},spinnerQuadrant1Color:{property:"border-top-color"},spinnerQuadrant2Color:{property:"border-bottom-color"},spinnerQuadrant3Color:{property:"border-right-color"},spinnerQuadrant4Color:{property:"border-left-color"},animationDuration:{},animationTimingFunction:{},animationIterationCount:{}}}),n.VO,n.tQ)(l)},54249(t,e,r){r.r(e),r.d(e,{LoaderRadialClass:()=>i.l,componentName:()=>i.T});var i=r(74713);customElements.define(i.T,i.l)},47168(t,e,r){r.d(e,{A:()=>h,T:()=>p});var i=r(68049),n=r.n(i),o=r(25964),a=r(3393),s=r(97810),l=r(18280);const p=(0,s.xE)("passcode-internal"),d=["digits","loading"],c=["disabled","bordered","size","invalid","readonly","aria-labelledby"],u=(0,a.y)({componentName:p,baseSelector:"div"}),h=class extends u{static get observedAttributes(){return d.concat(u.observedAttributes||[])}constructor(){super(),this.innerHTML='\n\t\t<div class="wrapper"></div>\n\t\t<div class="loader-container">\n <descope-loader-radial size="xs" mode="primary"></descope-loader-radial>\n </div>\n\t\t',this.wrapperEle=this.querySelector(".wrapper"),this.loaderContainer=this.querySelector(".loader-container")}renderInputs(){const t=[...Array(this.digits).keys()].map(t=>`\n\t\t<descope-text-field\n\t\t\tdata-id=${t}\n\t\t\ttype="tel"\n\t\t\tautocomplete="one-time-code"\n\t\t\tinputMode="numeric"\n\t\t></descope-text-field>\n\t`);this.wrapperEle.innerHTML=t.join(""),this.inputs=Array.from(this.querySelectorAll("descope-text-field")),this.initInputs()}handleLoadingState(t){t?this.setAttribute("inert","true"):this.removeAttribute("inert")}get digits(){return Number.parseInt(this.getAttribute("digits"),10)||6}get value(){return this.inputs?.map(({value:t})=>t).join("")||""}set value(t){t!==this.value&&this.parseInputValue(this.inputs[0],(0,l.zj)(t))}getValidity(){return this.isRequired&&!this.value?{valueMissing:!0}:this.pattern&&!new RegExp(this.pattern).test(this.value)?{patternMismatch:!0}:{}}init(){this.addEventListener("focus",t=>{t.isTrusted&&this.inputs[0].focus()}),super.init?.(),this.renderInputs()}getInputIdx(t){return Number.parseInt(t.getAttribute("data-id"),10)}getNextInput(t){const e=this.getInputIdx(t),r=Math.min(e+1,this.inputs.length-1);return this.inputs[r]}getPrevInput(t){const e=this.getInputIdx(t),r=Math.max(e-1,0);return this.inputs[r]}fillDigits(t,e){for(let r=0;r<t.length;r+=1){e.value=t[r]??"";const i=this.getNextInput(e);if(i===e)break;e=i}(0,l.pW)(e)}parseInputValue(t,e=""){const r=e.split("");r.length?this.fillDigits(r,t):t.value=""}initInputs(){this.inputs.forEach(t=>{(0,o.fz)(`\n vaadin-text-field::part(input-field)::before {\n ${l.vz}: '';\n content: var(${l._B}, var(${l.vz}));\n position: absolute;\n width: 100%;\n height: 100%;\n display: var(${l.n6}, none);\n align-items: center;\n justify-content: center;\n }`,t);const e=n()(e=>{this.parseInputValue(t,e),(0,l.Z)(t)},0,{trailing:!0});t.addEventListener("input",r=>{t.value=(0,l.zj)(t.value),t.value&&(0,l.Z)(t,t.value[0]),setTimeout(()=>{"deleteContentBackward"===r?.inputType&&(0,l.pW)(this.getPrevInput(t))}),e(t.value)}),t.onkeydown=({key:e})=>{"Backspace"===e?t.value?t.setSelectionRange(1,1):setTimeout(()=>(0,l.pW)(this.getPrevInput(t)),0):1===e.length&&(t.value="")},(0,s.EA)(this,t,{includeAttrs:c}),t.shadowRoot.querySelector("input").setAttribute("aria-label","passcode digit")}),this.handleFocusEventsDispatching(this.inputs),this.handleInputEventDispatching()}attributeChangedCallback(t,e,r){super.attributeChangedCallback?.(t,e,r),e!==r&&d.includes(t)&&("digits"===t&&this.renderInputs(),"loading"===t&&this.handleLoadingState("true"===r))}get pattern(){return`^$|^\\d{${this.digits},}$`}}},18280(t,e,r){r.d(e,{Z:()=>l,_B:()=>i,n6:()=>n,pW:()=>a,vz:()=>o,zj:()=>s});const i="--descope-input-mask-content",n="--descope-input-mask-display",o="--descope-input-mask-fallback",a=t=>{t?.focus(),t?.setSelectionRange?.(1,1)},s=t=>t.replace(/\D/g,"")||"",l=(t,e)=>{e?(t.style.setProperty(i,`"${e}"`),t.style.setProperty(n,"flex")):(t.style.removeProperty(i),t.style.removeProperty(n))}},59053(t,e,r){r.r(e);var i=r(47168);customElements.define(i.T,i.A)},54690(t,e,r){r.r(e),r.d(e,{PasscodeClass:()=>C,componentName:()=>c});var i=r(25964),n=r(79365),o=r(47168),a=r(79275),s=r(74713),l=r(9696),p=r(97810),d=r(73551);const c=(0,p.xE)("passcode"),u=["digits"],{host:h,digitField:y,label:g,requiredIndicator:b,internalWrapper:m,focusedDigitField:f,errorMessage:v}={host:{selector:()=>":host"},focusedDigitField:{selector:()=>`${a.w.componentName}[focused="true"]`},digitField:{selector:()=>a.w.componentName},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},internalWrapper:{selector:"descope-passcode-internal .wrapper"},errorMessage:{selector:"::part(error-message)"}},x=a.w.cssVarList,w=s.l.cssVarList,C=(0,l.Zz)((0,n.RF)({mappings:{fontSize:[{...y,property:x.fontSize},h],hostWidth:{property:"width"},hostDirection:{...h,property:"direction"},fontFamily:[h,{...g}],labelTextColor:[{...g,property:"color"},{...g,property:"-webkit-text-fill-color"},{...b,property:"color"},{...b,property:"-webkit-text-fill-color"}],labelRequiredIndicator:{...b,property:"content"},errorMessageTextColor:{...v,property:"color"},errorMessageIcon:{...v,property:"background-image"},errorMessageIconSize:{...v,property:"background-size"},errorMessageIconPadding:{...v,property:"padding-inline-start"},errorMessageIconRepeat:{...v,property:"background-repeat"},errorMessageIconPosition:{...v,property:"background-position"},errorMessageFontSize:{...v,property:"font-size"},digitValueTextColor:{selector:a.w.componentName,property:x.inputValueTextColor},digitSize:[{...y,property:"height"},{...y,property:"width"}],digitPadding:{...y,property:x.inputHorizontalPadding},digitTextAlign:{...y,property:x.inputTextAlign},digitCaretTextColor:{...y,property:x.inputCaretTextColor},digitSpacing:{...m,property:"gap"},digitOutlineColor:{...y,property:x.inputOutlineColor},digitOutlineWidth:{...y,property:x.inputOutlineWidth},focusedDigitFieldOutlineColor:{...f,property:x.inputOutlineColor},overlayOpacity:{...m,property:"opacity"},spinnerSize:{selector:s.l.componentName,property:w.spinnerSize}}}),n.VO,n.Yg,(0,n.OZ)({proxyProps:["value","selectionStart"]}),n.tQ,t=>class extends t{static get observedAttributes(){return u.concat(t.observedAttributes||[])}get digits(){return Number.parseInt(this.getAttribute("digits"),10)||6}init(){super.init?.(),(0,i.fz)("\n .wrapper {\n display: flex;\n width: 100%;\n justify-content: space-between;\n direction: ltr;\n position: relative;\n }\n\n descope-text-field {\n direction: ltr;\n }\n\n .loader-container {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n ",this);const t=document.createElement("template");t.innerHTML=`\n <${o.T}\n bordered="true"\n name="code"\n tabindex="-1"\n slot="input"\n role="textbox"\n ><slot></slot></${o.T}>\n `,this.baseElement.appendChild(t.content.cloneNode(!0)),this.inputElement=this.shadowRoot.querySelector(o.T),(0,p.EA)(this,this.inputElement,{includeAttrs:["digits","size","loading","disabled"]})}attributeChangedCallback(t,e,r){super.attributeChangedCallback?.(t,e,r),"digits"===t&&(this.style["--passcode-digits-count"]=r)}})((0,n.tz)({slots:[],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tmin-width: calc(var(--passcode-digits-count) * 2em);\n\t\t\t}\n\t\t\t${(0,d.X6)()}\n\t\t\t:host::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\t\t\t:host::part(input-field)::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n :host([loading="true"]) descope-passcode-internal .loader-container {\n display: block;\n }\n\n\t\t\tdescope-passcode-internal {\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tmin-height: initial;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal .wrapper {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tmin-height: initial;\n\t\t\t\theight: 100%;\n\t\t\t\tjustify-content: space-between;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal descope-text-field {\n\t\t\t\tmin-width: 2em;\n\t\t\t\tmax-width: var(${x.inputHeight});\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tpadding: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t}\n\n /* safari */\n\t\t\tvaadin-text-field::part(input-field)::after {\n opacity: 0;\n }\n\n\t\t\tvaadin-text-field {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\tvaadin-text-field::before {\n\t\t\t\theight: 0;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly] > input:placeholder-shown {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly]::part(input-field)::after {\n\t\t\t\tborder: 0 solid;\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\n ${(0,d.$J)("vaadin-text-field")}\n\t\t\t${(0,d.I4)("vaadin-text-field")}\n \t`,excludeAttrsSync:["tabindex","style"],componentName:c}));r(21374),r(54249),r(59053),customElements.define(c,C)},79275(t,e,r){r.d(e,{T:()=>l,w:()=>d});var i=r(79365),n=r(6424),o=r(9696),a=r(97810),s=r(73551);const l=(0,a.xE)("text-field"),p=["type","label-type","copy-to-clipboard"],d=(0,o.Zz)((0,i.RF)({mappings:n.A}),i.VO,(0,i.OZ)({proxyProps:["value","selectionStart"],useProxyTargets:!0}),i.tQ,t=>class extends t{static get observedAttributes(){return p.concat(t.observedAttributes||[])}icon;init(){super.init?.()}renderCopyToClipboard(t){if(!t)return void this.icon?.remove();const e={icon:"vaadin:copy-o",title:"Copy",style:"cursor: pointer"},r={icon:"vaadin:check-circle-o",title:"Copied",style:"cursor: initial"};this.icon=Object.assign(document.createElement("vaadin-icon"),{slot:"suffix",...e}),this.baseElement.appendChild(this.icon),this.icon.addEventListener("click",()=>{navigator.clipboard.writeText(this.value),Object.assign(this.icon,r),setTimeout(()=>{Object.assign(this.icon,e)},5e3)})}onLabelClick(){this.focus()}attributeChangedCallback(t,e,r){super.attributeChangeCallback?.(t,e,r),"type"===t&&this.baseElement._setType(r),e!==r&&("label-type"===t?"floating"===r?this.addEventListener("click",this.onLabelClick):this.removeEventListener("click",this.onLabelClick):"copy-to-clipboard"===t&&this.renderCopyToClipboard("true"===r))}})((0,i.tz)({slots:["prefix","suffix"],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tpadding: calc(var(${d.cssVarList.inputOutlineWidth}) + var(${d.cssVarList.inputOutlineOffset}));\n box-sizing: border-box;\n\t\t\t}\n :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) {\n opacity: 1;\n }\n\n vaadin-text-field[label-type="floating"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type="floating"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n ${(0,s.$J)("vaadin-text-field")}\n\t\t\t${(0,s.cy)(d.cssVarList)}\n\t\t\t${(0,s.LJ)("vaadin-text-field",d.cssVarList)}\n ${(0,s.Kl)()}\n\n vaadin-text-field vaadin-icon {\n align-self: center;\n }\n\t\t`,excludeAttrsSync:["tabindex","style"],componentName:l}))},21374(t,e,r){r.r(e),r.d(e,{TextFieldClass:()=>i.w,componentName:()=>i.T}),r(11284),r(37182),r(95260);var i=r(79275);customElements.define(i.T,i.w)},6424(t,e,r){r.d(e,{A:()=>v});const{host:i,label:n,placeholder:o,requiredIndicator:a,inputField:s,input:l,inputMask:p,helperText:d,errorMessage:c,disabledPlaceholder:u,inputDisabled:h,inputIcon:y,externalInput:g,externalInputDisabled:b,externalPlaceholder:m,externalDisabledPlaceholder:f}={host:{selector:()=>":host"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},placeholder:[{selector:"> input:placeholder-shown"},{selector:()=>":host::slotted(input:placeholder-shown)"}],disabledPlaceholder:{selector:"> input:disabled::placeholder"},inputField:{selector:"::part(input-field)"},input:{selector:"input"},inputMask:{selector:"::part(input-field)::before"},inputDisabled:{selector:"input:disabled"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"},inputIcon:{selector:"vaadin-icon"},externalInput:{selector:()=>"::slotted(input)"},externalInputDisabled:{selector:()=>"::slotted(input:disabled)"},externalPlaceholder:{selector:()=>"::slotted(input:placeholder-shown)"},externalDisabledPlaceholder:{selector:()=>"::slotted(input:disabled::placeholder)"}},v={fontSize:[{},i],fontFamily:[n,s,d,c],labelFontSize:{...n,property:"font-size"},labelFontWeight:{...n,property:"font-weight"},labelTextColor:[{...n,property:"color"},{...a,property:"color"},{...n,property:"-webkit-text-fill-color"},{...a,property:"-webkit-text-fill-color"}],hostWidth:{...i,property:"width"},hostMinWidth:{...i,property:"min-width"},hostDirection:{...i,property:"direction"},inputDirection:{...l,property:"direction"},inputBackgroundColor:[{...s,property:"background-color"},{...p,property:"background-color"}],errorMessageTextColor:{...c,property:"color"},errorMessageIcon:{...c,property:"background-image"},errorMessageIconSize:{...c,property:"background-size"},errorMessageIconPadding:{...c,property:"padding-inline-start"},errorMessageIconRepeat:{...c,property:"background-repeat"},errorMessageIconPosition:{...c,property:"background-position"},errorMessageFontSize:{...c,property:"font-size"},helperTextColor:{...d,property:"-webkit-text-fill-color"},inputValueTextColor:[{...s,property:"color"},{...h,property:"-webkit-text-fill-color"},{...b,property:"-webkit-text-fill-color"}],inputCaretTextColor:[{...l,property:"caret-color"},{...g,property:"caret-color"}],labelRequiredIndicator:{...a,property:"content"},inputBorderColor:{...s,property:"border-color"},inputBorderWidth:{...s,property:"border-width"},inputBorderStyle:{...s,property:"border-style"},inputBorderRadius:{...s,property:"border-radius"},inputHeight:{...s,property:"height"},inputHorizontalPadding:[{...l,property:"padding-left"},{...l,property:"padding-right"},{...g,property:"padding-left"},{...g,property:"padding-right"}],inputOutlineColor:{...s,property:"outline-color"},inputOutlineStyle:{...s,property:"outline-style"},inputOutlineWidth:{...s,property:"outline-width"},inputOutlineOffset:{...s,property:"outline-offset"},textAlign:{},inputTextAlign:[{...l,property:"text-align"},{...g,property:"text-align"}],inputPlaceholderColor:[{selector:()=>":host input:placeholder-shown",property:"color"},{...m,property:"color"},{...o,property:"color"},{...u,property:"-webkit-text-fill-color"},{...f,property:"-webkit-text-fill-color"}],labelPosition:{...n,property:"position"},labelTopPosition:{...n,property:"top"},labelHorizontalPosition:[{...n,property:"left"},{...n,property:"right"}],inputTransformY:{...n,property:"transform"},inputTransition:{...n,property:"transition"},marginInlineStart:{...n,property:"margin-inline-start"},placeholderOpacity:[{selector:"> input:placeholder-shown",property:"opacity"},{...m,property:"opacity"}],inputVerticalAlignment:[{...s,property:"align-items"},{...g,property:"align-items"}],valueInputHeight:[{...l,property:"height"},{...g,property:"height"}],valueInputMarginBottom:[{...l,property:"margin-bottom"},{...g,property:"margin-bottom"}],inputIconOffset:[{...y,property:"margin-right"},{...y,property:"margin-left"}],inputIconSize:{...y,property:"font-size"},inputIconColor:{...y,property:"color"},inputTextSecurity:[{...l,property:"-webkit-text-security"},{...l,property:"text-security"},{...g,property:"-webkit-text-security"},{...g,property:"text-security"}]}},18330(t,e,r){r.d(e,{f:()=>n});var i=r(44099);class n extends i.r{constructor(t,e){super(t,"input","input",{initializer:(t,r)=>{r.value&&(t.value=r.value),r.type&&t.setAttribute("type",r.type),t.id=this.defaultId,"function"==typeof e&&e(t)},useUniqueId:!0})}}},37436(t,e,r){r.d(e,{a:()=>n});var i=r(44218);const n=t=>class extends((0,i.R)(t)){static get properties(){return{autocomplete:{type:String},autocorrect:{type:String},autocapitalize:{type:String,reflectToAttribute:!0}}}static get delegateAttrs(){return[...super.delegateAttrs,"autocapitalize","autocomplete","autocorrect"]}get __data(){return this.__dataValue||{}}set __data(t){this.__dataValue=t}_inputElementChanged(t){super._inputElementChanged(t),t&&(t.value&&t.value!==this.value&&(console.warn(`Please define value on the <${this.localName}> component!`),t.value=""),this.value&&(t.value=this.value))}_setFocused(t){super._setFocused(t),!t&&document.hasFocus()&&this.validate()}_onInput(t){super._onInput(t),this.invalid&&this.validate()}_valueChanged(t,e){super._valueChanged(t,e),void 0!==e&&this.invalid&&this.validate()}}},27136(t,e,r){r.d(e,{A:()=>h}),r(86689);var i=r(13256),n=r(82901),o=r(72562),a=r(81488),s=r(86314),l=r(87550),p=r(18330),d=r(37436),c=r(37720);const u=t=>class extends((0,d.a)(t)){static get properties(){return{maxlength:{type:Number},minlength:{type:Number},pattern:{type:String}}}static get delegateAttrs(){return[...super.delegateAttrs,"maxlength","minlength","pattern"]}static get constraints(){return[...super.constraints,"maxlength","minlength","pattern"]}constructor(){super(),this._setType("text")}get clearElement(){return this.$.clearButton}ready(){super.ready(),this.addController(new p.f(this,t=>{this._setInputElement(t),this._setFocusElement(t),this.stateTarget=t,this.ariaTarget=t})),this.addController(new c.q(this.inputElement,this._labelController))}};(0,l.SF)("vaadin-text-field",s.k,{moduleId:"vaadin-text-field-styles"});class h extends(u((0,l.cp)((0,o.q)(i.Pu)))){static get is(){return"vaadin-text-field"}static get template(){return i.qy`
|
|
3
3
|
<style>
|
|
4
4
|
[part='input-field'] {
|
|
5
5
|
flex-grow: 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descope-passcode-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/./src/baseClasses/createBaseInputClass.js","webpack://@descope/web-components-ui/./src/components/descope-loader-radial/LoaderRadialClass.js","webpack://@descope/web-components-ui/./src/components/descope-loader-radial/index.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/descope-passcode-internal/helpers.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/descope-passcode-internal/index.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/PasscodeClass.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/index.js","webpack://@descope/web-components-ui/./src/components/descope-text-field/TextFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-text-field/index.js","webpack://@descope/web-components-ui/./src/components/descope-text-field/textFieldMappings.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/field-base/src/input-controller.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/field-base/src/input-field-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/text-field/src/vaadin-text-field-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/text-field/src/vaadin-text-field.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/text-field/theme/lumo/vaadin-text-field-styles.js"],"sourcesContent":["import { compose } from '../helpers';\nimport {\n changeMixin,\n inputEventsDispatchingMixin,\n inputValidationMixin,\n normalizeBooleanAttributesMixin,\n} from '../mixins';\nimport { createBaseClass } from './createBaseClass';\n\nexport const createBaseInputClass = (...args) =>\n compose(\n inputValidationMixin,\n changeMixin,\n normalizeBooleanAttributesMixin,\n inputEventsDispatchingMixin\n )(createBaseClass(...args));\n","import { createStyleMixin, draggableMixin, componentNameValidationMixin } from '../../mixins';\nimport { createBaseClass } from '../../baseClasses/createBaseClass';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\nimport { injectStyle } from '@descope-ui/common/components-helpers';\n\nexport const componentName = getComponentName('loader-radial');\n\nclass RawLoaderRadial extends createBaseClass({ componentName, baseSelector: ':host > div' }) {\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n\t\t<div></div>\n\t`;\n\n injectStyle(\n `\n @keyframes spin {\n\t\t\t\t0% { transform: rotate(0deg); }\n\t\t\t\t100% { transform: rotate(360deg); }\n\t\t\t}\n\t\t\t:host {\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t}\n\t\t\t:host > div {\n\t\t\t\tanimation-name: spin;\n\t\t\t}\n `,\n this\n );\n }\n}\n\nexport const LoaderRadialClass = compose(\n createStyleMixin({\n mappings: {\n hostDisplay: { property: 'display' },\n spinnerSize: [{ property: 'width' }, { property: 'height' }],\n spinnerBorderWidth: { property: 'border-width' },\n spinnerBorderStyle: { property: 'border-style' },\n spinnerBorderRadius: { property: 'border-radius' },\n spinnerQuadrant1Color: { property: 'border-top-color' },\n spinnerQuadrant2Color: { property: 'border-bottom-color' },\n spinnerQuadrant3Color: { property: 'border-right-color' },\n spinnerQuadrant4Color: { property: 'border-left-color' },\n animationDuration: {},\n animationTimingFunction: {},\n animationIterationCount: {},\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawLoaderRadial);\n","import { componentName, LoaderRadialClass } from './LoaderRadialClass';\n\ncustomElements.define(componentName, LoaderRadialClass);\n\nexport { LoaderRadialClass, componentName };\n","/* eslint-disable no-param-reassign */\nimport debounce from 'lodash.debounce';\nimport { createBaseInputClass } from '../../../baseClasses/createBaseInputClass';\nimport { forwardAttrs, getComponentName } from '../../../helpers/componentHelpers';\nimport {\n sanitizeStr,\n focusElement,\n toggleMaskVisibility,\n INPUT_MASK_FALLBACK_PROP,\n INPUT_MASK_TEXT_PROP,\n INPUT_MASK_DISPLAY_PROP,\n} from './helpers';\nimport { injectStyle } from '@descope-ui/common/components-helpers';\n\nexport const componentName = getComponentName('passcode-internal');\n\nconst observedAttributes = ['digits', 'loading'];\n\nconst forwardAttributes = [\n 'disabled',\n 'bordered',\n 'size',\n 'invalid',\n 'readonly',\n 'aria-labelledby',\n];\n\nconst BaseInputClass = createBaseInputClass({ componentName, baseSelector: 'div' });\n\nclass PasscodeInternal extends BaseInputClass {\n static get observedAttributes() {\n return observedAttributes.concat(BaseInputClass.observedAttributes || []);\n }\n\n constructor() {\n super();\n\n this.innerHTML = `\n\t\t<div class=\"wrapper\"></div>\n\t\t<div class=\"loader-container\">\n <descope-loader-radial size=\"xs\" mode=\"primary\"></descope-loader-radial>\n </div>\n\t\t`;\n\n this.wrapperEle = this.querySelector('.wrapper');\n this.loaderContainer = this.querySelector('.loader-container');\n }\n\n renderInputs() {\n const inputs = [...Array(this.digits).keys()].map(\n (idx) => `\n\t\t<descope-text-field\n\t\t\tdata-id=${idx}\n\t\t\ttype=\"tel\"\n\t\t\tautocomplete=\"one-time-code\"\n\t\t\tinputMode=\"numeric\"\n\t\t></descope-text-field>\n\t`\n );\n\n this.wrapperEle.innerHTML = inputs.join('');\n\n this.inputs = Array.from(this.querySelectorAll('descope-text-field'));\n\n this.initInputs();\n }\n\n handleLoadingState(isLoading) {\n if (isLoading) {\n this.setAttribute('inert', 'true');\n } else {\n this.removeAttribute('inert');\n }\n }\n\n get digits() {\n return Number.parseInt(this.getAttribute('digits'), 10) || 6;\n }\n\n get value() {\n return this.inputs?.map(({ value }) => value).join('') || '';\n }\n\n set value(val) {\n if (val === this.value) return;\n\n this.parseInputValue(this.inputs[0], sanitizeStr(val));\n }\n\n getValidity() {\n if (this.isRequired && !this.value) {\n return { valueMissing: true };\n }\n if (this.pattern && !new RegExp(this.pattern).test(this.value)) {\n return { patternMismatch: true };\n }\n\n return {};\n }\n\n init() {\n // we are adding listeners before calling to super because it's stopping the events\n this.addEventListener('focus', (e) => {\n // we want to ignore focus events we are dispatching\n if (e.isTrusted) this.inputs[0].focus();\n });\n\n super.init?.();\n\n this.renderInputs();\n }\n\n // eslint-disable-next-line class-methods-use-this\n getInputIdx(inputEle) {\n return Number.parseInt(inputEle.getAttribute('data-id'), 10);\n }\n\n getNextInput(currInput) {\n const currentIdx = this.getInputIdx(currInput);\n const newIdx = Math.min(currentIdx + 1, this.inputs.length - 1);\n return this.inputs[newIdx];\n }\n\n getPrevInput(currInput) {\n const currentIdx = this.getInputIdx(currInput);\n const newIdx = Math.max(currentIdx - 1, 0);\n return this.inputs[newIdx];\n }\n\n fillDigits(charArr, currentInput) {\n for (let i = 0; i < charArr.length; i += 1) {\n currentInput.value = charArr[i] ?? '';\n\n const nextInput = this.getNextInput(currentInput);\n\n if (nextInput === currentInput) break;\n currentInput = nextInput;\n }\n\n focusElement(currentInput);\n }\n\n parseInputValue(input, value = '') {\n const charArr = value.split('');\n\n if (!charArr.length) {\n // if we got an invalid value we want to clear the input\n input.value = '';\n } else this.fillDigits(charArr, input);\n }\n\n initInputs() {\n this.inputs.forEach((input) => {\n // During debounced input we hide the value with a mask.\n // This allows us to hide the multiple population of the first input\n // in case of an automated input (e.g. Safari OTP Autofill or paste).\n injectStyle(\n `\n vaadin-text-field::part(input-field)::before {\n ${INPUT_MASK_FALLBACK_PROP}: '';\n content: var(${INPUT_MASK_TEXT_PROP}, var(${INPUT_MASK_FALLBACK_PROP}));\n position: absolute;\n width: 100%;\n height: 100%;\n display: var(${INPUT_MASK_DISPLAY_PROP}, none);\n align-items: center;\n justify-content: center;\n }`,\n input\n );\n\n const handleParseInput = (val) => {\n this.parseInputValue(input, val);\n toggleMaskVisibility(input);\n };\n\n const debouncedHandleParseInput = debounce(handleParseInput, 0, { trailing: true });\n\n // sanitize the input\n input.addEventListener('input', (e) => {\n input.value = sanitizeStr(input.value);\n\n if (input.value) {\n toggleMaskVisibility(input, input.value[0]);\n }\n\n setTimeout(() => {\n if (e?.inputType === 'deleteContentBackward') {\n focusElement(this.getPrevInput(input));\n }\n });\n debouncedHandleParseInput(input.value);\n });\n\n // we want backspace to focus on the previous digit\n input.onkeydown = ({ key }) => {\n // when user deletes a digit, we want to focus the previous digit\n if (key === 'Backspace') {\n // if value is empty then the input element does not fire `input` event\n // if this is the case, we focus the element here.\n // otherwise, the focusElement occurs as part of the `input` event listener\n if (!input.value) {\n setTimeout(() => focusElement(this.getPrevInput(input)), 0);\n } else {\n input.setSelectionRange(1, 1);\n }\n } else if (key.length === 1) {\n // we want only characters and not command keys\n input.value = ''; // we are clearing the previous value so we can override it with the new value\n }\n };\n\n forwardAttrs(this, input, { includeAttrs: forwardAttributes });\n input.shadowRoot.querySelector('input').setAttribute('aria-label', 'passcode digit');\n });\n\n this.handleFocusEventsDispatching(this.inputs);\n this.handleInputEventDispatching();\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n // sync attributes to inputs\n if (oldValue !== newValue) {\n if (observedAttributes.includes(attrName)) {\n if (attrName === 'digits') {\n this.renderInputs();\n }\n if (attrName === 'loading') {\n this.handleLoadingState(newValue === 'true');\n }\n }\n }\n }\n\n get pattern() {\n return `^$|^\\\\d{${this.digits},}$`;\n }\n}\n\nexport default PasscodeInternal;\n","export const INPUT_MASK_TEXT_PROP = '--descope-input-mask-content';\nexport const INPUT_MASK_DISPLAY_PROP = '--descope-input-mask-display';\nexport const INPUT_MASK_FALLBACK_PROP = '--descope-input-mask-fallback';\n\nexport const focusElement = (ele) => {\n ele?.focus();\n ele?.setSelectionRange?.(1, 1);\n};\n\nexport const sanitizeStr = (str) => {\n return str.replace(/\\D/g, '') || '';\n};\n\nexport const toggleMaskVisibility = (input, value) => {\n if (value) {\n input.style.setProperty(INPUT_MASK_TEXT_PROP, `\"${value}\"`);\n input.style.setProperty(INPUT_MASK_DISPLAY_PROP, 'flex');\n } else {\n input.style.removeProperty(INPUT_MASK_TEXT_PROP);\n input.style.removeProperty(INPUT_MASK_DISPLAY_PROP);\n }\n};\n","import PasscodeInternal, { componentName } from './PasscodeInternal';\n\ncustomElements.define(componentName, PasscodeInternal);\n","import {\n createStyleMixin,\n draggableMixin,\n createProxy,\n proxyInputMixin,\n componentNameValidationMixin,\n inputOverrideValidConstraintsMixin,\n} from '../../mixins';\nimport { componentName as descopeInternalComponentName } from './descope-passcode-internal/PasscodeInternal';\nimport { TextFieldClass } from '../descope-text-field/TextFieldClass';\nimport { LoaderRadialClass } from '../descope-loader-radial/LoaderRadialClass';\nimport { compose } from '../../helpers';\nimport { forwardAttrs, getComponentName } from '../../helpers/componentHelpers';\nimport {\n resetInputCursor,\n resetInputLabelPosition,\n resetInputFieldDefaultWidth,\n} from '../../helpers/themeHelpers/resetHelpers';\nimport { injectStyle } from '@descope-ui/common/components-helpers';\n\nexport const componentName = getComponentName('passcode');\n\nconst observedAttributes = ['digits'];\n\nconst customMixin = (superclass) =>\n class PasscodeMixinClass extends superclass {\n static get observedAttributes() {\n return observedAttributes.concat(superclass.observedAttributes || []);\n }\n\n get digits() {\n return Number.parseInt(this.getAttribute('digits'), 10) || 6;\n }\n\n init() {\n super.init?.();\n\n injectStyle(\n `\n .wrapper {\n display: flex;\n width: 100%;\n justify-content: space-between;\n direction: ltr;\n position: relative;\n }\n\n descope-text-field {\n direction: ltr;\n }\n\n .loader-container {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n `,\n this\n );\n\n const template = document.createElement('template');\n\n template.innerHTML = `\n <${descopeInternalComponentName}\n bordered=\"true\"\n name=\"code\"\n tabindex=\"-1\"\n slot=\"input\"\n role=\"textbox\"\n ><slot></slot></${descopeInternalComponentName}>\n `;\n\n this.baseElement.appendChild(template.content.cloneNode(true));\n\n this.inputElement = this.shadowRoot.querySelector(descopeInternalComponentName);\n\n forwardAttrs(this, this.inputElement, {\n includeAttrs: ['digits', 'size', 'loading', 'disabled'],\n });\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (attrName === 'digits') {\n this.style['--passcode-digits-count'] = newValue;\n }\n }\n };\n\nconst {\n host,\n digitField,\n label,\n requiredIndicator,\n internalWrapper,\n focusedDigitField,\n errorMessage,\n} = {\n host: { selector: () => ':host' },\n focusedDigitField: { selector: () => `${TextFieldClass.componentName}[focused=\"true\"]` },\n digitField: { selector: () => TextFieldClass.componentName },\n label: { selector: '::part(label)' },\n requiredIndicator: { selector: '[required]::part(required-indicator)::after' },\n internalWrapper: { selector: 'descope-passcode-internal .wrapper' },\n errorMessage: { selector: '::part(error-message)' },\n};\n\nconst textVars = TextFieldClass.cssVarList;\nconst loaderVars = LoaderRadialClass.cssVarList;\n\nexport const PasscodeClass = compose(\n createStyleMixin({\n mappings: {\n fontSize: [{ ...digitField, property: textVars.fontSize }, host],\n hostWidth: { property: 'width' },\n hostDirection: { ...host, property: 'direction' },\n fontFamily: [host, { ...label }],\n labelTextColor: [\n { ...label, property: 'color' },\n { ...label, property: '-webkit-text-fill-color' },\n { ...requiredIndicator, property: 'color' },\n { ...requiredIndicator, property: '-webkit-text-fill-color' },\n ],\n labelRequiredIndicator: { ...requiredIndicator, property: 'content' },\n errorMessageTextColor: { ...errorMessage, property: 'color' },\n errorMessageIcon: { ...errorMessage, property: 'background-image' },\n errorMessageIconSize: { ...errorMessage, property: 'background-size' },\n errorMessageIconPadding: { ...errorMessage, property: 'padding-inline-start' },\n errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },\n errorMessageIconPosition: { ...errorMessage, property: 'background-position' },\n errorMessageFontSize: { ...errorMessage, property: 'font-size' },\n digitValueTextColor: {\n selector: TextFieldClass.componentName,\n property: textVars.inputValueTextColor,\n },\n digitSize: [\n { ...digitField, property: 'height' },\n { ...digitField, property: 'width' },\n ],\n digitPadding: { ...digitField, property: textVars.inputHorizontalPadding },\n digitTextAlign: { ...digitField, property: textVars.inputTextAlign },\n digitCaretTextColor: { ...digitField, property: textVars.inputCaretTextColor },\n digitSpacing: { ...internalWrapper, property: 'gap' },\n digitOutlineColor: { ...digitField, property: textVars.inputOutlineColor },\n digitOutlineWidth: { ...digitField, property: textVars.inputOutlineWidth },\n\n focusedDigitFieldOutlineColor: { ...focusedDigitField, property: textVars.inputOutlineColor },\n overlayOpacity: { ...internalWrapper, property: 'opacity' },\n spinnerSize: { selector: LoaderRadialClass.componentName, property: loaderVars.spinnerSize },\n },\n }),\n draggableMixin,\n inputOverrideValidConstraintsMixin,\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'] }),\n componentNameValidationMixin,\n customMixin\n)(\n createProxy({\n slots: [],\n wrappedEleName: 'vaadin-text-field',\n style: () => `\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tmin-width: calc(var(--passcode-digits-count) * 2em);\n\t\t\t}\n\t\t\t${resetInputFieldDefaultWidth()}\n\t\t\t:host::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\t\t\t:host::part(input-field)::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n :host([loading=\"true\"]) descope-passcode-internal .loader-container {\n display: block;\n }\n\n\t\t\tdescope-passcode-internal {\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tmin-height: initial;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal .wrapper {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tmin-height: initial;\n\t\t\t\theight: 100%;\n\t\t\t\tjustify-content: space-between;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal descope-text-field {\n\t\t\t\tmin-width: 2em;\n\t\t\t\tmax-width: var(${textVars.inputHeight});\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tpadding: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t}\n\n /* safari */\n\t\t\tvaadin-text-field::part(input-field)::after {\n opacity: 0;\n }\n\n\t\t\tvaadin-text-field {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\tvaadin-text-field::before {\n\t\t\t\theight: 0;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly] > input:placeholder-shown {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly]::part(input-field)::after {\n\t\t\t\tborder: 0 solid;\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\n ${resetInputLabelPosition('vaadin-text-field')}\n\t\t\t${resetInputCursor('vaadin-text-field')}\n \t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n\nexport default PasscodeClass;\n","import { componentName, PasscodeClass } from './PasscodeClass';\nimport '../descope-text-field';\nimport '../descope-loader-radial';\nimport './descope-passcode-internal';\n\ncustomElements.define(componentName, PasscodeClass);\n\nexport { PasscodeClass, componentName };\n","import {\n createStyleMixin,\n draggableMixin,\n createProxy,\n proxyInputMixin,\n componentNameValidationMixin,\n} from '../../mixins';\nimport textFieldMappings from './textFieldMappings';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\nimport {\n inputFloatingLabelStyle,\n resetInputLabelPosition,\n resetInputOverrides,\n useHostExternalPadding,\n} from '../../helpers/themeHelpers/resetHelpers';\n\nexport const componentName = getComponentName('text-field');\n\nconst observedAttrs = ['type', 'label-type', 'copy-to-clipboard'];\n\nconst customMixin = (superclass) =>\n class TextFieldClass extends superclass {\n static get observedAttributes() {\n return observedAttrs.concat(superclass.observedAttributes || []);\n }\n\n icon;\n\n init() {\n super.init?.();\n }\n\n renderCopyToClipboard(shouldRender) {\n if (!shouldRender) {\n this.icon?.remove();\n return;\n }\n\n const iconInitConfig = {\n icon: 'vaadin:copy-o',\n title: 'Copy',\n style: 'cursor: pointer',\n };\n\n const iconCopiedConfig = {\n icon: 'vaadin:check-circle-o',\n title: 'Copied',\n style: 'cursor: initial',\n };\n\n this.icon = Object.assign(document.createElement('vaadin-icon'), {\n slot: 'suffix',\n ...iconInitConfig,\n });\n\n this.baseElement.appendChild(this.icon);\n this.icon.addEventListener('click', () => {\n navigator.clipboard.writeText(this.value);\n Object.assign(this.icon, iconCopiedConfig);\n\n // we want the icon to go back to the initial state after 5 seconds\n setTimeout(() => {\n Object.assign(this.icon, iconInitConfig);\n }, 5000);\n });\n }\n\n onLabelClick() {\n this.focus();\n }\n\n attributeChangedCallback(attrName, oldVal, newVal) {\n super.attributeChangeCallback?.(attrName, oldVal, newVal);\n\n // Vaadin doesn't allow to change the input type attribute.\n // We need the ability to do that, so we're overriding their\n // behavior with their private API.\n // When receiving a `type` attribute, we use their private API\n // to set it on the input.\n if (attrName === 'type') {\n this.baseElement._setType(newVal);\n }\n\n if (oldVal !== newVal) {\n if (attrName === 'label-type') {\n if (newVal === 'floating') {\n this.addEventListener('click', this.onLabelClick);\n } else {\n this.removeEventListener('click', this.onLabelClick);\n }\n } else if (attrName === 'copy-to-clipboard') {\n this.renderCopyToClipboard(newVal === 'true');\n }\n }\n }\n };\n\nexport const TextFieldClass = compose(\n createStyleMixin({\n mappings: textFieldMappings,\n }),\n draggableMixin,\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'], useProxyTargets: true }),\n componentNameValidationMixin,\n customMixin\n)(\n createProxy({\n slots: ['prefix', 'suffix'],\n wrappedEleName: 'vaadin-text-field',\n style: () => `\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tpadding: calc(var(${TextFieldClass.cssVarList.inputOutlineWidth}) + var(${\n TextFieldClass.cssVarList.inputOutlineOffset\n }));\n box-sizing: border-box;\n\t\t\t}\n :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) {\n opacity: 1;\n }\n\n vaadin-text-field[label-type=\"floating\"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type=\"floating\"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n ${resetInputLabelPosition('vaadin-text-field')}\n\t\t\t${useHostExternalPadding(TextFieldClass.cssVarList)}\n\t\t\t${resetInputOverrides('vaadin-text-field', TextFieldClass.cssVarList)}\n ${inputFloatingLabelStyle()}\n\n vaadin-text-field vaadin-icon {\n align-self: center;\n }\n\t\t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n","import '@vaadin/text-field';\nimport '@vaadin/icons';\nimport '@vaadin/icon';\n\nimport { componentName, TextFieldClass } from './TextFieldClass';\n\ncustomElements.define(componentName, TextFieldClass);\n\nexport { TextFieldClass, componentName };\n","const {\n host,\n label,\n placeholder,\n requiredIndicator,\n inputField,\n input,\n inputMask,\n helperText,\n errorMessage,\n disabledPlaceholder,\n inputDisabled,\n inputIcon,\n externalInput,\n externalInputDisabled,\n externalPlaceholder,\n externalDisabledPlaceholder,\n} = {\n host: { selector: () => ':host' },\n label: { selector: '::part(label)' },\n requiredIndicator: { selector: '[required]::part(required-indicator)::after' },\n placeholder: [\n { selector: '> input:placeholder-shown' },\n { selector: () => ':host::slotted(input:placeholder-shown)' },\n ],\n disabledPlaceholder: { selector: '> input:disabled::placeholder' },\n inputField: { selector: '::part(input-field)' },\n input: { selector: 'input' },\n inputMask: { selector: '::part(input-field)::before' },\n inputDisabled: { selector: 'input:disabled' },\n helperText: { selector: '::part(helper-text)' },\n errorMessage: { selector: '::part(error-message)' },\n inputIcon: { selector: 'vaadin-icon' },\n externalInput: { selector: () => '::slotted(input)' },\n externalInputDisabled: { selector: () => '::slotted(input:disabled)' },\n externalPlaceholder: { selector: () => '::slotted(input:placeholder-shown)' },\n externalDisabledPlaceholder: { selector: () => '::slotted(input:disabled::placeholder)' },\n};\n\nexport default {\n // we apply font-size also on the host so we can set its width with em\n fontSize: [{}, host],\n fontFamily: [label, inputField, helperText, errorMessage],\n\n labelFontSize: { ...label, property: 'font-size' },\n labelFontWeight: { ...label, property: 'font-weight' },\n\n labelTextColor: [\n { ...label, property: 'color' },\n { ...requiredIndicator, property: 'color' },\n { ...label, property: '-webkit-text-fill-color' },\n { ...requiredIndicator, property: '-webkit-text-fill-color' },\n ],\n\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { ...host, property: 'min-width' },\n hostDirection: { ...host, property: 'direction' },\n inputDirection: { ...input, property: 'direction' },\n\n inputBackgroundColor: [\n { ...inputField, property: 'background-color' },\n { ...inputMask, property: 'background-color' },\n ],\n\n errorMessageTextColor: { ...errorMessage, property: 'color' },\n errorMessageIcon: { ...errorMessage, property: 'background-image' },\n errorMessageIconSize: { ...errorMessage, property: 'background-size' },\n errorMessageIconPadding: { ...errorMessage, property: 'padding-inline-start' },\n errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },\n errorMessageIconPosition: { ...errorMessage, property: 'background-position' },\n errorMessageFontSize: { ...errorMessage, property: 'font-size' },\n\n helperTextColor: { ...helperText, property: '-webkit-text-fill-color' },\n\n inputValueTextColor: [\n { ...inputField, property: 'color' },\n { ...inputDisabled, property: '-webkit-text-fill-color' },\n { ...externalInputDisabled, property: '-webkit-text-fill-color' },\n ],\n inputCaretTextColor: [\n { ...input, property: 'caret-color' },\n { ...externalInput, property: 'caret-color' },\n ],\n\n labelRequiredIndicator: { ...requiredIndicator, property: 'content' },\n\n inputBorderColor: { ...inputField, property: 'border-color' },\n inputBorderWidth: { ...inputField, property: 'border-width' },\n inputBorderStyle: { ...inputField, property: 'border-style' },\n inputBorderRadius: { ...inputField, property: 'border-radius' },\n\n inputHeight: { ...inputField, property: 'height' },\n inputHorizontalPadding: [\n { ...input, property: 'padding-left' },\n { ...input, property: 'padding-right' },\n { ...externalInput, property: 'padding-left' },\n { ...externalInput, property: 'padding-right' },\n ],\n\n inputOutlineColor: { ...inputField, property: 'outline-color' },\n inputOutlineStyle: { ...inputField, property: 'outline-style' },\n inputOutlineWidth: { ...inputField, property: 'outline-width' },\n inputOutlineOffset: { ...inputField, property: 'outline-offset' },\n\n textAlign: {},\n\n inputTextAlign: [\n { ...input, property: 'text-align' },\n { ...externalInput, property: 'text-align' },\n ],\n\n inputPlaceholderColor: [\n { selector: () => ':host input:placeholder-shown', property: 'color' },\n { ...externalPlaceholder, property: 'color' },\n { ...placeholder, property: 'color' },\n { ...disabledPlaceholder, property: '-webkit-text-fill-color' },\n { ...externalDisabledPlaceholder, property: '-webkit-text-fill-color' },\n ],\n\n labelPosition: { ...label, property: 'position' },\n labelTopPosition: { ...label, property: 'top' },\n labelHorizontalPosition: [\n { ...label, property: 'left' },\n { ...label, property: 'right' },\n ],\n inputTransformY: { ...label, property: 'transform' },\n inputTransition: { ...label, property: 'transition' },\n marginInlineStart: { ...label, property: 'margin-inline-start' },\n placeholderOpacity: [\n { selector: '> input:placeholder-shown', property: 'opacity' },\n { ...externalPlaceholder, property: 'opacity' },\n ],\n inputVerticalAlignment: [\n { ...inputField, property: 'align-items' },\n { ...externalInput, property: 'align-items' },\n ],\n valueInputHeight: [\n { ...input, property: 'height' },\n { ...externalInput, property: 'height' },\n ],\n valueInputMarginBottom: [\n { ...input, property: 'margin-bottom' },\n { ...externalInput, property: 'margin-bottom' },\n ],\n\n inputIconOffset: [\n { ...inputIcon, property: 'margin-right' },\n { ...inputIcon, property: 'margin-left' },\n ],\n inputIconSize: { ...inputIcon, property: 'font-size' },\n inputIconColor: { ...inputIcon, property: 'color' },\n inputTextSecurity: [\n { ...input, property: '-webkit-text-security' },\n { ...input, property: 'text-security' },\n { ...externalInput, property: '-webkit-text-security' },\n { ...externalInput, property: 'text-security' },\n ],\n};\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { SlotController } from '@vaadin/component-base/src/slot-controller.js';\n\n/**\n * A controller to create and initialize slotted `<input>` element.\n */\nexport class InputController extends SlotController {\n constructor(host, callback) {\n super(host, 'input', 'input', {\n initializer: (node, host) => {\n if (host.value) {\n node.value = host.value;\n }\n if (host.type) {\n node.setAttribute('type', host.type);\n }\n\n // Ensure every instance has unique ID\n node.id = this.defaultId;\n\n if (typeof callback === 'function') {\n callback(node);\n }\n },\n useUniqueId: true,\n });\n }\n}\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { InputControlMixin } from './input-control-mixin.js';\n\n/**\n * A mixin to provide logic for vaadin-text-field and related components.\n *\n * @polymerMixin\n * @mixes InputControlMixin\n */\nexport const InputFieldMixin = (superclass) =>\n class InputFieldMixinClass extends InputControlMixin(superclass) {\n static get properties() {\n return {\n /**\n * Whether the value of the control can be automatically completed by the browser.\n * List of available options at:\n * https://developer.mozilla.org/en/docs/Web/HTML/Element/input#attr-autocomplete\n */\n autocomplete: {\n type: String,\n },\n\n /**\n * This is a property supported by Safari that is used to control whether\n * autocorrection should be enabled when the user is entering/editing the text.\n * Possible values are:\n * on: Enable autocorrection.\n * off: Disable autocorrection.\n */\n autocorrect: {\n type: String,\n },\n\n /**\n * This is a property supported by Safari and Chrome that is used to control whether\n * autocapitalization should be enabled when the user is entering/editing the text.\n * Possible values are:\n * characters: Characters capitalization.\n * words: Words capitalization.\n * sentences: Sentences capitalization.\n * none: No capitalization.\n */\n autocapitalize: {\n type: String,\n reflectToAttribute: true,\n },\n };\n }\n\n static get delegateAttrs() {\n return [...super.delegateAttrs, 'autocapitalize', 'autocomplete', 'autocorrect'];\n }\n\n // Workaround for https://github.com/Polymer/polymer/issues/5259\n get __data() {\n return this.__dataValue || {};\n }\n\n set __data(value) {\n this.__dataValue = value;\n }\n\n /**\n * @param {HTMLElement} input\n * @protected\n * @override\n */\n _inputElementChanged(input) {\n super._inputElementChanged(input);\n\n if (input) {\n // Discard value set on the custom slotted input.\n if (input.value && input.value !== this.value) {\n console.warn(`Please define value on the <${this.localName}> component!`);\n input.value = '';\n }\n\n if (this.value) {\n input.value = this.value;\n }\n }\n }\n\n /**\n * Override an event listener from `FocusMixin`.\n * @param {boolean} focused\n * @protected\n * @override\n */\n _setFocused(focused) {\n super._setFocused(focused);\n\n // Do not validate when focusout is caused by document\n // losing focus, which happens on browser tab switch.\n if (!focused && document.hasFocus()) {\n this.validate();\n }\n }\n\n /**\n * Override an event listener from `InputMixin`\n * to mark as valid after user started typing.\n * @param {Event} event\n * @protected\n * @override\n */\n _onInput(event) {\n super._onInput(event);\n\n if (this.invalid) {\n this.validate();\n }\n }\n\n /**\n * Override an observer from `InputMixin` to validate the field\n * when a new value is set programmatically.\n *\n * @param {string | undefined} newValue\n * @param {string | undefined} oldValue\n * @protected\n * @override\n */\n _valueChanged(newValue, oldValue) {\n super._valueChanged(newValue, oldValue);\n\n if (oldValue === undefined) {\n return;\n }\n\n if (this.invalid) {\n this.validate();\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { InputController } from '@vaadin/field-base/src/input-controller.js';\nimport { InputFieldMixin } from '@vaadin/field-base/src/input-field-mixin.js';\nimport { LabelledInputController } from '@vaadin/field-base/src/labelled-input-controller.js';\n\n/**\n * A mixin providing common text field functionality.\n *\n * @polymerMixin\n * @mixes InputFieldMixin\n */\nexport const TextFieldMixin = (superClass) =>\n class TextFieldMixinClass extends InputFieldMixin(superClass) {\n static get properties() {\n return {\n /**\n * Maximum number of characters (in Unicode code points) that the user can enter.\n */\n maxlength: {\n type: Number,\n },\n\n /**\n * Minimum number of characters (in Unicode code points) that the user can enter.\n */\n minlength: {\n type: Number,\n },\n\n /**\n * A regular expression that the value is checked against.\n * The pattern must match the entire value, not just some subset.\n */\n pattern: {\n type: String,\n },\n };\n }\n\n static get delegateAttrs() {\n return [...super.delegateAttrs, 'maxlength', 'minlength', 'pattern'];\n }\n\n static get constraints() {\n return [...super.constraints, 'maxlength', 'minlength', 'pattern'];\n }\n\n constructor() {\n super();\n this._setType('text');\n }\n\n /** @protected */\n get clearElement() {\n return this.$.clearButton;\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this.addController(\n new InputController(this, (input) => {\n this._setInputElement(input);\n this._setFocusElement(input);\n this.stateTarget = input;\n this.ariaTarget = input;\n }),\n );\n this.addController(new LabelledInputController(this.inputElement, this._labelController));\n }\n };\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 '@vaadin/input-container/src/vaadin-input-container.js';\nimport { html, PolymerElement } from '@polymer/polymer';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';\nimport { TooltipController } from '@vaadin/component-base/src/tooltip-controller.js';\nimport { inputFieldShared } from '@vaadin/field-base/src/styles/input-field-shared-styles.js';\nimport { registerStyles, ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { TextFieldMixin } from './vaadin-text-field-mixin.js';\n\nregisterStyles('vaadin-text-field', inputFieldShared, { moduleId: 'vaadin-text-field-styles' });\n\n/**\n * `<vaadin-text-field>` is a web component that allows the user to input and edit text.\n *\n * ```html\n * <vaadin-text-field label=\"First Name\"></vaadin-text-field>\n * ```\n *\n * ### Prefixes and suffixes\n *\n * These are child elements of a `<vaadin-text-field>` that are displayed\n * inline with the input, before or after.\n * In order for an element to be considered as a prefix, it must have the slot\n * attribute set to `prefix` (and similarly for `suffix`).\n *\n * ```html\n * <vaadin-text-field label=\"Email address\">\n * <div slot=\"prefix\">Sent to:</div>\n * <div slot=\"suffix\">@vaadin.com</div>\n * </vaadin-text-field>\n * ```\n *\n * ### Styling\n *\n * The following custom properties are available for styling:\n *\n * Custom property | Description | Default\n * -------------------------------|----------------------------|---------\n * `--vaadin-field-default-width` | Default width of the field | `12em`\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---------------------|----------------\n * `label` | The label element\n * `input-field` | The element that wraps prefix, value and suffix\n * `clear-button` | The clear button\n * `error-message` | The error message element\n * `helper-text` | The helper text element wrapper\n * `required-indicator` | The `required` state indicator element\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * --------------------|-------------|------------\n * `disabled` | Set to a disabled text field | :host\n * `has-value` | Set when the element has a value | :host\n * `has-label` | Set when the element has a label | :host\n * `has-helper` | Set when the element has helper text or slot | :host\n * `has-error-message` | Set when the element has an error message | :host\n * `invalid` | Set when the element is invalid | :host\n * `input-prevented` | Temporarily set when invalid input is prevented | :host\n * `focused` | Set when the element is focused | :host\n * `focus-ring` | Set when the element is keyboard focused | :host\n * `readonly` | Set to a readonly text field | :host\n *\n * See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.\n *\n * @fires {Event} input - Fired when the value is changed by the user: on every typing keystroke, and the value is cleared using the clear button.\n * @fires {Event} change - Fired when the user commits a value change.\n * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.\n * @fires {CustomEvent} value-changed - Fired when the `value` property changes.\n * @fires {CustomEvent} validated - Fired whenever the field is validated.\n *\n * @customElement\n * @extends HTMLElement\n * @mixes ElementMixin\n * @mixes ThemableMixin\n * @mixes TextFieldMixin\n */\nexport class TextField extends TextFieldMixin(ThemableMixin(ElementMixin(PolymerElement))) {\n static get is() {\n return 'vaadin-text-field';\n }\n\n static get template() {\n return html`\n <style>\n [part='input-field'] {\n flex-grow: 0;\n }\n </style>\n\n <div class=\"vaadin-field-container\">\n <div part=\"label\">\n <slot name=\"label\"></slot>\n <span part=\"required-indicator\" aria-hidden=\"true\" on-click=\"focus\"></span>\n </div>\n\n <vaadin-input-container\n part=\"input-field\"\n readonly=\"[[readonly]]\"\n disabled=\"[[disabled]]\"\n invalid=\"[[invalid]]\"\n theme$=\"[[_theme]]\"\n >\n <slot name=\"prefix\" slot=\"prefix\"></slot>\n <slot name=\"input\"></slot>\n <slot name=\"suffix\" slot=\"suffix\"></slot>\n <div id=\"clearButton\" part=\"clear-button\" slot=\"suffix\" aria-hidden=\"true\"></div>\n </vaadin-input-container>\n\n <div part=\"helper-text\">\n <slot name=\"helper\"></slot>\n </div>\n\n <div part=\"error-message\">\n <slot name=\"error-message\"></slot>\n </div>\n </div>\n <slot name=\"tooltip\"></slot>\n `;\n }\n\n static get properties() {\n return {\n /**\n * Maximum number of characters (in Unicode code points) that the user can enter.\n */\n maxlength: {\n type: Number,\n },\n\n /**\n * Minimum number of characters (in Unicode code points) that the user can enter.\n */\n minlength: {\n type: Number,\n },\n };\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this._tooltipController = new TooltipController(this);\n this._tooltipController.setPosition('top');\n this._tooltipController.setAriaTarget(this.inputElement);\n this.addController(this._tooltipController);\n }\n}\n\ndefineCustomElement(TextField);\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 '@vaadin/input-container/theme/lumo/vaadin-input-container-styles.js';\nimport { inputFieldShared } from '@vaadin/vaadin-lumo-styles/mixins/input-field-shared.js';\nimport { registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nregisterStyles('vaadin-text-field', inputFieldShared, {\n moduleId: 'lumo-text-field-styles',\n});\n"],"names":["createBaseInputClass","args","componentName","RawLoaderRadial","baseSelector","constructor","super","this","attachShadow","mode","innerHTML","LoaderRadialClass","mappings","hostDisplay","property","spinnerSize","spinnerBorderWidth","spinnerBorderStyle","spinnerBorderRadius","spinnerQuadrant1Color","spinnerQuadrant2Color","spinnerQuadrant3Color","spinnerQuadrant4Color","animationDuration","animationTimingFunction","animationIterationCount","customElements","define","observedAttributes","forwardAttributes","BaseInputClass","concat","wrapperEle","querySelector","loaderContainer","renderInputs","inputs","Array","digits","keys","map","idx","join","from","querySelectorAll","initInputs","handleLoadingState","isLoading","setAttribute","removeAttribute","Number","parseInt","getAttribute","value","val","parseInputValue","getValidity","isRequired","valueMissing","pattern","RegExp","test","patternMismatch","init","addEventListener","e","isTrusted","focus","getInputIdx","inputEle","getNextInput","currInput","currentIdx","newIdx","Math","min","length","getPrevInput","max","fillDigits","charArr","currentInput","i","nextInput","input","split","forEach","debouncedHandleParseInput","trailing","setTimeout","inputType","onkeydown","key","setSelectionRange","includeAttrs","shadowRoot","handleFocusEventsDispatching","handleInputEventDispatching","attributeChangedCallback","attrName","oldValue","newValue","includes","INPUT_MASK_TEXT_PROP","INPUT_MASK_DISPLAY_PROP","INPUT_MASK_FALLBACK_PROP","focusElement","ele","sanitizeStr","str","replace","toggleMaskVisibility","style","setProperty","removeProperty","host","digitField","label","requiredIndicator","internalWrapper","focusedDigitField","errorMessage","selector","TextFieldClass","textVars","cssVarList","loaderVars","PasscodeClass","fontSize","hostWidth","hostDirection","fontFamily","labelTextColor","labelRequiredIndicator","errorMessageTextColor","errorMessageIcon","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","digitValueTextColor","inputValueTextColor","digitSize","digitPadding","inputHorizontalPadding","digitTextAlign","inputTextAlign","digitCaretTextColor","inputCaretTextColor","digitSpacing","digitOutlineColor","inputOutlineColor","digitOutlineWidth","inputOutlineWidth","focusedDigitFieldOutlineColor","overlayOpacity","proxyProps","superclass","template","document","createElement","baseElement","appendChild","content","cloneNode","inputElement","slots","wrappedEleName","inputHeight","excludeAttrsSync","observedAttrs","useProxyTargets","icon","renderCopyToClipboard","shouldRender","remove","iconInitConfig","title","iconCopiedConfig","Object","assign","slot","navigator","clipboard","writeText","onLabelClick","oldVal","newVal","attributeChangeCallback","_setType","removeEventListener","inputOutlineOffset","placeholder","inputField","inputMask","helperText","disabledPlaceholder","inputDisabled","inputIcon","externalInput","externalInputDisabled","externalPlaceholder","externalDisabledPlaceholder","labelFontSize","labelFontWeight","hostMinWidth","inputDirection","inputBackgroundColor","helperTextColor","inputBorderColor","inputBorderWidth","inputBorderStyle","inputBorderRadius","inputOutlineStyle","textAlign","inputPlaceholderColor","labelPosition","labelTopPosition","labelHorizontalPosition","inputTransformY","inputTransition","marginInlineStart","placeholderOpacity","inputVerticalAlignment","valueInputHeight","valueInputMarginBottom","inputIconOffset","inputIconSize","inputIconColor","inputTextSecurity","InputController","callback","initializer","node","type","id","defaultId","useUniqueId","InputFieldMixin","properties","autocomplete","String","autocorrect","autocapitalize","reflectToAttribute","delegateAttrs","__data","__dataValue","_inputElementChanged","console","warn","localName","_setFocused","focused","hasFocus","validate","_onInput","event","invalid","_valueChanged","undefined","TextFieldMixin","superClass","maxlength","minlength","constraints","clearElement","$","clearButton","ready","addController","_setInputElement","_setFocusElement","stateTarget","ariaTarget","_labelController","moduleId","TextField","is","_tooltipController","setPosition","setAriaTarget"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"descope-passcode-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/./src/baseClasses/createBaseInputClass.js","webpack://@descope/web-components-ui/./src/components/descope-loader-radial/LoaderRadialClass.js","webpack://@descope/web-components-ui/./src/components/descope-loader-radial/index.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/descope-passcode-internal/helpers.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/descope-passcode-internal/index.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/PasscodeClass.js","webpack://@descope/web-components-ui/./src/components/descope-passcode/index.js","webpack://@descope/web-components-ui/./src/components/descope-text-field/TextFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-text-field/index.js","webpack://@descope/web-components-ui/./src/components/descope-text-field/textFieldMappings.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/field-base/src/input-controller.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/field-base/src/input-field-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/text-field/src/vaadin-text-field-mixin.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/text-field/src/vaadin-text-field.js","webpack://@descope/web-components-ui/../../../node_modules/@vaadin/text-field/theme/lumo/vaadin-text-field-styles.js"],"sourcesContent":["import { compose } from '../helpers';\nimport {\n changeMixin,\n inputEventsDispatchingMixin,\n inputValidationMixin,\n normalizeBooleanAttributesMixin,\n} from '../mixins';\nimport { createBaseClass } from './createBaseClass';\n\nexport const createBaseInputClass = (...args) =>\n compose(\n inputValidationMixin,\n changeMixin,\n normalizeBooleanAttributesMixin,\n inputEventsDispatchingMixin\n )(createBaseClass(...args));\n","import { injectStyle } from '@descope-ui/common/components-helpers';\nimport { createStyleMixin, draggableMixin, componentNameValidationMixin } from '../../mixins';\nimport { createBaseClass } from '../../baseClasses/createBaseClass';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\n\nexport const componentName = getComponentName('loader-radial');\n\nclass RawLoaderRadial extends createBaseClass({ componentName, baseSelector: ':host > div' }) {\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n\t\t<div></div>\n\t`;\n\n injectStyle(\n `\n @keyframes spin {\n\t\t\t\t0% { transform: rotate(0deg); }\n\t\t\t\t100% { transform: rotate(360deg); }\n\t\t\t}\n\t\t\t:host {\n\t\t\t\tposition: relative;\n\t\t\t\tdisplay: inline-flex;\n\t\t\t}\n\t\t\t:host > div {\n\t\t\t\tanimation-name: spin;\n\t\t\t}\n `,\n this\n );\n }\n}\n\nexport const LoaderRadialClass = compose(\n createStyleMixin({\n mappings: {\n hostDisplay: { property: 'display' },\n spinnerSize: [{ property: 'width' }, { property: 'height' }],\n spinnerBorderWidth: { property: 'border-width' },\n spinnerBorderStyle: { property: 'border-style' },\n spinnerBorderRadius: { property: 'border-radius' },\n spinnerQuadrant1Color: { property: 'border-top-color' },\n spinnerQuadrant2Color: { property: 'border-bottom-color' },\n spinnerQuadrant3Color: { property: 'border-right-color' },\n spinnerQuadrant4Color: { property: 'border-left-color' },\n animationDuration: {},\n animationTimingFunction: {},\n animationIterationCount: {},\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawLoaderRadial);\n","import { componentName, LoaderRadialClass } from './LoaderRadialClass';\n\ncustomElements.define(componentName, LoaderRadialClass);\n\nexport { LoaderRadialClass, componentName };\n","import debounce from 'lodash.debounce';\nimport { injectStyle } from '@descope-ui/common/components-helpers';\nimport { createBaseInputClass } from '../../../baseClasses/createBaseInputClass';\nimport { forwardAttrs, getComponentName } from '../../../helpers/componentHelpers';\nimport {\n sanitizeStr,\n focusElement,\n toggleMaskVisibility,\n INPUT_MASK_FALLBACK_PROP,\n INPUT_MASK_TEXT_PROP,\n INPUT_MASK_DISPLAY_PROP,\n} from './helpers';\n\nexport const componentName = getComponentName('passcode-internal');\n\nconst observedAttributes = ['digits', 'loading'];\n\nconst forwardAttributes = [\n 'disabled',\n 'bordered',\n 'size',\n 'invalid',\n 'readonly',\n 'aria-labelledby',\n];\n\nconst BaseInputClass = createBaseInputClass({ componentName, baseSelector: 'div' });\n\nclass PasscodeInternal extends BaseInputClass {\n static get observedAttributes() {\n return observedAttributes.concat(BaseInputClass.observedAttributes || []);\n }\n\n constructor() {\n super();\n\n this.innerHTML = `\n\t\t<div class=\"wrapper\"></div>\n\t\t<div class=\"loader-container\">\n <descope-loader-radial size=\"xs\" mode=\"primary\"></descope-loader-radial>\n </div>\n\t\t`;\n\n this.wrapperEle = this.querySelector('.wrapper');\n this.loaderContainer = this.querySelector('.loader-container');\n }\n\n renderInputs() {\n const inputs = [...Array(this.digits).keys()].map(\n (idx) => `\n\t\t<descope-text-field\n\t\t\tdata-id=${idx}\n\t\t\ttype=\"tel\"\n\t\t\tautocomplete=\"one-time-code\"\n\t\t\tinputMode=\"numeric\"\n\t\t></descope-text-field>\n\t`\n );\n\n this.wrapperEle.innerHTML = inputs.join('');\n\n this.inputs = Array.from(this.querySelectorAll('descope-text-field'));\n\n this.initInputs();\n }\n\n handleLoadingState(isLoading) {\n if (isLoading) {\n this.setAttribute('inert', 'true');\n } else {\n this.removeAttribute('inert');\n }\n }\n\n get digits() {\n return Number.parseInt(this.getAttribute('digits'), 10) || 6;\n }\n\n get value() {\n return this.inputs?.map(({ value }) => value).join('') || '';\n }\n\n set value(val) {\n if (val === this.value) return;\n\n this.parseInputValue(this.inputs[0], sanitizeStr(val));\n }\n\n getValidity() {\n if (this.isRequired && !this.value) {\n return { valueMissing: true };\n }\n if (this.pattern && !new RegExp(this.pattern).test(this.value)) {\n return { patternMismatch: true };\n }\n\n return {};\n }\n\n init() {\n // we are adding listeners before calling to super because it's stopping the events\n this.addEventListener('focus', (e) => {\n // we want to ignore focus events we are dispatching\n if (e.isTrusted) this.inputs[0].focus();\n });\n\n super.init?.();\n\n this.renderInputs();\n }\n\n getInputIdx(inputEle) {\n return Number.parseInt(inputEle.getAttribute('data-id'), 10);\n }\n\n getNextInput(currInput) {\n const currentIdx = this.getInputIdx(currInput);\n const newIdx = Math.min(currentIdx + 1, this.inputs.length - 1);\n return this.inputs[newIdx];\n }\n\n getPrevInput(currInput) {\n const currentIdx = this.getInputIdx(currInput);\n const newIdx = Math.max(currentIdx - 1, 0);\n return this.inputs[newIdx];\n }\n\n fillDigits(charArr, currentInput) {\n for (let i = 0; i < charArr.length; i += 1) {\n currentInput.value = charArr[i] ?? '';\n\n const nextInput = this.getNextInput(currentInput);\n\n if (nextInput === currentInput) break;\n currentInput = nextInput;\n }\n\n focusElement(currentInput);\n }\n\n parseInputValue(input, value = '') {\n const charArr = value.split('');\n\n if (!charArr.length) {\n // if we got an invalid value we want to clear the input\n input.value = '';\n } else this.fillDigits(charArr, input);\n }\n\n initInputs() {\n this.inputs.forEach((input) => {\n // During debounced input we hide the value with a mask.\n // This allows us to hide the multiple population of the first input\n // in case of an automated input (e.g. Safari OTP Autofill or paste).\n injectStyle(\n `\n vaadin-text-field::part(input-field)::before {\n ${INPUT_MASK_FALLBACK_PROP}: '';\n content: var(${INPUT_MASK_TEXT_PROP}, var(${INPUT_MASK_FALLBACK_PROP}));\n position: absolute;\n width: 100%;\n height: 100%;\n display: var(${INPUT_MASK_DISPLAY_PROP}, none);\n align-items: center;\n justify-content: center;\n }`,\n input\n );\n\n const handleParseInput = (val) => {\n this.parseInputValue(input, val);\n toggleMaskVisibility(input);\n };\n\n const debouncedHandleParseInput = debounce(handleParseInput, 0, { trailing: true });\n\n // sanitize the input\n input.addEventListener('input', (e) => {\n input.value = sanitizeStr(input.value);\n\n if (input.value) {\n toggleMaskVisibility(input, input.value[0]);\n }\n\n setTimeout(() => {\n if (e?.inputType === 'deleteContentBackward') {\n focusElement(this.getPrevInput(input));\n }\n });\n debouncedHandleParseInput(input.value);\n });\n\n // we want backspace to focus on the previous digit\n input.onkeydown = ({ key }) => {\n // when user deletes a digit, we want to focus the previous digit\n if (key === 'Backspace') {\n // if value is empty then the input element does not fire `input` event\n // if this is the case, we focus the element here.\n // otherwise, the focusElement occurs as part of the `input` event listener\n if (!input.value) {\n setTimeout(() => focusElement(this.getPrevInput(input)), 0);\n } else {\n input.setSelectionRange(1, 1);\n }\n } else if (key.length === 1) {\n // we want only characters and not command keys\n input.value = ''; // we are clearing the previous value so we can override it with the new value\n }\n };\n\n forwardAttrs(this, input, { includeAttrs: forwardAttributes });\n input.shadowRoot.querySelector('input').setAttribute('aria-label', 'passcode digit');\n });\n\n this.handleFocusEventsDispatching(this.inputs);\n this.handleInputEventDispatching();\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n // sync attributes to inputs\n if (oldValue !== newValue) {\n if (observedAttributes.includes(attrName)) {\n if (attrName === 'digits') {\n this.renderInputs();\n }\n if (attrName === 'loading') {\n this.handleLoadingState(newValue === 'true');\n }\n }\n }\n }\n\n get pattern() {\n return `^$|^\\\\d{${this.digits},}$`;\n }\n}\n\nexport default PasscodeInternal;\n","export const INPUT_MASK_TEXT_PROP = '--descope-input-mask-content';\nexport const INPUT_MASK_DISPLAY_PROP = '--descope-input-mask-display';\nexport const INPUT_MASK_FALLBACK_PROP = '--descope-input-mask-fallback';\n\nexport const focusElement = (ele) => {\n ele?.focus();\n ele?.setSelectionRange?.(1, 1);\n};\n\nexport const sanitizeStr = (str) => str.replace(/\\D/g, '') || '';\n\nexport const toggleMaskVisibility = (input, value) => {\n if (value) {\n input.style.setProperty(INPUT_MASK_TEXT_PROP, `\"${value}\"`);\n input.style.setProperty(INPUT_MASK_DISPLAY_PROP, 'flex');\n } else {\n input.style.removeProperty(INPUT_MASK_TEXT_PROP);\n input.style.removeProperty(INPUT_MASK_DISPLAY_PROP);\n }\n};\n","import PasscodeInternal, { componentName } from './PasscodeInternal';\n\ncustomElements.define(componentName, PasscodeInternal);\n","import { injectStyle } from '@descope-ui/common/components-helpers';\nimport {\n createStyleMixin,\n draggableMixin,\n createProxy,\n proxyInputMixin,\n componentNameValidationMixin,\n inputOverrideValidConstraintsMixin,\n} from '../../mixins';\nimport { componentName as descopeInternalComponentName } from './descope-passcode-internal/PasscodeInternal';\nimport { TextFieldClass } from '../descope-text-field/TextFieldClass';\nimport { LoaderRadialClass } from '../descope-loader-radial/LoaderRadialClass';\nimport { compose } from '../../helpers';\nimport { forwardAttrs, getComponentName } from '../../helpers/componentHelpers';\nimport {\n resetInputCursor,\n resetInputLabelPosition,\n resetInputFieldDefaultWidth,\n} from '../../helpers/themeHelpers/resetHelpers';\n\nexport const componentName = getComponentName('passcode');\n\nconst observedAttributes = ['digits'];\n\nconst customMixin = (superclass) =>\n class PasscodeMixinClass extends superclass {\n static get observedAttributes() {\n return observedAttributes.concat(superclass.observedAttributes || []);\n }\n\n get digits() {\n return Number.parseInt(this.getAttribute('digits'), 10) || 6;\n }\n\n init() {\n super.init?.();\n\n injectStyle(\n `\n .wrapper {\n display: flex;\n width: 100%;\n justify-content: space-between;\n direction: ltr;\n position: relative;\n }\n\n descope-text-field {\n direction: ltr;\n }\n\n .loader-container {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n `,\n this\n );\n\n const template = document.createElement('template');\n\n template.innerHTML = `\n <${descopeInternalComponentName}\n bordered=\"true\"\n name=\"code\"\n tabindex=\"-1\"\n slot=\"input\"\n role=\"textbox\"\n ><slot></slot></${descopeInternalComponentName}>\n `;\n\n this.baseElement.appendChild(template.content.cloneNode(true));\n\n this.inputElement = this.shadowRoot.querySelector(descopeInternalComponentName);\n\n forwardAttrs(this, this.inputElement, {\n includeAttrs: ['digits', 'size', 'loading', 'disabled'],\n });\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (attrName === 'digits') {\n this.style['--passcode-digits-count'] = newValue;\n }\n }\n };\n\nconst {\n host,\n digitField,\n label,\n requiredIndicator,\n internalWrapper,\n focusedDigitField,\n errorMessage,\n} = {\n host: { selector: () => ':host' },\n focusedDigitField: { selector: () => `${TextFieldClass.componentName}[focused=\"true\"]` },\n digitField: { selector: () => TextFieldClass.componentName },\n label: { selector: '::part(label)' },\n requiredIndicator: { selector: '[required]::part(required-indicator)::after' },\n internalWrapper: { selector: 'descope-passcode-internal .wrapper' },\n errorMessage: { selector: '::part(error-message)' },\n};\n\nconst textVars = TextFieldClass.cssVarList;\nconst loaderVars = LoaderRadialClass.cssVarList;\n\nexport const PasscodeClass = compose(\n createStyleMixin({\n mappings: {\n fontSize: [{ ...digitField, property: textVars.fontSize }, host],\n hostWidth: { property: 'width' },\n hostDirection: { ...host, property: 'direction' },\n fontFamily: [host, { ...label }],\n labelTextColor: [\n { ...label, property: 'color' },\n { ...label, property: '-webkit-text-fill-color' },\n { ...requiredIndicator, property: 'color' },\n { ...requiredIndicator, property: '-webkit-text-fill-color' },\n ],\n labelRequiredIndicator: { ...requiredIndicator, property: 'content' },\n errorMessageTextColor: { ...errorMessage, property: 'color' },\n errorMessageIcon: { ...errorMessage, property: 'background-image' },\n errorMessageIconSize: { ...errorMessage, property: 'background-size' },\n errorMessageIconPadding: { ...errorMessage, property: 'padding-inline-start' },\n errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },\n errorMessageIconPosition: { ...errorMessage, property: 'background-position' },\n errorMessageFontSize: { ...errorMessage, property: 'font-size' },\n digitValueTextColor: {\n selector: TextFieldClass.componentName,\n property: textVars.inputValueTextColor,\n },\n digitSize: [\n { ...digitField, property: 'height' },\n { ...digitField, property: 'width' },\n ],\n digitPadding: { ...digitField, property: textVars.inputHorizontalPadding },\n digitTextAlign: { ...digitField, property: textVars.inputTextAlign },\n digitCaretTextColor: { ...digitField, property: textVars.inputCaretTextColor },\n digitSpacing: { ...internalWrapper, property: 'gap' },\n digitOutlineColor: { ...digitField, property: textVars.inputOutlineColor },\n digitOutlineWidth: { ...digitField, property: textVars.inputOutlineWidth },\n\n focusedDigitFieldOutlineColor: { ...focusedDigitField, property: textVars.inputOutlineColor },\n overlayOpacity: { ...internalWrapper, property: 'opacity' },\n spinnerSize: { selector: LoaderRadialClass.componentName, property: loaderVars.spinnerSize },\n },\n }),\n draggableMixin,\n inputOverrideValidConstraintsMixin,\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'] }),\n componentNameValidationMixin,\n customMixin\n)(\n createProxy({\n slots: [],\n wrappedEleName: 'vaadin-text-field',\n style: () => `\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tmin-width: calc(var(--passcode-digits-count) * 2em);\n\t\t\t}\n\t\t\t${resetInputFieldDefaultWidth()}\n\t\t\t:host::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\t\t\t:host::part(input-field)::after {\n\t\t\t\tbackground-color: transparent;\n\t\t\t}\n\n :host([loading=\"true\"]) descope-passcode-internal .loader-container {\n display: block;\n }\n\n\t\t\tdescope-passcode-internal {\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tmin-height: initial;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal .wrapper {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tmin-height: initial;\n\t\t\t\theight: 100%;\n\t\t\t\tjustify-content: space-between;\n\t\t\t}\n\n\t\t\tdescope-passcode-internal descope-text-field {\n\t\t\t\tmin-width: 2em;\n\t\t\t\tmax-width: var(${textVars.inputHeight});\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbackground-color: transparent;\n\t\t\t\tpadding: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t\t-webkit-mask-image: none;\n\t\t\t}\n\n /* safari */\n\t\t\tvaadin-text-field::part(input-field)::after {\n opacity: 0;\n }\n\n\t\t\tvaadin-text-field {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\tvaadin-text-field::before {\n\t\t\t\theight: 0;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly] > input:placeholder-shown {\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\tvaadin-text-field[readonly]::part(input-field)::after {\n\t\t\t\tborder: 0 solid;\n\t\t\t}\n\n\t\t\tvaadin-text-field::part(input-field) {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n\n ${resetInputLabelPosition('vaadin-text-field')}\n\t\t\t${resetInputCursor('vaadin-text-field')}\n \t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n\nexport default PasscodeClass;\n","import { componentName, PasscodeClass } from './PasscodeClass';\nimport '../descope-text-field';\nimport '../descope-loader-radial';\nimport './descope-passcode-internal';\n\ncustomElements.define(componentName, PasscodeClass);\n\nexport { PasscodeClass, componentName };\n","import {\n createStyleMixin,\n draggableMixin,\n createProxy,\n proxyInputMixin,\n componentNameValidationMixin,\n} from '../../mixins';\nimport textFieldMappings from './textFieldMappings';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\nimport {\n inputFloatingLabelStyle,\n resetInputLabelPosition,\n resetInputOverrides,\n useHostExternalPadding,\n} from '../../helpers/themeHelpers/resetHelpers';\n\nexport const componentName = getComponentName('text-field');\n\nconst observedAttrs = ['type', 'label-type', 'copy-to-clipboard'];\n\nconst customMixin = (superclass) =>\n class TextFieldClass extends superclass {\n static get observedAttributes() {\n return observedAttrs.concat(superclass.observedAttributes || []);\n }\n\n icon;\n\n init() {\n super.init?.();\n }\n\n renderCopyToClipboard(shouldRender) {\n if (!shouldRender) {\n this.icon?.remove();\n return;\n }\n\n const iconInitConfig = {\n icon: 'vaadin:copy-o',\n title: 'Copy',\n style: 'cursor: pointer',\n };\n\n const iconCopiedConfig = {\n icon: 'vaadin:check-circle-o',\n title: 'Copied',\n style: 'cursor: initial',\n };\n\n this.icon = Object.assign(document.createElement('vaadin-icon'), {\n slot: 'suffix',\n ...iconInitConfig,\n });\n\n this.baseElement.appendChild(this.icon);\n this.icon.addEventListener('click', () => {\n navigator.clipboard.writeText(this.value);\n Object.assign(this.icon, iconCopiedConfig);\n\n // we want the icon to go back to the initial state after 5 seconds\n setTimeout(() => {\n Object.assign(this.icon, iconInitConfig);\n }, 5000);\n });\n }\n\n onLabelClick() {\n this.focus();\n }\n\n attributeChangedCallback(attrName, oldVal, newVal) {\n super.attributeChangeCallback?.(attrName, oldVal, newVal);\n\n // Vaadin doesn't allow to change the input type attribute.\n // We need the ability to do that, so we're overriding their\n // behavior with their private API.\n // When receiving a `type` attribute, we use their private API\n // to set it on the input.\n if (attrName === 'type') {\n this.baseElement._setType(newVal);\n }\n\n if (oldVal !== newVal) {\n if (attrName === 'label-type') {\n if (newVal === 'floating') {\n this.addEventListener('click', this.onLabelClick);\n } else {\n this.removeEventListener('click', this.onLabelClick);\n }\n } else if (attrName === 'copy-to-clipboard') {\n this.renderCopyToClipboard(newVal === 'true');\n }\n }\n }\n };\n\nexport const TextFieldClass = compose(\n createStyleMixin({\n mappings: textFieldMappings,\n }),\n draggableMixin,\n proxyInputMixin({ proxyProps: ['value', 'selectionStart'], useProxyTargets: true }),\n componentNameValidationMixin,\n customMixin\n)(\n createProxy({\n slots: ['prefix', 'suffix'],\n wrappedEleName: 'vaadin-text-field',\n style: () => `\n\t\t\t:host {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tmax-width: 100%;\n\t\t\t\tpadding: calc(var(${TextFieldClass.cssVarList.inputOutlineWidth}) + var(${\n TextFieldClass.cssVarList.inputOutlineOffset\n }));\n box-sizing: border-box;\n\t\t\t}\n :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) {\n opacity: 1;\n }\n\n vaadin-text-field[label-type=\"floating\"]:not([focused])[readonly] > input:placeholder-shown {\n opacity: 0;\n }\n vaadin-text-field[label-type=\"floating\"]:not([focused])[disabled] > input:placeholder-shown {\n opacity: 0;\n }\n ${resetInputLabelPosition('vaadin-text-field')}\n\t\t\t${useHostExternalPadding(TextFieldClass.cssVarList)}\n\t\t\t${resetInputOverrides('vaadin-text-field', TextFieldClass.cssVarList)}\n ${inputFloatingLabelStyle()}\n\n vaadin-text-field vaadin-icon {\n align-self: center;\n }\n\t\t`,\n excludeAttrsSync: ['tabindex', 'style'],\n componentName,\n })\n);\n","import '@vaadin/text-field';\nimport '@vaadin/icons';\nimport '@vaadin/icon';\n\nimport { componentName, TextFieldClass } from './TextFieldClass';\n\ncustomElements.define(componentName, TextFieldClass);\n\nexport { TextFieldClass, componentName };\n","const {\n host,\n label,\n placeholder,\n requiredIndicator,\n inputField,\n input,\n inputMask,\n helperText,\n errorMessage,\n disabledPlaceholder,\n inputDisabled,\n inputIcon,\n externalInput,\n externalInputDisabled,\n externalPlaceholder,\n externalDisabledPlaceholder,\n} = {\n host: { selector: () => ':host' },\n label: { selector: '::part(label)' },\n requiredIndicator: { selector: '[required]::part(required-indicator)::after' },\n placeholder: [\n { selector: '> input:placeholder-shown' },\n { selector: () => ':host::slotted(input:placeholder-shown)' },\n ],\n disabledPlaceholder: { selector: '> input:disabled::placeholder' },\n inputField: { selector: '::part(input-field)' },\n input: { selector: 'input' },\n inputMask: { selector: '::part(input-field)::before' },\n inputDisabled: { selector: 'input:disabled' },\n helperText: { selector: '::part(helper-text)' },\n errorMessage: { selector: '::part(error-message)' },\n inputIcon: { selector: 'vaadin-icon' },\n externalInput: { selector: () => '::slotted(input)' },\n externalInputDisabled: { selector: () => '::slotted(input:disabled)' },\n externalPlaceholder: { selector: () => '::slotted(input:placeholder-shown)' },\n externalDisabledPlaceholder: { selector: () => '::slotted(input:disabled::placeholder)' },\n};\n\nexport default {\n // we apply font-size also on the host so we can set its width with em\n fontSize: [{}, host],\n fontFamily: [label, inputField, helperText, errorMessage],\n\n labelFontSize: { ...label, property: 'font-size' },\n labelFontWeight: { ...label, property: 'font-weight' },\n\n labelTextColor: [\n { ...label, property: 'color' },\n { ...requiredIndicator, property: 'color' },\n { ...label, property: '-webkit-text-fill-color' },\n { ...requiredIndicator, property: '-webkit-text-fill-color' },\n ],\n\n hostWidth: { ...host, property: 'width' },\n hostMinWidth: { ...host, property: 'min-width' },\n hostDirection: { ...host, property: 'direction' },\n inputDirection: { ...input, property: 'direction' },\n\n inputBackgroundColor: [\n { ...inputField, property: 'background-color' },\n { ...inputMask, property: 'background-color' },\n ],\n\n errorMessageTextColor: { ...errorMessage, property: 'color' },\n errorMessageIcon: { ...errorMessage, property: 'background-image' },\n errorMessageIconSize: { ...errorMessage, property: 'background-size' },\n errorMessageIconPadding: { ...errorMessage, property: 'padding-inline-start' },\n errorMessageIconRepeat: { ...errorMessage, property: 'background-repeat' },\n errorMessageIconPosition: { ...errorMessage, property: 'background-position' },\n errorMessageFontSize: { ...errorMessage, property: 'font-size' },\n\n helperTextColor: { ...helperText, property: '-webkit-text-fill-color' },\n\n inputValueTextColor: [\n { ...inputField, property: 'color' },\n { ...inputDisabled, property: '-webkit-text-fill-color' },\n { ...externalInputDisabled, property: '-webkit-text-fill-color' },\n ],\n inputCaretTextColor: [\n { ...input, property: 'caret-color' },\n { ...externalInput, property: 'caret-color' },\n ],\n\n labelRequiredIndicator: { ...requiredIndicator, property: 'content' },\n\n inputBorderColor: { ...inputField, property: 'border-color' },\n inputBorderWidth: { ...inputField, property: 'border-width' },\n inputBorderStyle: { ...inputField, property: 'border-style' },\n inputBorderRadius: { ...inputField, property: 'border-radius' },\n\n inputHeight: { ...inputField, property: 'height' },\n inputHorizontalPadding: [\n { ...input, property: 'padding-left' },\n { ...input, property: 'padding-right' },\n { ...externalInput, property: 'padding-left' },\n { ...externalInput, property: 'padding-right' },\n ],\n\n inputOutlineColor: { ...inputField, property: 'outline-color' },\n inputOutlineStyle: { ...inputField, property: 'outline-style' },\n inputOutlineWidth: { ...inputField, property: 'outline-width' },\n inputOutlineOffset: { ...inputField, property: 'outline-offset' },\n\n textAlign: {},\n\n inputTextAlign: [\n { ...input, property: 'text-align' },\n { ...externalInput, property: 'text-align' },\n ],\n\n inputPlaceholderColor: [\n { selector: () => ':host input:placeholder-shown', property: 'color' },\n { ...externalPlaceholder, property: 'color' },\n { ...placeholder, property: 'color' },\n { ...disabledPlaceholder, property: '-webkit-text-fill-color' },\n { ...externalDisabledPlaceholder, property: '-webkit-text-fill-color' },\n ],\n\n labelPosition: { ...label, property: 'position' },\n labelTopPosition: { ...label, property: 'top' },\n labelHorizontalPosition: [\n { ...label, property: 'left' },\n { ...label, property: 'right' },\n ],\n inputTransformY: { ...label, property: 'transform' },\n inputTransition: { ...label, property: 'transition' },\n marginInlineStart: { ...label, property: 'margin-inline-start' },\n placeholderOpacity: [\n { selector: '> input:placeholder-shown', property: 'opacity' },\n { ...externalPlaceholder, property: 'opacity' },\n ],\n inputVerticalAlignment: [\n { ...inputField, property: 'align-items' },\n { ...externalInput, property: 'align-items' },\n ],\n valueInputHeight: [\n { ...input, property: 'height' },\n { ...externalInput, property: 'height' },\n ],\n valueInputMarginBottom: [\n { ...input, property: 'margin-bottom' },\n { ...externalInput, property: 'margin-bottom' },\n ],\n\n inputIconOffset: [\n { ...inputIcon, property: 'margin-right' },\n { ...inputIcon, property: 'margin-left' },\n ],\n inputIconSize: { ...inputIcon, property: 'font-size' },\n inputIconColor: { ...inputIcon, property: 'color' },\n inputTextSecurity: [\n { ...input, property: '-webkit-text-security' },\n { ...input, property: 'text-security' },\n { ...externalInput, property: '-webkit-text-security' },\n { ...externalInput, property: 'text-security' },\n ],\n};\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { SlotController } from '@vaadin/component-base/src/slot-controller.js';\n\n/**\n * A controller to create and initialize slotted `<input>` element.\n */\nexport class InputController extends SlotController {\n constructor(host, callback) {\n super(host, 'input', 'input', {\n initializer: (node, host) => {\n if (host.value) {\n node.value = host.value;\n }\n if (host.type) {\n node.setAttribute('type', host.type);\n }\n\n // Ensure every instance has unique ID\n node.id = this.defaultId;\n\n if (typeof callback === 'function') {\n callback(node);\n }\n },\n useUniqueId: true,\n });\n }\n}\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { InputControlMixin } from './input-control-mixin.js';\n\n/**\n * A mixin to provide logic for vaadin-text-field and related components.\n *\n * @polymerMixin\n * @mixes InputControlMixin\n */\nexport const InputFieldMixin = (superclass) =>\n class InputFieldMixinClass extends InputControlMixin(superclass) {\n static get properties() {\n return {\n /**\n * Whether the value of the control can be automatically completed by the browser.\n * List of available options at:\n * https://developer.mozilla.org/en/docs/Web/HTML/Element/input#attr-autocomplete\n */\n autocomplete: {\n type: String,\n },\n\n /**\n * This is a property supported by Safari that is used to control whether\n * autocorrection should be enabled when the user is entering/editing the text.\n * Possible values are:\n * on: Enable autocorrection.\n * off: Disable autocorrection.\n */\n autocorrect: {\n type: String,\n },\n\n /**\n * This is a property supported by Safari and Chrome that is used to control whether\n * autocapitalization should be enabled when the user is entering/editing the text.\n * Possible values are:\n * characters: Characters capitalization.\n * words: Words capitalization.\n * sentences: Sentences capitalization.\n * none: No capitalization.\n */\n autocapitalize: {\n type: String,\n reflectToAttribute: true,\n },\n };\n }\n\n static get delegateAttrs() {\n return [...super.delegateAttrs, 'autocapitalize', 'autocomplete', 'autocorrect'];\n }\n\n // Workaround for https://github.com/Polymer/polymer/issues/5259\n get __data() {\n return this.__dataValue || {};\n }\n\n set __data(value) {\n this.__dataValue = value;\n }\n\n /**\n * @param {HTMLElement} input\n * @protected\n * @override\n */\n _inputElementChanged(input) {\n super._inputElementChanged(input);\n\n if (input) {\n // Discard value set on the custom slotted input.\n if (input.value && input.value !== this.value) {\n console.warn(`Please define value on the <${this.localName}> component!`);\n input.value = '';\n }\n\n if (this.value) {\n input.value = this.value;\n }\n }\n }\n\n /**\n * Override an event listener from `FocusMixin`.\n * @param {boolean} focused\n * @protected\n * @override\n */\n _setFocused(focused) {\n super._setFocused(focused);\n\n // Do not validate when focusout is caused by document\n // losing focus, which happens on browser tab switch.\n if (!focused && document.hasFocus()) {\n this.validate();\n }\n }\n\n /**\n * Override an event listener from `InputMixin`\n * to mark as valid after user started typing.\n * @param {Event} event\n * @protected\n * @override\n */\n _onInput(event) {\n super._onInput(event);\n\n if (this.invalid) {\n this.validate();\n }\n }\n\n /**\n * Override an observer from `InputMixin` to validate the field\n * when a new value is set programmatically.\n *\n * @param {string | undefined} newValue\n * @param {string | undefined} oldValue\n * @protected\n * @override\n */\n _valueChanged(newValue, oldValue) {\n super._valueChanged(newValue, oldValue);\n\n if (oldValue === undefined) {\n return;\n }\n\n if (this.invalid) {\n this.validate();\n }\n }\n };\n","/**\n * @license\n * Copyright (c) 2021 - 2023 Vaadin Ltd.\n * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/\n */\nimport { InputController } from '@vaadin/field-base/src/input-controller.js';\nimport { InputFieldMixin } from '@vaadin/field-base/src/input-field-mixin.js';\nimport { LabelledInputController } from '@vaadin/field-base/src/labelled-input-controller.js';\n\n/**\n * A mixin providing common text field functionality.\n *\n * @polymerMixin\n * @mixes InputFieldMixin\n */\nexport const TextFieldMixin = (superClass) =>\n class TextFieldMixinClass extends InputFieldMixin(superClass) {\n static get properties() {\n return {\n /**\n * Maximum number of characters (in Unicode code points) that the user can enter.\n */\n maxlength: {\n type: Number,\n },\n\n /**\n * Minimum number of characters (in Unicode code points) that the user can enter.\n */\n minlength: {\n type: Number,\n },\n\n /**\n * A regular expression that the value is checked against.\n * The pattern must match the entire value, not just some subset.\n */\n pattern: {\n type: String,\n },\n };\n }\n\n static get delegateAttrs() {\n return [...super.delegateAttrs, 'maxlength', 'minlength', 'pattern'];\n }\n\n static get constraints() {\n return [...super.constraints, 'maxlength', 'minlength', 'pattern'];\n }\n\n constructor() {\n super();\n this._setType('text');\n }\n\n /** @protected */\n get clearElement() {\n return this.$.clearButton;\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this.addController(\n new InputController(this, (input) => {\n this._setInputElement(input);\n this._setFocusElement(input);\n this.stateTarget = input;\n this.ariaTarget = input;\n }),\n );\n this.addController(new LabelledInputController(this.inputElement, this._labelController));\n }\n };\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 '@vaadin/input-container/src/vaadin-input-container.js';\nimport { html, PolymerElement } from '@polymer/polymer';\nimport { defineCustomElement } from '@vaadin/component-base/src/define.js';\nimport { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';\nimport { TooltipController } from '@vaadin/component-base/src/tooltip-controller.js';\nimport { inputFieldShared } from '@vaadin/field-base/src/styles/input-field-shared-styles.js';\nimport { registerStyles, ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\nimport { TextFieldMixin } from './vaadin-text-field-mixin.js';\n\nregisterStyles('vaadin-text-field', inputFieldShared, { moduleId: 'vaadin-text-field-styles' });\n\n/**\n * `<vaadin-text-field>` is a web component that allows the user to input and edit text.\n *\n * ```html\n * <vaadin-text-field label=\"First Name\"></vaadin-text-field>\n * ```\n *\n * ### Prefixes and suffixes\n *\n * These are child elements of a `<vaadin-text-field>` that are displayed\n * inline with the input, before or after.\n * In order for an element to be considered as a prefix, it must have the slot\n * attribute set to `prefix` (and similarly for `suffix`).\n *\n * ```html\n * <vaadin-text-field label=\"Email address\">\n * <div slot=\"prefix\">Sent to:</div>\n * <div slot=\"suffix\">@vaadin.com</div>\n * </vaadin-text-field>\n * ```\n *\n * ### Styling\n *\n * The following custom properties are available for styling:\n *\n * Custom property | Description | Default\n * -------------------------------|----------------------------|---------\n * `--vaadin-field-default-width` | Default width of the field | `12em`\n *\n * The following shadow DOM parts are available for styling:\n *\n * Part name | Description\n * ---------------------|----------------\n * `label` | The label element\n * `input-field` | The element that wraps prefix, value and suffix\n * `clear-button` | The clear button\n * `error-message` | The error message element\n * `helper-text` | The helper text element wrapper\n * `required-indicator` | The `required` state indicator element\n *\n * The following state attributes are available for styling:\n *\n * Attribute | Description | Part name\n * --------------------|-------------|------------\n * `disabled` | Set to a disabled text field | :host\n * `has-value` | Set when the element has a value | :host\n * `has-label` | Set when the element has a label | :host\n * `has-helper` | Set when the element has helper text or slot | :host\n * `has-error-message` | Set when the element has an error message | :host\n * `invalid` | Set when the element is invalid | :host\n * `input-prevented` | Temporarily set when invalid input is prevented | :host\n * `focused` | Set when the element is focused | :host\n * `focus-ring` | Set when the element is keyboard focused | :host\n * `readonly` | Set to a readonly text field | :host\n *\n * See [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.\n *\n * @fires {Event} input - Fired when the value is changed by the user: on every typing keystroke, and the value is cleared using the clear button.\n * @fires {Event} change - Fired when the user commits a value change.\n * @fires {CustomEvent} invalid-changed - Fired when the `invalid` property changes.\n * @fires {CustomEvent} value-changed - Fired when the `value` property changes.\n * @fires {CustomEvent} validated - Fired whenever the field is validated.\n *\n * @customElement\n * @extends HTMLElement\n * @mixes ElementMixin\n * @mixes ThemableMixin\n * @mixes TextFieldMixin\n */\nexport class TextField extends TextFieldMixin(ThemableMixin(ElementMixin(PolymerElement))) {\n static get is() {\n return 'vaadin-text-field';\n }\n\n static get template() {\n return html`\n <style>\n [part='input-field'] {\n flex-grow: 0;\n }\n </style>\n\n <div class=\"vaadin-field-container\">\n <div part=\"label\">\n <slot name=\"label\"></slot>\n <span part=\"required-indicator\" aria-hidden=\"true\" on-click=\"focus\"></span>\n </div>\n\n <vaadin-input-container\n part=\"input-field\"\n readonly=\"[[readonly]]\"\n disabled=\"[[disabled]]\"\n invalid=\"[[invalid]]\"\n theme$=\"[[_theme]]\"\n >\n <slot name=\"prefix\" slot=\"prefix\"></slot>\n <slot name=\"input\"></slot>\n <slot name=\"suffix\" slot=\"suffix\"></slot>\n <div id=\"clearButton\" part=\"clear-button\" slot=\"suffix\" aria-hidden=\"true\"></div>\n </vaadin-input-container>\n\n <div part=\"helper-text\">\n <slot name=\"helper\"></slot>\n </div>\n\n <div part=\"error-message\">\n <slot name=\"error-message\"></slot>\n </div>\n </div>\n <slot name=\"tooltip\"></slot>\n `;\n }\n\n static get properties() {\n return {\n /**\n * Maximum number of characters (in Unicode code points) that the user can enter.\n */\n maxlength: {\n type: Number,\n },\n\n /**\n * Minimum number of characters (in Unicode code points) that the user can enter.\n */\n minlength: {\n type: Number,\n },\n };\n }\n\n /** @protected */\n ready() {\n super.ready();\n\n this._tooltipController = new TooltipController(this);\n this._tooltipController.setPosition('top');\n this._tooltipController.setAriaTarget(this.inputElement);\n this.addController(this._tooltipController);\n }\n}\n\ndefineCustomElement(TextField);\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 '@vaadin/input-container/theme/lumo/vaadin-input-container-styles.js';\nimport { inputFieldShared } from '@vaadin/vaadin-lumo-styles/mixins/input-field-shared.js';\nimport { registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';\n\nregisterStyles('vaadin-text-field', inputFieldShared, {\n moduleId: 'lumo-text-field-styles',\n});\n"],"names":["createBaseInputClass","args","componentName","RawLoaderRadial","baseSelector","constructor","super","this","attachShadow","mode","innerHTML","LoaderRadialClass","mappings","hostDisplay","property","spinnerSize","spinnerBorderWidth","spinnerBorderStyle","spinnerBorderRadius","spinnerQuadrant1Color","spinnerQuadrant2Color","spinnerQuadrant3Color","spinnerQuadrant4Color","animationDuration","animationTimingFunction","animationIterationCount","customElements","define","observedAttributes","forwardAttributes","BaseInputClass","concat","wrapperEle","querySelector","loaderContainer","renderInputs","inputs","Array","digits","keys","map","idx","join","from","querySelectorAll","initInputs","handleLoadingState","isLoading","setAttribute","removeAttribute","Number","parseInt","getAttribute","value","val","parseInputValue","getValidity","isRequired","valueMissing","pattern","RegExp","test","patternMismatch","init","addEventListener","e","isTrusted","focus","getInputIdx","inputEle","getNextInput","currInput","currentIdx","newIdx","Math","min","length","getPrevInput","max","fillDigits","charArr","currentInput","i","nextInput","input","split","forEach","debouncedHandleParseInput","trailing","setTimeout","inputType","onkeydown","key","setSelectionRange","includeAttrs","shadowRoot","handleFocusEventsDispatching","handleInputEventDispatching","attributeChangedCallback","attrName","oldValue","newValue","includes","INPUT_MASK_TEXT_PROP","INPUT_MASK_DISPLAY_PROP","INPUT_MASK_FALLBACK_PROP","focusElement","ele","sanitizeStr","str","replace","toggleMaskVisibility","style","setProperty","removeProperty","host","digitField","label","requiredIndicator","internalWrapper","focusedDigitField","errorMessage","selector","TextFieldClass","textVars","cssVarList","loaderVars","PasscodeClass","fontSize","hostWidth","hostDirection","fontFamily","labelTextColor","labelRequiredIndicator","errorMessageTextColor","errorMessageIcon","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","digitValueTextColor","inputValueTextColor","digitSize","digitPadding","inputHorizontalPadding","digitTextAlign","inputTextAlign","digitCaretTextColor","inputCaretTextColor","digitSpacing","digitOutlineColor","inputOutlineColor","digitOutlineWidth","inputOutlineWidth","focusedDigitFieldOutlineColor","overlayOpacity","proxyProps","superclass","template","document","createElement","baseElement","appendChild","content","cloneNode","inputElement","slots","wrappedEleName","inputHeight","excludeAttrsSync","observedAttrs","useProxyTargets","icon","renderCopyToClipboard","shouldRender","remove","iconInitConfig","title","iconCopiedConfig","Object","assign","slot","navigator","clipboard","writeText","onLabelClick","oldVal","newVal","attributeChangeCallback","_setType","removeEventListener","inputOutlineOffset","placeholder","inputField","inputMask","helperText","disabledPlaceholder","inputDisabled","inputIcon","externalInput","externalInputDisabled","externalPlaceholder","externalDisabledPlaceholder","labelFontSize","labelFontWeight","hostMinWidth","inputDirection","inputBackgroundColor","helperTextColor","inputBorderColor","inputBorderWidth","inputBorderStyle","inputBorderRadius","inputOutlineStyle","textAlign","inputPlaceholderColor","labelPosition","labelTopPosition","labelHorizontalPosition","inputTransformY","inputTransition","marginInlineStart","placeholderOpacity","inputVerticalAlignment","valueInputHeight","valueInputMarginBottom","inputIconOffset","inputIconSize","inputIconColor","inputTextSecurity","InputController","callback","initializer","node","type","id","defaultId","useUniqueId","InputFieldMixin","properties","autocomplete","String","autocorrect","autocapitalize","reflectToAttribute","delegateAttrs","__data","__dataValue","_inputElementChanged","console","warn","localName","_setFocused","focused","hasFocus","validate","_onInput","event","invalid","_valueChanged","undefined","TextFieldMixin","superClass","maxlength","minlength","constraints","clearElement","$","clearButton","ready","addController","_setInputElement","_setFocusElement","stateTarget","ariaTarget","_labelController","moduleId","TextField","is","_tooltipController","setPosition","setAriaTarget"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[2996],{10777(e,t,i){i.d(t,{T:()=>d,w:()=>g});var s=i(
|
|
1
|
+
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[2996],{10777(e,t,i){i.d(t,{T:()=>d,w:()=>g});var s=i(25964),r=i(79365),a=i(81365),o=i(9696),l=i(97810),n=i(88191);const d=(0,l.xE)("policy-validation"),c=["data","active-policies","overrides","data-password-policy-value-minlength","data-password-policy-value-passwordstrength","data-password-policy-actual-passwordstrength"],p=["label","value",...c];class h extends((0,a.q)({componentName:d,baseSelector:":host > div"})){#e;#t=[];#i;static get observedAttributes(){return p}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <div>\n <div class="label"></div>\n <ul></ul>\n </div>\n\t\t',(0,s.fz)("\n :host > div {\n width: 100%;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n .label {\n max-width: 100%;\n text-wrap: wrap;\n overflow-wrap: break-word;\n }\n .hide-label .label {\n display: none;\n }\n ul {\n display: flex;\n flex-direction: column;\n padding: 0;\n margin: 0;\n }\n ul, li {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n li::before {\n display: inline-block;\n width: 1em;\n text-align: center;\n }\n ",this),this.panel=this.shadowRoot.querySelector(":host > div"),this.label=this.shadowRoot.querySelector(".label"),this.list=this.shadowRoot.querySelector("ul")}attributeChangedCallback(e,t,i){if(super.attributeChangedCallback?.(e,t,i),t!==i){if("label"===e&&this.updateLabel(i),c.includes(e)){if("data"===e)try{this.availablePolicies=JSON.parse(i)}catch{console.error("Failed to set available policies")}if("active-policies"===e&&(this.#t=(i||"").split(",")),"data-password-policy-value-minlength"===e){const e=Number(i);!Number.isNaN(e)&&e>0&&(this.#i={...this.#i,minlength:{value:`${e}`}})}if("data-password-policy-value-passwordstrength"===e){const e=parseInt(i);!Number.isNaN(e)&&e>=0&&(this.#i={...this.#i,passwordstrength:{...this.#i?.passwordstrength,expected:e}})}if("data-password-policy-actual-passwordstrength"===e){const e=Number(i);!Number.isNaN(e)&&e>=0&&(this.#i={...this.#i,passwordstrength:{...this.#i?.passwordstrength,actual:e}})}}this.renderItems(this.#e,this.#t,this.#i)}}get availablePolicies(){return this.#e||[]}set availablePolicies(e){this.#e=e}get value(){return this.getAttribute("value")||""}getStrengthScore(){return this.value.length}compareValues(e,t,i){switch(e.toUpperCase()){case"GTE":return i>=t;case"GT":return i>t;case"LTE":return i<=t;case"LT":return i<t;case"EQ":return i===t;case"NEQ":return i!==t;default:throw new Error(`Invalid comparison type: ${e}`)}}validate(){let e=this.#e;return this.#i&&(e=this.#e.map(e=>{const t=this.#i[e.id];return t?{...e,data:t}:e})),this.#t.reduce((t,i)=>{const s=e.find(e=>e.id===i);if(!s)return t;const{pattern:r,message:a,data:o,compare:l}=s;if(!r&&!l||!a)return t;const d={message:(0,n.z)(a,o),id:i};if(r){const e=new RegExp((0,n.z)(r,o));d.valid=e.test(this.value)}else l&&(d.valid=this.compareValues(l,o?.expected??-1,o?.actual??-1));return t.push(d),t},[])}get isValid(){return!this.validate().some(({valid:e})=>!1===e)}getValidationItemTemplate({valid:e,message:t}){return`\n <li class="item" data-valid="${this.value?e:"none"}">\n <span class="message">${t}</span>\n </li>\n `}renderItems(e,t){e&&t.length&&(this.list.innerHTML=this.validate().map(this.getValidationItemTemplate.bind(this)).join(""))}updateLabel(e){e?(this.label.textContent=e,this.classList.remove("hide-label")):(this.classList.add("hide-label"),this.label.textContent="")}}const{host:u,item:b,symbolDefault:m,symbolSuccess:v,symbolError:y}={host:{selector:()=>":host > div"},item:{selector:()=>".item"},symbolDefault:{selector:()=>'.item[data-valid="none"]::before'},symbolSuccess:{selector:()=>'.item[data-valid="true"]::before'},symbolError:{selector:()=>'.item[data-valid="false"]::before'}},g=(0,o.Zz)((0,r.RF)({componentNameOverride:(0,l.xE)("input-wrapper")}),(0,r.RF)({mappings:{hostDirection:{selector:()=>":host",property:"direction"},fontSize:{},fontFamily:{},padding:{},borderWidth:{...u,property:"border-width"},borderStyle:{...u,property:"border-style"},borderColor:{...u,property:"border-color"},borderRadius:{...u,property:"border-radius"},backgroundColor:{...u,property:"background-color"},textColor:{property:"color"},labelMargin:{...u,property:"gap"},itemsSpacing:{...b,property:"line-height"},itemSymbolSuccessColor:{...v,property:"color"},itemSymbolErrorColor:{...y,property:"color"},itemSymbolDefault:{...m,property:"content"},itemSymbolSuccess:{...v,property:"content"},itemSymbolError:{...y,property:"content"}}}),r.VO,r.tQ)(h)},88191(e,t,i){i.d(t,{z:()=>s});const s=(e,t)=>e.replace(/{{(\w+)+}}/g,(e,i)=>t?.[i]||e)},26782(e,t,i){i.r(t),i.d(t,{PolicyValidationClass:()=>s.w,componentName:()=>s.T});var s=i(10777);customElements.define(s.T,s.w)}}]);
|
|
2
2
|
//# sourceMappingURL=descope-policy-validation-index-js.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descope-policy-validation-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/./src/components/descope-policy-validation/PolicyValidationClass.js","webpack://@descope/web-components-ui/./src/components/descope-policy-validation/helpers.js","webpack://@descope/web-components-ui/./src/components/descope-policy-validation/index.js"],"sourcesContent":["// eslint-disable-next-line max-classes-per-file\nimport { createStyleMixin, draggableMixin, componentNameValidationMixin } from '../../mixins';\nimport { createBaseClass } from '../../baseClasses/createBaseClass';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\nimport { interpolateString } from './helpers';\nimport { injectStyle } from '@descope-ui/common/components-helpers';\n\nexport const componentName = getComponentName('policy-validation');\n\nconst overrideAttrs = [\n 'data-password-policy-value-minlength',\n 'data-password-policy-value-passwordstrength',\n 'data-password-policy-actual-passwordstrength',\n];\nconst dataAttrs = ['data', 'active-policies', 'overrides', ...overrideAttrs];\nconst policyAttrs = ['label', 'value', ...dataAttrs];\n\nclass RawPolicyValidation extends createBaseClass({ componentName, baseSelector: ':host > div' }) {\n #availablePolicies;\n\n #activePolicies = [];\n\n #overrides;\n\n static get observedAttributes() {\n return policyAttrs;\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <div class=\"label\"></div>\n <ul></ul>\n </div>\n\t\t`;\n\n injectStyle(\n `\n :host > div {\n width: 100%;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n .label {\n max-width: 100%;\n text-wrap: wrap;\n overflow-wrap: break-word;\n }\n .hide-label .label {\n display: none;\n }\n ul {\n display: flex;\n flex-direction: column;\n padding: 0;\n margin: 0;\n }\n ul, li {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n li::before {\n display: inline-block;\n width: 1em;\n text-align: center;\n }\n `,\n this\n );\n\n this.panel = this.shadowRoot.querySelector(':host > div');\n this.label = this.shadowRoot.querySelector('.label');\n this.list = this.shadowRoot.querySelector('ul');\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n if (oldValue !== newValue) {\n if (attrName === 'label') {\n this.updateLabel(newValue);\n }\n\n // we're don't know the order in which the attributes are forwarded, so we're trying to render every time\n // once `data` and `active-policies` are populated, the render will be executed.\n // once the `overrides` object is updated, we want to re-render the panel.\n if (dataAttrs.includes(attrName)) {\n if (attrName === 'data') {\n try {\n this.availablePolicies = JSON.parse(newValue);\n } catch {\n // eslint-disable-next-line no-console\n console.error('Failed to set available policies');\n }\n }\n if (attrName === 'active-policies') {\n this.#activePolicies = (newValue || '').split(',');\n }\n\n if (attrName === 'data-password-policy-value-minlength') {\n const ln = Number(newValue);\n if (!Number.isNaN(ln) && ln > 0) {\n this.#overrides = { ...this.#overrides, minlength: { value: `${ln}` } };\n }\n }\n\n if (attrName === 'data-password-policy-value-passwordstrength') {\n const passwordStrength = parseInt(newValue);\n if (!Number.isNaN(passwordStrength) && passwordStrength >= 0) {\n this.#overrides = {\n ...this.#overrides,\n passwordstrength: {\n ...this.#overrides?.passwordstrength,\n expected: passwordStrength,\n },\n };\n }\n }\n\n if (attrName === 'data-password-policy-actual-passwordstrength') {\n const ln = Number(newValue);\n if (!Number.isNaN(ln) && ln >= 0) {\n this.#overrides = {\n ...this.#overrides,\n passwordstrength: { ...this.#overrides?.passwordstrength, actual: ln },\n };\n }\n }\n }\n\n this.renderItems(this.#availablePolicies, this.#activePolicies, this.#overrides);\n }\n }\n\n get availablePolicies() {\n return this.#availablePolicies || [];\n }\n\n set availablePolicies(val) {\n this.#availablePolicies = val;\n }\n\n get value() {\n return this.getAttribute('value') || '';\n }\n\n getStrengthScore() {\n return this.value.length;\n }\n\n compareValues(comparison, expected, actual) {\n switch (comparison.toUpperCase()) {\n case 'GTE': // Greater than or equal to\n return actual >= expected;\n case 'GT': // Greater than\n return actual > expected;\n case 'LTE': // Less than or equal to\n return actual <= expected;\n case 'LT': // Less than\n return actual < expected;\n case 'EQ': // Equal to\n return actual === expected;\n case 'NEQ': // Not equal to\n return actual !== expected;\n default:\n throw new Error(`Invalid comparison type: ${comparison}`);\n }\n }\n\n validate() {\n let policies = this.#availablePolicies;\n\n if (this.#overrides) {\n policies = this.#availablePolicies.map((policy) => {\n const data = this.#overrides[policy.id];\n\n if (!data) return policy;\n\n const res = { ...policy, data };\n\n return res;\n });\n }\n\n return this.#activePolicies.reduce((results, id) => {\n const policy = policies.find((p) => p.id === id);\n\n if (!policy) {\n return results;\n }\n\n const { pattern, message, data, compare } = policy;\n\n if ((!pattern && !compare) || !message) {\n return results;\n }\n\n const validationResult = {\n message: interpolateString(message, data),\n id,\n };\n\n if (pattern) {\n const exp = new RegExp(interpolateString(pattern, data));\n validationResult.valid = exp.test(this.value);\n } else if (compare) {\n validationResult.valid = this.compareValues(\n compare,\n data?.expected ?? -1,\n data?.actual ?? -1\n );\n }\n\n results.push(validationResult);\n\n return results;\n }, []);\n }\n\n get isValid() {\n return !this.validate().some(({ valid }) => valid === false);\n }\n\n getValidationItemTemplate({ valid, message }) {\n const status = !this.value ? 'none' : valid;\n return `\n <li class=\"item\" data-valid=\"${status}\">\n <span class=\"message\">${message}</span>\n </li>\n `;\n }\n\n renderItems(availablePolicies, activePolicies) {\n if (!availablePolicies || !activePolicies.length) {\n return;\n }\n\n this.list.innerHTML = this.validate().map(this.getValidationItemTemplate.bind(this)).join('');\n }\n\n updateLabel(val) {\n if (!val) {\n this.classList.add('hide-label');\n this.label.textContent = '';\n } else {\n this.label.textContent = val;\n this.classList.remove('hide-label');\n }\n }\n}\n\nconst { host, item, symbolDefault, symbolSuccess, symbolError } = {\n host: { selector: () => ':host > div' },\n item: { selector: () => '.item' },\n symbolDefault: { selector: () => '.item[data-valid=\"none\"]::before' },\n symbolSuccess: { selector: () => '.item[data-valid=\"true\"]::before' },\n symbolError: { selector: () => '.item[data-valid=\"false\"]::before' },\n};\n\nexport const PolicyValidationClass = compose(\n createStyleMixin({ componentNameOverride: getComponentName('input-wrapper') }),\n createStyleMixin({\n mappings: {\n hostDirection: { selector: () => ':host', property: 'direction' },\n fontSize: {},\n fontFamily: {},\n padding: {},\n borderWidth: { ...host, property: 'border-width' },\n borderStyle: { ...host, property: 'border-style' },\n borderColor: { ...host, property: 'border-color' },\n borderRadius: { ...host, property: 'border-radius' },\n backgroundColor: { ...host, property: 'background-color' },\n textColor: { property: 'color' },\n labelMargin: { ...host, property: 'gap' },\n itemsSpacing: { ...item, property: 'line-height' },\n itemSymbolSuccessColor: { ...symbolSuccess, property: 'color' },\n itemSymbolErrorColor: { ...symbolError, property: 'color' },\n itemSymbolDefault: { ...symbolDefault, property: 'content' },\n itemSymbolSuccess: { ...symbolSuccess, property: 'content' },\n itemSymbolError: { ...symbolError, property: 'content' },\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawPolicyValidation);\n","export const interpolateString = (template, values) =>\n template.replace(/{{(\\w+)+}}/g, (match, key) => values?.[key] || match);\n","import { componentName, PolicyValidationClass } from './PolicyValidationClass';\n\ncustomElements.define(componentName, PolicyValidationClass);\n\nexport { PolicyValidationClass, componentName };\n"],"names":["componentName","dataAttrs","policyAttrs","RawPolicyValidation","baseSelector","observedAttributes","constructor","super","this","attachShadow","mode","innerHTML","panel","shadowRoot","querySelector","label","list","attributeChangedCallback","attrName","oldValue","newValue","updateLabel","includes","availablePolicies","JSON","parse","console","error","split","ln","Number","isNaN","minlength","value","passwordStrength","parseInt","passwordstrength","expected","actual","renderItems","val","getAttribute","getStrengthScore","length","compareValues","comparison","toUpperCase","Error","validate","policies","map","policy","data","id","reduce","results","find","p","pattern","message","compare","validationResult","exp","RegExp","valid","test","push","isValid","some","getValidationItemTemplate","activePolicies","bind","join","textContent","classList","remove","add","host","item","symbolDefault","symbolSuccess","symbolError","selector","PolicyValidationClass","componentNameOverride","mappings","hostDirection","property","fontSize","fontFamily","padding","borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","textColor","labelMargin","itemsSpacing","itemSymbolSuccessColor","itemSymbolErrorColor","itemSymbolDefault","itemSymbolSuccess","itemSymbolError","interpolateString","template","values","replace","match","key","customElements","define"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"descope-policy-validation-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/./src/components/descope-policy-validation/PolicyValidationClass.js","webpack://@descope/web-components-ui/./src/components/descope-policy-validation/helpers.js","webpack://@descope/web-components-ui/./src/components/descope-policy-validation/index.js"],"sourcesContent":["import { injectStyle } from '@descope-ui/common/components-helpers';\nimport { createStyleMixin, draggableMixin, componentNameValidationMixin } from '../../mixins';\nimport { createBaseClass } from '../../baseClasses/createBaseClass';\nimport { compose } from '../../helpers';\nimport { getComponentName } from '../../helpers/componentHelpers';\nimport { interpolateString } from './helpers';\n\nexport const componentName = getComponentName('policy-validation');\n\nconst overrideAttrs = [\n 'data-password-policy-value-minlength',\n 'data-password-policy-value-passwordstrength',\n 'data-password-policy-actual-passwordstrength',\n];\nconst dataAttrs = ['data', 'active-policies', 'overrides', ...overrideAttrs];\nconst policyAttrs = ['label', 'value', ...dataAttrs];\n\nclass RawPolicyValidation extends createBaseClass({ componentName, baseSelector: ':host > div' }) {\n #availablePolicies;\n\n #activePolicies = [];\n\n #overrides;\n\n static get observedAttributes() {\n return policyAttrs;\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <div class=\"label\"></div>\n <ul></ul>\n </div>\n\t\t`;\n\n injectStyle(\n `\n :host > div {\n width: 100%;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n .label {\n max-width: 100%;\n text-wrap: wrap;\n overflow-wrap: break-word;\n }\n .hide-label .label {\n display: none;\n }\n ul {\n display: flex;\n flex-direction: column;\n padding: 0;\n margin: 0;\n }\n ul, li {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n li::before {\n display: inline-block;\n width: 1em;\n text-align: center;\n }\n `,\n this\n );\n\n this.panel = this.shadowRoot.querySelector(':host > div');\n this.label = this.shadowRoot.querySelector('.label');\n this.list = this.shadowRoot.querySelector('ul');\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n if (oldValue !== newValue) {\n if (attrName === 'label') {\n this.updateLabel(newValue);\n }\n\n // we're don't know the order in which the attributes are forwarded, so we're trying to render every time\n // once `data` and `active-policies` are populated, the render will be executed.\n // once the `overrides` object is updated, we want to re-render the panel.\n if (dataAttrs.includes(attrName)) {\n if (attrName === 'data') {\n try {\n this.availablePolicies = JSON.parse(newValue);\n } catch {\n // eslint-disable-next-line no-console\n console.error('Failed to set available policies');\n }\n }\n if (attrName === 'active-policies') {\n this.#activePolicies = (newValue || '').split(',');\n }\n\n if (attrName === 'data-password-policy-value-minlength') {\n const ln = Number(newValue);\n if (!Number.isNaN(ln) && ln > 0) {\n this.#overrides = { ...this.#overrides, minlength: { value: `${ln}` } };\n }\n }\n\n if (attrName === 'data-password-policy-value-passwordstrength') {\n const passwordStrength = parseInt(newValue);\n if (!Number.isNaN(passwordStrength) && passwordStrength >= 0) {\n this.#overrides = {\n ...this.#overrides,\n passwordstrength: {\n ...this.#overrides?.passwordstrength,\n expected: passwordStrength,\n },\n };\n }\n }\n\n if (attrName === 'data-password-policy-actual-passwordstrength') {\n const ln = Number(newValue);\n if (!Number.isNaN(ln) && ln >= 0) {\n this.#overrides = {\n ...this.#overrides,\n passwordstrength: { ...this.#overrides?.passwordstrength, actual: ln },\n };\n }\n }\n }\n\n this.renderItems(this.#availablePolicies, this.#activePolicies, this.#overrides);\n }\n }\n\n get availablePolicies() {\n return this.#availablePolicies || [];\n }\n\n set availablePolicies(val) {\n this.#availablePolicies = val;\n }\n\n get value() {\n return this.getAttribute('value') || '';\n }\n\n getStrengthScore() {\n return this.value.length;\n }\n\n compareValues(comparison, expected, actual) {\n switch (comparison.toUpperCase()) {\n case 'GTE': // Greater than or equal to\n return actual >= expected;\n case 'GT': // Greater than\n return actual > expected;\n case 'LTE': // Less than or equal to\n return actual <= expected;\n case 'LT': // Less than\n return actual < expected;\n case 'EQ': // Equal to\n return actual === expected;\n case 'NEQ': // Not equal to\n return actual !== expected;\n default:\n throw new Error(`Invalid comparison type: ${comparison}`);\n }\n }\n\n validate() {\n let policies = this.#availablePolicies;\n\n if (this.#overrides) {\n policies = this.#availablePolicies.map((policy) => {\n const data = this.#overrides[policy.id];\n\n if (!data) return policy;\n\n const res = { ...policy, data };\n\n return res;\n });\n }\n\n return this.#activePolicies.reduce((results, id) => {\n const policy = policies.find((p) => p.id === id);\n\n if (!policy) {\n return results;\n }\n\n const { pattern, message, data, compare } = policy;\n\n if ((!pattern && !compare) || !message) {\n return results;\n }\n\n const validationResult = {\n message: interpolateString(message, data),\n id,\n };\n\n if (pattern) {\n const exp = new RegExp(interpolateString(pattern, data));\n validationResult.valid = exp.test(this.value);\n } else if (compare) {\n validationResult.valid = this.compareValues(\n compare,\n data?.expected ?? -1,\n data?.actual ?? -1\n );\n }\n\n results.push(validationResult);\n\n return results;\n }, []);\n }\n\n get isValid() {\n return !this.validate().some(({ valid }) => valid === false);\n }\n\n getValidationItemTemplate({ valid, message }) {\n const status = !this.value ? 'none' : valid;\n return `\n <li class=\"item\" data-valid=\"${status}\">\n <span class=\"message\">${message}</span>\n </li>\n `;\n }\n\n renderItems(availablePolicies, activePolicies) {\n if (!availablePolicies || !activePolicies.length) {\n return;\n }\n\n this.list.innerHTML = this.validate().map(this.getValidationItemTemplate.bind(this)).join('');\n }\n\n updateLabel(val) {\n if (!val) {\n this.classList.add('hide-label');\n this.label.textContent = '';\n } else {\n this.label.textContent = val;\n this.classList.remove('hide-label');\n }\n }\n}\n\nconst { host, item, symbolDefault, symbolSuccess, symbolError } = {\n host: { selector: () => ':host > div' },\n item: { selector: () => '.item' },\n symbolDefault: { selector: () => '.item[data-valid=\"none\"]::before' },\n symbolSuccess: { selector: () => '.item[data-valid=\"true\"]::before' },\n symbolError: { selector: () => '.item[data-valid=\"false\"]::before' },\n};\n\nexport const PolicyValidationClass = compose(\n createStyleMixin({ componentNameOverride: getComponentName('input-wrapper') }),\n createStyleMixin({\n mappings: {\n hostDirection: { selector: () => ':host', property: 'direction' },\n fontSize: {},\n fontFamily: {},\n padding: {},\n borderWidth: { ...host, property: 'border-width' },\n borderStyle: { ...host, property: 'border-style' },\n borderColor: { ...host, property: 'border-color' },\n borderRadius: { ...host, property: 'border-radius' },\n backgroundColor: { ...host, property: 'background-color' },\n textColor: { property: 'color' },\n labelMargin: { ...host, property: 'gap' },\n itemsSpacing: { ...item, property: 'line-height' },\n itemSymbolSuccessColor: { ...symbolSuccess, property: 'color' },\n itemSymbolErrorColor: { ...symbolError, property: 'color' },\n itemSymbolDefault: { ...symbolDefault, property: 'content' },\n itemSymbolSuccess: { ...symbolSuccess, property: 'content' },\n itemSymbolError: { ...symbolError, property: 'content' },\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawPolicyValidation);\n","export const interpolateString = (template, values) =>\n template.replace(/{{(\\w+)+}}/g, (match, key) => values?.[key] || match);\n","import { componentName, PolicyValidationClass } from './PolicyValidationClass';\n\ncustomElements.define(componentName, PolicyValidationClass);\n\nexport { PolicyValidationClass, componentName };\n"],"names":["componentName","dataAttrs","policyAttrs","RawPolicyValidation","baseSelector","observedAttributes","constructor","super","this","attachShadow","mode","innerHTML","panel","shadowRoot","querySelector","label","list","attributeChangedCallback","attrName","oldValue","newValue","updateLabel","includes","availablePolicies","JSON","parse","console","error","split","ln","Number","isNaN","minlength","value","passwordStrength","parseInt","passwordstrength","expected","actual","renderItems","val","getAttribute","getStrengthScore","length","compareValues","comparison","toUpperCase","Error","validate","policies","map","policy","data","id","reduce","results","find","p","pattern","message","compare","validationResult","exp","RegExp","valid","test","push","isValid","some","getValidationItemTemplate","activePolicies","bind","join","textContent","classList","remove","add","host","item","symbolDefault","symbolSuccess","symbolError","selector","PolicyValidationClass","componentNameOverride","mappings","hostDirection","property","fontSize","fontFamily","padding","borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","textColor","labelMargin","itemsSpacing","itemSymbolSuccessColor","itemSymbolErrorColor","itemSymbolDefault","itemSymbolSuccess","itemSymbolError","interpolateString","template","values","replace","match","key","customElements","define"],"sourceRoot":""}
|