1 line
4.3 KiB
JavaScript
1 line
4.3 KiB
JavaScript
import{A as e,At as t,E as n,F as r,K as i,M as a,Nt as o,Pt as s,U as c,c as l,d as u,f as d,i as f,l as p,nt as m,o as h,t as g,u as _,v}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{l as y,s as b,u as x}from"./BasicIcon-ba1FsUKx.js";import{t as S}from"./dist-Bc4P4ngC.js";var C={key:0,class:`form-label`},w=[`aria-label`,`aria-expanded`,`disabled`],T=[`aria-label`],E={key:0,class:`app-select__search`,role:`presentation`},D=[`placeholder`],O={key:1,class:`app-select__empty`,role:`presentation`},k=[`aria-selected`,`onClick`],A={class:`app-select__option-label`},j={key:0,class:`app-select__check`,viewBox:`0 0 24 24`,width:`16`,height:`16`,"aria-hidden":`true`},M={key:1,class:`input-error-text`},N={key:2,class:`form-hint`},P=g(v({__name:`AppSelect`,props:{modelValue:{},options:{},label:{},placeholder:{default:`انتخاب کنید`},hint:{},error:{},ariaLabel:{default:`انتخاب`},block:{type:Boolean,default:!0},searchable:{type:Boolean,default:!1},searchPlaceholder:{default:`جستجو…`},disabled:{type:Boolean,default:!1}},emits:[`update:modelValue`],setup(g,{emit:v}){let P=g,F=v,I=m(!1),L=m(``),R=m(null),z=m(null),B=m(null),V=m({});S(R,()=>{I.value=!1,L.value=``},{ignore:[z]});let H=l(()=>P.options.find(e=>e.value===P.modelValue)),U=l(()=>H.value?.label??P.placeholder),W=l(()=>!H.value),G=l(()=>{let e=L.value.trim().toLowerCase();return e?P.options.filter(t=>t.label.toLowerCase().includes(e)):P.options});function K(){let e=R.value;if(!e)return;let t=e.getBoundingClientRect(),n=Math.min(320,window.innerHeight*.5),r=window.innerHeight-t.bottom-6,i=t.top-6,a=r<Math.min(160,n)&&i>r,o=Math.max(120,Math.min(n,a?i:r));V.value={position:`fixed`,left:`${Math.max(8,Math.min(t.left,window.innerWidth-Math.max(t.width,220)-8))}px`,width:`${Math.max(t.width,220)}px`,zIndex:`1280`,maxHeight:`${o}px`,...a?{top:`auto`,bottom:`${window.innerHeight-t.top+6}px`}:{top:`${t.bottom+6}px`,bottom:`auto`}}}function q(e){e?(window.addEventListener(`resize`,K),window.addEventListener(`scroll`,K,!0)):(window.removeEventListener(`resize`,K),window.removeEventListener(`scroll`,K,!0))}async function J(){P.disabled||(I.value=!I.value,I.value&&(await n(),K(),P.searchable&&(L.value=``,await n(),B.value?.focus())))}function Y(e){F(`update:modelValue`,e),I.value=!1,L.value=``}return c(I,e=>{q(e),e&&n(()=>K())}),e(()=>{q(!1)}),(e,n)=>(a(),d(`div`,{ref_key:`rootRef`,ref:R,class:t([`form-group app-select`,{"app-select--open":I.value,"app-select--block":g.block,"app-select--disabled":g.disabled}])},[g.label?(a(),d(`label`,C,s(g.label),1)):u(``,!0),p(`button`,{type:`button`,class:t([`app-select__trigger`,{"app-select__trigger--error":g.error,"is-open":I.value}]),"aria-label":g.ariaLabel,"aria-expanded":I.value,"aria-haspopup":`listbox`,disabled:g.disabled,onClick:J},[p(`span`,{class:t([`app-select__value`,{"app-select__value--placeholder":W.value}])},s(U.value),3),n[3]||=p(`span`,{class:`app-select__chevron`,"aria-hidden":`true`},[p(`svg`,{viewBox:`0 0 12 12`,width:`12`,height:`12`},[p(`path`,{d:`M2.5 4.5 6 8l3.5-3.5`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`})])],-1)],10,w),(a(),_(h,{to:`body`},[I.value?(a(),d(`ul`,{key:0,ref_key:`menuRef`,ref:z,class:`app-select__menu`,role:`listbox`,"aria-label":g.ariaLabel,style:o(V.value)},[g.searchable?(a(),d(`li`,E,[i(p(`input`,{ref_key:`searchInputRef`,ref:B,"onUpdate:modelValue":n[0]||=e=>L.value=e,type:`search`,class:`app-select__search-input`,placeholder:g.searchPlaceholder,onClick:n[1]||=x(()=>{},[`stop`]),onKeydown:n[2]||=y(x(e=>I.value=!1,[`stop`]),[`esc`])},null,40,D),[[b,L.value]])])):u(``,!0),G.value.length?u(``,!0):(a(),d(`li`,O,` موردی یافت نشد `)),(a(!0),d(f,null,r(G.value,e=>(a(),d(`li`,{key:e.value||`__empty__`,role:`presentation`},[p(`button`,{type:`button`,class:t([`app-select__option`,{"app-select__option--active":e.value===g.modelValue}]),role:`option`,"aria-selected":e.value===g.modelValue,onClick:t=>Y(e.value)},[p(`span`,A,s(e.label),1),e.value===g.modelValue?(a(),d(`svg`,j,[...n[4]||=[p(`path`,{d:`M5 12.5 9.5 17 19 7`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,-1)]])):u(``,!0)],10,k)]))),128))],12,T)):u(``,!0)])),g.error?(a(),d(`p`,M,s(g.error),1)):g.hint?(a(),d(`p`,N,s(g.hint),1)):u(``,!0)],2))}}),[[`__scopeId`,`data-v-29078e89`]]);export{P as t}; |