@spartacus/storefront
Version:
Spartacus Storefront is a package that you can include in your application, which allows you to add default storefront features.
49 lines • 6.38 kB
JavaScript
import { Injectable } from '@angular/core';
import { EscapeFocusService } from '../escape/escape-focus.service';
import { FOCUS_ATTR, } from '../keyboard-focus.model';
import * as i0 from "@angular/core";
export class AutoFocusService extends EscapeFocusService {
/**
* Returns the first focusable child element of the host element.
*/
findFirstFocusable(host, config = { autofocus: true }) {
if ((config === null || config === void 0 ? void 0 : config.autofocus) === ':host') {
return host;
}
else if (this.hasPersistedFocus(host, config)) {
return this.getPersisted(host, this.getPersistenceGroup(host, config));
}
else {
return this.selectFocusUtil.findFirstFocusable(host, config) || host;
}
}
/**
* Indicates whether any of the focusable child elements is focused.
*/
hasPersistedFocus(host, config) {
return !!this.getPersisted(host, this.getPersistenceGroup(host, config));
}
/**
* Returns the element that has a persisted focus state.
*
* @param host the `HTMLElement` used to query for focusable children
* @param group the optional group for the persistent state, to separate different focus
* groups and remain the persistence
*/
getPersisted(host, group) {
if (!this.get(group)) {
return;
}
const focussed = Array.from(host.querySelectorAll(`[${FOCUS_ATTR}='${this.get(group)}']`));
return focussed.length > 0 ? focussed[0] : null;
}
}
AutoFocusService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AutoFocusService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
AutoFocusService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AutoFocusService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AutoFocusService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1mb2N1cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RvcmVmcm9udGxpYi9sYXlvdXQvYTExeS9rZXlib2FyZC1mb2N1cy9hdXRvZm9jdXMvYXV0by1mb2N1cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUVMLFVBQVUsR0FFWCxNQUFNLHlCQUF5QixDQUFDOztBQUtqQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsa0JBQWtCO0lBQ3REOztPQUVHO0lBQ0gsa0JBQWtCLENBQ2hCLElBQWlCLEVBQ2pCLFNBQTBCLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtRQUU3QyxJQUFJLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsTUFBSyxPQUFPLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRTtZQUMvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN4RTthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxJQUFpQixFQUFFLE1BQTBCO1FBQzdELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sWUFBWSxDQUFDLElBQWlCLEVBQUUsS0FBYztRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQixPQUFPO1NBQ1I7UUFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQ25CLElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDWixDQUM3QixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEQsQ0FBQzs7NkdBekNVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXNjYXBlRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vZXNjYXBlL2VzY2FwZS1mb2N1cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEF1dG9Gb2N1c0NvbmZpZyxcbiAgRk9DVVNfQVRUUixcbiAgUGVyc2lzdEZvY3VzQ29uZmlnLFxufSBmcm9tICcuLi9rZXlib2FyZC1mb2N1cy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvRm9jdXNTZXJ2aWNlIGV4dGVuZHMgRXNjYXBlRm9jdXNTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IGZvY3VzYWJsZSBjaGlsZCBlbGVtZW50IG9mIHRoZSBob3N0IGVsZW1lbnQuXG4gICAqL1xuICBmaW5kRmlyc3RGb2N1c2FibGUoXG4gICAgaG9zdDogSFRNTEVsZW1lbnQsXG4gICAgY29uZmlnOiBBdXRvRm9jdXNDb25maWcgPSB7IGF1dG9mb2N1czogdHJ1ZSB9XG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBpZiAoY29uZmlnPy5hdXRvZm9jdXMgPT09ICc6aG9zdCcpIHtcbiAgICAgIHJldHVybiBob3N0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQZXJzaXN0ZWRGb2N1cyhob3N0LCBjb25maWcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQZXJzaXN0ZWQoaG9zdCwgdGhpcy5nZXRQZXJzaXN0ZW5jZUdyb3VwKGhvc3QsIGNvbmZpZykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RGb2N1c1V0aWwuZmluZEZpcnN0Rm9jdXNhYmxlKGhvc3QsIGNvbmZpZykgfHwgaG9zdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW55IG9mIHRoZSBmb2N1c2FibGUgY2hpbGQgZWxlbWVudHMgaXMgZm9jdXNlZC5cbiAgICovXG4gIGhhc1BlcnNpc3RlZEZvY3VzKGhvc3Q6IEhUTUxFbGVtZW50LCBjb25maWc6IFBlcnNpc3RGb2N1c0NvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0UGVyc2lzdGVkKGhvc3QsIHRoaXMuZ2V0UGVyc2lzdGVuY2VHcm91cChob3N0LCBjb25maWcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50IHRoYXQgaGFzIGEgcGVyc2lzdGVkIGZvY3VzIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0gaG9zdCB0aGUgYEhUTUxFbGVtZW50YCB1c2VkIHRvIHF1ZXJ5IGZvciBmb2N1c2FibGUgY2hpbGRyZW5cbiAgICogQHBhcmFtIGdyb3VwIHRoZSBvcHRpb25hbCBncm91cCBmb3IgdGhlIHBlcnNpc3RlbnQgc3RhdGUsIHRvIHNlcGFyYXRlIGRpZmZlcmVudCBmb2N1c1xuICAgKiAgIGdyb3VwcyBhbmQgcmVtYWluIHRoZSBwZXJzaXN0ZW5jZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFBlcnNpc3RlZChob3N0OiBIVE1MRWxlbWVudCwgZ3JvdXA/OiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gICAgaWYgKCF0aGlzLmdldChncm91cCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm9jdXNzZWQgPSBBcnJheS5mcm9tKFxuICAgICAgaG9zdC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgWyR7Rk9DVVNfQVRUUn09JyR7dGhpcy5nZXQoZ3JvdXApfSddYFxuICAgICAgKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PlxuICAgICk7XG4gICAgcmV0dXJuIGZvY3Vzc2VkLmxlbmd0aCA+IDAgPyBmb2N1c3NlZFswXSA6IG51bGw7XG4gIH1cbn1cbiJdfQ==