@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
3 lines (2 loc) • 4.33 kB
JavaScript
(function(n,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("../common/index.umd.js"),require("vue")):typeof define=="function"&&define.amd?define(["exports","../common/index.umd.js","vue"],s):(n=typeof globalThis<"u"?globalThis:n||self,s(n.textarea={},n.common,n.Vue))})(this,function(n,s,a){"use strict";const m={autoHeight:{type:Boolean,default:!1},autofocus:{type:Boolean,default:!1},autocomplete:{type:Boolean,default:!1},allowUnlimtedWhenEmpty:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},enableClear:{type:Boolean,default:!1},id:{type:String,default:""},minLength:{type:Number,default:0},maxLength:{type:Number},modelValue:{type:String,default:""},placeholder:{type:String,default:""},readonly:{type:Boolean,default:!1},editable:{type:Boolean,default:!0},rows:{type:Number},resizable:{type:Boolean,default:!1},showCount:{type:Boolean,default:!1},showBorder:{Type:Boolean,default:!0},tabIndex:{type:Number,default:-1},focusOnCreated:{type:Boolean,default:!1},selectOnCreated:{type:Boolean,default:!1},updateOn:{type:String,default:"blur"},lineBreak:{type:String,default:"enter"},customClass:{type:String,default:""},customStyle:{type:String,default:""}},y=a.defineComponent({name:"FTextarea",props:m,emits:["clear","change","blur","click","clickHandle","focus","input","keydown","keyup","iconMouseEnter","iconMouseLeave","update:modelValue","update:value","updateExtendInfo","valueChange","mousedownEvent","mouseupEvent"],setup(e,l){const{isUndefined:R}=s.useCommonUtils(),h=a.ref(),o=a.ref(null),C=a.ref(""),u=a.ref(""),g=s.useTextBox(e,l,u,C,h),{inputGroupClass:B,onBlur:x,onFocus:w,onMousedown:S,onMouseup:b,onTextBoxValueChange:V,hasFocused:M,maxLength:f}=g,T=s.useClear(e,l,g),{onMouseEnter:E,onMouseLeave:N,clearButtonClass:k,shouldShowClearButton:O,clearButtonStyle:I}=T,L=t=>{var d,i,r,c;t.stopPropagation(),l.emit("input",(d=t.target)==null?void 0:d.value),e.updateOn==="change"&&(l.emit("update:modelValue",(i=t.target)==null?void 0:i.value),l.emit("valueChange",(r=t.target)==null?void 0:r.value),l.emit("change",(c=t.target)==null?void 0:c.value))},P=t=>{t.stopPropagation(),o.value.value="",l.emit("update:modelValue",""),l.emit("valueChange",""),l.emit("change","")},F=t=>{if(e.readonly||!M)return;const{altKey:d,key:i}=t;if(i==="Enter"&&!d&&e.lineBreak==="alt enter"){t.preventDefault();return}if(d&&i==="Enter"&&e.lineBreak==="alt enter"){t.stopPropagation(),t.preventDefault();const{selectionStart:r,selectionEnd:c}=o.value;u.value=u.value.slice(0,r)+`
`+u.value.slice(c),a.nextTick(()=>{var v;o.value.selectionStart=r+1,o.value.selectionEnd=r+1,(v=o.value)==null||v.focus()}),e.updateOn==="change"&&(l.emit("update:modelValue",u.value),l.emit("valueChange",u.value),l.emit("change",u.value));return}},j=a.computed(()=>({"form-control":!0,"h-100":e.autoHeight})),U=a.computed(()=>{const t={};return e.resizable||(t.resize="none"),e.rows>2?{height:"auto",...t}:t}),z=a.computed(()=>e.disabled||e.readonly?"":e.placeholder),A=()=>o.value;l.expose({elementRef:o,getTextareaElement:A});function D(){var t,d;e.selectOnCreated&&((t=o.value)==null||t.select()),e.focusOnCreated&&((d=o.value)==null||d.focus({preventScroll:!0}))}const H=a.computed(()=>s.getCustomStyle({position:"relative"},e.customStyle));a.onMounted(()=>{D()});const K=()=>{const t=u.value.length;return f.value&&a.createVNode("div",{class:"word-count"},[a.createVNode("span",{class:"word-count-text"},[`${t}/${f.value}`])])};return()=>a.createVNode("div",{ref:h,class:B.value,onMouseenter:E,onMouseleave:N,style:H.value},[a.createVNode("div",{class:"f-textarea-wrap"},[a.withDirectives(a.createVNode("textarea",{ref:o,class:j.value,id:e.id,"onUpdate:modelValue":t=>u.value=t,minlength:e.minLength,maxlength:f.value,tabindex:e.tabIndex,disabled:e.disabled,readonly:e.readonly,autocomplete:e.autocomplete,placeholder:z.value,autofocus:e.autofocus,rows:e.rows,onInput:L,onFocus:w,onChange:V,onKeydown:F,onBlur:x,onMousedown:S,onMouseup:b,style:U.value},null),[[a.vModelText,u.value]]),O.value&&a.createVNode("span",{id:"clearIcon",class:k.value,style:I.value,onClick:t=>P(t)},[a.createVNode("i",{class:"f-icon modal_close"},null)]),e.showCount&&K()])])}}),p=s.withInstall(y);n.FTextarea=y,n.default=p,n.textAreaProps=m,Object.defineProperties(n,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});