@davincihealthcare/elty-design-system-vue 1.72.0 → 1.72.2

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.
Files changed (206) hide show
  1. package/dist/ElAccordion.vue.cjs2.js.map +1 -1
  2. package/dist/ElAccordion.vue.esm2.js.map +1 -1
  3. package/dist/ElActionButton.vue.cjs2.js +1 -1
  4. package/dist/ElActionButton.vue.cjs2.js.map +1 -1
  5. package/dist/ElActionButton.vue.esm2.js +1 -1
  6. package/dist/ElActionButton.vue.esm2.js.map +1 -1
  7. package/dist/ElAvatar.vue.cjs2.js.map +1 -1
  8. package/dist/ElAvatar.vue.esm2.js.map +1 -1
  9. package/dist/ElBadge.vue.cjs2.js.map +1 -1
  10. package/dist/ElBadge.vue.esm2.js.map +1 -1
  11. package/dist/ElBubbleChat.vue.cjs2.js +1 -1
  12. package/dist/ElBubbleChat.vue.cjs2.js.map +1 -1
  13. package/dist/ElBubbleChat.vue.esm2.js +1 -1
  14. package/dist/ElBubbleChat.vue.esm2.js.map +1 -1
  15. package/dist/ElButton.vue.cjs2.js.map +1 -1
  16. package/dist/ElButton.vue.esm2.js.map +1 -1
  17. package/dist/ElCalendarCard.vue.cjs2.js.map +1 -1
  18. package/dist/ElCalendarCard.vue.esm2.js.map +1 -1
  19. package/dist/ElCalendarCell.vue.cjs2.js +1 -1
  20. package/dist/ElCalendarCell.vue.cjs2.js.map +1 -1
  21. package/dist/ElCalendarCell.vue.d.ts +5 -0
  22. package/dist/ElCalendarCell.vue.esm2.js +1 -1
  23. package/dist/ElCalendarCell.vue.esm2.js.map +1 -1
  24. package/dist/ElCarousel.vue.cjs2.js +1 -1
  25. package/dist/ElCarousel.vue.cjs2.js.map +1 -1
  26. package/dist/ElCarousel.vue.esm2.js +1 -1
  27. package/dist/ElCarousel.vue.esm2.js.map +1 -1
  28. package/dist/ElClipToAnchor.vue.cjs2.js +1 -1
  29. package/dist/ElClipToAnchor.vue.cjs2.js.map +1 -1
  30. package/dist/ElClipToAnchor.vue.esm2.js +1 -1
  31. package/dist/ElClipToAnchor.vue.esm2.js.map +1 -1
  32. package/dist/ElContainerTemplate.vue.cjs2.js +1 -1
  33. package/dist/ElContainerTemplate.vue.cjs2.js.map +1 -1
  34. package/dist/ElContainerTemplate.vue.esm2.js +1 -1
  35. package/dist/ElContainerTemplate.vue.esm2.js.map +1 -1
  36. package/dist/ElDivider.vue.cjs2.js.map +1 -1
  37. package/dist/ElDivider.vue.esm2.js.map +1 -1
  38. package/dist/ElDrawer.vue.cjs2.js.map +1 -1
  39. package/dist/ElDrawer.vue.esm2.js.map +1 -1
  40. package/dist/ElDropdown.vue.cjs2.js +1 -1
  41. package/dist/ElDropdown.vue.cjs2.js.map +1 -1
  42. package/dist/ElDropdown.vue.esm2.js +1 -1
  43. package/dist/ElDropdown.vue.esm2.js.map +1 -1
  44. package/dist/ElFile.vue.cjs2.js.map +1 -1
  45. package/dist/ElFile.vue.esm2.js.map +1 -1
  46. package/dist/ElIcon.vue.cjs2.js +1 -1
  47. package/dist/ElIcon.vue.cjs2.js.map +1 -1
  48. package/dist/ElIcon.vue.esm2.js +1 -1
  49. package/dist/ElIcon.vue.esm2.js.map +1 -1
  50. package/dist/ElIconButton.vue.cjs2.js +1 -1
  51. package/dist/ElIconButton.vue.cjs2.js.map +1 -1
  52. package/dist/ElIconButton.vue.d.ts +4 -0
  53. package/dist/ElIconButton.vue.esm2.js +1 -1
  54. package/dist/ElIconButton.vue.esm2.js.map +1 -1
  55. package/dist/ElInlineBanner.vue.cjs2.js.map +1 -1
  56. package/dist/ElInlineBanner.vue.esm2.js.map +1 -1
  57. package/dist/ElInputChat.vue.cjs2.js.map +1 -1
  58. package/dist/ElInputChat.vue.esm2.js.map +1 -1
  59. package/dist/ElListItem.vue.cjs2.js.map +1 -1
  60. package/dist/ElListItem.vue.esm2.js.map +1 -1
  61. package/dist/ElLogo.vue.cjs2.js.map +1 -1
  62. package/dist/ElLogo.vue.esm2.js.map +1 -1
  63. package/dist/ElModal.vue.cjs2.js +1 -1
  64. package/dist/ElModal.vue.cjs2.js.map +1 -1
  65. package/dist/ElModal.vue.esm2.js +1 -1
  66. package/dist/ElModal.vue.esm2.js.map +1 -1
  67. package/dist/ElSortingHeader.vue.cjs2.js.map +1 -1
  68. package/dist/ElSortingHeader.vue.esm2.js.map +1 -1
  69. package/dist/ElSpinner.vue.cjs2.js.map +1 -1
  70. package/dist/ElSpinner.vue.esm2.js.map +1 -1
  71. package/dist/ElTab.vue.cjs2.js.map +1 -1
  72. package/dist/ElTab.vue.esm2.js.map +1 -1
  73. package/dist/ElTabGroup.vue.cjs2.js.map +1 -1
  74. package/dist/ElTabGroup.vue.esm2.js.map +1 -1
  75. package/dist/ElTabs.vue.cjs2.js.map +1 -1
  76. package/dist/ElTabs.vue.esm2.js.map +1 -1
  77. package/dist/ElTag.vue.cjs2.js.map +1 -1
  78. package/dist/ElTag.vue.esm2.js.map +1 -1
  79. package/dist/ElTextCell.vue.cjs2.js.map +1 -1
  80. package/dist/ElTextCell.vue.esm2.js.map +1 -1
  81. package/dist/ElToast.vue.cjs2.js +1 -1
  82. package/dist/ElToast.vue.cjs2.js.map +1 -1
  83. package/dist/ElToast.vue.esm2.js +1 -1
  84. package/dist/ElToast.vue.esm2.js.map +1 -1
  85. package/dist/ElTooltip.vue.cjs2.js.map +1 -1
  86. package/dist/ElTooltip.vue.esm2.js.map +1 -1
  87. package/dist/ElVerticalTab.vue.cjs2.js.map +1 -1
  88. package/dist/ElVerticalTab.vue.esm2.js.map +1 -1
  89. package/dist/_CustomTransition.vue.cjs2.js.map +1 -1
  90. package/dist/_CustomTransition.vue.esm2.js.map +1 -1
  91. package/dist/assets/logo/davinci-dark.svg.cjs.js.map +1 -1
  92. package/dist/assets/logo/davinci-dark.svg.esm.js.map +1 -1
  93. package/dist/assets/logo/davinci-white.svg.cjs.js.map +1 -1
  94. package/dist/assets/logo/davinci-white.svg.esm.js.map +1 -1
  95. package/dist/assets/logo/elty-dark.svg.cjs.js.map +1 -1
  96. package/dist/assets/logo/elty-dark.svg.esm.js.map +1 -1
  97. package/dist/assets/logo/elty-two-tone.svg.cjs.js.map +1 -1
  98. package/dist/assets/logo/elty-two-tone.svg.esm.js.map +1 -1
  99. package/dist/assets/logo/elty-white.svg.cjs.js.map +1 -1
  100. package/dist/assets/logo/elty-white.svg.esm.js.map +1 -1
  101. package/dist/assets/logo/heart-dark.svg.cjs.js.map +1 -1
  102. package/dist/assets/logo/heart-dark.svg.esm.js.map +1 -1
  103. package/dist/assets/logo/heart-two-tone.svg.cjs.js.map +1 -1
  104. package/dist/assets/logo/heart-two-tone.svg.esm.js.map +1 -1
  105. package/dist/assets/logo/heart-white.svg.cjs.js.map +1 -1
  106. package/dist/assets/logo/heart-white.svg.esm.js.map +1 -1
  107. package/dist/composable/mobileComposable.cjs.js +1 -1
  108. package/dist/composable/mobileComposable.cjs.js.map +1 -1
  109. package/dist/composable/mobileComposable.esm.js +1 -1
  110. package/dist/composable/mobileComposable.esm.js.map +1 -1
  111. package/dist/forms/ElInputCheckbox.vue.cjs2.js.map +1 -1
  112. package/dist/forms/ElInputCheckbox.vue.esm2.js.map +1 -1
  113. package/dist/forms/ElInputDate.vue.cjs2.js +1 -1
  114. package/dist/forms/ElInputDate.vue.cjs2.js.map +1 -1
  115. package/dist/forms/ElInputDate.vue.esm2.js +1 -1
  116. package/dist/forms/ElInputDate.vue.esm2.js.map +1 -1
  117. package/dist/forms/ElInputFile.vue.cjs2.js.map +1 -1
  118. package/dist/forms/ElInputFile.vue.esm2.js.map +1 -1
  119. package/dist/forms/ElInputMeasureUnit.vue.cjs2.js.map +1 -1
  120. package/dist/forms/ElInputMeasureUnit.vue.esm2.js.map +1 -1
  121. package/dist/forms/ElInputNumber.vue.cjs2.js.map +1 -1
  122. package/dist/forms/ElInputNumber.vue.esm2.js.map +1 -1
  123. package/dist/forms/ElInputPhone.vue.cjs2.js.map +1 -1
  124. package/dist/forms/ElInputPhone.vue.esm2.js.map +1 -1
  125. package/dist/forms/ElInputRadioButton.vue.cjs2.js.map +1 -1
  126. package/dist/forms/ElInputRadioButton.vue.esm2.js.map +1 -1
  127. package/dist/forms/ElInputRichText/Editor.vue.cjs2.js +1 -1
  128. package/dist/forms/ElInputRichText/Editor.vue.cjs2.js.map +1 -1
  129. package/dist/forms/ElInputRichText/Editor.vue.esm2.js +1 -1
  130. package/dist/forms/ElInputRichText/Editor.vue.esm2.js.map +1 -1
  131. package/dist/forms/ElInputRichText/translations/it.cjs.js +1 -1
  132. package/dist/forms/ElInputRichText/translations/it.cjs.js.map +1 -1
  133. package/dist/forms/ElInputRichText/translations/it.esm.js +1 -1
  134. package/dist/forms/ElInputRichText/translations/it.esm.js.map +1 -1
  135. package/dist/forms/ElInputRichText.vue.cjs2.js +1 -1
  136. package/dist/forms/ElInputRichText.vue.cjs2.js.map +1 -1
  137. package/dist/forms/ElInputRichText.vue.esm2.js +2 -2
  138. package/dist/forms/ElInputRichText.vue.esm2.js.map +1 -1
  139. package/dist/forms/ElInputSearch.vue.cjs2.js +1 -1
  140. package/dist/forms/ElInputSearch.vue.cjs2.js.map +1 -1
  141. package/dist/forms/ElInputSearch.vue.esm2.js +1 -1
  142. package/dist/forms/ElInputSearch.vue.esm2.js.map +1 -1
  143. package/dist/forms/ElInputSelect.vue.cjs2.js +1 -1
  144. package/dist/forms/ElInputSelect.vue.cjs2.js.map +1 -1
  145. package/dist/forms/ElInputSelect.vue.esm2.js +1 -1
  146. package/dist/forms/ElInputSelect.vue.esm2.js.map +1 -1
  147. package/dist/forms/ElInputSwitch.vue.cjs2.js.map +1 -1
  148. package/dist/forms/ElInputSwitch.vue.esm2.js.map +1 -1
  149. package/dist/forms/ElInputText.vue.cjs2.js +1 -1
  150. package/dist/forms/ElInputText.vue.cjs2.js.map +1 -1
  151. package/dist/forms/ElInputText.vue.esm2.js +1 -1
  152. package/dist/forms/ElInputText.vue.esm2.js.map +1 -1
  153. package/dist/forms/ElInputTextarea.vue.cjs2.js.map +1 -1
  154. package/dist/forms/ElInputTextarea.vue.esm2.js.map +1 -1
  155. package/dist/forms/input.cjs.js.map +1 -1
  156. package/dist/forms/input.esm.js.map +1 -1
  157. package/dist/forms/unicodeCharsRule.cjs.js +1 -1
  158. package/dist/forms/unicodeCharsRule.cjs.js.map +1 -1
  159. package/dist/forms/unicodeCharsRule.esm.js +1 -1
  160. package/dist/forms/unicodeCharsRule.esm.js.map +1 -1
  161. package/dist/forms/utils.cjs.js +1 -1
  162. package/dist/forms/utils.cjs.js.map +1 -1
  163. package/dist/forms/utils.esm.js +1 -1
  164. package/dist/forms/utils.esm.js.map +1 -1
  165. package/dist/forms/validation-rules.cjs.js +1 -1
  166. package/dist/forms/validation-rules.cjs.js.map +1 -1
  167. package/dist/forms/validation-rules.esm.js +1 -1
  168. package/dist/forms/validation-rules.esm.js.map +1 -1
  169. package/dist/index.cjs.js +1 -1
  170. package/dist/index.esm.js +1 -1
  171. package/dist/polyfills.cjs.js.map +1 -1
  172. package/dist/polyfills.esm.js.map +1 -1
  173. package/dist/preset.cjs.js +1 -1
  174. package/dist/preset.esm.js +1 -1
  175. package/dist/table/ElMobileTable.vue.cjs2.js.map +1 -1
  176. package/dist/table/ElMobileTable.vue.esm2.js.map +1 -1
  177. package/dist/table/ElResponsiveTable.vue.cjs2.js.map +1 -1
  178. package/dist/table/ElResponsiveTable.vue.esm2.js.map +1 -1
  179. package/dist/table/ElServerSideMobileTable.vue.cjs2.js.map +1 -1
  180. package/dist/table/ElServerSideMobileTable.vue.esm2.js.map +1 -1
  181. package/dist/table/ElServerSideResponsiveTable.vue.cjs2.js.map +1 -1
  182. package/dist/table/ElServerSideResponsiveTable.vue.d.ts +2 -0
  183. package/dist/table/ElServerSideResponsiveTable.vue.esm2.js.map +1 -1
  184. package/dist/table/ElServerSideTable.vue.cjs2.js +1 -1
  185. package/dist/table/ElServerSideTable.vue.cjs2.js.map +1 -1
  186. package/dist/table/ElServerSideTable.vue.esm2.js +1 -1
  187. package/dist/table/ElServerSideTable.vue.esm2.js.map +1 -1
  188. package/dist/table/ElServerSideTablePagination.vue.cjs2.js.map +1 -1
  189. package/dist/table/ElServerSideTablePagination.vue.esm2.js.map +1 -1
  190. package/dist/table/ElTable.vue.cjs2.js.map +1 -1
  191. package/dist/table/ElTable.vue.esm2.js.map +1 -1
  192. package/dist/table/ElTableCell.vue.cjs2.js.map +1 -1
  193. package/dist/table/ElTableCell.vue.esm2.js.map +1 -1
  194. package/dist/table/ElTablePagination.vue.cjs2.js.map +1 -1
  195. package/dist/table/ElTablePagination.vue.esm2.js.map +1 -1
  196. package/dist/tailwind.plugin.cjs.js +1 -1
  197. package/dist/tailwind.plugin.cjs.js.map +1 -1
  198. package/dist/tailwind.plugin.esm.js +1 -1
  199. package/dist/tailwind.plugin.esm.js.map +1 -1
  200. package/dist/types.cjs.js.map +1 -1
  201. package/dist/types.esm.js.map +1 -1
  202. package/dist/utils.cjs.js.map +1 -1
  203. package/dist/utils.esm.js.map +1 -1
  204. package/dist/vue.plugin.cjs.js.map +1 -1
  205. package/dist/vue.plugin.esm.js.map +1 -1
  206. package/package.json +3 -2
