{"version":3,"file":"fgrid-ngx-mat-searchbox.mjs","sources":["../../../projects/ngx-mat-searchbox/src/lib/searchbox.images.ts","../../../projects/ngx-mat-searchbox/src/lib/searchbox.utils.ts","../../../projects/ngx-mat-searchbox/src/lib/searchbox.service.ts","../../../projects/ngx-mat-searchbox/src/lib/searchbox-terms.pipe.ts","../../../projects/ngx-mat-searchbox/src/lib/searchbox.component.ts","../../../projects/ngx-mat-searchbox/src/lib/searchbox.component.html","../../../projects/ngx-mat-searchbox/src/lib/searchbox.module.ts","../../../projects/ngx-mat-searchbox/src/public-api.ts","../../../projects/ngx-mat-searchbox/src/fgrid-ngx-mat-searchbox.ts"],"sourcesContent":["/**\n * Images literals representing svg's\n */\n\nexport const plusImage = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1024\" height=\"1024\" shape-rendering=\"geometricPrecision\" text-rendering=\"geometricPrecision\" image-rendering=\"optimizeQuality\" clip-rule=\"evenodd\" viewBox=\"0 0 10240 10240\"><path fill=\"#4D82B8\" d=\"M5760 1920H4480c-176 0-320 144-320 320v1920H2240c-176 0-320 144-320 320v1280c0 176 144 320 320 320h1920v1920c0 176 144 320 320 320h1280c176 0 320-144 320-320V6080h1920c176 0 320-144 320-320V4480c0-176-144-320-320-320H6080V2240c0-176-144-320-320-320z\"/><path d=\"M4301.445 8223.563l-114.326-89.93V6057.22H2110.705l-89.929-114.326c-82.588-104.994-89.929-171.806-89.929-818.555 0-646.749 7.34-713.56 89.93-818.555l89.928-114.326H4187.12V3157.665c0-1327.561-80.712-1222.479 938.962-1222.479 1005.6 0 926.8-104.455 926.8 1228.56v1027.712h2076.414l89.929 114.326c82.588 104.994 89.929 171.806 89.929 818.555 0 646.749-7.34 713.56-89.93 818.555l-89.928 114.326H6052.88v2076.414l-114.326 89.929c-104.994 82.588-171.806 89.929-818.555 89.929-646.749 0-713.56-7.34-818.555-89.93z\" fill=\"#999\"/></svg>`;\n\nexport const searchImage = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1024\" height=\"1024\" shape-rendering=\"geometricPrecision\" text-rendering=\"geometricPrecision\" image-rendering=\"optimizeQuality\" clip-rule=\"evenodd\" viewBox=\"0 0 10240 10240\"><path fill=\"#999\" d=\"M5986 6814l828-828c124-124 328-124 452 0l2428 2428c124 124 124 328 0 452l-828 828c-124 124-328 124-452 0L5986 7266c-124-124-124-328 0-452zM6082 5442l412 412-640 640-412-412c-534 401-1197 638-1916 638-1764 0-3194-1430-3194-3194S1762 332 3526 332s3194 1430 3194 3194c0 719-237 1382-638 1916zM3526 971C2115 971 971 2115 971 3526s1144 2555 2555 2555 2555-1144 2555-2555S4937 971 3526 971z\"/></svg>`;\n","import { AbstractControl } from '@angular/forms';\n\nexport const isNumber = (value: any): boolean => {\n  if (!isValid(value)) { return false; }\n  return typeof value === 'number' && isFinite(value);\n};\n\nexport const isNumeric = (value: string): boolean => {\n  return !Number.isNaN(Number(value));\n};\n\n/**\n * Type guard to ensure a value is not null or undefined\n * @param input value to be checked\n */\nexport const isValid = <T>(input: T | null | undefined): input is T => {\n  return input !== undefined && input !== null;\n};\n\n/**\n * Enables or disables all controls (form propagates to child controls)\n * @param enable true to enable, false to disable\n */\nexport const enableControls = (control: AbstractControl, enable: boolean): void => {\n  enable ? control.enable({ emitEvent: false }) : control.disable({ emitEvent: false });\n};\n\n/**\n * Remove excluded characters from input string\n */\nexport const strip = (input: string, removes: string[]): string => {\n  if (!removes || removes.length === 0) { return input; }\n  let output = input;\n  removes.forEach(remove => {\n    const tremove = remove?.trimRight() ?? '';\n    if (!tremove) { return; }\n    while (output.includes(tremove)) {\n      output = output.replace(tremove, '');\n    }\n  });\n  return output;\n};\n\n\n","import { Injectable } from '@angular/core';\nimport { SearchResult, SearchTerms } from './searchbox.model';\nimport { isNumber, isNumeric, strip } from './searchbox.utils';\n\n/**\n * Abstract class to be extended if custom search logic needs to be implemented, or the\n * SearchboxDefaultService can be extended\n */\nexport abstract class SearchboxService {\n   abstract search(\n    search: string,\n    allResults: SearchResult[],\n    lastFoundResult: SearchResult | undefined,\n    searchMultiple: boolean,\n    searchNextRow: boolean,\n    searchCaseSensitive: boolean,\n    searchStartsWith: boolean,\n    searchRange: boolean,\n    searchFrom: string,\n    searchTo: string,\n    searchExcludeChars: string[]\n  ): SearchResult[];\n\n  /**\n   * Provide list of standard terms\n   */\n  public standardTerms(): SearchTerms {\n    return {\n      SEARCH_PLACEHOLDER: 'Search',\n      SEARCH_RANGE_PLACEHOLDER: 'Range',\n      SEARCH_STARTS_WITH: 'Search starts with',\n      SEARCH_STARTS_WITH_TOOLTIP: 'Determine if the searched element starts with the search term',\n      SEARCH_CASE_SENSITIVE: 'Search is case sensitive',\n      SEARCH_CASE_SENSITIVE_TOOLTIP: 'Determine if the search is case sensitive',\n      SEARCH_FROM: 'From',\n      SEARCH_TO: 'To',\n      SEARCH_RANGE_LOWER: 'Lower bound of search range',\n      SEARCH_RANGE_UPPER: 'Upper bound of search range',\n      SEARCH_RANGE: 'Search Range'\n    };\n  }\n}\n\n/**\n * Default search service\n */\n@Injectable()\nexport class SearchboxDefaultService extends SearchboxService {\n  public search(\n    search: string,\n    allResults: SearchResult[],\n    lastFoundResult: SearchResult | undefined,\n    searchMultiple: boolean,\n    searchNextRow: boolean,\n    searchCaseSensitive: boolean,\n    searchStartsWith: boolean,\n    searchRange: boolean,\n    searchFrom: string,\n    searchTo: string,\n    searchExcludeChars: string[]\n  ): SearchResult[] {\n\n    // if empty search string and not searching a range, nothing will be found\n    if (!search.trim() && !searchRange) {\n      return [];\n    }\n\n    // if last found then split array in two and reassemble, so we search from next element\n    let unfiltered: SearchResult[] = allResults;\n    if (lastFoundResult && !searchMultiple && unfiltered.length > 0) {\n      const foundRowIndex = lastFoundResult?.rowIndex ?? -1;\n      const foundColumnIndex = lastFoundResult?.columnIndex ?? -1;\n      const arrayIndex = searchNextRow ?\n        unfiltered.map(searchResult => searchResult.rowIndex).lastIndexOf(foundRowIndex) :\n        unfiltered.findIndex(searchResult => searchResult.rowIndex === foundRowIndex && searchResult.columnIndex === foundColumnIndex);\n      if (arrayIndex >= 0) {\n        const lag = unfiltered.slice(0, arrayIndex + 1);\n        const lead = unfiltered.slice(arrayIndex + 1);\n        unfiltered = [...lead, ...lag];\n      }\n    }\n\n    // filter\n    let filtered: SearchResult[] = [];\n    if (searchMultiple) {\n      filtered = unfiltered.filter(result =>\n        this.filter(result, search, searchCaseSensitive, searchStartsWith, searchRange, searchFrom, searchTo, searchExcludeChars));\n    } else {\n      const found = unfiltered.find(result =>\n        this.filter(result, search, searchCaseSensitive, searchStartsWith, searchRange, searchFrom, searchTo, searchExcludeChars));\n      filtered = found ? [found] : [];\n    }\n\n    // return search results\n    return filtered;\n  }\n\n  protected filter(\n    result: SearchResult, search: string, searchCaseSensitive: boolean, searchStartsWith: boolean,\n    searchRange: boolean, searchFrom: string, searchTo: string, searchExcludeChars: string[]): boolean {\n    // extract numeric\n    const nvalue = isNumber(result.value) ? result.value as number : undefined;\n    let svalue = isNumber(result.value) ? (result.value as number).toString() : result.value as string;\n    if (!svalue) { return false; }\n    svalue = !searchCaseSensitive ? svalue.toLowerCase() : svalue;\n    const sfrom = !searchCaseSensitive ? searchFrom.toLowerCase() : searchFrom;\n    const sto = !searchCaseSensitive ? searchTo.toLowerCase() : searchTo;\n\n    // transform case of search string if can insensitive\n    const ssearch = !searchCaseSensitive ? search.toLowerCase() : search;\n\n    // get numeric value of search\n    const nsearch = isNumeric(ssearch) ? Number(ssearch) : undefined;\n\n    // numeric range\n    if (searchRange && isNumeric(searchFrom) && isNumeric(searchTo) && nvalue) {\n      return this.numericRange(nvalue, Number(searchFrom), Number(searchTo));\n    }\n\n    // numeric equals\n    if (!searchRange && nvalue && nsearch) { return this.numericEquals(nvalue, nsearch); }\n\n    // string range\n    if (searchRange) { return this.stringRange(svalue, sfrom, sto, searchExcludeChars); }\n\n    // string starts with\n    if (!searchRange && searchStartsWith) { return this.stringStartsWith(svalue, ssearch, searchExcludeChars); }\n\n    // string contains\n    if (!searchRange && !searchStartsWith) { return this.stringContains(svalue, ssearch, searchExcludeChars); }\n\n    return false;\n  }\n\n  protected numericRange(cellvalue: number, lower: number, upper: number): boolean {\n    return cellvalue >= lower && cellvalue <= upper;\n  }\n\n  protected numericEquals(cellvalue: number, search: number): boolean { return cellvalue === search; }\n\n  protected stringRange(cellvalue: string, lower: string, upper: string, searchExcludeChars: string[]): boolean {\n    const scellvalue = strip(cellvalue, searchExcludeChars);\n    return (scellvalue.localeCompare(lower) >= 0) &&\n      (scellvalue.localeCompare(upper) <= 0);\n  }\n\n  protected stringStartsWith(cellvalue: string, search: string, searchExcludeChars: string[]): boolean {\n    return strip(cellvalue, searchExcludeChars).startsWith(search);\n  }\n\n  protected stringContains(cellvalue: string, search: string, searchExcludeChars: string[]): boolean {\n    return strip(cellvalue, searchExcludeChars).includes(search);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SearchTerms } from './searchbox.model';\n\n/**\n * Looks for key in SearchTerms object and returns value or\n * if not found return the key\n */\n@Pipe({\n  name: 'localizeTerms'\n})\nexport class NgxMatSearchboxTermsPipe implements PipeTransform {\n  public transform(key: keyof SearchTerms, terms: SearchTerms): string {\n    return terms[key] || key;\n  }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Subscription } from 'rxjs';\nimport { plusImage, searchImage } from './searchbox.images';\nimport { ExtendedSearchChanges, SearchData, SearchParams, SearchResult, SearchResults, SearchTerms } from './searchbox.model';\nimport { enableControls } from './searchbox.utils';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { SearchboxService } from './searchbox.service';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';\n\n/**\n * Searchbox component, sized to fit a toolbar, to which a set of search data is provided, and which can then\n * perform a search on the provided data and emit a result to a parent component.\n */\n@Component({\n  // tslint:disable-next-line:component-selector\n  selector: 'ngx-mat-searchbox',\n  templateUrl: './searchbox.component.html',\n  styleUrls: ['./searchbox.component.css'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => NgxMatSearchboxComponent),\n    },\n    {\n      provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n      useValue: { disableTooltipInteractivity: true }\n    }\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class NgxMatSearchboxComponent implements OnInit, OnDestroy, ControlValueAccessor {\n  /**\n   * Full search dataset, in format suitable for reporting search results\n   */\n  private allResults: SearchResult[] = [];\n\n  /**\n   * Supplies search dataset to component\n   */\n  @Input()\n  public set searchData(data: SearchData) {\n\n    // flatten [][] into SearchResult[]\n    this.allResults = data\n      .map((row, rowIndex) => row.map((cell, columnIndex) => ({ rowIndex, columnIndex, value: cell ?? '', searchRow: row }))).flat(1);\n\n    // determine if the last found result is the same in the new data set\n    // else if it has changed then initialize last found, so any new search start from beginning\n    if (this.lastFoundResult) {\n      const newCellValue = this.searchCellValue(data, this.lastFoundResult.rowIndex, this.lastFoundResult.columnIndex);\n      if (!newCellValue || newCellValue !== this.lastFoundResult.value) { this.lastFoundResult = undefined; }\n    }\n  }\n\n  /**\n   * Determines if search happens on each key stroke or only when search button is clicked (or on enter key stoke)\n   */\n  @Input() public searchContinuous = true;\n\n  /**\n   * Localization\n   */\n  private terms = this.searchService.standardTerms();\n\n  @Input()\n  public get searchTerms(): SearchTerms { return this.terms; }\n  public set searchTerms(searchTerms: SearchTerms) {\n    this.terms = { ...this.searchService.standardTerms(), ...searchTerms };\n  }\n\n  /**\n   * Determines whether search component is disabled\n   */\n  private disabled = false;\n\n  @Input()\n  public get searchDisabled(): boolean { return this.disabled; }\n  public set searchDisabled(disabled: boolean) {\n    this.disabled = disabled;\n    enableControls(this.searchForm, !this.disabled);\n  }\n\n  /**\n   * Determine if search looks for first match and then each click of the button looks for next match,\n   * or whether all occurrences are searched for in each search request (=true)\n   */\n  @Input() public searchMultiple = false;\n\n  /**\n   * When searching for next match, skip other matched entries in cells on same row\n   */\n  @Input() public searchNextRow = true;\n\n  /**\n   * When doing continuous searches, the debounce time in milliseconds to be applied to key stokes\n   */\n  @Input() public searchDebounceMS = 200;\n\n  /**\n   * Width of component, pixels\n   */\n  @Input() public searchComponentWidth = 240;\n\n  /**\n   * Determine is the search comparison are case sensitive by default\n   */\n  @Input() public searchCaseSensitive = false;\n\n  /**\n   * Determine if search string is to be identified only at the start of the searched value,\n   * otherwise it can occur anywhere in the value\n   */\n  @Input() public searchStartsWith = false;\n\n  /**\n   * Strip these characters (or strings) from the search value before evaluating\n   */\n  @Input() public searchExcludeChars: string[] = [];\n\n  /**\n   * Determine if options for extended search are available i.e.\n   * startWith, caseSensitive and range\n   */\n  @Input() public searchExtended = true;\n\n  /**\n   * Panel to enter extended search params open on hovering over\n   * extended (+) button.  This determines how long the delay is in milliseconds\n   * before the panel appears\n   */\n  @Input() public searchExtendedPopupDelay = 200;\n\n  /**\n   * Applies angular material apperance to the field\n   */\n  @Input() public searchFieldAppearance: 'outline' | 'standard' | 'fill' | 'legacy' = 'outline';\n\n  /**\n   * If 'small' then the field has a font of 9pt and the margins, padding etc. are reduced so that\n   * the field can comfortably fit on a toolbar.\n   */\n  @Input() public searchFieldSize: 'small' | 'default' = 'small';\n\n  /**\n   * Range rather than a single search value\n   */\n  private searchRange = false;\n\n  private searchFrom = '';\n\n  private searchTo = '';\n\n  /**\n   * Output result of search\n   */\n  @Output() public searchResults: EventEmitter<SearchResults> = new EventEmitter();\n\n  /**\n   * Form containing search input field\n   */\n  public searchForm: FormGroup = new FormGroup({});\n\n  /**\n   * Track changes to search string being entered\n   */\n  private searchTextChanged$: Subscription | undefined;\n\n  /**\n   * Track last search match\n   */\n  private lastFoundResult: SearchResult | undefined;\n\n  /**\n   * Form containing extended search options\n   */\n  public extendedSearchForm: FormGroup = new FormGroup({});\n\n  /**\n   * Track changes to extended search options (popup)\n   */\n  private extendedSearchChanged$: Subscription | undefined;\n\n  /**\n   * Track if component has been touched, i.e if a search string has been entered\n   */\n  private touched = false;\n\n  constructor(\n    private iconRegistry: MatIconRegistry,\n    private sanitizer: DomSanitizer,\n    private searchService: SearchboxService) {\n    this.loadImage('ngx-search', searchImage);\n    this.loadImage('ngx-search-plus', plusImage);\n  }\n\n  ngOnInit(): void {\n    // define for for search field\n    const searchField = new FormControl('', [Validators.maxLength(200)]);\n\n    // extended fields\n    const startsWith = new FormControl(this.searchStartsWith);\n    const caseSensitive = new FormControl(this.searchCaseSensitive);\n    const searchFrom = new FormControl(this.searchFrom);\n    const searchTo = new FormControl(this.searchTo);\n\n    // form for search field\n    this.searchForm.addControl('search', searchField);\n    enableControls(this.searchForm, !this.disabled);\n\n    // respond to changes in the search field\n    this.searchTextChanged$ = searchField.valueChanges\n      .pipe(\n        debounceTime(this.searchDebounceMS),\n        distinctUntilChanged())\n      .subscribe(search => {\n\n        this.lastFoundResult = undefined;\n        if (!search.trim() && !this.searchRange) {\n          const searchResults: SearchResults = [];\n          searchResults.searchParams = this.searchParams(search);\n          this.searchResults.emit(searchResults);\n          return;\n        }\n\n        // switch off the range search\n        this.searchRange = false;\n        this.searchFrom = '';\n        this.searchTo = '';\n        searchFrom.setValue('');\n        searchTo.setValue('');\n\n        // do continuous search if specified\n        this.continuousSearch(search);\n      });\n\n    // define form for extended search options\n    this.extendedSearchForm.addControl('startsWith', startsWith);\n    this.extendedSearchForm.addControl('caseSensitive', caseSensitive);\n    this.extendedSearchForm.addControl('searchFrom', searchFrom);\n    this.extendedSearchForm.addControl('searchTo', searchTo);\n\n    // set initial states - disable fromto if startWithis on\n    if (this.searchStartsWith) {\n      enableControls(searchFrom, false);\n      enableControls(searchTo, false);\n    }\n\n    // listen for changes and update variables\n    this.extendedSearchChanged$ = this.extendedSearchForm.valueChanges\n      .subscribe((changes: ExtendedSearchChanges) => {\n        // update fields\n        this.searchStartsWith = changes.startsWith ?? false;\n        this.searchCaseSensitive = changes.caseSensitive ?? false;\n        this.searchFrom = changes.searchFrom ?? '';\n        this.searchTo = changes.searchTo ?? '';\n\n        // if startswith then clear out from-to\n        if (this.searchStartsWith) {\n          searchFrom.setValue('', { emitEvent: false });\n          searchTo.setValue('', { emitEvent: false });\n          this.searchRange = false;\n        }\n\n        // disable from-to if startswith is on, else enable\n        enableControls(searchFrom, !this.searchStartsWith);\n        enableControls(searchTo, !this.searchStartsWith);\n\n        // determine if a range\n        if (!this.searchStartsWith && this.searchFrom.trim().length && this.searchTo.trim().length) {\n          this.searchRange = true;\n          searchField.setValue('', { emitEvent: false });\n        } else { this.searchRange = false; }\n      });\n  }\n\n  /**\n   * Loads an SVG image to the MatIconRegistry from a string literal,\n   * representing an svg\n   */\n  private loadImage(\n    iconName: string,\n    svg: string\n  ): void {\n    this.iconRegistry.addSvgIconLiteral(\n      iconName,\n      this.sanitizer.bypassSecurityTrustHtml(svg)\n    );\n  }\n\n  /**\n   * When the extended search option box closes perform a search\n   */\n  public extendedSearchClose(): void {\n    const searchString = this.searchForm.get('search')?.value ?? '';\n    this.search(searchString);\n  }\n\n  /**\n   * Respond to each keystoke in the search box\n   */\n  private continuousSearch(search: string): void {\n    if (!this.searchContinuous) { return; }\n    this.search(search);\n  }\n\n  /**\n   * Performs a search\n   */\n  public search(search: string): void {\n    const searchResults: SearchResults =\n      this.searchService.search(search, this.allResults, this.lastFoundResult, this.searchMultiple, this.searchNextRow,\n        this.searchCaseSensitive, this.searchStartsWith, this.searchRange, this.searchFrom, this.searchTo, this.searchExcludeChars);\n\n    // add search params to array\n    searchResults.searchParams = this.searchParams(search);\n\n    if (this.searchMultiple) {\n      this.lastFoundResult = undefined;\n    } else {\n      this.lastFoundResult = searchResults[0];\n    }\n    this.searchResults.emit(searchResults);\n\n    // ControlValueAccessor\n    this.onChange(searchResults);\n  }\n\n  /**\n   * Find cell value in search dataset based on row and column indexes\n   */\n  private searchCellValue(data: SearchData, rowIndex: number, columnIndex: number): string | number | undefined {\n    if (rowIndex < 0 || rowIndex >= data.length) { return undefined; }\n    const cells = data[rowIndex];\n    if (columnIndex < 0 || columnIndex >= cells.length) { return undefined; }\n    return cells[columnIndex];\n  }\n\n  /**\n   * Create SearchParams object from search string and current parameter values (set by default or extended dialog)\n   */\n  private searchParams(search: string): SearchParams {\n    return {\n      search, searchMultiple: this.searchMultiple, searchNextRow: this.searchNextRow,\n      searchCaseSensitive: this.searchCaseSensitive, searchStartsWith: this.searchStartsWith, searchRange: this.searchRange,\n      searchFrom: this.searchFrom, searchTo: this.searchTo, searchExcludeChars: this.searchExcludeChars\n    };\n  }\n\n  /**\n   * Prevents button from taking focus on mouse down\n   */\n  public mouseDown(e: MouseEvent): void {\n    e.preventDefault();\n  }\n\n  public get placeholder(): keyof SearchTerms {\n    return this.searchRange ? 'SEARCH_RANGE_PLACEHOLDER' : 'SEARCH_PLACEHOLDER';\n  }\n\n  public clearSearchField(): void {\n    this.searchForm.get('search')?.setValue('', { emitEvent: false });\n  }\n\n  /** ControlValueAccessor implementation */\n  private onChange = (searchResults: SearchResults) => { };\n\n  private onTouched = () => { };\n\n  public writeValue(search: string | undefined): void {\n    this.searchForm.get('search')?.setValue(search ?? '', { emitEvent: true });\n  }\n\n  public registerOnChange(fn: (searchResults: SearchResults) => void): void {\n    this.onChange = (searchResults: SearchResults) => {\n      fn(searchResults);\n      this.markAsTouched();\n    };\n  }\n\n  public registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  public setDisabledState(disabled: boolean): void {\n    this.searchDisabled = disabled;\n  }\n\n  private markAsTouched(): void {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  public ngOnDestroy(): void {\n    this.searchTextChanged$?.unsubscribe();\n    this.extendedSearchChanged$?.unsubscribe();\n  }\n}\n\n\n\n","<!--main search box-->\n<form [formGroup]=\"searchForm\" autocomplete=\"off\" class=\"ngx-formlayout\">\n  <mat-form-field [ngClass]=\"{'ngx-search-field': true, 'ngx-search-small-input': searchFieldSize==='small'}\"\n    [appearance]=\"searchFieldAppearance\" [style.width.px]=\"searchComponentWidth\">\n    <mat-label>{{placeholder | localizeTerms:searchTerms}}</mat-label>\n    <input #input matInput type=\"text\" formControlName=\"search\">\n    <button mat-button matSuffix class=\"ngx-search-button\"\n      [attr.aria-label]=\"'SEARCH_PLACEHOLDER' | localizeTerms:searchTerms\"\n      [matTooltip]=\"'SEARCH_PLACEHOLDER' | localizeTerms:searchTerms\" [disabled]=\"searchDisabled\"\n      (click)=\"search(input.value)\" (mousedown)=\"mouseDown($event)\">\n      <mat-icon svgIcon=\"ngx-search\"></mat-icon>\n    </button>\n  </mat-form-field>\n\n  <!--button as trigger for extended search options popover-->\n  <button #trigger mat-button [disableRipple]=\"true\" class=\"ngx-search-extended-button ngx-search-inactive-button\"\n    [mdePopoverTriggerFor]=\"searchPopover\" mdePopoverTriggerOn=\"hover\" popoverTrigger=\"mdePopoverTrigger\"\n    [mdePopoverCloseOnClick]=\"false\" [mdePopoverEnterDelay]=\"searchExtendedPopupDelay\" (closed)=\"extendedSearchClose()\">\n    <mat-icon *ngIf=\"searchExtended && !searchDisabled\" svgIcon=\"ngx-search-plus\"\n      [ngClass]=\"{'ngx-search-icon-p75x':searchFieldSize==='small'}\" [style.vertical-align]=\"'top'\"></mat-icon>\n  </button>\n</form>\n\n<!--popover for search to provide extended options-->\n<mde-popover #searchPopover=\"mdePopover\" [mdePopoverOverlapTrigger]=\"false\" mdePopoverPositionY=\"below\"\n  mdePopoverPositionX=\"before\" [mdePopoverOffsetY]=\"0\" [mdePopoverOffsetX]=\"-8\">\n  <div class=\"ngx-search-elementgroup ngx-search-semi-transparent ngx-columnlayout ngx-rowgap10px\">\n    <mat-card style=\"max-width: 2000px\">\n      <mat-card-content>\n        <form [formGroup]=\"extendedSearchForm\" class=\"ngx-columnlayout\" autocomplete=\"off\">\n\n          <!--startsWith checkbox-->\n          <mat-checkbox formControlName=\"startsWith\"\n            matTooltip=\"{{'SEARCH_STARTS_WITH_TOOLTIP' | localizeTerms:searchTerms }}\" matTooltipPosition=\"below\">\n            <span class=\"ngx-search-element-text-10pt\">{{'SEARCH_STARTS_WITH' | localizeTerms:searchTerms }}</span>\n          </mat-checkbox>\n\n          <!--case sensitive checkbox-->\n          <mat-checkbox formControlName=\"caseSensitive\"\n            matTooltip=\"{{'SEARCH_CASE_SENSITIVE_TOOLTIP' | localizeTerms:searchTerms }}\" matTooltipPosition=\"below\">\n            <span class=\"ngx-search-element-text-10pt\">{{'SEARCH_CASE_SENSITIVE' | localizeTerms:searchTerms}}</span>\n          </mat-checkbox>\n          <!--from-to-->\n          <fieldset class=\"ngx-search-elementgroup ngx-rowlayout ngx-colgap10px\" [style.padding.px]=\"5\">\n            <legend class=\"ngx-search-element-text-10pt\">{{'SEARCH_RANGE' | localizeTerms:searchTerms }}</legend>\n\n            <!--search from-->\n            <mat-form-field class=\"ngx-search-element-text-10pt\" [style.width.px]=\"'220'\">\n              <mat-label class=\"ngx-search-element-text-10pt\">{{'SEARCH_FROM' | localizeTerms:searchTerms}}</mat-label>\n              <input matInput type=\"text\" formControlName=\"searchFrom\" maxlength=\"100\"\n                placeholder=\"{{'SEARCH_FROM' | localizeTerms:searchTerms }}\" autofocus />\n              <mat-hint class=\"ngx-search-element-text-8pt\" align=\"start\">{{'SEARCH_RANGE_LOWER' |\n                localizeTerms:searchTerms}}\n              </mat-hint>\n            </mat-form-field>\n\n            <!--search to-->\n            <mat-form-field class=\"ngx-search-element-text-10pt\" [style.width.px]=\"'220'\">\n              <mat-label class=\"ngx-search-element-text-10pt\">{{'SEARCH_TO' | localizeTerms:searchTerms }}</mat-label>\n              <input matInput type=\"text\" formControlName=\"searchTo\" maxlength=\"100\"\n                placeholder=\"{{'SEARCH_TO' | localizeTerms:searchTerms }}\" />\n              <mat-hint class=\"ngx-search-element-text-8pt\" align=\"start\">{{'SEARCH_RANGE_UPPER' |\n                localizeTerms:searchTerms}}\n              </mat-hint>\n            </mat-form-field>\n          </fieldset>\n        </form>\n      </mat-card-content>\n    </mat-card>\n  </div>\n</mde-popover>\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MdePopoverModule } from '@fgrid-ngx/mde';\nimport { NgxMatSearchboxTermsPipe } from './searchbox-terms.pipe';\nimport { NgxMatSearchboxComponent } from './searchbox.component';\nimport { SearchboxDefaultService, SearchboxService } from './searchbox.service';\n\n/**\n * Configure a custom service\n */\nexport type SearchboxConfig = {\n  searchService?: Provider  // e.g. { provide: SearchboxService, useClass: SearchboxCustomService }\n};\n@NgModule({\n  declarations: [\n    NgxMatSearchboxComponent,\n    NgxMatSearchboxTermsPipe\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    MdePopoverModule,\n    MatCheckboxModule,\n    MatButtonModule,\n    MatInputModule,\n    MatFormFieldModule,\n    MatCardModule,\n    MatIconModule,\n    MatTooltipModule,\n  ],\n  exports: [\n    NgxMatSearchboxComponent\n  ],\n})\nexport class NgxMatSearchboxModule {\n  /**\n   * Note that the forRoot() and forChild() methods are functionally the same, both provided\n   * by convention\n   */\n  static forRoot(config: SearchboxConfig = {}): ModuleWithProviders<NgxMatSearchboxModule> {\n    return {\n      ngModule: NgxMatSearchboxModule,\n      providers: [config.searchService || { provide: SearchboxService, useClass: SearchboxDefaultService }]\n    };\n  }\n\n  static forChild(config: SearchboxConfig = {}): ModuleWithProviders<NgxMatSearchboxModule> {\n    return {\n      ngModule: NgxMatSearchboxModule,\n      providers: [config.searchService || { provide: SearchboxService, useClass: SearchboxDefaultService }]\n    };\n  }\n}\n","/*\n * Public API Surface of ngx-mat-searchbox\n */\nexport * from './lib/searchbox.component';\nexport * from './lib/searchbox.module';\nexport * from './lib/searchbox.model';\nexport * from './lib/searchbox.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.SearchboxService","i13.NgxMatSearchboxTermsPipe"],"mappings":"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"}