UNPKG

bootstrap5-tags

Version:

Replace select[multiple] with nices badges for Bootstrap 5

8 lines (7 loc) 24.8 kB
var H={items:[],allowNew:!1,showAllSuggestions:!1,badgeStyle:"primary",allowClear:!1,clearEnd:!1,selected:[],regex:"",separator:[],max:0,clearLabel:"Clear",searchLabel:"Type a value",showDropIcon:!0,keepOpen:!1,allowSame:!1,baseClass:"",placeholder:"",addOnBlur:!1,showDisabled:!1,hideNativeValidation:!1,suggestionsThreshold:-1,maximumItems:0,autoselectFirst:!0,updateOnSelect:!1,highlightTyped:!1,highlightClass:"",fullWidth:!0,fixed:!1,fuzzy:!1,startsWith:!1,singleBadge:!1,activeClasses:["bg-primary","text-white"],labelField:"label",valueField:"value",searchFields:["label"],queryParam:"query",server:"",serverMethod:"GET",serverParams:{},serverDataKey:"data",fetchOptions:{},liveServer:!1,noCache:!0,allowHtml:!1,debounceTime:300,notFoundMessage:"",inputFilter:a=>a,sanitizer:a=>W(a),onRenderItem:(a,t,e)=>e.config("allowHtml")?t:e.config("sanitizer")(t),onSelectItem:(a,t)=>{},onClearItem:(a,t)=>{},onCreateItem:(a,t)=>{},onBlur:(a,t)=>{},onDataLoaded:(a,t)=>{},onFocus:(a,t)=>{},onCanAdd:(a,t,e)=>{},confirmClear:(a,t)=>Promise.resolve(),confirmAdd:(a,t)=>Promise.resolve(),onServerResponse:(a,t)=>a.json(),onServerError:(a,t,e)=>{a.name==="AbortError"||t.aborted||console.error(a)}},b="tags-",N="is-loading",z="is-active",g="is-invalid",R="is-max-reached",A="show",v="data-value",E="next",T="prev",F="form-control-focus",q="form-placeholder-shown",j="form-control-disabled",I=new WeakMap,P=0,L=window.bootstrap&&window.bootstrap.Tooltip;function _(a,t=300){let e;return(...i)=>{clearTimeout(e),e=setTimeout(()=>{a.apply(this,i)},t)}}function J(a,t=null){let e=p("span");document.body.appendChild(e),e.style.fontSize=t||"inherit",e.style.height="auto",e.style.width="auto",e.style.position="absolute",e.style.whiteSpace="no-wrap",e.innerHTML=W(a);let i=Math.ceil(e.clientWidth);return document.body.removeChild(e),i}function W(a){return a.replace(/[\x26\x0A\<>'"]/g,function(t){return"&#"+t.charCodeAt(0)+";"})}function U(a){return a.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function k(a){return a?U(a.toString()).toLowerCase():""}function $(a,t){if(a.indexOf(t)>=0)return!0;let e=0;for(let i=0;i<t.length;i++){let s=t[i];if(s!=" "&&(e=a.indexOf(s,e)+1,e<=0))return!1}return!0}function O(a){a.style.display="none",x(a,{"aria-hidden":"true"})}function B(a){a.style.display="list-item",x(a,{"aria-hidden":"false"})}function x(a,t){for(let[e,i]of Object.entries(t))a.setAttribute(e,i)}function S(a,t){a.hasAttribute(t)&&a.removeAttribute(t)}function V(a){return["true","false","1","0",!0,!1].includes(a)&&!!JSON.parse(a)}function p(a){return document.createElement(a)}function G(a,t){let e=t[0];for(let i=1;i<t.length;i++)a=a.split(t[i]).join(e);return a.split(e)}function X(a,t="window"){return a.split(".").reduce((e,i)=>e[i],t)}var y=class{constructor(t,e={}){if(!(t instanceof HTMLElement)){console.error("Invalid element",t);return}I.set(t,this),P++,this.i=t,this.M(e),this.p=!1,this.c=!1,this.H=_(()=>{this.w(!0)},this.e.debounceTime),this.a=!0,this.N(),this.l=p("div"),this.o=p("div"),this.n=p("ul"),this.s=p("input"),this.l.appendChild(this.o),this.i.parentElement.insertBefore(this.l,this.i),this.z(),this.R(),this.q(),this.j(),this.P(),this.resetState(),this.handleEvent=i=>{this.A(i)},this.e.fixed&&(document.addEventListener("scroll",this,!0),window.addEventListener("resize",this)),["focus","blur","input","keydown","paste"].forEach(i=>{this.s.addEventListener(i,this)}),["mousemove","mouseleave"].forEach(i=>{this.n.addEventListener(i,this)}),this.loadData(!0)}static init(t="select[multiple]",e={},i=!1){let s=document.querySelectorAll(t);for(let l=0;l<s.length;l++){let n=y.getInstance(s[l]);n&&!i||(n&&n.dispose(),new y(s[l],e))}}static getInstance(t){if(I.has(t))return I.get(t)}dispose(){["focus","blur","input","keydown","paste"].forEach(t=>{this.s.removeEventListener(t,this)}),["mousemove","mouseleave"].forEach(t=>{this.n.removeEventListener(t,this)}),this.e.fixed&&(document.removeEventListener("scroll",this,!0),window.removeEventListener("resize",this)),this.i.style.display="block",this.l.parentElement.removeChild(this.l),this.parentForm&&this.parentForm.removeEventListener("reset",this),I.delete(this.i)}handleEvent(t){this.A(t)}A(t){["scroll","resize"].includes(t.type)?(this.L&&window.cancelAnimationFrame(this.L),this.L=window.requestAnimationFrame(()=>{this[`on${t.type}`](t)})):this[`on${t.type}`](t)}M(t={}){this.e=Object.assign({},H,{showDropIcon:!!this.d()});let e=this.i.dataset.config?JSON.parse(this.i.dataset.config):{},i={...t,...e,...this.i.dataset};for(let[s,l]of Object.entries(H)){if(s=="config"||i[s]===void 0)continue;let n=i[s];switch(typeof l){case"number":this.e[s]=parseInt(n);break;case"boolean":this.e[s]=V(n);break;case"string":this.e[s]=n.toString();break;case"object":this.e[s]=n,typeof n=="string"&&(["{","["].includes(n[0])?this.e[s]=JSON.parse(n):this.e[s]=n.split(n.includes("|")?"|":","));break;case"function":this.e[s]=typeof n=="string"?n.split(".").reduce((r,o)=>r[o],window):n,this.e[s]||console.error("Invalid function",n);break;default:this.e[s]=n;break}}this.e.placeholder||(this.e.placeholder=this.B()),this.e.suggestionsThreshold==-1&&(this.e.suggestionsThreshold=this.e.liveServer?1:0)}config(t=null){return t?this.e[t]:this.e}setConfig(t,e){this.e[t]=e}N(){for(this.overflowParent=null,this.parentForm=this.i.parentElement;this.parentForm&&(this.parentForm.style.overflow==="hidden"&&(this.overflowParent=this.parentForm),this.parentForm=this.parentForm.parentElement,!(this.parentForm&&this.parentForm.nodeName=="FORM")););this.parentForm&&this.parentForm.addEventListener("reset",this)}B(){if(this.i.hasAttribute("placeholder"))return this.i.getAttribute("placeholder");if(this.i.dataset.placeholder)return this.i.dataset.placeholder;let t=this.i.querySelector("option");return!t||!this.e.autoselectFirst?"":(S(t,"selected"),t.selected=!1,t.value?"":t.textContent)}q(){let t=this.i;this.e.hideNativeValidation?(t.style.position="absolute",t.style.left="-9999px"):t.style.cssText="height:1px;width:1px;opacity:0;padding:0;margin:0;border:0;float:left;flex-basis:100%;min-height:unset;",t.tabIndex=-1,t.addEventListener("focus",e=>{this.onclick(e)}),t.addEventListener("invalid",e=>{this.l.classList.add(g)})}P(){let t=this.n;t.classList.add("dropdown-menu",b+"menu"),t.id=b+"menu-"+P,t.setAttribute("role","menu");let e=t.style;e.padding="0",e.maxHeight="280px",this.e.fullWidth||(e.maxWidth="360px"),this.e.fixed&&(e.position="fixed"),e.overflowY="auto",e.overscrollBehavior="contain",e.textAlign="unset",t.addEventListener("mouseenter",i=>{this.c=!1}),this.l.appendChild(t),this.s.setAttribute("aria-controls",t.id)}z(){let t=this.l;t.classList.add("form-control","dropdown"),["form-select-lg","form-select-sm","is-invalid","is-valid"].forEach(e=>{this.i.classList.contains(e)&&t.classList.add(e)}),this.e.suggestionsThreshold==0&&this.e.showDropIcon&&t.classList.add("form-select"),this.overflowParent&&(t.style.position="inherit"),t.style.height="auto",t.addEventListener("click",this)}R(){this.o.addEventListener("click",e=>{this.isDisabled()||this.s.style.visibility!="hidden"&&this.s.focus()});let t=this.o.style;t.display="flex",t.alignItems="center",t.flexWrap="wrap"}j(){let t=this.s;t.type="text",t.autocomplete="off",t.spellcheck=!1,x(t,{"aria-autocomplete":"list","aria-haspopup":"menu","aria-expanded":"false","aria-label":this.e.searchLabel,role:"combobox"}),t.style.cssText="background-color:transparent;color:currentColor;border:0;padding:0;outline:0;max-width:100%",this.resetSearchInput(!0),this.o.appendChild(t),this.V=document.dir==="rtl"||t.dir==="rtl"}onfocus(t){this.l.classList.contains(F)||(this.l.classList.add(F),this.showOrSearch(),this.e.onFocus(t,this))}onblur(t){let e=t.relatedTarget;if(this.p&&e&&(e.classList.contains("modal")||e.classList.contains(b+"menu"))){this.s.focus();return}this.afteronblur(t)}afteronblur(t){this.h&&this.h.abort();let e=!0;if(this.e.addOnBlur&&this.s.value&&(e=this.C()),this.l.classList.remove(F),this.hideSuggestions(e),this.a){let i=this.getSelection(),s={selection:i?i.dataset.value:null,input:this.s.value};this.e.onBlur(t,this),this.i.dispatchEvent(new CustomEvent("tags.blur",{bubbles:!0,detail:s}))}}onpaste(t){let i=(t.clipboardData||window.clipboardData).getData("text/plain").replace(/\r\n|\n/g," ");if(i.length>2&&this.e.separator.length){let s=G(i,this.e.separator).filter(l=>l);s.length>1&&(t.preventDefault(),s.forEach(l=>{this.E(l)}))}}E(t){let e=t,i={};if(this.e.allowNew)i.new=1;else{let s=this.getSelection();if(!s)return;t=s.getAttribute(v),e=s.dataset.label}this.e.confirmAdd(t,this).then(()=>{this.m(e,t,i)}).catch(()=>{})}oninput(t){let e=this.e.inputFilter(this.s.value);if(e!=this.s.value&&(this.s.value=e),e){let i=e.slice(-1);if(this.e.separator.length&&this.e.separator.includes(i)){this.s.value=this.s.value.slice(0,-1);let s=this.s.value;this.E(s);return}}setTimeout(()=>{this.r()}),this.showOrSearch()}onkeydown(t){let e=t.keyCode||t.key,i=t.target;switch(t.keyCode==229&&(e=i.value.charAt(i.selectionStart-1).charCodeAt(0)),e){case 13:case"Enter":t.preventDefault(),this.C();break;case 38:case"ArrowUp":t.preventDefault(),this.c=!0,this.g(T);break;case 40:case"ArrowDown":t.preventDefault(),this.c=!0,this.isDropdownVisible()?this.g(E):this.showOrSearch(!1);break;case 8:case"Backspace":let s=this.getLastItem();this.s.value.length==0&&s&&this.e.confirmClear(s,this).then(()=>{this.removeLastItem(),this.r(),this.showOrSearch()}).catch(()=>{});break;case 27:case"Escape":this.s.focus(),this.hideSuggestions();break}}onmousemove(t){this.p=!0,this.c=!1}onmouseleave(t){this.p=!1,this.removeSelection()}onscroll(t){this.b()}onresize(t){this.b()}onclick(t=null){!this.isSingle()&&this.isMaxReached()||this.s.focus()}onreset(t){this.reset()}loadData(t=!1){Object.keys(this.e.items).length>0?this.setData(this.e.items,!0):this.resetSuggestions(!0),this.e.server&&(this.e.liveServer||this.w(!t))}W(){let t=this.i.selectedOptions||[];for(let e=0;e<t.length;e++)t[e].value&&!t[e].hasAttribute("selected")&&t[e].setAttribute("selected","selected")}resetState(){this.isDisabled()?(this.l.setAttribute("readonly",""),this.s.setAttribute("disabled",""),this.l.classList.add(j)):(S(this.l,"readonly"),S(this.s,"disabled"),this.l.classList.remove(j))}resetSuggestions(t=!1){this.W();let e=s=>({value:s.getAttribute("value"),label:s.textContent,disabled:s.disabled,selected:s.selected,title:s.title,data:Object.assign({disabled:s.disabled},s.dataset)}),i=Array.from(this.i.children).filter(s=>s.hasAttribute("label")||!s.disabled||this.e.showDisabled).map(s=>s.hasAttribute("label")?{group:s.getAttribute("label"),items:Array.from(s.children).map(l=>e(l))}:e(s));this.setData(i,t)}C(){let t=this.getSelection();if(t)return t.click(),!0;if(this.e.allowNew&&this.s.value){let e=this.s.value;return this.e.confirmAdd(e,this).then(()=>{this.m(e,e,{new:1})}).catch(()=>{}),!0}return!1}w(t=!1){this.h&&this.h.abort(),this.h=new AbortController;let e=this.i.dataset.serverParams||{};typeof e=="string"&&(e=JSON.parse(e));let i=Object.assign({},this.e.serverParams,e);if(i[this.e.queryParam]=this.s.value,this.e.noCache&&(i.t=Date.now()),i.related){let r=document.getElementById(i.related);if(r){i.related=r.value;let o=r.getAttribute("name");o&&(i[o]=r.value)}}let s=new URLSearchParams(i),l=this.e.server,n=Object.assign(this.e.fetchOptions,{method:this.e.serverMethod||"GET",signal:this.h.signal});n.method==="POST"?n.body=s:l+="?"+s.toString(),this.l.classList.add(N),fetch(l,n).then(r=>this.e.onServerResponse(r,this)).then(r=>{let o=X(this.e.serverDataKey,r)||r;this.setData(o,!t),this.h=null,t&&this.v()}).catch(r=>{this.e.onServerError(r,this.h.signal,this)}).finally(r=>{this.l.classList.remove(N)})}m(t,e=null,i={}){if(!i.value&&e&&(i.value=e),!this.canAdd(t,i))return null;let s=this.addItem(t,e,i);return this.S(),this.e.keepOpen?this.v():this.resetSearchInput(),s}f(t){if(t.style.display==="none")return!1;let e=t.firstElementChild;return e.tagName==="A"&&!e.classList.contains("disabled")}g(t=E,e=null){let i=this.getSelection();if(i){let s=t===E?"nextSibling":"previousSibling";e=i.parentNode;do e=e[s];while(e&&!this.f(e));e?i.classList.remove(...this.u()):i&&(e=i.parentElement)}else{if(t===T)return e;if(!e)for(e=this.n.firstChild;e&&!this.f(e);)e=e.nextSibling}if(e){let s=e.offsetHeight,l=e.offsetTop,n=e.parentNode,r=n.offsetHeight,o=n.scrollHeight,h=n.offsetTop;if(s===0&&setTimeout(()=>{n.scrollTop=0}),t===T){let f=l-h>10?l-h:0;n.scrollTop=f}else l+s-(r+n.scrollTop)>0&&s>0&&(n.scrollTop=l+s-r+1,n.scrollTop+r>=o-10&&(n.scrollTop=l-h));let c=e.querySelector("a");c.classList.add(...this.u()),this.s.setAttribute("aria-activedescendant",c.id),this.e.updateOnSelect&&(this.s.value=c.dataset.label,this.r())}else this.s.setAttribute("aria-activedescendant","");return e}r(){this.l.classList.remove(q),this.s.value?this.s.size=this.s.value.length:this.getSelectedValues().length?(this.s.placeholder="",this.s.size=1):(this.s.size=this.e.placeholder.length>0?this.e.placeholder.length:1,this.s.placeholder=this.e.placeholder,this.l.classList.add(q));let t=this.s.value||this.s.placeholder;if(t.length>0){let e=window.getComputedStyle(this.l).fontSize,i=J(t,e)+16;this.s.style.width=`${i}px`}}_(t){for(;this.n.lastChild;)this.n.removeChild(this.n.lastChild);let e=0,i=1;for(let s=0;s<t.length;s++){let l=t[s];if(l){if(l.group&&l.items){let n=p("li");n.setAttribute("role","presentation"),n.dataset.id=""+i;let r=p("span");if(n.append(r),r.classList.add("dropdown-header","text-truncate"),r.innerHTML=this.e.sanitizer(l.group),this.n.appendChild(n),l.items)for(let o=0;o<l.items.length;o++){let h=l.items[o];h.group_id=i,this.I(l.items[o],e),e++}i++}this.I(l,e),e++}}if(this.e.notFoundMessage){let s=p("li");s.setAttribute("role","presentation"),s.classList.add(b+"not-found"),s.innerHTML='<span class="dropdown-item"></span>',this.n.appendChild(s)}}I(t,e){if(!t[this.e.valueField])return;let i=t[this.e.valueField],s=t[this.e.labelField],l=this.e.onRenderItem(t,s,this),n=p("li");n.setAttribute("role","menuitem"),t.group_id&&n.setAttribute("data-group-id",""+t.group_id),t.title&&(n.setAttribute("title",t.title),n.setAttribute("data-bs-placement","left"));let r=p("a");n.append(r),r.id=this.n.id+"-"+e,r.classList.add("dropdown-item","text-truncate"),t.disabled&&r.classList.add("disabled"),r.setAttribute(v,i),r.dataset.label=s;let o={};this.e.searchFields.forEach(c=>{o[c]=t[c]}),r.dataset.searchData=JSON.stringify(o),r.setAttribute("href","#"),r.innerHTML=l,this.n.appendChild(n);let h=this.O()===5;t.title&&L&&h&&L.getOrCreateInstance(n),r.addEventListener("mouseenter",c=>{this.c||(this.removeSelection(),n.querySelector("a").classList.add(...this.u()))}),r.addEventListener("mousedown",c=>{c.preventDefault()}),r.addEventListener("click",c=>{c.preventDefault(),c.stopPropagation(),this.e.confirmAdd(i,this).then(()=>{this.m(s,i,t.data),this.e.onSelectItem(t,this)}).catch(()=>{})})}initialOptions(){return this.i.querySelectorAll("option[data-init]")}D(){this.i.querySelectorAll("option").forEach(t=>{S(t,"selected")})}reset(){this.removeAll(),this.a=!1;let t=this.initialOptions();this.D();for(let e=0;e<t.length;e++){let i=t[e],s=Object.assign({},{disabled:i.hasAttribute("disabled")},i.dataset);this.addItem(i.textContent,i.value,s)}this.S(),this.a=!0}resetSearchInput(t=!1){if(this.s.value="",this.r(),this.T(),this.isSingle()&&!t){document.activeElement.blur(),this.hideSuggestions();return}t||(this.F()||this.hideSuggestions(),this.s===document.activeElement&&this.s.dispatchEvent(new Event("input")))}T(){this.isMaxReached()?(this.l.classList.add(R),this.s.style.visibility="hidden"):this.s.style.visibility=="hidden"&&(this.s.style.visibility="visible")}getSelectedValues(){let t=this.i.querySelectorAll("option[selected]");return Array.from(t).map(e=>e.value)}getAvailableValues(){let t=this.i.querySelectorAll("option");return Array.from(t).map(e=>e.value)}showOrSearch(t=!0){if(t&&!this.F()){this.hideSuggestions(!1);return}this.e.liveServer?this.H():this.v()}hideSuggestions(t=!0){this.n.classList.remove(A),x(this.s,{"aria-expanded":"false"}),this.removeSelection(),t&&this.l.classList.remove(g)}toggleSuggestions(t=!0,e=!0){this.n.classList.contains(A)?this.hideSuggestions(e):this.showOrSearch(t)}F(){return this.isDisabled()||this.isMaxReached()?!1:this.s.value.length>=this.e.suggestionsThreshold}v(){if(this.s.style.visibility=="hidden")return;let t=k(this.s.value),e={},i=this.n.querySelectorAll("li"),s=0,l=null,n=!1,r={};for(let o=0;o<i.length;o++){let h=i[o],c=h.firstElementChild;if(c instanceof HTMLSpanElement){h.dataset.id&&(r[h.dataset.id]=!1),O(h);continue}if(c.classList.remove(...this.u()),!this.e.allowSame){let u=c.getAttribute(v);if(e[u]=e[u]||0,this.d(c.getAttribute(v),"[selected]",e[u]++)){O(h);continue}}let f=this.e.showAllSuggestions||t.length===0,d=t.length==0&&this.e.suggestionsThreshold===0;if(!f&&t.length>0){let u=JSON.parse(c.dataset.searchData);this.e.searchFields.forEach(m=>{let C=k(u[m]),D=!1;if(this.e.fuzzy)D=$(C,t);else{let M=C.indexOf(t);D=this.e.startsWith?M===0:M>=0}D&&(d=!0)})}let w=d||t.length===0;if(f||d?(s++,B(h),h.dataset.groupId&&(r[h.dataset.groupId]=!0),!l&&this.f(h)&&w&&(l=h),this.e.maximumItems>0&&s>this.e.maximumItems&&O(h)):O(h),this.e.highlightTyped){let u=c.textContent,m=k(u).indexOf(t),C=u.substring(0,m)+`<mark class="${this.e.highlightClass}">${u.substring(m,m+t.length)}</mark>`+u.substring(m+t.length,u.length);c.innerHTML=C}this.f(h)&&(n=!0)}if(!this.e.allowNew&&!(t.length===0&&!n)&&this.l.classList.add(g),this.e.allowNew&&this.e.regex&&this.isInvalid()&&this.l.classList.remove(g),Array.from(i).filter(o=>o.dataset.id).forEach(o=>{r[o.dataset.id]===!0&&B(o)}),n&&(this.l.classList.remove(g),l&&this.e.autoselectFirst&&(this.removeSelection(),this.g(E,l))),s===0)if(this.e.notFoundMessage){let o=this.n.querySelector("."+b+"not-found");o.style.display="block";let h=this.e.notFoundMessage.replace("{{tag}}",this.s.value);o.innerHTML=`<span class="dropdown-item">${h}</span>`,this.k()}else this.hideSuggestions(!1);else this.k()}k(){let t=this.n.classList.contains(A);t||(this.n.classList.add(A),x(this.s,{"aria-expanded":"true"})),this.b(t)}b(t=!1){let e=this.V,i=this.e.fixed,s=this.e.fullWidth,l=this.s.getBoundingClientRect(),n=this.l.getBoundingClientRect(),r=0,o=0;if(i?s?(r=n.x,o=n.y+n.height+2):(r=l.x,o=l.y+l.height):s?(r=0,o=n.height+2):(r=this.s.offsetLeft,o=this.s.offsetHeight+this.s.offsetTop),e&&!s&&(r-=this.n.offsetWidth-l.width),!s){let f=Math.min(window.innerWidth,document.body.offsetWidth),d=e?l.x+l.width-this.n.offsetWidth-1:f-1-(l.x+this.n.offsetWidth);d<0&&(r=e?r-d:r+d)}s&&(this.n.style.width=this.l.offsetWidth+"px"),t||(this.n.style.transform="unset"),Object.assign(this.n.style,{left:r+"px",top:o+"px"});let h=this.n.getBoundingClientRect(),c=window.innerHeight;if(h.y+h.height>c||this.n.style.transform.includes("translateY")){let f=s?n.height+4:l.height;this.n.style.transform="translateY(calc(-100.1% - "+f+"px))"}}O(){let t=5,e=window.jQuery;return e&&e.fn.tooltip&&e.fn.tooltip.Constructor&&(t=parseInt(e.fn.tooltip.Constructor.VERSION.charAt(0))),t}J(t){return!!Array.from(this.i.querySelectorAll("option")).find(s=>s.textContent==t&&s.getAttribute("selected"))}U(t,e){let i=Array.from(this.i.querySelectorAll("option")),s=e.value?i.filter(l=>l.value==e.value):i.filter(l=>l.textContent==t);return!(s.length>0&&!s.find(n=>!n.getAttribute("selected")))}hasItem(t){for(let e of this.e.items){let i=e.items||[e];for(let s of i)if(s[this.e.labelField]==t)return!0}return!1}getItem(t){for(let e of this.e.items){let i=e.items||[e];for(let s of i)if(s[this.e.valueField]==t)return s}return null}$(t){return new RegExp(this.e.regex.trim()).test(t)}getSelection(){return this.n.querySelector("a."+z)}removeSelection(){let t=this.getSelection();t&&t.classList.remove(...this.u())}u(){return[...this.e.activeClasses,z]}getActiveSelection(){return this.getSelection()}removeActiveSelection(){return this.removeSelection()}removeAll(){this.getSelectedValues().forEach(e=>{this.removeItem(e,!0)}),this.r()}removeLastItem(t=!1){let e=this.getLastItem();e&&this.removeItem(e,t)}getLastItem(){let t=this.o.querySelectorAll("span."+b+"badge");return t.length?t[t.length-1].getAttribute(v):void 0}enable(){this.i.setAttribute("disabled",""),this.resetState()}disable(){S(this.i,"disabled"),this.resetState()}isDisabled(){return this.i.hasAttribute("disabled")||this.i.disabled||this.i.hasAttribute("readonly")}isDropdownVisible(){return this.n.classList.contains(A)}isInvalid(){return this.l.classList.contains(g)}isSingle(){return!this.i.hasAttribute("multiple")}isMaxReached(){return this.e.max&&this.getSelectedValues().length>=this.e.max}canAdd(t,e={}){if(!t||e.new&&!this.e.allowNew||!e.new&&!this.hasItem(t)||this.isDisabled())return!1;if(!this.isSingle()&&!this.e.allowSame){if(e.new){if(this.J(t))return!1}else if(!this.U(t,e))return!1}return this.isMaxReached()?!1:this.e.regex&&e.new&&!this.$(t)?(this.l.classList.add(g),!1):this.e.onCanAdd&&this.e.onCanAdd(t,e,this)===!1?(this.l.classList.add(g),!1):!0}getData(){return this.e.items}setData(t,e=!1){this.a=!1,Array.isArray(t)||(t=Object.entries(t).map(([i,s])=>({value:i,label:s}))),this.e.items!=t&&(this.e.items=t),e&&(this.D(),t.reduce((s,l)=>s.concat(l.group?l.items:[l]),[]).forEach(s=>{let l=s[this.e.valueField],n=s[this.e.labelField];if(l&&(s.selected||this.e.selected.includes(l))){let r=this.addItem(n,l,s.data);r&&r.setAttribute("data-init","true")}})),this._(t),this.S(),this.a=!0,this.e.onDataLoaded(t,this),this.i.dispatchEvent(new CustomEvent("tags.loaded",{bubbles:!0,detail:t}))}d(t=null,e="",i=0){let l="option"+(t===null?"":'[value="'+CSS.escape(t)+'"]')+e;return this.i.querySelectorAll(l)[i]||null}setItem(t,e={}){let i=null,s=this.d(t,":not([selected])");s&&(i=this.addItem(s.textContent,s.value,e));let l=this.getItem(t);if(l){let n=l[this.e.valueField],r=l[this.e.labelField];i=this.addItem(r,n,e)}return this.r(),this.T(),i}addItem(t,e=null,i={}){e||(e=t),this.isSingle()&&this.getSelectedValues().length&&this.removeLastItem(!0);let s=this.d(e,":not([selected])");if(!s){s=p("option"),s.value=e,s.innerText=t;for(let[l,n]of Object.entries(i))s.dataset[l]=n;this.i.appendChild(s),this.e.onCreateItem(s,this)}return s&&(i=Object.assign({title:s.getAttribute("title")},i,s.dataset)),s.setAttribute("selected","selected"),s.selected=!0,this.G(t,e,i),this.a&&this.i.dispatchEvent(new Event("change",{bubbles:!0})),s}S(){let t=this.i.innerHTML;this.i.innerHTML="",this.i.innerHTML=t,this.r()}G(t,e=null,i={}){let s=this.O()===5,l=i.disabled&&V(i.disabled),n=this.e.allowClear&&!l,r=this.e.allowHtml?t:this.e.sanitizer(t),o=p("span"),h=[b+"badge"],c=this.isSingle()&&!this.e.singleBadge;if(!c){h.push("badge");let d=this.e.badgeStyle;i.badgeStyle&&(d=i.badgeStyle),i.badgeClass&&h.push(...i.badgeClass.split(" ")),this.e.baseClass?h.push(...this.e.baseClass.split(" ")):s?h=[...h,"bg-"+d,"text-truncate"]:h=[...h,"badge-"+d],o.style.maxWidth="100%"}l&&h.push("disabled","opacity-50");let f=c?0:2;if(o.style.margin=f+"px 6px "+f+"px 0px",o.style.marginBlock=f+"px",o.style.marginInline="0px 6px",o.style.display="flex",o.style.alignItems="center",o.classList.add(...h),o.setAttribute(v,e),i.title&&o.setAttribute("title",i.title),n){let d=h.includes("text-dark")||c?"btn-close":"btn-close btn-close-white",w="margin-inline: 0px 6px;",u="left";this.e.clearEnd&&(u="right"),u=="right"&&(w="margin-inline: 6px 0px;");let m=s?'<button type="button" style="font-size:0.65em;'+w+'" class="'+d+'" aria-label="'+this.e.clearLabel+'"></button>':'<button type="button" style="font-size:1em;'+w+'text-shadow:none;color:currentColor;transform:scale(1.2);float:none" class="close" aria-label="'+this.e.clearLabel+'"><span aria-hidden="true">&times;</span></button>';r=u=="left"?m+r:r+m}o.innerHTML=r,this.o.insertBefore(o,this.s),i.title&&L&&s&&L.getOrCreateInstance(o),n&&o.querySelector("button").addEventListener("click",d=>{d.preventDefault(),d.stopPropagation(),this.isDisabled()||this.e.confirmClear(e,this).then(()=>{this.removeItem(e),document.activeElement.blur(),this.r()}).catch(()=>{})})}getHolder(){return this.l}clear(){this.hideSuggestions(),this.reset()}updateData(t){this.setData(t,!1),this.reset()}removeItem(t,e=!1){let i=CSS.escape(t),s=this.o.querySelectorAll("span["+v+'="'+i+'"]');if(!s.length)return;let l=s.length-1,n=s[l];n&&(n.dataset.bsOriginalTitle&&L.getOrCreateInstance(n).dispose(),n.remove());let r=this.d(t,"[selected]",l);r&&(S(r,"selected"),r.selected=!1,this.a&&!e&&this.i.dispatchEvent(new Event("change",{bubbles:!0}))),this.s.style.visibility=="hidden"&&!this.isMaxReached()&&(this.s.style.visibility="visible",this.l.classList.remove(R)),e||this.e.onClearItem(t,this)}},Y=y;export{Y as default}; /** * Bootstrap 5 (and 4!) tags * https://github.com/lekoala/bootstrap5-tags * @license MIT */ //# sourceMappingURL=tags.min.js.map