@@ -1,2 +1,2 @@
1
- import{defineComponent as K,mergeModels as B,useSlots as J,ref as f,computed as w,useModel as Q,watch as W,nextTick as X,openBlock as l,createBlock as R,Teleport as Y,createVNode as p,withCtx as Z,createElementBlock as i,withDirectives as F,normalizeClass as E,createElementVNode as r,isRef as ee,unref as d,vModelText as te,createCommentVNode as c,mergeProps as O,toDisplayString as h,Fragment as oe,renderList as se,renderSlot as le}from"vue";import V from"../ElDivider.vue.esm2.js";import $ from"../ElIcon.vue.esm2.js";import re from"../ElVerticalTab.vue.esm2.js";/* empty css */import"../polyfills.esm.js";import"vee-validate";import"../../node_modules/codice-fiscale-js/dist/codice.fiscale.commonjs2.esm.js";import"../../node_modules/lodash/lodash.esm.js";import"../tailwind.plugin.esm.js";import"../../node_modules/@davincihealthcare/elty-design-system-foundations/dist/index.esm.js";import ae from"../ElButton.vue.esm2.js";import ne from"../_CustomTransition.vue.esm2.js";import{useScrollLock as ie,onKeyStroke as ue}from"../../node_modules/@vueuse/core/index.esm.js";import"./ElInputText.vue.esm2.js";import"./ElInputCheckbox.vue.esm2.js";import"./ElInputDate.vue.esm2.js";import"./ElInputFile.vue.esm2.js";import"./ElInputMeasureUnit.vue.esm2.js";import"./ElInputNumber.vue.esm2.js";import"./ElInputPhone.vue.esm2.js";import"./ElInputSelect.vue.esm2.js";import"./ElInputTextarea.vue.esm2.js";import"../ElToast.vue.esm2.js";import"./ElInputRadioButton.vue.esm2.js";import{VOnClickOutside as ce}from"../../node_modules/@vueuse/components/index.esm.js";import{withTextualElInputProps as de,useInput as fe}from"./input.esm.js";import"../../node_modules/swiper/shared/swiper-core.esm.js";/* empty css *//* empty css */import{useFocusTrap as me}from"../../node_modules/@vueuse/integrations/useFocusTrap.esm.js";const pe={class:"flex flex-row items-center gap-3 bg-neutral-surface rounded-2xl"},ve=["name","placeholder"],he={class:"flex flex-col gap-y-6 overflow-y-hidden"},ye={key:1,class:"flex flex-col items-center justify-center flex-1 gap-4 py-8 text-neutral-lighter"},xe={class:"text-sm font-semibold text-neutral-darker"},ke={class:"text-sm font-normal"},ge={key:2,class:"flex py-2 overflow-y-hidden"},be={key:0,class:"text-sm font-medium text-neutral-darker"},we={class:"flex flex-col gap-1 w-full"},Re={key:0},Oe={key:1,class:"flex-1 pl-6 overflow-y-auto"},Se={key:3,class:"flex items-center gap-1 self-stretch"},Ce={class:"text-sm font-normal text-neutral-darker"},Ie={class:"fixed inset-0 transition-opacity"},Me={ref:"backdrop",class:"absolute inset-0 bg-gray-500 opacity-75"},at=["primary","secondary"],nt=["default","filled","blank"],it=K({__name:"ElInputSearch",props:B({...de(),status:{type:String,default:"default"},text:{type:String,default:void 0},results:{type:Array,default:void 0},footer:{type:Object,default:void 0},blankResults:{type:Object,default:void 0},shouldHoverFirstResultOnOpen:{type:Boolean,default:!1},color:{type:String,default:"primary"}},{isOpen:{default:!0,required:!0,type:Boolean},isOpenModifiers:{}}),emits:B(["update:modelValue","onResultClick","onResultHover"],["update:isOpen"]),setup(t,{emit:A}){const s=t,y=A,x=J(),T=ie(document.body),k=f(null),D=w(()=>s.modelValue),H=w(()=>[s.validation]),S=w(()=>({default:!s.results,filled:s.results&&s.results.length>0,blank:s.results&&s.results.length===0})),j=f(!1),C=f(!1),I=f([]),a=f(),{value:g,uuid:z,setValue:L}=fe(D,H,s.name,e=>{y("update:modelValue",e==null?void 0:e.trim())}),b=f(),{hasFocus:N,activate:P,deactivate:U}=me(b),m=Q(t,"isOpen"),M=()=>{m.value=!1,a.value=void 0},q=e=>{var o,u,n;(n=(u=(o=I.value)==null?void 0:o.at(e))==null?void 0:u.$el)==null||n.scrollIntoView({block:"nearest"})},_=e=>{y("onResultClick",e),L(""),a.value=void 0},v=e=>{a.value=e,q(e),y("onResultHover",e)},G=()=>M();return ue(["ArrowUp","ArrowDown","Enter","Escape"],e=>{var o;if(e.preventDefault(),e.stopPropagation(),N&&((o=s.results)!=null&&o.length))switch(e.key){case"ArrowUp":const u=Math.max((a.value??0)-1,0);v(u);break;case"ArrowDown":const n=a.value!==void 0?Math.min(a.value+1,s.results.length-1):0;v(n);break;case"Enter":a.value!==void 0&&_(a.value);break}e.key==="Escape"&&M()},{target:b}),W([m,k],async()=>{var e,o;T.value=m.value,m.value?((e=k.value)==null||e.focus(),s.shouldHoverFirstResultOnOpen&&((o=s.results)!=null&&o.length)&&v(0),await X(),P()):U()}),(e,o)=>(l(),R(Y,{to:"body"},[p(ne,{name:"fade"},{default:Z(()=>[m.value?(l(),i("div",{key:0,ref_key:"searchBarRef",ref:b,class:"fixed inset-x-0 top-0 z-40 flex justify-center max-h-full overflow-y-auto px-4 pt-20 pb-6 max-sm:p-0"},[F((l(),i("div",{class:E(["m-10 z-50 md:max-w-3xl w-full flex flex-col p-6 border rounded-2xl border-neutral-surface bg-neutral-surface shadow-md",{"gap-6":s.results}])},[r("div",pe,[p($,{name:"MagnifyingGlassIcon",class:"text-neutral-lighter w-6 h-6"}),F(r("input",{ref_key:"searchInput",ref:k,"onUpdate:modelValue":o[0]||(o[0]=u=>ee(g)?g.value=u:null),name:e.id||`${d(z)}`,type:"text",class:"p-0 text-lg font-normal flex-1 outline-none border-none bg-neutral-surface focus:ring-none focus:border-none focus:outline-none border-transparent focus:border-transparent focus:ring-0",placeholder:e.placeholder,onFocusin:o[1]||(o[1]=()=>{C.value=!0,j.value=!1}),onFocusout:o[2]||(o[2]=()=>{C.value=!1})},null,40,ve),[[te,d(g)]])]),r("span",he,[t.results?(l(),R(V,{key:0,direction:"horizontal"})):c("",!0),t.blankResults&&S.value.blank?(l(),i("div",ye,[p($,O(t.blankResults.icon,{class:"w-7 h-7"}),null,16),r("p",xe,h(t.blankResults.primaryRow),1),r("p",ke,h(t.blankResults.secondaryRow),1)])):c("",!0),t.results&&S.value.filled?(l(),i("div",ge,[r("div",{class:E(["flex flex-col items-start flex-1 gap-6 overflow-y-auto max-h-50-screen",{"pr-6":d(x).info&&t.results.length>0}])},[t.text?(l(),i("span",be,h(t.text),1)):c("",!0),r("div",we,[(l(!0),i(oe,null,se(t.results,(u,n)=>(l(),R(re,O({key:n,ref_for:!0,ref_key:"itemRefs",ref:I,color:t.color},u,{status:a.value===n?"hover":"default",tabindex:"-1",onClick:()=>_(n),onMouseover:()=>v(n)}),null,16,["color","status","onClick","onMouseover"]))),128))])],2),d(x).info?(l(),i("div",Re,[p(V,{direction:"vertical"})])):c("",!0),d(x).info?(l(),i("div",Oe,[le(e.$slots,"info")])):c("",!0)])):c("",!0),t.results&&t.footer?(l(),i("div",Se,[r("span",Ce,h(t.footer.text),1),p(d(ae),O(t.footer.button,{variant:"tertiary"}),null,16)])):c("",!0)])],2)),[[d(ce),G]]),r("div",Ie,[r("div",Me,null,512)])],512)):c("",!0)]),_:3})]))}});export{it as default,at as elInputSearchColors,nt as elInputSearchStatus};
1
+ import{defineComponent as K,mergeModels as B,useSlots as J,ref as f,computed as w,useModel as Q,watch as W,nextTick as X,openBlock as l,createBlock as R,Teleport as Y,createVNode as v,withCtx as Z,createElementBlock as i,withDirectives as F,normalizeClass as E,createElementVNode as r,isRef as ee,unref as d,vModelText as te,createCommentVNode as c,mergeProps as O,toDisplayString as y,Fragment as oe,renderList as se,renderSlot as le}from"vue";import V from"../ElDivider.vue.esm2.js";import $ from"../ElIcon.vue.esm2.js";import re from"../ElVerticalTab.vue.esm2.js";/* empty css */import"../polyfills.esm.js";import"vee-validate";import"../node_modules/codice-fiscale-js/dist/codice.fiscale.commonjs2.esm.js";import"../node_modules/lodash/lodash.esm.js";import"../tailwind.plugin.esm.js";import"../node_modules/@davincihealthcare/elty-design-system-foundations/dist/index.esm.js";import ae from"../ElButton.vue.esm2.js";import ne from"../_CustomTransition.vue.esm2.js";import{useScrollLock as ie,onKeyStroke as ue}from"../node_modules/@vueuse/core/index.esm.js";import"./ElInputText.vue.esm2.js";import"./ElInputCheckbox.vue.esm2.js";import"./ElInputDate.vue.esm2.js";import"./ElInputFile.vue.esm2.js";import"./ElInputMeasureUnit.vue.esm2.js";import"./ElInputNumber.vue.esm2.js";import"./ElInputPhone.vue.esm2.js";import"./ElInputSelect.vue.esm2.js";import"./ElInputTextarea.vue.esm2.js";import"../ElToast.vue.esm2.js";import"./ElInputRadioButton.vue.esm2.js";import{VOnClickOutside as ce}from"../node_modules/@vueuse/components/index.esm.js";import{withTextualElInputProps as de,useInput as fe}from"./input.esm.js";import"../node_modules/swiper/shared/swiper-core.esm.js";/* empty css *//* empty css */import{useFocusTrap as me}from"../node_modules/@vueuse/integrations/useFocusTrap.esm.js";const pe={class:"flex flex-row items-center gap-3 bg-neutral-surface rounded-2xl"},ve=["name","placeholder"],he={class:"flex flex-col gap-y-6 overflow-y-hidden"},ye={key:1,class:"flex flex-col items-center justify-center flex-1 gap-4 py-8 text-neutral-lighter"},xe={class:"text-sm font-semibold text-neutral-darker"},ke={class:"text-sm font-normal"},ge={key:2,class:"flex py-2 overflow-y-hidden"},be={key:0,class:"text-sm font-medium text-neutral-darker"},we={class:"flex flex-col gap-1 w-full"},Re={key:0},Oe={key:1,class:"flex-1 pl-6 overflow-y-auto"},Se={key:3,class:"flex items-center gap-1 self-stretch"},Ce={class:"text-sm font-normal text-neutral-darker"},Ie={class:"fixed inset-0 transition-opacity"},Me={ref:"backdrop",class:"absolute inset-0 bg-gray-500 opacity-75"},at=["primary","secondary"],nt=["default","filled","blank"],it=K({__name:"ElInputSearch",props:B({...de(),status:{type:String,default:"default"},text:{type:String,default:void 0},results:{type:Array,default:void 0},footer:{type:Object,default:void 0},blankResults:{type:Object,default:void 0},shouldHoverFirstResultOnOpen:{type:Boolean,default:!1},color:{type:String,default:"primary"}},{isOpen:{default:!0,required:!0,type:Boolean},isOpenModifiers:{}}),emits:B(["update:modelValue","onResultClick","onResultHover"],["update:isOpen"]),setup(t,{emit:A}){const s=t,x=A,k=J(),T=ie(document.body),g=f(null),D=w(()=>s.modelValue),H=w(()=>[s.validation]),S=w(()=>({default:!s.results,filled:s.results&&s.results.length>0,blank:s.results&&s.results.length===0})),j=f(!1),C=f(!1),I=f([]),a=f(),{value:m,uuid:z,setValue:L}=fe(D,H,s.name,e=>{x("update:modelValue",e==null?void 0:e.trim())}),b=f(),{hasFocus:N,activate:P,deactivate:U}=me(b),p=Q(t,"isOpen"),M=()=>{p.value=!1,a.value=void 0,m.value=""},q=e=>{var o,u,n;(n=(u=(o=I.value)==null?void 0:o.at(e))==null?void 0:u.$el)==null||n.scrollIntoView({block:"nearest"})},_=e=>{x("onResultClick",e),L(""),a.value=void 0},h=e=>{a.value=e,q(e),x("onResultHover",e)},G=()=>M();return ue(["ArrowUp","ArrowDown","Enter","Escape"],e=>{var o;if(e.preventDefault(),e.stopPropagation(),N&&((o=s.results)!=null&&o.length))switch(e.key){case"ArrowUp":const u=Math.max((a.value??0)-1,0);h(u);break;case"ArrowDown":const n=a.value!==void 0?Math.min(a.value+1,s.results.length-1):0;h(n);break;case"Enter":a.value!==void 0&&_(a.value);break}e.key==="Escape"&&M()},{target:b}),W([p,g],async()=>{var e,o;T.value=p.value,p.value?((e=g.value)==null||e.focus(),s.shouldHoverFirstResultOnOpen&&((o=s.results)!=null&&o.length)&&h(0),await X(),P()):(U(),m.value="")}),(e,o)=>(l(),R(Y,{to:"body"},[v(ne,{name:"fade"},{default:Z(()=>[p.value?(l(),i("div",{key:0,ref_key:"searchBarRef",ref:b,class:"fixed inset-x-0 top-0 z-40 flex justify-center max-h-full overflow-y-auto px-4 pt-20 pb-6 max-sm:p-0"},[F((l(),i("div",{class:E(["m-10 z-50 md:max-w-3xl w-full flex flex-col p-6 border rounded-2xl border-neutral-surface bg-neutral-surface shadow-md",{"gap-6":s.results}])},[r("div",pe,[v($,{name:"MagnifyingGlassIcon",class:"text-neutral-lighter w-6 h-6"}),F(r("input",{ref_key:"searchInput",ref:g,"onUpdate:modelValue":o[0]||(o[0]=u=>ee(m)?m.value=u:null),name:e.id||`${d(z)}`,type:"text",class:"p-0 text-lg font-normal flex-1 outline-none border-none bg-neutral-surface focus:ring-none focus:border-none focus:outline-none border-transparent focus:border-transparent focus:ring-0",placeholder:e.placeholder,onFocusin:o[1]||(o[1]=()=>{C.value=!0,j.value=!1}),onFocusout:o[2]||(o[2]=()=>{C.value=!1})},null,40,ve),[[te,d(m)]])]),r("span",he,[t.results?(l(),R(V,{key:0,direction:"horizontal"})):c("",!0),t.blankResults&&S.value.blank?(l(),i("div",ye,[v($,O(t.blankResults.icon,{class:"w-7 h-7"}),null,16),r("p",xe,y(t.blankResults.primaryRow),1),r("p",ke,y(t.blankResults.secondaryRow),1)])):c("",!0),t.results&&S.value.filled?(l(),i("div",ge,[r("div",{class:E(["flex flex-col items-start flex-1 gap-6 overflow-y-auto max-h-50-screen",{"pr-6":d(k).info&&t.results.length>0}])},[t.text?(l(),i("span",be,y(t.text),1)):c("",!0),r("div",we,[(l(!0),i(oe,null,se(t.results,(u,n)=>(l(),R(re,O({key:n,ref_for:!0,ref_key:"itemRefs",ref:I,color:t.color},u,{status:a.value===n?"hover":"default",tabindex:"-1",onClick:()=>_(n),onMouseover:()=>h(n)}),null,16,["color","status","onClick","onMouseover"]))),128))])],2),d(k).info?(l(),i("div",Re,[v(V,{direction:"vertical"})])):c("",!0),d(k).info?(l(),i("div",Oe,[le(e.$slots,"info")])):c("",!0)])):c("",!0),t.results&&t.footer?(l(),i("div",Se,[r("span",Ce,y(t.footer.text),1),v(d(ae),O(t.footer.button,{variant:"tertiary"}),null,16)])):c("",!0)])],2)),[[d(ce),G]]),r("div",Ie,[r("div",Me,null,512)])],512)):c("",!0)]),_:3})]))}});export{it as default,at as elInputSearchColors,nt as elInputSearchStatus};
2
2
  //# sourceMappingURL=ElInputSearch.vue.esm2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputSearch.vue.esm2.js","sources":["../../../src/forms/ElInputSearch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elInputSearchColors = ['primary', 'secondary'] as const;\nexport type ElInputSearchColors = (typeof elInputSearchColors)[number];\n\nexport const elInputSearchStatus = ['default', 'filled', 'blank'] as const;\nexport type ElInputSearchStatus = (typeof elInputSearchStatus)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport ElDivider from '@/ElDivider.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport ElVerticalTab from '@/ElVerticalTab.vue';\nimport { ElButton } from '..';\nimport { computed, PropType, ref, useSlots, watch, nextTick } from 'vue';\nimport { useInput, withTextualElInputProps } from './input';\nimport { vOnClickOutside } from '@vueuse/components';\nimport CustomTransition from '@/_CustomTransition.vue';\nimport { onKeyStroke, useScrollLock } from '@vueuse/core';\nimport { useFocusTrap } from '@vueuse/integrations/useFocusTrap';\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n status: {\n type: String as PropType<ElInputSearchStatus>,\n default: 'default',\n },\n text: {\n type: String,\n default: undefined,\n },\n results: {\n type: Array as PropType<InstanceType<typeof ElVerticalTab>['$props'][]>,\n default: undefined,\n },\n footer: {\n type: Object as PropType<{\n text: string;\n button: InstanceType<typeof ElButton>['$props'];\n }>,\n default: undefined,\n },\n blankResults: {\n type: Object as PropType<{\n icon: InstanceType<typeof ElIcon>['$props'];\n primaryRow: string;\n secondaryRow?: string;\n }>,\n default: undefined,\n },\n shouldHoverFirstResultOnOpen: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<ElInputSearchColors>,\n default: 'primary',\n },\n});\n\nconst emit = defineEmits(['update:modelValue', 'onResultClick', 'onResultHover']);\nconst slots = useSlots();\nconst isBodyScrollLocked = useScrollLock(document.body);\n\nconst searchInput = ref<HTMLInputElement | null>(null);\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [props.validation]);\nconst computedStatus = computed(() => ({\n default: !props.results,\n filled: props.results && props.results.length > 0,\n blank: props.results && props.results.length === 0,\n}));\nconst isClickOutside = ref(false);\nconst isSearchFocused = ref(false);\n\nconst itemRefs = ref<InstanceType<typeof ElVerticalTab>[]>([]);\nconst activeResult = ref<number | undefined>();\n\nconst { value, uuid, setValue } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue?.trim());\n});\n\nconst searchBarRef = ref<HTMLInputElement>();\nconst { hasFocus, activate, deactivate } = useFocusTrap(searchBarRef as any);\n\nconst isOpen = defineModel('isOpen', {\n default: true,\n required: true,\n type: Boolean,\n});\n\nconst closeSearchBar = () => {\n isOpen.value = false;\n activeResult.value = undefined;\n};\n\nconst scrollToFocusedIndex = (index: number) => {\n itemRefs.value?.at(index)?.$el?.scrollIntoView({ block: 'nearest' });\n};\n\nconst onResultClick = (index: number) => {\n emit('onResultClick', index);\n setValue('');\n activeResult.value = undefined;\n};\n\nconst onResultHover = (index: number) => {\n activeResult.value = index;\n scrollToFocusedIndex(index);\n emit('onResultHover', index);\n};\n\nconst onClickOutside = () => closeSearchBar();\n\nonKeyStroke(\n ['ArrowUp', 'ArrowDown', 'Enter', 'Escape'],\n e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (hasFocus && props.results?.length) {\n switch (e.key) {\n case 'ArrowUp':\n const previousActiveIndex = Math.max((activeResult.value ?? 0) - 1, 0);\n onResultHover(previousActiveIndex);\n break;\n case 'ArrowDown':\n const nextActiveIndex = activeResult.value !== undefined ? Math.min(activeResult.value + 1, props.results.length - 1) : 0;\n onResultHover(nextActiveIndex);\n break;\n case 'Enter':\n if (activeResult.value !== undefined) {\n onResultClick(activeResult.value);\n }\n break;\n }\n }\n\n if (e.key === 'Escape') {\n closeSearchBar();\n }\n },\n { target: searchBarRef },\n);\n\nwatch([isOpen, searchInput], async () => {\n isBodyScrollLocked.value = isOpen.value;\n\n if (isOpen.value) {\n searchInput.value?.focus();\n\n if (props.shouldHoverFirstResultOnOpen && props.results?.length) {\n onResultHover(0);\n }\n\n await nextTick();\n activate();\n } else {\n deactivate();\n }\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <CustomTransition name=\"fade\">\n <div\n v-if=\"isOpen\"\n ref=\"searchBarRef\"\n class=\"fixed inset-x-0 top-0 z-40 flex justify-center max-h-full overflow-y-auto px-4 pt-20 pb-6 max-sm:p-0\"\n >\n <div\n v-on-click-outside=\"onClickOutside\"\n class=\"m-10 z-50 md:max-w-3xl w-full flex flex-col p-6 border rounded-2xl border-neutral-surface bg-neutral-surface shadow-md\"\n :class=\"{\n 'gap-6': props.results,\n }\"\n >\n <!-- Search bar -->\n <div class=\"flex flex-row items-center gap-3 bg-neutral-surface rounded-2xl\">\n <ElIcon name=\"MagnifyingGlassIcon\" class=\"text-neutral-lighter w-6 h-6\" />\n <input\n ref=\"searchInput\"\n v-model=\"value\"\n :name=\"id || `${uuid}`\"\n type=\"text\"\n class=\"p-0 text-lg font-normal flex-1 outline-none border-none bg-neutral-surface focus:ring-none focus:border-none focus:outline-none border-transparent focus:border-transparent focus:ring-0\"\n :placeholder=\"placeholder\"\n @focusin=\"\n () => {\n isSearchFocused = true; // Set search focused\n isClickOutside = false; // Set click outside to false\n }\n \"\n @focusout=\"\n () => {\n isSearchFocused = false;\n }\n \"\n />\n </div>\n\n <span class=\"flex flex-col gap-y-6 overflow-y-hidden\">\n <ElDivider v-if=\"results\" direction=\"horizontal\" />\n <div\n v-if=\"blankResults && computedStatus.blank\"\n class=\"flex flex-col items-center justify-center flex-1 gap-4 py-8 text-neutral-lighter\"\n >\n <ElIcon v-bind=\"blankResults.icon\" class=\"w-7 h-7\" />\n <p class=\"text-sm font-semibold text-neutral-darker\">{{ blankResults.primaryRow }}</p>\n <p class=\"text-sm font-normal\">{{ blankResults.secondaryRow }}</p>\n </div>\n <div v-if=\"results && computedStatus.filled\" class=\"flex py-2 overflow-y-hidden\">\n <!-- Results Left column -->\n <div\n class=\"flex flex-col items-start flex-1 gap-6 overflow-y-auto max-h-50-screen\"\n :class=\"{ 'pr-6': slots.info && results.length > 0 }\"\n >\n <span v-if=\"text\" class=\"text-sm font-medium text-neutral-darker\">{{ text }}</span>\n <div class=\"flex flex-col gap-1 w-full\">\n <ElVerticalTab\n v-for=\"(result, index) in results\"\n :key=\"index\"\n ref=\"itemRefs\"\n :color=\"color\"\n v-bind=\"result\"\n :status=\"activeResult === index ? 'hover' : 'default'\"\n tabindex=\"-1\"\n @click=\"() => onResultClick(index)\"\n @mouseover=\"() => onResultHover(index)\"\n />\n </div>\n </div>\n <!-- Blank Results -->\n\n <div v-if=\"slots.info\">\n <ElDivider direction=\"vertical\" />\n </div>\n <div v-if=\"slots.info\" class=\"flex-1 pl-6 overflow-y-auto\">\n <slot name=\"info\"></slot>\n </div>\n </div>\n <div v-if=\"results && footer\" class=\"flex items-center gap-1 self-stretch\">\n <span class=\"text-sm font-normal text-neutral-darker\">{{ footer.text }}</span>\n <ElButton v-bind=\"footer.button\" variant=\"tertiary\" />\n </div>\n </span>\n </div>\n\n <!-- Backdrop -->\n <div class=\"fixed inset-0 transition-opacity\">\n <div ref=\"backdrop\" class=\"absolute inset-0 bg-gray-500 opacity-75\"></div>\n </div>\n </div>\n </CustomTransition>\n </Teleport>\n</template>\n"],"names":["elInputSearchColors","elInputSearchStatus","props","__props","emit","__emit","slots","useSlots","isBodyScrollLocked","useScrollLock","searchInput","ref","computedModelValue","computed","computedValidation","computedStatus","isClickOutside","isSearchFocused","itemRefs","activeResult","value","uuid","setValue","useInput","newValue","searchBarRef","hasFocus","activate","deactivate","useFocusTrap","isOpen","_useModel","closeSearchBar","scrollToFocusedIndex","index","_c","_b","_a","onResultClick","onResultHover","onClickOutside","onKeyStroke","previousActiveIndex","nextActiveIndex","watch","nextTick"],"mappings":"koFACaA,GAAsB,CAAC,UAAW,WAAW,EAG7CC,GAAsB,CAAC,UAAW,SAAU,OAAO,+eAgBhE,MAAMC,EAAQC,EAuCRC,EAAOC,EACPC,EAAQC,IACRC,EAAqBC,GAAc,SAAS,IAAI,EAEhDC,EAAcC,EAA6B,IAAI,EAC/CC,EAAqBC,EAAS,IAAMX,EAAM,UAAU,EACpDY,EAAqBD,EAAS,IAAM,CAACX,EAAM,UAAU,CAAC,EACtDa,EAAiBF,EAAS,KAAO,CACrC,QAAS,CAACX,EAAM,QAChB,OAAQA,EAAM,SAAWA,EAAM,QAAQ,OAAS,EAChD,MAAOA,EAAM,SAAWA,EAAM,QAAQ,SAAW,CACjD,EAAA,EACIc,EAAiBL,EAAI,EAAK,EAC1BM,EAAkBN,EAAI,EAAK,EAE3BO,EAAWP,EAA0C,CAAA,CAAE,EACvDQ,EAAeR,IAEf,CAAE,MAAAS,EAAO,KAAAC,EAAM,SAAAC,GAAaC,GAASX,EAAoBE,EAAoBZ,EAAM,KAAkBsB,GAAA,CACpGpB,EAAA,oBAAqBoB,GAAA,YAAAA,EAAU,MAAM,CAAA,CAC3C,EAEKC,EAAed,IACf,CAAE,SAAAe,EAAU,SAAAC,EAAU,WAAAC,CAAW,EAAIC,GAAaJ,CAAmB,EAErEK,EAASC,EAAY5B,EAAA,QAI1B,EAEK6B,EAAiB,IAAM,CAC3BF,EAAO,MAAQ,GACfX,EAAa,MAAQ,MAAA,EAGjBc,EAAwBC,GAAkB,YACrCC,GAAAC,GAAAC,EAAAnB,EAAA,QAAA,YAAAmB,EAAO,GAAGH,KAAV,YAAAE,EAAkB,MAAlB,MAAAD,EAAuB,eAAe,CAAE,MAAO,SAAA,EAAW,EAG/DG,EAAiBJ,GAAkB,CACvC9B,EAAK,gBAAiB8B,CAAK,EAC3BZ,EAAS,EAAE,EACXH,EAAa,MAAQ,MAAA,EAGjBoB,EAAiBL,GAAkB,CACvCf,EAAa,MAAQe,EACrBD,EAAqBC,CAAK,EAC1B9B,EAAK,gBAAiB8B,CAAK,CAAA,EAGvBM,EAAiB,IAAMR,IAE7B,OAAAS,GACE,CAAC,UAAW,YAAa,QAAS,QAAQ,EACrC,GAAA,OAIC,GAHJ,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAEdf,KAAYW,EAAAnC,EAAM,UAAN,MAAAmC,EAAe,QAC7B,OAAQ,EAAE,IAAK,CACb,IAAK,UACH,MAAMK,EAAsB,KAAK,KAAKvB,EAAa,OAAS,GAAK,EAAG,CAAC,EACrEoB,EAAcG,CAAmB,EACjC,MACF,IAAK,YACH,MAAMC,EAAkBxB,EAAa,QAAU,OAAY,KAAK,IAAIA,EAAa,MAAQ,EAAGjB,EAAM,QAAQ,OAAS,CAAC,EAAI,EACxHqC,EAAcI,CAAe,EAC7B,MACF,IAAK,QACCxB,EAAa,QAAU,QACzBmB,EAAcnB,EAAa,KAAK,EAElC,KACJ,CAGE,EAAE,MAAQ,UACGa,GAEnB,EACA,CAAE,OAAQP,CAAa,CAAA,EAGzBmB,EAAM,CAACd,EAAQpB,CAAW,EAAG,SAAY,SACvCF,EAAmB,MAAQsB,EAAO,MAE9BA,EAAO,QACTO,EAAA3B,EAAY,QAAZ,MAAA2B,EAAmB,QAEfnC,EAAM,gCAAgCkC,EAAAlC,EAAM,UAAN,MAAAkC,EAAe,SACvDG,EAAc,CAAC,EAGjB,MAAMM,EAAS,EACNlB,KAEEC,GACb,CACD"}
