angular-input-focus
Version:
An Angular focus attribute directive.
1 lines • 7.13 kB
Source Map (JSON)
{"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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"}