PageSourceSearch

https://thefamilydentalgroup.com/build-next/assets/combobox-BIZlKaGA.js

js thefamilydentalgroup.com collected 2026-09-29 21:38:22 UTC 6,291 bytes, 1 lines download raw bytes

1function l(n){return typeof n=="string"?{label:n}:n}class r{root;toggle;search;listbox;uid;options;appendToBody;showSelected;cb;open=!1;searchText="";pointer=-1;filtered=[];selected=null;originalPlaceholder="";mousedownInside=!1;detachFns=[];constructor(e){this.root=e.root,this.uid=e.uid,this.options=e.options.map(l),this.appendToBody=e.appendToBody??!1,this.showSelected=e.showSelected??!1,this.cb=e.callbacks??{},this.filtered=this.options;const t=this.root.querySelector(".vs__dropdown-toggle"),i=this.root.querySelector(".vs__search"),s=this.root.querySelector('ul[role="listbox"]');if(!t||!i||!s)throw new Error("combobox: skeleton elements missing");this.toggle=t,this.search=i,this.listbox=s,this.originalPlaceholder=this.search.placeholder,this.listen(this.toggle,"mousedown",o=>this.onToggleMousedown(o)),this.listen(this.toggle,"mouseup",()=>{this.mousedownInside=!1}),this.listen(this.search,"focus",()=>this.onSearchFocus()),this.listen(this.search,"blur",()=>this.onSearchBlur()),this.listen(this.search,"input",()=>this.setSearch(this.search.value)),this.listen(this.search,"keydown",o=>this.onKeydown(o)),this.listen(this.listbox,"mouseover",o=>{const h=o.target.closest("li.vs__dropdown-option");h&&this.listbox.contains(h)&&this.setPointer([...this.listbox.children].indexOf(h))}),this.listen(this.listbox,"mousedown",o=>{o.preventDefault();const h=o.target.closest("li.vs__dropdown-option");h&&this.listbox.contains(h)&&this.select(this.filtered[[...this.listbox.children].indexOf(h)])})}listen(e,t,i){e.addEventListener(t,i),this.detachFns.push(()=>e.removeEventListener(t,i))}destroy(){this.detachFns.forEach(e=>e()),this.detachFns=[],this.open&&this.closeMenu()}get isOpen(){return this.open}get filteredCount(){return this.filtered.length}get selectedLabel(){return this.selected}focusSearch(){this.search.focus()}setOptions(e){this.options=e.map(l),this.refilter()}onToggleMousedown(e){this.mousedownInside=!0;const t=e.target===this.search;t||e.preventDefault(),this.open&&!t?this.search.blur():this.open||(this.openMenu(),this.search.focus())}onSearchFocus(){this.openMenu(),this.cb.onSearchFocus?.()}onSearchBlur(){if(this.mousedownInside&&this.searchText.length===0){this.mousedownInside=!1;return}const e=this.searchText.length>0;this.closeMenu(),this.cb.onSearchBlur?.(),e&&this.setSearch("")}onKeydown(e){switch(e.key){case"Enter":e.preventDefault(),this.typeAheadSelect();break;
1case"Tab":this.typeAheadSelect();break;case"Escape":this.searchText.length?(this.setSearch(""),this.search.value=""):this.search.blur();break;case"ArrowUp":e.preventDefault(),this.pointer>0&&this.setPointer(this.pointer-1);break;case"ArrowDown":e.preventDefault(),this.pointer+1<this.filtered.length&&this.setPointer(this.pointer+1);break}}setSearch(e){e!==this.searchText&&(this.searchText=e,this.syncRootClass(),this.refilter(),this.cb.onSearch?.(this.searchText,this.filtered.length))}syncRootClass(){const e=new Set(["v-select","vs--open","vs--single","vs--searching","vs--searchable"]),t=this.root.className.split(/\s+/).filter(s=>s!==""&&!e.has(s)),i=["v-select"];this.open&&i.push("vs--open"),i.push("vs--single"),this.searchText.length>0&&i.push("vs--searching"),i.push("vs--searchable"),this.root.className=[...i,...t].join(" ")}refilter(){const e=this.searchText.toLocaleLowerCase(),t=e.length===0?this.options:this.options.filter(s=>(s.searchText??s.label).toLocaleLowerCase().indexOf(e)>-1),i=t.length!==this.filtered.length||t.some((s,o)=>s!==this.filtered[o]);this.filtered=t,i&&(this.pointer=this.filtered.length>0?0:-1),this.open&&this.renderMenu(),this.syncActivedescendant()}setPointer(e){this.pointer=e,this.renderHighlight(),this.syncActivedescendant()}typeAheadSelect(){const e=this.filtered[this.pointer];e!==void 0&&this.select(e)}select(e){this.selected=e.label,this.showSelected&&this.renderSelected(),this.cb.onSelect?.(e.label),this.search.blur(),this.searchText.length&&(this.setSearch(""),this.search.value="")}renderSelected(){const e=this.root.querySelector(".vs__selected-options");if(e)if(e.querySelector(".vs__selected")?.remove(),this.selected!==null){const t=document.createElement("span");t.className="vs__selected",t.textContent=this.selected,e.insertBefore(t,this.search),this.search.placeholder=""}else this.search.placeholder=this.originalPlaceholder}openMenu(){if(!this.open){if(this.open=!0,this.syncRootClass(),this.toggle.setAttribute("aria-expanded","true"),this.listbox.className="vs__dropdown-menu",this.listbox.setAttribute("tabindex","-1"),this.listbox.style.display="",this.listbox.style.visibility="",this.appendToBody){const{height:e,top:t,left:i,width:s}=this.toggle.getBoundingClientRect(),o=window.scrollX||window.pageXOffset,h=window.scrollY||window.pageYOffset;this.listbox.style.top=`${h+t+e}px`,this.listbox.style.left=`${o+i}px`,this.listbox.style.width=`${s}px`,document.body.appendChild(this.listbox)}this.renderMenu(),this.syncActivedescendant()}}closeMenu(){this.open&&(this.open=!1,this.pointer=-1,this.syncRootClass(),this.toggle.setAttribute("aria-expanded","false"),this.listbox.replaceChildren(),this.listbox.setAttribute("class",""),this.listbox.removeAttribute("tabindex"),this.appendToBody&&this.listbox.parentElement===document.body&&(this.listbox.style.top="",this.listbox.style.left="",this.listbox.style.width="",this.root.appendChild(this.listbox)),this.listbox.style.display="none",this.listbox.style.visibility="hidden",this.syncActivedescendant())}renderMenu(){const e=this.filtered.map((t,i)=>{const s=document.createElement("li");return s.id=`vs${this.uid}__option-${i}`,s.setAttribute("role","option"),s.className="vs__dropdown-option",t.render?t.render(s):s.textContent=t.label,s});if(e.length===0){const t=document.createElement("li");t.className="vs__no-options",t.textContent=" Sorry, no matching options. ",e.push(t)}this.listbox.replaceChildren(...e),this.renderHighlight()}renderHighlight(){[...this.listbox.children].forEach((e,t)=>{e.classList.toggle("vs__dropdown-option--highlight",t===this.pointer&&e.classList.contains("vs__dropdown-option"))})}syncActivedescendant(){this.open&&this.filtered[this.pointer]!==void 0?this.search.setAttribute("aria-activedescendant",`vs${this.uid}__option-${this.pointer}`):this.search.removeAttribute("aria-activedescendant")}}export{r as Combobox};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.