1
+ {"version":3,"file":"ElInputSearch.vue.esm2.js","sources":["../../src/forms/ElInputSearch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elInputSearchColors = ['primary', 'secondary'] as const;\nexport type ElInputSearchColors = (typeof elInputSearchColors)[number];\n\nexport const elInputSearchStatus = ['default', 'filled', 'blank'] as const;\nexport type ElInputSearchStatus = (typeof elInputSearchStatus)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport ElDivider from '@/ElDivider.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport ElVerticalTab from '@/ElVerticalTab.vue';\nimport { ElButton } from '..';\nimport { computed, PropType, ref, useSlots, watch, nextTick } from 'vue';\nimport { useInput, withTextualElInputProps } from './input';\nimport { vOnClickOutside } from '@vueuse/components';\nimport CustomTransition from '@/_CustomTransition.vue';\nimport { onKeyStroke, useScrollLock } from '@vueuse/core';\nimport { useFocusTrap } from '@vueuse/integrations/useFocusTrap';\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n status: {\n type: String as PropType<ElInputSearchStatus>,\n default: 'default',\n },\n text: {\n type: String,\n default: undefined,\n },\n results: {\n type: Array as PropType<InstanceType<typeof ElVerticalTab>['$props'][]>,\n default: undefined,\n },\n footer: {\n type: Object as PropType<{\n text: string;\n button: InstanceType<typeof ElButton>['$props'];\n }>,\n default: undefined,\n },\n blankResults: {\n type: Object as PropType<{\n icon: InstanceType<typeof ElIcon>['$props'];\n primaryRow: string;\n secondaryRow?: string;\n }>,\n default: undefined,\n },\n shouldHoverFirstResultOnOpen: {\n type: Boolean,\n default: false,\n },\n color: {\n type: String as PropType<ElInputSearchColors>,\n default: 'primary',\n },\n});\n\nconst emit = defineEmits(['update:modelValue', 'onResultClick', 'onResultHover']);\nconst slots = useSlots();\nconst isBodyScrollLocked = useScrollLock(document.body);\n\nconst searchInput = ref<HTMLInputElement | null>(null);\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [props.validation]);\nconst computedStatus = computed(() => ({\n default: !props.results,\n filled: props.results && props.results.length > 0,\n blank: props.results && props.results.length === 0,\n}));\nconst isClickOutside = ref(false);\nconst isSearchFocused = ref(false);\n\nconst itemRefs = ref<InstanceType<typeof ElVerticalTab>[]>([]);\nconst activeResult = ref<number | undefined>();\n\nconst { value, uuid, setValue } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue?.trim());\n});\n\nconst searchBarRef = ref<HTMLInputElement>();\nconst { hasFocus, activate, deactivate } = useFocusTrap(searchBarRef as any);\n\nconst isOpen = defineModel('isOpen', {\n default: true,\n required: true,\n type: Boolean,\n});\n\nconst closeSearchBar = () => {\n isOpen.value = false;\n activeResult.value = undefined;\n value.value = '';\n};\n\nconst scrollToFocusedIndex = (index: number) => {\n itemRefs.value?.at(index)?.$el?.scrollIntoView({ block: 'nearest' });\n};\n\nconst onResultClick = (index: number) => {\n emit('onResultClick', index);\n setValue('');\n activeResult.value = undefined;\n};\n\nconst onResultHover = (index: number) => {\n activeResult.value = index;\n scrollToFocusedIndex(index);\n emit('onResultHover', index);\n};\n\nconst onClickOutside = () => closeSearchBar();\n\nonKeyStroke(\n ['ArrowUp', 'ArrowDown', 'Enter', 'Escape'],\n e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (hasFocus && props.results?.length) {\n switch (e.key) {\n case 'ArrowUp':\n const previousActiveIndex = Math.max((activeResult.value ?? 0) - 1, 0);\n onResultHover(previousActiveIndex);\n break;\n case 'ArrowDown':\n const nextActiveIndex = activeResult.value !== undefined ? Math.min(activeResult.value + 1, props.results.length - 1) : 0;\n onResultHover(nextActiveIndex);\n break;\n case 'Enter':\n if (activeResult.value !== undefined) {\n onResultClick(activeResult.value);\n }\n break;\n }\n }\n\n if (e.key === 'Escape') {\n closeSearchBar();\n }\n },\n { target: searchBarRef },\n);\n\nwatch([isOpen, searchInput], async () => {\n isBodyScrollLocked.value = isOpen.value;\n\n if (isOpen.value) {\n searchInput.value?.focus();\n\n if (props.shouldHoverFirstResultOnOpen && props.results?.length) {\n onResultHover(0);\n }\n\n await nextTick();\n activate();\n } else {\n deactivate();\n value.value = '';\n }\n});\n</script>\n\n<template>\n <Teleport to=\"body\">\n <CustomTransition name=\"fade\">\n <div\n v-if=\"isOpen\"\n ref=\"searchBarRef\"\n class=\"fixed inset-x-0 top-0 z-40 flex justify-center max-h-full overflow-y-auto px-4 pt-20 pb-6 max-sm:p-0\"\n >\n <div\n v-on-click-outside=\"onClickOutside\"\n class=\"m-10 z-50 md:max-w-3xl w-full flex flex-col p-6 border rounded-2xl border-neutral-surface bg-neutral-surface shadow-md\"\n :class=\"{\n 'gap-6': props.results,\n }\"\n >\n <!-- Search bar -->\n <div class=\"flex flex-row items-center gap-3 bg-neutral-surface rounded-2xl\">\n <ElIcon name=\"MagnifyingGlassIcon\" class=\"text-neutral-lighter w-6 h-6\" />\n <input\n ref=\"searchInput\"\n v-model=\"value\"\n :name=\"id || `${uuid}`\"\n type=\"text\"\n class=\"p-0 text-lg font-normal flex-1 outline-none border-none bg-neutral-surface focus:ring-none focus:border-none focus:outline-none border-transparent focus:border-transparent focus:ring-0\"\n :placeholder=\"placeholder\"\n @focusin=\"\n () => {\n isSearchFocused = true; // Set search focused\n isClickOutside = false; // Set click outside to false\n }\n \"\n @focusout=\"\n () => {\n isSearchFocused = false;\n }\n \"\n />\n </div>\n\n <span class=\"flex flex-col gap-y-6 overflow-y-hidden\">\n <ElDivider v-if=\"results\" direction=\"horizontal\" />\n <div\n v-if=\"blankResults && computedStatus.blank\"\n class=\"flex flex-col items-center justify-center flex-1 gap-4 py-8 text-neutral-lighter\"\n >\n <ElIcon v-bind=\"blankResults.icon\" class=\"w-7 h-7\" />\n <p class=\"text-sm font-semibold text-neutral-darker\">{{ blankResults.primaryRow }}</p>\n <p class=\"text-sm font-normal\">{{ blankResults.secondaryRow }}</p>\n </div>\n <div v-if=\"results && computedStatus.filled\" class=\"flex py-2 overflow-y-hidden\">\n <!-- Results Left column -->\n <div\n class=\"flex flex-col items-start flex-1 gap-6 overflow-y-auto max-h-50-screen\"\n :class=\"{ 'pr-6': slots.info && results.length > 0 }\"\n >\n <span v-if=\"text\" class=\"text-sm font-medium text-neutral-darker\">{{ text }}</span>\n <div class=\"flex flex-col gap-1 w-full\">\n <ElVerticalTab\n v-for=\"(result, index) in results\"\n :key=\"index\"\n ref=\"itemRefs\"\n :color=\"color\"\n v-bind=\"result\"\n :status=\"activeResult === index ? 'hover' : 'default'\"\n tabindex=\"-1\"\n @click=\"() => onResultClick(index)\"\n @mouseover=\"() => onResultHover(index)\"\n />\n </div>\n </div>\n <!-- Blank Results -->\n\n <div v-if=\"slots.info\">\n <ElDivider direction=\"vertical\" />\n </div>\n <div v-if=\"slots.info\" class=\"flex-1 pl-6 overflow-y-auto\">\n <slot name=\"info\"></slot>\n </div>\n </div>\n <div v-if=\"results && footer\" class=\"flex items-center gap-1 self-stretch\">\n <span class=\"text-sm font-normal text-neutral-darker\">{{ footer.text }}</span>\n <ElButton v-bind=\"footer.button\" variant=\"tertiary\" />\n </div>\n </span>\n </div>\n\n <!-- Backdrop -->\n <div class=\"fixed inset-0 transition-opacity\">\n <div ref=\"backdrop\" class=\"absolute inset-0 bg-gray-500 opacity-75\"></div>\n </div>\n </div>\n </CustomTransition>\n </Teleport>\n</template>\n"],"names":["elInputSearchColors","elInputSearchStatus","props","__props","emit","__emit","slots","useSlots","isBodyScrollLocked","useScrollLock","searchInput","ref","computedModelValue","computed","computedValidation","computedStatus","isClickOutside","isSearchFocused","itemRefs","activeResult","value","uuid","setValue","useInput","newValue","searchBarRef","hasFocus","activate","deactivate","useFocusTrap","isOpen","_useModel","closeSearchBar","scrollToFocusedIndex","index","_c","_b","_a","onResultClick","onResultHover","onClickOutside","onKeyStroke","previousActiveIndex","nextActiveIndex","watch","nextTick"],"mappings":"umFACaA,GAAsB,CAAC,UAAW,WAAW,EAG7CC,GAAsB,CAAC,UAAW,SAAU,OAAO,+eAgBhE,MAAMC,EAAQC,EAuCRC,EAAOC,EACPC,EAAQC,IACRC,EAAqBC,GAAc,SAAS,IAAI,EAEhDC,EAAcC,EAA6B,IAAI,EAC/CC,EAAqBC,EAAS,IAAMX,EAAM,UAAU,EACpDY,EAAqBD,EAAS,IAAM,CAACX,EAAM,UAAU,CAAC,EACtDa,EAAiBF,EAAS,KAAO,CACrC,QAAS,CAACX,EAAM,QAChB,OAAQA,EAAM,SAAWA,EAAM,QAAQ,OAAS,EAChD,MAAOA,EAAM,SAAWA,EAAM,QAAQ,SAAW,CACjD,EAAA,EACIc,EAAiBL,EAAI,EAAK,EAC1BM,EAAkBN,EAAI,EAAK,EAE3BO,EAAWP,EAA0C,CAAA,CAAE,EACvDQ,EAAeR,IAEf,CAAE,MAAAS,EAAO,KAAAC,EAAM,SAAAC,GAAaC,GAASX,EAAoBE,EAAoBZ,EAAM,KAAkBsB,GAAA,CACpGpB,EAAA,oBAAqBoB,GAAA,YAAAA,EAAU,MAAM,CAAA,CAC3C,EAEKC,EAAed,IACf,CAAE,SAAAe,EAAU,SAAAC,EAAU,WAAAC,CAAW,EAAIC,GAAaJ,CAAmB,EAErEK,EAASC,EAAY5B,EAAA,QAI1B,EAEK6B,EAAiB,IAAM,CAC3BF,EAAO,MAAQ,GACfX,EAAa,MAAQ,OACrBC,EAAM,MAAQ,EAAA,EAGVa,EAAwBC,GAAkB,YACrCC,GAAAC,GAAAC,EAAAnB,EAAA,QAAA,YAAAmB,EAAO,GAAGH,KAAV,YAAAE,EAAkB,MAAlB,MAAAD,EAAuB,eAAe,CAAE,MAAO,SAAA,EAAW,EAG/DG,EAAiBJ,GAAkB,CACvC9B,EAAK,gBAAiB8B,CAAK,EAC3BZ,EAAS,EAAE,EACXH,EAAa,MAAQ,MAAA,EAGjBoB,EAAiBL,GAAkB,CACvCf,EAAa,MAAQe,EACrBD,EAAqBC,CAAK,EAC1B9B,EAAK,gBAAiB8B,CAAK,CAAA,EAGvBM,EAAiB,IAAMR,IAE7B,OAAAS,GACE,CAAC,UAAW,YAAa,QAAS,QAAQ,EACrC,GAAA,OAIC,GAHJ,EAAE,eAAe,EACjB,EAAE,gBAAgB,EAEdf,KAAYW,EAAAnC,EAAM,UAAN,MAAAmC,EAAe,QAC7B,OAAQ,EAAE,IAAK,CACb,IAAK,UACH,MAAMK,EAAsB,KAAK,KAAKvB,EAAa,OAAS,GAAK,EAAG,CAAC,EACrEoB,EAAcG,CAAmB,EACjC,MACF,IAAK,YACH,MAAMC,EAAkBxB,EAAa,QAAU,OAAY,KAAK,IAAIA,EAAa,MAAQ,EAAGjB,EAAM,QAAQ,OAAS,CAAC,EAAI,EACxHqC,EAAcI,CAAe,EAC7B,MACF,IAAK,QACCxB,EAAa,QAAU,QACzBmB,EAAcnB,EAAa,KAAK,EAElC,KACJ,CAGE,EAAE,MAAQ,UACGa,GAEnB,EACA,CAAE,OAAQP,CAAa,CAAA,EAGzBmB,EAAM,CAACd,EAAQpB,CAAW,EAAG,SAAY,SACvCF,EAAmB,MAAQsB,EAAO,MAE9BA,EAAO,QACTO,EAAA3B,EAAY,QAAZ,MAAA2B,EAAmB,QAEfnC,EAAM,gCAAgCkC,EAAAlC,EAAM,UAAN,MAAAkC,EAAe,SACvDG,EAAc,CAAC,EAGjB,MAAMM,EAAS,EACNlB,MAEEC,IACXR,EAAM,MAAQ,GAChB,CACD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),y=require("./input.cjs.js"),I=require("../types.cjs.js"),M=require("./utils.cjs.js"),A=require("../ElDropdown.vue.cjs2.js"),S=require("../ElAvatar.vue.cjs2.js"),D=require("../ElIcon.vue.cjs2.js"),T=require("./ElInputContainer.vue.cjs2.js"),N=require("../../node_modules/lodash/lodash.cjs.js"),z=["name","disabled","data-cy","onMousedown","onFocus","onBlur","onKeydown"],P={key:0,class:"text-neutral-inactive truncate w-full block"},F={key:1,class:"flex h-full w-full items-center justify-start truncate"},L={class:"truncate"},O={key:2,class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"},R=e.defineComponent({__name:"ElInputSelect",props:{...y.withCommonElInputProps(),modelValue:{type:[Array,String],required:!1,default:void 0},placeholder:{type:String,default:"",required:!1},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},noRemoveValue:{type:Boolean,default:!1},positionToAnchor:{type:String,required:!1,default:"bottom"}},emits:["update:modelValue","update:modelLabel"],setup(d,{emit:k}){const o=d,w=e.computed(()=>{var a;const l=o.options.map(t=>{var u,i,s;const n={text:t.label,semiboldText:"semiboldText"in t?t.semiboldText:void 0,avatar:t.imageUrl?{avatarUrl:t.imageUrl,role:I.Role.Patient}:void 0,onClick:()=>p(o.multiple?N.default.xor(r.value,[t.value]):t.value),check:o.multiple?(u=o.modelValue)==null?void 0:u.includes(t.value):t.value==o.modelValue};return M.isAutocompleteOptionType(t)&&((i=t.prefixIcon)!=null&&i.name)&&(n.leadingIcon=(s=t.prefixIcon)!=null&&s.name?{name:t.prefixIcon.name,solid:t.prefixIcon.isSolid}:void 0),n});return!o.noRemoveValue&&!o.multiple&&l.unshift({text:"-",onClick:()=>p(void 0)}),o.multiple&&l.unshift({text:((a=r.value)==null?void 0:a.length)===o.options.length?"Deseleziona tutto":"Seleziona tutto",onClick:()=>{var t,n;((t=r.value)==null?void 0:t.length)===o.options.length?p(void 0):p(o.options.map(u=>u.value).slice(0)),(n=h.value)==null||n.hide()}}),l}),_=k,g=e.ref(),h=e.ref(),x=e.computed(()=>o.modelValue),V=e.computed(()=>[o.validation]),{errorMessage:q,value:r,setValue:p}=y.useInput(x,V,o.name,l=>{_("update:modelValue",l),_("update:modelLabel",f(l))}),c=e.computed(()=>!r.value||!f(r.value)),f=l=>{var a,t;if(l)return typeof l=="string"?((t=(a=o.options)==null?void 0:a.find(n=>n.value===l))==null?void 0:t.label)||"":l.map(n=>{const u=o.options.find(i=>i.value===n);return u?u.label:""}).filter(n=>!!n)},v=e.computed(()=>f(r.value)),b=e.computed(()=>{var l,a;if(!(!r.value||o.multiple))return typeof r.value=="string"?(a=(l=o.options)==null?void 0:l.find(t=>t.value===r.value))==null?void 0:a.imageUrl:""}),B=l=>{var a;l(),(a=g.value)==null||a.focus()},C=(l,a)=>{var t;((t=l.relatedTarget)==null?void 0:t.role)!=="option"&&a()},E=(l,a,t)=>{a||(t(),l.preventDefault(),l.stopPropagation())};return(l,a)=>(e.openBlock(),e.createBlock(T.default,e.mergeProps(l.$attrs,{name:l.label,label:l.label,"error-message":o.errorMessage===!1?!1:o.errorMessage||e.unref(q),"hidden-error-message":l.hiddenErrorMessage,"set-required-mark":e.unref(y.showRequiredMark)([o.validation])}),{default:e.withCtx(({error:t})=>[e.createVNode(A.default,{ref_key:"dropdown",ref:h,items:w.value,multiple:d.multiple},{anchor:e.withCtx(({show:n,hide:u,toggle:i,isOpen:s})=>[e.createElementVNode("button",{ref_key:"button",ref:g,type:"button",name:o.name,disabled:l.disabled,class:e.normalizeClass(["el-input !pr-8 px-3",{error:t,empty:c.value,"focus:ring-1":!t}]),"aria-haspopup":"listbox","aria-expanded":"true","aria-labelledby":"listbox-label","data-cy":`${l.label.trim().replaceAll(" ","").replaceAll(".","")}-select`,onMousedown:e.withModifiers(m=>B(i),["prevent"]),onFocus:e.withModifiers(n,["prevent"]),onBlur:e.withModifiers(m=>C(m,u),["prevent"]),onKeydown:e.withKeys(m=>E(m,s,n),["enter"])},[d.placeholder&&c.value?(e.openBlock(),e.createElementBlock("span",P,e.toDisplayString(d.placeholder),1)):(e.openBlock(),e.createElementBlock("span",F,[b.value?(e.openBlock(),e.createBlock(S.default,{key:0,picture:b.value,size:"xxs"},null,8,["picture"])):e.createCommentVNode("",!0),e.createElementVNode("span",L,e.toDisplayString(Array.isArray(v.value)?v.value.join(", "):v.value),1)])),t?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",O,[e.createVNode(D.default,{name:"ChevronDownIcon",solid:"",class:e.normalizeClass(["h-5 w-5 transition-transform duration-200",{"rotate-180":s,"text-neutral-inactive":c.value,"text-neutral-darker":!c.value}])},null,8,["class"])]))],42,z)]),_:2},1032,["items","multiple"])]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});exports.default=R;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),y=require("./input.cjs.js"),I=require("../types.cjs.js"),M=require("./utils.cjs.js"),A=require("../ElDropdown.vue.cjs2.js"),S=require("../ElAvatar.vue.cjs2.js"),D=require("../ElIcon.vue.cjs2.js"),T=require("./ElInputContainer.vue.cjs2.js"),N=require("../node_modules/lodash/lodash.cjs.js"),z=["name","disabled","data-cy","onMousedown","onFocus","onBlur","onKeydown"],P={key:0,class:"text-neutral-inactive truncate w-full block"},F={key:1,class:"flex h-full w-full items-center justify-start truncate"},L={class:"truncate"},O={key:2,class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"},R=e.defineComponent({__name:"ElInputSelect",props:{...y.withCommonElInputProps(),modelValue:{type:[Array,String],required:!1,default:void 0},placeholder:{type:String,default:"",required:!1},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},noRemoveValue:{type:Boolean,default:!1},positionToAnchor:{type:String,required:!1,default:"bottom"}},emits:["update:modelValue","update:modelLabel"],setup(d,{emit:k}){const o=d,w=e.computed(()=>{var a;const l=o.options.map(t=>{var u,i,s;const n={text:t.label,semiboldText:"semiboldText"in t?t.semiboldText:void 0,avatar:t.imageUrl?{avatarUrl:t.imageUrl,role:I.Role.Patient}:void 0,onClick:()=>p(o.multiple?N.default.xor(r.value,[t.value]):t.value),check:o.multiple?(u=o.modelValue)==null?void 0:u.includes(t.value):t.value==o.modelValue};return M.isAutocompleteOptionType(t)&&((i=t.prefixIcon)!=null&&i.name)&&(n.leadingIcon=(s=t.prefixIcon)!=null&&s.name?{name:t.prefixIcon.name,solid:t.prefixIcon.isSolid}:void 0),n});return!o.noRemoveValue&&!o.multiple&&l.unshift({text:"-",onClick:()=>p(void 0)}),o.multiple&&l.unshift({text:((a=r.value)==null?void 0:a.length)===o.options.length?"Deseleziona tutto":"Seleziona tutto",onClick:()=>{var t,n;((t=r.value)==null?void 0:t.length)===o.options.length?p(void 0):p(o.options.map(u=>u.value).slice(0)),(n=h.value)==null||n.hide()}}),l}),_=k,g=e.ref(),h=e.ref(),x=e.computed(()=>o.modelValue),V=e.computed(()=>[o.validation]),{errorMessage:q,value:r,setValue:p}=y.useInput(x,V,o.name,l=>{_("update:modelValue",l),_("update:modelLabel",f(l))}),c=e.computed(()=>!r.value||!f(r.value)),f=l=>{var a,t;if(l)return typeof l=="string"?((t=(a=o.options)==null?void 0:a.find(n=>n.value===l))==null?void 0:t.label)||"":l.map(n=>{const u=o.options.find(i=>i.value===n);return u?u.label:""}).filter(n=>!!n)},v=e.computed(()=>f(r.value)),b=e.computed(()=>{var l,a;if(!(!r.value||o.multiple))return typeof r.value=="string"?(a=(l=o.options)==null?void 0:l.find(t=>t.value===r.value))==null?void 0:a.imageUrl:""}),B=l=>{var a;l(),(a=g.value)==null||a.focus()},C=(l,a)=>{var t;((t=l.relatedTarget)==null?void 0:t.role)!=="option"&&a()},E=(l,a,t)=>{a||(t(),l.preventDefault(),l.stopPropagation())};return(l,a)=>(e.openBlock(),e.createBlock(T.default,e.mergeProps(l.$attrs,{name:l.label,label:l.label,"error-message":o.errorMessage===!1?!1:o.errorMessage||e.unref(q),"hidden-error-message":l.hiddenErrorMessage,"set-required-mark":e.unref(y.showRequiredMark)([o.validation])}),{default:e.withCtx(({error:t})=>[e.createVNode(A.default,{ref_key:"dropdown",ref:h,items:w.value,multiple:d.multiple},{anchor:e.withCtx(({show:n,hide:u,toggle:i,isOpen:s})=>[e.createElementVNode("button",{ref_key:"button",ref:g,type:"button",name:o.name,disabled:l.disabled,class:e.normalizeClass(["el-input !pr-8 px-3",{error:t,empty:c.value,"focus:ring-1":!t}]),"aria-haspopup":"listbox","aria-expanded":"true","aria-labelledby":"listbox-label","data-cy":`${l.label.trim().replaceAll(" ","").replaceAll(".","")}-select`,onMousedown:e.withModifiers(m=>B(i),["prevent"]),onFocus:e.withModifiers(n,["prevent"]),onBlur:e.withModifiers(m=>C(m,u),["prevent"]),onKeydown:e.withKeys(m=>E(m,s,n),["enter"])},[d.placeholder&&c.value?(e.openBlock(),e.createElementBlock("span",P,e.toDisplayString(d.placeholder),1)):(e.openBlock(),e.createElementBlock("span",F,[b.value?(e.openBlock(),e.createBlock(S.default,{key:0,picture:b.value,size:"xxs"},null,8,["picture"])):e.createCommentVNode("",!0),e.createElementVNode("span",L,e.toDisplayString(Array.isArray(v.value)?v.value.join(", "):v.value),1)])),t?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",O,[e.createVNode(D.default,{name:"ChevronDownIcon",solid:"",class:e.normalizeClass(["h-5 w-5 transition-transform duration-200",{"rotate-180":s,"text-neutral-inactive":c.value,"text-neutral-darker":!c.value}])},null,8,["class"])]))],42,z)]),_:2},1032,["items","multiple"])]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});exports.default=R;
2
2
  //# sourceMappingURL=ElInputSelect.vue.cjs2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputSelect.vue.cjs2.js","sources":["../../../src/forms/ElInputSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, withCommonElInputProps } from '@/forms/input';\nimport { computed, PropType, ref } from 'vue';\nimport { OptionType, Role } from '@/types';\nimport { ElClipToAnchorPosition } from '@/ElClipToAnchor.vue';\nimport { AutocompleteOptionType, isAutocompleteOptionType } from '@/forms/utils';\nimport ElDropdown from '@/ElDropdown.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport _ from 'lodash';\n\nexport type OptionValueType = string | string[] | null | undefined;\n\nconst props = defineProps({\n ...withCommonElInputProps(),\n modelValue: {\n // TODO: it should differ between the single input select and the multiselect\n type: [Array, String] as PropType<OptionValueType>,\n required: false,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n options: {\n type: Array as PropType<(OptionType | AutocompleteOptionType)[]>,\n required: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n noRemoveValue: {\n type: Boolean,\n default: false,\n },\n positionToAnchor: {\n type: String as PropType<ElClipToAnchorPosition>,\n required: false,\n default: 'bottom',\n },\n});\n\nconst allOptions = computed<InstanceType<typeof ElDropdown>['$props']['items']>(() => {\n const options = props.options.map(o => {\n const option: InstanceType<typeof ElDropdown>['$props']['items'][number] = {\n text: o.label,\n semiboldText: 'semiboldText' in o ? o.semiboldText : undefined,\n avatar: o.imageUrl ? { avatarUrl: o.imageUrl, role: Role.Patient } : undefined,\n onClick: () => setValue(props.multiple ? _.xor(value.value, [o.value]) : o.value),\n check: props.multiple ? props.modelValue?.includes(o.value) : o.value == props.modelValue,\n };\n\n if (isAutocompleteOptionType(o) && o.prefixIcon?.name) {\n option.leadingIcon = o.prefixIcon?.name ? { name: o.prefixIcon.name, solid: o.prefixIcon.isSolid } : undefined;\n }\n\n return option;\n });\n\n if (!props.noRemoveValue && !props.multiple) {\n options.unshift({\n text: '-',\n onClick: () => setValue(undefined),\n });\n }\n\n if (props.multiple) {\n options.unshift({\n text: value.value?.length === props.options.length ? 'Deseleziona tutto' : 'Seleziona tutto',\n onClick: () => {\n if (value.value?.length === props.options.length) setValue(undefined);\n else setValue(props.options.map(opt => opt.value).slice(0));\n dropdown.value?.hide();\n },\n });\n }\n\n return options;\n});\n\nconst emit = defineEmits<{\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelValue', newValue: OptionValueType): void;\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelLabel', newValue: OptionValueType): void;\n}>();\n\nconst button = ref<HTMLElement>();\nconst dropdown = ref<InstanceType<typeof ElDropdown>>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [props.validation]);\n\nconst { errorMessage, value, setValue } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue);\n emit('update:modelLabel', getLabelForOptionValue(newValue));\n});\n\nconst valueIsEmpty = computed<boolean>(() => {\n return !value.value || !getLabelForOptionValue(value.value);\n});\n\nconst getLabelForOptionValue = (value: OptionValueType): OptionValueType => {\n if (!value) return;\n if (typeof value === 'string') {\n return props.options?.find(o => o.value === value)?.label || '';\n } else {\n // return list of labels\n return value\n .map(v => {\n const option = props.options.find(o => o.value === v);\n return option ? option.label : '';\n })\n .filter(entry => !!entry);\n }\n};\n\nconst valueLabel = computed<OptionValueType>(() => {\n return getLabelForOptionValue(value.value);\n});\n\nconst valueAvatar = computed(() => {\n if (!value.value || props.multiple) return;\n if (typeof value.value === 'string') {\n return props.options?.find(o => o.value === value.value)?.imageUrl;\n }\n return '';\n});\n\nconst toggleDropdownAndGrabFocus = (toggle: () => void) => {\n toggle();\n button.value?.focus();\n};\n\nconst closeDropdownOnBlur = (e: FocusEvent, hide: () => void) => {\n // options dropdown must have an option role, so if it ain't that, close the dropdown\n if ((e.relatedTarget as HTMLElement)?.role !== 'option') {\n hide();\n }\n};\n\nconst showDropdownIfClosed = (e: Event, isOpen: boolean, show: () => void) => {\n if (!isOpen) {\n show();\n\n e.preventDefault();\n e.stopPropagation();\n }\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"label\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([props.validation])\"\n >\n <template #default=\"{ error }\">\n <ElDropdown ref=\"dropdown\" :items=\"allOptions\" :multiple=\"multiple\">\n <template #anchor=\"{ show, hide, toggle, isOpen }\">\n <button\n ref=\"button\"\n type=\"button\"\n :name=\"props.name\"\n :disabled=\"disabled\"\n class=\"el-input !pr-8 px-3\"\n :class=\"{ error, empty: valueIsEmpty, 'focus:ring-1': !error }\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"true\"\n aria-labelledby=\"listbox-label\"\n :data-cy=\"`${label.trim().replaceAll(' ', '').replaceAll('.', '')}-select`\"\n @mousedown.prevent=\"toggleDropdownAndGrabFocus(toggle)\"\n @focus.prevent=\"show\"\n @blur.prevent=\"closeDropdownOnBlur($event, hide)\"\n @keydown.enter=\"showDropdownIfClosed($event, isOpen, show)\"\n >\n <span v-if=\"placeholder && valueIsEmpty\" class=\"text-neutral-inactive truncate w-full block\">\n {{ placeholder }}\n </span>\n <span v-else class=\"flex h-full w-full items-center justify-start truncate\">\n <ElAvatar v-if=\"valueAvatar\" :picture=\"valueAvatar\" size=\"xxs\" />\n <span class=\"truncate\">{{ Array.isArray(valueLabel) ? valueLabel.join(', ') : valueLabel }}</span>\n </span>\n <span v-if=\"!error\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <ElIcon\n name=\"ChevronDownIcon\"\n solid\n class=\"h-5 w-5 transition-transform duration-200\"\n :class=\"{ 'rotate-180': isOpen, 'text-neutral-inactive': valueIsEmpty, 'text-neutral-darker': !valueIsEmpty }\"\n />\n </span>\n </button>\n </template>\n </ElDropdown>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["props","__props","allOptions","computed","options","o","option","Role","setValue","_","value","_a","isAutocompleteOptionType","_b","_c","opt","dropdown","emit","__emit","button","ref","computedModelValue","computedValidation","errorMessage","useInput","newValue","getLabelForOptionValue","valueIsEmpty","v","entry","valueLabel","valueAvatar","toggleDropdownAndGrabFocus","toggle","closeDropdownOnBlur","e","hide","showDropdownIfClosed","isOpen","show"],"mappings":"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"}
1
+ {"version":3,"file":"ElInputSelect.vue.cjs2.js","sources":["../../src/forms/ElInputSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, withCommonElInputProps } from '@/forms/input';\nimport { computed, PropType, ref } from 'vue';\nimport { OptionType, Role } from '@/types';\nimport { ElClipToAnchorPosition } from '@/ElClipToAnchor.vue';\nimport { AutocompleteOptionType, isAutocompleteOptionType } from '@/forms/utils';\nimport ElDropdown from '@/ElDropdown.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport _ from 'lodash';\n\nexport type OptionValueType = string | string[] | null | undefined;\n\nconst props = defineProps({\n ...withCommonElInputProps(),\n modelValue: {\n // TODO: it should differ between the single input select and the multiselect\n type: [Array, String] as PropType<OptionValueType>,\n required: false,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n options: {\n type: Array as PropType<(OptionType | AutocompleteOptionType)[]>,\n required: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n noRemoveValue: {\n type: Boolean,\n default: false,\n },\n positionToAnchor: {\n type: String as PropType<ElClipToAnchorPosition>,\n required: false,\n default: 'bottom',\n },\n});\n\nconst allOptions = computed<InstanceType<typeof ElDropdown>['$props']['items']>(() => {\n const options = props.options.map(o => {\n const option: InstanceType<typeof ElDropdown>['$props']['items'][number] = {\n text: o.label,\n semiboldText: 'semiboldText' in o ? o.semiboldText : undefined,\n avatar: o.imageUrl ? { avatarUrl: o.imageUrl, role: Role.Patient } : undefined,\n onClick: () => setValue(props.multiple ? _.xor(value.value, [o.value]) : o.value),\n check: props.multiple ? props.modelValue?.includes(o.value) : o.value == props.modelValue,\n };\n\n if (isAutocompleteOptionType(o) && o.prefixIcon?.name) {\n option.leadingIcon = o.prefixIcon?.name ? { name: o.prefixIcon.name, solid: o.prefixIcon.isSolid } : undefined;\n }\n\n return option;\n });\n\n if (!props.noRemoveValue && !props.multiple) {\n options.unshift({\n text: '-',\n onClick: () => setValue(undefined),\n });\n }\n\n if (props.multiple) {\n options.unshift({\n text: value.value?.length === props.options.length ? 'Deseleziona tutto' : 'Seleziona tutto',\n onClick: () => {\n if (value.value?.length === props.options.length) setValue(undefined);\n else setValue(props.options.map(opt => opt.value).slice(0));\n dropdown.value?.hide();\n },\n });\n }\n\n return options;\n});\n\nconst emit = defineEmits<{\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelValue', newValue: OptionValueType): void;\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelLabel', newValue: OptionValueType): void;\n}>();\n\nconst button = ref<HTMLElement>();\nconst dropdown = ref<InstanceType<typeof ElDropdown>>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [props.validation]);\n\nconst { errorMessage, value, setValue } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue);\n emit('update:modelLabel', getLabelForOptionValue(newValue));\n});\n\nconst valueIsEmpty = computed<boolean>(() => {\n return !value.value || !getLabelForOptionValue(value.value);\n});\n\nconst getLabelForOptionValue = (value: OptionValueType): OptionValueType => {\n if (!value) return;\n if (typeof value === 'string') {\n return props.options?.find(o => o.value === value)?.label || '';\n } else {\n // return list of labels\n return value\n .map(v => {\n const option = props.options.find(o => o.value === v);\n return option ? option.label : '';\n })\n .filter(entry => !!entry);\n }\n};\n\nconst valueLabel = computed<OptionValueType>(() => {\n return getLabelForOptionValue(value.value);\n});\n\nconst valueAvatar = computed(() => {\n if (!value.value || props.multiple) return;\n if (typeof value.value === 'string') {\n return props.options?.find(o => o.value === value.value)?.imageUrl;\n }\n return '';\n});\n\nconst toggleDropdownAndGrabFocus = (toggle: () => void) => {\n toggle();\n button.value?.focus();\n};\n\nconst closeDropdownOnBlur = (e: FocusEvent, hide: () => void) => {\n // options dropdown must have an option role, so if it ain't that, close the dropdown\n if ((e.relatedTarget as HTMLElement)?.role !== 'option') {\n hide();\n }\n};\n\nconst showDropdownIfClosed = (e: Event, isOpen: boolean, show: () => void) => {\n if (!isOpen) {\n show();\n\n e.preventDefault();\n e.stopPropagation();\n }\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"label\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([props.validation])\"\n >\n <template #default=\"{ error }\">\n <ElDropdown ref=\"dropdown\" :items=\"allOptions\" :multiple=\"multiple\">\n <template #anchor=\"{ show, hide, toggle, isOpen }\">\n <button\n ref=\"button\"\n type=\"button\"\n :name=\"props.name\"\n :disabled=\"disabled\"\n class=\"el-input !pr-8 px-3\"\n :class=\"{ error, empty: valueIsEmpty, 'focus:ring-1': !error }\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"true\"\n aria-labelledby=\"listbox-label\"\n :data-cy=\"`${label.trim().replaceAll(' ', '').replaceAll('.', '')}-select`\"\n @mousedown.prevent=\"toggleDropdownAndGrabFocus(toggle)\"\n @focus.prevent=\"show\"\n @blur.prevent=\"closeDropdownOnBlur($event, hide)\"\n @keydown.enter=\"showDropdownIfClosed($event, isOpen, show)\"\n >\n <span v-if=\"placeholder && valueIsEmpty\" class=\"text-neutral-inactive truncate w-full block\">\n {{ placeholder }}\n </span>\n <span v-else class=\"flex h-full w-full items-center justify-start truncate\">\n <ElAvatar v-if=\"valueAvatar\" :picture=\"valueAvatar\" size=\"xxs\" />\n <span class=\"truncate\">{{ Array.isArray(valueLabel) ? valueLabel.join(', ') : valueLabel }}</span>\n </span>\n <span v-if=\"!error\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <ElIcon\n name=\"ChevronDownIcon\"\n solid\n class=\"h-5 w-5 transition-transform duration-200\"\n :class=\"{ 'rotate-180': isOpen, 'text-neutral-inactive': valueIsEmpty, 'text-neutral-darker': !valueIsEmpty }\"\n />\n </span>\n </button>\n </template>\n </ElDropdown>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["props","__props","allOptions","computed","options","o","option","Role","setValue","_","value","_a","isAutocompleteOptionType","_b","_c","opt","dropdown","emit","__emit","button","ref","computedModelValue","computedValidation","errorMessage","useInput","newValue","getLabelForOptionValue","valueIsEmpty","v","entry","valueLabel","valueAvatar","toggleDropdownAndGrabFocus","toggle","closeDropdownOnBlur","e","hide","showDropdownIfClosed","isOpen","show"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as R,computed as s,ref as _,openBlock as p,createBlock as V,mergeProps as U,unref as I,withCtx as A,createVNode as C,createElementVNode as M,normalizeClass as B,withModifiers as b,withKeys as K,createElementBlock as y,toDisplayString as q,createCommentVNode as D}from"vue";import{withCommonElInputProps as N,useInput as O,showRequiredMark as j}from"./input.esm.js";import{Role as G}from"../types.esm.js";import{isAutocompleteOptionType as H}from"./utils.esm.js";import J from"../ElDropdown.vue.esm2.js";import Q from"../ElAvatar.vue.esm2.js";import W from"../ElIcon.vue.esm2.js";import X from"./ElInputContainer.vue.esm2.js";import Y from"../../node_modules/lodash/lodash.esm.js";const Z=["name","disabled","data-cy","onMousedown","onFocus","onBlur","onKeydown"],ee={key:0,class:"text-neutral-inactive truncate w-full block"},te={key:1,class:"flex h-full w-full items-center justify-start truncate"},oe={class:"truncate"},le={key:2,class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"},ce=R({__name:"ElInputSelect",props:{...N(),modelValue:{type:[Array,String],required:!1,default:void 0},placeholder:{type:String,default:"",required:!1},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},noRemoveValue:{type:Boolean,default:!1},positionToAnchor:{type:String,required:!1,default:"bottom"}},emits:["update:modelValue","update:modelLabel"],setup(d,{emit:S}){const o=d,$=s(()=>{var l;const t=o.options.map(e=>{var r,i,u;const a={text:e.label,semiboldText:"semiboldText"in e?e.semiboldText:void 0,avatar:e.imageUrl?{avatarUrl:e.imageUrl,role:G.Patient}:void 0,onClick:()=>m(o.multiple?Y.xor(n.value,[e.value]):e.value),check:o.multiple?(r=o.modelValue)==null?void 0:r.includes(e.value):e.value==o.modelValue};return H(e)&&((i=e.prefixIcon)!=null&&i.name)&&(a.leadingIcon=(u=e.prefixIcon)!=null&&u.name?{name:e.prefixIcon.name,solid:e.prefixIcon.isSolid}:void 0),a});return!o.noRemoveValue&&!o.multiple&&t.unshift({text:"-",onClick:()=>m(void 0)}),o.multiple&&t.unshift({text:((l=n.value)==null?void 0:l.length)===o.options.length?"Deseleziona tutto":"Seleziona tutto",onClick:()=>{var e,a;((e=n.value)==null?void 0:e.length)===o.options.length?m(void 0):m(o.options.map(r=>r.value).slice(0)),(a=k.value)==null||a.hide()}}),t}),g=S,x=_(),k=_(),E=s(()=>o.modelValue),T=s(()=>[o.validation]),{errorMessage:z,value:n,setValue:m}=O(E,T,o.name,t=>{g("update:modelValue",t),g("update:modelLabel",v(t))}),c=s(()=>!n.value||!v(n.value)),v=t=>{var l,e;if(t)return typeof t=="string"?((e=(l=o.options)==null?void 0:l.find(a=>a.value===t))==null?void 0:e.label)||"":t.map(a=>{const r=o.options.find(i=>i.value===a);return r?r.label:""}).filter(a=>!!a)},h=s(()=>v(n.value)),w=s(()=>{var t,l;if(!(!n.value||o.multiple))return typeof n.value=="string"?(l=(t=o.options)==null?void 0:t.find(e=>e.value===n.value))==null?void 0:l.imageUrl:""}),F=t=>{var l;t(),(l=x.value)==null||l.focus()},L=(t,l)=>{var e;((e=t.relatedTarget)==null?void 0:e.role)!=="option"&&l()},P=(t,l,e)=>{l||(e(),t.preventDefault(),t.stopPropagation())};return(t,l)=>(p(),V(X,U(t.$attrs,{name:t.label,label:t.label,"error-message":o.errorMessage===!1?!1:o.errorMessage||I(z),"hidden-error-message":t.hiddenErrorMessage,"set-required-mark":I(j)([o.validation])}),{default:A(({error:e})=>[C(J,{ref_key:"dropdown",ref:k,items:$.value,multiple:d.multiple},{anchor:A(({show:a,hide:r,toggle:i,isOpen:u})=>[M("button",{ref_key:"button",ref:x,type:"button",name:o.name,disabled:t.disabled,class:B(["el-input !pr-8 px-3",{error:e,empty:c.value,"focus:ring-1":!e}]),"aria-haspopup":"listbox","aria-expanded":"true","aria-labelledby":"listbox-label","data-cy":`${t.label.trim().replaceAll(" ","").replaceAll(".","")}-select`,onMousedown:b(f=>F(i),["prevent"]),onFocus:b(a,["prevent"]),onBlur:b(f=>L(f,r),["prevent"]),onKeydown:K(f=>P(f,u,a),["enter"])},[d.placeholder&&c.value?(p(),y("span",ee,q(d.placeholder),1)):(p(),y("span",te,[w.value?(p(),V(Q,{key:0,picture:w.value,size:"xxs"},null,8,["picture"])):D("",!0),M("span",oe,q(Array.isArray(h.value)?h.value.join(", "):h.value),1)])),e?D("",!0):(p(),y("span",le,[C(W,{name:"ChevronDownIcon",solid:"",class:B(["h-5 w-5 transition-transform duration-200",{"rotate-180":u,"text-neutral-inactive":c.value,"text-neutral-darker":!c.value}])},null,8,["class"])]))],42,Z)]),_:2},1032,["items","multiple"])]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});export{ce as default};
1
+ import{defineComponent as R,computed as s,ref as _,openBlock as p,createBlock as V,mergeProps as U,unref as I,withCtx as A,createVNode as C,createElementVNode as M,normalizeClass as B,withModifiers as b,withKeys as K,createElementBlock as y,toDisplayString as q,createCommentVNode as D}from"vue";import{withCommonElInputProps as N,useInput as O,showRequiredMark as j}from"./input.esm.js";import{Role as G}from"../types.esm.js";import{isAutocompleteOptionType as H}from"./utils.esm.js";import J from"../ElDropdown.vue.esm2.js";import Q from"../ElAvatar.vue.esm2.js";import W from"../ElIcon.vue.esm2.js";import X from"./ElInputContainer.vue.esm2.js";import Y from"../node_modules/lodash/lodash.esm.js";const Z=["name","disabled","data-cy","onMousedown","onFocus","onBlur","onKeydown"],ee={key:0,class:"text-neutral-inactive truncate w-full block"},te={key:1,class:"flex h-full w-full items-center justify-start truncate"},oe={class:"truncate"},le={key:2,class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2"},ce=R({__name:"ElInputSelect",props:{...N(),modelValue:{type:[Array,String],required:!1,default:void 0},placeholder:{type:String,default:"",required:!1},options:{type:Array,required:!0},multiple:{type:Boolean,default:!1},noRemoveValue:{type:Boolean,default:!1},positionToAnchor:{type:String,required:!1,default:"bottom"}},emits:["update:modelValue","update:modelLabel"],setup(d,{emit:S}){const o=d,$=s(()=>{var l;const t=o.options.map(e=>{var r,i,u;const a={text:e.label,semiboldText:"semiboldText"in e?e.semiboldText:void 0,avatar:e.imageUrl?{avatarUrl:e.imageUrl,role:G.Patient}:void 0,onClick:()=>m(o.multiple?Y.xor(n.value,[e.value]):e.value),check:o.multiple?(r=o.modelValue)==null?void 0:r.includes(e.value):e.value==o.modelValue};return H(e)&&((i=e.prefixIcon)!=null&&i.name)&&(a.leadingIcon=(u=e.prefixIcon)!=null&&u.name?{name:e.prefixIcon.name,solid:e.prefixIcon.isSolid}:void 0),a});return!o.noRemoveValue&&!o.multiple&&t.unshift({text:"-",onClick:()=>m(void 0)}),o.multiple&&t.unshift({text:((l=n.value)==null?void 0:l.length)===o.options.length?"Deseleziona tutto":"Seleziona tutto",onClick:()=>{var e,a;((e=n.value)==null?void 0:e.length)===o.options.length?m(void 0):m(o.options.map(r=>r.value).slice(0)),(a=k.value)==null||a.hide()}}),t}),g=S,x=_(),k=_(),E=s(()=>o.modelValue),T=s(()=>[o.validation]),{errorMessage:z,value:n,setValue:m}=O(E,T,o.name,t=>{g("update:modelValue",t),g("update:modelLabel",v(t))}),c=s(()=>!n.value||!v(n.value)),v=t=>{var l,e;if(t)return typeof t=="string"?((e=(l=o.options)==null?void 0:l.find(a=>a.value===t))==null?void 0:e.label)||"":t.map(a=>{const r=o.options.find(i=>i.value===a);return r?r.label:""}).filter(a=>!!a)},h=s(()=>v(n.value)),w=s(()=>{var t,l;if(!(!n.value||o.multiple))return typeof n.value=="string"?(l=(t=o.options)==null?void 0:t.find(e=>e.value===n.value))==null?void 0:l.imageUrl:""}),F=t=>{var l;t(),(l=x.value)==null||l.focus()},L=(t,l)=>{var e;((e=t.relatedTarget)==null?void 0:e.role)!=="option"&&l()},P=(t,l,e)=>{l||(e(),t.preventDefault(),t.stopPropagation())};return(t,l)=>(p(),V(X,U(t.$attrs,{name:t.label,label:t.label,"error-message":o.errorMessage===!1?!1:o.errorMessage||I(z),"hidden-error-message":t.hiddenErrorMessage,"set-required-mark":I(j)([o.validation])}),{default:A(({error:e})=>[C(J,{ref_key:"dropdown",ref:k,items:$.value,multiple:d.multiple},{anchor:A(({show:a,hide:r,toggle:i,isOpen:u})=>[M("button",{ref_key:"button",ref:x,type:"button",name:o.name,disabled:t.disabled,class:B(["el-input !pr-8 px-3",{error:e,empty:c.value,"focus:ring-1":!e}]),"aria-haspopup":"listbox","aria-expanded":"true","aria-labelledby":"listbox-label","data-cy":`${t.label.trim().replaceAll(" ","").replaceAll(".","")}-select`,onMousedown:b(f=>F(i),["prevent"]),onFocus:b(a,["prevent"]),onBlur:b(f=>L(f,r),["prevent"]),onKeydown:K(f=>P(f,u,a),["enter"])},[d.placeholder&&c.value?(p(),y("span",ee,q(d.placeholder),1)):(p(),y("span",te,[w.value?(p(),V(Q,{key:0,picture:w.value,size:"xxs"},null,8,["picture"])):D("",!0),M("span",oe,q(Array.isArray(h.value)?h.value.join(", "):h.value),1)])),e?D("",!0):(p(),y("span",le,[C(W,{name:"ChevronDownIcon",solid:"",class:B(["h-5 w-5 transition-transform duration-200",{"rotate-180":u,"text-neutral-inactive":c.value,"text-neutral-darker":!c.value}])},null,8,["class"])]))],42,Z)]),_:2},1032,["items","multiple"])]),_:1},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});export{ce as default};
2
2
  //# sourceMappingURL=ElInputSelect.vue.esm2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputSelect.vue.esm2.js","sources":["../../../src/forms/ElInputSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, withCommonElInputProps } from '@/forms/input';\nimport { computed, PropType, ref } from 'vue';\nimport { OptionType, Role } from '@/types';\nimport { ElClipToAnchorPosition } from '@/ElClipToAnchor.vue';\nimport { AutocompleteOptionType, isAutocompleteOptionType } from '@/forms/utils';\nimport ElDropdown from '@/ElDropdown.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport _ from 'lodash';\n\nexport type OptionValueType = string | string[] | null | undefined;\n\nconst props = defineProps({\n ...withCommonElInputProps(),\n modelValue: {\n // TODO: it should differ between the single input select and the multiselect\n type: [Array, String] as PropType<OptionValueType>,\n required: false,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n options: {\n type: Array as PropType<(OptionType | AutocompleteOptionType)[]>,\n required: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n noRemoveValue: {\n type: Boolean,\n default: false,\n },\n positionToAnchor: {\n type: String as PropType<ElClipToAnchorPosition>,\n required: false,\n default: 'bottom',\n },\n});\n\nconst allOptions = computed<InstanceType<typeof ElDropdown>['$props']['items']>(() => {\n const options = props.options.map(o => {\n const option: InstanceType<typeof ElDropdown>['$props']['items'][number] = {\n text: o.label,\n semiboldText: 'semiboldText' in o ? o.semiboldText : undefined,\n avatar: o.imageUrl ? { avatarUrl: o.imageUrl, role: Role.Patient } : undefined,\n onClick: () => setValue(props.multiple ? _.xor(value.value, [o.value]) : o.value),\n check: props.multiple ? props.modelValue?.includes(o.value) : o.value == props.modelValue,\n };\n\n if (isAutocompleteOptionType(o) && o.prefixIcon?.name) {\n option.leadingIcon = o.prefixIcon?.name ? { name: o.prefixIcon.name, solid: o.prefixIcon.isSolid } : undefined;\n }\n\n return option;\n });\n\n if (!props.noRemoveValue && !props.multiple) {\n options.unshift({\n text: '-',\n onClick: () => setValue(undefined),\n });\n }\n\n if (props.multiple) {\n options.unshift({\n text: value.value?.length === props.options.length ? 'Deseleziona tutto' : 'Seleziona tutto',\n onClick: () => {\n if (value.value?.length === props.options.length) setValue(undefined);\n else setValue(props.options.map(opt => opt.value).slice(0));\n dropdown.value?.hide();\n },\n });\n }\n\n return options;\n});\n\nconst emit = defineEmits<{\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelValue', newValue: OptionValueType): void;\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelLabel', newValue: OptionValueType): void;\n}>();\n\nconst button = ref<HTMLElement>();\nconst dropdown = ref<InstanceType<typeof ElDropdown>>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [props.validation]);\n\nconst { errorMessage, value, setValue } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue);\n emit('update:modelLabel', getLabelForOptionValue(newValue));\n});\n\nconst valueIsEmpty = computed<boolean>(() => {\n return !value.value || !getLabelForOptionValue(value.value);\n});\n\nconst getLabelForOptionValue = (value: OptionValueType): OptionValueType => {\n if (!value) return;\n if (typeof value === 'string') {\n return props.options?.find(o => o.value === value)?.label || '';\n } else {\n // return list of labels\n return value\n .map(v => {\n const option = props.options.find(o => o.value === v);\n return option ? option.label : '';\n })\n .filter(entry => !!entry);\n }\n};\n\nconst valueLabel = computed<OptionValueType>(() => {\n return getLabelForOptionValue(value.value);\n});\n\nconst valueAvatar = computed(() => {\n if (!value.value || props.multiple) return;\n if (typeof value.value === 'string') {\n return props.options?.find(o => o.value === value.value)?.imageUrl;\n }\n return '';\n});\n\nconst toggleDropdownAndGrabFocus = (toggle: () => void) => {\n toggle();\n button.value?.focus();\n};\n\nconst closeDropdownOnBlur = (e: FocusEvent, hide: () => void) => {\n // options dropdown must have an option role, so if it ain't that, close the dropdown\n if ((e.relatedTarget as HTMLElement)?.role !== 'option') {\n hide();\n }\n};\n\nconst showDropdownIfClosed = (e: Event, isOpen: boolean, show: () => void) => {\n if (!isOpen) {\n show();\n\n e.preventDefault();\n e.stopPropagation();\n }\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"label\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([props.validation])\"\n >\n <template #default=\"{ error }\">\n <ElDropdown ref=\"dropdown\" :items=\"allOptions\" :multiple=\"multiple\">\n <template #anchor=\"{ show, hide, toggle, isOpen }\">\n <button\n ref=\"button\"\n type=\"button\"\n :name=\"props.name\"\n :disabled=\"disabled\"\n class=\"el-input !pr-8 px-3\"\n :class=\"{ error, empty: valueIsEmpty, 'focus:ring-1': !error }\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"true\"\n aria-labelledby=\"listbox-label\"\n :data-cy=\"`${label.trim().replaceAll(' ', '').replaceAll('.', '')}-select`\"\n @mousedown.prevent=\"toggleDropdownAndGrabFocus(toggle)\"\n @focus.prevent=\"show\"\n @blur.prevent=\"closeDropdownOnBlur($event, hide)\"\n @keydown.enter=\"showDropdownIfClosed($event, isOpen, show)\"\n >\n <span v-if=\"placeholder && valueIsEmpty\" class=\"text-neutral-inactive truncate w-full block\">\n {{ placeholder }}\n </span>\n <span v-else class=\"flex h-full w-full items-center justify-start truncate\">\n <ElAvatar v-if=\"valueAvatar\" :picture=\"valueAvatar\" size=\"xxs\" />\n <span class=\"truncate\">{{ Array.isArray(valueLabel) ? valueLabel.join(', ') : valueLabel }}</span>\n </span>\n <span v-if=\"!error\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <ElIcon\n name=\"ChevronDownIcon\"\n solid\n class=\"h-5 w-5 transition-transform duration-200\"\n :class=\"{ 'rotate-180': isOpen, 'text-neutral-inactive': valueIsEmpty, 'text-neutral-darker': !valueIsEmpty }\"\n />\n </span>\n </button>\n </template>\n </ElDropdown>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["props","__props","allOptions","computed","options","o","option","Role","setValue","_","value","_a","isAutocompleteOptionType","_b","_c","opt","dropdown","emit","__emit","button","ref","computedModelValue","computedValidation","errorMessage","useInput","newValue","getLabelForOptionValue","valueIsEmpty","v","entry","valueLabel","valueAvatar","toggleDropdownAndGrabFocus","toggle","closeDropdownOnBlur","e","hide","showDropdownIfClosed","isOpen","show"],"mappings":"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"}
1
+ {"version":3,"file":"ElInputSelect.vue.esm2.js","sources":["../../src/forms/ElInputSelect.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, withCommonElInputProps } from '@/forms/input';\nimport { computed, PropType, ref } from 'vue';\nimport { OptionType, Role } from '@/types';\nimport { ElClipToAnchorPosition } from '@/ElClipToAnchor.vue';\nimport { AutocompleteOptionType, isAutocompleteOptionType } from '@/forms/utils';\nimport ElDropdown from '@/ElDropdown.vue';\nimport ElAvatar from '@/ElAvatar.vue';\nimport ElIcon from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport _ from 'lodash';\n\nexport type OptionValueType = string | string[] | null | undefined;\n\nconst props = defineProps({\n ...withCommonElInputProps(),\n modelValue: {\n // TODO: it should differ between the single input select and the multiselect\n type: [Array, String] as PropType<OptionValueType>,\n required: false,\n default: undefined,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n options: {\n type: Array as PropType<(OptionType | AutocompleteOptionType)[]>,\n required: true,\n },\n multiple: {\n type: Boolean,\n default: false,\n },\n noRemoveValue: {\n type: Boolean,\n default: false,\n },\n positionToAnchor: {\n type: String as PropType<ElClipToAnchorPosition>,\n required: false,\n default: 'bottom',\n },\n});\n\nconst allOptions = computed<InstanceType<typeof ElDropdown>['$props']['items']>(() => {\n const options = props.options.map(o => {\n const option: InstanceType<typeof ElDropdown>['$props']['items'][number] = {\n text: o.label,\n semiboldText: 'semiboldText' in o ? o.semiboldText : undefined,\n avatar: o.imageUrl ? { avatarUrl: o.imageUrl, role: Role.Patient } : undefined,\n onClick: () => setValue(props.multiple ? _.xor(value.value, [o.value]) : o.value),\n check: props.multiple ? props.modelValue?.includes(o.value) : o.value == props.modelValue,\n };\n\n if (isAutocompleteOptionType(o) && o.prefixIcon?.name) {\n option.leadingIcon = o.prefixIcon?.name ? { name: o.prefixIcon.name, solid: o.prefixIcon.isSolid } : undefined;\n }\n\n return option;\n });\n\n if (!props.noRemoveValue && !props.multiple) {\n options.unshift({\n text: '-',\n onClick: () => setValue(undefined),\n });\n }\n\n if (props.multiple) {\n options.unshift({\n text: value.value?.length === props.options.length ? 'Deseleziona tutto' : 'Seleziona tutto',\n onClick: () => {\n if (value.value?.length === props.options.length) setValue(undefined);\n else setValue(props.options.map(opt => opt.value).slice(0));\n dropdown.value?.hide();\n },\n });\n }\n\n return options;\n});\n\nconst emit = defineEmits<{\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelValue', newValue: OptionValueType): void;\n // eslint-disable-next-line no-unused-vars\n (event: 'update:modelLabel', newValue: OptionValueType): void;\n}>();\n\nconst button = ref<HTMLElement>();\nconst dropdown = ref<InstanceType<typeof ElDropdown>>();\n\nconst computedModelValue = computed(() => props.modelValue);\nconst computedValidation = computed(() => [props.validation]);\n\nconst { errorMessage, value, setValue } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue);\n emit('update:modelLabel', getLabelForOptionValue(newValue));\n});\n\nconst valueIsEmpty = computed<boolean>(() => {\n return !value.value || !getLabelForOptionValue(value.value);\n});\n\nconst getLabelForOptionValue = (value: OptionValueType): OptionValueType => {\n if (!value) return;\n if (typeof value === 'string') {\n return props.options?.find(o => o.value === value)?.label || '';\n } else {\n // return list of labels\n return value\n .map(v => {\n const option = props.options.find(o => o.value === v);\n return option ? option.label : '';\n })\n .filter(entry => !!entry);\n }\n};\n\nconst valueLabel = computed<OptionValueType>(() => {\n return getLabelForOptionValue(value.value);\n});\n\nconst valueAvatar = computed(() => {\n if (!value.value || props.multiple) return;\n if (typeof value.value === 'string') {\n return props.options?.find(o => o.value === value.value)?.imageUrl;\n }\n return '';\n});\n\nconst toggleDropdownAndGrabFocus = (toggle: () => void) => {\n toggle();\n button.value?.focus();\n};\n\nconst closeDropdownOnBlur = (e: FocusEvent, hide: () => void) => {\n // options dropdown must have an option role, so if it ain't that, close the dropdown\n if ((e.relatedTarget as HTMLElement)?.role !== 'option') {\n hide();\n }\n};\n\nconst showDropdownIfClosed = (e: Event, isOpen: boolean, show: () => void) => {\n if (!isOpen) {\n show();\n\n e.preventDefault();\n e.stopPropagation();\n }\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"label\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([props.validation])\"\n >\n <template #default=\"{ error }\">\n <ElDropdown ref=\"dropdown\" :items=\"allOptions\" :multiple=\"multiple\">\n <template #anchor=\"{ show, hide, toggle, isOpen }\">\n <button\n ref=\"button\"\n type=\"button\"\n :name=\"props.name\"\n :disabled=\"disabled\"\n class=\"el-input !pr-8 px-3\"\n :class=\"{ error, empty: valueIsEmpty, 'focus:ring-1': !error }\"\n aria-haspopup=\"listbox\"\n aria-expanded=\"true\"\n aria-labelledby=\"listbox-label\"\n :data-cy=\"`${label.trim().replaceAll(' ', '').replaceAll('.', '')}-select`\"\n @mousedown.prevent=\"toggleDropdownAndGrabFocus(toggle)\"\n @focus.prevent=\"show\"\n @blur.prevent=\"closeDropdownOnBlur($event, hide)\"\n @keydown.enter=\"showDropdownIfClosed($event, isOpen, show)\"\n >\n <span v-if=\"placeholder && valueIsEmpty\" class=\"text-neutral-inactive truncate w-full block\">\n {{ placeholder }}\n </span>\n <span v-else class=\"flex h-full w-full items-center justify-start truncate\">\n <ElAvatar v-if=\"valueAvatar\" :picture=\"valueAvatar\" size=\"xxs\" />\n <span class=\"truncate\">{{ Array.isArray(valueLabel) ? valueLabel.join(', ') : valueLabel }}</span>\n </span>\n <span v-if=\"!error\" class=\"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2\">\n <ElIcon\n name=\"ChevronDownIcon\"\n solid\n class=\"h-5 w-5 transition-transform duration-200\"\n :class=\"{ 'rotate-180': isOpen, 'text-neutral-inactive': valueIsEmpty, 'text-neutral-darker': !valueIsEmpty }\"\n />\n </span>\n </button>\n </template>\n </ElDropdown>\n </template>\n </ElInputContainer>\n</template>\n"],"names":["props","__props","allOptions","computed","options","o","option","Role","setValue","_","value","_a","isAutocompleteOptionType","_b","_c","opt","dropdown","emit","__emit","button","ref","computedModelValue","computedValidation","errorMessage","useInput","newValue","getLabelForOptionValue","valueIsEmpty","v","entry","valueLabel","valueAvatar","toggleDropdownAndGrabFocus","toggle","closeDropdownOnBlur","e","hide","showDropdownIfClosed","isOpen","show"],"mappings":"04CAcA,MAAMA,EAAQC,EAgCRC,EAAaC,EAA6D,IAAM,OACpF,MAAMC,EAAUJ,EAAM,QAAQ,IAASK,GAAA,WACrC,MAAMC,EAAqE,CACzE,KAAMD,EAAE,MACR,aAAc,iBAAkBA,EAAIA,EAAE,aAAe,OACrD,OAAQA,EAAE,SAAW,CAAE,UAAWA,EAAE,SAAU,KAAME,EAAK,OAAA,EAAY,OACrE,QAAS,IAAMC,EAASR,EAAM,SAAWS,EAAE,IAAIC,EAAM,MAAO,CAACL,EAAE,KAAK,CAAC,EAAIA,EAAE,KAAK,EAChF,MAAOL,EAAM,UAAWW,EAAAX,EAAM,aAAN,YAAAW,EAAkB,SAASN,EAAE,OAASA,EAAE,OAASL,EAAM,UAAA,EAGjF,OAAIY,EAAyBP,CAAC,KAAKQ,EAAAR,EAAE,aAAF,MAAAQ,EAAc,QAC/CP,EAAO,aAAcQ,EAAAT,EAAE,aAAF,MAAAS,EAAc,KAAO,CAAE,KAAMT,EAAE,WAAW,KAAM,MAAOA,EAAE,WAAW,SAAY,QAGhGC,CAAA,CACR,EAED,MAAI,CAACN,EAAM,eAAiB,CAACA,EAAM,UACjCI,EAAQ,QAAQ,CACd,KAAM,IACN,QAAS,IAAMI,EAAS,MAAS,CAAA,CAClC,EAGCR,EAAM,UACRI,EAAQ,QAAQ,CACd,OAAMO,EAAAD,EAAM,QAAN,YAAAC,EAAa,UAAWX,EAAM,QAAQ,OAAS,oBAAsB,kBAC3E,QAAS,IAAM,WACTW,EAAAD,EAAM,QAAN,YAAAC,EAAa,UAAWX,EAAM,QAAQ,OAAQQ,EAAS,MAAS,EACtDA,EAAAR,EAAM,QAAQ,IAAIe,GAAOA,EAAI,KAAK,EAAE,MAAM,CAAC,CAAC,GAC1DF,EAAAG,EAAS,QAAT,MAAAH,EAAgB,MAClB,CAAA,CACD,EAGIT,CAAA,CACR,EAEKa,EAAOC,EAOPC,EAASC,IACTJ,EAAWI,IAEXC,EAAqBlB,EAAS,IAAMH,EAAM,UAAU,EACpDsB,EAAqBnB,EAAS,IAAM,CAACH,EAAM,UAAU,CAAC,EAEtD,CAAE,aAAAuB,EAAc,MAAAb,EAAO,SAAAF,GAAagB,EAASH,EAAoBC,EAAoBtB,EAAM,KAAkByB,GAAA,CACjHR,EAAK,oBAAqBQ,CAAQ,EAC7BR,EAAA,oBAAqBS,EAAuBD,CAAQ,CAAC,CAAA,CAC3D,EAEKE,EAAexB,EAAkB,IAC9B,CAACO,EAAM,OAAS,CAACgB,EAAuBhB,EAAM,KAAK,CAC3D,EAEKgB,EAA0BhB,GAA4C,SAC1E,GAAKA,EACD,OAAA,OAAOA,GAAU,WACZG,GAAAF,EAAAX,EAAM,UAAN,YAAAW,EAAe,KAAKN,GAAKA,EAAE,QAAUK,KAArC,YAAAG,EAA6C,QAAS,GAGtDH,EACJ,IAASkB,GAAA,CACR,MAAMtB,EAASN,EAAM,QAAQ,KAAUK,GAAAA,EAAE,QAAUuB,CAAC,EAC7C,OAAAtB,EAASA,EAAO,MAAQ,EAChC,CAAA,EACA,OAAgBuB,GAAA,CAAC,CAACA,CAAK,CAC5B,EAGIC,EAAa3B,EAA0B,IACpCuB,EAAuBhB,EAAM,KAAK,CAC1C,EAEKqB,EAAc5B,EAAS,IAAM,SAC7B,GAAA,GAACO,EAAM,OAASV,EAAM,UACtB,OAAA,OAAOU,EAAM,OAAU,UAClBG,GAAAF,EAAAX,EAAM,UAAN,YAAAW,EAAe,KAAKN,GAAKA,EAAE,QAAUK,EAAM,SAA3C,YAAAG,EAAmD,SAErD,EAAA,CACR,EAEKmB,EAA8BC,GAAuB,OAClDA,KACPtB,EAAAQ,EAAO,QAAP,MAAAR,EAAc,OAAM,EAGhBuB,EAAsB,CAACC,EAAeC,IAAqB,SAE1DzB,EAAAwB,EAAE,gBAAF,YAAAxB,EAAiC,QAAS,UACxCyB,GACP,EAGIC,EAAuB,CAACF,EAAUG,EAAiBC,IAAqB,CACvED,IACEC,IAELJ,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputSwitch.vue.cjs2.js","sources":["../../../src/forms/ElInputSwitch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elSwitchSizes = ['xs', 'xxs'] as const;\ntype ElSwitchSizes = (typeof elSwitchSizes)[number];\n\nexport const elSwitchColors = ['primary', 'secondary'] as const;\ntype ElSwitchColors = (typeof elSwitchColors)[number];\n\nexport const elSwitchAligns = ['left', 'right'] as const;\ntype ElSwitchAligns = (typeof elSwitchAligns)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { UniqueID } from '@/forms/input';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n label: string;\n size?: ElSwitchSizes;\n color?: ElSwitchColors;\n align?: ElSwitchAligns;\n }>(),\n {\n size: 'xs',\n color: 'primary',\n align: 'left',\n },\n);\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', val: boolean): void;\n}>();\n\nconst { modelValue } = toRefs(props);\nconst uuid = UniqueID().getID();\nconst value = ref<boolean>(modelValue.value);\n\nwatch(modelValue, () => {\n value.value = modelValue.value;\n emit('update:modelValue', value.value);\n});\n\nconst toggleSwitch = () => {\n value.value = !value.value;\n emit('update:modelValue', value.value);\n};\n</script>\n\n<template>\n <ElInputContainer v-bind=\"$attrs\" :no-icon=\"true\" :name=\"uuid\">\n <div\n class=\"w-full flex\"\n :class=\"{\n 'justify-start': align === 'left',\n 'justify-end': align === 'right',\n }\"\n >\n <input\n :id=\"uuid\"\n :checked=\"modelValue\"\n type=\"checkbox\"\n class=\"sr-only\"\n :data-cy=\"label ? `${label.trim().replaceAll(' ', '')}-switch` : 'switch'\"\n />\n\n <button class=\"flex items-center justify-center gap-2 cursor-pointer\" @click=\"toggleSwitch\">\n <div\n class=\"flex items-center shrink-0\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'order-1': align === 'left',\n 'order-2': align === 'right',\n }\"\n >\n <div\n class=\"relative w-full rounded-full duration-200\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'bg-neutral-300': !modelValue,\n 'bg-primary-active': color === 'primary' && modelValue,\n 'bg-secondary-active': color === 'secondary' && modelValue,\n }\"\n >\n <div\n class=\"absolute top-[0.125rem] bg-white rounded-full duration-200 drop-shadow\"\n :class=\"{\n 'w-[1.125rem] h-[1.125rem]': size === 'xs',\n 'w-3 h-3': size === 'xxs',\n 'left-[0.125rem]': !modelValue,\n 'left-4': size === 'xs' && modelValue,\n 'left-3': size === 'xxs' && modelValue,\n }\"\n ></div>\n </div>\n </div>\n\n <label\n v-if=\"label\"\n :for=\"uuid\"\n class=\"text-neutral-darker cursor-pointer\"\n :class=\"{\n 'text-base': size === 'xs',\n 'text-sm': size === 'xxs',\n 'order-2': align === 'left',\n 'order-1': align === 'right',\n }\"\n >\n {{ label }}\n </label>\n </button>\n </div>\n </ElInputContainer>\n</template>\n"],"names":["elSwitchSizes","elSwitchColors","elSwitchAligns","props","__props","emit","__emit","modelValue","toRefs","uuid","UniqueID","value","ref","watch","toggleSwitch"],"mappings":"kPACaA,EAAgB,CAAC,KAAM,KAAK,EAG5BC,EAAiB,CAAC,UAAW,WAAW,EAGxCC,EAAiB,CAAC,OAAQ,OAAO,4MAS9C,MAAMC,EAAQC,EAeRC,EAAOC,EAIP,CAAE,WAAAC,CAAA,EAAeC,EAAA,OAAOL,CAAK,EAC7BM,EAAOC,EAAAA,WAAW,QAClBC,EAAQC,EAAAA,IAAaL,EAAW,KAAK,EAE3CM,EAAA,MAAMN,EAAY,IAAM,CACtBI,EAAM,MAAQJ,EAAW,MACpBF,EAAA,oBAAqBM,EAAM,KAAK,CAAA,CACtC,EAED,MAAMG,EAAe,IAAM,CACnBH,EAAA,MAAQ,CAACA,EAAM,MAChBN,EAAA,oBAAqBM,EAAM,KAAK,CAAA"}
1
+ {"version":3,"file":"ElInputSwitch.vue.cjs2.js","sources":["../../src/forms/ElInputSwitch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elSwitchSizes = ['xs', 'xxs'] as const;\ntype ElSwitchSizes = (typeof elSwitchSizes)[number];\n\nexport const elSwitchColors = ['primary', 'secondary'] as const;\ntype ElSwitchColors = (typeof elSwitchColors)[number];\n\nexport const elSwitchAligns = ['left', 'right'] as const;\ntype ElSwitchAligns = (typeof elSwitchAligns)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { UniqueID } from '@/forms/input';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n label: string;\n size?: ElSwitchSizes;\n color?: ElSwitchColors;\n align?: ElSwitchAligns;\n }>(),\n {\n size: 'xs',\n color: 'primary',\n align: 'left',\n },\n);\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', val: boolean): void;\n}>();\n\nconst { modelValue } = toRefs(props);\nconst uuid = UniqueID().getID();\nconst value = ref<boolean>(modelValue.value);\n\nwatch(modelValue, () => {\n value.value = modelValue.value;\n emit('update:modelValue', value.value);\n});\n\nconst toggleSwitch = () => {\n value.value = !value.value;\n emit('update:modelValue', value.value);\n};\n</script>\n\n<template>\n <ElInputContainer v-bind=\"$attrs\" :no-icon=\"true\" :name=\"uuid\">\n <div\n class=\"w-full flex\"\n :class=\"{\n 'justify-start': align === 'left',\n 'justify-end': align === 'right',\n }\"\n >\n <input\n :id=\"uuid\"\n :checked=\"modelValue\"\n type=\"checkbox\"\n class=\"sr-only\"\n :data-cy=\"label ? `${label.trim().replaceAll(' ', '')}-switch` : 'switch'\"\n />\n\n <button class=\"flex items-center justify-center gap-2 cursor-pointer\" @click=\"toggleSwitch\">\n <div\n class=\"flex items-center shrink-0\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'order-1': align === 'left',\n 'order-2': align === 'right',\n }\"\n >\n <div\n class=\"relative w-full rounded-full duration-200\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'bg-neutral-300': !modelValue,\n 'bg-primary-active': color === 'primary' && modelValue,\n 'bg-secondary-active': color === 'secondary' && modelValue,\n }\"\n >\n <div\n class=\"absolute top-[0.125rem] bg-white rounded-full duration-200 drop-shadow\"\n :class=\"{\n 'w-[1.125rem] h-[1.125rem]': size === 'xs',\n 'w-3 h-3': size === 'xxs',\n 'left-[0.125rem]': !modelValue,\n 'left-4': size === 'xs' && modelValue,\n 'left-3': size === 'xxs' && modelValue,\n }\"\n ></div>\n </div>\n </div>\n\n <label\n v-if=\"label\"\n :for=\"uuid\"\n class=\"text-neutral-darker cursor-pointer\"\n :class=\"{\n 'text-base': size === 'xs',\n 'text-sm': size === 'xxs',\n 'order-2': align === 'left',\n 'order-1': align === 'right',\n }\"\n >\n {{ label }}\n </label>\n </button>\n </div>\n </ElInputContainer>\n</template>\n"],"names":["elSwitchSizes","elSwitchColors","elSwitchAligns","props","__props","emit","__emit","modelValue","toRefs","uuid","UniqueID","value","ref","watch","toggleSwitch"],"mappings":"kPACaA,EAAgB,CAAC,KAAM,KAAK,EAG5BC,EAAiB,CAAC,UAAW,WAAW,EAGxCC,EAAiB,CAAC,OAAQ,OAAO,4MAS9C,MAAMC,EAAQC,EAeRC,EAAOC,EAIP,CAAE,WAAAC,CAAA,EAAeC,EAAA,OAAOL,CAAK,EAC7BM,EAAOC,EAAAA,WAAW,QAClBC,EAAQC,EAAAA,IAAaL,EAAW,KAAK,EAE3CM,EAAA,MAAMN,EAAY,IAAM,CACtBI,EAAM,MAAQJ,EAAW,MACpBF,EAAA,oBAAqBM,EAAM,KAAK,CAAA,CACtC,EAED,MAAMG,EAAe,IAAM,CACnBH,EAAA,MAAQ,CAACA,EAAM,MAChBN,EAAA,oBAAqBM,EAAM,KAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputSwitch.vue.esm2.js","sources":["../../../src/forms/ElInputSwitch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elSwitchSizes = ['xs', 'xxs'] as const;\ntype ElSwitchSizes = (typeof elSwitchSizes)[number];\n\nexport const elSwitchColors = ['primary', 'secondary'] as const;\ntype ElSwitchColors = (typeof elSwitchColors)[number];\n\nexport const elSwitchAligns = ['left', 'right'] as const;\ntype ElSwitchAligns = (typeof elSwitchAligns)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { UniqueID } from '@/forms/input';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n label: string;\n size?: ElSwitchSizes;\n color?: ElSwitchColors;\n align?: ElSwitchAligns;\n }>(),\n {\n size: 'xs',\n color: 'primary',\n align: 'left',\n },\n);\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', val: boolean): void;\n}>();\n\nconst { modelValue } = toRefs(props);\nconst uuid = UniqueID().getID();\nconst value = ref<boolean>(modelValue.value);\n\nwatch(modelValue, () => {\n value.value = modelValue.value;\n emit('update:modelValue', value.value);\n});\n\nconst toggleSwitch = () => {\n value.value = !value.value;\n emit('update:modelValue', value.value);\n};\n</script>\n\n<template>\n <ElInputContainer v-bind=\"$attrs\" :no-icon=\"true\" :name=\"uuid\">\n <div\n class=\"w-full flex\"\n :class=\"{\n 'justify-start': align === 'left',\n 'justify-end': align === 'right',\n }\"\n >\n <input\n :id=\"uuid\"\n :checked=\"modelValue\"\n type=\"checkbox\"\n class=\"sr-only\"\n :data-cy=\"label ? `${label.trim().replaceAll(' ', '')}-switch` : 'switch'\"\n />\n\n <button class=\"flex items-center justify-center gap-2 cursor-pointer\" @click=\"toggleSwitch\">\n <div\n class=\"flex items-center shrink-0\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'order-1': align === 'left',\n 'order-2': align === 'right',\n }\"\n >\n <div\n class=\"relative w-full rounded-full duration-200\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'bg-neutral-300': !modelValue,\n 'bg-primary-active': color === 'primary' && modelValue,\n 'bg-secondary-active': color === 'secondary' && modelValue,\n }\"\n >\n <div\n class=\"absolute top-[0.125rem] bg-white rounded-full duration-200 drop-shadow\"\n :class=\"{\n 'w-[1.125rem] h-[1.125rem]': size === 'xs',\n 'w-3 h-3': size === 'xxs',\n 'left-[0.125rem]': !modelValue,\n 'left-4': size === 'xs' && modelValue,\n 'left-3': size === 'xxs' && modelValue,\n }\"\n ></div>\n </div>\n </div>\n\n <label\n v-if=\"label\"\n :for=\"uuid\"\n class=\"text-neutral-darker cursor-pointer\"\n :class=\"{\n 'text-base': size === 'xs',\n 'text-sm': size === 'xxs',\n 'order-2': align === 'left',\n 'order-1': align === 'right',\n }\"\n >\n {{ label }}\n </label>\n </button>\n </div>\n </ElInputContainer>\n</template>\n"],"names":["elSwitchSizes","elSwitchColors","elSwitchAligns","props","__props","emit","__emit","modelValue","toRefs","uuid","UniqueID","value","ref","watch","toggleSwitch"],"mappings":"oYACaA,EAAgB,CAAC,KAAM,KAAK,EAG5BC,EAAiB,CAAC,UAAW,WAAW,EAGxCC,EAAiB,CAAC,OAAQ,OAAO,4LAS9C,MAAMC,EAAQC,EAeRC,EAAOC,EAIP,CAAE,WAAAC,CAAA,EAAeC,EAAOL,CAAK,EAC7BM,EAAOC,IAAW,QAClBC,EAAQC,EAAaL,EAAW,KAAK,EAE3CM,EAAMN,EAAY,IAAM,CACtBI,EAAM,MAAQJ,EAAW,MACpBF,EAAA,oBAAqBM,EAAM,KAAK,CAAA,CACtC,EAED,MAAMG,EAAe,IAAM,CACnBH,EAAA,MAAQ,CAACA,EAAM,MAChBN,EAAA,oBAAqBM,EAAM,KAAK,CAAA"}
1
+ {"version":3,"file":"ElInputSwitch.vue.esm2.js","sources":["../../src/forms/ElInputSwitch.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elSwitchSizes = ['xs', 'xxs'] as const;\ntype ElSwitchSizes = (typeof elSwitchSizes)[number];\n\nexport const elSwitchColors = ['primary', 'secondary'] as const;\ntype ElSwitchColors = (typeof elSwitchColors)[number];\n\nexport const elSwitchAligns = ['left', 'right'] as const;\ntype ElSwitchAligns = (typeof elSwitchAligns)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { ref, toRefs, watch } from 'vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport { UniqueID } from '@/forms/input';\n\nconst props = withDefaults(\n defineProps<{\n modelValue?: boolean;\n label: string;\n size?: ElSwitchSizes;\n color?: ElSwitchColors;\n align?: ElSwitchAligns;\n }>(),\n {\n size: 'xs',\n color: 'primary',\n align: 'left',\n },\n);\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', val: boolean): void;\n}>();\n\nconst { modelValue } = toRefs(props);\nconst uuid = UniqueID().getID();\nconst value = ref<boolean>(modelValue.value);\n\nwatch(modelValue, () => {\n value.value = modelValue.value;\n emit('update:modelValue', value.value);\n});\n\nconst toggleSwitch = () => {\n value.value = !value.value;\n emit('update:modelValue', value.value);\n};\n</script>\n\n<template>\n <ElInputContainer v-bind=\"$attrs\" :no-icon=\"true\" :name=\"uuid\">\n <div\n class=\"w-full flex\"\n :class=\"{\n 'justify-start': align === 'left',\n 'justify-end': align === 'right',\n }\"\n >\n <input\n :id=\"uuid\"\n :checked=\"modelValue\"\n type=\"checkbox\"\n class=\"sr-only\"\n :data-cy=\"label ? `${label.trim().replaceAll(' ', '')}-switch` : 'switch'\"\n />\n\n <button class=\"flex items-center justify-center gap-2 cursor-pointer\" @click=\"toggleSwitch\">\n <div\n class=\"flex items-center shrink-0\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'order-1': align === 'left',\n 'order-2': align === 'right',\n }\"\n >\n <div\n class=\"relative w-full rounded-full duration-200\"\n :class=\"{\n 'w-9 h-[1.375rem]': size === 'xs',\n 'w-[1.625rem] h-4': size === 'xxs',\n 'bg-neutral-300': !modelValue,\n 'bg-primary-active': color === 'primary' && modelValue,\n 'bg-secondary-active': color === 'secondary' && modelValue,\n }\"\n >\n <div\n class=\"absolute top-[0.125rem] bg-white rounded-full duration-200 drop-shadow\"\n :class=\"{\n 'w-[1.125rem] h-[1.125rem]': size === 'xs',\n 'w-3 h-3': size === 'xxs',\n 'left-[0.125rem]': !modelValue,\n 'left-4': size === 'xs' && modelValue,\n 'left-3': size === 'xxs' && modelValue,\n }\"\n ></div>\n </div>\n </div>\n\n <label\n v-if=\"label\"\n :for=\"uuid\"\n class=\"text-neutral-darker cursor-pointer\"\n :class=\"{\n 'text-base': size === 'xs',\n 'text-sm': size === 'xxs',\n 'order-2': align === 'left',\n 'order-1': align === 'right',\n }\"\n >\n {{ label }}\n </label>\n </button>\n </div>\n </ElInputContainer>\n</template>\n"],"names":["elSwitchSizes","elSwitchColors","elSwitchAligns","props","__props","emit","__emit","modelValue","toRefs","uuid","UniqueID","value","ref","watch","toggleSwitch"],"mappings":"oYACaA,EAAgB,CAAC,KAAM,KAAK,EAG5BC,EAAiB,CAAC,UAAW,WAAW,EAGxCC,EAAiB,CAAC,OAAQ,OAAO,4LAS9C,MAAMC,EAAQC,EAeRC,EAAOC,EAIP,CAAE,WAAAC,CAAA,EAAeC,EAAOL,CAAK,EAC7BM,EAAOC,IAAW,QAClBC,EAAQC,EAAaL,EAAW,KAAK,EAE3CM,EAAMN,EAAY,IAAM,CACtBI,EAAM,MAAQJ,EAAW,MACpBF,EAAA,oBAAqBM,EAAM,KAAK,CAAA,CACtC,EAED,MAAMG,EAAe,IAAM,CACnBH,EAAA,MAAQ,CAACA,EAAM,MAChBN,EAAA,oBAAqBM,EAAM,KAAK,CAAA"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),d=require("./input.cjs.js"),v=require("../ElIcon.vue.cjs2.js"),M=require("./ElInputContainer.vue.cjs2.js"),B=require("../ElIconButton.vue.cjs2.js"),$={class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},q={key:0},V=["id","name","type","placeholder","disabled","autocomplete","data-cy"],N={key:0},x={key:1},P=["text","password"],T=e.defineComponent({__name:"ElInputText",props:{...d.withTextualElInputProps(),type:{type:String,default:"text"},leadingIcon:{type:Object,default:void 0,required:!1},trailingIcon:{type:Object,default:void 0,required:!1},focusOnMount:{type:Boolean,default:!1},autocomplete:{type:String,default:"off"}},emits:["update:modelValue"],setup(l,{emit:y}){const a=l,o=e.ref(a.type),c=e.ref(null);e.onMounted(()=>{var t;a.focusOnMount&&((t=c.value)==null||t.focus())});const I=y,h=e.computed(()=>a.modelValue),k=e.computed(()=>[a.validation]),{value:s,errorMessage:b,uuid:u,fieldContext:E}=d.useInput(h,k,a.name,t=>{I("update:modelValue",t==null?void 0:t.trim())}),i=e.computed(()=>a.label?a.label.trim().replaceAll(" ",""):a.type),C=()=>{o.value=o.value==="text"?"password":"text"};return(t,r)=>(e.openBlock(),e.createBlock(M.default,e.mergeProps(t.$attrs,{name:t.id||`${e.unref(u)}-${i.value}`,label:t.label,"error-message":a.errorMessage===!1?!1:a.errorMessage||e.unref(b),"hidden-error-message":t.hiddenErrorMessage,"set-required-mark":e.unref(d.showRequiredMark)([t.validation]),class:"relative"}),{leading:e.withCtx(({error:n})=>{var m,p,f;return[e.createElementVNode("div",$,[l.leadingIcon?(e.openBlock(),e.createElementBlock("div",q,[e.createVNode(v.default,{name:l.leadingIcon.name,solid:l.leadingIcon.solid,class:e.normalizeClass(["h-5 w-5",{"text-neutral-lighter":!n,"text-error":n}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):e.createCommentVNode("",!0)]),e.renderSlot(t.$slots,"leading",e.normalizeProps(e.guardReactiveProps({error:n}))),e.withDirectives(e.createElementVNode("input",{id:t.id||`${e.unref(u)}-${i.value}`,ref_key:"inputRef",ref:c,"onUpdate:modelValue":r[0]||(r[0]=g=>e.isRef(s)?s.value=g:null),name:a.name||t.id||`${e.unref(u)}-${i.value}`,type:o.value,class:e.normalizeClass(["el-input",{error:n,"!pl-10":(m=l.leadingIcon)==null?void 0:m.name,"!pl-3":!((p=l.leadingIcon)!=null&&p.name),"!pr-10":(f=l.trailingIcon)==null?void 0:f.name}]),placeholder:t.placeholder,disabled:t.disabled,autocomplete:l.autocomplete,"data-cy":`${i.value}-input`,onBlur:r[1]||(r[1]=g=>e.unref(E).validate())},null,42,V),[[e.vModelDynamic,e.unref(s)]])]}),trailing:e.withCtx(({error:n})=>[l.trailingIcon?(e.openBlock(),e.createElementBlock("span",N,[e.createVNode(v.default,{name:l.trailingIcon.name,solid:l.trailingIcon.solid,class:e.normalizeClass(["h-5 w-5",{"text-neutral-lighter":!n,"text-error":n}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):e.createCommentVNode("",!0),l.type==="password"?(e.openBlock(),e.createElementBlock("span",x,[e.createVNode(B.default,{error:n,icon:{name:o.value==="text"?"EyeSlashIcon":"EyeIcon"},type:"button",tooltip:o.value==="text"?"Nascondi":"Mostra",onClick:C},null,8,["error","icon","tooltip"])])):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"trailing",e.normalizeProps(e.guardReactiveProps({error:n})))]),_:3},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});exports.default=T;exports.elInputTextTypes=P;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),d=require("./input.cjs.js"),v=require("../ElIcon.vue.cjs2.js"),M=require("./ElInputContainer.vue.cjs2.js"),B=require("../ElIconButton.vue.cjs2.js"),$={class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},q={key:0},V=["id","name","type","placeholder","disabled","autocomplete","data-cy"],N={key:0},x={key:1},P=["text","password"],T=e.defineComponent({__name:"ElInputText",props:{...d.withTextualElInputProps(),type:{type:String,default:"text"},leadingIcon:{type:Object,default:void 0,required:!1},trailingIcon:{type:Object,default:void 0,required:!1},focusOnMount:{type:Boolean,default:!1},autocomplete:{type:String,default:"off"}},emits:["update:modelValue"],setup(l,{emit:y}){const a=l,o=e.ref(a.type),c=e.ref(null);e.onMounted(()=>{var t;a.focusOnMount&&((t=c.value)==null||t.focus())});const I=y,h=e.computed(()=>a.modelValue),k=e.computed(()=>[a.validation]),{value:s,errorMessage:b,uuid:u,fieldContext:E}=d.useInput(h,k,a.name,t=>{I("update:modelValue",t==null?void 0:t.trim())}),i=e.computed(()=>a.label?a.label.trim().replaceAll(" ",""):a.type),C=()=>{o.value=o.value==="text"?"password":"text"};return(t,r)=>(e.openBlock(),e.createBlock(M.default,e.mergeProps(t.$attrs,{name:t.id||`${e.unref(u)}-${i.value}`,label:t.label,"error-message":a.errorMessage===!1?!1:a.errorMessage||e.unref(b),"hidden-error-message":t.hiddenErrorMessage,"set-required-mark":e.unref(d.showRequiredMark)([t.validation]),class:"relative"}),{leading:e.withCtx(({error:n})=>{var m,p,f;return[e.createElementVNode("div",$,[l.leadingIcon?(e.openBlock(),e.createElementBlock("div",q,[e.createVNode(v.default,{name:l.leadingIcon.name,solid:l.leadingIcon.solid,class:e.normalizeClass(["h-5 w-5",{"text-neutral-lighter":!n,"text-error":n}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):e.createCommentVNode("",!0)]),e.renderSlot(t.$slots,"leading",e.normalizeProps(e.guardReactiveProps({error:n}))),e.withDirectives(e.createElementVNode("input",{id:t.id||`${e.unref(u)}-${i.value}`,ref_key:"inputRef",ref:c,"onUpdate:modelValue":r[0]||(r[0]=g=>e.isRef(s)?s.value=g:null),name:a.name||t.id||`${e.unref(u)}-${i.value}`,type:o.value,class:e.normalizeClass(["el-input truncate",{error:n,"!pl-10":(m=l.leadingIcon)==null?void 0:m.name,"!pl-3":!((p=l.leadingIcon)!=null&&p.name),"!pr-10":(f=l.trailingIcon)==null?void 0:f.name}]),placeholder:t.placeholder,disabled:t.disabled,autocomplete:l.autocomplete,"data-cy":`${i.value}-input`,onBlur:r[1]||(r[1]=g=>e.unref(E).validate())},null,42,V),[[e.vModelDynamic,e.unref(s)]])]}),trailing:e.withCtx(({error:n})=>[l.trailingIcon?(e.openBlock(),e.createElementBlock("span",N,[e.createVNode(v.default,{name:l.trailingIcon.name,solid:l.trailingIcon.solid,class:e.normalizeClass(["h-5 w-5",{"text-neutral-lighter":!n,"text-error":n}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):e.createCommentVNode("",!0),l.type==="password"?(e.openBlock(),e.createElementBlock("span",x,[e.createVNode(B.default,{error:n,icon:{name:o.value==="text"?"EyeSlashIcon":"EyeIcon"},type:"button",tooltip:o.value==="text"?"Nascondi":"Mostra",onClick:C},null,8,["error","icon","tooltip"])])):e.createCommentVNode("",!0),e.renderSlot(t.$slots,"trailing",e.normalizeProps(e.guardReactiveProps({error:n})))]),_:3},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});exports.default=T;exports.elInputTextTypes=P;
2
2
  //# sourceMappingURL=ElInputText.vue.cjs2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputText.vue.cjs2.js","sources":["../../../src/forms/ElInputText.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elInputTextTypes = ['text', 'password'] as const;\nexport type ElInputTextType = (typeof elInputTextTypes)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, TextualValueType, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, PropType, ref } from 'vue';\nimport ElIcon, { ElIconProps } from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport ElIconButton from '@/ElIconButton.vue';\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n type: {\n type: String as PropType<ElInputTextType>,\n default: 'text',\n },\n leadingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n trailingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n autocomplete: {\n type: String,\n default: 'off',\n },\n});\n\nconst inputType = ref<ElInputTextType>(props.type);\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nonMounted(() => {\n if (props.focusOnMount) {\n inputRef.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(() => [props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue?.trim());\n});\n\nconst defaultId = computed(() => (props.label ? props.label.trim().replaceAll(' ', '') : props.type));\n\nconst handleEyesPasswordClick = () => {\n inputType.value = inputType.value === 'text' ? 'password' : 'text';\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"id || `${uuid}-${defaultId}`\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n class=\"relative\"\n >\n <template #leading=\"{ error }\">\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n <div v-if=\"leadingIcon\">\n <ElIcon\n :name=\"leadingIcon.name\"\n :solid=\"leadingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </div>\n </div>\n\n <slot name=\"leading\" v-bind=\"{ error }\" />\n\n <input\n :id=\"id || `${uuid}-${defaultId}`\"\n ref=\"inputRef\"\n v-model=\"value\"\n :name=\"props.name || id || `${uuid}-${defaultId}`\"\n :type=\"inputType\"\n class=\"el-input\"\n :class=\"{\n error,\n '!pl-10': leadingIcon?.name,\n '!pl-3': !leadingIcon?.name,\n '!pr-10': trailingIcon?.name,\n }\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :autocomplete=\"autocomplete\"\n :data-cy=\"`${defaultId}-input`\"\n @blur=\"fieldContext.validate()\"\n />\n </template>\n\n <template #trailing=\"{ error }\">\n <span v-if=\"trailingIcon\">\n <ElIcon\n :name=\"trailingIcon.name\"\n :solid=\"trailingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </span>\n\n <span v-if=\"type === 'password'\">\n <ElIconButton\n :error=\"error\"\n :icon=\"{\n name: inputType === 'text' ? 'EyeSlashIcon' : 'EyeIcon',\n }\"\n type=\"button\"\n :tooltip=\"inputType === 'text' ? 'Nascondi' : 'Mostra'\"\n @click=\"handleEyesPasswordClick\"\n />\n </span>\n\n <slot name=\"trailing\" v-bind=\"{ error }\" />\n </template>\n </ElInputContainer>\n</template>\n"],"names":["elInputTextTypes","props","__props","inputType","ref","inputRef","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","defaultId","handleEyesPasswordClick"],"mappings":"+cACaA,EAAmB,CAAC,OAAQ,UAAU,8VAWnD,MAAMC,EAAQC,EA0BRC,EAAYC,EAAAA,IAAqBH,EAAM,IAAI,EAC3CI,EAAWD,MAA6B,IAAI,EAElDE,EAAAA,UAAU,IAAM,OACVL,EAAM,gBACRM,EAAAF,EAAS,QAAT,MAAAE,EAAgB,QAClB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAA,SAAS,IAAMV,EAAM,UAAU,EACpDW,EAAqBD,EAAAA,SAAS,IAAM,CAACV,EAAM,UAAU,CAAC,EAEtD,CAAE,MAAAY,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,WAASP,EAAoBE,EAAoBX,EAAM,KAAkBiB,GAAA,CACtHV,EAAA,oBAAqBU,GAAA,YAAAA,EAAU,MAAM,CAAA,CAC3C,EAEKC,EAAYR,EAAAA,SAAS,IAAOV,EAAM,MAAQA,EAAM,MAAM,KAAK,EAAE,WAAW,IAAK,EAAE,EAAIA,EAAM,IAAK,EAE9FmB,EAA0B,IAAM,CACpCjB,EAAU,MAAQA,EAAU,QAAU,OAAS,WAAa,MAAA"}
1
+ {"version":3,"file":"ElInputText.vue.cjs2.js","sources":["../../src/forms/ElInputText.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elInputTextTypes = ['text', 'password'] as const;\nexport type ElInputTextType = (typeof elInputTextTypes)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, TextualValueType, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, PropType, ref } from 'vue';\nimport ElIcon, { ElIconProps } from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport ElIconButton from '@/ElIconButton.vue';\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n type: {\n type: String as PropType<ElInputTextType>,\n default: 'text',\n },\n leadingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n trailingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n autocomplete: {\n type: String,\n default: 'off',\n },\n});\n\nconst inputType = ref<ElInputTextType>(props.type);\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nonMounted(() => {\n if (props.focusOnMount) {\n inputRef.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(() => [props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue?.trim());\n});\n\nconst defaultId = computed(() => (props.label ? props.label.trim().replaceAll(' ', '') : props.type));\n\nconst handleEyesPasswordClick = () => {\n inputType.value = inputType.value === 'text' ? 'password' : 'text';\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"id || `${uuid}-${defaultId}`\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n class=\"relative\"\n >\n <template #leading=\"{ error }\">\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n <div v-if=\"leadingIcon\">\n <ElIcon\n :name=\"leadingIcon.name\"\n :solid=\"leadingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </div>\n </div>\n\n <slot name=\"leading\" v-bind=\"{ error }\" />\n\n <input\n :id=\"id || `${uuid}-${defaultId}`\"\n ref=\"inputRef\"\n v-model=\"value\"\n :name=\"props.name || id || `${uuid}-${defaultId}`\"\n :type=\"inputType\"\n class=\"el-input truncate\"\n :class=\"{\n error,\n '!pl-10': leadingIcon?.name,\n '!pl-3': !leadingIcon?.name,\n '!pr-10': trailingIcon?.name,\n }\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :autocomplete=\"autocomplete\"\n :data-cy=\"`${defaultId}-input`\"\n @blur=\"fieldContext.validate()\"\n />\n </template>\n\n <template #trailing=\"{ error }\">\n <span v-if=\"trailingIcon\">\n <ElIcon\n :name=\"trailingIcon.name\"\n :solid=\"trailingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </span>\n\n <span v-if=\"type === 'password'\">\n <ElIconButton\n :error=\"error\"\n :icon=\"{\n name: inputType === 'text' ? 'EyeSlashIcon' : 'EyeIcon',\n }\"\n type=\"button\"\n :tooltip=\"inputType === 'text' ? 'Nascondi' : 'Mostra'\"\n @click=\"handleEyesPasswordClick\"\n />\n </span>\n\n <slot name=\"trailing\" v-bind=\"{ error }\" />\n </template>\n </ElInputContainer>\n</template>\n"],"names":["elInputTextTypes","props","__props","inputType","ref","inputRef","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","defaultId","handleEyesPasswordClick"],"mappings":"+cACaA,EAAmB,CAAC,OAAQ,UAAU,8VAWnD,MAAMC,EAAQC,EA0BRC,EAAYC,EAAAA,IAAqBH,EAAM,IAAI,EAC3CI,EAAWD,MAA6B,IAAI,EAElDE,EAAAA,UAAU,IAAM,OACVL,EAAM,gBACRM,EAAAF,EAAS,QAAT,MAAAE,EAAgB,QAClB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAA,SAAS,IAAMV,EAAM,UAAU,EACpDW,EAAqBD,EAAAA,SAAS,IAAM,CAACV,EAAM,UAAU,CAAC,EAEtD,CAAE,MAAAY,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,WAASP,EAAoBE,EAAoBX,EAAM,KAAkBiB,GAAA,CACtHV,EAAA,oBAAqBU,GAAA,YAAAA,EAAU,MAAM,CAAA,CAC3C,EAEKC,EAAYR,EAAAA,SAAS,IAAOV,EAAM,MAAQA,EAAM,MAAM,KAAK,EAAE,WAAW,IAAK,EAAE,EAAIA,EAAM,IAAK,EAE9FmB,EAA0B,IAAM,CACpCjB,EAAU,MAAQA,EAAU,QAAU,OAAS,WAAa,MAAA"}
@@ -1,2 +1,2 @@
1
- import{defineComponent as O,ref as b,onMounted as S,computed as m,openBlock as d,createBlock as j,mergeProps as z,unref as n,withCtx as k,createElementVNode as M,createElementBlock as c,createVNode as p,normalizeClass as f,createCommentVNode as g,renderSlot as E,normalizeProps as x,guardReactiveProps as C,withDirectives as D,isRef as A,vModelDynamic as U}from"vue";import{withTextualElInputProps as F,useInput as G,showRequiredMark as H}from"./input.esm.js";import w from"../ElIcon.vue.esm2.js";import J from"./ElInputContainer.vue.esm2.js";import K from"../ElIconButton.vue.esm2.js";const L={class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},Q={key:0},W=["id","name","type","placeholder","disabled","autocomplete","data-cy"],X={key:0},Y={key:1},le=["text","password"],ne=O({__name:"ElInputText",props:{...F(),type:{type:String,default:"text"},leadingIcon:{type:Object,default:void 0,required:!1},trailingIcon:{type:Object,default:void 0,required:!1},focusOnMount:{type:Boolean,default:!1},autocomplete:{type:String,default:"off"}},emits:["update:modelValue"],setup(t,{emit:q}){const a=t,o=b(a.type),v=b(null);S(()=>{var e;a.focusOnMount&&((e=v.value)==null||e.focus())});const B=q,P=m(()=>a.modelValue),R=m(()=>[a.validation]),{value:r,errorMessage:T,uuid:u,fieldContext:V}=G(P,R,a.name,e=>{B("update:modelValue",e==null?void 0:e.trim())}),i=m(()=>a.label?a.label.trim().replaceAll(" ",""):a.type),N=()=>{o.value=o.value==="text"?"password":"text"};return(e,s)=>(d(),j(J,z(e.$attrs,{name:e.id||`${n(u)}-${i.value}`,label:e.label,"error-message":a.errorMessage===!1?!1:a.errorMessage||n(T),"hidden-error-message":e.hiddenErrorMessage,"set-required-mark":n(H)([e.validation]),class:"relative"}),{leading:k(({error:l})=>{var y,h,I;return[M("div",L,[t.leadingIcon?(d(),c("div",Q,[p(w,{name:t.leadingIcon.name,solid:t.leadingIcon.solid,class:f(["h-5 w-5",{"text-neutral-lighter":!l,"text-error":l}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):g("",!0)]),E(e.$slots,"leading",x(C({error:l}))),D(M("input",{id:e.id||`${n(u)}-${i.value}`,ref_key:"inputRef",ref:v,"onUpdate:modelValue":s[0]||(s[0]=$=>A(r)?r.value=$:null),name:a.name||e.id||`${n(u)}-${i.value}`,type:o.value,class:f(["el-input",{error:l,"!pl-10":(y=t.leadingIcon)==null?void 0:y.name,"!pl-3":!((h=t.leadingIcon)!=null&&h.name),"!pr-10":(I=t.trailingIcon)==null?void 0:I.name}]),placeholder:e.placeholder,disabled:e.disabled,autocomplete:t.autocomplete,"data-cy":`${i.value}-input`,onBlur:s[1]||(s[1]=$=>n(V).validate())},null,42,W),[[U,n(r)]])]}),trailing:k(({error:l})=>[t.trailingIcon?(d(),c("span",X,[p(w,{name:t.trailingIcon.name,solid:t.trailingIcon.solid,class:f(["h-5 w-5",{"text-neutral-lighter":!l,"text-error":l}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):g("",!0),t.type==="password"?(d(),c("span",Y,[p(K,{error:l,icon:{name:o.value==="text"?"EyeSlashIcon":"EyeIcon"},type:"button",tooltip:o.value==="text"?"Nascondi":"Mostra",onClick:N},null,8,["error","icon","tooltip"])])):g("",!0),E(e.$slots,"trailing",x(C({error:l})))]),_:3},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});export{ne as default,le as elInputTextTypes};
1
+ import{defineComponent as O,ref as b,onMounted as S,computed as m,openBlock as d,createBlock as j,mergeProps as z,unref as n,withCtx as k,createElementVNode as M,createElementBlock as c,createVNode as p,normalizeClass as f,createCommentVNode as g,renderSlot as E,normalizeProps as x,guardReactiveProps as C,withDirectives as D,isRef as A,vModelDynamic as U}from"vue";import{withTextualElInputProps as F,useInput as G,showRequiredMark as H}from"./input.esm.js";import w from"../ElIcon.vue.esm2.js";import J from"./ElInputContainer.vue.esm2.js";import K from"../ElIconButton.vue.esm2.js";const L={class:"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3"},Q={key:0},W=["id","name","type","placeholder","disabled","autocomplete","data-cy"],X={key:0},Y={key:1},le=["text","password"],ne=O({__name:"ElInputText",props:{...F(),type:{type:String,default:"text"},leadingIcon:{type:Object,default:void 0,required:!1},trailingIcon:{type:Object,default:void 0,required:!1},focusOnMount:{type:Boolean,default:!1},autocomplete:{type:String,default:"off"}},emits:["update:modelValue"],setup(t,{emit:q}){const a=t,o=b(a.type),v=b(null);S(()=>{var e;a.focusOnMount&&((e=v.value)==null||e.focus())});const B=q,P=m(()=>a.modelValue),R=m(()=>[a.validation]),{value:r,errorMessage:T,uuid:u,fieldContext:V}=G(P,R,a.name,e=>{B("update:modelValue",e==null?void 0:e.trim())}),i=m(()=>a.label?a.label.trim().replaceAll(" ",""):a.type),N=()=>{o.value=o.value==="text"?"password":"text"};return(e,s)=>(d(),j(J,z(e.$attrs,{name:e.id||`${n(u)}-${i.value}`,label:e.label,"error-message":a.errorMessage===!1?!1:a.errorMessage||n(T),"hidden-error-message":e.hiddenErrorMessage,"set-required-mark":n(H)([e.validation]),class:"relative"}),{leading:k(({error:l})=>{var y,h,I;return[M("div",L,[t.leadingIcon?(d(),c("div",Q,[p(w,{name:t.leadingIcon.name,solid:t.leadingIcon.solid,class:f(["h-5 w-5",{"text-neutral-lighter":!l,"text-error":l}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):g("",!0)]),E(e.$slots,"leading",x(C({error:l}))),D(M("input",{id:e.id||`${n(u)}-${i.value}`,ref_key:"inputRef",ref:v,"onUpdate:modelValue":s[0]||(s[0]=$=>A(r)?r.value=$:null),name:a.name||e.id||`${n(u)}-${i.value}`,type:o.value,class:f(["el-input truncate",{error:l,"!pl-10":(y=t.leadingIcon)==null?void 0:y.name,"!pl-3":!((h=t.leadingIcon)!=null&&h.name),"!pr-10":(I=t.trailingIcon)==null?void 0:I.name}]),placeholder:e.placeholder,disabled:e.disabled,autocomplete:t.autocomplete,"data-cy":`${i.value}-input`,onBlur:s[1]||(s[1]=$=>n(V).validate())},null,42,W),[[U,n(r)]])]}),trailing:k(({error:l})=>[t.trailingIcon?(d(),c("span",X,[p(w,{name:t.trailingIcon.name,solid:t.trailingIcon.solid,class:f(["h-5 w-5",{"text-neutral-lighter":!l,"text-error":l}]),"aria-hidden":"true"},null,8,["name","solid","class"])])):g("",!0),t.type==="password"?(d(),c("span",Y,[p(K,{error:l,icon:{name:o.value==="text"?"EyeSlashIcon":"EyeIcon"},type:"button",tooltip:o.value==="text"?"Nascondi":"Mostra",onClick:N},null,8,["error","icon","tooltip"])])):g("",!0),E(e.$slots,"trailing",x(C({error:l})))]),_:3},16,["name","label","error-message","hidden-error-message","set-required-mark"]))}});export{ne as default,le as elInputTextTypes};
2
2
  //# sourceMappingURL=ElInputText.vue.esm2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ElInputText.vue.esm2.js","sources":["../../../src/forms/ElInputText.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elInputTextTypes = ['text', 'password'] as const;\nexport type ElInputTextType = (typeof elInputTextTypes)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, TextualValueType, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, PropType, ref } from 'vue';\nimport ElIcon, { ElIconProps } from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport ElIconButton from '@/ElIconButton.vue';\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n type: {\n type: String as PropType<ElInputTextType>,\n default: 'text',\n },\n leadingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n trailingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n autocomplete: {\n type: String,\n default: 'off',\n },\n});\n\nconst inputType = ref<ElInputTextType>(props.type);\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nonMounted(() => {\n if (props.focusOnMount) {\n inputRef.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(() => [props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue?.trim());\n});\n\nconst defaultId = computed(() => (props.label ? props.label.trim().replaceAll(' ', '') : props.type));\n\nconst handleEyesPasswordClick = () => {\n inputType.value = inputType.value === 'text' ? 'password' : 'text';\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"id || `${uuid}-${defaultId}`\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n class=\"relative\"\n >\n <template #leading=\"{ error }\">\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n <div v-if=\"leadingIcon\">\n <ElIcon\n :name=\"leadingIcon.name\"\n :solid=\"leadingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </div>\n </div>\n\n <slot name=\"leading\" v-bind=\"{ error }\" />\n\n <input\n :id=\"id || `${uuid}-${defaultId}`\"\n ref=\"inputRef\"\n v-model=\"value\"\n :name=\"props.name || id || `${uuid}-${defaultId}`\"\n :type=\"inputType\"\n class=\"el-input\"\n :class=\"{\n error,\n '!pl-10': leadingIcon?.name,\n '!pl-3': !leadingIcon?.name,\n '!pr-10': trailingIcon?.name,\n }\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :autocomplete=\"autocomplete\"\n :data-cy=\"`${defaultId}-input`\"\n @blur=\"fieldContext.validate()\"\n />\n </template>\n\n <template #trailing=\"{ error }\">\n <span v-if=\"trailingIcon\">\n <ElIcon\n :name=\"trailingIcon.name\"\n :solid=\"trailingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </span>\n\n <span v-if=\"type === 'password'\">\n <ElIconButton\n :error=\"error\"\n :icon=\"{\n name: inputType === 'text' ? 'EyeSlashIcon' : 'EyeIcon',\n }\"\n type=\"button\"\n :tooltip=\"inputType === 'text' ? 'Nascondi' : 'Mostra'\"\n @click=\"handleEyesPasswordClick\"\n />\n </span>\n\n <slot name=\"trailing\" v-bind=\"{ error }\" />\n </template>\n </ElInputContainer>\n</template>\n"],"names":["elInputTextTypes","props","__props","inputType","ref","inputRef","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","defaultId","handleEyesPasswordClick"],"mappings":"wwBACaA,GAAmB,CAAC,OAAQ,UAAU,uTAWnD,MAAMC,EAAQC,EA0BRC,EAAYC,EAAqBH,EAAM,IAAI,EAC3CI,EAAWD,EAA6B,IAAI,EAElDE,EAAU,IAAM,OACVL,EAAM,gBACRM,EAAAF,EAAS,QAAT,MAAAE,EAAgB,QAClB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAS,IAAMV,EAAM,UAAU,EACpDW,EAAqBD,EAAS,IAAM,CAACV,EAAM,UAAU,CAAC,EAEtD,CAAE,MAAAY,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,EAASP,EAAoBE,EAAoBX,EAAM,KAAkBiB,GAAA,CACtHV,EAAA,oBAAqBU,GAAA,YAAAA,EAAU,MAAM,CAAA,CAC3C,EAEKC,EAAYR,EAAS,IAAOV,EAAM,MAAQA,EAAM,MAAM,KAAK,EAAE,WAAW,IAAK,EAAE,EAAIA,EAAM,IAAK,EAE9FmB,EAA0B,IAAM,CACpCjB,EAAU,MAAQA,EAAU,QAAU,OAAS,WAAa,MAAA"}
1
+ {"version":3,"file":"ElInputText.vue.esm2.js","sources":["../../src/forms/ElInputText.vue"],"sourcesContent":["<script lang=\"ts\">\nexport const elInputTextTypes = ['text', 'password'] as const;\nexport type ElInputTextType = (typeof elInputTextTypes)[number];\n</script>\n\n<script lang=\"ts\" setup>\nimport { useInput, showRequiredMark, TextualValueType, withTextualElInputProps } from '@/forms/input';\nimport { computed, onMounted, PropType, ref } from 'vue';\nimport ElIcon, { ElIconProps } from '@/ElIcon.vue';\nimport ElInputContainer from '@/forms/ElInputContainer.vue';\nimport ElIconButton from '@/ElIconButton.vue';\n\nconst props = defineProps({\n ...withTextualElInputProps(),\n type: {\n type: String as PropType<ElInputTextType>,\n default: 'text',\n },\n leadingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n trailingIcon: {\n type: Object as PropType<ElIconProps>,\n default: undefined,\n required: false,\n },\n focusOnMount: {\n type: Boolean,\n default: false,\n },\n autocomplete: {\n type: String,\n default: 'off',\n },\n});\n\nconst inputType = ref<ElInputTextType>(props.type);\nconst inputRef = ref<HTMLInputElement | null>(null);\n\nonMounted(() => {\n if (props.focusOnMount) {\n inputRef.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(() => [props.validation]);\n\nconst { value, errorMessage, uuid, fieldContext } = useInput(computedModelValue, computedValidation, props.name, newValue => {\n emit('update:modelValue', newValue?.trim());\n});\n\nconst defaultId = computed(() => (props.label ? props.label.trim().replaceAll(' ', '') : props.type));\n\nconst handleEyesPasswordClick = () => {\n inputType.value = inputType.value === 'text' ? 'password' : 'text';\n};\n</script>\n\n<template>\n <ElInputContainer\n v-bind=\"$attrs\"\n :name=\"id || `${uuid}-${defaultId}`\"\n :label=\"label\"\n :error-message=\"props.errorMessage === false ? false : props.errorMessage || errorMessage\"\n :hidden-error-message=\"hiddenErrorMessage\"\n :set-required-mark=\"showRequiredMark([validation])\"\n class=\"relative\"\n >\n <template #leading=\"{ error }\">\n <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n <div v-if=\"leadingIcon\">\n <ElIcon\n :name=\"leadingIcon.name\"\n :solid=\"leadingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </div>\n </div>\n\n <slot name=\"leading\" v-bind=\"{ error }\" />\n\n <input\n :id=\"id || `${uuid}-${defaultId}`\"\n ref=\"inputRef\"\n v-model=\"value\"\n :name=\"props.name || id || `${uuid}-${defaultId}`\"\n :type=\"inputType\"\n class=\"el-input truncate\"\n :class=\"{\n error,\n '!pl-10': leadingIcon?.name,\n '!pl-3': !leadingIcon?.name,\n '!pr-10': trailingIcon?.name,\n }\"\n :placeholder=\"placeholder\"\n :disabled=\"disabled\"\n :autocomplete=\"autocomplete\"\n :data-cy=\"`${defaultId}-input`\"\n @blur=\"fieldContext.validate()\"\n />\n </template>\n\n <template #trailing=\"{ error }\">\n <span v-if=\"trailingIcon\">\n <ElIcon\n :name=\"trailingIcon.name\"\n :solid=\"trailingIcon.solid\"\n class=\"h-5 w-5\"\n aria-hidden=\"true\"\n :class=\"{\n 'text-neutral-lighter': !error,\n 'text-error': error,\n }\"\n />\n </span>\n\n <span v-if=\"type === 'password'\">\n <ElIconButton\n :error=\"error\"\n :icon=\"{\n name: inputType === 'text' ? 'EyeSlashIcon' : 'EyeIcon',\n }\"\n type=\"button\"\n :tooltip=\"inputType === 'text' ? 'Nascondi' : 'Mostra'\"\n @click=\"handleEyesPasswordClick\"\n />\n </span>\n\n <slot name=\"trailing\" v-bind=\"{ error }\" />\n </template>\n </ElInputContainer>\n</template>\n"],"names":["elInputTextTypes","props","__props","inputType","ref","inputRef","onMounted","_a","emit","__emit","computedModelValue","computed","computedValidation","value","errorMessage","uuid","fieldContext","useInput","newValue","defaultId","handleEyesPasswordClick"],"mappings":"wwBACaA,GAAmB,CAAC,OAAQ,UAAU,uTAWnD,MAAMC,EAAQC,EA0BRC,EAAYC,EAAqBH,EAAM,IAAI,EAC3CI,EAAWD,EAA6B,IAAI,EAElDE,EAAU,IAAM,OACVL,EAAM,gBACRM,EAAAF,EAAS,QAAT,MAAAE,EAAgB,QAClB,CACD,EAED,MAAMC,EAAOC,EAIPC,EAAqBC,EAAS,IAAMV,EAAM,UAAU,EACpDW,EAAqBD,EAAS,IAAM,CAACV,EAAM,UAAU,CAAC,EAEtD,CAAE,MAAAY,EAAO,aAAAC,EAAc,KAAAC,EAAM,aAAAC,CAAiB,EAAAC,EAASP,EAAoBE,EAAoBX,EAAM,KAAkBiB,GAAA,CACtHV,EAAA,oBAAqBU,GAAA,YAAAA,EAAU,MAAM,CAAA,CAC3C,EAEKC,EAAYR,EAAS,IAAOV,EAAM,MAAQA,EAAM,MAAM,KAAK,EAAE,WAAW,IAAK,EAAE,EAAIA,EAAM,IAAK,EAE9FmB,EAA0B,IAAM,CACpCjB,EAAU,MAAQA,EAAU,QAAU,OAAS,WAAa,MAAA"}
@@ -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 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 +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 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 +1 @@
1
- {"version":3,"file":"input.cjs.js","sources":["../../../src/forms/input.ts"],"sourcesContent":["import { InputValidation } from '@/forms/validation-rules';\nimport { useField } from 'vee-validate';\n\nlet UUID = 0;\n\nexport const UniqueID = () => {\n const getID = () => {\n UUID++;\n return `elty-input-${UUID.toString()}`;\n };\n return {\n getID,\n };\n};\n\nimport { computed, ComputedRef, PropType, Ref, watch } from 'vue';\n\nexport type TextualValueType = string | null | undefined;\nexport type NumberValueType = number | null | undefined;\n\nexport const withCommonInputProps = () => ({\n label: {\n type: String,\n required: false,\n default: '',\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n hideRequiredMark: {\n type: Boolean,\n required: false,\n default: false,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n helpTooltip: {\n type: Object as PropType<{\n title: string;\n text: string;\n }>,\n required: false,\n default: undefined,\n },\n});\n\nexport const withTextualInputProps = () => ({\n ...withCommonInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withCommonElInputProps = () => ({\n name: {\n type: String,\n required: false,\n default: '',\n },\n id: {\n type: String,\n required: false,\n default: '',\n },\n label: {\n type: String,\n required: false,\n default: '',\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n errorMessage: {\n type: [String, Boolean],\n required: false,\n default: undefined,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n});\n\nexport const withTextualElInputProps = () => ({\n ...withCommonElInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withNumberInputProps = () => ({\n ...withCommonInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport const withNumberElInputProps = () => ({\n ...withCommonElInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport function useInput<T = string>(\n initialValue: Ref<T>,\n validations: Ref<string[]> | ComputedRef<string[]>,\n inputName: string = '',\n onChange?: (value: T) => void,\n) {\n const uuid = UniqueID().getID();\n const validationsString = computed(() => validations.value && validations.value.join('|'));\n\n // if a name is not provided it generates a random one\n const field = useField<T>(inputName || uuid, validationsString, {\n // empty string counts as a forced blank value\n initialValue,\n // validation is performed manually on value change, only if there are errors\n validateOnValueUpdate: false,\n });\n\n watch(initialValue, newValue => {\n field.setValue(newValue);\n });\n\n watch(field.value, val => {\n if (onChange) {\n onChange(val);\n }\n if (field.errorMessage.value) {\n field.validate();\n }\n });\n\n return {\n fieldContext: field,\n errorMessage: field.errorMessage,\n value: field.value,\n uuid,\n meta: field.meta,\n setValue: field.setValue,\n };\n}\n\nexport function showRequiredMark(validations: string[], forceHideMark?: boolean | undefined): boolean {\n if (forceHideMark) return false;\n\n for (const v of validations) {\n if (v.match(/(?:^required)|required\\||(?:\\|required$)/)) {\n return true;\n }\n }\n return false;\n}\n"],"names":["UUID","UniqueID","withCommonInputProps","withTextualInputProps","withCommonElInputProps","withTextualElInputProps","withNumberInputProps","withNumberElInputProps","useInput","initialValue","validations","inputName","onChange","uuid","validationsString","computed","field","useField","watch","newValue","val","showRequiredMark","forceHideMark","v"],"mappings":"iIAGA,IAAIA,EAAO,EAEJ,MAAMC,EAAW,KAKf,CACL,MALY,KACZD,IACO,cAAcA,EAAK,SAAA,CAAU,GAGpC,GASSE,EAAuB,KAAO,CACzC,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,iBAAkB,CAChB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,YAAa,CACX,KAAM,OAIN,SAAU,GACV,QAAS,MACX,CACF,GAEaC,EAAwB,KAAO,CAC1C,GAAGD,EAAqB,EAExB,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAyB,KAAO,CAC3C,KAAM,CACJ,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,GAAI,CACF,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,aAAc,CACZ,KAAM,CAAC,OAAQ,OAAO,EACtB,SAAU,GACV,QAAS,MACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,CACF,GAEaC,EAA0B,KAAO,CAC5C,GAAGD,EAAuB,EAE1B,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAuB,KAAO,CACzC,GAAGJ,EAAqB,EACxB,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEaK,EAAyB,KAAO,CAC3C,GAAGH,EAAuB,EAC1B,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEO,SAASI,EACdC,EACAC,EACAC,EAAoB,GACpBC,EACA,CACM,MAAAC,EAAOZ,IAAW,QAClBa,EAAoBC,WAAS,IAAML,EAAY,OAASA,EAAY,MAAM,KAAK,GAAG,CAAC,EAGnFM,EAAQC,EAAA,SAAYN,GAAaE,EAAMC,EAAmB,CAE9D,aAAAL,EAEA,sBAAuB,EAAA,CACxB,EAEDS,OAAAA,QAAMT,EAA0BU,GAAA,CAC9BH,EAAM,SAASG,CAAQ,CAAA,CACxB,EAEKD,EAAAA,MAAAF,EAAM,MAAcI,GAAA,CACpBR,GACFA,EAASQ,CAAG,EAEVJ,EAAM,aAAa,OACrBA,EAAM,SAAS,CACjB,CACD,EAEM,CACL,aAAcA,EACd,aAAcA,EAAM,aACpB,MAAOA,EAAM,MACb,KAAAH,EACA,KAAMG,EAAM,KACZ,SAAUA,EAAM,QAAA,CAEpB,CAEgB,SAAAK,EAAiBX,EAAuBY,EAA8C,CAChG,GAAAA,EAAsB,MAAA,GAE1B,UAAWC,KAAKb,EACV,GAAAa,EAAE,MAAM,0CAA0C,EAC7C,MAAA,GAGJ,MAAA,EACT"}
1
+ {"version":3,"file":"input.cjs.js","sources":["../../src/forms/input.ts"],"sourcesContent":["import { InputValidation } from '@/forms/validation-rules';\nimport { useField } from 'vee-validate';\n\nlet UUID = 0;\n\nexport const UniqueID = () => {\n const getID = () => {\n UUID++;\n return `elty-input-${UUID.toString()}`;\n };\n return {\n getID,\n };\n};\n\nimport { computed, ComputedRef, PropType, Ref, watch } from 'vue';\n\nexport type TextualValueType = string | null | undefined;\nexport type NumberValueType = number | null | undefined;\n\nexport const withCommonInputProps = () => ({\n label: {\n type: String,\n required: false,\n default: '',\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n hideRequiredMark: {\n type: Boolean,\n required: false,\n default: false,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n helpTooltip: {\n type: Object as PropType<{\n title: string;\n text: string;\n }>,\n required: false,\n default: undefined,\n },\n});\n\nexport const withTextualInputProps = () => ({\n ...withCommonInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withCommonElInputProps = () => ({\n name: {\n type: String,\n required: false,\n default: '',\n },\n id: {\n type: String,\n required: false,\n default: '',\n },\n label: {\n type: String,\n required: false,\n default: '',\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n errorMessage: {\n type: [String, Boolean],\n required: false,\n default: undefined,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n});\n\nexport const withTextualElInputProps = () => ({\n ...withCommonElInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withNumberInputProps = () => ({\n ...withCommonInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport const withNumberElInputProps = () => ({\n ...withCommonElInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport function useInput<T = string>(\n initialValue: Ref<T>,\n validations: Ref<string[]> | ComputedRef<string[]>,\n inputName: string = '',\n onChange?: (value: T) => void,\n) {\n const uuid = UniqueID().getID();\n const validationsString = computed(() => validations.value && validations.value.join('|'));\n\n // if a name is not provided it generates a random one\n const field = useField<T>(inputName || uuid, validationsString, {\n // empty string counts as a forced blank value\n initialValue,\n // validation is performed manually on value change, only if there are errors\n validateOnValueUpdate: false,\n });\n\n watch(initialValue, newValue => {\n field.setValue(newValue);\n });\n\n watch(field.value, val => {\n if (onChange) {\n onChange(val);\n }\n if (field.errorMessage.value) {\n field.validate();\n }\n });\n\n return {\n fieldContext: field,\n errorMessage: field.errorMessage,\n value: field.value,\n uuid,\n meta: field.meta,\n setValue: field.setValue,\n };\n}\n\nexport function showRequiredMark(validations: string[], forceHideMark?: boolean | undefined): boolean {\n if (forceHideMark) return false;\n\n for (const v of validations) {\n if (v.match(/(?:^required)|required\\||(?:\\|required$)/)) {\n return true;\n }\n }\n return false;\n}\n"],"names":["UUID","UniqueID","withCommonInputProps","withTextualInputProps","withCommonElInputProps","withTextualElInputProps","withNumberInputProps","withNumberElInputProps","useInput","initialValue","validations","inputName","onChange","uuid","validationsString","computed","field","useField","watch","newValue","val","showRequiredMark","forceHideMark","v"],"mappings":"iIAGA,IAAIA,EAAO,EAEJ,MAAMC,EAAW,KAKf,CACL,MALY,KACZD,IACO,cAAcA,EAAK,SAAA,CAAU,GAGpC,GASSE,EAAuB,KAAO,CACzC,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,iBAAkB,CAChB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,YAAa,CACX,KAAM,OAIN,SAAU,GACV,QAAS,MACX,CACF,GAEaC,EAAwB,KAAO,CAC1C,GAAGD,EAAqB,EAExB,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAyB,KAAO,CAC3C,KAAM,CACJ,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,GAAI,CACF,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,aAAc,CACZ,KAAM,CAAC,OAAQ,OAAO,EACtB,SAAU,GACV,QAAS,MACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,CACF,GAEaC,EAA0B,KAAO,CAC5C,GAAGD,EAAuB,EAE1B,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAuB,KAAO,CACzC,GAAGJ,EAAqB,EACxB,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEaK,EAAyB,KAAO,CAC3C,GAAGH,EAAuB,EAC1B,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEO,SAASI,EACdC,EACAC,EACAC,EAAoB,GACpBC,EACA,CACM,MAAAC,EAAOZ,IAAW,QAClBa,EAAoBC,WAAS,IAAML,EAAY,OAASA,EAAY,MAAM,KAAK,GAAG,CAAC,EAGnFM,EAAQC,EAAA,SAAYN,GAAaE,EAAMC,EAAmB,CAE9D,aAAAL,EAEA,sBAAuB,EAAA,CACxB,EAEDS,OAAAA,QAAMT,EAA0BU,GAAA,CAC9BH,EAAM,SAASG,CAAQ,CAAA,CACxB,EAEKD,EAAAA,MAAAF,EAAM,MAAcI,GAAA,CACpBR,GACFA,EAASQ,CAAG,EAEVJ,EAAM,aAAa,OACrBA,EAAM,SAAS,CACjB,CACD,EAEM,CACL,aAAcA,EACd,aAAcA,EAAM,aACpB,MAAOA,EAAM,MACb,KAAAH,EACA,KAAMG,EAAM,KACZ,SAAUA,EAAM,QAAA,CAEpB,CAEgB,SAAAK,EAAiBX,EAAuBY,EAA8C,CAChG,GAAAA,EAAsB,MAAA,GAE1B,UAAWC,KAAKb,EACV,GAAAa,EAAE,MAAM,0CAA0C,EAC7C,MAAA,GAGJ,MAAA,EACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"input.esm.js","sources":["../../../src/forms/input.ts"],"sourcesContent":["import { InputValidation } from '@/forms/validation-rules';\nimport { useField } from 'vee-validate';\n\nlet UUID = 0;\n\nexport const UniqueID = () => {\n const getID = () => {\n UUID++;\n return `elty-input-${UUID.toString()}`;\n };\n return {\n getID,\n };\n};\n\nimport { computed, ComputedRef, PropType, Ref, watch } from 'vue';\n\nexport type TextualValueType = string | null | undefined;\nexport type NumberValueType = number | null | undefined;\n\nexport const withCommonInputProps = () => ({\n label: {\n type: String,\n required: false,\n default: '',\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n hideRequiredMark: {\n type: Boolean,\n required: false,\n default: false,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n helpTooltip: {\n type: Object as PropType<{\n title: string;\n text: string;\n }>,\n required: false,\n default: undefined,\n },\n});\n\nexport const withTextualInputProps = () => ({\n ...withCommonInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withCommonElInputProps = () => ({\n name: {\n type: String,\n required: false,\n default: '',\n },\n id: {\n type: String,\n required: false,\n default: '',\n },\n label: {\n type: String,\n required: false,\n default: '',\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n errorMessage: {\n type: [String, Boolean],\n required: false,\n default: undefined,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n});\n\nexport const withTextualElInputProps = () => ({\n ...withCommonElInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withNumberInputProps = () => ({\n ...withCommonInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport const withNumberElInputProps = () => ({\n ...withCommonElInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport function useInput<T = string>(\n initialValue: Ref<T>,\n validations: Ref<string[]> | ComputedRef<string[]>,\n inputName: string = '',\n onChange?: (value: T) => void,\n) {\n const uuid = UniqueID().getID();\n const validationsString = computed(() => validations.value && validations.value.join('|'));\n\n // if a name is not provided it generates a random one\n const field = useField<T>(inputName || uuid, validationsString, {\n // empty string counts as a forced blank value\n initialValue,\n // validation is performed manually on value change, only if there are errors\n validateOnValueUpdate: false,\n });\n\n watch(initialValue, newValue => {\n field.setValue(newValue);\n });\n\n watch(field.value, val => {\n if (onChange) {\n onChange(val);\n }\n if (field.errorMessage.value) {\n field.validate();\n }\n });\n\n return {\n fieldContext: field,\n errorMessage: field.errorMessage,\n value: field.value,\n uuid,\n meta: field.meta,\n setValue: field.setValue,\n };\n}\n\nexport function showRequiredMark(validations: string[], forceHideMark?: boolean | undefined): boolean {\n if (forceHideMark) return false;\n\n for (const v of validations) {\n if (v.match(/(?:^required)|required\\||(?:\\|required$)/)) {\n return true;\n }\n }\n return false;\n}\n"],"names":["UUID","UniqueID","withCommonInputProps","withTextualInputProps","withCommonElInputProps","withTextualElInputProps","withNumberInputProps","withNumberElInputProps","useInput","initialValue","validations","inputName","onChange","uuid","validationsString","computed","field","useField","watch","newValue","val","showRequiredMark","forceHideMark","v"],"mappings":"kFAGA,IAAIA,EAAO,EAEJ,MAAMC,EAAW,KAKf,CACL,MALY,KACZD,IACO,cAAcA,EAAK,SAAA,CAAU,GAGpC,GASSE,EAAuB,KAAO,CACzC,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,iBAAkB,CAChB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,YAAa,CACX,KAAM,OAIN,SAAU,GACV,QAAS,MACX,CACF,GAEaC,EAAwB,KAAO,CAC1C,GAAGD,EAAqB,EAExB,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAyB,KAAO,CAC3C,KAAM,CACJ,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,GAAI,CACF,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,aAAc,CACZ,KAAM,CAAC,OAAQ,OAAO,EACtB,SAAU,GACV,QAAS,MACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,CACF,GAEaC,EAA0B,KAAO,CAC5C,GAAGD,EAAuB,EAE1B,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAuB,KAAO,CACzC,GAAGJ,EAAqB,EACxB,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEaK,EAAyB,KAAO,CAC3C,GAAGH,EAAuB,EAC1B,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEO,SAASI,EACdC,EACAC,EACAC,EAAoB,GACpBC,EACA,CACM,MAAAC,EAAOZ,IAAW,QAClBa,EAAoBC,EAAS,IAAML,EAAY,OAASA,EAAY,MAAM,KAAK,GAAG,CAAC,EAGnFM,EAAQC,EAAYN,GAAaE,EAAMC,EAAmB,CAE9D,aAAAL,EAEA,sBAAuB,EAAA,CACxB,EAED,OAAAS,EAAMT,EAA0BU,GAAA,CAC9BH,EAAM,SAASG,CAAQ,CAAA,CACxB,EAEKD,EAAAF,EAAM,MAAcI,GAAA,CACpBR,GACFA,EAASQ,CAAG,EAEVJ,EAAM,aAAa,OACrBA,EAAM,SAAS,CACjB,CACD,EAEM,CACL,aAAcA,EACd,aAAcA,EAAM,aACpB,MAAOA,EAAM,MACb,KAAAH,EACA,KAAMG,EAAM,KACZ,SAAUA,EAAM,QAAA,CAEpB,CAEgB,SAAAK,EAAiBX,EAAuBY,EAA8C,CAChG,GAAAA,EAAsB,MAAA,GAE1B,UAAWC,KAAKb,EACV,GAAAa,EAAE,MAAM,0CAA0C,EAC7C,MAAA,GAGJ,MAAA,EACT"}
1
+ {"version":3,"file":"input.esm.js","sources":["../../src/forms/input.ts"],"sourcesContent":["import { InputValidation } from '@/forms/validation-rules';\nimport { useField } from 'vee-validate';\n\nlet UUID = 0;\n\nexport const UniqueID = () => {\n const getID = () => {\n UUID++;\n return `elty-input-${UUID.toString()}`;\n };\n return {\n getID,\n };\n};\n\nimport { computed, ComputedRef, PropType, Ref, watch } from 'vue';\n\nexport type TextualValueType = string | null | undefined;\nexport type NumberValueType = number | null | undefined;\n\nexport const withCommonInputProps = () => ({\n label: {\n type: String,\n required: false,\n default: '',\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n hideRequiredMark: {\n type: Boolean,\n required: false,\n default: false,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n helpTooltip: {\n type: Object as PropType<{\n title: string;\n text: string;\n }>,\n required: false,\n default: undefined,\n },\n});\n\nexport const withTextualInputProps = () => ({\n ...withCommonInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withCommonElInputProps = () => ({\n name: {\n type: String,\n required: false,\n default: '',\n },\n id: {\n type: String,\n required: false,\n default: '',\n },\n label: {\n type: String,\n required: false,\n default: '',\n },\n validation: {\n type: String as PropType<InputValidation>,\n default: '',\n required: false,\n },\n disabled: {\n type: Boolean,\n required: false,\n default: false,\n },\n errorMessage: {\n type: [String, Boolean],\n required: false,\n default: undefined,\n },\n hiddenErrorMessage: {\n type: Boolean,\n required: false,\n default: false,\n },\n});\n\nexport const withTextualElInputProps = () => ({\n ...withCommonElInputProps(),\n // v-model binding will always be done to a single string. every component will treat the string as he wishes\n modelValue: {\n type: String as PropType<TextualValueType>,\n default: '',\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n});\n\nexport const withNumberInputProps = () => ({\n ...withCommonInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport const withNumberElInputProps = () => ({\n ...withCommonElInputProps(),\n modelValue: {\n type: Number as PropType<NumberValueType>,\n },\n placeholder: {\n type: String,\n default: '',\n required: false,\n },\n step: {\n type: Number,\n default: 1,\n required: false,\n },\n});\n\nexport function useInput<T = string>(\n initialValue: Ref<T>,\n validations: Ref<string[]> | ComputedRef<string[]>,\n inputName: string = '',\n onChange?: (value: T) => void,\n) {\n const uuid = UniqueID().getID();\n const validationsString = computed(() => validations.value && validations.value.join('|'));\n\n // if a name is not provided it generates a random one\n const field = useField<T>(inputName || uuid, validationsString, {\n // empty string counts as a forced blank value\n initialValue,\n // validation is performed manually on value change, only if there are errors\n validateOnValueUpdate: false,\n });\n\n watch(initialValue, newValue => {\n field.setValue(newValue);\n });\n\n watch(field.value, val => {\n if (onChange) {\n onChange(val);\n }\n if (field.errorMessage.value) {\n field.validate();\n }\n });\n\n return {\n fieldContext: field,\n errorMessage: field.errorMessage,\n value: field.value,\n uuid,\n meta: field.meta,\n setValue: field.setValue,\n };\n}\n\nexport function showRequiredMark(validations: string[], forceHideMark?: boolean | undefined): boolean {\n if (forceHideMark) return false;\n\n for (const v of validations) {\n if (v.match(/(?:^required)|required\\||(?:\\|required$)/)) {\n return true;\n }\n }\n return false;\n}\n"],"names":["UUID","UniqueID","withCommonInputProps","withTextualInputProps","withCommonElInputProps","withTextualElInputProps","withNumberInputProps","withNumberElInputProps","useInput","initialValue","validations","inputName","onChange","uuid","validationsString","computed","field","useField","watch","newValue","val","showRequiredMark","forceHideMark","v"],"mappings":"kFAGA,IAAIA,EAAO,EAEJ,MAAMC,EAAW,KAKf,CACL,MALY,KACZD,IACO,cAAcA,EAAK,SAAA,CAAU,GAGpC,GASSE,EAAuB,KAAO,CACzC,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,iBAAkB,CAChB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,YAAa,CACX,KAAM,OAIN,SAAU,GACV,QAAS,MACX,CACF,GAEaC,EAAwB,KAAO,CAC1C,GAAGD,EAAqB,EAExB,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAyB,KAAO,CAC3C,KAAM,CACJ,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,GAAI,CACF,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,MAAO,CACL,KAAM,OACN,SAAU,GACV,QAAS,EACX,EACA,WAAY,CACV,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,SAAU,CACR,KAAM,QACN,SAAU,GACV,QAAS,EACX,EACA,aAAc,CACZ,KAAM,CAAC,OAAQ,OAAO,EACtB,SAAU,GACV,QAAS,MACX,EACA,mBAAoB,CAClB,KAAM,QACN,SAAU,GACV,QAAS,EACX,CACF,GAEaC,EAA0B,KAAO,CAC5C,GAAGD,EAAuB,EAE1B,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,CACF,GAEaE,EAAuB,KAAO,CACzC,GAAGJ,EAAqB,EACxB,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEaK,EAAyB,KAAO,CAC3C,GAAGH,EAAuB,EAC1B,WAAY,CACV,KAAM,MACR,EACA,YAAa,CACX,KAAM,OACN,QAAS,GACT,SAAU,EACZ,EACA,KAAM,CACJ,KAAM,OACN,QAAS,EACT,SAAU,EACZ,CACF,GAEO,SAASI,EACdC,EACAC,EACAC,EAAoB,GACpBC,EACA,CACM,MAAAC,EAAOZ,IAAW,QAClBa,EAAoBC,EAAS,IAAML,EAAY,OAASA,EAAY,MAAM,KAAK,GAAG,CAAC,EAGnFM,EAAQC,EAAYN,GAAaE,EAAMC,EAAmB,CAE9D,aAAAL,EAEA,sBAAuB,EAAA,CACxB,EAED,OAAAS,EAAMT,EAA0BU,GAAA,CAC9BH,EAAM,SAASG,CAAQ,CAAA,CACxB,EAEKD,EAAAF,EAAM,MAAcI,GAAA,CACpBR,GACFA,EAASQ,CAAG,EAEVJ,EAAM,aAAa,OACrBA,EAAM,SAAS,CACjB,CACD,EAEM,CACL,aAAcA,EACd,aAAcA,EAAM,aACpB,MAAOA,EAAM,MACb,KAAAH,EACA,KAAMG,EAAM,KACZ,SAAUA,EAAM,QAAA,CAEpB,CAEgB,SAAAK,EAAiBX,EAAuBY,EAA8C,CAChG,GAAAA,EAAsB,MAAA,GAE1B,UAAWC,KAAKb,EACV,GAAAa,EAAE,MAAM,0CAA0C,EAC7C,MAAA,GAGJ,MAAA,EACT"}