{"version":3,"file":"angular-input-focus.mjs","sources":["../../../projects/angular-input-focus/src/lib/angular-input-focus.directive.ts","../../../projects/angular-input-focus/src/lib/angular-input-focus.module.ts","../../../projects/angular-input-focus/src/public-api.ts","../../../projects/angular-input-focus/src/angular-input-focus.ts"],"sourcesContent":["import { Directive, ElementRef, Input, NgZone, EventEmitter, OnDestroy, Inject, PLATFORM_ID, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Directive({\n  selector: '[libFocus]'\n})\n\n/**\n * An angular focus directive.\n * ## Usage\n * For autofocus-like functionality, use like this:\n * <input [libFocus]=\"true\"...>\n * \n * You can also pass an `EventEmitter<boolean>` as `setFocus` like so:\n * <input [libFocus]=\"false\" [setFocus]=\"focusEvent\">`\n * \n * Whenever your `focusEvent` emits a value, your element will focus/blur depending on\n * whether it is true or false.\n */\nexport class AngularInputFocusDirective implements AfterViewInit, OnDestroy {\n  /**\n   * Indicates whether the current platform is a web browser. Used because our `focus` \n   * implementation is specific to the DOM. Set in constructor.\n   */\n  private isRunningInBrowser: boolean = null;\n\n  /**\n   * When set to true, directive will mimick `autofocus` like functionality for your input.\n   */\n  @Input('libFocus') focus = false;\n\n  /**\n   * When you emit a true value, the input will gain focus. If false, the input will blur.\n   */\n  @Input('setFocus') set setFocus(value: EventEmitter<boolean>) {\n    // Unsubscribe from any previous subs\n    this.killSubscriptions.next();\n    value.pipe(takeUntil(this.killSubscriptions)).subscribe(focus => this.setFocusOnElement(focus));\n  }\n\n  /**\n   * Set to true if you want to run outside angular and skip change detection. If you're not using\n   * Angular Material, you can pretty safely set to \"true\".\n   */\n  @Input() skipChangeDetection = false;\n\n  /**\n   * A subject that will emit a value when we should unsubscribe to our observables.\n   */\n  private killSubscriptions = new Subject();\n\n  /**\n   * Set the focus on the target element.\n   * @param focus Should the element have focus?\n   */\n  private setFocusOnElement(focus: boolean) {\n    // If we aren't in a browser, there's nothing to do since our implementation is DOM-specific.\n    // If we don't have a nativeElement, we have nothing to do either.\n    if (this.isRunningInBrowser === false || !this.el.nativeElement) {\n      return;\n    }\n    // Running outside angular zone to not trigger change detection unless we want to.\n    this.zone.runOutsideAngular(() => {\n      if (focus === true) {\n        this.el.nativeElement.focus();\n      } else {\n        this.el.nativeElement.blur();\n      }\n      if (!this.skipChangeDetection) {\n        this.cd.detectChanges();\n      }\n    });\n  }\n\n  constructor(private el: ElementRef, private cd: ChangeDetectorRef, private zone: NgZone, @Inject(PLATFORM_ID) platformId: string) {\n    this.isRunningInBrowser = isPlatformBrowser(platformId);\n  }\n\n  ngAfterViewInit() {\n    if (this.focus === true) {\n      // After view init, if focus is set, focus element to mimick autofocus functionality.\n      this.setFocusOnElement(true);\n    }\n  }\n\n  ngOnDestroy() {\n    this.killSubscriptions.next();\n    this.killSubscriptions.complete();\n  }\n}","import { NgModule } from '@angular/core';\nimport { AngularInputFocusDirective } from './angular-input-focus.directive';\n\n@NgModule({\n  declarations: [AngularInputFocusDirective],\n  imports: [\n  ],\n  exports: [AngularInputFocusDirective]\n})\n/**\n * A module for an angular focus directive.\n * ## Usage\n * For autofocus-like functionality, use like this:\n * <input [libFocus]=\"true\"...>\n * \n * You can also pass an `EventEmitter<boolean>` as `setFocus` like so:\n * <input [libFocus]=\"false\" [setFocus]=\"focusEvent\">`\n * \n * Whenever your `focusEvent` emits a value, your element will focus/blur depending on\n * whether it is true or false.\n */\nexport class AngularInputFocusModule { }\n","/*\n * Public API Surface of angular-input-focus\n */\nexport * from './lib/angular-input-focus.module';\nexport * from './lib/angular-input-focus.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}