{"version":3,"file":"obelisco-angular-search.mjs","sources":["../../../projects/obelisco-angular/search/o-search.component.ts","../../../projects/obelisco-angular/search/o-search.component.html","../../../projects/obelisco-angular/search/o-search.module.ts","../../../projects/obelisco-angular/search/obelisco-angular-search.ts"],"sourcesContent":["import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  Renderer2,\n  ViewChild,\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { SearchbarItem } from 'obelisco-angular/core/models';\n\n@Component({\n  selector: 'o-search',\n  templateUrl: './o-search.component.html',\n  styleUrls: ['./o-search.component.scss'],\n})\nexport class OSearchComponent implements AfterViewInit {\n  @Input() public searchbarItems!: SearchbarItem[];\n  @Input() public maxLengthResults: number = 10;\n  @Input() public placeholder: string = 'Buscar...';\n  @Input() public type: string = '';\n  @Input() public onSelectItem?: (item: SearchbarItem) => void;\n\n  term = '';\n  isHover = false;\n  noResults = false;\n  filteredResults: SearchbarItem[] = [];\n  selectedIndex: number = 0;\n\n  @ViewChild('inputElement') inputElement!: ElementRef;\n\n  constructor(\n    private router: Router,\n    private elementRef: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  adjustResultsWidth() {\n    const inputWidth =\n      this.inputElement.nativeElement.getBoundingClientRect().width;\n    const searchResults =\n      this.elementRef.nativeElement.querySelector('.search-results');\n    const noResults =\n      this.elementRef.nativeElement.querySelector('.no-results');\n\n    if (searchResults && noResults) {\n      if (inputWidth > 0) {\n        this.renderer.setStyle(searchResults, 'width', inputWidth + 'px');\n        this.renderer.setStyle(noResults, 'width', inputWidth + 'px');\n      }\n    }\n  }\n\n  search() {\n    if (this.term === '') {\n      this.resetSearch();\n    } else {\n      this.filteredResults = this.searchbarItems\n        .filter((e) => e.title.toLowerCase().includes(this.term.toLowerCase()))\n        .slice(0, this.maxLengthResults);\n      this.noResults = this.filteredResults.length === 0;\n    }\n  }\n\n  ngAfterViewInit() {\n    this.adjustResultsWidth();\n  }\n\n  resetSearch() {\n    this.term = '';\n    this.isHover = false;\n    this.noResults = false;\n    this.filteredResults = [];\n    this.selectedIndex = 0;\n  }\n\n  goTo(e: SearchbarItem) {\n    if (this.onSelectItem) {\n      this.onSelectItem(e);\n    } else {\n      this.router.navigate([e.route]);\n    }\n    this.resetSearch();\n  }\n\n  onEnter() {\n    if (this.filteredResults.length > 0) {\n      this.goTo(this.filteredResults[this.selectedIndex]);\n    }\n  }\n\n  onUp() {\n    if (this.selectedIndex > 0) {\n      this.selectedIndex--;\n      this.isHover = false;\n    }\n  }\n\n  onDown() {\n    if (this.selectedIndex < this.filteredResults.length - 1) {\n      this.selectedIndex++;\n      this.isHover = false;\n    }\n  }\n\n  onMouseEnter() {\n    this.isHover = true;\n  }\n\n  onMouseLeave() {\n    this.isHover = false;\n  }\n}\n","<div class=\"navbar-search\" *ngIf=\"searchbarItems\">\n  <form class=\"form-search\">\n    <div class=\"form-group\">\n      <label class=\"sr-only\" for=\"search-input\">Buscador</label>\n      <input\n        #inputElement\n        type=\"search\"\n        class=\"form-control input-search\"\n        [ngClass]=\"type ? 'bg-' + type : ''\"\n        id=\"name-input\"\n        name=\"name\"\n        aria-label=\"Ingrese su búsqueda\"\n        [placeholder]=\"placeholder\"\n        [(ngModel)]=\"term\"\n        (input)=\"search()\"\n        (keydown.enter)=\"onEnter()\"\n        (keydown.ArrowUp)=\"onUp()\"\n        (keydown.ArrowDown)=\"onDown()\"\n      />\n      <button class=\"reset\" type=\"reset\" aria-label=\"Borrar\" (click)=\"resetSearch()\"></button>\n    </div>\n  </form>\n  <div class=\"search-results\" (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n    <ng-container *ngIf=\"filteredResults.length > 0\">\n      <div\n        class=\"search-item\"\n        *ngFor=\"let result of filteredResults; let i = index\"\n        [class.selected-search-item]=\"i === selectedIndex\"\n        [class.first-search-item]=\"i === selectedIndex && !isHover\"\n        (click)=\"goTo(result)\"\n      >\n        {{ result.title }}\n      </div>\n    </ng-container>\n    <div class=\"no-results\" *ngIf=\"noResults\">No se encontraron resultados😢.</div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OSearchComponent } from './o-search.component';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\n@NgModule({\n  declarations: [OSearchComponent],\n  imports: [CommonModule, RouterModule, FormsModule],\n  exports: [OSearchComponent]\n})\nexport class OSearchModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}