{"version":3,"file":"ng-doc-app-components-search-dialog.mjs","sources":["../../../../libs/app/components/search-dialog/search-dialog.component.ts","../../../../libs/app/components/search-dialog/search-dialog.component.html","../../../../libs/app/components/search-dialog/ng-doc-app-components-search-dialog.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  forwardRef,\n  inject,\n  ViewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterLink } from '@angular/router';\nimport { NgDocSearchResult } from '@ng-doc/app/interfaces';\nimport { NgDocSanitizeHtmlPipe } from '@ng-doc/app/pipes';\nimport {\n  NG_DOC_DIALOG_DATA,\n  NgDocAutofocusDirective,\n  NgDocDataListComponent,\n  NgDocDropdownComponent,\n  NgDocExecutePipe,\n  NgDocFocusCatcherDirective,\n  NgDocHighlighterPipe,\n  NgDocHighlightPosition,\n  NgDocIconComponent,\n  NgDocInputStringDirective,\n  NgDocInputWrapperComponent,\n  NgDocLetDirective,\n  NgDocSpinnerComponent,\n  NgDocTagComponent,\n  NgDocTextComponent,\n  popupAnimation,\n  StatedObservable,\n} from '@ng-doc/ui-kit';\nimport { NgDocListHost, NgDocOverlayRef } from '@ng-doc/ui-kit/classes';\n\nexport interface NgDocSearchDialogData {\n  term: string;\n  search: (query: string) => void;\n  searchResults: StatedObservable<NgDocSearchResult[]>;\n}\n\n@Component({\n  animations: [popupAnimation],\n  selector: 'ng-doc-search-dialog',\n  imports: [\n    CommonModule,\n    NgDocInputWrapperComponent,\n    NgDocInputStringDirective,\n    NgDocAutofocusDirective,\n    NgDocIconComponent,\n    NgDocDataListComponent,\n    RouterLink,\n    NgDocTagComponent,\n    NgDocTextComponent,\n    NgDocHighlighterPipe,\n    NgDocSanitizeHtmlPipe,\n    NgDocFocusCatcherDirective,\n    NgDocDropdownComponent,\n    NgDocLetDirective,\n    NgDocSpinnerComponent,\n    NgDocExecutePipe,\n    FormsModule,\n  ],\n  templateUrl: './search-dialog.component.html',\n  styleUrl: './search-dialog.component.scss',\n  providers: [\n    {\n      provide: NgDocListHost,\n      useExisting: forwardRef(() => NgDocSearchDialogComponent),\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[@popupAnimation]': 'true',\n  },\n})\nexport class NgDocSearchDialogComponent implements NgDocListHost {\n  @ViewChild('inputElement', { read: ElementRef })\n  inputElement!: ElementRef<HTMLElement>;\n\n  @ViewChild('resultContent', { read: ElementRef })\n  resultContent?: ElementRef<HTMLElement>;\n\n  protected searchTerm: string = '';\n  protected readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  protected readonly overlayRef = inject(NgDocOverlayRef);\n  protected readonly data = inject<NgDocSearchDialogData>(NG_DOC_DIALOG_DATA);\n\n  constructor() {\n    this.searchTerm = this.data.term;\n  }\n\n  search(query: string): void {\n    this.data.search(query);\n\n    if (this.resultContent) {\n      this.resultContent.nativeElement.scrollTop = 0;\n    }\n  }\n\n  getPositions<T extends NgDocSearchResult, K extends keyof T['positions']>(\n    key: K,\n    item: T,\n  ): NgDocHighlightPosition[] {\n    return item.positions[key] ?? [];\n  }\n\n  get listHostOrigin(): ElementRef<HTMLElement> {\n    return this.inputElement ?? this.elementRef;\n  }\n}\n","<div class=\"ng-doc-search-dialog-container\">\n  <ng-doc-input-wrapper>\n    <ng-doc-icon icon=\"search\" ngDocInputWrapperLeft></ng-doc-icon>\n    <input\n      ngDocInputString\n      ngDocAutofocus\n      [selectAll]=\"true\"\n      placeholder=\"Find or ask anything...\"\n      [(ngModel)]=\"searchTerm\"\n      (ngModelChange)=\"search($event)\"\n      #inputElement />\n  </ng-doc-input-wrapper>\n\n  <div\n    class=\"ng-doc-search-result-content\"\n    *ngIf=\"data.searchResults | async as state\"\n    #resultContent>\n    <ng-doc-data-list\n      [items]=\"state?.result ?? []\"\n      [itemContent]=\"itemContent\"\n      [emptyContent]=\"emptyContent\">\n      <ng-template let-item #itemContent>\n        <a\n          class=\"ng-doc-search-option\"\n          [routerLink]=\"item.index.route\"\n          [fragment]=\"item.index.fragment\"\n          (click)=\"overlayRef.close()\">\n          <div class=\"ng-doc-search-option-header\">\n            <ng-doc-tag size=\"small\" [attr.data-ng-doc-page-type]=\"item.index.pageType\">\n              {{ item.index.pageType }}\n            </ng-doc-tag>\n            <span class=\"ng-doc-search-option-breadcrumbs\" ng-doc-text>\n              <ng-container *ngFor=\"let breadcrum of item.index.breadcrumbs; let i = index\">\n                <span>{{ breadcrum }}</span>\n                <span\n                  class=\"ng-doc-search-option-breadcrumb-divider\"\n                  *ngIf=\"i !== item.index.breadcrumbs.length - 1\"\n                  ><b>•</b></span\n                >\n              </ng-container>\n            </span>\n          </div>\n          <h5\n            class=\"ng-doc-search-section-title\"\n            ng-doc-text\n            [innerHTML]=\"\n              (item.index.section\n                | ngDocHighlighterPipe: (getPositions | execute: 'section' : item)\n                | ngDocSanitizeHtml) || item.index.title\n            \"></h5>\n          <div\n            *ngIf=\"item.index.content\"\n            class=\"ng-doc-search-content\"\n            [innerHTML]=\"\n              item.index.content\n                | ngDocHighlighterPipe: (getPositions | execute: 'content' : item)\n                | ngDocSanitizeHtml\n            \"\n            ng-doc-text></div>\n        </a>\n      </ng-template>\n      <ng-template #emptyContent>\n        <ng-container *ngIf=\"!state?.pending\">\n          <div class=\"ng-doc-search-empty\">\n            <ng-container *ngIf=\"searchTerm.length\">Nothing found</ng-container>\n            <ng-container *ngIf=\"!searchTerm.length\">Please enter your search query </ng-container>\n          </div>\n        </ng-container>\n        <ng-container *ngIf=\"state?.pending\">\n          <div class=\"ng-doc-search-progress\">\n            <ng-doc-spinner size=\"small\"></ng-doc-spinner>\n            Searching...\n          </div>\n        </ng-container>\n      </ng-template>\n    </ng-doc-data-list>\n  </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MA2Ea,0BAA0B,CAAA;AAYrC,IAAA,WAAA,GAAA;QALU,IAAU,CAAA,UAAA,GAAW,EAAE;AACd,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACxD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;AACpC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAwB,kBAAkB,CAAC;QAGzE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;;AAGlC,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAEvB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,GAAG,CAAC;;;IAIlD,YAAY,CACV,GAAM,EACN,IAAO,EAAA;QAEP,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE;;AAGlC,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU;;8GAhClC,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,0BAA0B,EAX1B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B,CAAC;AAC1D,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAOkC,UAAU,EAGT,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EC/EhD,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,45FA8EA,86FDlCI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,0BAA0B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,yBAAyB,EACzB,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,gGAClB,sBAAsB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,iBAAiB,EACjB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAClB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,oBAAoB,wDACpB,qBAAqB,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIrB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACrB,gBAAgB,EAChB,IAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAnBD,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,cAAc,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAkCjB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAnCtC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAC,cAAc,CAAC,EAClB,QAAA,EAAA,sBAAsB,EACvB,OAAA,EAAA;wBACP,YAAY;wBACZ,0BAA0B;wBAC1B,yBAAyB;wBACzB,uBAAuB;wBACvB,kBAAkB;wBAClB,sBAAsB;wBACtB,UAAU;wBACV,iBAAiB;wBACjB,kBAAkB;wBAClB,oBAAoB;wBACpB,qBAAqB;wBACrB,0BAA0B;wBAC1B,sBAAsB;wBACtB,iBAAiB;wBACjB,qBAAqB;wBACrB,gBAAgB;wBAChB,WAAW;qBACZ,EAGU,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,gCAAgC,CAAC;AAC1D,yBAAA;qBACF,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACJ,wBAAA,mBAAmB,EAAE,MAAM;AAC5B,qBAAA,EAAA,QAAA,EAAA,45FAAA,EAAA,MAAA,EAAA,CAAA,u3FAAA,CAAA,EAAA;wDAID,YAAY,EAAA,CAAA;sBADX,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAI/C,aAAa,EAAA,CAAA;sBADZ,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;AE/ElD;;AAEG;;;;"}