@davincihealthcare/elty-design-system-vue 1.87.0 → 1.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,10 @@ declare const _default: import('vue').DefineComponent<{
9
9
  type: NumberConstructor;
10
10
  default: number;
11
11
  };
12
+ hideCharacterCounter: {
13
+ type: BooleanConstructor;
14
+ default: boolean;
15
+ };
12
16
  textareaClass: {
13
17
  type: StringConstructor;
14
18
  default: string;
@@ -72,6 +76,10 @@ declare const _default: import('vue').DefineComponent<{
72
76
  type: NumberConstructor;
73
77
  default: number;
74
78
  };
79
+ hideCharacterCounter: {
80
+ type: BooleanConstructor;
81
+ default: boolean;
82
+ };
75
83
  textareaClass: {
76
84
  type: StringConstructor;
77
85
  default: string;
@@ -138,6 +146,7 @@ declare const _default: import('vue').DefineComponent<{
138
146
  validation: import('./validation-rules').InputValidation;
139
147
  resizable: boolean;
140
148
  maxCharacters: number;
149
+ hideCharacterCounter: boolean;
141
150
  textareaClass: string;
142
151
  focusOnMount: boolean;
143
152
  }, {}>;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),y=require("./ElInputContainer.vue.cjs2.js"),u=require("./input.cjs.js"),b=["id","name","placeholder","disabled","data-cy"],M=e.defineComponent({__name:"ElInputTextarea",props:{...u.withTextualElInputProps(),resizable:{type:Boolean,default:!0},maxCharacters:{type:Number,default:-1},textareaClass:{type:String,default:"min-h-20"},focusOnMount:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(r,{emit:m}){const l=e.ref(),t=r;e.onMounted(()=>{var a;t.focusOnMount&&((a=l.value)==null||a.focus())});const c=m,p=e.computed(()=>t.modelValue),f=e.computed(()=>[`max:${t.maxCharacters>0?t.maxCharacters:1e3}`,t.validation]),{value:n,errorMessage:v,uuid:d,fieldContext:h}=u.useInput(p,f,t.name,a=>c("update:modelValue",a)),s=e.computed(()=>{var a;return(a=n.value)==null?void 0:a.length}),g=a=>{a.stopPropagation()},x=()=>{l.value&&(l.value.scrollTop=l.value.scrollHeight)};return(a,o)=>(e.openBlock(),e.createBlock(y.default,e.mergeProps(a.$attrs,{class:"relative",name:e.unref(d),label:a.label,"error-message":t.errorMessage||e.unref(v),"hidden-error-message":a.hiddenErrorMessage,"set-required-mark":e.unref(u.showRequiredMark)([a.validation])}),{default:e.withCtx(({error:C})=>[e.withDirectives(e.createElementVNode("textarea",{id:e.unref(d),ref_key:"textareaRef",ref:l,"onUpdate:modelValue":o[0]||(o[0]=i=>e.isRef(n)?n.value=i:null),name:t.name,placeholder:a.placeholder,disabled:a.disabled,class:e.normalizeClass(["el-input",[{error:C,"resize-none":!r.resizable},r.textareaClass]]),"data-cy":`${a.label.trim().replaceAll(" ","")}-textarea`,onBlur:o[1]||(o[1]=i=>e.unref(h).validate()),onInput:x,onKeydown:e.withKeys(g,["enter"])},null,42,b),[[e.vModelText,e.unref(n)]]),r.maxCharacters>0?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["flex justify-end text-sm font-semibold",s.value&&s.value>r.maxCharacters?"text-red-500":"text-neutral-darker"])},e.toDisplayString(s.value)+"/"+e.toDisplayString(r.maxCharacters),3)):e.createCommentVNode("",!0)]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});exports.default=M;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),M=require("./ElInputContainer.vue.cjs2.js"),o=require("./input.cjs.js"),k=["id","name","placeholder","disabled","data-cy"],E=e.defineComponent({__name:"ElInputTextarea",props:{...o.withTextualElInputProps(),resizable:{type:Boolean,default:!0},maxCharacters:{type:Number,default:-1},hideCharacterCounter:{type:Boolean,default:!1},textareaClass:{type:String,default:"min-h-20"},focusOnMount:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(r,{emit:c}){const l=e.ref(),t=r;e.onMounted(()=>{var a;t.focusOnMount&&((a=l.value)==null||a.focus())});const f=c,p=e.computed(()=>t.modelValue),h=e.computed(()=>[`max:${t.maxCharacters>0?t.maxCharacters:1e3}`,t.validation]),{value:u,errorMessage:i,uuid:d,fieldContext:v}=o.useInput(p,h,t.name,a=>f("update:modelValue",a)),n=e.computed(()=>{var a;return(a=u.value)==null?void 0:a.length}),C=e.computed(()=>t.maxCharacters<=0?!1:(n.value||0)>t.maxCharacters),g=e.computed(()=>t.errorMessage||i.value?t.errorMessage||i.value:C.value?`Limite caratteri superato (${n.value}/${t.maxCharacters})`:!1),x=a=>{a.stopPropagation()},y=()=>{l.value&&(l.value.scrollTop=l.value.scrollHeight)};return(a,s)=>(e.openBlock(),e.createBlock(M.default,e.mergeProps(a.$attrs,{class:"relative",name:e.unref(d),label:a.label,"error-message":g.value,"hidden-error-message":a.hiddenErrorMessage,"set-required-mark":e.unref(o.showRequiredMark)([a.validation])}),{default:e.withCtx(({error:b})=>[e.withDirectives(e.createElementVNode("textarea",{id:e.unref(d),ref_key:"textareaRef",ref:l,"onUpdate:modelValue":s[0]||(s[0]=m=>e.isRef(u)?u.value=m:null),name:t.name,placeholder:a.placeholder,disabled:a.disabled,class:e.normalizeClass(["el-input",[{error:b,"resize-none":!r.resizable},r.textareaClass]]),"data-cy":`${a.label.trim().replaceAll(" ","")}-textarea`,onBlur:s[1]||(s[1]=m=>e.unref(v).validate()),onInput:y,onKeydown:e.withKeys(x,["enter"])},null,42,k),[[e.vModelText,e.unref(u)]]),r.maxCharacters>0&&!r.hideCharacterCounter?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["flex justify-end text-sm font-semibold",n.value&&n.value>r.maxCharacters?"text-red-500":"text-neutral-darker"])},e.toDisplayString(n.value)+"/"+e.toDisplayString(r.maxCharacters),3)):e.createCommentVNode("",!0)]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});exports.default=E;
2
2
  //# sourceMappingURL=ElInputTextarea.vue.cjs2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputTextarea.vue.cjs2.js","sources":["../../../src/forms/ElInputTextarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { useInput, TextualValueType, showRequiredMark, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, ref } from 'vue';\n\nconst textareaRef = ref<HTMLElement>();\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n resizable: {\n type: Boolean,\n default: true,\n },\n maxCharacters: {\n type: Number,\n default: -1,\n },\n textareaClass: {\n type: String,\n default: 'min-h-20',\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n});\n\nonMounted(() => {\n if (props.focusOnMount) {\n textareaRef.value?.focus();\n }\n});\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', value: TextualValueType): void;\n}>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [`max:${props.maxCharacters > 0 ? props.maxCharacters : 1000}`, props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue =>\n emit('update:modelValue', newValue),\n);\n\nconst currentInsertedCharNumber = computed(() => value.value?.length);\n\nconst handleEnter = (event: KeyboardEvent) => {\n event.stopPropagation();\n};\n\nconst handleInput = () => {\n if (textareaRef.value) textareaRef.value.scrollTop = textareaRef.value.scrollHeight;\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n class=\"relative\"\n :name=\"uuid\"\n :label=\"label\"\n :error-message=\"props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n >\n <template #default=\"{ error }\">\n <textarea\n :id=\"uuid\"\n ref=\"textareaRef\"\n v-model=\"value\"\n :name=\"props.name\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n class=\"el-input\"\n :class=\"[\n {\n error,\n 'resize-none': !resizable,\n },\n textareaClass,\n ]\"\n :data-cy=\"`${label.trim().replaceAll(' ', '')}-textarea`\"\n @blur=\"fieldContext.validate()\"\n @input=\"handleInput\"\n @keydown.enter=\"handleEnter\"\n ></textarea>\n <span\n v-if=\"maxCharacters > 0\"\n class=\"flex justify-end text-sm font-semibold\"\n :class=\"currentInsertedCharNumber && currentInsertedCharNumber > maxCharacters ? 'text-red-500' : 'text-neutral-darker'\"\n >\n {{ currentInsertedCharNumber }}/{{ maxCharacters }}\n </span>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["textareaRef","ref","props","__props","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","currentInsertedCharNumber","handleEnter","event","handleInput"],"mappings":"kiBAKA,MAAMA,EAAcC,EAAAA,MAEdC,EAAQC,EAoBdC,EAAAA,UAAU,IAAM,OACVF,EAAM,gBACRG,EAAAL,EAAY,QAAZ,MAAAK,EAAmB,QACrB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAA,SAAS,IAAMP,EAAM,UAAU,EACpDQ,EAAqBD,EAAAA,SAAS,IAAM,CAAC,OAAOP,EAAM,cAAgB,EAAIA,EAAM,cAAgB,GAAI,GAAIA,EAAM,UAAU,CAAC,EAErH,CAAE,MAAAS,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,EAAA,SAASP,EAAoBE,EAAoBR,EAAM,KAAMc,GAC/GV,EAAK,oBAAqBU,CAAQ,CAAA,EAG9BC,EAA4BR,EAAAA,SAAS,IAAA,OAAM,OAAAJ,EAAAM,EAAM,QAAN,YAAAN,EAAa,OAAM,EAE9Da,EAAeC,GAAyB,CAC5CA,EAAM,gBAAgB,CAAA,EAGlBC,EAAc,IAAM,CACpBpB,EAAY,QAAmBA,EAAA,MAAM,UAAYA,EAAY,MAAM,aAAA"}
1
+ {"version":3,"file":"ElInputTextarea.vue.cjs2.js","sources":["../../../src/forms/ElInputTextarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { useInput, TextualValueType, showRequiredMark, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, ref } from 'vue';\n\nconst textareaRef = ref<HTMLElement>();\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n resizable: {\n type: Boolean,\n default: true,\n },\n maxCharacters: {\n type: Number,\n default: -1,\n },\n hideCharacterCounter: {\n type: Boolean,\n default: false,\n },\n textareaClass: {\n type: String,\n default: 'min-h-20',\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n});\n\nonMounted(() => {\n if (props.focusOnMount) {\n textareaRef.value?.focus();\n }\n});\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', value: TextualValueType): void;\n}>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [`max:${props.maxCharacters > 0 ? props.maxCharacters : 1000}`, props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue =>\n emit('update:modelValue', newValue),\n);\n\nconst currentInsertedCharNumber = computed(() => value.value?.length);\n\nconst isExceedingLimit = computed(() => {\n if (props.maxCharacters <= 0) return false;\n return (currentInsertedCharNumber.value || 0) > props.maxCharacters;\n});\n\nconst computedErrorMessage = computed(() => {\n // Priority: props.errorMessage or errorMessage.value\n if (props.errorMessage || errorMessage.value) {\n return props.errorMessage || errorMessage.value;\n }\n // Fallback: character limit exceeded message\n if (isExceedingLimit.value) {\n return `Limite caratteri superato (${currentInsertedCharNumber.value}/${props.maxCharacters})`;\n }\n return false;\n});\n\nconst handleEnter = (event: KeyboardEvent) => {\n event.stopPropagation();\n};\n\nconst handleInput = () => {\n if (textareaRef.value) textareaRef.value.scrollTop = textareaRef.value.scrollHeight;\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n class=\"relative\"\n :name=\"uuid\"\n :label=\"label\"\n :error-message=\"computedErrorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n >\n <template #default=\"{ error }\">\n <textarea\n :id=\"uuid\"\n ref=\"textareaRef\"\n v-model=\"value\"\n :name=\"props.name\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n class=\"el-input\"\n :class=\"[\n {\n error,\n 'resize-none': !resizable,\n },\n textareaClass,\n ]\"\n :data-cy=\"`${label.trim().replaceAll(' ', '')}-textarea`\"\n @blur=\"fieldContext.validate()\"\n @input=\"handleInput\"\n @keydown.enter=\"handleEnter\"\n ></textarea>\n <span\n v-if=\"maxCharacters > 0 && !hideCharacterCounter\"\n class=\"flex justify-end text-sm font-semibold\"\n :class=\"currentInsertedCharNumber && currentInsertedCharNumber > maxCharacters ? 'text-red-500' : 'text-neutral-darker'\"\n >\n {{ currentInsertedCharNumber }}/{{ maxCharacters }}\n </span>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["textareaRef","ref","props","__props","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","currentInsertedCharNumber","isExceedingLimit","computedErrorMessage","handleEnter","event","handleInput"],"mappings":"ilBAKA,MAAMA,EAAcC,EAAAA,MAEdC,EAAQC,EAwBdC,EAAAA,UAAU,IAAM,OACVF,EAAM,gBACRG,EAAAL,EAAY,QAAZ,MAAAK,EAAmB,QACrB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAA,SAAS,IAAMP,EAAM,UAAU,EACpDQ,EAAqBD,EAAAA,SAAS,IAAM,CAAC,OAAOP,EAAM,cAAgB,EAAIA,EAAM,cAAgB,GAAI,GAAIA,EAAM,UAAU,CAAC,EAErH,CAAE,MAAAS,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,EAAA,SAASP,EAAoBE,EAAoBR,EAAM,KAAMc,GAC/GV,EAAK,oBAAqBU,CAAQ,CAAA,EAG9BC,EAA4BR,EAAAA,SAAS,IAAA,OAAM,OAAAJ,EAAAM,EAAM,QAAN,YAAAN,EAAa,OAAM,EAE9Da,EAAmBT,EAAAA,SAAS,IAC5BP,EAAM,eAAiB,EAAU,IAC7Be,EAA0B,OAAS,GAAKf,EAAM,aACvD,EAEKiB,EAAuBV,EAAAA,SAAS,IAEhCP,EAAM,cAAgBU,EAAa,MAC9BV,EAAM,cAAgBU,EAAa,MAGxCM,EAAiB,MACZ,8BAA8BD,EAA0B,KAAK,IAAIf,EAAM,aAAa,IAEtF,EACR,EAEKkB,EAAeC,GAAyB,CAC5CA,EAAM,gBAAgB,CAAA,EAGlBC,EAAc,IAAM,CACpBtB,EAAY,QAAmBA,EAAA,MAAM,UAAYA,EAAY,MAAM,aAAA"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as M,ref as V,onMounted as w,computed as d,openBlock as m,createBlock as B,mergeProps as E,unref as r,withCtx as I,withDirectives as $,createElementVNode as z,isRef as N,normalizeClass as c,withKeys as R,vModelText as T,createElementBlock as q,toDisplayString as f,createCommentVNode as P}from"vue";import D from"./ElInputContainer.vue.esm2.js";import{withTextualElInputProps as K,useInput as O,showRequiredMark as S}from"./input.esm.js";const j=["id","name","placeholder","disabled","data-cy"],F=M({__name:"ElInputTextarea",props:{...K(),resizable:{type:Boolean,default:!0},maxCharacters:{type:Number,default:-1},textareaClass:{type:String,default:"min-h-20"},focusOnMount:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:p}){const l=V(),a=t;w(()=>{var e;a.focusOnMount&&((e=l.value)==null||e.focus())});const h=p,v=d(()=>a.modelValue),x=d(()=>[`max:${a.maxCharacters>0?a.maxCharacters:1e3}`,a.validation]),{value:o,errorMessage:C,uuid:u,fieldContext:g}=O(v,x,a.name,e=>h("update:modelValue",e)),s=d(()=>{var e;return(e=o.value)==null?void 0:e.length}),b=e=>{e.stopPropagation()},y=()=>{l.value&&(l.value.scrollTop=l.value.scrollHeight)};return(e,n)=>(m(),B(D,E(e.$attrs,{class:"relative",name:r(u),label:e.label,"error-message":a.errorMessage||r(C),"hidden-error-message":e.hiddenErrorMessage,"set-required-mark":r(S)([e.validation])}),{default:I(({error:k})=>[$(z("textarea",{id:r(u),ref_key:"textareaRef",ref:l,"onUpdate:modelValue":n[0]||(n[0]=i=>N(o)?o.value=i:null),name:a.name,placeholder:e.placeholder,disabled:e.disabled,class:c(["el-input",[{error:k,"resize-none":!t.resizable},t.textareaClass]]),"data-cy":`${e.label.trim().replaceAll(" ","")}-textarea`,onBlur:n[1]||(n[1]=i=>r(g).validate()),onInput:y,onKeydown:R(b,["enter"])},null,42,j),[[T,r(o)]]),t.maxCharacters>0?(m(),q("span",{key:0,class:c(["flex justify-end text-sm font-semibold",s.value&&s.value>t.maxCharacters?"text-red-500":"text-neutral-darker"])},f(s.value)+"/"+f(t.maxCharacters),3)):P("",!0)]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});export{F as default};
1
+ import{defineComponent as V,ref as B,onMounted as $,computed as n,openBlock as c,createBlock as w,mergeProps as I,unref as s,withCtx as z,withDirectives as N,createElementVNode as R,isRef as T,normalizeClass as f,withKeys as q,vModelText as P,createElementBlock as D,toDisplayString as p,createCommentVNode as K}from"vue";import L from"./ElInputContainer.vue.esm2.js";import{withTextualElInputProps as O,useInput as S,showRequiredMark as j}from"./input.esm.js";const A=["id","name","placeholder","disabled","data-cy"],G=V({__name:"ElInputTextarea",props:{...O(),resizable:{type:Boolean,default:!0},maxCharacters:{type:Number,default:-1},hideCharacterCounter:{type:Boolean,default:!1},textareaClass:{type:String,default:"min-h-20"},focusOnMount:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:h}){const r=B(),a=t;$(()=>{var e;a.focusOnMount&&((e=r.value)==null||e.focus())});const v=h,x=n(()=>a.modelValue),C=n(()=>[`max:${a.maxCharacters>0?a.maxCharacters:1e3}`,a.validation]),{value:o,errorMessage:i,uuid:d,fieldContext:g}=S(x,C,a.name,e=>v("update:modelValue",e)),l=n(()=>{var e;return(e=o.value)==null?void 0:e.length}),y=n(()=>a.maxCharacters<=0?!1:(l.value||0)>a.maxCharacters),b=n(()=>a.errorMessage||i.value?a.errorMessage||i.value:y.value?`Limite caratteri superato (${l.value}/${a.maxCharacters})`:!1),M=e=>{e.stopPropagation()},k=()=>{r.value&&(r.value.scrollTop=r.value.scrollHeight)};return(e,u)=>(c(),w(L,I(e.$attrs,{class:"relative",name:s(d),label:e.label,"error-message":b.value,"hidden-error-message":e.hiddenErrorMessage,"set-required-mark":s(j)([e.validation])}),{default:z(({error:E})=>[N(R("textarea",{id:s(d),ref_key:"textareaRef",ref:r,"onUpdate:modelValue":u[0]||(u[0]=m=>T(o)?o.value=m:null),name:a.name,placeholder:e.placeholder,disabled:e.disabled,class:f(["el-input",[{error:E,"resize-none":!t.resizable},t.textareaClass]]),"data-cy":`${e.label.trim().replaceAll(" ","")}-textarea`,onBlur:u[1]||(u[1]=m=>s(g).validate()),onInput:k,onKeydown:q(M,["enter"])},null,42,A),[[P,s(o)]]),t.maxCharacters>0&&!t.hideCharacterCounter?(c(),D("span",{key:0,class:f(["flex justify-end text-sm font-semibold",l.value&&l.value>t.maxCharacters?"text-red-500":"text-neutral-darker"])},p(l.value)+"/"+p(t.maxCharacters),3)):K("",!0)]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});export{G as default};
2
2
  //# sourceMappingURL=ElInputTextarea.vue.esm2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputTextarea.vue.esm2.js","sources":["../../../src/forms/ElInputTextarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { useInput, TextualValueType, showRequiredMark, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, ref } from 'vue';\n\nconst textareaRef = ref<HTMLElement>();\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n resizable: {\n type: Boolean,\n default: true,\n },\n maxCharacters: {\n type: Number,\n default: -1,\n },\n textareaClass: {\n type: String,\n default: 'min-h-20',\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n});\n\nonMounted(() => {\n if (props.focusOnMount) {\n textareaRef.value?.focus();\n }\n});\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', value: TextualValueType): void;\n}>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [`max:${props.maxCharacters > 0 ? props.maxCharacters : 1000}`, props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue =>\n emit('update:modelValue', newValue),\n);\n\nconst currentInsertedCharNumber = computed(() => value.value?.length);\n\nconst handleEnter = (event: KeyboardEvent) => {\n event.stopPropagation();\n};\n\nconst handleInput = () => {\n if (textareaRef.value) textareaRef.value.scrollTop = textareaRef.value.scrollHeight;\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n class=\"relative\"\n :name=\"uuid\"\n :label=\"label\"\n :error-message=\"props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n >\n <template #default=\"{ error }\">\n <textarea\n :id=\"uuid\"\n ref=\"textareaRef\"\n v-model=\"value\"\n :name=\"props.name\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n class=\"el-input\"\n :class=\"[\n {\n error,\n 'resize-none': !resizable,\n },\n textareaClass,\n ]\"\n :data-cy=\"`${label.trim().replaceAll(' ', '')}-textarea`\"\n @blur=\"fieldContext.validate()\"\n @input=\"handleInput\"\n @keydown.enter=\"handleEnter\"\n ></textarea>\n <span\n v-if=\"maxCharacters > 0\"\n class=\"flex justify-end text-sm font-semibold\"\n :class=\"currentInsertedCharNumber && currentInsertedCharNumber > maxCharacters ? 'text-red-500' : 'text-neutral-darker'\"\n >\n {{ currentInsertedCharNumber }}/{{ maxCharacters }}\n </span>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["textareaRef","ref","props","__props","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","currentInsertedCharNumber","handleEnter","event","handleInput"],"mappings":"kwBAKA,MAAMA,EAAcC,IAEdC,EAAQC,EAoBdC,EAAU,IAAM,OACVF,EAAM,gBACRG,EAAAL,EAAY,QAAZ,MAAAK,EAAmB,QACrB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAS,IAAMP,EAAM,UAAU,EACpDQ,EAAqBD,EAAS,IAAM,CAAC,OAAOP,EAAM,cAAgB,EAAIA,EAAM,cAAgB,GAAI,GAAIA,EAAM,UAAU,CAAC,EAErH,CAAE,MAAAS,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,EAASP,EAAoBE,EAAoBR,EAAM,KAAMc,GAC/GV,EAAK,oBAAqBU,CAAQ,CAAA,EAG9BC,EAA4BR,EAAS,IAAA,OAAM,OAAAJ,EAAAM,EAAM,QAAN,YAAAN,EAAa,OAAM,EAE9Da,EAAeC,GAAyB,CAC5CA,EAAM,gBAAgB,CAAA,EAGlBC,EAAc,IAAM,CACpBpB,EAAY,QAAmBA,EAAA,MAAM,UAAYA,EAAY,MAAM,aAAA"}
1
+ {"version":3,"file":"ElInputTextarea.vue.esm2.js","sources":["../../../src/forms/ElInputTextarea.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { useInput, TextualValueType, showRequiredMark, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, ref } from 'vue';\n\nconst textareaRef = ref<HTMLElement>();\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n resizable: {\n type: Boolean,\n default: true,\n },\n maxCharacters: {\n type: Number,\n default: -1,\n },\n hideCharacterCounter: {\n type: Boolean,\n default: false,\n },\n textareaClass: {\n type: String,\n default: 'min-h-20',\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n});\n\nonMounted(() => {\n if (props.focusOnMount) {\n textareaRef.value?.focus();\n }\n});\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', value: TextualValueType): void;\n}>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [`max:${props.maxCharacters > 0 ? props.maxCharacters : 1000}`, props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue =>\n emit('update:modelValue', newValue),\n);\n\nconst currentInsertedCharNumber = computed(() => value.value?.length);\n\nconst isExceedingLimit = computed(() => {\n if (props.maxCharacters <= 0) return false;\n return (currentInsertedCharNumber.value || 0) > props.maxCharacters;\n});\n\nconst computedErrorMessage = computed(() => {\n // Priority: props.errorMessage or errorMessage.value\n if (props.errorMessage || errorMessage.value) {\n return props.errorMessage || errorMessage.value;\n }\n // Fallback: character limit exceeded message\n if (isExceedingLimit.value) {\n return `Limite caratteri superato (${currentInsertedCharNumber.value}/${props.maxCharacters})`;\n }\n return false;\n});\n\nconst handleEnter = (event: KeyboardEvent) => {\n event.stopPropagation();\n};\n\nconst handleInput = () => {\n if (textareaRef.value) textareaRef.value.scrollTop = textareaRef.value.scrollHeight;\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n class=\"relative\"\n :name=\"uuid\"\n :label=\"label\"\n :error-message=\"computedErrorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n >\n <template #default=\"{ error }\">\n <textarea\n :id=\"uuid\"\n ref=\"textareaRef\"\n v-model=\"value\"\n :name=\"props.name\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n class=\"el-input\"\n :class=\"[\n {\n error,\n 'resize-none': !resizable,\n },\n textareaClass,\n ]\"\n :data-cy=\"`${label.trim().replaceAll(' ', '')}-textarea`\"\n @blur=\"fieldContext.validate()\"\n @input=\"handleInput\"\n @keydown.enter=\"handleEnter\"\n ></textarea>\n <span\n v-if=\"maxCharacters > 0 && !hideCharacterCounter\"\n class=\"flex justify-end text-sm font-semibold\"\n :class=\"currentInsertedCharNumber && currentInsertedCharNumber > maxCharacters ? 'text-red-500' : 'text-neutral-darker'\"\n >\n {{ currentInsertedCharNumber }}/{{ maxCharacters }}\n </span>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["textareaRef","ref","props","__props","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","currentInsertedCharNumber","isExceedingLimit","computedErrorMessage","handleEnter","event","handleInput"],"mappings":"izBAKA,MAAMA,EAAcC,IAEdC,EAAQC,EAwBdC,EAAU,IAAM,OACVF,EAAM,gBACRG,EAAAL,EAAY,QAAZ,MAAAK,EAAmB,QACrB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAS,IAAMP,EAAM,UAAU,EACpDQ,EAAqBD,EAAS,IAAM,CAAC,OAAOP,EAAM,cAAgB,EAAIA,EAAM,cAAgB,GAAI,GAAIA,EAAM,UAAU,CAAC,EAErH,CAAE,MAAAS,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,EAASP,EAAoBE,EAAoBR,EAAM,KAAMc,GAC/GV,EAAK,oBAAqBU,CAAQ,CAAA,EAG9BC,EAA4BR,EAAS,IAAA,OAAM,OAAAJ,EAAAM,EAAM,QAAN,YAAAN,EAAa,OAAM,EAE9Da,EAAmBT,EAAS,IAC5BP,EAAM,eAAiB,EAAU,IAC7Be,EAA0B,OAAS,GAAKf,EAAM,aACvD,EAEKiB,EAAuBV,EAAS,IAEhCP,EAAM,cAAgBU,EAAa,MAC9BV,EAAM,cAAgBU,EAAa,MAGxCM,EAAiB,MACZ,8BAA8BD,EAA0B,KAAK,IAAIf,EAAM,aAAa,IAEtF,EACR,EAEKkB,EAAeC,GAAyB,CAC5CA,EAAM,gBAAgB,CAAA,EAGlBC,EAAc,IAAM,CACpBtB,EAAY,QAAmBA,EAAA,MAAM,UAAYA,EAAY,MAAM,aAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@davincihealthcare/elty-design-system-vue",
3
- "version": "1.87.0",
3
+ "version": "1.88.0",
4
4
  "license": "UNLICENSED",
5
5
  "main": "dist/index.umd.cjs",
6
6
  "types": "dist/index.d.ts",