diff --git a/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts b/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts new file mode 100644 index 0000000000..7da2eb32cf --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/directives/caps-lock.directive.ts @@ -0,0 +1,30 @@ +import { Directive, EventEmitter, HostListener, Output } from '@angular/core'; + +@Directive({ + standalone: true, + selector: '[abpCapsLock]', +}) +export class TrackCapsLockDirective { + @Output('abpCapsLock') capsLock = new EventEmitter(); + + @HostListener('window:keydown', ['$event']) + onKeyDown(event: KeyboardEvent): void { + this.capsLock.emit(this.capS(event)); + } + @HostListener('window:keyup', ['$event']) + onKeyUp(event: KeyboardEvent): void { + this.capsLock.emit(this.capS(event)); + } + + capS(e) { + var s = String.fromCharCode(e.which); + if ( + (s.toUpperCase() === s && s.toLowerCase() !== s && e.shiftKey) || + (s.toUpperCase() !== s && s.toLowerCase() === s && e.shiftKey) || + e.getModifierState('CapsLock') + ) { + return true; + } + return false; + } +} diff --git a/npm/ng-packs/packages/core/src/lib/directives/index.ts b/npm/ng-packs/packages/core/src/lib/directives/index.ts index a2f5d8e4fe..d5d6e22c31 100644 --- a/npm/ng-packs/packages/core/src/lib/directives/index.ts +++ b/npm/ng-packs/packages/core/src/lib/directives/index.ts @@ -7,3 +7,4 @@ export * from './permission.directive'; export * from './replaceable-template.directive'; export * from './stop-propagation.directive'; export * from './show-password.directive'; +export * from './caps-lock.directive';