@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
47 lines • 6.15 kB
JavaScript
import { Directive, EventEmitter, HostListener, Output, } from '@angular/core';
import { PersistFocusDirective } from '../persist/persist-focus.directive';
import * as i0 from "@angular/core";
import * as i1 from "./escape-focus.service";
/**
* Directive to focus the host element whenever the `escape` key is captured.
* UiEvents bubble up by nature, which is why the `cxEscGroup` can be used
* on a tree of elements. Each time the escape key is used, the focus will
* move up in the DOM tree.
*
*/
export class EscapeFocusDirective extends PersistFocusDirective {
constructor(elementRef, service) {
super(elementRef, service);
this.elementRef = elementRef;
this.service = service;
this.defaultConfig = { focusOnEscape: true };
this.esc = new EventEmitter();
}
/**
* Handles the escape key event.
* @param event the native keyboard event which contains the escape keydown event
*/
handleEscape(event) {
if (this.service.shouldFocus(this.config)) {
this.service.handleEscape(this.host, this.config, event);
}
this.esc.emit(this.service.shouldFocus(this.config));
}
ngOnInit() {
if (this.service.shouldFocus(this.config)) {
this.requiredTabindex = -1;
}
super.ngOnInit();
}
}
EscapeFocusDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: EscapeFocusDirective, deps: [{ token: i0.ElementRef }, { token: i1.EscapeFocusService }], target: i0.ɵɵFactoryTarget.Directive });
EscapeFocusDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.0.5", type: EscapeFocusDirective, outputs: { esc: "esc" }, host: { listeners: { "keydown.escape": "handleEscape($event)" } }, usesInheritance: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: EscapeFocusDirective, decorators: [{
type: Directive
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.EscapeFocusService }]; }, propDecorators: { esc: [{
type: Output
}], handleEscape: [{
type: HostListener,
args: ['keydown.escape', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLWZvY3VzLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0b3JlZnJvbnRsaWIvbGF5b3V0L2ExMXkva2V5Ym9hcmQtZm9jdXMvZXNjYXBlL2VzY2FwZS1mb2N1cy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUVaLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBRzNFOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyxvQkFDWCxTQUFRLHFCQUFxQjtJQXNCN0IsWUFDWSxVQUFzQixFQUN0QixPQUEyQjtRQUVyQyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBSGpCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFyQjdCLGtCQUFhLEdBQXNCLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO1FBSzNELFFBQUcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBbUI1QyxDQUFDO0lBakJEOzs7T0FHRztJQUVILFlBQVksQ0FBQyxLQUFvQjtRQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBU0QsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUM1QjtRQUNELEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQixDQUFDOztpSEFuQ1Usb0JBQW9CO3FHQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFEaEMsU0FBUztrSUFVRSxHQUFHO3NCQUFaLE1BQU07Z0JBT1AsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXNjYXBlRm9jdXNDb25maWcgfSBmcm9tICcuLi9rZXlib2FyZC1mb2N1cy5tb2RlbCc7XG5pbXBvcnQgeyBQZXJzaXN0Rm9jdXNEaXJlY3RpdmUgfSBmcm9tICcuLi9wZXJzaXN0L3BlcnNpc3QtZm9jdXMuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVzY2FwZUZvY3VzU2VydmljZSB9IGZyb20gJy4vZXNjYXBlLWZvY3VzLnNlcnZpY2UnO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBmb2N1cyB0aGUgaG9zdCBlbGVtZW50IHdoZW5ldmVyIHRoZSBgZXNjYXBlYCBrZXkgaXMgY2FwdHVyZWQuXG4gKiBVaUV2ZW50cyBidWJibGUgdXAgYnkgbmF0dXJlLCB3aGljaCBpcyB3aHkgdGhlIGBjeEVzY0dyb3VwYCBjYW4gYmUgdXNlZFxuICogb24gYSB0cmVlIG9mIGVsZW1lbnRzLiBFYWNoIHRpbWUgdGhlIGVzY2FwZSBrZXkgaXMgdXNlZCwgdGhlIGZvY3VzIHdpbGxcbiAqIG1vdmUgdXAgaW4gdGhlIERPTSB0cmVlLlxuICpcbiAqL1xuQERpcmVjdGl2ZSgpIC8vIHNlbGVjdG9yOiAnW2N4RXNjRm9jdXNdJyxcbmV4cG9ydCBjbGFzcyBFc2NhcGVGb2N1c0RpcmVjdGl2ZVxuICBleHRlbmRzIFBlcnNpc3RGb2N1c0RpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBwcm90ZWN0ZWQgZGVmYXVsdENvbmZpZzogRXNjYXBlRm9jdXNDb25maWcgPSB7IGZvY3VzT25Fc2NhcGU6IHRydWUgfTtcblxuICAvLyBASW5wdXQoJ2N4RXNjRm9jdXMnKVxuICBwcm90ZWN0ZWQgY29uZmlnOiBFc2NhcGVGb2N1c0NvbmZpZztcblxuICBAT3V0cHV0KCkgZXNjID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBlc2NhcGUga2V5IGV2ZW50LlxuICAgKiBAcGFyYW0gZXZlbnQgdGhlIG5hdGl2ZSBrZXlib2FyZCBldmVudCB3aGljaCBjb250YWlucyB0aGUgZXNjYXBlIGtleWRvd24gZXZlbnRcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlRXNjYXBlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VydmljZS5zaG91bGRGb2N1cyh0aGlzLmNvbmZpZykpIHtcbiAgICAgIHRoaXMuc2VydmljZS5oYW5kbGVFc2NhcGUodGhpcy5ob3N0LCB0aGlzLmNvbmZpZywgZXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLmVzYy5lbWl0KHRoaXMuc2VydmljZS5zaG91bGRGb2N1cyh0aGlzLmNvbmZpZykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIHNlcnZpY2U6IEVzY2FwZUZvY3VzU2VydmljZVxuICApIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBzZXJ2aWNlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnNlcnZpY2Uuc2hvdWxkRm9jdXModGhpcy5jb25maWcpKSB7XG4gICAgICB0aGlzLnJlcXVpcmVkVGFiaW5kZXggPSAtMTtcbiAgICB9XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgfVxufVxuIl19