You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 lines
7.9 KiB

import{J as he,K as be,a as ve,L as ye,M as Ie,c as Se,n as _,m as w,A as Ce,e as ke,d as xe,D as Ve,h as K,u as Ee,N as we,O as Me,F as Te,f as I,Q as H,R as Le,j as P,I as A,S as Pe,w as Ae}from"./index-f3701452.js";import{c as Re,C as Be}from"./index-4e4a8600.js";import{D as _e,d as Oe,q as De,r as R,f as S,p as Ne,O as ze,J as E,P as Fe,b as d,aP as We,h as $e}from"./index-f4658ae7.js";let qe=0;function je(){const t=_e(),{name:r="unknown"}=(t==null?void 0:t.type)||{};return`${r}-${++qe}`}function Y(t){return Array.isArray(t)?!t.length:t===0?!1:!t}function Ke(t,r){if(Y(t)){if(r.required)return!1;if(r.validateEmpty===!1)return!0}return!(r.pattern&&!r.pattern.test(String(t)))}function He(t,r){return new Promise(l=>{const f=r.validator(t,r);if(ye(f)){f.then(l);return}l(f)})}function J(t,r){const{message:l}=r;return Ie(l)?l(t,r):l||""}function Je({target:t}){t.composing=!0}function U({target:t}){t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}function Ue(t,r){const l=he();t.style.height="auto";let f=t.scrollHeight;if(ve(r)){const{maxHeight:i,minHeight:c}=r;i!==void 0&&(f=Math.min(f,i)),c!==void 0&&(f=Math.max(f,c))}f&&(t.style.height=`${f}px`,be(l))}function Ye(t){return t==="number"?{type:"text",inputmode:"decimal"}:t==="digit"?{type:"tel",inputmode:"numeric"}:{type:t}}function v(t){return[...t].length}function B(t,r){return[...t].slice(0,r).join("")}const[Qe,m]=Se("field"),Ge={id:String,name:String,leftIcon:String,rightIcon:String,autofocus:Boolean,clearable:Boolean,maxlength:_,formatter:Function,clearIcon:w("clear"),modelValue:Ce(""),inputAlign:String,placeholder:String,autocomplete:String,autocapitalize:String,autocorrect:String,errorMessage:String,enterkeyhint:String,clearTrigger:w("focus"),formatTrigger:w("onChange"),spellcheck:{type:Boolean,default:null},error:{type:Boolean,default:null},disabled:{type:Boolean,default:null},readonly:{type:Boolean,default:null}},Xe=ke({},Re,Ge,{rows:_,type:w("text"),rules:Array,autosize:[Boolean,Object],labelWidth:_,labelClass:xe,labelAlign:String,showWordLimit:Boolean,errorMessageAlign:String,colon:{type:Boolean,default:null}});var Ze=Oe({name:Qe,props:Xe,emits:["blur","focus","clear","keypress","clickInput","endValidate","startValidate","clickLeftIcon","clickRightIcon","update:modelValue"],setup(t,{emit:r,slots:l}){const f=je(),i=De({status:"unvalidated",focused:!1,validateMessage:""}),c=R(),O=R(),M=R(),{parent:h}=Ve(Te),y=()=>{var e;return String((e=t.modelValue)!=null?e:"")},u=e=>{if(I(t[e]))return t[e];if(h&&I(h.props[e]))return h.props[e]},Q=S(()=>{const e=u("readonly");if(t.clearable&&!e){const n=y()!=="",a=t.clearTrigger==="always"||t.clearTrigger==="focus"&&i.focused;return n&&a}return!1}),D=S(()=>M.value&&l.input?M.value():t.modelValue),G=S(()=>{var e;const n=u("required");return n==="auto"?(e=t.rules)==null?void 0:e.some(a=>a.required):n}),X=e=>e.reduce((n,a)=>n.then(()=>{if(i.status==="failed")return;let{value:o}=D;if(a.formatter&&(o=a.formatter(o,a)),!Ke(o,a)){i.status="failed",i.validateMessage=J(o,a);return}if(a.validator)return Y(o)&&a.validateEmpty===!1?void 0:He(o,a).then(s=>{s&&typeof s=="string"?(i.status="failed",i.validateMessage=s):s===!1&&(i.status="failed",i.validateMessage=J(o,a))})}),Promise.resolve()),C=()=>{i.status="unvalidated",i.validateMessage=""},N=()=>r("endValidate",{status:i.status,message:i.validateMessage}),z=(e=t.rules)=>new Promise(n=>{C(),e?(r("startValidate"),X(e).then(()=>{i.status==="failed"?(n({name:t.name,message:i.validateMessage}),N()):(i.status="passed",n(),N())})):n()}),T=e=>{if(h&&t.rules){const{validateTrigger:n}=h.props,a=H(n).includes(e),o=t.rules.filter(s=>s.trigger?H(s.trigger).includes(e):a);o.length&&z(o)}},Z=e=>{var n;const{maxlength:a}=t;if(I(a)&&v(e)>+a){const o=y();if(o&&v(o)===+a)return o;const s=(n=c.value)==null?void 0:n.selectionEnd;if(i.focused&&s){const g=[...e],b=g.length-+a;return g.splice(s-b,b),g.join("")}return B(e,+a)}return e},k=(e,n="onChange")=>{const a=e;e=Z(e);const o=v(a)-v(e);if(t.type==="number"||t.type==="digit"){const g=t.type==="number";e=Le(e,g,g)}let s=0;if(t.formatter&&n===t.formatTrigger){const{formatter:g,maxlength:b}=t;if(e=g(e),I(b)&&v(e)>+b&&(e=B(e,+b)),c.value&&i.focused){const{selectionEnd:V}=c.value,j=B(a,V);s=v(g(j))-v(j)}}if(c.value&&c.value.value!==e)if(i.focused){let{selectionStart:g,selectionEnd:b}=c.value;if(c.value.value=e,I(g)&&I(b)){const V=v(e);o?(g-=o,b-=o):s&&(g+=s,b+=s),c.value.setSelectionRange(Math.min(g,V),Math.min(b,V))}}else c.value.value=e;e!==t.modelValue&&r("update:modelValue",e)},p=e=>{e.target.composing||k(e.target.value)},L=()=>{var e;return(e=c.value)==null?void 0:e.blur()},F=()=>{var e;return(e=c.value)==null?void 0:e.focus()},x=()=>{const e=c.value;t.type==="textarea"&&t.autosize&&e&&Ue(e,t.autosize)},ee=e=>{i.focused=!0,r("focus",e),E(x),u("readonly")&&L()},te=e=>{i.focused=!1,k(y(),"onBlur"),r("blur",e),!u("readonly")&&(T("onBlur"),E(x),Pe())},W=e=>r("clickInput",e),ne=e=>r("clickLeftIcon",e),ae=e=>r("clickRightIcon",e),re=e=>{P(e),r("update:modelValue",""),r("clear",e)},$=S(()=>{if(typeof t.error=="boolean")return t.error;if(h&&h.props.showError&&i.status==="failed")return!0}),ie=S(()=>{const e=u("labelWidth"),n=u("labelAlign");if(e&&n!=="top")return{width:K(e)}}),le=e=>{e.keyCode===13&&(!(h&&h.props.submitOnEnter)&&t.type!=="textarea"&&P(e),t.type==="search"&&L()),r("keypress",e)},q=()=>t.id||`${f}-input`,oe=()=>i.status,se=()=>{const e=m("control",[u("inputAlign"),{error:$.value,custom:!!l.input,"min-height":t.type==="textarea"&&!t.autosize}]);if(l.input)return d("div",{class:e,onClick:W},[l.input()]);const n={id:q(),ref:c,name:t.name,rows:t.rows!==void 0?+t.rows:void 0,class:e,disabled:u("disabled"),readonly:u("readonly"),autofocus:t.autofocus,placeholder:t.placeholder,autocomplete:t.autocomplete,autocapitalize:t.autocapitalize,autocorrect:t.autocorrect,enterkeyhint:t.enterkeyhint,spellcheck:t.spellcheck,"aria-labelledby":t.label?`${f}-label`:void 0,onBlur:te,onFocus:ee,onInput:p,onClick:W,onChange:U,onKeypress:le,onCompositionend:U,onCompositionstart:Je};return t.type==="textarea"?d("textarea",n,null):d("input",We(Ye(t.type),n),null)},ce=()=>{const e=l["left-icon"];if(t.leftIcon||e)return d("div",{class:m("left-icon"),onClick:ne},[e?e():d(A,{name:t.leftIcon,classPrefix:t.iconPrefix},null)])},ue=()=>{const e=l["right-icon"];if(t.rightIcon||e)return d("div",{class:m("right-icon"),onClick:ae},[e?e():d(A,{name:t.rightIcon,classPrefix:t.iconPrefix},null)])},de=()=>{if(t.showWordLimit&&t.maxlength){const e=v(y());return d("div",{class:m("word-limit")},[d("span",{class:m("word-num")},[e]),$e("/"),t.maxlength])}},fe=()=>{if(h&&h.props.showErrorMessage===!1)return;const e=t.errorMessage||i.validateMessage;if(e){const n=l["error-message"],a=u("errorMessageAlign");return d("div",{class:m("error-message",a)},[n?n({message:e}):e])}},ge=()=>{const e=u("labelWidth"),n=u("labelAlign"),a=u("colon")?":":"";if(l.label)return[l.label(),a];if(t.label)return d("label",{id:`${f}-label`,for:l.input?void 0:q(),onClick:o=>{P(o),F()},style:n==="top"&&e?{width:K(e)}:void 0},[t.label+a])},me=()=>[d("div",{class:m("body")},[se(),Q.value&&d(A,{ref:O,name:t.clearIcon,class:m("clear")},null),ue(),l.button&&d("div",{class:m("button")},[l.button()])]),de(),fe()];return Ee({blur:L,focus:F,validate:z,formValue:D,resetValidation:C,getValidationStatus:oe}),Ne(we,{customValue:M,resetValidation:C,validateWithTrigger:T}),ze(()=>t.modelValue,()=>{k(y()),C(),T("onChange"),E(x)}),Fe(()=>{k(y(),t.formatTrigger),E(x)}),Me("touchstart",re,{target:S(()=>{var e;return(e=O.value)==null?void 0:e.$el})}),()=>{const e=u("disabled"),n=u("labelAlign"),a=ce(),o=()=>{const s=ge();return n==="top"?[a,s].filter(Boolean):s||[]};return d(Be,{size:t.size,class:m({error:$.value,disabled:e,[`label-${n}`]:n}),center:t.center,border:t.border,isLink:t.isLink,clickable:t.clickable,titleStyle:ie.value,valueClass:m("value"),titleClass:[m("label",[n,{required:G.value}]),t.labelClass],arrowDirection:t.arrowDirection},{icon:a&&n!=="top"?()=>a:null,title:o,value:me,extra:l.extra})}}});const nt=Ae(Ze);export{nt as F,Ge as f,je as u};