{"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  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    this._scrollStrategy = this._scrollStrategyFactory();\n    this._overlayOrigin = new CdkOverlayOrigin();\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":[],"mappings":"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"}