UNPKG

@ng-bootstrap/ng-bootstrap

Version:
53 lines 6.39 kB
import { inject, Injectable, InjectionToken } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import * as i0 from "@angular/core"; export const ARIA_LIVE_DELAY = new InjectionToken('live announcer delay', { providedIn: 'root', factory: () => 100, }); function getLiveElement(document, lazyCreate = false) { let element = document.body.querySelector('#ngb-live'); if (element == null && lazyCreate) { element = document.createElement('div'); element.setAttribute('id', 'ngb-live'); element.setAttribute('aria-live', 'polite'); element.setAttribute('aria-atomic', 'true'); element.classList.add('visually-hidden'); document.body.appendChild(element); } return element; } export class Live { constructor() { this._document = inject(DOCUMENT); this._delay = inject(ARIA_LIVE_DELAY); } ngOnDestroy() { const element = getLiveElement(this._document); if (element) { // if exists, it will always be attached to the <body> element.parentElement.removeChild(element); } } say(message) { const element = getLiveElement(this._document, true); const delay = this._delay; if (element != null) { element.textContent = ''; const setText = () => (element.textContent = message); if (delay === null) { setText(); } else { setTimeout(setText, delay); } } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: Live, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: Live, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0", ngImport: i0, type: Live, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy91dGlsL2FjY2Vzc2liaWxpdHkvbGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUUzQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQWdCLHNCQUFzQixFQUFFO0lBQ3hGLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0NBQ2xCLENBQUMsQ0FBQztBQUVILFNBQVMsY0FBYyxDQUFDLFFBQWEsRUFBRSxVQUFVLEdBQUcsS0FBSztJQUN4RCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQWdCLENBQUM7SUFFdEUsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtRQUNsQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1QyxPQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXpDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ25DO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDaEIsQ0FBQztBQUdELE1BQU0sT0FBTyxJQUFJO0lBRGpCO1FBRVMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixXQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBd0J6QztJQXRCQSxXQUFXO1FBQ1YsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQyxJQUFJLE9BQU8sRUFBRTtZQUNaLHNEQUFzRDtZQUN0RCxPQUFPLENBQUMsYUFBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1QztJQUNGLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBZTtRQUNsQixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTFCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtZQUNwQixPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDdEQsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO2dCQUNuQixPQUFPLEVBQUUsQ0FBQzthQUNWO2lCQUFNO2dCQUNOLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDM0I7U0FDRDtJQUNGLENBQUM7OEdBekJXLElBQUk7a0hBQUosSUFBSSxjQURTLE1BQU07OzJGQUNuQixJQUFJO2tCQURoQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgQVJJQV9MSVZFX0RFTEFZID0gbmV3IEluamVjdGlvblRva2VuPG51bWJlciB8IG51bGw+KCdsaXZlIGFubm91bmNlciBkZWxheScsIHtcblx0cHJvdmlkZWRJbjogJ3Jvb3QnLFxuXHRmYWN0b3J5OiAoKSA9PiAxMDAsXG59KTtcblxuZnVuY3Rpb24gZ2V0TGl2ZUVsZW1lbnQoZG9jdW1lbnQ6IGFueSwgbGF6eUNyZWF0ZSA9IGZhbHNlKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcblx0bGV0IGVsZW1lbnQgPSBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoJyNuZ2ItbGl2ZScpIGFzIEhUTUxFbGVtZW50O1xuXG5cdGlmIChlbGVtZW50ID09IG51bGwgJiYgbGF6eUNyZWF0ZSkge1xuXHRcdGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsICduZ2ItbGl2ZScpO1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnLCAncG9saXRlJyk7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYXRvbWljJywgJ3RydWUnKTtcblxuXHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndmlzdWFsbHktaGlkZGVuJyk7XG5cblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgX2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblx0cHJpdmF0ZSBfZGVsYXkgPSBpbmplY3QoQVJJQV9MSVZFX0RFTEFZKTtcblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHRjb25zdCBlbGVtZW50ID0gZ2V0TGl2ZUVsZW1lbnQodGhpcy5fZG9jdW1lbnQpO1xuXHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHQvLyBpZiBleGlzdHMsIGl0IHdpbGwgYWx3YXlzIGJlIGF0dGFjaGVkIHRvIHRoZSA8Ym9keT5cblx0XHRcdGVsZW1lbnQucGFyZW50RWxlbWVudCEucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0c2F5KG1lc3NhZ2U6IHN0cmluZykge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBnZXRMaXZlRWxlbWVudCh0aGlzLl9kb2N1bWVudCwgdHJ1ZSk7XG5cdFx0Y29uc3QgZGVsYXkgPSB0aGlzLl9kZWxheTtcblxuXHRcdGlmIChlbGVtZW50ICE9IG51bGwpIHtcblx0XHRcdGVsZW1lbnQudGV4dENvbnRlbnQgPSAnJztcblx0XHRcdGNvbnN0IHNldFRleHQgPSAoKSA9PiAoZWxlbWVudC50ZXh0Q29udGVudCA9IG1lc3NhZ2UpO1xuXHRcdFx0aWYgKGRlbGF5ID09PSBudWxsKSB7XG5cdFx0XHRcdHNldFRleHQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNldFRpbWVvdXQoc2V0VGV4dCwgZGVsYXkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl19