@descope/web-components-ui 3.26.3 → 3.26.5
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 +9 -5
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +10 -6
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/1050.js +1 -1
- package/dist/umd/1050.js.map +1 -1
- package/dist/umd/3241.js +1 -1
- package/dist/umd/5414.js +1 -1
- package/dist/umd/5414.js.LICENSE.txt +3 -1
- package/dist/umd/5414.js.map +1 -1
- package/dist/umd/7668.js +2 -0
- package/dist/umd/7668.js.map +1 -0
- package/dist/umd/DescopeDev.js +2 -1
- package/dist/umd/DescopeDev.js.LICENSE.txt +3 -0
- package/dist/umd/DescopeDev.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-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-password-index-js.js +1 -1
- package/dist/umd/descope-password-index-js.js.map +1 -1
- package/dist/umd/descope-password-strength.js +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +46 -45
- package/src/components/descope-date-field/DateFieldClass.js +1 -1
- package/src/components/descope-password/PasswordClass.js +2 -0
- package/dist/umd/6558.js +0 -2
- package/dist/umd/6558.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[9257],{79981(e,t,i){i.r(t),i.d(t,{DateFieldClass:()=>P,componentName:()=>m}),i(20428),i(88350),i(64014);var s=i(25964),n=i(28027),r=i(3393),a=i(79365),o=i(97810),l=i(9696),h=i(49224),u=i(77421),d=i(80071),c=i(64101);class p{#e=Object.freeze([]);constructor({id:e,min:t,max:i,placeholder:s},n){this.id=e,this.min=t,this.max=i,this.placeholder=s,this.onChange=n}get data(){return this.#e}set data(e){this.#e=Object.freeze(e),this.onChange?.()}get#t(){return this.data.length?this.numberValue:0}get numberValue(){return Number(this.stringValue)}get stringValue(){return(this.data.join("")||this.placeholder).padStart(this.length,"0")}get isFull(){return 10*this.numberValue>this.max||this.data.length===this.length}get isEmpty(){return this.stringValue===this.placeholder}get length(){return this.max.toString().length}set(e){this.data=e.toString().split("")}add(e){let{data:t}=this;return t=[...t,e],Number(t.join(""))>this.max?t=[e]:this.length<t.length&&(t=t.slice(1,t.length)),this.data=t,e}del(){this.data.filter(e=>"0"!==e).filter(Boolean).length?this.data=this.data.slice(0,this.data.length-1):this.data=[]}clear(){this.data=[]}inc(e){this.replaceValue(this.#t<this.max?Math.max(this.#t+(e||1),this.min):this.min)}dec(e){this.replaceValue(this.#t>this.min?Math.min(this.#t-(e||1),this.max):this.max)}isInRange(e){return e>=this.min&&e<=this.max}replaceValue(e){this.isInRange(e)&&(this.data=e.toString().padStart(this.length,0).split(""))}setMin(e){this.min=Number(e)}setMax(e){this.max=Number(e)}}var g=i(15177);const m=(0,o.xE)("date-field"),v=(0,r.y)({componentName:m,baseSelector:"vaadin-popover"}),y=["format","opened","initial-value","readonly","disable-calendar","utc-time"],C=["years-range","calendar-months","calendar-weekdays"],b=[...y,...C],E=n.w.cssVarList,{host:w,input:V,inputEleRTL:I,toggleButton:S,overlay:f,backdrop:x,errorMessage:T}={host:{selector:()=>":host"},input:{selector:()=>"descope-text-field"},inputEleRTL:{selector:()=>':host([st-host-direction="rtl"]) descope-text-field'},toggleButton:{selector:()=>".toggle-calendar"},overlay:{selector:"vaadin-popover-overlay::part(overlay)"},backdrop:{selector:"vaadin-popover-overlay::part(backdrop)"}},P=(0,l.Zz)((0,a.RF)({componentNameOverride:(0,o.xE)("input-wrapper")}),(0,a.RF)({mappings:{iconMargin:{...S,property:"margin-inline-end"},hostWidth:{...w,property:"width"},hostDirection:{...w,property:"direction"},textAlign:{...V,property:"text-align"},rtlInputDirection:{...I,property:E.inputDirection},rtlInputAlignment:{...I,property:E.inputTextAlign},overlayGap:{property:()=>P.cssVarList.overlayGap},overlayBackgroundColor:{property:()=>P.cssVarList.overlayBackgroundColor},overlayPadding:{property:()=>P.cssVarList.overlayPadding},overlayBoxShadow:{property:()=>P.overlayBoxShadow},overlayOutlineWidth:{property:()=>P.cssVarList.overlayOutlineWidth},overlayOutlineColor:{property:()=>P.cssVarList.overlayOutlineColor},overlayOutlineStyle:{property:()=>P.cssVarList.overlayOutlineStyle},errorMessageIcon:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIcon},errorMessageIconSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconSize},errorMessageIconPadding:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPadding},errorMessageIconRepeat:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconRepeat},errorMessageIconPosition:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPosition},errorMessageFontSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontSize},labelFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.labelFontWeight},inputValueFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputValueFontWeight},inputPlaceholderFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputPlaceholderFontWeight},helperTextFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.helperTextFontWeight},errorMessageFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontWeight}}}),(0,a.mA)({name:"overlay",selector:"",mappings:{marginTop:{...f,property:"margin-top"},backgroundColor:{...f},backdropBackgroundColor:{...x,property:"background-color"},backdropPointerEvents:{...x,property:"pointer-events"},padding:{...f},boxShadow:{...f},outlineWidth:{...f},outlineColor:{...f},outlineStyle:{...f}}}),a.VO,a.tQ)(class extends v{epoch="";format=c.ui;selectedCounterIdx=0;updateCountersDisplay(){this.inputElement.value=this.countersValue}updateValue(){if(this.isCountersOutOfRange)this.resetEpoch();else{const e=u.F[this.format].getDate(this.inputElement.value);this.updateEpoch((0,h.xq)(e,this.isUtcTime))}}onDateCounterChange=()=>{this.updateCountersDisplay(),this.updateValue(),this.#i()};updateEpoch(e){this.epoch=(0,h.xq)(e,this.isUtcTime)}dateCounters=[new p(c.rR.MONTH,this.onDateCounterChange.bind(this)),new p(c.rR.DAY,this.onDateCounterChange.bind(this)),new p(c.rR.YEAR,this.onDateCounterChange.bind(this))];static get observedAttributes(){return[].concat(v.observedAttributes||[],b)}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML=`\n <div>\n <descope-text-field inputmode="numeric">\n <span slot="suffix" class="toggle-calendar">\n ${d.ki}\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\n </div>\n `,(0,s.fz)('\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host ::slotted {\n padding: 0;\n }\n\n .toggle-calendar {\n cursor: pointer;\n display: flex;\n align-self: center;\n z-index: 1;\n height: 100%;\n align-items: center;\n }\n\n :host([readonly="true"]) .toggle-calendar {\n pointer-events: none;\n }\n\n .hidden {\n display: none;\n }\n ',this),this.inputElement=this.shadowRoot.querySelector("descope-text-field"),this.popoverToggleButton=this.inputElement.querySelector(".toggle-calendar")}get validationTarget(){return this.inputElement}get opened(){return"true"===this.getAttribute("opened")}get displayValueEpoch(){const e=u.F[this.format].getDate(this.inputElement.value);return(0,h.mZ)(e?.getTime())?e.getTime():null}get sortedCounters(){return this.format.split(c.eT).map(e=>this.dateCounters.find(t=>t.placeholder===e))}get activeCounter(){return this.sortedCounters[this.selectedCounterIdx]}get countersValue(){return this.sortedCounters.map(e=>e.stringValue).join(c.eT)}get overlay(){return this.baseElement.shadowRoot?.querySelector("vaadin-popover-overlay")}get backdrop(){return this.overlay.shadowRoot?.querySelector("#backdrop")}get calendar(){return this.overlay?.querySelector("descope-calendar")}get isRTL(){const e=getComputedStyle(this.baseElement).getPropertyValue("direction");return e?"rtl"===e:"rtl"===this.getAttribute("st-host-direction")}get value(){return this.isInvalidDate()?"":this.epoch}set value(e){const t=parseInt(e,10);Number.isNaN(t)?(this.resetEpoch(),this.resetDateCounters(),this.clearInputEle()):(this.updateEpoch(t),this.updateDateCounters(new Date(t)))}resetEpoch(){this.epoch=""}get isCountersEmpty(){return this.dateCounters.every(e=>e.isEmpty)}get isCountersOutOfRange(){return this.dateCounters.some(e=>!e.isInRange(e.numberValue))}get disableCalendar(){return"true"===this.getAttribute("disable-calendar")}get isUtcTime(){return"true"===this.getAttribute("utc-time")}get isSelectAll(){const e=this.inputElement.baseElement.inputElement;return e.value.length===e.selectionStart+e.selectionEnd}reportValidity(){this.inputElement.reportValidity()}#i(){this.inputElement.baseElement.dispatchEvent(new Event("input",{bubbles:!0}))}updateInputDisplay(){this.inputElement.value=(0,h.jO)((0,g.N)(this.countersValue).getTime(),this.format)}init(){super.init?.(),this.updateFormatPattern(),this.initPopover(),this.onDateCounterChange(),this.initInputElement(),setTimeout(()=>{this.#s()},0)}initInputElement(){this.inputElement.getValidity=this.getValidity.bind(this),this.inputElement.baseElement.checkValidity=this.checkValidity.bind(this),this.popoverToggleButton.addEventListener("click",this.onPopoverToggle.bind(this)),this.inputElement.addEventListener("focus",this.onFocus.bind(this)),this.inputElement.addEventListener("blur",this.onBlur.bind(this)),this.inputElement.addEventListener("click",this.handleMouseCaretPositionChange.bind(this)),this.inputElement.addEventListener("keydown",this.handleKeyboard.bind(this)),this.inputElement.addEventListener("beforeinput",this.handleInput.bind(this)),this.inputElement.addEventListener("pointerdown",this.onPointerDown.bind(this)),this.inputElement.addEventListener("paste",this.onPaste.bind(this)),(0,o.EA)(this,this.inputElement,{includeAttrs:["label","label-type","placeholder","disabled","readonly","bordered","required","full-width","st-host-direction","pattern","bordered","data-errormessage-value-missing","data-errormessage-pattern-mismatch","data-errormessage-range-underflow","data-errormessage-range-overflow","st-error-message-icon","st-error-message-icon-size","st-error-message-icon-padding"]})}handleInput(e){e.preventDefault(),this.handleSelectAll(),e.data&&(0,h.Et)(e.data)?(this.parseDigits(e.data),this.updateCountersDisplay()):e.inputType&&this.handleNavKeys(e)}initPopover(){this.baseElement.trigger=["click"],this.baseElement.withBackdrop=!0,this.baseElement.renderer=this.#n.bind(this),this.baseElement.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation()})}handleSelectAll(){this.isSelectAll&&this.selectFirstCounter()}#r;#n(e){e.firstChild||(this.overlay.positionTarget=this.shadowRoot.querySelector(".toggle-calendar"),e.appendChild(this.#a()),(0,h.Xs)(this.baseElement),this.backdrop.addEventListener("click",this.closePopover.bind(this))),e.style.setProperty("visibility","hidden"),setTimeout(()=>{this.#o(e),e.style.setProperty("visibility","visible"),this.updateCalendarView(e)},100)}#o(){const e=this.shadowRoot.querySelector("vaadin-popover").shadowRoot;this.#r?.replaceSync("vaadin-popover-overlay::part(overlay) { transform: none; }");const t=document.body.getBoundingClientRect(),i=this.getBoundingClientRect(),n=this.calendar.getBoundingClientRect(),r=this.isRTL?"right":"left",a=i[r]-n[r],o=n.left,l=t.width-n.right;let h;h=a>0?Math.min(a,l):-1*Math.min(Math.abs(a),o);const u=`\n vaadin-popover-overlay::part(overlay) {\n transform: translateX(${h}px);\n }\n `;this.#r?this.#r.replaceSync(u):this.#r=(0,s.fz)(u,e)}#a(){const e=document.createElement("span");e.innerHTML="<descope-calendar></descope-calendar>";const t=e.querySelector("descope-calendar");return t.addEventListener("date-submit",this.onCalendarSubmit.bind(this)),t.addEventListener("cancel",this.closePopover.bind(this)),e}#s(){this.overlay._attachOverlay=()=>this.overlay.bringToFront(),this.overlay._detachOverlay=()=>{},this.overlay._enterModalState=()=>{}}onPopoverToggle(){this.opened?this.closePopover():this.openPopover()}openPopover(){this.disableCalendar||this.setAttribute("opened","true")}closePopover(){this.removeAttribute("opened"),this.inputElement.focus()}getCounterById(e){return this.dateCounters.find(t=>t.id===e)}onCalendarSubmit(){if(!this.isReadOnly){if(!this.calendar.value)return;const e=(0,g.N)(this.calendar.value);this.value=(0,h.xq)(e,this.isUtcTime),this.getCounterById("year").replaceValue(e.getFullYear()),this.getCounterById("month").replaceValue(e.getMonth()+1),this.getCounterById("day").replaceValue(e.getDate()),this.#i()}this.closePopover()}updateCalendarView(){const e=(0,h.mZ)((0,g.N)(this.inputElement.value||"").getTime())&&u.F[this.format].validate(this.inputElement.value);this.displayValueEpoch||e?this.calendar.setAttribute("initial-value",(0,h.jO)(this.displayValueEpoch||this.epoch,c.wJ)):(this.calendar.clearValue(),this.calendar.setAttribute("preview",(0,h.jO)((0,h.Ln)(),c.wJ))),(0,o.EA)(this,this.calendar,{includeAttrs:["st-host-direction","readonly","initial-month","initial-year","years-range","calendar-label-submit","calendar-label-cancel","calendar-months","calendar-weekdays","calendar-weekdays-short"]})}onPointerDown(e){setTimeout(()=>this.handleMouseCaretPositionChange(e),c.SZ)}onFocus(){this.isReadOnly||setTimeout(()=>this.resetDisplay())}resetDisplay(){this.inputElement.value||(this.inputElement.value=this.format),this.selectFirstCounter(),this.inputElement.setSelectionRange(0,this.sortedCounters[0].length)}onBlur(){this.opened||this.inputElement.value===this.format&&this.clearInputEle()}clearInputEle(){this.inputElement.value=""}onFormatUpdate(e){Object.keys(u.F).includes(e)&&(this.format=e,this.updateFormatPattern())}updateFormatPattern(){const e=this.getAttribute("format")||this.format||c.ui;this.setAttribute("type","date"),this.setAttribute("pattern",u.F[e].pattern)}parseDigits(e){this.activeCounter.add(e),this.activeCounter.isFull&&this.selectNextCounter(),this.setInputSelectionRange()}getCounterIdx(e){const[t,i]=this.sortedCounters.map(e=>e.length);return[e<=t,e>=t&&e<=t+i+1,e>=t+i+2].indexOf(!0)}setSelectedCounterByCaretPosition(e){this.selectedCounterIdx=this.getCounterIdx(e.target?.selectionStart||this.inputElement.selectionStart)}selectFirstCounter(){this.selectedCounterIdx=0}selectNextCounter(){this.selectedCounterIdx<this.dateCounters.length&&(this.selectedCounterIdx=Math.min(this.selectedCounterIdx+1,2))}selectPrevCounter(){this.selectedCounterIdx>0&&(this.selectedCounterIdx=Math.min(this.selectedCounterIdx-1,1))}setInputSelectionRange(){this.selectedCounterIdx<0||setTimeout(()=>{const e=this.sortedCounters.slice(0,this.selectedCounterIdx).reduce((e,t)=>e+t.length,this.selectedCounterIdx);this.inputElement.setSelectionRange(e,e+this.sortedCounters[this.selectedCounterIdx].length)})}resetDateCounters(){this.dateCounters.forEach(e=>e.clear())}updateDateCounters(e){this.dateCounters.forEach(t=>{switch(t.id){case c.rR.MONTH.id:t.set(this.isUtcTime?e.getUTCMonth()+1:e.getMonth()+1);break;case c.rR.YEAR.id:t.set(this.isUtcTime?e.getUTCFullYear():e.getFullYear());break;case c.rR.DAY.id:t.set(this.isUtcTime?e.getUTCDate():e.getDate())}})}handleKeyboard(e){e.metaKey||e.ctrlKey?"x"===e.key.toLowerCase()&&this.onCut(e):(this.handleSelectAll(),"ArrowUp"===e.key?this.activeCounter.inc():"ArrowDown"===e.key?this.activeCounter.dec():"ArrowRight"===e.key?this.selectNextCounter():"ArrowLeft"===e.key&&this.selectPrevCounter(),this.setInputSelectionRange())}handleNavKeys(e){this.isReadOnly||(this.opened&&this.closePopover(),this.activeCounter&&("deleteContentBackward"===e.inputType&&this.handleBackspace(),this.setInputSelectionRange()))}handleBackspace(){if(this.isSelectAll)return void this.resetToInitialState();const e=this.activeCounter;e.isEmpty?(this.selectPrevCounter(),this.setInputSelectionRange()):e.set(""),setTimeout(()=>{this.updateCountersDisplay(),this.setInputSelectionRange()})}handleMouseCaretPositionChange(e){this.opened||(e.preventDefault(),this.setSelectedCounterByCaretPosition(e),this.setInputSelectionRange())}onInitialValueChange(e){this.value||setTimeout(()=>{Number.isNaN(parseInt(e,10))||(this.value=Number(e))})}togglePopoverAccess(e){e?this.popoverToggleButton.classList.remove("hidden"):this.popoverToggleButton.classList.add("hidden")}attributeChangedCallback(e,t,i){super.attributeChangedCallback?.(e,t,i),t!==i&&("disable-calendar"===e&&this.togglePopoverAccess("true"!==i),y.includes(e)?(i&&"format"===e&&this.onFormatUpdate(i),"initial-value"===e&&this.onInitialValueChange(i)):C.includes(e)&&(i?this.calendar?.setAttribute(e,i):this.calendar?.removeAttribute(e)))}isInvalidDate(){const e=this.getCounterById("year"),t=e.numberValue>c.nr.year.max||e.numberValue<c.nr.year.min,i=Object.entries(this.getDateVals()).some(([e,t])=>{const i=this.getCounterById(e);return!t||i.numberValue!==t});return t||i}getValidity(){return this.isRequired&&this.isCountersEmpty?{valueMissing:!0}:this.isCountersOutOfRange||this.isInvalidDate()?{patternMismatch:!0}:{}}getDateVals(){const e={day:"",month:"",year:""};if(Number.isNaN(this.epoch))return e;try{const t=new Date(this.epoch);this.isUtcTime?(e.month=t.getUTCMonth()+1,e.day=t.getUTCDate(),e.year=t.getUTCFullYear()):(e.month=t.getMonth()+1,e.day=t.getDate(),e.year=t.getFullYear())}catch(e){}return e}resetToInitialState(){this.resetDateCounters(),this.selectFirstCounter(),this.resetDisplay()}onCut(e){e.preventDefault(),this.isSelectAll?(this.#l(this.countersValue),this.resetToInitialState()):(this.#l(this.activeCounter.stringValue),this.activeCounter.set("")),this.setInputSelectionRange()}#l(e){try{navigator.clipboard.writeText(e)}catch(e){console.error("Failed to copy date value:",e)}}onPaste(e){e.preventDefault();const t=(e.clipboardData||window.clipboardData).getData("Text"),i=(0,h.Rm)(t,this.format);if(i)this.value=(0,h.xq)(i,this.isUtcTime),this.onDateCounterChange(),setTimeout(()=>this.inputElement.setSelectionRange(0,this.inputElement.value.length));else{const e=Number(t);e&&this.activeCounter.min<=e&&this.activeCounter.max>=e&&(this.activeCounter.set(String(e)),setTimeout(()=>this.setInputSelectionRange()))}}});customElements.define(m,P)}}]);
|
|
1
|
+
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[9257],{79981(e,t,i){i.r(t),i.d(t,{DateFieldClass:()=>P,componentName:()=>m}),i(20428),i(88350),i(64014);var s=i(25964),n=i(28027),r=i(3393),a=i(79365),o=i(97810),l=i(9696),h=i(49224),u=i(77421),d=i(80071),c=i(64101);class p{#e=Object.freeze([]);constructor({id:e,min:t,max:i,placeholder:s},n){this.id=e,this.min=t,this.max=i,this.placeholder=s,this.onChange=n}get data(){return this.#e}set data(e){this.#e=Object.freeze(e),this.onChange?.()}get#t(){return this.data.length?this.numberValue:0}get numberValue(){return Number(this.stringValue)}get stringValue(){return(this.data.join("")||this.placeholder).padStart(this.length,"0")}get isFull(){return 10*this.numberValue>this.max||this.data.length===this.length}get isEmpty(){return this.stringValue===this.placeholder}get length(){return this.max.toString().length}set(e){this.data=e.toString().split("")}add(e){let{data:t}=this;return t=[...t,e],Number(t.join(""))>this.max?t=[e]:this.length<t.length&&(t=t.slice(1,t.length)),this.data=t,e}del(){this.data.filter(e=>"0"!==e).filter(Boolean).length?this.data=this.data.slice(0,this.data.length-1):this.data=[]}clear(){this.data=[]}inc(e){this.replaceValue(this.#t<this.max?Math.max(this.#t+(e||1),this.min):this.min)}dec(e){this.replaceValue(this.#t>this.min?Math.min(this.#t-(e||1),this.max):this.max)}isInRange(e){return e>=this.min&&e<=this.max}replaceValue(e){this.isInRange(e)&&(this.data=e.toString().padStart(this.length,0).split(""))}setMin(e){this.min=Number(e)}setMax(e){this.max=Number(e)}}var g=i(15177);const m=(0,o.xE)("date-field"),y=(0,r.y)({componentName:m,baseSelector:"vaadin-popover"}),v=["format","opened","initial-value","readonly","disable-calendar","utc-time"],C=["years-range","calendar-months","calendar-weekdays"],b=[...v,...C],E=n.w.cssVarList,{host:w,input:V,inputEleRTL:I,toggleButton:S,overlay:f,backdrop:x,errorMessage:T}={host:{selector:()=>":host"},input:{selector:()=>"descope-text-field"},inputEleRTL:{selector:()=>':host([st-host-direction="rtl"]) descope-text-field'},toggleButton:{selector:()=>".toggle-calendar"},overlay:{selector:"vaadin-popover-overlay::part(overlay)"},backdrop:{selector:"vaadin-popover-overlay::part(backdrop)"}},P=(0,l.Zz)((0,a.RF)({componentNameOverride:(0,o.xE)("input-wrapper")}),(0,a.RF)({mappings:{iconMargin:{...S,property:"margin-inline-end"},hostWidth:{...w,property:"width"},hostDirection:{...w,property:"direction"},textAlign:{...V,property:"text-align"},rtlInputDirection:{...I,property:E.inputDirection},rtlInputAlignment:{...I,property:E.inputTextAlign},overlayGap:{property:()=>P.cssVarList.overlayGap},overlayBackgroundColor:{property:()=>P.cssVarList.overlayBackgroundColor},overlayPadding:{property:()=>P.cssVarList.overlayPadding},overlayBoxShadow:{property:()=>P.overlayBoxShadow},overlayOutlineWidth:{property:()=>P.cssVarList.overlayOutlineWidth},overlayOutlineColor:{property:()=>P.cssVarList.overlayOutlineColor},overlayOutlineStyle:{property:()=>P.cssVarList.overlayOutlineStyle},errorMessageIcon:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIcon},errorMessageIconSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconSize},errorMessageIconPadding:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPadding},errorMessageIconRepeat:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconRepeat},errorMessageIconPosition:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageIconPosition},errorMessageFontSize:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontSize},labelFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.labelFontWeight},inputValueFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputValueFontWeight},inputPlaceholderFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.inputPlaceholderFontWeight},helperTextFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.helperTextFontWeight},errorMessageFontWeight:{selector:n.w.componentName,property:n.w.cssVarList.errorMessageFontWeight}}}),(0,a.mA)({name:"overlay",selector:"",mappings:{marginTop:{...f,property:"margin-top"},backgroundColor:{...f},backdropBackgroundColor:{...x,property:"background-color"},backdropPointerEvents:{...x,property:"pointer-events"},padding:{...f},boxShadow:{...f},outlineWidth:{...f},outlineColor:{...f},outlineStyle:{...f}}}),a.VO,a.tQ)(class extends y{epoch="";format=c.ui;selectedCounterIdx=0;updateCountersDisplay(){this.inputElement.value=this.countersValue}updateValue(){if(this.isCountersOutOfRange)this.resetEpoch();else{const e=u.F[this.format].getDate(this.inputElement.value);this.updateEpoch((0,h.xq)(e,this.isUtcTime))}}onDateCounterChange=()=>{this.updateCountersDisplay(),this.updateValue(),this.#i()};updateEpoch(e){this.epoch=(0,h.xq)(e,this.isUtcTime)}dateCounters=[new p(c.rR.MONTH,this.onDateCounterChange.bind(this)),new p(c.rR.DAY,this.onDateCounterChange.bind(this)),new p(c.rR.YEAR,this.onDateCounterChange.bind(this))];static get observedAttributes(){return[].concat(y.observedAttributes||[],b)}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML=`\n <div>\n <descope-text-field inputmode="numeric">\n <span slot="suffix" class="toggle-calendar">\n ${d.ki}\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\n </div>\n `,(0,s.fz)('\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host ::slotted {\n padding: 0;\n }\n\n .toggle-calendar {\n cursor: pointer;\n display: flex;\n align-self: center;\n z-index: 1;\n height: 100%;\n align-items: center;\n }\n\n :host([readonly="true"]) .toggle-calendar {\n pointer-events: none;\n }\n\n .hidden {\n display: none;\n }\n ',this),this.inputElement=this.shadowRoot.querySelector("descope-text-field"),this.popoverToggleButton=this.inputElement.querySelector(".toggle-calendar")}get validationTarget(){return this.inputElement}get opened(){return"true"===this.getAttribute("opened")}get displayValueEpoch(){const e=u.F[this.format].getDate(this.inputElement.value);return(0,h.mZ)(e?.getTime())?e.getTime():null}get sortedCounters(){return this.format.split(c.eT).map(e=>this.dateCounters.find(t=>t.placeholder===e))}get activeCounter(){return this.sortedCounters[this.selectedCounterIdx]}get countersValue(){return this.sortedCounters.map(e=>e.stringValue).join(c.eT)}get overlay(){return this.baseElement.shadowRoot?.querySelector("vaadin-popover-overlay")}get backdrop(){return this.overlay.shadowRoot?.querySelector("#backdrop")}get calendar(){return this.overlay?.querySelector("descope-calendar")}get isRTL(){const e=getComputedStyle(this.baseElement).getPropertyValue("direction");return e?"rtl"===e:"rtl"===this.getAttribute("st-host-direction")}get value(){return this.isInvalidDate()?"":this.epoch}set value(e){const t=parseInt(e,10);Number.isNaN(t)?(this.resetEpoch(),this.resetDateCounters(),this.clearInputEle()):(this.updateEpoch(t),this.updateDateCounters(new Date(t)))}resetEpoch(){this.epoch=""}get isCountersEmpty(){return this.dateCounters.every(e=>e.isEmpty)}get isCountersOutOfRange(){return this.dateCounters.some(e=>!e.isInRange(e.numberValue))}get disableCalendar(){return"true"===this.getAttribute("disable-calendar")}get isUtcTime(){return"true"===this.getAttribute("utc-time")}get isSelectAll(){const e=this.inputElement.baseElement.inputElement;return e.value.length===e.selectionStart+e.selectionEnd}reportValidity(){this.inputElement.reportValidity()}#i(){this.inputElement.baseElement.dispatchEvent(new Event("input",{bubbles:!0}))}updateInputDisplay(){this.inputElement.value=(0,h.jO)((0,g.N)(this.countersValue).getTime(),this.format)}init(){super.init?.(),this.updateFormatPattern(),this.initPopover(),this.onDateCounterChange(),this.initInputElement(),setTimeout(()=>{this.#s()},0)}initInputElement(){this.inputElement.getValidity=this.getValidity.bind(this),this.inputElement.baseElement.checkValidity=this.checkValidity.bind(this),this.popoverToggleButton.addEventListener("click",this.onPopoverToggle.bind(this)),this.inputElement.addEventListener("focus",this.onFocus.bind(this)),this.inputElement.addEventListener("blur",this.onBlur.bind(this)),this.inputElement.addEventListener("click",this.handleMouseCaretPositionChange.bind(this)),this.inputElement.addEventListener("keydown",this.handleKeyboard.bind(this)),this.inputElement.addEventListener("beforeinput",this.handleInput.bind(this)),this.inputElement.addEventListener("pointerdown",this.onPointerDown.bind(this)),this.inputElement.addEventListener("paste",this.onPaste.bind(this)),(0,o.EA)(this,this.inputElement,{includeAttrs:["label","label-type","placeholder","disabled","readonly","bordered","required","full-width","st-host-direction","pattern","bordered","data-errormessage-value-missing","data-errormessage-pattern-mismatch","data-errormessage-range-underflow","data-errormessage-range-overflow","st-error-message-icon","st-error-message-icon-size","st-error-message-icon-padding"]})}handleInput(e){e.preventDefault(),this.handleSelectAll(),e.data&&(0,h.Et)(e.data)?(this.parseDigits(e.data),this.updateCountersDisplay()):e.inputType&&this.handleNavKeys(e)}initPopover(){this.baseElement.trigger=["click"],this.baseElement.withBackdrop=!0,this.baseElement.renderer=this.#n.bind(this),this.baseElement.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation()})}handleSelectAll(){this.isSelectAll&&this.selectFirstCounter()}#r;#n(e){e.firstChild||(this.overlay.positionTarget=this.shadowRoot.querySelector(".toggle-calendar"),e.appendChild(this.#a()),(0,h.Xs)(this.baseElement),this.backdrop.addEventListener("click",this.closePopover.bind(this))),e.style.setProperty("visibility","hidden"),setTimeout(()=>{this.#o(e),e.style.setProperty("visibility","visible"),this.updateCalendarView(e)},100)}#o(){const e=this.shadowRoot.querySelector("vaadin-popover").shadowRoot;this.#r?.replaceSync("vaadin-popover-overlay::part(overlay) { transform: none; }");const t=document.body.getBoundingClientRect(),i=this.getBoundingClientRect(),n=this.calendar.getBoundingClientRect(),r=this.isRTL?"right":"left",a=i[r]-n[r],o=n.left,l=t.width-n.right;let h;h=a>0?Math.min(a,l):-1*Math.min(Math.abs(a),o);const u=`\n vaadin-popover-overlay::part(overlay) {\n transform: translateX(${h}px);\n }\n `;this.#r?this.#r.replaceSync(u):this.#r=(0,s.fz)(u,e)}#a(){const e=document.createElement("span");e.innerHTML="<descope-calendar></descope-calendar>";const t=e.querySelector("descope-calendar");return t.addEventListener("date-submit",this.onCalendarSubmit.bind(this)),t.addEventListener("cancel",this.closePopover.bind(this)),e}#s(){this.overlay._attachOverlay=()=>this.overlay.bringToFront(),this.overlay._detachOverlay=()=>{},this.overlay._enterModalState=()=>{}}onPopoverToggle(){this.opened?this.closePopover():this.openPopover()}openPopover(){this.disableCalendar||this.setAttribute("opened","true")}closePopover(){this.removeAttribute("opened"),this.inputElement.focus()}getCounterById(e){return this.dateCounters.find(t=>t.id===e)}onCalendarSubmit(){if(!this.isReadOnly){if(!this.calendar.value)return;const e=(0,g.N)(this.calendar.value);this.value=(0,h.xq)(e,this.isUtcTime),this.getCounterById("year").replaceValue(e.getFullYear()),this.getCounterById("month").replaceValue(e.getMonth()+1),this.getCounterById("day").replaceValue(e.getDate()),this.#i()}this.closePopover()}updateCalendarView(){const e=(0,h.mZ)((0,g.N)(this.inputElement.value||"").getTime())&&u.F[this.format].validate(this.inputElement.value);this.displayValueEpoch||e?this.calendar.setAttribute("initial-value",(0,h.jO)(this.displayValueEpoch||this.epoch,c.wJ)):(this.calendar.clearValue(),this.calendar.setAttribute("preview",(0,h.jO)((0,h.Ln)(),c.wJ))),(0,o.EA)(this,this.calendar,{includeAttrs:["st-host-direction","readonly","initial-month","initial-year","years-range","calendar-label-submit","calendar-label-cancel","calendar-months","calendar-weekdays","calendar-weekdays-short"]})}onPointerDown(e){setTimeout(()=>this.handleMouseCaretPositionChange(e),c.SZ)}onFocus(){this.isReadOnly||setTimeout(()=>this.resetDisplay())}resetDisplay(){this.inputElement.value||(this.inputElement.value=this.format),this.selectFirstCounter(),this.inputElement.setSelectionRange(0,this.sortedCounters[0].length)}onBlur(){this.opened||this.inputElement.value===this.format&&this.clearInputEle()}clearInputEle(){this.inputElement.value=""}onFormatUpdate(e){Object.keys(u.F).includes(e)&&(this.format=e,this.updateFormatPattern())}updateFormatPattern(){const e=this.getAttribute("format")||this.format||c.ui;this.setAttribute("type","date"),this.setAttribute("pattern",u.F[e].pattern)}parseDigits(e){this.activeCounter.add(e),this.activeCounter.isFull&&this.selectNextCounter(),this.setInputSelectionRange()}getCounterIdx(e){const[t,i]=this.sortedCounters.map(e=>e.length);return[e<=t,e>=t&&e<=t+i+1,e>=t+i+2].indexOf(!0)}setSelectedCounterByCaretPosition(e){this.selectedCounterIdx=this.getCounterIdx(e.target?.selectionStart||this.inputElement.selectionStart)}selectFirstCounter(){this.selectedCounterIdx=0}selectNextCounter(){this.selectedCounterIdx<this.dateCounters.length&&(this.selectedCounterIdx=Math.min(this.selectedCounterIdx+1,2))}selectPrevCounter(){this.selectedCounterIdx>0&&(this.selectedCounterIdx=Math.min(this.selectedCounterIdx-1,1))}setInputSelectionRange(){this.selectedCounterIdx<0||setTimeout(()=>{const e=this.sortedCounters.slice(0,this.selectedCounterIdx).reduce((e,t)=>e+t.length,this.selectedCounterIdx);this.inputElement.setSelectionRange(e,e+this.sortedCounters[this.selectedCounterIdx].length)})}resetDateCounters(){this.dateCounters.forEach(e=>e.clear())}updateDateCounters(e){this.dateCounters.forEach(t=>{switch(t.id){case c.rR.MONTH.id:t.set(this.isUtcTime?e.getUTCMonth()+1:e.getMonth()+1);break;case c.rR.YEAR.id:t.set(this.isUtcTime?e.getUTCFullYear():e.getFullYear());break;case c.rR.DAY.id:t.set(this.isUtcTime?e.getUTCDate():e.getDate())}})}handleKeyboard(e){e.metaKey||e.ctrlKey?"x"===e.key.toLowerCase()&&this.onCut(e):(this.handleSelectAll(),"ArrowUp"===e.key?this.activeCounter.inc():"ArrowDown"===e.key?this.activeCounter.dec():"ArrowRight"===e.key?this.selectNextCounter():"ArrowLeft"===e.key&&this.selectPrevCounter(),this.setInputSelectionRange())}handleNavKeys(e){this.isReadOnly||(this.opened&&this.closePopover(),this.activeCounter&&("deleteContentBackward"===e.inputType&&this.handleBackspace(),this.setInputSelectionRange()))}handleBackspace(){if(this.isSelectAll)return void this.resetToInitialState();const e=this.activeCounter;e.isEmpty?(this.selectPrevCounter(),this.setInputSelectionRange()):e.set(""),setTimeout(()=>{this.updateCountersDisplay(),this.setInputSelectionRange()})}handleMouseCaretPositionChange(e){this.opened||(e.preventDefault(),this.setSelectedCounterByCaretPosition(e),this.setInputSelectionRange())}onInitialValueChange(e){this.value||setTimeout(()=>{Number.isNaN(parseInt(e,10))||(this.value=Number(e))})}togglePopoverAccess(e){e?this.popoverToggleButton.classList.remove("hidden"):this.popoverToggleButton.classList.add("hidden")}attributeChangedCallback(e,t,i){super.attributeChangedCallback?.(e,t,i),t!==i&&("disable-calendar"===e&&this.togglePopoverAccess("true"!==i),v.includes(e)?(i&&"format"===e&&this.onFormatUpdate(i),"initial-value"===e&&this.onInitialValueChange(i)):C.includes(e)&&(i?this.calendar?.setAttribute(e,i):this.calendar?.removeAttribute(e)))}isInvalidDate(){const e=this.getCounterById("year"),t=e.numberValue>c.nr.year.max||e.numberValue<c.nr.year.min,i=Object.entries(this.getDateVals()).some(([e,t])=>{const i=this.getCounterById(e);return!t||i.numberValue!==t});return t||i}getValidity(){return this.isRequired&&this.isCountersEmpty?{valueMissing:!0}:this.isCountersEmpty||!this.isCountersOutOfRange&&!this.isInvalidDate()?{}:{patternMismatch:!0}}getDateVals(){const e={day:"",month:"",year:""};if(Number.isNaN(this.epoch))return e;try{const t=new Date(this.epoch);this.isUtcTime?(e.month=t.getUTCMonth()+1,e.day=t.getUTCDate(),e.year=t.getUTCFullYear()):(e.month=t.getMonth()+1,e.day=t.getDate(),e.year=t.getFullYear())}catch(e){}return e}resetToInitialState(){this.resetDateCounters(),this.selectFirstCounter(),this.resetDisplay()}onCut(e){e.preventDefault(),this.isSelectAll?(this.#l(this.countersValue),this.resetToInitialState()):(this.#l(this.activeCounter.stringValue),this.activeCounter.set("")),this.setInputSelectionRange()}#l(e){try{navigator.clipboard.writeText(e)}catch(e){console.error("Failed to copy date value:",e)}}onPaste(e){e.preventDefault();const t=(e.clipboardData||window.clipboardData).getData("Text"),i=(0,h.Rm)(t,this.format);if(i)this.value=(0,h.xq)(i,this.isUtcTime),this.onDateCounterChange(),setTimeout(()=>this.inputElement.setSelectionRange(0,this.inputElement.value.length));else{const e=Number(t);e&&this.activeCounter.min<=e&&this.activeCounter.max>=e&&(this.activeCounter.set(String(e)),setTimeout(()=>this.setInputSelectionRange()))}}});customElements.define(m,P)}}]);
|
|
2
2
|
//# sourceMappingURL=descope-date-field-index-js.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descope-date-field-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/./src/components/descope-date-field/DateCounterClass.js","webpack://@descope/web-components-ui/./src/components/descope-date-field/DateFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-date-field/index.js"],"sourcesContent":["// DateCounterClass allows us to add several counters to the input, and use them seperately.\n// For examele, we have a DayCounter, MonthCounter and YearCounter, which can each separately navigate\n// between different ranges.\nexport class DateCounter {\n #data = Object.freeze([]);\n\n constructor({ id, min, max, placeholder }, onChange) {\n this.id = id;\n this.min = min;\n this.max = max;\n this.placeholder = placeholder;\n this.onChange = onChange;\n }\n\n get data() {\n return this.#data;\n }\n\n set data(val) {\n this.#data = Object.freeze(val);\n this.onChange?.();\n }\n\n get #initialNumValue() {\n return this.data.length ? this.numberValue : 0;\n }\n\n get numberValue() {\n return Number(this.stringValue);\n }\n\n get stringValue() {\n return (this.data.join('') || this.placeholder).padStart(this.length, '0');\n }\n\n get isFull() {\n return this.numberValue * 10 > this.max || this.data.length === this.length;\n }\n\n get isEmpty() {\n return this.stringValue === this.placeholder;\n }\n\n get length() {\n return this.max.toString().length;\n }\n\n set(val) {\n this.data = val.toString().split('');\n }\n\n add(num) {\n // use local var to avoid triggering onChange\n let { data } = this;\n\n data = [...data, num];\n\n // we need to re-evaluate the number value\n const numVal = Number(data.join(''));\n\n if (numVal > this.max) {\n data = [num];\n } else if (this.length < data.length) {\n data = data.slice(1, data.length);\n }\n\n this.data = data;\n\n return num;\n }\n\n del() {\n if (!this.data.filter((d) => d !== '0').filter(Boolean).length) {\n this.data = [];\n } else {\n this.data = this.data.slice(0, this.data.length - 1);\n }\n }\n\n clear() {\n this.data = [];\n }\n\n inc(gap) {\n this.replaceValue(\n this.#initialNumValue < this.max\n ? Math.max(this.#initialNumValue + (gap || 1), this.min)\n : this.min\n );\n }\n\n dec(gap) {\n this.replaceValue(\n this.#initialNumValue > this.min\n ? Math.min(this.#initialNumValue - (gap || 1), this.max)\n : this.max\n );\n }\n\n isInRange(val) {\n return val >= this.min && val <= this.max;\n }\n\n replaceValue(val) {\n if (this.isInRange(val)) {\n this.data = val.toString().padStart(this.length, 0).split('');\n }\n }\n\n setMin(val) {\n this.min = Number(val);\n }\n\n setMax(val) {\n this.max = Number(val);\n }\n}\n","import { injectStyle } from '@descope-ui/common/components-helpers';\nimport { TextFieldClass } from '@descope-ui/descope-text-field/class';\nimport { createBaseInputClass } from '../../baseClasses/createBaseInputClass';\nimport {\n createStyleMixin,\n draggableMixin,\n componentNameValidationMixin,\n portalMixin,\n} from '../../mixins';\nimport { forwardAttrs, getComponentName } from '../../helpers/componentHelpers';\nimport { compose } from '../../helpers';\nimport {\n isValidEpoch,\n formatEpoch,\n isNumber,\n getCurrentTime,\n overrideConstructedStylesheet,\n dateToEpoch,\n parseDateString,\n} from './helpers';\nimport { formats } from './formats';\nimport { calendarIcon } from './icons';\nimport {\n counterConfig,\n DEFAULT_FORMAT,\n DIVIDER,\n MOBILE_DEVICE_INTERACTION_TIMEOUT_MS,\n NATIVE_FORMAT,\n valRange,\n} from './consts';\nimport { DateCounter } from './DateCounterClass';\nimport { newDate } from './date-utils';\n\nexport const componentName = getComponentName('date-field');\n\n// we set baseSelector to `vaadin-popover` as a temporary hack, so our portalMixin will\n// be able to process this component's overlay. The whole process needs refactoring as soon as possible.\nconst BASE_SELECTOR = 'vaadin-popover';\nconst BaseInputClass = createBaseInputClass({ componentName, baseSelector: BASE_SELECTOR });\n\nconst dateFieldAttrs = [\n 'format',\n 'opened',\n 'initial-value',\n 'readonly',\n 'disable-calendar',\n 'utc-time',\n];\nconst calendarAttrs = ['years-range', 'calendar-months', 'calendar-weekdays'];\nconst observedAttrs = [...dateFieldAttrs, ...calendarAttrs];\n\nclass RawDateFieldClass extends BaseInputClass {\n epoch = '';\n\n format = DEFAULT_FORMAT;\n\n selectedCounterIdx = 0;\n\n updateCountersDisplay() {\n this.inputElement.value = this.countersValue;\n }\n\n updateValue() {\n if (this.isCountersOutOfRange) {\n this.resetEpoch();\n } else {\n const date = formats[this.format].getDate(this.inputElement.value);\n this.updateEpoch(dateToEpoch(date, this.isUtcTime));\n }\n }\n\n onDateCounterChange = () => {\n this.updateCountersDisplay();\n this.updateValue();\n // update validity\n this.#dispatchInput();\n };\n\n updateEpoch(epoch) {\n this.epoch = dateToEpoch(epoch, this.isUtcTime);\n }\n\n dateCounters = [\n new DateCounter(counterConfig.MONTH, this.onDateCounterChange.bind(this)),\n new DateCounter(counterConfig.DAY, this.onDateCounterChange.bind(this)),\n new DateCounter(counterConfig.YEAR, this.onDateCounterChange.bind(this)),\n ];\n\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttrs);\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <descope-text-field inputmode=\"numeric\">\n <span slot=\"suffix\" class=\"toggle-calendar\">\n ${calendarIcon}\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host ::slotted {\n padding: 0;\n }\n\n .toggle-calendar {\n cursor: pointer;\n display: flex;\n align-self: center;\n z-index: 1;\n height: 100%;\n align-items: center;\n }\n\n :host([readonly=\"true\"]) .toggle-calendar {\n pointer-events: none;\n }\n\n .hidden {\n display: none;\n }\n `,\n this\n );\n\n this.inputElement = this.shadowRoot.querySelector('descope-text-field');\n this.popoverToggleButton = this.inputElement.querySelector('.toggle-calendar');\n }\n\n get validationTarget() {\n return this.inputElement;\n }\n\n get opened() {\n return this.getAttribute('opened') === 'true';\n }\n\n // returns the input's value as a epoch\n get displayValueEpoch() {\n const date = formats[this.format].getDate(this.inputElement.value);\n\n if (!isValidEpoch(date?.getTime())) {\n return null;\n }\n\n return date.getTime();\n }\n\n get sortedCounters() {\n return this.format\n .split(DIVIDER)\n .map((placeholder) => this.dateCounters.find((dc) => dc.placeholder === placeholder));\n }\n\n get activeCounter() {\n return this.sortedCounters[this.selectedCounterIdx];\n }\n\n get countersValue() {\n return this.sortedCounters.map((dc) => dc.stringValue).join(DIVIDER);\n }\n\n get overlay() {\n return this.baseElement.shadowRoot?.querySelector('vaadin-popover-overlay');\n }\n\n get backdrop() {\n return this.overlay.shadowRoot?.querySelector('#backdrop');\n }\n\n get calendar() {\n return this.overlay?.querySelector('descope-calendar');\n }\n\n get isRTL() {\n const computedStyleDirection = getComputedStyle(this.baseElement).getPropertyValue('direction');\n\n if (computedStyleDirection) {\n return computedStyleDirection === 'rtl';\n }\n\n // Fallback: If for some reason computed style was not calculated in time, fallback to check on attribute\n return this.getAttribute('st-host-direction') === 'rtl';\n }\n\n get value() {\n if (this.isInvalidDate()) {\n return '';\n }\n return this.epoch;\n }\n\n set value(val) {\n const value = parseInt(val, 10);\n if (!Number.isNaN(value)) {\n this.updateEpoch(value);\n this.updateDateCounters(new Date(value));\n } else {\n this.resetEpoch();\n this.resetDateCounters();\n this.clearInputEle();\n }\n }\n\n resetEpoch() {\n this.epoch = '';\n }\n\n get isCountersEmpty() {\n return this.dateCounters.every((dc) => dc.isEmpty);\n }\n\n get isCountersOutOfRange() {\n return this.dateCounters.some((dc) => !dc.isInRange(dc.numberValue));\n }\n\n get disableCalendar() {\n return this.getAttribute('disable-calendar') === 'true';\n }\n\n get isUtcTime() {\n return this.getAttribute('utc-time') === 'true';\n }\n\n get isSelectAll() {\n const inputEle = this.inputElement.baseElement.inputElement;\n return inputEle.value.length === inputEle.selectionStart + inputEle.selectionEnd;\n }\n\n reportValidity() {\n this.inputElement.reportValidity();\n }\n\n #dispatchInput() {\n this.inputElement.baseElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n updateInputDisplay() {\n this.inputElement.value = formatEpoch(newDate(this.countersValue).getTime(), this.format);\n }\n\n init() {\n super.init?.();\n\n this.updateFormatPattern();\n this.initPopover();\n this.onDateCounterChange();\n this.initInputElement();\n\n setTimeout(() => {\n this.#overrideOverlaySettings();\n }, 0);\n }\n\n initInputElement() {\n this.inputElement.getValidity = this.getValidity.bind(this);\n this.inputElement.baseElement.checkValidity = this.checkValidity.bind(this);\n\n this.popoverToggleButton.addEventListener('click', this.onPopoverToggle.bind(this));\n\n this.inputElement.addEventListener('focus', this.onFocus.bind(this));\n this.inputElement.addEventListener('blur', this.onBlur.bind(this));\n this.inputElement.addEventListener('click', this.handleMouseCaretPositionChange.bind(this));\n this.inputElement.addEventListener('keydown', this.handleKeyboard.bind(this));\n this.inputElement.addEventListener('beforeinput', this.handleInput.bind(this));\n this.inputElement.addEventListener('pointerdown', this.onPointerDown.bind(this));\n this.inputElement.addEventListener('paste', this.onPaste.bind(this));\n\n forwardAttrs(this, this.inputElement, {\n includeAttrs: [\n 'label',\n 'label-type',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'bordered',\n 'required',\n 'full-width',\n 'st-host-direction',\n 'pattern',\n 'bordered',\n 'data-errormessage-value-missing',\n 'data-errormessage-pattern-mismatch',\n 'data-errormessage-range-underflow',\n 'data-errormessage-range-overflow',\n 'st-error-message-icon',\n 'st-error-message-icon-size',\n 'st-error-message-icon-padding',\n ],\n });\n }\n\n handleInput(e) {\n e.preventDefault();\n\n this.handleSelectAll();\n\n if (e.data && isNumber(e.data)) {\n this.parseDigits(e.data);\n this.updateCountersDisplay();\n } else if (e.inputType) {\n this.handleNavKeys(e);\n }\n }\n\n initPopover() {\n this.baseElement.trigger = ['click'];\n this.baseElement.withBackdrop = true;\n this.baseElement.renderer = this.#popoverRenderer.bind(this);\n\n // block popover events from focusing/blurring the text-field\n this.baseElement.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n\n handleSelectAll() {\n if (this.isSelectAll) {\n this.selectFirstCounter();\n }\n }\n\n #popoverPosStylesheet;\n\n #popoverRenderer(root) {\n // popoverRenderer should run only once, when the popover is first rendering.\n if (!root.firstChild) {\n this.overlay.positionTarget = this.shadowRoot.querySelector('.toggle-calendar');\n\n root.appendChild(this.#getPopoverContent());\n\n // override vaadin's constructed stylesheet which hides the host element\n overrideConstructedStylesheet(this.baseElement);\n\n this.backdrop.addEventListener('click', this.closePopover.bind(this));\n }\n\n // Hide overlay before adjusting position to prevent flickering\n root.style.setProperty('visibility', 'hidden');\n\n // Wait until overlay is ready\n setTimeout(() => {\n this.#adjustPopoverPosition(root);\n\n // Show adjusted overlay\n root.style.setProperty('visibility', 'visible');\n this.updateCalendarView(root);\n }, 100);\n }\n\n #adjustPopoverPosition() {\n const popover = this.shadowRoot.querySelector('vaadin-popover').shadowRoot;\n\n // Reset any previous transform so getBoundingClientRect measures the natural position\n this.#popoverPosStylesheet?.replaceSync(\n `vaadin-popover-overlay::part(overlay) { transform: none; }`\n );\n\n const windowRect = document.body.getBoundingClientRect();\n const inputRect = this.getBoundingClientRect();\n const calendarRect = this.calendar.getBoundingClientRect();\n\n const side = this.isRTL ? 'right' : 'left';\n const offset = inputRect[side] - calendarRect[side];\n const availableLeft = calendarRect.left;\n const availableRight = windowRect.width - calendarRect.right;\n\n let newOffset;\n if (offset > 0) {\n newOffset = Math.min(offset, availableRight);\n } else {\n newOffset = Math.min(Math.abs(offset), availableLeft) * -1;\n }\n\n const css = `\n vaadin-popover-overlay::part(overlay) {\n transform: translateX(${newOffset}px);\n }\n `;\n\n if (this.#popoverPosStylesheet) {\n this.#popoverPosStylesheet.replaceSync(css);\n } else {\n this.#popoverPosStylesheet = injectStyle(css, popover);\n }\n }\n\n #getPopoverContent() {\n const ele = document.createElement('span');\n\n ele.innerHTML = `<descope-calendar></descope-calendar>`;\n\n const calendar = ele.querySelector('descope-calendar');\n\n calendar.addEventListener('date-submit', this.onCalendarSubmit.bind(this));\n calendar.addEventListener('cancel', this.closePopover.bind(this));\n\n return ele;\n }\n\n // the default vaadin behavior is to attach the overlay to the body when opened\n // we do not want that because it's difficult to style the overlay in this way\n // so we override it to open inside the shadow DOM\n #overrideOverlaySettings() {\n this.overlay._attachOverlay = () => this.overlay.bringToFront();\n this.overlay._detachOverlay = () => {};\n this.overlay._enterModalState = () => {};\n }\n\n onPopoverToggle() {\n this.opened ? this.closePopover() : this.openPopover();\n }\n\n openPopover() {\n if (this.disableCalendar) return;\n this.setAttribute('opened', 'true');\n }\n\n closePopover() {\n this.removeAttribute('opened');\n this.inputElement.focus();\n }\n\n getCounterById(id) {\n return this.dateCounters.find((dc) => dc.id === id);\n }\n\n onCalendarSubmit() {\n if (!this.isReadOnly) {\n if (!this.calendar.value) return;\n\n const calendarDate = newDate(this.calendar.value);\n\n this.value = dateToEpoch(calendarDate, this.isUtcTime);\n\n this.getCounterById('year').replaceValue(calendarDate.getFullYear());\n this.getCounterById('month').replaceValue(calendarDate.getMonth() + 1);\n this.getCounterById('day').replaceValue(calendarDate.getDate());\n\n this.#dispatchInput();\n }\n\n this.closePopover();\n }\n\n updateCalendarView() {\n const validInputVal =\n isValidEpoch(newDate(this.inputElement.value || '').getTime()) &&\n formats[this.format].validate(this.inputElement.value);\n\n if (this.displayValueEpoch || validInputVal) {\n this.calendar.setAttribute(\n 'initial-value',\n formatEpoch(this.displayValueEpoch || this.epoch, NATIVE_FORMAT)\n );\n } else {\n this.calendar.clearValue();\n this.calendar.setAttribute('preview', formatEpoch(getCurrentTime(), NATIVE_FORMAT));\n }\n\n forwardAttrs(this, this.calendar, {\n includeAttrs: [\n 'st-host-direction',\n 'readonly',\n 'initial-month',\n 'initial-year',\n 'years-range',\n 'calendar-label-submit',\n 'calendar-label-cancel',\n 'calendar-months',\n 'calendar-weekdays',\n 'calendar-weekdays-short',\n ],\n });\n }\n\n // In mobile devices, there are cases were `pointerdown` is triggered\n // instead of `click`.\n onPointerDown(e) {\n setTimeout(() => this.handleMouseCaretPositionChange(e), MOBILE_DEVICE_INTERACTION_TIMEOUT_MS);\n }\n\n onFocus() {\n if (this.isReadOnly) {\n return;\n }\n\n // We need to wait for focus to end before we set selection\n setTimeout(() => this.resetDisplay());\n }\n\n resetDisplay() {\n if (!this.inputElement.value) {\n this.inputElement.value = this.format;\n }\n\n // On focus select the first counter\n this.selectFirstCounter();\n // set selection on first counter\n this.inputElement.setSelectionRange(0, this.sortedCounters[0].length);\n }\n\n onBlur() {\n if (this.opened) {\n return;\n }\n\n if (this.inputElement.value === this.format) {\n this.clearInputEle();\n }\n }\n\n clearInputEle() {\n this.inputElement.value = '';\n }\n\n onFormatUpdate(format) {\n if (Object.keys(formats).includes(format)) {\n this.format = format;\n this.updateFormatPattern();\n }\n }\n\n updateFormatPattern() {\n const format = this.getAttribute('format') || this.format || DEFAULT_FORMAT;\n this.setAttribute('type', 'date');\n this.setAttribute('pattern', formats[format].pattern);\n }\n\n parseDigits(value) {\n this.activeCounter.add(value);\n\n if (this.activeCounter.isFull) {\n this.selectNextCounter();\n }\n\n // We wait for the digit to be parsed, and only then set the selection.\n // Failing to do so results in unexpected \"jump\" of the screen in mobile devices.\n this.setInputSelectionRange();\n }\n\n getCounterIdx(caretPos) {\n const [counter1ln, counter2ln] = this.sortedCounters.map((dc) => dc.length);\n\n const c1 = caretPos <= counter1ln;\n const c2 = caretPos >= counter1ln && caretPos <= counter1ln + counter2ln + 1;\n const c3 = caretPos >= counter1ln + counter2ln + 2;\n\n return [c1, c2, c3].indexOf(true);\n }\n\n setSelectedCounterByCaretPosition(e) {\n this.selectedCounterIdx = this.getCounterIdx(\n // if triggered by touch event, target might not include `selectionStart`\n // in that case we fall back to the inputElement's `selectionStart` value.\n // Therefore, it is recommended to run this function with setTimeout,\n // at least for mobile events.\n e.target?.selectionStart || this.inputElement.selectionStart\n );\n }\n\n selectFirstCounter() {\n this.selectedCounterIdx = 0;\n }\n\n selectNextCounter() {\n if (this.selectedCounterIdx < this.dateCounters.length) {\n this.selectedCounterIdx = Math.min(this.selectedCounterIdx + 1, 2);\n }\n }\n\n selectPrevCounter() {\n if (this.selectedCounterIdx > 0) {\n this.selectedCounterIdx = Math.min(this.selectedCounterIdx - 1, 1);\n }\n }\n\n // Sets the text selection range in the input element based on the selected counter.\n // The function calculates the starting position of the selection by summing the lengths\n // of all counters before the currently selected counter (`selectedCounterIdx`).\n // It then selects the entire length of the current counter in the input element.\n setInputSelectionRange() {\n // For preview/readonly state we don't have a caret or a caretIdx, so we skip setting input selection range\n if (this.selectedCounterIdx < 0) {\n return;\n }\n\n // We wait for before setting the selection, otherwise there's an\n // unexpected \"jump\" of the screen in mobile devices.\n setTimeout(() => {\n const caretStart = this.sortedCounters\n .slice(0, this.selectedCounterIdx)\n .reduce((acc, counter) => acc + counter.length, this.selectedCounterIdx);\n\n this.inputElement.setSelectionRange(\n caretStart,\n caretStart + this.sortedCounters[this.selectedCounterIdx].length\n );\n });\n }\n\n resetDateCounters() {\n this.dateCounters.forEach((dc) => dc.clear());\n }\n\n // in case value is set from external source we need to update date counters\n updateDateCounters(date) {\n this.dateCounters.forEach((dc) => {\n switch (dc.id) {\n case counterConfig.MONTH.id:\n dc.set(this.isUtcTime ? date.getUTCMonth() + 1 : date.getMonth() + 1);\n break;\n case counterConfig.YEAR.id:\n dc.set(this.isUtcTime ? date.getUTCFullYear() : date.getFullYear());\n break;\n case counterConfig.DAY.id:\n dc.set(this.isUtcTime ? date.getUTCDate() : date.getDate());\n break;\n default:\n break;\n }\n });\n }\n\n handleKeyboard(e) {\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === 'x') {\n this.onCut(e);\n }\n\n return;\n }\n\n this.handleSelectAll();\n\n if (e.key === 'ArrowUp') {\n this.activeCounter.inc();\n } else if (e.key === 'ArrowDown') {\n this.activeCounter.dec();\n } else if (e.key === 'ArrowRight') {\n this.selectNextCounter();\n } else if (e.key === 'ArrowLeft') {\n this.selectPrevCounter();\n }\n\n this.setInputSelectionRange();\n }\n\n handleNavKeys(e) {\n if (this.isReadOnly) {\n return;\n }\n\n if (this.opened) {\n this.closePopover();\n }\n\n if (!this.activeCounter) return;\n\n if (e.inputType === 'deleteContentBackward') {\n this.handleBackspace();\n }\n\n this.setInputSelectionRange();\n }\n\n handleBackspace() {\n if (this.isSelectAll) {\n this.resetToInitialState();\n return;\n }\n\n const counter = this.activeCounter;\n\n if (counter.isEmpty) {\n this.selectPrevCounter();\n this.setInputSelectionRange();\n } else {\n counter.set('');\n }\n\n // To support keyboards like SwiftKey, we need to re-render the counters display and selection,\n // otherwise we get an unexpected behavior, where the format is deleted.\n setTimeout(() => {\n this.updateCountersDisplay();\n this.setInputSelectionRange();\n });\n }\n\n handleMouseCaretPositionChange(e) {\n if (this.opened) {\n return;\n }\n\n e.preventDefault();\n\n this.setSelectedCounterByCaretPosition(e);\n this.setInputSelectionRange();\n }\n\n onInitialValueChange(val) {\n // if component already has a value don't re-set value\n if (this.value) return;\n\n // we need to wait for the text-field to init\n setTimeout(() => {\n if (Number.isNaN(parseInt(val, 10))) {\n return;\n }\n this.value = Number(val);\n });\n }\n\n togglePopoverAccess(visibility) {\n if (visibility) {\n this.popoverToggleButton.classList.remove('hidden');\n } else {\n this.popoverToggleButton.classList.add('hidden');\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (oldValue !== newValue) {\n if (attrName === 'disable-calendar') {\n this.togglePopoverAccess(newValue !== 'true');\n }\n if (dateFieldAttrs.includes(attrName)) {\n if (newValue && attrName === 'format') {\n this.onFormatUpdate(newValue);\n }\n if (attrName === 'initial-value') {\n this.onInitialValueChange(newValue);\n }\n } else if (calendarAttrs.includes(attrName)) {\n if (newValue) {\n this.calendar?.setAttribute(attrName, newValue);\n } else {\n this.calendar?.removeAttribute(attrName);\n }\n }\n }\n }\n\n // we want to validate the date supplied actually exists. For example: Feb 31 is not an actual date,\n // but in JS when create a `new Date('1999-02-31') we get March 2nd 1999.\n // To prevent this error from being submitted, we evaluate the\n // date parts against their generated Date value.\n isInvalidDate() {\n const yearCounter = this.getCounterById('year');\n const isYearOutOfRange =\n yearCounter.numberValue > valRange.year.max || yearCounter.numberValue < valRange.year.min;\n\n const isDateDisplayMismatch = Object.entries(this.getDateVals()).some(([key, val]) => {\n const counter = this.getCounterById(key);\n return !val || counter.numberValue !== val;\n });\n\n return isYearOutOfRange || isDateDisplayMismatch;\n }\n\n getValidity() {\n if (this.isRequired && this.isCountersEmpty) {\n return { valueMissing: true };\n }\n\n if (this.isCountersOutOfRange || this.isInvalidDate()) {\n return { patternMismatch: true };\n }\n\n return {};\n }\n\n getDateVals() {\n const ret = {\n day: '',\n month: '',\n year: '',\n };\n\n if (Number.isNaN(this.epoch)) {\n return ret;\n }\n\n try {\n const date = new Date(this.epoch);\n\n if (this.isUtcTime) {\n ret.month = date.getUTCMonth() + 1;\n ret.day = date.getUTCDate();\n ret.year = date.getUTCFullYear();\n } else {\n ret.month = date.getMonth() + 1;\n ret.day = date.getDate();\n ret.year = date.getFullYear();\n }\n } catch (e) {}\n\n return ret;\n }\n\n resetToInitialState() {\n this.resetDateCounters();\n this.selectFirstCounter();\n this.resetDisplay();\n }\n\n onCut(e) {\n e.preventDefault();\n\n if (this.isSelectAll) {\n this.#copyToClipboard(this.countersValue);\n this.resetToInitialState();\n } else {\n this.#copyToClipboard(this.activeCounter.stringValue);\n this.activeCounter.set('');\n }\n\n this.setInputSelectionRange();\n }\n\n #copyToClipboard(value) {\n try {\n navigator.clipboard.writeText(value);\n } catch (err) {\n console.error('Failed to copy date value:', err);\n }\n }\n\n onPaste(e) {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text');\n\n // try paste entire date if valid\n const validDate = parseDateString(pastedData, this.format);\n\n if (validDate) {\n this.value = dateToEpoch(validDate, this.isUtcTime);\n this.onDateCounterChange();\n\n // select all\n setTimeout(() => this.inputElement.setSelectionRange(0, this.inputElement.value.length));\n } else {\n const value = Number(pastedData);\n\n // try paste in counter if possible\n if (value && this.activeCounter.min <= value && this.activeCounter.max >= value) {\n // use String to get rid of any zero padding\n this.activeCounter.set(String(value));\n\n setTimeout(() => this.setInputSelectionRange());\n }\n }\n }\n}\n\nconst textVars = TextFieldClass.cssVarList;\nconst { host, input, inputEleRTL, toggleButton, overlay, backdrop, errorMessage } = {\n host: { selector: () => ':host' },\n input: { selector: () => 'descope-text-field' },\n inputEleRTL: { selector: () => ':host([st-host-direction=\"rtl\"]) descope-text-field' },\n toggleButton: { selector: () => '.toggle-calendar' },\n overlay: { selector: 'vaadin-popover-overlay::part(overlay)' },\n backdrop: { selector: 'vaadin-popover-overlay::part(backdrop)' },\n};\n\nexport const DateFieldClass = compose(\n createStyleMixin({ componentNameOverride: getComponentName('input-wrapper') }),\n createStyleMixin({\n mappings: {\n iconMargin: { ...toggleButton, property: 'margin-inline-end' },\n hostWidth: { ...host, property: 'width' },\n hostDirection: { ...host, property: 'direction' },\n textAlign: { ...input, property: 'text-align' },\n rtlInputDirection: { ...inputEleRTL, property: textVars.inputDirection },\n rtlInputAlignment: { ...inputEleRTL, property: textVars.inputTextAlign },\n overlayGap: {\n property: () => DateFieldClass.cssVarList.overlayGap,\n },\n overlayBackgroundColor: {\n property: () => DateFieldClass.cssVarList.overlayBackgroundColor,\n },\n overlayPadding: {\n property: () => DateFieldClass.cssVarList.overlayPadding,\n },\n overlayBoxShadow: { property: () => DateFieldClass.overlayBoxShadow },\n overlayOutlineWidth: {\n property: () => DateFieldClass.cssVarList.overlayOutlineWidth,\n },\n overlayOutlineColor: {\n property: () => DateFieldClass.cssVarList.overlayOutlineColor,\n },\n overlayOutlineStyle: {\n property: () => DateFieldClass.cssVarList.overlayOutlineStyle,\n },\n errorMessageIcon: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIcon,\n },\n errorMessageIconSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconSize,\n },\n errorMessageIconPadding: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPadding,\n },\n errorMessageIconRepeat: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconRepeat,\n },\n errorMessageIconPosition: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPosition,\n },\n errorMessageFontSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontSize,\n },\n labelFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.labelFontWeight,\n },\n inputValueFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputValueFontWeight,\n },\n inputPlaceholderFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputPlaceholderFontWeight,\n },\n helperTextFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.helperTextFontWeight,\n },\n errorMessageFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontWeight,\n },\n },\n }),\n portalMixin({\n name: 'overlay',\n selector: '',\n mappings: {\n marginTop: { ...overlay, property: 'margin-top' },\n backgroundColor: { ...overlay },\n backdropBackgroundColor: { ...backdrop, property: 'background-color' },\n backdropPointerEvents: { ...backdrop, property: 'pointer-events' },\n padding: { ...overlay },\n boxShadow: { ...overlay },\n outlineWidth: { ...overlay },\n outlineColor: { ...overlay },\n outlineStyle: { ...overlay },\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawDateFieldClass);\n","import '@vaadin/popover/src/vaadin-popover';\nimport './descope-calendar';\nimport '@descope-ui/descope-text-field';\n\nimport { componentName, DateFieldClass } from './DateFieldClass';\n\ncustomElements.define(componentName, DateFieldClass);\n\nexport { DateFieldClass, componentName };\n"],"names":["DateCounter","data","Object","freeze","constructor","id","min","max","placeholder","onChange","this","val","initialNumValue","length","numberValue","Number","stringValue","join","padStart","isFull","isEmpty","toString","set","split","add","num","slice","del","filter","d","Boolean","clear","inc","gap","replaceValue","Math","dec","isInRange","setMin","setMax","componentName","componentHelpers","xE","BaseInputClass","createBaseInputClass","y","baseSelector","dateFieldAttrs","calendarAttrs","observedAttrs","textVars","TextFieldClass","w","cssVarList","host","input","inputEleRTL","toggleButton","overlay","backdrop","errorMessage","selector","DateFieldClass","helpers","Zz","mixins","RF","componentNameOverride","mappings","iconMargin","property","hostWidth","hostDirection","textAlign","rtlInputDirection","inputDirection","rtlInputAlignment","inputTextAlign","overlayGap","overlayBackgroundColor","overlayPadding","overlayBoxShadow","overlayOutlineWidth","overlayOutlineColor","overlayOutlineStyle","errorMessageIcon","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","labelFontWeight","inputValueFontWeight","inputPlaceholderFontWeight","helperTextFontWeight","errorMessageFontWeight","mA","name","marginTop","backgroundColor","backdropBackgroundColor","backdropPointerEvents","padding","boxShadow","outlineWidth","outlineColor","outlineStyle","VO","tQ","epoch","format","consts","ui","selectedCounterIdx","updateCountersDisplay","inputElement","value","countersValue","updateValue","isCountersOutOfRange","resetEpoch","date","formats","F","getDate","updateEpoch","descope_date_field_helpers","xq","isUtcTime","onDateCounterChange","dispatchInput","dateCounters","rR","MONTH","bind","DAY","YEAR","observedAttributes","concat","super","attachShadow","mode","innerHTML","icons","ki","componentsHelpers","fz","shadowRoot","querySelector","popoverToggleButton","validationTarget","opened","getAttribute","displayValueEpoch","mZ","getTime","sortedCounters","eT","map","find","dc","activeCounter","baseElement","calendar","isRTL","computedStyleDirection","getComputedStyle","getPropertyValue","isInvalidDate","parseInt","isNaN","resetDateCounters","clearInputEle","updateDateCounters","Date","isCountersEmpty","every","some","disableCalendar","isSelectAll","inputEle","selectionStart","selectionEnd","reportValidity","dispatchEvent","Event","bubbles","updateInputDisplay","jO","date_utils","N","init","updateFormatPattern","initPopover","initInputElement","setTimeout","overrideOverlaySettings","getValidity","checkValidity","addEventListener","onPopoverToggle","onFocus","onBlur","handleMouseCaretPositionChange","handleKeyboard","handleInput","onPointerDown","onPaste","EA","includeAttrs","e","preventDefault","handleSelectAll","Et","parseDigits","inputType","handleNavKeys","trigger","withBackdrop","renderer","popoverRenderer","stopPropagation","selectFirstCounter","popoverPosStylesheet","root","firstChild","positionTarget","appendChild","getPopoverContent","Xs","closePopover","style","setProperty","adjustPopoverPosition","updateCalendarView","popover","replaceSync","windowRect","document","body","getBoundingClientRect","inputRect","calendarRect","side","offset","availableLeft","left","availableRight","width","right","newOffset","abs","css","ele","createElement","onCalendarSubmit","_attachOverlay","bringToFront","_detachOverlay","_enterModalState","openPopover","setAttribute","removeAttribute","focus","getCounterById","isReadOnly","calendarDate","getFullYear","getMonth","validInputVal","validate","wJ","clearValue","Ln","SZ","resetDisplay","setSelectionRange","onFormatUpdate","keys","includes","pattern","selectNextCounter","setInputSelectionRange","getCounterIdx","caretPos","counter1ln","counter2ln","indexOf","setSelectedCounterByCaretPosition","target","selectPrevCounter","caretStart","reduce","acc","counter","forEach","getUTCMonth","getUTCFullYear","getUTCDate","metaKey","ctrlKey","key","toLowerCase","onCut","handleBackspace","resetToInitialState","onInitialValueChange","togglePopoverAccess","visibility","classList","remove","attributeChangedCallback","attrName","oldValue","newValue","yearCounter","isYearOutOfRange","nr","year","isDateDisplayMismatch","entries","getDateVals","isRequired","valueMissing","patternMismatch","ret","day","month","copyToClipboard","navigator","clipboard","writeText","err","console","error","pastedData","clipboardData","window","getData","validDate","Rm","String","customElements","define"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"descope-date-field-index-js.js","mappings":"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","sources":["webpack://@descope/web-components-ui/./src/components/descope-date-field/DateCounterClass.js","webpack://@descope/web-components-ui/./src/components/descope-date-field/DateFieldClass.js","webpack://@descope/web-components-ui/./src/components/descope-date-field/index.js"],"sourcesContent":["// DateCounterClass allows us to add several counters to the input, and use them seperately.\n// For examele, we have a DayCounter, MonthCounter and YearCounter, which can each separately navigate\n// between different ranges.\nexport class DateCounter {\n #data = Object.freeze([]);\n\n constructor({ id, min, max, placeholder }, onChange) {\n this.id = id;\n this.min = min;\n this.max = max;\n this.placeholder = placeholder;\n this.onChange = onChange;\n }\n\n get data() {\n return this.#data;\n }\n\n set data(val) {\n this.#data = Object.freeze(val);\n this.onChange?.();\n }\n\n get #initialNumValue() {\n return this.data.length ? this.numberValue : 0;\n }\n\n get numberValue() {\n return Number(this.stringValue);\n }\n\n get stringValue() {\n return (this.data.join('') || this.placeholder).padStart(this.length, '0');\n }\n\n get isFull() {\n return this.numberValue * 10 > this.max || this.data.length === this.length;\n }\n\n get isEmpty() {\n return this.stringValue === this.placeholder;\n }\n\n get length() {\n return this.max.toString().length;\n }\n\n set(val) {\n this.data = val.toString().split('');\n }\n\n add(num) {\n // use local var to avoid triggering onChange\n let { data } = this;\n\n data = [...data, num];\n\n // we need to re-evaluate the number value\n const numVal = Number(data.join(''));\n\n if (numVal > this.max) {\n data = [num];\n } else if (this.length < data.length) {\n data = data.slice(1, data.length);\n }\n\n this.data = data;\n\n return num;\n }\n\n del() {\n if (!this.data.filter((d) => d !== '0').filter(Boolean).length) {\n this.data = [];\n } else {\n this.data = this.data.slice(0, this.data.length - 1);\n }\n }\n\n clear() {\n this.data = [];\n }\n\n inc(gap) {\n this.replaceValue(\n this.#initialNumValue < this.max\n ? Math.max(this.#initialNumValue + (gap || 1), this.min)\n : this.min\n );\n }\n\n dec(gap) {\n this.replaceValue(\n this.#initialNumValue > this.min\n ? Math.min(this.#initialNumValue - (gap || 1), this.max)\n : this.max\n );\n }\n\n isInRange(val) {\n return val >= this.min && val <= this.max;\n }\n\n replaceValue(val) {\n if (this.isInRange(val)) {\n this.data = val.toString().padStart(this.length, 0).split('');\n }\n }\n\n setMin(val) {\n this.min = Number(val);\n }\n\n setMax(val) {\n this.max = Number(val);\n }\n}\n","import { injectStyle } from '@descope-ui/common/components-helpers';\nimport { TextFieldClass } from '@descope-ui/descope-text-field/class';\nimport { createBaseInputClass } from '../../baseClasses/createBaseInputClass';\nimport {\n createStyleMixin,\n draggableMixin,\n componentNameValidationMixin,\n portalMixin,\n} from '../../mixins';\nimport { forwardAttrs, getComponentName } from '../../helpers/componentHelpers';\nimport { compose } from '../../helpers';\nimport {\n isValidEpoch,\n formatEpoch,\n isNumber,\n getCurrentTime,\n overrideConstructedStylesheet,\n dateToEpoch,\n parseDateString,\n} from './helpers';\nimport { formats } from './formats';\nimport { calendarIcon } from './icons';\nimport {\n counterConfig,\n DEFAULT_FORMAT,\n DIVIDER,\n MOBILE_DEVICE_INTERACTION_TIMEOUT_MS,\n NATIVE_FORMAT,\n valRange,\n} from './consts';\nimport { DateCounter } from './DateCounterClass';\nimport { newDate } from './date-utils';\n\nexport const componentName = getComponentName('date-field');\n\n// we set baseSelector to `vaadin-popover` as a temporary hack, so our portalMixin will\n// be able to process this component's overlay. The whole process needs refactoring as soon as possible.\nconst BASE_SELECTOR = 'vaadin-popover';\nconst BaseInputClass = createBaseInputClass({ componentName, baseSelector: BASE_SELECTOR });\n\nconst dateFieldAttrs = [\n 'format',\n 'opened',\n 'initial-value',\n 'readonly',\n 'disable-calendar',\n 'utc-time',\n];\nconst calendarAttrs = ['years-range', 'calendar-months', 'calendar-weekdays'];\nconst observedAttrs = [...dateFieldAttrs, ...calendarAttrs];\n\nclass RawDateFieldClass extends BaseInputClass {\n epoch = '';\n\n format = DEFAULT_FORMAT;\n\n selectedCounterIdx = 0;\n\n updateCountersDisplay() {\n this.inputElement.value = this.countersValue;\n }\n\n updateValue() {\n if (this.isCountersOutOfRange) {\n this.resetEpoch();\n } else {\n const date = formats[this.format].getDate(this.inputElement.value);\n this.updateEpoch(dateToEpoch(date, this.isUtcTime));\n }\n }\n\n onDateCounterChange = () => {\n this.updateCountersDisplay();\n this.updateValue();\n // update validity\n this.#dispatchInput();\n };\n\n updateEpoch(epoch) {\n this.epoch = dateToEpoch(epoch, this.isUtcTime);\n }\n\n dateCounters = [\n new DateCounter(counterConfig.MONTH, this.onDateCounterChange.bind(this)),\n new DateCounter(counterConfig.DAY, this.onDateCounterChange.bind(this)),\n new DateCounter(counterConfig.YEAR, this.onDateCounterChange.bind(this)),\n ];\n\n static get observedAttributes() {\n return [].concat(BaseInputClass.observedAttributes || [], observedAttrs);\n }\n\n constructor() {\n super();\n\n this.attachShadow({ mode: 'open' }).innerHTML = `\n <div>\n <descope-text-field inputmode=\"numeric\">\n <span slot=\"suffix\" class=\"toggle-calendar\">\n ${calendarIcon}\n </span>\n </descope-text-field>\n <vaadin-popover></vaadin-popover>\n </div>\n `;\n\n injectStyle(\n `\n :host {\n display: inline-block;\n box-sizing: border-box;\n user-select: none;\n max-width: 100%;\n }\n\n :host ::slotted {\n padding: 0;\n }\n\n .toggle-calendar {\n cursor: pointer;\n display: flex;\n align-self: center;\n z-index: 1;\n height: 100%;\n align-items: center;\n }\n\n :host([readonly=\"true\"]) .toggle-calendar {\n pointer-events: none;\n }\n\n .hidden {\n display: none;\n }\n `,\n this\n );\n\n this.inputElement = this.shadowRoot.querySelector('descope-text-field');\n this.popoverToggleButton = this.inputElement.querySelector('.toggle-calendar');\n }\n\n get validationTarget() {\n return this.inputElement;\n }\n\n get opened() {\n return this.getAttribute('opened') === 'true';\n }\n\n // returns the input's value as a epoch\n get displayValueEpoch() {\n const date = formats[this.format].getDate(this.inputElement.value);\n\n if (!isValidEpoch(date?.getTime())) {\n return null;\n }\n\n return date.getTime();\n }\n\n get sortedCounters() {\n return this.format\n .split(DIVIDER)\n .map((placeholder) => this.dateCounters.find((dc) => dc.placeholder === placeholder));\n }\n\n get activeCounter() {\n return this.sortedCounters[this.selectedCounterIdx];\n }\n\n get countersValue() {\n return this.sortedCounters.map((dc) => dc.stringValue).join(DIVIDER);\n }\n\n get overlay() {\n return this.baseElement.shadowRoot?.querySelector('vaadin-popover-overlay');\n }\n\n get backdrop() {\n return this.overlay.shadowRoot?.querySelector('#backdrop');\n }\n\n get calendar() {\n return this.overlay?.querySelector('descope-calendar');\n }\n\n get isRTL() {\n const computedStyleDirection = getComputedStyle(this.baseElement).getPropertyValue('direction');\n\n if (computedStyleDirection) {\n return computedStyleDirection === 'rtl';\n }\n\n // Fallback: If for some reason computed style was not calculated in time, fallback to check on attribute\n return this.getAttribute('st-host-direction') === 'rtl';\n }\n\n get value() {\n if (this.isInvalidDate()) {\n return '';\n }\n return this.epoch;\n }\n\n set value(val) {\n const value = parseInt(val, 10);\n if (!Number.isNaN(value)) {\n this.updateEpoch(value);\n this.updateDateCounters(new Date(value));\n } else {\n this.resetEpoch();\n this.resetDateCounters();\n this.clearInputEle();\n }\n }\n\n resetEpoch() {\n this.epoch = '';\n }\n\n get isCountersEmpty() {\n return this.dateCounters.every((dc) => dc.isEmpty);\n }\n\n get isCountersOutOfRange() {\n return this.dateCounters.some((dc) => !dc.isInRange(dc.numberValue));\n }\n\n get disableCalendar() {\n return this.getAttribute('disable-calendar') === 'true';\n }\n\n get isUtcTime() {\n return this.getAttribute('utc-time') === 'true';\n }\n\n get isSelectAll() {\n const inputEle = this.inputElement.baseElement.inputElement;\n return inputEle.value.length === inputEle.selectionStart + inputEle.selectionEnd;\n }\n\n reportValidity() {\n this.inputElement.reportValidity();\n }\n\n #dispatchInput() {\n this.inputElement.baseElement.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n updateInputDisplay() {\n this.inputElement.value = formatEpoch(newDate(this.countersValue).getTime(), this.format);\n }\n\n init() {\n super.init?.();\n\n this.updateFormatPattern();\n this.initPopover();\n this.onDateCounterChange();\n this.initInputElement();\n\n setTimeout(() => {\n this.#overrideOverlaySettings();\n }, 0);\n }\n\n initInputElement() {\n this.inputElement.getValidity = this.getValidity.bind(this);\n this.inputElement.baseElement.checkValidity = this.checkValidity.bind(this);\n\n this.popoverToggleButton.addEventListener('click', this.onPopoverToggle.bind(this));\n\n this.inputElement.addEventListener('focus', this.onFocus.bind(this));\n this.inputElement.addEventListener('blur', this.onBlur.bind(this));\n this.inputElement.addEventListener('click', this.handleMouseCaretPositionChange.bind(this));\n this.inputElement.addEventListener('keydown', this.handleKeyboard.bind(this));\n this.inputElement.addEventListener('beforeinput', this.handleInput.bind(this));\n this.inputElement.addEventListener('pointerdown', this.onPointerDown.bind(this));\n this.inputElement.addEventListener('paste', this.onPaste.bind(this));\n\n forwardAttrs(this, this.inputElement, {\n includeAttrs: [\n 'label',\n 'label-type',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'bordered',\n 'required',\n 'full-width',\n 'st-host-direction',\n 'pattern',\n 'bordered',\n 'data-errormessage-value-missing',\n 'data-errormessage-pattern-mismatch',\n 'data-errormessage-range-underflow',\n 'data-errormessage-range-overflow',\n 'st-error-message-icon',\n 'st-error-message-icon-size',\n 'st-error-message-icon-padding',\n ],\n });\n }\n\n handleInput(e) {\n e.preventDefault();\n\n this.handleSelectAll();\n\n if (e.data && isNumber(e.data)) {\n this.parseDigits(e.data);\n this.updateCountersDisplay();\n } else if (e.inputType) {\n this.handleNavKeys(e);\n }\n }\n\n initPopover() {\n this.baseElement.trigger = ['click'];\n this.baseElement.withBackdrop = true;\n this.baseElement.renderer = this.#popoverRenderer.bind(this);\n\n // block popover events from focusing/blurring the text-field\n this.baseElement.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n\n handleSelectAll() {\n if (this.isSelectAll) {\n this.selectFirstCounter();\n }\n }\n\n #popoverPosStylesheet;\n\n #popoverRenderer(root) {\n // popoverRenderer should run only once, when the popover is first rendering.\n if (!root.firstChild) {\n this.overlay.positionTarget = this.shadowRoot.querySelector('.toggle-calendar');\n\n root.appendChild(this.#getPopoverContent());\n\n // override vaadin's constructed stylesheet which hides the host element\n overrideConstructedStylesheet(this.baseElement);\n\n this.backdrop.addEventListener('click', this.closePopover.bind(this));\n }\n\n // Hide overlay before adjusting position to prevent flickering\n root.style.setProperty('visibility', 'hidden');\n\n // Wait until overlay is ready\n setTimeout(() => {\n this.#adjustPopoverPosition(root);\n\n // Show adjusted overlay\n root.style.setProperty('visibility', 'visible');\n this.updateCalendarView(root);\n }, 100);\n }\n\n #adjustPopoverPosition() {\n const popover = this.shadowRoot.querySelector('vaadin-popover').shadowRoot;\n\n // Reset any previous transform so getBoundingClientRect measures the natural position\n this.#popoverPosStylesheet?.replaceSync(\n `vaadin-popover-overlay::part(overlay) { transform: none; }`\n );\n\n const windowRect = document.body.getBoundingClientRect();\n const inputRect = this.getBoundingClientRect();\n const calendarRect = this.calendar.getBoundingClientRect();\n\n const side = this.isRTL ? 'right' : 'left';\n const offset = inputRect[side] - calendarRect[side];\n const availableLeft = calendarRect.left;\n const availableRight = windowRect.width - calendarRect.right;\n\n let newOffset;\n if (offset > 0) {\n newOffset = Math.min(offset, availableRight);\n } else {\n newOffset = Math.min(Math.abs(offset), availableLeft) * -1;\n }\n\n const css = `\n vaadin-popover-overlay::part(overlay) {\n transform: translateX(${newOffset}px);\n }\n `;\n\n if (this.#popoverPosStylesheet) {\n this.#popoverPosStylesheet.replaceSync(css);\n } else {\n this.#popoverPosStylesheet = injectStyle(css, popover);\n }\n }\n\n #getPopoverContent() {\n const ele = document.createElement('span');\n\n ele.innerHTML = `<descope-calendar></descope-calendar>`;\n\n const calendar = ele.querySelector('descope-calendar');\n\n calendar.addEventListener('date-submit', this.onCalendarSubmit.bind(this));\n calendar.addEventListener('cancel', this.closePopover.bind(this));\n\n return ele;\n }\n\n // the default vaadin behavior is to attach the overlay to the body when opened\n // we do not want that because it's difficult to style the overlay in this way\n // so we override it to open inside the shadow DOM\n #overrideOverlaySettings() {\n this.overlay._attachOverlay = () => this.overlay.bringToFront();\n this.overlay._detachOverlay = () => {};\n this.overlay._enterModalState = () => {};\n }\n\n onPopoverToggle() {\n this.opened ? this.closePopover() : this.openPopover();\n }\n\n openPopover() {\n if (this.disableCalendar) return;\n this.setAttribute('opened', 'true');\n }\n\n closePopover() {\n this.removeAttribute('opened');\n this.inputElement.focus();\n }\n\n getCounterById(id) {\n return this.dateCounters.find((dc) => dc.id === id);\n }\n\n onCalendarSubmit() {\n if (!this.isReadOnly) {\n if (!this.calendar.value) return;\n\n const calendarDate = newDate(this.calendar.value);\n\n this.value = dateToEpoch(calendarDate, this.isUtcTime);\n\n this.getCounterById('year').replaceValue(calendarDate.getFullYear());\n this.getCounterById('month').replaceValue(calendarDate.getMonth() + 1);\n this.getCounterById('day').replaceValue(calendarDate.getDate());\n\n this.#dispatchInput();\n }\n\n this.closePopover();\n }\n\n updateCalendarView() {\n const validInputVal =\n isValidEpoch(newDate(this.inputElement.value || '').getTime()) &&\n formats[this.format].validate(this.inputElement.value);\n\n if (this.displayValueEpoch || validInputVal) {\n this.calendar.setAttribute(\n 'initial-value',\n formatEpoch(this.displayValueEpoch || this.epoch, NATIVE_FORMAT)\n );\n } else {\n this.calendar.clearValue();\n this.calendar.setAttribute('preview', formatEpoch(getCurrentTime(), NATIVE_FORMAT));\n }\n\n forwardAttrs(this, this.calendar, {\n includeAttrs: [\n 'st-host-direction',\n 'readonly',\n 'initial-month',\n 'initial-year',\n 'years-range',\n 'calendar-label-submit',\n 'calendar-label-cancel',\n 'calendar-months',\n 'calendar-weekdays',\n 'calendar-weekdays-short',\n ],\n });\n }\n\n // In mobile devices, there are cases were `pointerdown` is triggered\n // instead of `click`.\n onPointerDown(e) {\n setTimeout(() => this.handleMouseCaretPositionChange(e), MOBILE_DEVICE_INTERACTION_TIMEOUT_MS);\n }\n\n onFocus() {\n if (this.isReadOnly) {\n return;\n }\n\n // We need to wait for focus to end before we set selection\n setTimeout(() => this.resetDisplay());\n }\n\n resetDisplay() {\n if (!this.inputElement.value) {\n this.inputElement.value = this.format;\n }\n\n // On focus select the first counter\n this.selectFirstCounter();\n // set selection on first counter\n this.inputElement.setSelectionRange(0, this.sortedCounters[0].length);\n }\n\n onBlur() {\n if (this.opened) {\n return;\n }\n\n if (this.inputElement.value === this.format) {\n this.clearInputEle();\n }\n }\n\n clearInputEle() {\n this.inputElement.value = '';\n }\n\n onFormatUpdate(format) {\n if (Object.keys(formats).includes(format)) {\n this.format = format;\n this.updateFormatPattern();\n }\n }\n\n updateFormatPattern() {\n const format = this.getAttribute('format') || this.format || DEFAULT_FORMAT;\n this.setAttribute('type', 'date');\n this.setAttribute('pattern', formats[format].pattern);\n }\n\n parseDigits(value) {\n this.activeCounter.add(value);\n\n if (this.activeCounter.isFull) {\n this.selectNextCounter();\n }\n\n // We wait for the digit to be parsed, and only then set the selection.\n // Failing to do so results in unexpected \"jump\" of the screen in mobile devices.\n this.setInputSelectionRange();\n }\n\n getCounterIdx(caretPos) {\n const [counter1ln, counter2ln] = this.sortedCounters.map((dc) => dc.length);\n\n const c1 = caretPos <= counter1ln;\n const c2 = caretPos >= counter1ln && caretPos <= counter1ln + counter2ln + 1;\n const c3 = caretPos >= counter1ln + counter2ln + 2;\n\n return [c1, c2, c3].indexOf(true);\n }\n\n setSelectedCounterByCaretPosition(e) {\n this.selectedCounterIdx = this.getCounterIdx(\n // if triggered by touch event, target might not include `selectionStart`\n // in that case we fall back to the inputElement's `selectionStart` value.\n // Therefore, it is recommended to run this function with setTimeout,\n // at least for mobile events.\n e.target?.selectionStart || this.inputElement.selectionStart\n );\n }\n\n selectFirstCounter() {\n this.selectedCounterIdx = 0;\n }\n\n selectNextCounter() {\n if (this.selectedCounterIdx < this.dateCounters.length) {\n this.selectedCounterIdx = Math.min(this.selectedCounterIdx + 1, 2);\n }\n }\n\n selectPrevCounter() {\n if (this.selectedCounterIdx > 0) {\n this.selectedCounterIdx = Math.min(this.selectedCounterIdx - 1, 1);\n }\n }\n\n // Sets the text selection range in the input element based on the selected counter.\n // The function calculates the starting position of the selection by summing the lengths\n // of all counters before the currently selected counter (`selectedCounterIdx`).\n // It then selects the entire length of the current counter in the input element.\n setInputSelectionRange() {\n // For preview/readonly state we don't have a caret or a caretIdx, so we skip setting input selection range\n if (this.selectedCounterIdx < 0) {\n return;\n }\n\n // We wait for before setting the selection, otherwise there's an\n // unexpected \"jump\" of the screen in mobile devices.\n setTimeout(() => {\n const caretStart = this.sortedCounters\n .slice(0, this.selectedCounterIdx)\n .reduce((acc, counter) => acc + counter.length, this.selectedCounterIdx);\n\n this.inputElement.setSelectionRange(\n caretStart,\n caretStart + this.sortedCounters[this.selectedCounterIdx].length\n );\n });\n }\n\n resetDateCounters() {\n this.dateCounters.forEach((dc) => dc.clear());\n }\n\n // in case value is set from external source we need to update date counters\n updateDateCounters(date) {\n this.dateCounters.forEach((dc) => {\n switch (dc.id) {\n case counterConfig.MONTH.id:\n dc.set(this.isUtcTime ? date.getUTCMonth() + 1 : date.getMonth() + 1);\n break;\n case counterConfig.YEAR.id:\n dc.set(this.isUtcTime ? date.getUTCFullYear() : date.getFullYear());\n break;\n case counterConfig.DAY.id:\n dc.set(this.isUtcTime ? date.getUTCDate() : date.getDate());\n break;\n default:\n break;\n }\n });\n }\n\n handleKeyboard(e) {\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === 'x') {\n this.onCut(e);\n }\n\n return;\n }\n\n this.handleSelectAll();\n\n if (e.key === 'ArrowUp') {\n this.activeCounter.inc();\n } else if (e.key === 'ArrowDown') {\n this.activeCounter.dec();\n } else if (e.key === 'ArrowRight') {\n this.selectNextCounter();\n } else if (e.key === 'ArrowLeft') {\n this.selectPrevCounter();\n }\n\n this.setInputSelectionRange();\n }\n\n handleNavKeys(e) {\n if (this.isReadOnly) {\n return;\n }\n\n if (this.opened) {\n this.closePopover();\n }\n\n if (!this.activeCounter) return;\n\n if (e.inputType === 'deleteContentBackward') {\n this.handleBackspace();\n }\n\n this.setInputSelectionRange();\n }\n\n handleBackspace() {\n if (this.isSelectAll) {\n this.resetToInitialState();\n return;\n }\n\n const counter = this.activeCounter;\n\n if (counter.isEmpty) {\n this.selectPrevCounter();\n this.setInputSelectionRange();\n } else {\n counter.set('');\n }\n\n // To support keyboards like SwiftKey, we need to re-render the counters display and selection,\n // otherwise we get an unexpected behavior, where the format is deleted.\n setTimeout(() => {\n this.updateCountersDisplay();\n this.setInputSelectionRange();\n });\n }\n\n handleMouseCaretPositionChange(e) {\n if (this.opened) {\n return;\n }\n\n e.preventDefault();\n\n this.setSelectedCounterByCaretPosition(e);\n this.setInputSelectionRange();\n }\n\n onInitialValueChange(val) {\n // if component already has a value don't re-set value\n if (this.value) return;\n\n // we need to wait for the text-field to init\n setTimeout(() => {\n if (Number.isNaN(parseInt(val, 10))) {\n return;\n }\n this.value = Number(val);\n });\n }\n\n togglePopoverAccess(visibility) {\n if (visibility) {\n this.popoverToggleButton.classList.remove('hidden');\n } else {\n this.popoverToggleButton.classList.add('hidden');\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback?.(attrName, oldValue, newValue);\n\n if (oldValue !== newValue) {\n if (attrName === 'disable-calendar') {\n this.togglePopoverAccess(newValue !== 'true');\n }\n if (dateFieldAttrs.includes(attrName)) {\n if (newValue && attrName === 'format') {\n this.onFormatUpdate(newValue);\n }\n if (attrName === 'initial-value') {\n this.onInitialValueChange(newValue);\n }\n } else if (calendarAttrs.includes(attrName)) {\n if (newValue) {\n this.calendar?.setAttribute(attrName, newValue);\n } else {\n this.calendar?.removeAttribute(attrName);\n }\n }\n }\n }\n\n // we want to validate the date supplied actually exists. For example: Feb 31 is not an actual date,\n // but in JS when create a `new Date('1999-02-31') we get March 2nd 1999.\n // To prevent this error from being submitted, we evaluate the\n // date parts against their generated Date value.\n isInvalidDate() {\n const yearCounter = this.getCounterById('year');\n const isYearOutOfRange =\n yearCounter.numberValue > valRange.year.max || yearCounter.numberValue < valRange.year.min;\n\n const isDateDisplayMismatch = Object.entries(this.getDateVals()).some(([key, val]) => {\n const counter = this.getCounterById(key);\n return !val || counter.numberValue !== val;\n });\n\n return isYearOutOfRange || isDateDisplayMismatch;\n }\n\n getValidity() {\n if (this.isRequired && this.isCountersEmpty) {\n return { valueMissing: true };\n }\n\n if (!this.isCountersEmpty && (this.isCountersOutOfRange || this.isInvalidDate())) {\n return { patternMismatch: true };\n }\n\n return {};\n }\n\n getDateVals() {\n const ret = {\n day: '',\n month: '',\n year: '',\n };\n\n if (Number.isNaN(this.epoch)) {\n return ret;\n }\n\n try {\n const date = new Date(this.epoch);\n\n if (this.isUtcTime) {\n ret.month = date.getUTCMonth() + 1;\n ret.day = date.getUTCDate();\n ret.year = date.getUTCFullYear();\n } else {\n ret.month = date.getMonth() + 1;\n ret.day = date.getDate();\n ret.year = date.getFullYear();\n }\n } catch (e) {}\n\n return ret;\n }\n\n resetToInitialState() {\n this.resetDateCounters();\n this.selectFirstCounter();\n this.resetDisplay();\n }\n\n onCut(e) {\n e.preventDefault();\n\n if (this.isSelectAll) {\n this.#copyToClipboard(this.countersValue);\n this.resetToInitialState();\n } else {\n this.#copyToClipboard(this.activeCounter.stringValue);\n this.activeCounter.set('');\n }\n\n this.setInputSelectionRange();\n }\n\n #copyToClipboard(value) {\n try {\n navigator.clipboard.writeText(value);\n } catch (err) {\n console.error('Failed to copy date value:', err);\n }\n }\n\n onPaste(e) {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text');\n\n // try paste entire date if valid\n const validDate = parseDateString(pastedData, this.format);\n\n if (validDate) {\n this.value = dateToEpoch(validDate, this.isUtcTime);\n this.onDateCounterChange();\n\n // select all\n setTimeout(() => this.inputElement.setSelectionRange(0, this.inputElement.value.length));\n } else {\n const value = Number(pastedData);\n\n // try paste in counter if possible\n if (value && this.activeCounter.min <= value && this.activeCounter.max >= value) {\n // use String to get rid of any zero padding\n this.activeCounter.set(String(value));\n\n setTimeout(() => this.setInputSelectionRange());\n }\n }\n }\n}\n\nconst textVars = TextFieldClass.cssVarList;\nconst { host, input, inputEleRTL, toggleButton, overlay, backdrop, errorMessage } = {\n host: { selector: () => ':host' },\n input: { selector: () => 'descope-text-field' },\n inputEleRTL: { selector: () => ':host([st-host-direction=\"rtl\"]) descope-text-field' },\n toggleButton: { selector: () => '.toggle-calendar' },\n overlay: { selector: 'vaadin-popover-overlay::part(overlay)' },\n backdrop: { selector: 'vaadin-popover-overlay::part(backdrop)' },\n};\n\nexport const DateFieldClass = compose(\n createStyleMixin({ componentNameOverride: getComponentName('input-wrapper') }),\n createStyleMixin({\n mappings: {\n iconMargin: { ...toggleButton, property: 'margin-inline-end' },\n hostWidth: { ...host, property: 'width' },\n hostDirection: { ...host, property: 'direction' },\n textAlign: { ...input, property: 'text-align' },\n rtlInputDirection: { ...inputEleRTL, property: textVars.inputDirection },\n rtlInputAlignment: { ...inputEleRTL, property: textVars.inputTextAlign },\n overlayGap: {\n property: () => DateFieldClass.cssVarList.overlayGap,\n },\n overlayBackgroundColor: {\n property: () => DateFieldClass.cssVarList.overlayBackgroundColor,\n },\n overlayPadding: {\n property: () => DateFieldClass.cssVarList.overlayPadding,\n },\n overlayBoxShadow: { property: () => DateFieldClass.overlayBoxShadow },\n overlayOutlineWidth: {\n property: () => DateFieldClass.cssVarList.overlayOutlineWidth,\n },\n overlayOutlineColor: {\n property: () => DateFieldClass.cssVarList.overlayOutlineColor,\n },\n overlayOutlineStyle: {\n property: () => DateFieldClass.cssVarList.overlayOutlineStyle,\n },\n errorMessageIcon: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIcon,\n },\n errorMessageIconSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconSize,\n },\n errorMessageIconPadding: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPadding,\n },\n errorMessageIconRepeat: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconRepeat,\n },\n errorMessageIconPosition: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageIconPosition,\n },\n errorMessageFontSize: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontSize,\n },\n labelFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.labelFontWeight,\n },\n inputValueFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputValueFontWeight,\n },\n inputPlaceholderFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.inputPlaceholderFontWeight,\n },\n helperTextFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.helperTextFontWeight,\n },\n errorMessageFontWeight: {\n selector: TextFieldClass.componentName,\n property: TextFieldClass.cssVarList.errorMessageFontWeight,\n },\n },\n }),\n portalMixin({\n name: 'overlay',\n selector: '',\n mappings: {\n marginTop: { ...overlay, property: 'margin-top' },\n backgroundColor: { ...overlay },\n backdropBackgroundColor: { ...backdrop, property: 'background-color' },\n backdropPointerEvents: { ...backdrop, property: 'pointer-events' },\n padding: { ...overlay },\n boxShadow: { ...overlay },\n outlineWidth: { ...overlay },\n outlineColor: { ...overlay },\n outlineStyle: { ...overlay },\n },\n }),\n draggableMixin,\n componentNameValidationMixin\n)(RawDateFieldClass);\n","import '@vaadin/popover/src/vaadin-popover';\nimport './descope-calendar';\nimport '@descope-ui/descope-text-field';\n\nimport { componentName, DateFieldClass } from './DateFieldClass';\n\ncustomElements.define(componentName, DateFieldClass);\n\nexport { DateFieldClass, componentName };\n"],"names":["DateCounter","data","Object","freeze","constructor","id","min","max","placeholder","onChange","this","val","initialNumValue","length","numberValue","Number","stringValue","join","padStart","isFull","isEmpty","toString","set","split","add","num","slice","del","filter","d","Boolean","clear","inc","gap","replaceValue","Math","dec","isInRange","setMin","setMax","componentName","componentHelpers","xE","BaseInputClass","createBaseInputClass","y","baseSelector","dateFieldAttrs","calendarAttrs","observedAttrs","textVars","TextFieldClass","w","cssVarList","host","input","inputEleRTL","toggleButton","overlay","backdrop","errorMessage","selector","DateFieldClass","helpers","Zz","mixins","RF","componentNameOverride","mappings","iconMargin","property","hostWidth","hostDirection","textAlign","rtlInputDirection","inputDirection","rtlInputAlignment","inputTextAlign","overlayGap","overlayBackgroundColor","overlayPadding","overlayBoxShadow","overlayOutlineWidth","overlayOutlineColor","overlayOutlineStyle","errorMessageIcon","errorMessageIconSize","errorMessageIconPadding","errorMessageIconRepeat","errorMessageIconPosition","errorMessageFontSize","labelFontWeight","inputValueFontWeight","inputPlaceholderFontWeight","helperTextFontWeight","errorMessageFontWeight","mA","name","marginTop","backgroundColor","backdropBackgroundColor","backdropPointerEvents","padding","boxShadow","outlineWidth","outlineColor","outlineStyle","VO","tQ","epoch","format","consts","ui","selectedCounterIdx","updateCountersDisplay","inputElement","value","countersValue","updateValue","isCountersOutOfRange","resetEpoch","date","formats","F","getDate","updateEpoch","descope_date_field_helpers","xq","isUtcTime","onDateCounterChange","dispatchInput","dateCounters","rR","MONTH","bind","DAY","YEAR","observedAttributes","concat","super","attachShadow","mode","innerHTML","icons","ki","componentsHelpers","fz","shadowRoot","querySelector","popoverToggleButton","validationTarget","opened","getAttribute","displayValueEpoch","mZ","getTime","sortedCounters","eT","map","find","dc","activeCounter","baseElement","calendar","isRTL","computedStyleDirection","getComputedStyle","getPropertyValue","isInvalidDate","parseInt","isNaN","resetDateCounters","clearInputEle","updateDateCounters","Date","isCountersEmpty","every","some","disableCalendar","isSelectAll","inputEle","selectionStart","selectionEnd","reportValidity","dispatchEvent","Event","bubbles","updateInputDisplay","jO","date_utils","N","init","updateFormatPattern","initPopover","initInputElement","setTimeout","overrideOverlaySettings","getValidity","checkValidity","addEventListener","onPopoverToggle","onFocus","onBlur","handleMouseCaretPositionChange","handleKeyboard","handleInput","onPointerDown","onPaste","EA","includeAttrs","e","preventDefault","handleSelectAll","Et","parseDigits","inputType","handleNavKeys","trigger","withBackdrop","renderer","popoverRenderer","stopPropagation","selectFirstCounter","popoverPosStylesheet","root","firstChild","positionTarget","appendChild","getPopoverContent","Xs","closePopover","style","setProperty","adjustPopoverPosition","updateCalendarView","popover","replaceSync","windowRect","document","body","getBoundingClientRect","inputRect","calendarRect","side","offset","availableLeft","left","availableRight","width","right","newOffset","abs","css","ele","createElement","onCalendarSubmit","_attachOverlay","bringToFront","_detachOverlay","_enterModalState","openPopover","setAttribute","removeAttribute","focus","getCounterById","isReadOnly","calendarDate","getFullYear","getMonth","validInputVal","validate","wJ","clearValue","Ln","SZ","resetDisplay","setSelectionRange","onFormatUpdate","keys","includes","pattern","selectNextCounter","setInputSelectionRange","getCounterIdx","caretPos","counter1ln","counter2ln","indexOf","setSelectedCounterByCaretPosition","target","selectPrevCounter","caretStart","reduce","acc","counter","forEach","getUTCMonth","getUTCFullYear","getUTCDate","metaKey","ctrlKey","key","toLowerCase","onCut","handleBackspace","resetToInitialState","onInitialValueChange","togglePopoverAccess","visibility","classList","remove","attributeChangedCallback","attrName","oldValue","newValue","yearCounter","isYearOutOfRange","nr","year","isDateDisplayMismatch","entries","getDateVals","isRequired","valueMissing","patternMismatch","ret","day","month","copyToClipboard","navigator","clipboard","writeText","err","console","error","pastedData","clipboardData","window","getData","validDate","Rm","String","customElements","define"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[8603],{3393(t,e,i){i.d(e,{y:()=>n});var r=i(9696),s=i(79365),o=i(81365);const n=(...t)=>(0,r.Zz)(s.XX,s._$,s.yF,s.jd)((0,o.q)(...t))},87455(t,e,i){i.d(e,{M:()=>m,T:()=>d});var r=i(97810),s=i(9696),o=i(79365),n=i(8877),a=i(5810),l=i(73551),p=i(10777);const d=(0,r.xE)("new-password"),c=p.w.cssVarList,{host:u,label:h,internalInputsWrapper:g,errorMessage:b,helperText:y,passwordInput:w,policyPreview:v}={host:{selector:()=>":host"},label:{selector:"::part(label)"},internalInputsWrapper:{selector:"descope-new-password-internal .wrapper"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"},passwordInput:{selector:"descope-password"},policyPreview:{selector:"descope-policy-validation"}},m=(0,s.Zz)((0,o.RF)({mappings:{fontSize:[u,{},{selector:a.M.componentName,property:a.M.cssVarList.fontSize}],fontFamily:[h,b,y],labelFontSize:{...h,property:"font-size"},labelFontWeight:{...h,property:"font-weight"},inputValueFontWeight:{...w,property:a.M.cssVarList.inputValueFontWeight},inputPlaceholderFontWeight:{...w,property:a.M.cssVarList.inputPlaceholderFontWeight},helperTextFontWeight:{...y,property:"font-weight"},errorMessageFontWeight:{...b,property:"font-weight"},labelTextColor:{...h,property:"color"},errorMessageTextColor:{...b,property:"color"},errorMessageIcon:{...b,property:"background-image"},errorMessageIconSize:{...b,property:"background-size"},errorMessageIconPadding:{...b,property:"padding-inline-start"},errorMessageIconRepeat:{...b,property:"background-repeat"},errorMessageIconPosition:{...b,property:"background-position"},errorMessageFontSize:{...b,property:"font-size"},hostWidth:{...u,property:"width"},hostMinWidth:{...u,property:"min-width"},hostDirection:[{...u,property:"direction"},{...w,property:a.M.cssVarList.hostDirection}],inputsRequiredIndicator:{...u,property:"content"},spaceBetweenInputs:{...g,property:"gap"},policyPreviewBackgroundColor:{...v,property:c.backgroundColor},policyPreviewPadding:{...v,property:c.padding},valueInputHeight:{...w,property:a.M.cssVarList.valueInputHeight},valueInputMarginBottom:{...w,property:a.M.cssVarList.valueInputMarginBottom}}}),o.VO,(0,o.OZ)({proxyProps:["value","selectionStart"]}),t=>class extends t{init(){super.init?.();const t=document.createElement("template"),e=this.getAttribute("external-input");t.innerHTML=`\n\t\t\t<${n.T}\n\t\t\t\tname="new-password"\n\t\t\t\ttabindex="-1"\n\t\t\t\tslot="input"\n external-input="${e}"\n\t\t\t>\n </${n.T}>\n\t\t\t`,this.baseElement.appendChild(t.content.cloneNode(!0)),this.inputElement=this.shadowRoot.querySelector(n.T),"true"===this.getAttribute("external-input")&&this.initExternalInput(),(0,r.EA)(this,this.inputElement,{includeAttrs:["password-label","password-placeholder","confirm-label","confirm-placeholder","full-width","size","bordered","label","has-confirm","invalid","readonly","disabled","draggable","has-validation","policy-label","active-policies","available-policies","data-password-policy-value-minlength","data-password-policy-value-passwordstrength","data-password-policy-value-disallowedchars","data-password-policy-value-email","data-password-policy-value-reuse","label-type","manual-visibility-toggle"]})}createSlottedExternalInput(t,e){const i=t.querySelector("input"),r=document.createElement("slot"),s=i.getAttribute("slot");r.setAttribute("name",e),r.setAttribute("slot",s),t.appendChild(r),i.setAttribute("slot",e),i.setAttribute("name",this.getAttribute("name")),i.setAttribute("data-hidden-input","true"),this.appendChild(i)}initExternalInput(){this.passwordInput=this.inputElement.querySelector('[data-id="password"]'),this.confirmInput=this.inputElement.querySelector('[data-id="confirm"]'),this.createSlottedExternalInput(this.passwordInput,"external-password-input"),this.createSlottedExternalInput(this.confirmInput,"external-confirm-input")}})((0,o.tz)({slots:[],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t:host {\n\t\t\tdisplay: inline-block;\n\t\t\tmax-width: 100%;\n\t\t\tbox-sizing: border-box;\n\t\t}\n :host ::part(error-message) {\n direction: ltr;\n }\n\t\t${(0,l.cy)(a.M.cssVarList)}\n\t\tvaadin-text-field {\n\t\t\tpadding: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t\tvaadin-text-field::part(input-field) {\n\t\t\tmin-height: 0;\n\t\t\tbackground: transparent;\n\t\t\tbox-shadow: none;\n\t\t\tpadding: 0;\n\t\t}\n\t\tvaadin-text-field::part(input-field)::after {\n\t\t\tbackground: transparent;\n\t\t\topacity: 0;\n\t\t}\n\t\tdescope-new-password-internal {\n\t\t\t-webkit-mask-image: none;\n\t\t\tmin-height: 0;\n\t\t\twidth: 100%;\n\t\t\tpadding: 0;\n\t\t}\n\t\tdescope-new-password-internal > .wrapper {\n -webkit-mask-image: none;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t}\n\t\tdescope-password {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t}\n\t\tdescope-new-password-internal vaadin-password-field::before {\n\t\t\theight: initial;\n\t\t}\n descope-policy-validation {\n margin-top: 8px;\n display: flex;\n }\n .hidden {\n display: none;\n }\n\t\t`,excludeAttrsSync:["tabindex","style"],componentName:d}))},8877(t,e,i){i.d(e,{T:()=>r});const r=(0,i(97810).xE)("new-password-internal")},78844(t,e,i){var r=i(25964),s=i(3393),o=i(97810),n=i(87455),a=i(8877);const l=/^password-/,p=/^confirm-/,d=(t,e)=>t.replace(e,""),c=["password-label","password-placeholder"],u=["confirm-label","confirm-placeholder"],h=["has-validation","policy-label","available-policies","active-policies","data-password-policy-value-minlength","data-password-policy-value-passwordstrength","data-password-policy-value-disallowedchars","data-password-policy-value-email","data-password-policy-value-reuse","manual-visibility-toggle"],g=["has-confirm","disabled","bordered","size","full-width","maxlength","invalid","readonly","draggable","autocomplete","label-type","manual-visibility-toggle"],b=[].concat(g,c,u,h),y=(0,s.y)({componentName:a.T,baseSelector:"div"});customElements.define(a.T,class extends y{static get observedAttributes(){return[].concat(y.observedAttributes||[],b)}constructor(){super(),this.innerHTML='\n\t\t\t<div class="wrapper"></div>\n\t\t',this.wrapperEle=this.querySelector(".wrapper")}get value(){return this.passwordInput?.value||""}set value(t){t!==this.value&&(this.passwordInput.value=t)}get hasConfirm(){return"true"===this.getAttribute("has-confirm")}onHasConfirmChange(t){this.confirmInput.classList.toggle("hidden",!t)}onHasValidationChange(t){this.policyPanel.classList.toggle("hidden",!t)}get hasValidation(){return"true"===this.getAttribute("has-validation")}getValidity(){if(this.isRequired&&!this.value)return{valueMissing:!0};if(this.value&&!this.policyPanel.isValid)return{typeMismatch:!0};if(this.hasConfirm&&this.confirmInput&&this.value!==this.confirmInput.value)return{patternMismatch:!0};const t=this.getAttribute("minlength"),e=parseInt(t,10)||0;return this.value.length>=e?{}:{tooShort:!0}}init(){this.addEventListener("focus",t=>{t.isTrusted&&this.passwordInput.focus()}),super.init?.(),this.renderInputs(this.hasConfirm,this.hasValidation)}renderInputs(){const t="true"===this.getAttribute("external-input"),e=`\n <div class="password-input-container">\n <descope-password\n autocomplete="new-password"\n manual-visibility-toggle="true"\n data-id="password"\n external-input="${t}"\n ></descope-password>\n <descope-policy-validation></descope-policy-validation>\n </div>\n <descope-password\n autocomplete="new-password"\n manual-visibility-toggle="true"\n external-input="${t}"\n data-id="confirm"\n ></descope-password>\n `;this.wrapperEle.innerHTML=e,this.passwordInput=this.querySelector('[data-id="password"]'),this.confirmInput=this.querySelector('[data-id="confirm"]'),this.policyPanel=this.querySelector("descope-policy-validation"),this.passwordStrength=this.querySelector("descope-password-strength"),this.inputs=[this.passwordInput,this.confirmInput],this.initInputs(),this.passwordInput.addEventListener("input",t=>{this.passwordStrength?.addEventListener("score-changed",({detail:t})=>{this.policyPanel.setAttribute("data-password-policy-actual-passwordstrength",t)},{once:!0}),this.passwordStrength?.setAttribute("value",t.target.value),this.policyPanel.setAttribute("value",t.target.value)}),(0,o.EA)(this,this.policyPanel,{includeAttrs:h,mapAttrs:{"policy-label":"label","available-policies":"data"}})}handleIndicatorStyle(){this.inputs.forEach(t=>{(0,r.fz)(`\n\t\t\t\t:host ::part(required-indicator)::after {\n\t\t\t\t\tcontent: var(${n.M.cssVarList.inputsRequiredIndicator});\n width: 1em;\n text-align: center;\n\t\t\t\t}\n :host ::part(required-indicator) {\n display: inline-flex;\n }\n\t\t\t\t`,t)})}get isInvalid(){return this.hasAttribute("invalid")&&"false"!==this.getAttribute("invalid")}handleInputsInvalidAttribute(){this.inputs.forEach(t=>{t&&(0,o.mx)(t,e=>{if(e.includes("invalid")){const e=t.getAttribute("invalid"),i=this.getAttribute("invalid");this.isInvalid&&i!==e&&t.setAttribute("invalid","true")}},{})})}initInputs(){this.handleIndicatorStyle(),this.handleInputsInvalidAttribute(),this.handleFocusEventsDispatching(this.inputs)}async togglePasswordStrength(){this.activePolicies.includes("passwordstrength")?this.passwordStrength||(await Promise.all([i.e(8961),i.e(3241)]).then(i.bind(i,13241)),this.passwordStrength=document.createElement("descope-password-strength"),this.passwordStrength.setAttribute("options","Very weak,Weak,Average,Strong,Very strong"),this.passwordStrength.setAttribute("value",this.passwordInput.value||""),this.passwordStrength.setAttribute("st-host-direction",this.getAttribute("st-host-direction")),this.passwordStrength.setAttribute("full-width","true"),this.querySelector(".password-input-container").insertBefore(this.passwordStrength,this.policyPanel)):this.passwordStrength&&(this.passwordStrength.remove(),this.passwordStrength=null)}get activePolicies(){return(this.getAttribute("active-policies")||"").split(",")}toggleBooleanAttribute(t,e,i){null===i?t?.removeAttribute(e):t?.setAttribute(e,i)}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i),e!==i&&("has-validation"===t?this.onHasValidationChange("true"===i):"has-confirm"===t?this.onHasConfirmChange("true"===i):g.includes(t)?this.inputs.forEach(e=>this.toggleBooleanAttribute(e,t,i)):c.includes(t)?this.toggleBooleanAttribute(this.passwordInput,d(t,l),i):u.includes(t)&&this.toggleBooleanAttribute(this.confirmInput,d(t,p),i),"active-policies"===t&&this.togglePasswordStrength())}})},5810(t,e,i){i.d(e,{M:()=>m,T:()=>l});var r=i(79365),s=i(9696),o=i(97810),n=i(16616),a=i(73551);const l=(0,o.xE)("password"),{host:p,inputField:d,inputElement:c,inputElementPlaceholder:u,revealButtonContainer:h,revealButtonIcon:g,label:b,requiredIndicator:y,errorMessage:w,helperText:v}={host:{selector:()=>":host"},inputField:{selector:"::part(input-field)"},inputElement:{selector:"> input"},inputElementPlaceholder:{selector:()=>":host input:placeholder-shown"},revealButtonContainer:{selector:"::part(reveal-button)"},revealButtonIcon:{selector:"::part(reveal-button)::before"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"}},m=(0,s.Zz)((0,r.RF)({mappings:{hostWidth:{...p,property:"width"},hostMinWidth:{...p,property:"min-width"},hostDirection:{...p,property:"direction"},fontSize:[{},p],fontFamily:[b,d,w,v],inputHeight:{...d,property:"height"},inputHorizontalPadding:[{...c,property:"padding-left"},{...c,property:"padding-right"}],inputBackgroundColor:{...d,property:"background-color"},inputBorderStyle:{...d,property:"border-style"},inputBorderWidth:{...d,property:"border-width"},inputBorderColor:{...d,property:"border-color"},inputBorderRadius:{...d,property:"border-radius"},inputOutlineColor:{...d,property:"outline-color"},inputOutlineStyle:{...d,property:"outline-style"},inputOutlineOffset:{...d,property:"outline-offset"},inputOutlineWidth:{...d,property:"outline-width"},labelFontSize:{...b,property:"font-size"},labelFontWeight:{...b,property:"font-weight"},inputValueFontWeight:[{...c,property:"font-weight"},{selector:()=>":host ::slotted(input)",property:"font-weight"}],inputPlaceholderFontWeight:[{...u,property:"font-weight"},{selector:()=>":host ::slotted(input:placeholder-shown)",property:"font-weight"}],helperTextFontWeight:{...v,property:"font-weight"},errorMessageFontWeight:{...w,property:"font-weight"},labelTextColor:[{...b,property:"color"},{...b,property:"-webkit-text-fill-color"},{...y,property:"color"},{...y,property:"-webkit-text-fill-color"}],labelRequiredIndicator:{...y,property:"content"},errorMessageTextColor:{...w,property:"color"},errorMessageIcon:{...w,property:"background-image"},errorMessageIconSize:{...w,property:"background-size"},errorMessageIconPadding:{...w,property:"padding-inline-start"},errorMessageIconRepeat:{...w,property:"background-repeat"},errorMessageIconPosition:{...w,property:"background-position"},errorMessageFontSize:{...w,property:"font-size"},inputPlaceholderTextColor:[{...u,property:"color"},{selector:()=>":host ::slotted(input:placeholder-shown)",property:"color"}],inputValueTextColor:[{...c,property:"color"},{selector:()=>":host ::slotted(input)",property:"color"}],revealButtonOffset:[{...h,property:"margin-right"},{...h,property:"margin-left"}],revealButtonSize:{...h,property:"font-size"},revealButtonColor:{...g,property:"color"},labelPosition:{...b,property:"position"},labelTopPosition:{...b,property:"top"},labelHorizontalPosition:[{...b,property:"left"},{...b,property:"right"}],inputTransformY:{...b,property:"transform"},inputTransition:{...b,property:"transition"},marginInlineStart:{...b,property:"margin-inline-start"},placeholderOpacity:[{selector:"> input:placeholder-shown",property:"opacity"},{...c,property:"opacity"}],inputVerticalAlignment:{...d,property:"align-items"},valueInputHeight:{...c,property:"height"}}}),r.VO,(0,r.RV)({inputType:"password",inputName:"password",includeAttrs:["disabled","readonly","pattern","type","autocomplete"],noBlurDispatch:!0}),(0,r.OZ)({proxyProps:["value","selectionStart"],useProxyTargets:!0}),r.tQ,n.A,t=>class extends t{static get observedAttributes(){return["manual-visibility-toggle"]}get manualToggleVisibility(){return"true"===this.getAttribute("manual-visibility-toggle")}init(){super.init?.(),this.handleCaretOnVisibilityChange(),this.origSetPasswordVisible=this.baseElement._setPasswordVisible,this.origSetFocused=this.baseElement._setFocused,this.baseElement._setFocused=this.setFocus.bind(this),this.initExternalInput(),this.stopRevealButtonEnterPropagation()}stopRevealButtonEnterPropagation(){this.revealButton?.addEventListener("keydown",t=>{"Enter"===t.key&&t.stopPropagation()})}get revealButton(){return this.baseElement.querySelector("vaadin-password-field-button")}initExternalInput(){const t=this.createExternalInput();t&&this.handlePasswordVisibility(t)}get caretPosition(){return this.value?.length||0}handleCaretOnVisibilityChange(){const t=this.baseElement._togglePasswordVisibility.bind(this.baseElement);this.baseElement._togglePasswordVisibility=()=>{setTimeout(()=>(t(),this.inputElement.setSelectionRange(this.caretPosition,this.caretPosition),!1))}}setFocus(t){this.manualToggleVisibility&&(this.baseElement._setPasswordVisible=()=>{}),this.origSetFocused.call(this.baseElement,t),this.baseElement._setPasswordVisible=this.origSetPasswordVisible.bind(this.baseElement)}resetPasswordVisibilityToggle(){this.baseElement._setPasswordVisible=this.origSetPasswordVisible,this.baseElement._setFocused=this.origSetFocus}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i)}handlePasswordVisibility(t){const e=this.baseElement.__boundRevealButtonMouseDown;this.revealButton?.removeEventListener("mousedown",e),this.baseElement._passwordVisibleChanged=()=>{},this.baseElement._togglePasswordVisibility=()=>{"password"===t.getAttribute("type")?this.showPasswordVisibility(t):this.hidePasswordVisibility(t)}}showPasswordVisibility(t){t.setAttribute("type","text"),this.setAttribute("password-visible","true")}hidePasswordVisibility(t){t.setAttribute("type","password"),this.setAttribute("password-visible","false")}})((0,r.tz)({slots:["","suffix"],wrappedEleName:"vaadin-password-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\tmin-width: 10em;\n box-sizing: border-box;\n position: relative;\n\t\t\t}\n\t\t\t${(0,a.cy)(m.cssVarList)}\n\t\t\t${(0,a.I4)("vaadin-password-field")}\n ${(0,a.$J)("vaadin-password-field")}\n\n\t\t\tvaadin-password-field {\n\t\t\t\twidth: 100%;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t\tvaadin-password-field > input {\n -webkit-mask-image: none;\n\t\t\t\tbox-sizing: border-box;\n opacity: 1;\n\t\t\t}\n\t\t\tvaadin-password-field::part(input-field) {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t\tvaadin-password-field[focus-ring]::part(input-field) {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n :host ::slotted(input) {\n\t\t\t\tmin-height: 0;\n }\n :host([readonly]) ::slotted(input:placeholder-shown) {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\tvaadin-password-field::before {\n\t\t\t\theight: initial;\n\t\t\t}\n\t\t\tvaadin-password-field::part(input-field)::after {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\tvaadin-password-field-button {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t\t:host([readonly]) vaadin-password-field-button {\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\tvaadin-password-field-button[focus-ring] {\n\t\t\t\tbox-shadow: 0 0 0 2px var(${m.cssVarList.inputOutlineColor});\n\t\t\t}\n\n ${(0,a.Kl)()}\n\n ::part(reveal-button) {\n align-self: center;\n }\n\n vaadin-password-field[external-input="true"] > input:not(:placeholder-shown) {\n opacity: 0;\n }\n\t\t`,excludeAttrsSync:["tabindex","style"],componentName:l}))},16616(t,e,i){i.d(e,{A:()=>r});const r=t=>class extends t{get isReadOnly(){return this.hasAttribute("readonly")&&"false"!==this.getAttribute("readonly")}init(){super.init?.();const t=this.querySelector("input");t?.addEventListener("mousedown",e=>{if(this.isDraggable&&this.isReadOnly){t.setAttribute("inert","true");const i=e.target,r=i.getAttribute("type");i.setAttribute("type","text"),setTimeout(()=>{i.focus()});const s=e=>{i.setAttribute("type",r),t.removeAttribute("inert"),this.removeEventListener("mouseup",s),this.removeEventListener("dragend",s)};this.addEventListener("dragend",s,{once:!0}),this.addEventListener("mouseup",s,{once:!0})}})}}},10777(t,e,i){i.d(e,{T:()=>p,w:()=>v});var r=i(25964),s=i(79365),o=i(81365),n=i(9696),a=i(97810),l=i(88191);const p=(0,a.xE)("policy-validation"),d=["data","active-policies","overrides","data-password-policy-value-minlength","data-password-policy-value-passwordstrength","data-password-policy-actual-passwordstrength","data-password-policy-value-disallowedchars","data-password-policy-value-email","data-password-policy-value-reuse"],c=["label","value",...d];class u extends((0,o.q)({componentName:p,baseSelector:":host > div"})){#t;#e=[];#i;static get observedAttributes(){return c}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <div>\n <div class="label"></div>\n <ul></ul>\n </div>\n\t\t',(0,r.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(t,e,i){if(super.attributeChangedCallback?.(t,e,i),e!==i){if("label"===t&&this.updateLabel(i),d.includes(t)){if("data"===t)try{this.availablePolicies=JSON.parse(i)}catch{console.error("Failed to set available policies")}if("active-policies"===t&&(this.#e=(i||"").split(",")),"data-password-policy-value-minlength"===t){const t=Number(i);!Number.isNaN(t)&&t>0&&(this.#i={...this.#i,minlength:{value:`${t}`}})}if("data-password-policy-value-reuse"===t){const t=Number(i);!Number.isNaN(t)&&t>0&&(this.#i={...this.#i,reuse:{value:`${t}`}})}if("data-password-policy-value-passwordstrength"===t){const t=parseInt(i);!Number.isNaN(t)&&t>=0&&(this.#i={...this.#i,passwordstrength:{...this.#i?.passwordstrength,expected:t}})}if("data-password-policy-actual-passwordstrength"===t){const t=Number(i);!Number.isNaN(t)&&t>=0&&(this.#i={...this.#i,passwordstrength:{...this.#i?.passwordstrength,actual:t}})}if("data-password-policy-value-disallowedchars"===t)if(i)this.#i={...this.#i,disallowedchars:{...this.#i?.disallowedchars,value:i}};else if(this.#i?.disallowedchars){const{disallowedchars:t,...e}=this.#i;this.#i=e}if("data-password-policy-value-email"===t)if(i)this.#i={...this.#i,disallowemail:{...this.#i?.disallowemail,expected:i}};else if(this.#i?.disallowemail){const{disallowemail:t,...e}=this.#i;this.#i=e}}this.renderItems(this.#t,this.#e,this.#i)}}get availablePolicies(){return this.#t||[]}set availablePolicies(t){this.#t=t}get value(){return this.getAttribute("value")||""}getStrengthScore(){return this.value.length}compareValues(t,e,i){switch(t.toUpperCase()){case"GTE":return i>=e;case"GT":return i>e;case"LTE":return i<=e;case"LT":return i<e;case"EQ":return i===e;case"NEQ":return i!==e;default:throw new Error(`Invalid comparison type: ${t}`)}}validate(){let t=this.#t;return this.#i&&(t=this.#t.map(t=>{const e=this.#i[t.id];return e?{...t,data:e}:t})),this.#e.reduce((e,i)=>{const r=t.find(t=>t.id===i);if(!r)return e;const{pattern:s,message:o,data:n,compare:a,info:p}=r,d="string"==typeof a?a.toUpperCase():a;if(!s&&!a&&!p||!o)return e;const c={message:(0,l.z)(o,n),id:i};if(p)c.info=!0;else if(s){const t=new RegExp((0,l.z)(s,n));c.valid=t.test(this.value)}else if("STR_NEQ_CI"===d){const t=(n?.expected??"").toLowerCase(),e=(this.value??"").toLowerCase();if(t&&e){const i=t.indexOf("@"),r=i>0?t.slice(0,i):t;c.valid=e!==t&&e!==r}else c.valid=!0}else a&&(c.valid=this.compareValues(d,n?.expected??-1,n?.actual??-1));return e.push(c),e},[]).sort((t,e)=>Number(!!t.info)-Number(!!e.info))}get isValid(){return!this.validate().some(({valid:t})=>!1===t)}buildValidationItem({valid:t,message:e,info:i}){const r=!this.value||i?"none":t,s=document.createElement("li");s.className="item",s.dataset.valid=r;const o=document.createElement("span");return o.className="message",o.textContent=e??"",s.appendChild(o),s}renderItems(t,e){t&&e.length&&this.list.replaceChildren(...this.validate().map(this.buildValidationItem.bind(this)))}updateLabel(t){t?(this.label.textContent=t,this.classList.remove("hide-label")):(this.classList.add("hide-label"),this.label.textContent="")}}const{host:h,item:g,symbolDefault:b,symbolSuccess:y,symbolError:w}={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'}},v=(0,n.Zz)((0,s.RF)({componentNameOverride:(0,a.xE)("input-wrapper")}),(0,s.RF)({mappings:{hostDirection:{selector:()=>":host",property:"direction"},fontSize:{},fontFamily:{},padding:{},borderWidth:{...h,property:"border-width"},borderStyle:{...h,property:"border-style"},borderColor:{...h,property:"border-color"},borderRadius:{...h,property:"border-radius"},backgroundColor:{...h,property:"background-color"},textColor:{property:"color"},labelMargin:{...h,property:"gap"},itemsSpacing:{...g,property:"line-height"},itemSymbolSuccessColor:{...y,property:"color"},itemSymbolErrorColor:{...w,property:"color"},itemSymbolDefault:{...b,property:"content"},itemSymbolSuccess:{...y,property:"content"},itemSymbolError:{...w,property:"content"}}}),s.VO,s.tQ)(u)},88191(t,e,i){i.d(e,{z:()=>r});const r=(t,e)=>t.replace(/{{(\w+)+}}/g,(t,i)=>e?.[i]||t)}}]);
|
|
1
|
+
"use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[8603],{3393(t,e,i){i.d(e,{y:()=>n});var r=i(9696),s=i(79365),o=i(81365);const n=(...t)=>(0,r.Zz)(s.XX,s._$,s.yF,s.jd)((0,o.q)(...t))},87455(t,e,i){i.d(e,{M:()=>m,T:()=>d});var r=i(97810),s=i(9696),o=i(79365),n=i(8877),a=i(5810),l=i(73551),p=i(10777);const d=(0,r.xE)("new-password"),c=p.w.cssVarList,{host:u,label:h,internalInputsWrapper:g,errorMessage:b,helperText:y,passwordInput:w,policyPreview:v}={host:{selector:()=>":host"},label:{selector:"::part(label)"},internalInputsWrapper:{selector:"descope-new-password-internal .wrapper"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"},passwordInput:{selector:"descope-password"},policyPreview:{selector:"descope-policy-validation"}},m=(0,s.Zz)((0,o.RF)({mappings:{fontSize:[u,{},{selector:a.M.componentName,property:a.M.cssVarList.fontSize}],fontFamily:[h,b,y],labelFontSize:{...h,property:"font-size"},labelFontWeight:{...h,property:"font-weight"},inputValueFontWeight:{...w,property:a.M.cssVarList.inputValueFontWeight},inputPlaceholderFontWeight:{...w,property:a.M.cssVarList.inputPlaceholderFontWeight},helperTextFontWeight:{...y,property:"font-weight"},errorMessageFontWeight:{...b,property:"font-weight"},labelTextColor:{...h,property:"color"},errorMessageTextColor:{...b,property:"color"},errorMessageIcon:{...b,property:"background-image"},errorMessageIconSize:{...b,property:"background-size"},errorMessageIconPadding:{...b,property:"padding-inline-start"},errorMessageIconRepeat:{...b,property:"background-repeat"},errorMessageIconPosition:{...b,property:"background-position"},errorMessageFontSize:{...b,property:"font-size"},hostWidth:{...u,property:"width"},hostMinWidth:{...u,property:"min-width"},hostDirection:[{...u,property:"direction"},{...w,property:a.M.cssVarList.hostDirection}],inputsRequiredIndicator:{...u,property:"content"},spaceBetweenInputs:{...g,property:"gap"},policyPreviewBackgroundColor:{...v,property:c.backgroundColor},policyPreviewPadding:{...v,property:c.padding},valueInputHeight:{...w,property:a.M.cssVarList.valueInputHeight},valueInputMarginBottom:{...w,property:a.M.cssVarList.valueInputMarginBottom}}}),o.VO,(0,o.OZ)({proxyProps:["value","selectionStart"]}),t=>class extends t{init(){super.init?.();const t=document.createElement("template"),e=this.getAttribute("external-input");t.innerHTML=`\n\t\t\t<${n.T}\n\t\t\t\tname="new-password"\n\t\t\t\ttabindex="-1"\n\t\t\t\tslot="input"\n external-input="${e}"\n\t\t\t>\n </${n.T}>\n\t\t\t`,this.baseElement.appendChild(t.content.cloneNode(!0)),this.inputElement=this.shadowRoot.querySelector(n.T),"true"===this.getAttribute("external-input")&&this.initExternalInput(),(0,r.EA)(this,this.inputElement,{includeAttrs:["password-label","password-placeholder","confirm-label","confirm-placeholder","full-width","size","bordered","label","has-confirm","invalid","readonly","disabled","draggable","has-validation","policy-label","active-policies","available-policies","data-password-policy-value-minlength","data-password-policy-value-passwordstrength","data-password-policy-value-disallowedchars","data-password-policy-value-email","data-password-policy-value-reuse","label-type","manual-visibility-toggle"]})}createSlottedExternalInput(t,e){const i=t.querySelector("input"),r=document.createElement("slot"),s=i.getAttribute("slot");r.setAttribute("name",e),r.setAttribute("slot",s),t.appendChild(r),i.setAttribute("slot",e),i.setAttribute("name",this.getAttribute("name")),i.setAttribute("data-hidden-input","true"),this.appendChild(i)}initExternalInput(){this.passwordInput=this.inputElement.querySelector('[data-id="password"]'),this.confirmInput=this.inputElement.querySelector('[data-id="confirm"]'),this.createSlottedExternalInput(this.passwordInput,"external-password-input"),this.createSlottedExternalInput(this.confirmInput,"external-confirm-input")}})((0,o.tz)({slots:[],wrappedEleName:"vaadin-text-field",style:()=>`\n\t\t:host {\n\t\t\tdisplay: inline-block;\n\t\t\tmax-width: 100%;\n\t\t\tbox-sizing: border-box;\n\t\t}\n :host ::part(error-message) {\n direction: ltr;\n }\n\t\t${(0,l.cy)(a.M.cssVarList)}\n\t\tvaadin-text-field {\n\t\t\tpadding: 0;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t\tvaadin-text-field::part(input-field) {\n\t\t\tmin-height: 0;\n\t\t\tbackground: transparent;\n\t\t\tbox-shadow: none;\n\t\t\tpadding: 0;\n\t\t}\n\t\tvaadin-text-field::part(input-field)::after {\n\t\t\tbackground: transparent;\n\t\t\topacity: 0;\n\t\t}\n\t\tdescope-new-password-internal {\n\t\t\t-webkit-mask-image: none;\n\t\t\tmin-height: 0;\n\t\t\twidth: 100%;\n\t\t\tpadding: 0;\n\t\t}\n\t\tdescope-new-password-internal > .wrapper {\n -webkit-mask-image: none;\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t}\n\t\tdescope-password {\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t}\n\t\tdescope-new-password-internal vaadin-password-field::before {\n\t\t\theight: initial;\n\t\t}\n descope-policy-validation {\n margin-top: 8px;\n display: flex;\n }\n .hidden {\n display: none;\n }\n\t\t`,excludeAttrsSync:["tabindex","style"],componentName:d}))},8877(t,e,i){i.d(e,{T:()=>r});const r=(0,i(97810).xE)("new-password-internal")},78844(t,e,i){var r=i(25964),s=i(3393),o=i(97810),n=i(87455),a=i(8877);const l=/^password-/,p=/^confirm-/,d=(t,e)=>t.replace(e,""),c=["password-label","password-placeholder"],u=["confirm-label","confirm-placeholder"],h=["has-validation","policy-label","available-policies","active-policies","data-password-policy-value-minlength","data-password-policy-value-passwordstrength","data-password-policy-value-disallowedchars","data-password-policy-value-email","data-password-policy-value-reuse","manual-visibility-toggle"],g=["has-confirm","disabled","bordered","size","full-width","maxlength","invalid","readonly","draggable","autocomplete","label-type","manual-visibility-toggle"],b=[].concat(g,c,u,h),y=(0,s.y)({componentName:a.T,baseSelector:"div"});customElements.define(a.T,class extends y{static get observedAttributes(){return[].concat(y.observedAttributes||[],b)}constructor(){super(),this.innerHTML='\n\t\t\t<div class="wrapper"></div>\n\t\t',this.wrapperEle=this.querySelector(".wrapper")}get value(){return this.passwordInput?.value||""}set value(t){t!==this.value&&(this.passwordInput.value=t)}get hasConfirm(){return"true"===this.getAttribute("has-confirm")}onHasConfirmChange(t){this.confirmInput.classList.toggle("hidden",!t)}onHasValidationChange(t){this.policyPanel.classList.toggle("hidden",!t)}get hasValidation(){return"true"===this.getAttribute("has-validation")}getValidity(){if(this.isRequired&&!this.value)return{valueMissing:!0};if(this.value&&!this.policyPanel.isValid)return{typeMismatch:!0};if(this.hasConfirm&&this.confirmInput&&this.value!==this.confirmInput.value)return{patternMismatch:!0};const t=this.getAttribute("minlength"),e=parseInt(t,10)||0;return this.value.length>=e?{}:{tooShort:!0}}init(){this.addEventListener("focus",t=>{t.isTrusted&&this.passwordInput.focus()}),super.init?.(),this.renderInputs(this.hasConfirm,this.hasValidation)}renderInputs(){const t="true"===this.getAttribute("external-input"),e=`\n <div class="password-input-container">\n <descope-password\n autocomplete="new-password"\n manual-visibility-toggle="true"\n data-id="password"\n external-input="${t}"\n ></descope-password>\n <descope-policy-validation></descope-policy-validation>\n </div>\n <descope-password\n autocomplete="new-password"\n manual-visibility-toggle="true"\n external-input="${t}"\n data-id="confirm"\n ></descope-password>\n `;this.wrapperEle.innerHTML=e,this.passwordInput=this.querySelector('[data-id="password"]'),this.confirmInput=this.querySelector('[data-id="confirm"]'),this.policyPanel=this.querySelector("descope-policy-validation"),this.passwordStrength=this.querySelector("descope-password-strength"),this.inputs=[this.passwordInput,this.confirmInput],this.initInputs(),this.passwordInput.addEventListener("input",t=>{this.passwordStrength?.addEventListener("score-changed",({detail:t})=>{this.policyPanel.setAttribute("data-password-policy-actual-passwordstrength",t)},{once:!0}),this.passwordStrength?.setAttribute("value",t.target.value),this.policyPanel.setAttribute("value",t.target.value)}),(0,o.EA)(this,this.policyPanel,{includeAttrs:h,mapAttrs:{"policy-label":"label","available-policies":"data"}})}handleIndicatorStyle(){this.inputs.forEach(t=>{(0,r.fz)(`\n\t\t\t\t:host ::part(required-indicator)::after {\n\t\t\t\t\tcontent: var(${n.M.cssVarList.inputsRequiredIndicator});\n width: 1em;\n text-align: center;\n\t\t\t\t}\n :host ::part(required-indicator) {\n display: inline-flex;\n }\n\t\t\t\t`,t)})}get isInvalid(){return this.hasAttribute("invalid")&&"false"!==this.getAttribute("invalid")}handleInputsInvalidAttribute(){this.inputs.forEach(t=>{t&&(0,o.mx)(t,e=>{if(e.includes("invalid")){const e=t.getAttribute("invalid"),i=this.getAttribute("invalid");this.isInvalid&&i!==e&&t.setAttribute("invalid","true")}},{})})}initInputs(){this.handleIndicatorStyle(),this.handleInputsInvalidAttribute(),this.handleFocusEventsDispatching(this.inputs)}async togglePasswordStrength(){this.activePolicies.includes("passwordstrength")?this.passwordStrength||(await Promise.all([i.e(8961),i.e(3241)]).then(i.bind(i,13241)),this.passwordStrength=document.createElement("descope-password-strength"),this.passwordStrength.setAttribute("options","Very weak,Weak,Average,Strong,Very strong"),this.passwordStrength.setAttribute("value",this.passwordInput.value||""),this.passwordStrength.setAttribute("st-host-direction",this.getAttribute("st-host-direction")),this.passwordStrength.setAttribute("full-width","true"),this.querySelector(".password-input-container").insertBefore(this.passwordStrength,this.policyPanel)):this.passwordStrength&&(this.passwordStrength.remove(),this.passwordStrength=null)}get activePolicies(){return(this.getAttribute("active-policies")||"").split(",")}toggleBooleanAttribute(t,e,i){null===i?t?.removeAttribute(e):t?.setAttribute(e,i)}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i),e!==i&&("has-validation"===t?this.onHasValidationChange("true"===i):"has-confirm"===t?this.onHasConfirmChange("true"===i):g.includes(t)?this.inputs.forEach(e=>this.toggleBooleanAttribute(e,t,i)):c.includes(t)?this.toggleBooleanAttribute(this.passwordInput,d(t,l),i):u.includes(t)&&this.toggleBooleanAttribute(this.confirmInput,d(t,p),i),"active-policies"===t&&this.togglePasswordStrength())}})},5810(t,e,i){i.d(e,{M:()=>m,T:()=>l});var r=i(79365),s=i(9696),o=i(97810),n=i(16616),a=i(73551);const l=(0,o.xE)("password"),{host:p,inputField:d,inputElement:c,inputElementPlaceholder:u,revealButtonContainer:h,revealButtonIcon:g,label:b,requiredIndicator:y,errorMessage:w,helperText:v}={host:{selector:()=>":host"},inputField:{selector:"::part(input-field)"},inputElement:{selector:"> input"},inputElementPlaceholder:{selector:()=>":host input:placeholder-shown"},revealButtonContainer:{selector:"::part(reveal-button)"},revealButtonIcon:{selector:"::part(reveal-button)::before"},label:{selector:"::part(label)"},requiredIndicator:{selector:"[required]::part(required-indicator)::after"},helperText:{selector:"::part(helper-text)"},errorMessage:{selector:"::part(error-message)"}},m=(0,s.Zz)((0,r.RF)({mappings:{hostWidth:{...p,property:"width"},hostMinWidth:{...p,property:"min-width"},hostDirection:{...p,property:"direction"},fontSize:[{},p],fontFamily:[b,d,w,v],inputHeight:{...d,property:"height"},inputHorizontalPadding:[{...c,property:"padding-left"},{...c,property:"padding-right"}],inputBackgroundColor:{...d,property:"background-color"},inputBorderStyle:{...d,property:"border-style"},inputBorderWidth:{...d,property:"border-width"},inputBorderColor:{...d,property:"border-color"},inputBorderRadius:{...d,property:"border-radius"},inputOutlineColor:{...d,property:"outline-color"},inputOutlineStyle:{...d,property:"outline-style"},inputOutlineOffset:{...d,property:"outline-offset"},inputOutlineWidth:{...d,property:"outline-width"},labelFontSize:{...b,property:"font-size"},labelFontWeight:{...b,property:"font-weight"},inputValueFontWeight:[{...c,property:"font-weight"},{selector:()=>":host ::slotted(input)",property:"font-weight"}],inputPlaceholderFontWeight:[{...u,property:"font-weight"},{selector:()=>":host ::slotted(input:placeholder-shown)",property:"font-weight"}],helperTextFontWeight:{...v,property:"font-weight"},errorMessageFontWeight:{...w,property:"font-weight"},labelTextColor:[{...b,property:"color"},{...b,property:"-webkit-text-fill-color"},{...y,property:"color"},{...y,property:"-webkit-text-fill-color"}],labelRequiredIndicator:{...y,property:"content"},errorMessageTextColor:{...w,property:"color"},errorMessageIcon:{...w,property:"background-image"},errorMessageIconSize:{...w,property:"background-size"},errorMessageIconPadding:{...w,property:"padding-inline-start"},errorMessageIconRepeat:{...w,property:"background-repeat"},errorMessageIconPosition:{...w,property:"background-position"},errorMessageFontSize:{...w,property:"font-size"},inputPlaceholderTextColor:[{...u,property:"color"},{selector:()=>":host ::slotted(input:placeholder-shown)",property:"color"}],inputValueTextColor:[{...c,property:"color"},{selector:()=>":host ::slotted(input)",property:"color"}],revealButtonOffset:[{...h,property:"margin-right"},{...h,property:"margin-left"}],revealButtonSize:{...h,property:"font-size"},revealButtonColor:{...g,property:"color"},labelPosition:{...b,property:"position"},labelTopPosition:{...b,property:"top"},labelHorizontalPosition:[{...b,property:"left"},{...b,property:"right"}],inputTransformY:{...b,property:"transform"},inputTransition:{...b,property:"transition"},marginInlineStart:{...b,property:"margin-inline-start"},placeholderOpacity:[{selector:"> input:placeholder-shown",property:"opacity"},{...c,property:"opacity"}],inputVerticalAlignment:{...d,property:"align-items"},valueInputHeight:{...c,property:"height"}}}),r.VO,(0,r.RV)({inputType:"password",inputName:"password",includeAttrs:["disabled","readonly","pattern","type","autocomplete"],noBlurDispatch:!0}),(0,r.OZ)({proxyProps:["value","selectionStart"],useProxyTargets:!0}),r.tQ,n.A,t=>class extends t{static get observedAttributes(){return["manual-visibility-toggle"]}get manualToggleVisibility(){return"true"===this.getAttribute("manual-visibility-toggle")}init(){super.init?.(),this.handleCaretOnVisibilityChange(),this.origSetPasswordVisible=this.baseElement._setPasswordVisible,this.origSetFocused=this.baseElement._setFocused,this.baseElement._setFocused=this.setFocus.bind(this),this.initExternalInput(),this.stopRevealButtonEnterPropagation()}stopRevealButtonEnterPropagation(){this.revealButton?.addEventListener("keydown",t=>{"Enter"===t.key&&t.stopPropagation()})}get revealButton(){return this.baseElement.querySelector("vaadin-password-field-button")}initExternalInput(){const t=this.createExternalInput();t&&this.handlePasswordVisibility(t)}get caretPosition(){return this.value?.length||0}handleCaretOnVisibilityChange(){const t=this.baseElement._togglePasswordVisibility.bind(this.baseElement);this.baseElement._togglePasswordVisibility=()=>{setTimeout(()=>(t(),this.inputElement.setSelectionRange(this.caretPosition,this.caretPosition),!1))}}setFocus(t){this.manualToggleVisibility&&(this.baseElement._setPasswordVisible=()=>{}),this.origSetFocused.call(this.baseElement,t),this.baseElement._setPasswordVisible=this.origSetPasswordVisible.bind(this.baseElement)}resetPasswordVisibilityToggle(){this.baseElement._setPasswordVisible=this.origSetPasswordVisible,this.baseElement._setFocused=this.origSetFocus}attributeChangedCallback(t,e,i){super.attributeChangedCallback?.(t,e,i)}handlePasswordVisibility(t){const e=this.baseElement.__boundRevealButtonMouseDown;this.revealButton?.removeEventListener("mousedown",e),this.baseElement._passwordVisibleChanged=()=>{},this.baseElement._togglePasswordVisibility=()=>{"password"===t.getAttribute("type")?this.showPasswordVisibility(t):this.hidePasswordVisibility(t)}}showPasswordVisibility(t){t.setAttribute("type","text"),this.setAttribute("password-visible","true")}hidePasswordVisibility(t){t.setAttribute("type","password"),this.setAttribute("password-visible","false")}})((0,r.tz)({slots:["","suffix"],wrappedEleName:"vaadin-password-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\tmin-width: 10em;\n box-sizing: border-box;\n position: relative;\n\t\t\t}\n\t\t\t${(0,a.cy)(m.cssVarList)}\n\t\t\t${(0,a.I4)("vaadin-password-field")}\n ${(0,a.$J)("vaadin-password-field")}\n ${(0,a.AI)("vaadin-password-field",m.cssVarList)}\n\n\t\t\tvaadin-password-field {\n\t\t\t\twidth: 100%;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t\tvaadin-password-field > input {\n -webkit-mask-image: none;\n\t\t\t\tbox-sizing: border-box;\n opacity: 1;\n\t\t\t}\n\t\t\tvaadin-password-field::part(input-field) {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tpadding: 0;\n\t\t\t}\n\t\t\tvaadin-password-field[focus-ring]::part(input-field) {\n\t\t\t\tbox-shadow: none;\n\t\t\t}\n :host ::slotted(input) {\n\t\t\t\tmin-height: 0;\n }\n :host([readonly]) ::slotted(input:placeholder-shown) {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\tvaadin-password-field::before {\n\t\t\t\theight: initial;\n\t\t\t}\n\t\t\tvaadin-password-field::part(input-field)::after {\n\t\t\t\topacity: 0;\n\t\t\t}\n\t\t\tvaadin-password-field-button {\n\t\t\t\tcursor: pointer;\n\t\t\t}\n\t\t\t:host([readonly]) vaadin-password-field-button {\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\tvaadin-password-field-button[focus-ring] {\n\t\t\t\tbox-shadow: 0 0 0 2px var(${m.cssVarList.inputOutlineColor});\n\t\t\t}\n\n ${(0,a.Kl)()}\n\n ::part(reveal-button) {\n align-self: center;\n }\n\n vaadin-password-field[external-input="true"] > input:not(:placeholder-shown) {\n opacity: 0;\n }\n\t\t`,excludeAttrsSync:["tabindex","style"],componentName:l}))},16616(t,e,i){i.d(e,{A:()=>r});const r=t=>class extends t{get isReadOnly(){return this.hasAttribute("readonly")&&"false"!==this.getAttribute("readonly")}init(){super.init?.();const t=this.querySelector("input");t?.addEventListener("mousedown",e=>{if(this.isDraggable&&this.isReadOnly){t.setAttribute("inert","true");const i=e.target,r=i.getAttribute("type");i.setAttribute("type","text"),setTimeout(()=>{i.focus()});const s=e=>{i.setAttribute("type",r),t.removeAttribute("inert"),this.removeEventListener("mouseup",s),this.removeEventListener("dragend",s)};this.addEventListener("dragend",s,{once:!0}),this.addEventListener("mouseup",s,{once:!0})}})}}},10777(t,e,i){i.d(e,{T:()=>p,w:()=>v});var r=i(25964),s=i(79365),o=i(81365),n=i(9696),a=i(97810),l=i(88191);const p=(0,a.xE)("policy-validation"),d=["data","active-policies","overrides","data-password-policy-value-minlength","data-password-policy-value-passwordstrength","data-password-policy-actual-passwordstrength","data-password-policy-value-disallowedchars","data-password-policy-value-email","data-password-policy-value-reuse"],c=["label","value",...d];class u extends((0,o.q)({componentName:p,baseSelector:":host > div"})){#t;#e=[];#i;static get observedAttributes(){return c}constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <div>\n <div class="label"></div>\n <ul></ul>\n </div>\n\t\t',(0,r.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(t,e,i){if(super.attributeChangedCallback?.(t,e,i),e!==i){if("label"===t&&this.updateLabel(i),d.includes(t)){if("data"===t)try{this.availablePolicies=JSON.parse(i)}catch{console.error("Failed to set available policies")}if("active-policies"===t&&(this.#e=(i||"").split(",")),"data-password-policy-value-minlength"===t){const t=Number(i);!Number.isNaN(t)&&t>0&&(this.#i={...this.#i,minlength:{value:`${t}`}})}if("data-password-policy-value-reuse"===t){const t=Number(i);!Number.isNaN(t)&&t>0&&(this.#i={...this.#i,reuse:{value:`${t}`}})}if("data-password-policy-value-passwordstrength"===t){const t=parseInt(i);!Number.isNaN(t)&&t>=0&&(this.#i={...this.#i,passwordstrength:{...this.#i?.passwordstrength,expected:t}})}if("data-password-policy-actual-passwordstrength"===t){const t=Number(i);!Number.isNaN(t)&&t>=0&&(this.#i={...this.#i,passwordstrength:{...this.#i?.passwordstrength,actual:t}})}if("data-password-policy-value-disallowedchars"===t)if(i)this.#i={...this.#i,disallowedchars:{...this.#i?.disallowedchars,value:i}};else if(this.#i?.disallowedchars){const{disallowedchars:t,...e}=this.#i;this.#i=e}if("data-password-policy-value-email"===t)if(i)this.#i={...this.#i,disallowemail:{...this.#i?.disallowemail,expected:i}};else if(this.#i?.disallowemail){const{disallowemail:t,...e}=this.#i;this.#i=e}}this.renderItems(this.#t,this.#e,this.#i)}}get availablePolicies(){return this.#t||[]}set availablePolicies(t){this.#t=t}get value(){return this.getAttribute("value")||""}getStrengthScore(){return this.value.length}compareValues(t,e,i){switch(t.toUpperCase()){case"GTE":return i>=e;case"GT":return i>e;case"LTE":return i<=e;case"LT":return i<e;case"EQ":return i===e;case"NEQ":return i!==e;default:throw new Error(`Invalid comparison type: ${t}`)}}validate(){let t=this.#t;return this.#i&&(t=this.#t.map(t=>{const e=this.#i[t.id];return e?{...t,data:e}:t})),this.#e.reduce((e,i)=>{const r=t.find(t=>t.id===i);if(!r)return e;const{pattern:s,message:o,data:n,compare:a,info:p}=r,d="string"==typeof a?a.toUpperCase():a;if(!s&&!a&&!p||!o)return e;const c={message:(0,l.z)(o,n),id:i};if(p)c.info=!0;else if(s){const t=new RegExp((0,l.z)(s,n));c.valid=t.test(this.value)}else if("STR_NEQ_CI"===d){const t=(n?.expected??"").toLowerCase(),e=(this.value??"").toLowerCase();if(t&&e){const i=t.indexOf("@"),r=i>0?t.slice(0,i):t;c.valid=e!==t&&e!==r}else c.valid=!0}else a&&(c.valid=this.compareValues(d,n?.expected??-1,n?.actual??-1));return e.push(c),e},[]).sort((t,e)=>Number(!!t.info)-Number(!!e.info))}get isValid(){return!this.validate().some(({valid:t})=>!1===t)}buildValidationItem({valid:t,message:e,info:i}){const r=!this.value||i?"none":t,s=document.createElement("li");s.className="item",s.dataset.valid=r;const o=document.createElement("span");return o.className="message",o.textContent=e??"",s.appendChild(o),s}renderItems(t,e){t&&e.length&&this.list.replaceChildren(...this.validate().map(this.buildValidationItem.bind(this)))}updateLabel(t){t?(this.label.textContent=t,this.classList.remove("hide-label")):(this.classList.add("hide-label"),this.label.textContent="")}}const{host:h,item:g,symbolDefault:b,symbolSuccess:y,symbolError:w}={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'}},v=(0,n.Zz)((0,s.RF)({componentNameOverride:(0,a.xE)("input-wrapper")}),(0,s.RF)({mappings:{hostDirection:{selector:()=>":host",property:"direction"},fontSize:{},fontFamily:{},padding:{},borderWidth:{...h,property:"border-width"},borderStyle:{...h,property:"border-style"},borderColor:{...h,property:"border-color"},borderRadius:{...h,property:"border-radius"},backgroundColor:{...h,property:"background-color"},textColor:{property:"color"},labelMargin:{...h,property:"gap"},itemsSpacing:{...g,property:"line-height"},itemSymbolSuccessColor:{...y,property:"color"},itemSymbolErrorColor:{...w,property:"color"},itemSymbolDefault:{...b,property:"content"},itemSymbolSuccess:{...y,property:"content"},itemSymbolError:{...w,property:"content"}}}),s.VO,s.tQ)(u)},88191(t,e,i){i.d(e,{z:()=>r});const r=(t,e)=>t.replace(/{{(\w+)+}}/g,(t,i)=>e?.[i]||t)}}]);
|
|
2
2
|
//# sourceMappingURL=descope-new-password-descope-new-password-internal-index-js.js.map
|