{"version":3,"file":"search.mjs","sources":["../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/search/search-error.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/search/search.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/search/search.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/search/search-animation.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/search/header-search.ts","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/search/header-search.html","../../../../../k8-fastbuild-ST-fdfa778d11ba/bin/src/angular/search/search.module.ts"],"sourcesContent":["/** @docs-private */\nexport function getSbbInputRequiredError(): Error {\n  return Error('sbb-search requires an <input sbbInput> element.');\n}\n","import { _IdGenerator } from '@angular/cdk/a11y';\nimport { ENTER } from '@angular/cdk/keycodes';\nimport {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  inject,\n  Injector,\n  Input,\n  OnDestroy,\n  Output,\n  runInInjectionContext,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { SbbAutocompleteOrigin, SbbAutocompleteTrigger } from '@sbb-esta/angular/autocomplete';\nimport { TypeRef } from '@sbb-esta/angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\nimport { SbbInput } from '@sbb-esta/angular/input';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\n\nimport { getSbbInputRequiredError } from './search-error';\n\n@Component({\n  selector: 'sbb-search',\n  templateUrl: './search.html',\n  styleUrls: ['./search.css'],\n  exportAs: 'sbbSearch',\n  host: {\n    class: 'sbb-search',\n    '[attr.id]': 'this.id',\n    '[class.sbb-focused]': 'focused',\n    '[class.sbb-autocomplete-panel-open]': '_autocompleteTrigger?.panelOpen',\n    '[attr.aria-label]': 'null',\n    '[attr.aria-labelledby]': 'null',\n    '[attr.aria-describedby]': 'null',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [SbbIcon],\n})\nexport class SbbSearch implements AfterContentInit, OnDestroy {\n  /** The autocomplete trigger optionally contained in the search element. */\n  @ContentChild(SbbAutocompleteTrigger, { static: true })\n  _autocompleteTrigger?: SbbAutocompleteTrigger;\n\n  /** The nested form control. */\n  @ContentChild(SbbInput, { static: true }) _input!: SbbInput;\n\n  /** Identifier of search. */\n  @Input() id: string = inject(_IdGenerator).getId('sbb-search-id-');\n\n  /**\n   * The indicator icon, which will be used in the button.\n   *\n   * e.g. svgIcon=\"magnifying-glass-small\"\n   */\n  @Input() svgIcon: string = 'magnifying-glass-small';\n\n  /** Type of the search button. Defaults to \"button\" if not specified. */\n  @Input() type: string = 'button';\n\n  /** aria-label for the search button. */\n  @Input('aria-label') ariaLabel: string;\n\n  /** aria-labelledby for the search button. */\n  @Input('aria-labelledby') ariaLabelledby: string;\n\n  /** aria-describedby for the search button. */\n  @Input('aria-describedby') ariaDescribedby: string;\n\n  /**\n   * Event emitted when either the ENTER key is pressed on the input field,\n   * the search button is clicked or an autocomplete option is selected.\n   */\n  @Output() search: EventEmitter<string> = new EventEmitter<string>();\n\n  get disabled() {\n    return this._input?.disabled ?? false;\n  }\n\n  /** Whether the search is focused. */\n  get focused(): boolean {\n    return this._focused || !!this._autocompleteTrigger?.panelOpen;\n  }\n  private _focused = false;\n\n  private _destroyed = new Subject<void>();\n\n  private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  private _injector = inject(Injector);\n\n  constructor(...args: unknown[]);\n  constructor() {}\n\n  ngAfterContentInit(): void {\n    if (!this._input && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n      throw getSbbInputRequiredError();\n    }\n    if (this._autocompleteTrigger) {\n      runInInjectionContext(this._injector, () => {\n        this._autocompleteTrigger!.connectedTo = new SbbAutocompleteOrigin(this._elementRef);\n        this._autocompleteTrigger!.autocomplete.optionSelected.pipe(\n          takeUntil(this._destroyed),\n        ).subscribe(() => this._emitSearch());\n      });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /** When the input inside receives focus, we update the focus state. */\n  @HostListener('focusin')\n  _onFocus() {\n    if (!this.disabled) {\n      this._focused = true;\n    }\n  }\n\n  /** When the input inside loses focus, we update the focus state. */\n  @HostListener('focusout')\n  _onBlur() {\n    if (!this._autocompleteTrigger || !this._autocompleteTrigger.panelOpen) {\n      this._focused = false;\n    } else if (this._autocompleteTrigger) {\n      this._autocompleteTrigger.autocomplete.closed\n        .pipe(take(1))\n        .subscribe(() => (this._focused = false));\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  _keydown(event: TypeRef<KeyboardEvent>) {\n    const keyCode = event.keyCode;\n    if (keyCode === ENTER) {\n      this._emitSearch();\n    }\n  }\n\n  /** Called whenever the current value should be emitted. */\n  _emitSearch() {\n    this.search.emit(this._input.value);\n    this._autocompleteTrigger?.closePanel();\n  }\n}\n","<ng-content select=\"input\"></ng-content>\n<button\n  [type]=\"type\"\n  (click)=\"_emitSearch()\"\n  [disabled]=\"disabled\"\n  class=\"sbb-search-button sbb-button sbb-icon-fit\"\n  [attr.aria-label]=\"ariaLabel || null\"\n  [attr.aria-labelledby]=\"ariaLabelledby || null\"\n  [attr.aria-describedby]=\"ariaDescribedby || null\"\n>\n  <sbb-icon class=\"sbb-search-icon sbb-icon-scaled\" [svgIcon]=\"svgIcon\"></sbb-icon>\n</button>\n","import {\n  animate,\n  AnimationTriggerMetadata,\n  state,\n  style,\n  transition,\n  trigger,\n} from '@angular/animations';\n\n/**\n * The following is the animation for the sbb-header-search component.\n *\n * @docs-private\n */\nexport const sbbSearchAnimations: {\n  readonly growShrink: AnimationTriggerMetadata;\n} = {\n  /**\n   * This animation transforms the select's overlay panel on and off the page.\n   *\n   * When the panel is attached to the DOM, it fades in and when the panel is removed, it fades out.\n   */\n  growShrink: trigger('growShrink', [\n    state('void', style({ opacity: 0, width: '0px' })),\n    state('open', style({ opacity: 1, width: '*' })),\n    transition('void => *', animate('300ms ease')),\n    transition('* => void', animate('300ms 25ms linear')),\n  ]),\n};\n","// Workaround for: https://github.com/bazelbuild/rules_nodejs/issues/1265\n/// <reference types=\"@angular/localize/init\" />\n\nimport { AnimationEvent } from '@angular/animations';\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport {\n  CdkConnectedOverlay,\n  CdkOverlayOrigin,\n  ConnectedPosition,\n  Overlay,\n  RepositionScrollStrategy,\n  ScrollStrategy,\n} from '@angular/cdk/overlay';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ElementRef,\n  HostListener,\n  inject,\n  InjectionToken,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Breakpoints, SCALING_FACTOR_4K, SCALING_FACTOR_5K, TypeRef } from '@sbb-esta/angular/core';\nimport { SbbIcon } from '@sbb-esta/angular/icon';\nimport { animationFrameScheduler, interval, Observable, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { SbbSearch } from './search';\nimport { sbbSearchAnimations } from './search-animation';\n\n/** Injection token that determines the scroll handling while a select is open. */\nexport const SBB_SEARCH_SCROLL_STRATEGY = new InjectionToken<() => ScrollStrategy>(\n  'sbb-select-scroll-strategy',\n);\n\n/** @docs-private */\nexport function SBB_SEARCH_SCROLL_STRATEGY_PROVIDER_FACTORY(\n  overlay: Overlay,\n): () => RepositionScrollStrategy {\n  return () => overlay.scrollStrategies.reposition();\n}\n\n/** @docs-private */\nexport const SBB_SEARCH_SCROLL_STRATEGY_PROVIDER = {\n  provide: SBB_SEARCH_SCROLL_STRATEGY,\n  deps: [Overlay],\n  useFactory: SBB_SEARCH_SCROLL_STRATEGY_PROVIDER_FACTORY,\n};\n\nconst searchOverlayPositions: ConnectedPosition[] = (\n  ['start', 'center', 'end'] as Array<'start' | 'center' | 'end'>\n).map((x) => ({\n  originX: x,\n  originY: 'top',\n  overlayX: x,\n  overlayY: 'top',\n}));\n\n/** For mobile, the overlay should be attached approximately at the center of the trigger. */\nconst searchOverlayMobilePosition: ConnectedPosition[] = [searchOverlayPositions[1]];\n\n@Component({\n  selector: 'button[sbbHeaderSearch]',\n  templateUrl: './header-search.html',\n  styleUrls: ['./header-search.css'],\n  exportAs: 'sbbHeaderSearch',\n  host: {\n    class: 'sbb-header-search sbb-button-reset-frameless',\n    '[attr.id]': 'this.id',\n    'aria-haspopup': 'true',\n    '[attr.aria-expanded]': 'panelOpen || null',\n    '[attr.aria-controls]': 'panelOpen ? panelId : null',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  animations: [sbbSearchAnimations.growShrink],\n  imports: [SbbIcon, CdkConnectedOverlay, AsyncPipe],\n})\nexport class SbbHeaderSearch {\n  private _breakpointObserver = inject(BreakpointObserver);\n  private _changeDetectorRef = inject(ChangeDetectorRef);\n  _labelSearch: string = $localize`:Button label for the header search@@sbbSearchHeaderButtonLabel:Search`;\n\n  /** Identifier of search. */\n  @Input() id: string = inject(_IdGenerator).getId('sbb-header-search-id-');\n\n  /** The label to be shown next to the indicator icon. */\n  @Input() label?: string;\n\n  /** Type of the search button. Defaults to \"button\" if not specified. */\n  @Input() type: string = 'button';\n\n  /** The contained search instance. */\n  @ContentChild(SbbSearch, { static: true }) _search: SbbSearch;\n\n  /** The indicator icon from the contained sbb-search component. */\n  get svgIcon(): string {\n    return this._search?.svgIcon || 'magnifying-glass-small';\n  }\n\n  /** Whether or not the overlay panel is open. */\n  get panelOpen(): boolean {\n    return this._panelOpen;\n  }\n\n  /** The id of the overlay panel. */\n  readonly panelId = `panel-${this.id}`;\n\n  _overlayPanelClass: string | string[] = ['sbb-overlay-panel', 'sbb-header-search-panel'];\n\n  /**\n   * This position config ensures that the top \"start\" corner of the overlay\n   * is aligned with with the top \"start\" of the origin by default (overlapping\n   * the trigger completely).\n   */\n  _positions: Observable<ConnectedPosition[]>;\n\n  /** Strategy that will be used to handle scrolling while the select panel is open. */\n  _scrollStrategy: ScrollStrategy;\n\n  /** The animation state, which indicates whether the overlay is open or not. */\n  _animationState: 'void' | 'open' = 'void';\n\n  _overlayWidth: Observable<string>;\n\n  _overlayOrigin: CdkOverlayOrigin;\n\n  /** Factory function used to create a scroll strategy for this select. */\n  private _scrollStrategyFactory = inject(SBB_SEARCH_SCROLL_STRATEGY);\n\n  /** Whether or not the overlay panel is open. */\n  private _panelOpen = false;\n\n  private _animationSubscription: Subscription | undefined;\n\n  constructor(...args: unknown[]);\n  constructor() {\n    const elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    this._scrollStrategy = this._scrollStrategyFactory();\n    this._overlayOrigin = new CdkOverlayOrigin(elementRef);\n\n    this._positions = this._breakpointObserver\n      .observe(Breakpoints.Mobile)\n      .pipe(map((m) => (m.matches ? searchOverlayMobilePosition : searchOverlayPositions)));\n    // Compare overlay base width with the scss definition.\n    const overlayBaseWidth = 376;\n    this._overlayWidth = this._breakpointObserver\n      .observe([Breakpoints.Mobile, Breakpoints.Desktop4k, Breakpoints.Desktop5k])\n      .pipe(\n        map((m) => {\n          if (m.breakpoints[Breakpoints.Mobile]) {\n            return 'calc(100vw - 20px)';\n          } else if (m.breakpoints[Breakpoints.Desktop5k]) {\n            return `${overlayBaseWidth * SCALING_FACTOR_5K}px`;\n          } else if (m.breakpoints[Breakpoints.Desktop4k]) {\n            return `${overlayBaseWidth * SCALING_FACTOR_4K}px`;\n          } else {\n            return `${overlayBaseWidth}px`;\n          }\n        }),\n      );\n  }\n\n  /** Toggles the overlay panel open or closed. */\n  toggle(): void {\n    this.panelOpen ? this.close() : this.open();\n  }\n\n  /** Opens the overlay panel. */\n  open(): void {\n    if (!this._panelOpen) {\n      this._panelOpen = true;\n      this._animationState = 'open';\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Closes the overlay panel and focuses the host element. */\n  close(): void {\n    if (this._panelOpen) {\n      this._panelOpen = false;\n      this._animationState = 'void';\n      this._changeDetectorRef.markForCheck();\n    }\n  }\n\n  /** Opens the overlay and prevents the click event from bubbling. */\n  @HostListener('click', ['$event'])\n  _handleClick(event: TypeRef<MouseEvent>) {\n    // Stop bubbling, because this would cause the autocomplete to automatically close.\n    event.stopImmediatePropagation();\n    this.open();\n  }\n\n  /**\n   * Called on overlay animation start.\n   * If available and in a browser environment, opens the autocomplete with a delay\n   * and updates the autocomplete size until the end of the overlay animation.\n   */\n  _onAnimationStart(event: AnimationEvent) {\n    // We need to check for requestAnimationFrame, because the animationFrameScheduler\n    // internally uses it, which ensures a smooth animation.\n    if (!this._search._autocompleteTrigger || typeof requestAnimationFrame !== 'function') {\n      this._search._input.focus();\n      return;\n    }\n\n    const isOpening = event.toState === 'open';\n    const trigger = this._search._autocompleteTrigger!;\n    this._animationSubscription = interval(0, animationFrameScheduler).subscribe(() => {\n      trigger._updateSize();\n      // Wait until mininum width is reached before setting the focus in the input, which\n      // opens the autocomplete, in order to avoid a zero width autocomplete.\n      if (\n        isOpening &&\n        !trigger.panelOpen &&\n        trigger.connectedTo.elementRef.nativeElement.getBoundingClientRect().width > 50\n      ) {\n        this._search._input.focus();\n      }\n    });\n  }\n\n  /**\n   * Called at the end of the overlay animation.\n   * Unsubscribes from the autocomplete animation subscription, if available.\n   */\n  _onAnimationDone(event: AnimationEvent) {\n    this._animationSubscription?.unsubscribe();\n    this._animationSubscription = undefined;\n\n    // This call is required as the unsubscription might happen too early, in\n    // which case the autocomplete is not the exact same width as the sbb-search.\n    const trigger = this._search._autocompleteTrigger;\n    if (trigger) {\n      Promise.resolve().then(() => {\n        if (trigger.panelOpen) {\n          trigger._updateSize();\n        } else if (event.toState === 'open') {\n          this._search._input.focus();\n        }\n      });\n    }\n  }\n}\n","<sbb-icon [svgIcon]=\"svgIcon\" class=\"sbb-icon-scaled\"></sbb-icon>\n<span class=\"sbb-header-search-label\">\n  @if (!label) {\n    {{ _labelSearch }}\n  }\n  {{ label }}\n</span>\n\n<ng-template\n  cdk-connected-overlay\n  cdkConnectedOverlayLockPosition\n  cdkConnectedOverlayFlexibleDimensions\n  cdkConnectedOverlayHasBackdrop\n  cdkConnectedOverlayPush\n  cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n  [cdkConnectedOverlayPanelClass]=\"_overlayPanelClass\"\n  [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\n  [cdkConnectedOverlayOrigin]=\"_overlayOrigin\"\n  [cdkConnectedOverlayOpen]=\"panelOpen\"\n  [cdkConnectedOverlayPositions]=\"(_positions | async)!\"\n  [cdkConnectedOverlayViewportMargin]=\"10\"\n  [cdkConnectedOverlayWidth]=\"(_overlayWidth | async)!\"\n  (backdropClick)=\"close()\"\n  (detach)=\"close()\"\n>\n  <div\n    class=\"sbb-header-search-overlay\"\n    [id]=\"panelId\"\n    [@growShrink]=\"_animationState\"\n    (@growShrink.start)=\"_onAnimationStart($event)\"\n    (@growShrink.done)=\"_onAnimationDone($event)\"\n  >\n    <ng-content></ng-content>\n  </div>\n</ng-template>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { NgModule } from '@angular/core';\nimport { SbbButtonModule } from '@sbb-esta/angular/button';\nimport { SbbCommonModule } from '@sbb-esta/angular/core';\nimport { SbbIconModule } from '@sbb-esta/angular/icon';\n\nimport { SbbHeaderSearch, SBB_SEARCH_SCROLL_STRATEGY_PROVIDER } from './header-search';\nimport { SbbSearch } from './search';\n\n@NgModule({\n  imports: [\n    PortalModule,\n    OverlayModule,\n    SbbCommonModule,\n    SbbButtonModule,\n    SbbIconModule,\n    SbbSearch,\n    SbbHeaderSearch,\n  ],\n  exports: [SbbSearch, SbbHeaderSearch],\n  providers: [SBB_SEARCH_SCROLL_STRATEGY_PROVIDER],\n})\nexport class SbbSearchModule {}\n"],"names":["getSbbInputRequiredError","Error","SbbSearch","_autocompleteTrigger","_input","id","inject","_IdGenerator","getId","svgIcon","type","ariaLabel","ariaLabelledby","ariaDescribedby","search","EventEmitter","disabled","focused","_focused","panelOpen","_destroyed","Subject","_elementRef","ElementRef","_injector","Injector","constructor","ngAfterContentInit","ngDevMode","runInInjectionContext","connectedTo","SbbAutocompleteOrigin","autocomplete","optionSelected","pipe","takeUntil","subscribe","_emitSearch","ngOnDestroy","next","complete","_onFocus","_onBlur","closed","take","_keydown","event","keyCode","ENTER","emit","value","closePanel","deps","target","i0","ɵɵFactoryTarget","Component","ɵcmp","ɵɵngDeclareComponent","minVersion","version","SbbAutocompleteTrigger","descendants","static","propertyName","first","predicate","SbbInput","exportAs","ngImport","template","SbbIcon","selector","inputs","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","decorators","host","class","imports","styles","ContentChild","args","Input","Output","HostListener","sbbSearchAnimations","growShrink","trigger","state","style","opacity","width","transition","animate","SBB_SEARCH_SCROLL_STRATEGY","InjectionToken","SBB_SEARCH_SCROLL_STRATEGY_PROVIDER_FACTORY","overlay","scrollStrategies","reposition","SBB_SEARCH_SCROLL_STRATEGY_PROVIDER","provide","Overlay","useFactory","searchOverlayPositions","map","x","originX","originY","overlayX","overlayY","searchOverlayMobilePosition","SbbHeaderSearch","_breakpointObserver","BreakpointObserver","_changeDetectorRef","ChangeDetectorRef","_labelSearch","$localize","label","_search","_panelOpen","panelId","_overlayPanelClass","_positions","_scrollStrategy","_animationState","_overlayWidth","_overlayOrigin","_scrollStrategyFactory","_animationSubscription","elementRef","CdkOverlayOrigin","observe","Breakpoints","Mobile","m","matches","overlayBaseWidth","Desktop4k","Desktop5k","breakpoints","SCALING_FACTOR_5K","SCALING_FACTOR_4K","toggle","close","open","markForCheck","_handleClick","stopImmediatePropagation","_onAnimationStart","requestAnimationFrame","focus","isOpening","toState","interval","animationFrameScheduler","_updateSize","nativeElement","getBoundingClientRect","_onAnimationDone","unsubscribe","undefined","Promise","resolve","then","isStandalone","attributes","listeners","properties","classAttribute","queries","kind","CdkConnectedOverlay","outputs","AsyncPipe","name","animations","SbbSearchModule","NgModule","ɵmod","ɵɵngDeclareNgModule","PortalModule","OverlayModule","SbbCommonModule","SbbButtonModule","SbbIconModule","exports","ɵinj","ɵɵngDeclareInjector","providers"],"mappings":"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"}