@skyux/indicators 8.7.0 → 9.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/lib/modules/alert/alert.component.mjs +56 -55
- package/{esm2020 → esm2022}/lib/modules/alert/alert.module.mjs +13 -13
- package/{esm2020 → esm2022}/lib/modules/chevron/chevron.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/chevron/chevron.module.mjs +13 -13
- package/{esm2020 → esm2022}/lib/modules/expansion-indicator/expansion-indicator.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/expansion-indicator/expansion-indicator.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/modules/help-inline/help-inline-aria-expanded.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/help-inline/help-inline.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/help-inline/help-inline.module.mjs +13 -13
- package/esm2022/lib/modules/icon/icon-class-list.pipe.mjs +35 -0
- package/esm2022/lib/modules/icon/icon-resolver.service.mjs +57 -0
- package/{esm2020 → esm2022}/lib/modules/icon/icon-stack.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/icon/icon.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/icon/icon.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/modules/key-info/key-info-label.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/key-info/key-info-value.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/key-info/key-info.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/modules/key-info/key-info.module.mjs +9 -9
- package/esm2022/lib/modules/label/label.component.mjs +118 -0
- package/{esm2020 → esm2022}/lib/modules/label/label.module.mjs +11 -11
- package/{esm2020 → esm2022}/lib/modules/shared/sky-indicators-resources.module.mjs +11 -11
- package/esm2022/lib/modules/status-indicator/status-indicator.component.mjs +104 -0
- package/{esm2020 → esm2022}/lib/modules/status-indicator/status-indicator.module.mjs +13 -13
- package/esm2022/lib/modules/text-highlight/text-highlight.directive.mjs +151 -0
- package/{esm2020 → esm2022}/lib/modules/text-highlight/text-highlight.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/modules/tokens/token.component.mjs +15 -15
- package/esm2022/lib/modules/tokens/tokens.component.mjs +332 -0
- package/{esm2020 → esm2022}/lib/modules/tokens/tokens.module.mjs +11 -11
- package/esm2022/lib/modules/wait/wait-adapter.service.mjs +224 -0
- package/{esm2020 → esm2022}/lib/modules/wait/wait-page.component.mjs +4 -4
- package/esm2022/lib/modules/wait/wait.component.mjs +171 -0
- package/{esm2020 → esm2022}/lib/modules/wait/wait.module.mjs +5 -5
- package/esm2022/lib/modules/wait/wait.service.mjs +159 -0
- package/esm2022/testing/alert/alert-harness.mjs +112 -0
- package/esm2022/testing/alert-fixture.mjs +70 -0
- package/esm2022/testing/chevron/chevron-harness.mjs +38 -0
- package/esm2022/testing/help-inline/help-inline-harness.mjs +25 -0
- package/esm2022/testing/icon/icon-harness.mjs +86 -0
- package/esm2022/testing/key-info/key-info-harness.mjs +43 -0
- package/{esm2020 → esm2022}/testing/key-info/key-info-label-harness.mjs +5 -5
- package/{esm2020 → esm2022}/testing/key-info/key-info-value-harness.mjs +5 -5
- package/esm2022/testing/label/label-harness.mjs +88 -0
- package/esm2022/testing/label-fixture.mjs +42 -0
- package/esm2022/testing/tokens/token-harness.mjs +63 -0
- package/esm2022/testing/tokens/tokens-harness.mjs +45 -0
- package/esm2022/testing/wait/wait-harness.mjs +60 -0
- package/esm2022/testing/wait-fixture.mjs +28 -0
- package/{fesm2020 → fesm2022}/skyux-indicators-testing.mjs +146 -190
- package/{fesm2020 → fesm2022}/skyux-indicators-testing.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/skyux-indicators.mjs +756 -737
- package/fesm2022/skyux-indicators.mjs.map +1 -0
- package/lib/modules/alert/alert.component.d.ts +1 -1
- package/lib/modules/chevron/chevron.component.d.ts +1 -1
- package/lib/modules/expansion-indicator/expansion-indicator.component.d.ts +1 -1
- package/lib/modules/help-inline/help-inline.component.d.ts +1 -1
- package/lib/modules/icon/icon-stack.component.d.ts +1 -1
- package/lib/modules/icon/icon.component.d.ts +1 -1
- package/lib/modules/key-info/key-info.component.d.ts +1 -1
- package/lib/modules/label/label.component.d.ts +1 -1
- package/lib/modules/status-indicator/status-indicator.component.d.ts +1 -1
- package/lib/modules/text-highlight/text-highlight.directive.d.ts +1 -1
- package/lib/modules/tokens/token.component.d.ts +1 -1
- package/lib/modules/tokens/tokens.component.d.ts +1 -1
- package/lib/modules/wait/wait-page.component.d.ts +1 -1
- package/lib/modules/wait/wait.component.d.ts +1 -1
- package/package.json +17 -25
- package/esm2020/lib/modules/icon/icon-class-list.pipe.mjs +0 -40
- package/esm2020/lib/modules/icon/icon-resolver.service.mjs +0 -60
- package/esm2020/lib/modules/label/label.component.mjs +0 -116
- package/esm2020/lib/modules/status-indicator/status-indicator.component.mjs +0 -104
- package/esm2020/lib/modules/text-highlight/text-highlight.directive.mjs +0 -154
- package/esm2020/lib/modules/tokens/tokens.component.mjs +0 -320
- package/esm2020/lib/modules/wait/wait-adapter.service.mjs +0 -221
- package/esm2020/lib/modules/wait/wait.component.mjs +0 -167
- package/esm2020/lib/modules/wait/wait.service.mjs +0 -161
- package/esm2020/testing/alert/alert-harness.mjs +0 -118
- package/esm2020/testing/alert-fixture.mjs +0 -72
- package/esm2020/testing/chevron/chevron-harness.mjs +0 -44
- package/esm2020/testing/help-inline/help-inline-harness.mjs +0 -31
- package/esm2020/testing/icon/icon-harness.mjs +0 -90
- package/esm2020/testing/key-info/key-info-harness.mjs +0 -49
- package/esm2020/testing/label/label-harness.mjs +0 -94
- package/esm2020/testing/label-fixture.mjs +0 -45
- package/esm2020/testing/tokens/token-harness.mjs +0 -69
- package/esm2020/testing/tokens/tokens-harness.mjs +0 -45
- package/esm2020/testing/wait/wait-harness.mjs +0 -66
- package/esm2020/testing/wait-fixture.mjs +0 -31
- package/fesm2015/skyux-indicators-testing.mjs +0 -854
- package/fesm2015/skyux-indicators-testing.mjs.map +0 -1
- package/fesm2015/skyux-indicators.mjs +0 -2172
- package/fesm2015/skyux-indicators.mjs.map +0 -1
- package/fesm2020/skyux-indicators.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/icon/icon-stack-item.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/icon/types/icon-resolved.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/icon/types/icon-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/icon/types/icon-variant-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/key-info/key-info-layout-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/label/label-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/shared/indicator-description-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/shared/indicator-icon-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/shared/indicator-icon-utility.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/shared/indicator-icon.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/tokens/types/token-selected-event-args.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/tokens/types/token.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/tokens/types/tokens-message-type.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/modules/tokens/types/tokens-message.mjs +0 -0
- /package/{esm2020 → esm2022}/skyux-indicators.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/alert/alert-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/help-inline/help-inline-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/icon/icon-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/key-info/key-info-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/label/label-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/skyux-indicators-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/tokens/token-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/tokens/tokens-harness-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/wait/wait-harness-filters.mjs +0 -0
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
var _SkyWaitAdapterService_instances, _SkyWaitAdapterService_focusableElements, _SkyWaitAdapterService_renderer, _SkyWaitAdapterService_focusNextElement, _SkyWaitAdapterService_isShift, _SkyWaitAdapterService_isElementHidden, _SkyWaitAdapterService_isElementBusyOrHidden, _SkyWaitAdapterService_clearDocumentFocus, _SkyWaitAdapterService_getFocusableElements, _SkyWaitAdapterService_clearListeners;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { Injectable, } from '@angular/core';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
const busyElements = {};
|
|
6
|
-
// Need to add the following to classes which contain static methods.
|
|
7
|
-
// See: https://github.com/ng-packagr/ng-packagr/issues/641
|
|
8
|
-
/**
|
|
9
|
-
* @internal
|
|
10
|
-
* @dynamic
|
|
11
|
-
*/
|
|
12
|
-
export class SkyWaitAdapterService {
|
|
13
|
-
constructor(rendererFactory) {
|
|
14
|
-
_SkyWaitAdapterService_instances.add(this);
|
|
15
|
-
_SkyWaitAdapterService_focusableElements.set(this, void 0);
|
|
16
|
-
_SkyWaitAdapterService_renderer.set(this, void 0);
|
|
17
|
-
__classPrivateFieldSet(this, _SkyWaitAdapterService_renderer, rendererFactory.createRenderer(undefined, null), "f");
|
|
18
|
-
}
|
|
19
|
-
ngOnDestroy() {
|
|
20
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearListeners).call(this);
|
|
21
|
-
}
|
|
22
|
-
setWaitBounds(waitEl) {
|
|
23
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").setStyle(waitEl.nativeElement.parentElement, 'position', 'relative');
|
|
24
|
-
}
|
|
25
|
-
removeWaitBounds(waitEl) {
|
|
26
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").removeStyle(waitEl.nativeElement.parentElement, 'position');
|
|
27
|
-
}
|
|
28
|
-
setBusyState(waitEl, isFullPage, isWaiting, isNonBlocking, waitComponentId) {
|
|
29
|
-
const busyEl = isFullPage
|
|
30
|
-
? document.body
|
|
31
|
-
: waitEl.nativeElement.parentElement;
|
|
32
|
-
if (!isNonBlocking) {
|
|
33
|
-
if (isWaiting) {
|
|
34
|
-
let restoreFocusElement = undefined;
|
|
35
|
-
let restoreFocusCheckElement = undefined;
|
|
36
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").setAttribute(busyEl, 'aria-busy', 'true');
|
|
37
|
-
// Remove focus from page when full page blocking wait
|
|
38
|
-
if (isFullPage || busyEl.contains(document.activeElement)) {
|
|
39
|
-
if (document.activeElement !== document.body) {
|
|
40
|
-
restoreFocusElement = document.activeElement;
|
|
41
|
-
}
|
|
42
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
|
|
43
|
-
restoreFocusCheckElement = document.activeElement;
|
|
44
|
-
}
|
|
45
|
-
if (isFullPage) {
|
|
46
|
-
SkyWaitAdapterService.isPageWaitActive = true;
|
|
47
|
-
const endListenerFunc = __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").listen(document.body, 'keydown', (event) => {
|
|
48
|
-
/*istanbul ignore else */
|
|
49
|
-
if (event.key) {
|
|
50
|
-
/* istanbul ignore else */
|
|
51
|
-
if (event.key.toLowerCase() === 'tab') {
|
|
52
|
-
event.target.blur();
|
|
53
|
-
event.preventDefault();
|
|
54
|
-
event.stopPropagation();
|
|
55
|
-
event.stopImmediatePropagation();
|
|
56
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
if (waitComponentId) {
|
|
61
|
-
busyElements[waitComponentId] = {
|
|
62
|
-
listener: endListenerFunc,
|
|
63
|
-
busyEl: undefined,
|
|
64
|
-
restoreFocusElement,
|
|
65
|
-
restoreFocusCheckElement,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
const endListenerFunc = __classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").listen(busyEl, 'focusin', (event) => {
|
|
71
|
-
/* istanbul ignore else */
|
|
72
|
-
if (!isNonBlocking) {
|
|
73
|
-
event.preventDefault();
|
|
74
|
-
event.stopPropagation();
|
|
75
|
-
event.stopImmediatePropagation();
|
|
76
|
-
if (SkyWaitAdapterService.isPageWaitActive) {
|
|
77
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
// Propagate tab navigation if attempted into waited element
|
|
81
|
-
const target = event.target;
|
|
82
|
-
if (target) {
|
|
83
|
-
target.blur();
|
|
84
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_focusNextElement).call(this, target, __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isShift).call(this, event));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
if (waitComponentId) {
|
|
90
|
-
busyElements[waitComponentId] = {
|
|
91
|
-
listener: endListenerFunc,
|
|
92
|
-
busyEl,
|
|
93
|
-
restoreFocusElement,
|
|
94
|
-
restoreFocusCheckElement,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_renderer, "f").removeAttribute(busyEl, 'aria-busy');
|
|
101
|
-
if (isFullPage) {
|
|
102
|
-
SkyWaitAdapterService.isPageWaitActive = false;
|
|
103
|
-
}
|
|
104
|
-
if (waitComponentId && waitComponentId in busyElements) {
|
|
105
|
-
const busyElement = busyElements[waitComponentId];
|
|
106
|
-
busyElement.listener();
|
|
107
|
-
// If there is a restore focus element and the focus has not moved, restore focus.
|
|
108
|
-
if (busyElement.restoreFocusCheckElement === document.activeElement) {
|
|
109
|
-
busyElement.restoreFocusElement?.focus();
|
|
110
|
-
}
|
|
111
|
-
delete busyElements[waitComponentId];
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
_SkyWaitAdapterService_focusableElements = new WeakMap(), _SkyWaitAdapterService_renderer = new WeakMap(), _SkyWaitAdapterService_instances = new WeakSet(), _SkyWaitAdapterService_focusNextElement = function _SkyWaitAdapterService_focusNextElement(targetElement, shiftKey) {
|
|
118
|
-
const focusable = __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_getFocusableElements).call(this);
|
|
119
|
-
// If shift tab, go in the other direction
|
|
120
|
-
const modifier = shiftKey ? -1 : 1;
|
|
121
|
-
// Find the next navigable element that isn't waiting
|
|
122
|
-
const startingIndex = focusable.indexOf(targetElement);
|
|
123
|
-
let curIndex = startingIndex + modifier;
|
|
124
|
-
while (focusable[curIndex] &&
|
|
125
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
|
|
126
|
-
curIndex += modifier;
|
|
127
|
-
}
|
|
128
|
-
if (focusable[curIndex] &&
|
|
129
|
-
!__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
|
|
130
|
-
focusable[curIndex].focus();
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// Try wrapping the navigation
|
|
134
|
-
/* istanbul ignore next */
|
|
135
|
-
/* sanity check */
|
|
136
|
-
curIndex = modifier > 0 ? 0 : focusable.length - 1;
|
|
137
|
-
while (curIndex !== startingIndex &&
|
|
138
|
-
focusable[curIndex] &&
|
|
139
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
|
|
140
|
-
/* istanbul ignore next */
|
|
141
|
-
/* sanity check */
|
|
142
|
-
curIndex += modifier;
|
|
143
|
-
}
|
|
144
|
-
/* istanbul ignore else */
|
|
145
|
-
/* sanity check */
|
|
146
|
-
if (focusable[curIndex] &&
|
|
147
|
-
!__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementBusyOrHidden).call(this, focusable[curIndex])) {
|
|
148
|
-
focusable[curIndex].focus();
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
// No valid target, wipe focus
|
|
152
|
-
__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_clearDocumentFocus).call(this);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
// clear focusableElements list
|
|
156
|
-
__classPrivateFieldSet(this, _SkyWaitAdapterService_focusableElements, undefined, "f");
|
|
157
|
-
}, _SkyWaitAdapterService_isShift = function _SkyWaitAdapterService_isShift(event) {
|
|
158
|
-
// Determine if shift+tab was used based on element order
|
|
159
|
-
const elements = __classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_getFocusableElements).call(this).filter((elem) => !__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementHidden).call(this, elem));
|
|
160
|
-
const previousInd = elements.indexOf(event.relatedTarget);
|
|
161
|
-
const currentInd = elements.indexOf(event.target);
|
|
162
|
-
return (previousInd === currentInd + 1 ||
|
|
163
|
-
(previousInd === 0 && currentInd === elements.length - 1) ||
|
|
164
|
-
previousInd > currentInd ||
|
|
165
|
-
!event.relatedTarget);
|
|
166
|
-
}, _SkyWaitAdapterService_isElementHidden = function _SkyWaitAdapterService_isElementHidden(element) {
|
|
167
|
-
const style = window.getComputedStyle(element);
|
|
168
|
-
return style.display === 'none' || style.visibility === 'hidden';
|
|
169
|
-
}, _SkyWaitAdapterService_isElementBusyOrHidden = function _SkyWaitAdapterService_isElementBusyOrHidden(element) {
|
|
170
|
-
if (__classPrivateFieldGet(this, _SkyWaitAdapterService_instances, "m", _SkyWaitAdapterService_isElementHidden).call(this, element)) {
|
|
171
|
-
return true;
|
|
172
|
-
}
|
|
173
|
-
for (const key of Object.keys(busyElements)) {
|
|
174
|
-
const parentElement = busyElements[key].busyEl;
|
|
175
|
-
if (parentElement && parentElement.contains(element)) {
|
|
176
|
-
return true;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return false;
|
|
180
|
-
}, _SkyWaitAdapterService_clearDocumentFocus = function _SkyWaitAdapterService_clearDocumentFocus() {
|
|
181
|
-
const activeElement = document.activeElement;
|
|
182
|
-
/* istanbul ignore else */
|
|
183
|
-
if (activeElement) {
|
|
184
|
-
activeElement.blur();
|
|
185
|
-
}
|
|
186
|
-
document.body.focus();
|
|
187
|
-
}, _SkyWaitAdapterService_getFocusableElements = function _SkyWaitAdapterService_getFocusableElements() {
|
|
188
|
-
// Keep this cached so we can reduce queries
|
|
189
|
-
if (__classPrivateFieldGet(this, _SkyWaitAdapterService_focusableElements, "f")) {
|
|
190
|
-
return __classPrivateFieldGet(this, _SkyWaitAdapterService_focusableElements, "f");
|
|
191
|
-
}
|
|
192
|
-
// Select all possible focusable elements
|
|
193
|
-
const focusableElements = 'a[href], ' +
|
|
194
|
-
'area[href], ' +
|
|
195
|
-
"input:not([disabled]):not([tabindex='-1']), " +
|
|
196
|
-
"button:not([disabled]):not([tabindex='-1']), " +
|
|
197
|
-
"select:not([disabled]):not([tabindex='-1']), " +
|
|
198
|
-
"textarea:not([disabled]):not([tabindex='-1']), " +
|
|
199
|
-
'iframe, object, embed, ' +
|
|
200
|
-
"*[tabindex]:not([tabindex='-1']), " +
|
|
201
|
-
'*[contenteditable=true]';
|
|
202
|
-
__classPrivateFieldSet(this, _SkyWaitAdapterService_focusableElements, Array.prototype.filter.call(document.body.querySelectorAll(focusableElements), (element) => {
|
|
203
|
-
return (element.offsetWidth > 0 ||
|
|
204
|
-
element.offsetHeight > 0 ||
|
|
205
|
-
element === document.activeElement);
|
|
206
|
-
}), "f");
|
|
207
|
-
return __classPrivateFieldGet(this, _SkyWaitAdapterService_focusableElements, "f");
|
|
208
|
-
}, _SkyWaitAdapterService_clearListeners = function _SkyWaitAdapterService_clearListeners() {
|
|
209
|
-
SkyWaitAdapterService.isPageWaitActive = false;
|
|
210
|
-
for (const key of Object.keys(busyElements)) {
|
|
211
|
-
busyElements[key].listener();
|
|
212
|
-
delete busyElements[key];
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
SkyWaitAdapterService.isPageWaitActive = false;
|
|
216
|
-
SkyWaitAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyWaitAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
217
|
-
SkyWaitAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyWaitAdapterService });
|
|
218
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyWaitAdapterService, decorators: [{
|
|
219
|
-
type: Injectable
|
|
220
|
-
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvaW5kaWNhdG9ycy9zcmMvbGliL21vZHVsZXMvd2FpdC93YWl0LWFkYXB0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxVQUFVLEdBSVgsTUFBTSxlQUFlLENBQUM7O0FBRXZCLE1BQU0sWUFBWSxHQU9kLEVBQUUsQ0FBQztBQUVQLHFFQUFxRTtBQUNyRSwyREFBMkQ7QUFDM0Q7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQU1oQyxZQUFZLGVBQWlDOztRQUg3QywyREFBOEM7UUFDOUMsa0RBQXFCO1FBR25CLHVCQUFBLElBQUksbUNBQWEsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQUEsQ0FBQztJQUNuRSxDQUFDO0lBRU0sV0FBVztRQUNoQix1QkFBQSxJQUFJLCtFQUFnQixNQUFwQixJQUFJLENBQWtCLENBQUM7SUFDekIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUFrQjtRQUNyQyx1QkFBQSxJQUFJLHVDQUFVLENBQUMsUUFBUSxDQUNyQixNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFDbEMsVUFBVSxFQUNWLFVBQVUsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVNLGdCQUFnQixDQUFDLE1BQWtCO1FBQ3hDLHVCQUFBLElBQUksdUNBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLFlBQVksQ0FDakIsTUFBa0IsRUFDbEIsVUFBbUIsRUFDbkIsU0FBa0IsRUFDbEIsYUFBc0IsRUFDdEIsZUFBd0I7UUFFeEIsTUFBTSxNQUFNLEdBQUcsVUFBVTtZQUN2QixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDZixD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Q0FBQyxHQUFHLENBQUMsQ0FBQztLQUMxQjtBQUNILENBQUM7QUFsUmEsc0NBQWdCLEdBQUcsS0FBSyxDQUFDO2tIQUQ1QixxQkFBcUI7c0hBQXJCLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBidXN5RWxlbWVudHM6IHtcbiAgW2tleTogc3RyaW5nXToge1xuICAgIGJ1c3lFbDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgbGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gICAgcmVzdG9yZUZvY3VzRWxlbWVudD86IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIHJlc3RvcmVGb2N1c0NoZWNrRWxlbWVudD86IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICB9O1xufSA9IHt9O1xuXG4vLyBOZWVkIHRvIGFkZCB0aGUgZm9sbG93aW5nIHRvIGNsYXNzZXMgd2hpY2ggY29udGFpbiBzdGF0aWMgbWV0aG9kcy5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25nLXBhY2thZ3IvbmctcGFja2Fnci9pc3N1ZXMvNjQxXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGR5bmFtaWNcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVdhaXRBZGFwdGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBzdGF0aWMgaXNQYWdlV2FpdEFjdGl2ZSA9IGZhbHNlO1xuXG4gICNmb2N1c2FibGVFbGVtZW50czogSFRNTEVsZW1lbnRbXSB8IHVuZGVmaW5lZDtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgY29uc3RydWN0b3IocmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyKSB7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIodW5kZWZpbmVkLCBudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNjbGVhckxpc3RlbmVycygpO1xuICB9XG5cbiAgcHVibGljIHNldFdhaXRCb3VuZHMod2FpdEVsOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy4jcmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB3YWl0RWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LFxuICAgICAgJ3Bvc2l0aW9uJyxcbiAgICAgICdyZWxhdGl2ZSdcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVdhaXRCb3VuZHMod2FpdEVsOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlU3R5bGUod2FpdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCwgJ3Bvc2l0aW9uJyk7XG4gIH1cblxuICBwdWJsaWMgc2V0QnVzeVN0YXRlKFxuICAgIHdhaXRFbDogRWxlbWVudFJlZixcbiAgICBpc0Z1bGxQYWdlOiBib29sZWFuLFxuICAgIGlzV2FpdGluZzogYm9vbGVhbixcbiAgICBpc05vbkJsb2NraW5nOiBib29sZWFuLFxuICAgIHdhaXRDb21wb25lbnRJZD86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBidXN5RWwgPSBpc0Z1bGxQYWdlXG4gICAgICA/IGRvY3VtZW50LmJvZHlcbiAgICAgIDogd2FpdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgIGlmICghaXNOb25CbG9ja2luZykge1xuICAgICAgaWYgKGlzV2FpdGluZykge1xuICAgICAgICBsZXQgcmVzdG9yZUZvY3VzRWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCByZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiNyZW5kZXJlci5zZXRBdHRyaWJ1dGUoYnVzeUVsLCAnYXJpYS1idXN5JywgJ3RydWUnKTtcblxuICAgICAgICAvLyBSZW1vdmUgZm9jdXMgZnJvbSBwYWdlIHdoZW4gZnVsbCBwYWdlIGJsb2NraW5nIHdhaXRcbiAgICAgICAgaWYgKGlzRnVsbFBhZ2UgfHwgYnVzeUVsLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1c0VsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLiNjbGVhckRvY3VtZW50Rm9jdXMoKTtcbiAgICAgICAgICByZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRnVsbFBhZ2UpIHtcbiAgICAgICAgICBTa3lXYWl0QWRhcHRlclNlcnZpY2UuaXNQYWdlV2FpdEFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgY29uc3QgZW5kTGlzdGVuZXJGdW5jID0gdGhpcy4jcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keSxcbiAgICAgICAgICAgICdrZXlkb3duJyxcbiAgICAgICAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgIGlmIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgdGhpcy4jY2xlYXJEb2N1bWVudEZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICh3YWl0Q29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgIGJ1c3lFbGVtZW50c1t3YWl0Q29tcG9uZW50SWRdID0ge1xuICAgICAgICAgICAgICBsaXN0ZW5lcjogZW5kTGlzdGVuZXJGdW5jLFxuICAgICAgICAgICAgICBidXN5RWw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzRWxlbWVudCxcbiAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzQ2hlY2tFbGVtZW50LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZW5kTGlzdGVuZXJGdW5jID0gdGhpcy4jcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgYnVzeUVsLFxuICAgICAgICAgICAgJ2ZvY3VzaW4nLFxuICAgICAgICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICAgIGlmICghaXNOb25CbG9ja2luZykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmlzUGFnZVdhaXRBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuI2NsZWFyRG9jdW1lbnRGb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGUgdGFiIG5hdmlnYXRpb24gaWYgYXR0ZW1wdGVkIGludG8gd2FpdGVkIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYmx1cigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmb2N1c05leHRFbGVtZW50KHRhcmdldCwgdGhpcy4jaXNTaGlmdChldmVudCkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAod2FpdENvbXBvbmVudElkKSB7XG4gICAgICAgICAgICBidXN5RWxlbWVudHNbd2FpdENvbXBvbmVudElkXSA9IHtcbiAgICAgICAgICAgICAgbGlzdGVuZXI6IGVuZExpc3RlbmVyRnVuYyxcbiAgICAgICAgICAgICAgYnVzeUVsLFxuICAgICAgICAgICAgICByZXN0b3JlRm9jdXNFbGVtZW50LFxuICAgICAgICAgICAgICByZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGJ1c3lFbCwgJ2FyaWEtYnVzeScpO1xuXG4gICAgICAgIGlmIChpc0Z1bGxQYWdlKSB7XG4gICAgICAgICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmlzUGFnZVdhaXRBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3YWl0Q29tcG9uZW50SWQgJiYgd2FpdENvbXBvbmVudElkIGluIGJ1c3lFbGVtZW50cykge1xuICAgICAgICAgIGNvbnN0IGJ1c3lFbGVtZW50ID0gYnVzeUVsZW1lbnRzW3dhaXRDb21wb25lbnRJZF07XG5cbiAgICAgICAgICBidXN5RWxlbWVudC5saXN0ZW5lcigpO1xuXG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZXN0b3JlIGZvY3VzIGVsZW1lbnQgYW5kIHRoZSBmb2N1cyBoYXMgbm90IG1vdmVkLCByZXN0b3JlIGZvY3VzLlxuICAgICAgICAgIGlmIChidXN5RWxlbWVudC5yZXN0b3JlRm9jdXNDaGVja0VsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGJ1c3lFbGVtZW50LnJlc3RvcmVGb2N1c0VsZW1lbnQ/LmZvY3VzKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVsZXRlIGJ1c3lFbGVtZW50c1t3YWl0Q29tcG9uZW50SWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2ZvY3VzTmV4dEVsZW1lbnQodGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQsIHNoaWZ0S2V5OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZm9jdXNhYmxlID0gdGhpcy4jZ2V0Rm9jdXNhYmxlRWxlbWVudHMoKTtcblxuICAgIC8vIElmIHNoaWZ0IHRhYiwgZ28gaW4gdGhlIG90aGVyIGRpcmVjdGlvblxuICAgIGNvbnN0IG1vZGlmaWVyID0gc2hpZnRLZXkgPyAtMSA6IDE7XG5cbiAgICAvLyBGaW5kIHRoZSBuZXh0IG5hdmlnYWJsZSBlbGVtZW50IHRoYXQgaXNuJ3Qgd2FpdGluZ1xuICAgIGNvbnN0IHN0YXJ0aW5nSW5kZXggPSBmb2N1c2FibGUuaW5kZXhPZih0YXJnZXRFbGVtZW50KTtcbiAgICBsZXQgY3VySW5kZXggPSBzdGFydGluZ0luZGV4ICsgbW9kaWZpZXI7XG4gICAgd2hpbGUgKFxuICAgICAgZm9jdXNhYmxlW2N1ckluZGV4XSAmJlxuICAgICAgdGhpcy4jaXNFbGVtZW50QnVzeU9ySGlkZGVuKGZvY3VzYWJsZVtjdXJJbmRleF0pXG4gICAgKSB7XG4gICAgICBjdXJJbmRleCArPSBtb2RpZmllcjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmb2N1c2FibGVbY3VySW5kZXhdICYmXG4gICAgICAhdGhpcy4jaXNFbGVtZW50QnVzeU9ySGlkZGVuKGZvY3VzYWJsZVtjdXJJbmRleF0pXG4gICAgKSB7XG4gICAgICBmb2N1c2FibGVbY3VySW5kZXhdLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyeSB3cmFwcGluZyB0aGUgbmF2aWdhdGlvblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgY3VySW5kZXggPSBtb2RpZmllciA+IDAgPyAwIDogZm9jdXNhYmxlLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIGN1ckluZGV4ICE9PSBzdGFydGluZ0luZGV4ICYmXG4gICAgICAgIGZvY3VzYWJsZVtjdXJJbmRleF0gJiZcbiAgICAgICAgdGhpcy4jaXNFbGVtZW50QnVzeU9ySGlkZGVuKGZvY3VzYWJsZVtjdXJJbmRleF0pXG4gICAgICApIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICAgIGN1ckluZGV4ICs9IG1vZGlmaWVyO1xuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICBpZiAoXG4gICAgICAgIGZvY3VzYWJsZVtjdXJJbmRleF0gJiZcbiAgICAgICAgIXRoaXMuI2lzRWxlbWVudEJ1c3lPckhpZGRlbihmb2N1c2FibGVbY3VySW5kZXhdKVxuICAgICAgKSB7XG4gICAgICAgIGZvY3VzYWJsZVtjdXJJbmRleF0uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vIHZhbGlkIHRhcmdldCwgd2lwZSBmb2N1c1xuICAgICAgICB0aGlzLiNjbGVhckRvY3VtZW50Rm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjbGVhciBmb2N1c2FibGVFbGVtZW50cyBsaXN0XG4gICAgdGhpcy4jZm9jdXNhYmxlRWxlbWVudHMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAjaXNTaGlmdChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICAvLyBEZXRlcm1pbmUgaWYgc2hpZnQrdGFiIHdhcyB1c2VkIGJhc2VkIG9uIGVsZW1lbnQgb3JkZXJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuI2dldEZvY3VzYWJsZUVsZW1lbnRzKCkuZmlsdGVyKFxuICAgICAgKGVsZW0pID0+ICF0aGlzLiNpc0VsZW1lbnRIaWRkZW4oZWxlbSlcbiAgICApO1xuXG4gICAgY29uc3QgcHJldmlvdXNJbmQgPSBlbGVtZW50cy5pbmRleE9mKChldmVudCBhcyBhbnkpLnJlbGF0ZWRUYXJnZXQpO1xuICAgIGNvbnN0IGN1cnJlbnRJbmQgPSBlbGVtZW50cy5pbmRleE9mKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgcHJldmlvdXNJbmQgPT09IGN1cnJlbnRJbmQgKyAxIHx8XG4gICAgICAocHJldmlvdXNJbmQgPT09IDAgJiYgY3VycmVudEluZCA9PT0gZWxlbWVudHMubGVuZ3RoIC0gMSkgfHxcbiAgICAgIHByZXZpb3VzSW5kID4gY3VycmVudEluZCB8fFxuICAgICAgIShldmVudCBhcyBhbnkpLnJlbGF0ZWRUYXJnZXRcbiAgICApO1xuICB9XG5cbiAgI2lzRWxlbWVudEhpZGRlbihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgcmV0dXJuIHN0eWxlLmRpc3BsYXkgPT09ICdub25lJyB8fCBzdHlsZS52aXNpYmlsaXR5ID09PSAnaGlkZGVuJztcbiAgfVxuXG4gICNpc0VsZW1lbnRCdXN5T3JIaWRkZW4oZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy4jaXNFbGVtZW50SGlkZGVuKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhidXN5RWxlbWVudHMpKSB7XG4gICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gYnVzeUVsZW1lbnRzW2tleV0uYnVzeUVsO1xuICAgICAgaWYgKHBhcmVudEVsZW1lbnQgJiYgcGFyZW50RWxlbWVudC5jb250YWlucyhlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgI2NsZWFyRG9jdW1lbnRGb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cblxuICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgfVxuXG4gICNnZXRGb2N1c2FibGVFbGVtZW50cygpOiBIVE1MRWxlbWVudFtdIHtcbiAgICAvLyBLZWVwIHRoaXMgY2FjaGVkIHNvIHdlIGNhbiByZWR1Y2UgcXVlcmllc1xuICAgIGlmICh0aGlzLiNmb2N1c2FibGVFbGVtZW50cykge1xuICAgICAgcmV0dXJuIHRoaXMuI2ZvY3VzYWJsZUVsZW1lbnRzO1xuICAgIH1cblxuICAgIC8vIFNlbGVjdCBhbGwgcG9zc2libGUgZm9jdXNhYmxlIGVsZW1lbnRzXG4gICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPVxuICAgICAgJ2FbaHJlZl0sICcgK1xuICAgICAgJ2FyZWFbaHJlZl0sICcgK1xuICAgICAgXCJpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD0nLTEnXSksIFwiICtcbiAgICAgIFwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSctMSddKSwgXCIgK1xuICAgICAgXCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Jy0xJ10pLCBcIiArXG4gICAgICBcInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSctMSddKSwgXCIgK1xuICAgICAgJ2lmcmFtZSwgb2JqZWN0LCBlbWJlZCwgJyArXG4gICAgICBcIipbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9Jy0xJ10pLCBcIiArXG4gICAgICAnKltjb250ZW50ZWRpdGFibGU9dHJ1ZV0nO1xuXG4gICAgdGhpcy4jZm9jdXNhYmxlRWxlbWVudHMgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoXG4gICAgICBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoZm9jdXNhYmxlRWxlbWVudHMpLFxuICAgICAgKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgfHxcbiAgICAgICAgICBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgfHxcbiAgICAgICAgICBlbGVtZW50ID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy4jZm9jdXNhYmxlRWxlbWVudHM7XG4gIH1cblxuICAjY2xlYXJMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlLmlzUGFnZVdhaXRBY3RpdmUgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhidXN5RWxlbWVudHMpKSB7XG4gICAgICBidXN5RWxlbWVudHNba2V5XS5saXN0ZW5lcigpO1xuICAgICAgZGVsZXRlIGJ1c3lFbGVtZW50c1trZXldO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
var _SkyWaitComponent_instances, _SkyWaitComponent_customAriaLabel, _SkyWaitComponent_customScreenReaderCompletedText, _SkyWaitComponent_id, _SkyWaitComponent_elRef, _SkyWaitComponent_adapterService, _SkyWaitComponent_liveAnnouncer, _SkyWaitComponent_resourceSvc, _SkyWaitComponent_ngUnsubscribe, _SkyWaitComponent__isFullPage, _SkyWaitComponent__isNonBlocking, _SkyWaitComponent__isWaiting, _SkyWaitComponent_publishAriaLabel, _SkyWaitComponent_publishScreenReaderCompletedText;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { Component, ElementRef, Input, inject, } from '@angular/core';
|
|
4
|
-
import { SkyLiveAnnouncerService } from '@skyux/core';
|
|
5
|
-
import { SkyLibResourcesService } from '@skyux/i18n';
|
|
6
|
-
import { BehaviorSubject, Subject } from 'rxjs';
|
|
7
|
-
import { take, takeUntil } from 'rxjs/operators';
|
|
8
|
-
import { SkyWaitAdapterService } from './wait-adapter.service';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/common";
|
|
11
|
-
let nextId = 0;
|
|
12
|
-
export class SkyWaitComponent {
|
|
13
|
-
constructor() {
|
|
14
|
-
_SkyWaitComponent_instances.add(this);
|
|
15
|
-
this.ariaLabelStream = new BehaviorSubject('');
|
|
16
|
-
this.ariaLiveText = '';
|
|
17
|
-
this.screenReaderCompletedTextStream = new BehaviorSubject('');
|
|
18
|
-
_SkyWaitComponent_customAriaLabel.set(this, void 0);
|
|
19
|
-
_SkyWaitComponent_customScreenReaderCompletedText.set(this, void 0);
|
|
20
|
-
_SkyWaitComponent_id.set(this, `sky-wait-${++nextId}`);
|
|
21
|
-
_SkyWaitComponent_elRef.set(this, inject(ElementRef));
|
|
22
|
-
_SkyWaitComponent_adapterService.set(this, inject(SkyWaitAdapterService));
|
|
23
|
-
_SkyWaitComponent_liveAnnouncer.set(this, inject(SkyLiveAnnouncerService));
|
|
24
|
-
_SkyWaitComponent_resourceSvc.set(this, inject(SkyLibResourcesService));
|
|
25
|
-
_SkyWaitComponent_ngUnsubscribe.set(this, new Subject());
|
|
26
|
-
_SkyWaitComponent__isFullPage.set(this, void 0);
|
|
27
|
-
_SkyWaitComponent__isNonBlocking.set(this, void 0);
|
|
28
|
-
_SkyWaitComponent__isWaiting.set(this, void 0);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* The ARIA label for the wait icon.
|
|
32
|
-
* This sets the icon's `aria-label` attribute to provide a text equivalent for screen readers
|
|
33
|
-
* [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility) when an element or page loads and when users tab to a wait icon.
|
|
34
|
-
* The default value varies based on whether the wait is for an element or a page and whether it is a blocking wait. For example, the default for a page-level blocking wait is "Page loading. Please wait."
|
|
35
|
-
* For element-level waits, we recommend that consumers overwrite the default to describe the specific element.
|
|
36
|
-
* "For more information, see the Design tab and the [WAI-ARIA `aria-label` definition](https://www.w3.org/TR/wai-aria/#aria-label).
|
|
37
|
-
*/
|
|
38
|
-
set ariaLabel(value) {
|
|
39
|
-
__classPrivateFieldSet(this, _SkyWaitComponent_customAriaLabel, value, "f");
|
|
40
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_instances, "m", _SkyWaitComponent_publishAriaLabel).call(this);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* When set to `true`, wait indication appears on the parent element of the `sky-wait` component.
|
|
44
|
-
*/
|
|
45
|
-
set isWaiting(value) {
|
|
46
|
-
if (!this.isFullPage) {
|
|
47
|
-
if (value) {
|
|
48
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_adapterService, "f").setWaitBounds(__classPrivateFieldGet(this, _SkyWaitComponent_elRef, "f"));
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_adapterService, "f").removeWaitBounds(__classPrivateFieldGet(this, _SkyWaitComponent_elRef, "f"));
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_adapterService, "f").setBusyState(__classPrivateFieldGet(this, _SkyWaitComponent_elRef, "f"), !!this.isFullPage, !!value, !!this.isNonBlocking, __classPrivateFieldGet(this, _SkyWaitComponent_id, "f"));
|
|
55
|
-
if (value) {
|
|
56
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_liveAnnouncer, "f").announce(this.ariaLabelStream.getValue());
|
|
57
|
-
}
|
|
58
|
-
else if (__classPrivateFieldGet(this, _SkyWaitComponent__isWaiting, "f")) {
|
|
59
|
-
// NOTE: This should only happen if the wait was previously waiting and no longer is waiting.
|
|
60
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_liveAnnouncer, "f").announce(this.screenReaderCompletedTextStream.getValue());
|
|
61
|
-
}
|
|
62
|
-
__classPrivateFieldSet(this, _SkyWaitComponent__isWaiting, value, "f");
|
|
63
|
-
}
|
|
64
|
-
get isWaiting() {
|
|
65
|
-
return __classPrivateFieldGet(this, _SkyWaitComponent__isWaiting, "f");
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* When set to `true`, wait indication appears on the page level instead of the
|
|
69
|
-
* parent element level. We recommend that you use the `beginBlockingPageWait` or
|
|
70
|
-
* `beginNonBlockingPageWait` functions of the `SkyWaitService` instead of setting this
|
|
71
|
-
* on the component level.
|
|
72
|
-
* @default false
|
|
73
|
-
*/
|
|
74
|
-
set isFullPage(value) {
|
|
75
|
-
/* istanbul ignore else: untestable */
|
|
76
|
-
if (value) {
|
|
77
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_adapterService, "f").removeWaitBounds(__classPrivateFieldGet(this, _SkyWaitComponent_elRef, "f"));
|
|
78
|
-
}
|
|
79
|
-
else if (this.isWaiting) {
|
|
80
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_adapterService, "f").setWaitBounds(__classPrivateFieldGet(this, _SkyWaitComponent_elRef, "f"));
|
|
81
|
-
}
|
|
82
|
-
__classPrivateFieldSet(this, _SkyWaitComponent__isFullPage, value, "f");
|
|
83
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_instances, "m", _SkyWaitComponent_publishAriaLabel).call(this);
|
|
84
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_instances, "m", _SkyWaitComponent_publishScreenReaderCompletedText).call(this);
|
|
85
|
-
}
|
|
86
|
-
get isFullPage() {
|
|
87
|
-
return __classPrivateFieldGet(this, _SkyWaitComponent__isFullPage, "f");
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* When set to `true`, wait indication appears in the bottom left corner of the element
|
|
91
|
-
* instead of hiding the entire parent element.
|
|
92
|
-
* @default false
|
|
93
|
-
*/
|
|
94
|
-
set isNonBlocking(value) {
|
|
95
|
-
__classPrivateFieldSet(this, _SkyWaitComponent__isNonBlocking, value, "f");
|
|
96
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_instances, "m", _SkyWaitComponent_publishAriaLabel).call(this);
|
|
97
|
-
}
|
|
98
|
-
get isNonBlocking() {
|
|
99
|
-
return __classPrivateFieldGet(this, _SkyWaitComponent__isNonBlocking, "f");
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Screen reader text [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility) when the wait toggles off.
|
|
103
|
-
* The default varies based on whether the wait is for an element or a page.
|
|
104
|
-
* For example, the default for a page-level wait is "Page loading complete."
|
|
105
|
-
* For element-level waits, we recommend that consumers overwrite the default to describe the specific element.
|
|
106
|
-
* For more information, see the Design tab and the [WCAG documentation on status messages](https://www.w3.org/WAI/WCAG21/Understanding/status-messages.html).
|
|
107
|
-
*/
|
|
108
|
-
set screenReaderCompletedText(value) {
|
|
109
|
-
__classPrivateFieldSet(this, _SkyWaitComponent_customScreenReaderCompletedText, value, "f");
|
|
110
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_instances, "m", _SkyWaitComponent_publishScreenReaderCompletedText).call(this);
|
|
111
|
-
}
|
|
112
|
-
ngOnInit() {
|
|
113
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_instances, "m", _SkyWaitComponent_publishAriaLabel).call(this);
|
|
114
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_instances, "m", _SkyWaitComponent_publishScreenReaderCompletedText).call(this);
|
|
115
|
-
}
|
|
116
|
-
ngOnDestroy() {
|
|
117
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_ngUnsubscribe, "f").next();
|
|
118
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_ngUnsubscribe, "f").complete();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
_SkyWaitComponent_customAriaLabel = new WeakMap(), _SkyWaitComponent_customScreenReaderCompletedText = new WeakMap(), _SkyWaitComponent_id = new WeakMap(), _SkyWaitComponent_elRef = new WeakMap(), _SkyWaitComponent_adapterService = new WeakMap(), _SkyWaitComponent_liveAnnouncer = new WeakMap(), _SkyWaitComponent_resourceSvc = new WeakMap(), _SkyWaitComponent_ngUnsubscribe = new WeakMap(), _SkyWaitComponent__isFullPage = new WeakMap(), _SkyWaitComponent__isNonBlocking = new WeakMap(), _SkyWaitComponent__isWaiting = new WeakMap(), _SkyWaitComponent_instances = new WeakSet(), _SkyWaitComponent_publishAriaLabel = function _SkyWaitComponent_publishAriaLabel() {
|
|
122
|
-
if (__classPrivateFieldGet(this, _SkyWaitComponent_customAriaLabel, "f")) {
|
|
123
|
-
this.ariaLabelStream.next(__classPrivateFieldGet(this, _SkyWaitComponent_customAriaLabel, "f"));
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
const type = this.isFullPage ? '_page' : '';
|
|
127
|
-
const blocking = this.isNonBlocking ? '' : '_blocking';
|
|
128
|
-
const key = `skyux_wait${type}${blocking}_aria_alt_text`;
|
|
129
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_resourceSvc, "f")
|
|
130
|
-
.getString(key)
|
|
131
|
-
.pipe(take(1), takeUntil(__classPrivateFieldGet(this, _SkyWaitComponent_ngUnsubscribe, "f")))
|
|
132
|
-
.subscribe((value) => {
|
|
133
|
-
this.ariaLabelStream.next(value);
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
}, _SkyWaitComponent_publishScreenReaderCompletedText = function _SkyWaitComponent_publishScreenReaderCompletedText() {
|
|
137
|
-
if (__classPrivateFieldGet(this, _SkyWaitComponent_customScreenReaderCompletedText, "f")) {
|
|
138
|
-
this.screenReaderCompletedTextStream.next(__classPrivateFieldGet(this, _SkyWaitComponent_customScreenReaderCompletedText, "f"));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
const type = this.isFullPage ? '_page' : '';
|
|
142
|
-
const key = `skyux_wait${type}_screen_reader_completed_text`;
|
|
143
|
-
__classPrivateFieldGet(this, _SkyWaitComponent_resourceSvc, "f")
|
|
144
|
-
.getString(key)
|
|
145
|
-
.pipe(take(1), takeUntil(__classPrivateFieldGet(this, _SkyWaitComponent_ngUnsubscribe, "f")))
|
|
146
|
-
.subscribe((value) => {
|
|
147
|
-
this.screenReaderCompletedTextStream.next(value);
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
SkyWaitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyWaitComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
152
|
-
SkyWaitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyWaitComponent, selector: "sky-wait", inputs: { ariaLabel: "ariaLabel", isWaiting: "isWaiting", isFullPage: "isFullPage", isNonBlocking: "isNonBlocking", screenReaderCompletedText: "screenReaderCompletedText" }, providers: [SkyWaitAdapterService], ngImport: i0, template: "<div\n class=\"sky-wait-container\"\n [ngClass]=\"{\n 'sky-wait-full-page': isFullPage,\n 'sky-wait-non-blocking': isNonBlocking\n }\"\n>\n <div\n *ngIf=\"isWaiting\"\n class=\"sky-wait-mask\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabelStream | async\"\n [ngClass]=\"{\n 'sky-wait-mask-loading-fixed': isFullPage,\n 'sky-wait-mask-loading-non-blocking': isNonBlocking,\n 'sky-wait-mask-loading-blocking': !isNonBlocking\n }\"\n >\n <div class=\"sky-wait\">\n <div class=\"sky-wait-double-bounce1\"></div>\n <div class=\"sky-wait-double-bounce2\"></div>\n </div>\n </div>\n</div>\n", styles: [".sky-wait-mask-loading-blocking{margin:auto;position:absolute;inset:0;background-color:#ffffffb3;z-index:1000}.sky-wait-mask-loading-fixed{position:fixed}.sky-wait{width:50px;height:50px;margin-top:-25px;margin-left:-25px;position:absolute;top:50%;left:50%}.sky-wait-mask-loading-non-blocking{bottom:0}.sky-wait-mask-loading-non-blocking .sky-wait{inset:auto auto 0 0;margin-left:auto;margin-right:auto}.sky-wait-double-bounce1,.sky-wait-double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#72bf44;opacity:.6;position:absolute;top:0;left:0;animation:sk-bounce 2s infinite ease-in-out}.sky-wait-double-bounce2{animation-delay:-1s}@keyframes sk-bounce{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}.sky-wait-container.sky-wait-active{position:relative}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
|
|
153
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyWaitComponent, decorators: [{
|
|
154
|
-
type: Component,
|
|
155
|
-
args: [{ selector: 'sky-wait', providers: [SkyWaitAdapterService], template: "<div\n class=\"sky-wait-container\"\n [ngClass]=\"{\n 'sky-wait-full-page': isFullPage,\n 'sky-wait-non-blocking': isNonBlocking\n }\"\n>\n <div\n *ngIf=\"isWaiting\"\n class=\"sky-wait-mask\"\n role=\"progressbar\"\n [attr.aria-label]=\"ariaLabelStream | async\"\n [ngClass]=\"{\n 'sky-wait-mask-loading-fixed': isFullPage,\n 'sky-wait-mask-loading-non-blocking': isNonBlocking,\n 'sky-wait-mask-loading-blocking': !isNonBlocking\n }\"\n >\n <div class=\"sky-wait\">\n <div class=\"sky-wait-double-bounce1\"></div>\n <div class=\"sky-wait-double-bounce2\"></div>\n </div>\n </div>\n</div>\n", styles: [".sky-wait-mask-loading-blocking{margin:auto;position:absolute;inset:0;background-color:#ffffffb3;z-index:1000}.sky-wait-mask-loading-fixed{position:fixed}.sky-wait{width:50px;height:50px;margin-top:-25px;margin-left:-25px;position:absolute;top:50%;left:50%}.sky-wait-mask-loading-non-blocking{bottom:0}.sky-wait-mask-loading-non-blocking .sky-wait{inset:auto auto 0 0;margin-left:auto;margin-right:auto}.sky-wait-double-bounce1,.sky-wait-double-bounce2{width:100%;height:100%;border-radius:50%;background-color:#72bf44;opacity:.6;position:absolute;top:0;left:0;animation:sk-bounce 2s infinite ease-in-out}.sky-wait-double-bounce2{animation-delay:-1s}@keyframes sk-bounce{0%,to{transform:scale(0);-webkit-transform:scale(0)}50%{transform:scale(1);-webkit-transform:scale(1)}}.sky-wait-container.sky-wait-active{position:relative}\n"] }]
|
|
156
|
-
}], propDecorators: { ariaLabel: [{
|
|
157
|
-
type: Input
|
|
158
|
-
}], isWaiting: [{
|
|
159
|
-
type: Input
|
|
160
|
-
}], isFullPage: [{
|
|
161
|
-
type: Input
|
|
162
|
-
}], isNonBlocking: [{
|
|
163
|
-
type: Input
|
|
164
|
-
}], screenReaderCompletedText: [{
|
|
165
|
-
type: Input
|
|
166
|
-
}] } });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvaW5kaWNhdG9ycy9zcmMvbGliL21vZHVsZXMvd2FpdC93YWl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9pbmRpY2F0b3JzL3NyYy9saWIvbW9kdWxlcy93YWl0L3dhaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRS9ELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQVFmLE1BQU0sT0FBTyxnQkFBZ0I7SUFON0I7O1FBK0dTLG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDbEQsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsb0NBQStCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFFekUsb0RBQXFDO1FBQ3JDLG9FQUFxRDtRQUNyRCwrQkFBTSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUM7UUFFN0Isa0NBQVMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFDO1FBQzVCLDJDQUFrQixNQUFNLENBQUMscUJBQXFCLENB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Q0FBQyxJQUFJLENBQ3ZDLHVCQUFBLElBQUkseURBQWlDLENBQ3RDLENBQUM7S0FDSDtTQUFNO1FBQ0wsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsYUFBYSxJQUFJLCtCQUErQixDQUFDO1FBQzdELHVCQUFBLElBQUkscUNBQWE7YUFDZCxTQUFTLENBQUMsR0FBRyxDQUFDO2FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsdUJBQUEsSUFBSSx1Q0FBZSxDQUFDLENBQUM7YUFDN0MsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztLQUNOO0FBQ0gsQ0FBQzs2R0FwS1UsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsaU5BRmhCLENBQUMscUJBQXFCLENBQUMsMEJDdEJwQyw4b0JBd0JBOzJGREFhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxVQUFVLGFBR1QsQ0FBQyxxQkFBcUIsQ0FBQzs4QkFZdkIsU0FBUztzQkFEbkIsS0FBSztnQkFVSyxTQUFTO3NCQURuQixLQUFLO2dCQTBDSyxVQUFVO3NCQURwQixLQUFLO2dCQXdCSyxhQUFhO3NCQUR2QixLQUFLO2dCQWtCSyx5QkFBeUI7c0JBRG5DLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUxpdmVBbm5vdW5jZXJTZXJ2aWNlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5TGliUmVzb3VyY2VzU2VydmljZSB9IGZyb20gJ0Bza3l1eC9pMThuJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVdhaXRBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vd2FpdC1hZGFwdGVyLnNlcnZpY2UnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXdhaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2FpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3dhaXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5V2FpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBBUklBIGxhYmVsIGZvciB0aGUgd2FpdCBpY29uLlxuICAgKiBUaGlzIHNldHMgdGhlIGljb24ncyBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIHRvIHByb3ZpZGUgYSB0ZXh0IGVxdWl2YWxlbnQgZm9yIHNjcmVlbiByZWFkZXJzXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkgd2hlbiBhbiBlbGVtZW50IG9yIHBhZ2UgbG9hZHMgYW5kIHdoZW4gdXNlcnMgdGFiIHRvIGEgd2FpdCBpY29uLlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSB2YXJpZXMgYmFzZWQgb24gd2hldGhlciB0aGUgd2FpdCBpcyBmb3IgYW4gZWxlbWVudCBvciBhIHBhZ2UgYW5kIHdoZXRoZXIgaXQgaXMgYSBibG9ja2luZyB3YWl0LiBGb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgZm9yIGEgcGFnZS1sZXZlbCBibG9ja2luZyB3YWl0IGlzIFwiUGFnZSBsb2FkaW5nLiBQbGVhc2Ugd2FpdC5cIlxuICAgKiBGb3IgZWxlbWVudC1sZXZlbCB3YWl0cywgd2UgcmVjb21tZW5kIHRoYXQgY29uc3VtZXJzIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCB0byBkZXNjcmliZSB0aGUgc3BlY2lmaWMgZWxlbWVudC5cbiAgICogXCJGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBEZXNpZ24gdGFiIGFuZCB0aGUgW1dBSS1BUklBIGBhcmlhLWxhYmVsYCBkZWZpbml0aW9uXShodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtbGFiZWwpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhcmlhTGFiZWwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI2N1c3RvbUFyaWFMYWJlbCA9IHZhbHVlO1xuICAgIHRoaXMuI3B1Ymxpc2hBcmlhTGFiZWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHdhaXQgaW5kaWNhdGlvbiBhcHBlYXJzIG9uIHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgYHNreS13YWl0YCBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzV2FpdGluZyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghdGhpcy5pc0Z1bGxQYWdlKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy4jYWRhcHRlclNlcnZpY2Uuc2V0V2FpdEJvdW5kcyh0aGlzLiNlbFJlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5yZW1vdmVXYWl0Qm91bmRzKHRoaXMuI2VsUmVmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRCdXN5U3RhdGUoXG4gICAgICB0aGlzLiNlbFJlZixcbiAgICAgICEhdGhpcy5pc0Z1bGxQYWdlLFxuICAgICAgISF2YWx1ZSxcbiAgICAgICEhdGhpcy5pc05vbkJsb2NraW5nLFxuICAgICAgdGhpcy4jaWRcbiAgICApO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNsaXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMuYXJpYUxhYmVsU3RyZWFtLmdldFZhbHVlKCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy4jX2lzV2FpdGluZykge1xuICAgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIHdhaXQgd2FzIHByZXZpb3VzbHkgd2FpdGluZyBhbmQgbm8gbG9uZ2VyIGlzIHdhaXRpbmcuXG4gICAgICB0aGlzLiNsaXZlQW5ub3VuY2VyLmFubm91bmNlKFxuICAgICAgICB0aGlzLnNjcmVlblJlYWRlckNvbXBsZXRlZFRleHRTdHJlYW0uZ2V0VmFsdWUoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLiNfaXNXYWl0aW5nID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzV2FpdGluZygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2lzV2FpdGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHdhaXQgaW5kaWNhdGlvbiBhcHBlYXJzIG9uIHRoZSBwYWdlIGxldmVsIGluc3RlYWQgb2YgdGhlXG4gICAqIHBhcmVudCBlbGVtZW50IGxldmVsLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHRoZSBgYmVnaW5CbG9ja2luZ1BhZ2VXYWl0YCBvclxuICAgKiBgYmVnaW5Ob25CbG9ja2luZ1BhZ2VXYWl0YCBmdW5jdGlvbnMgb2YgdGhlIGBTa3lXYWl0U2VydmljZWAgaW5zdGVhZCBvZiBzZXR0aW5nIHRoaXNcbiAgICogb24gdGhlIGNvbXBvbmVudCBsZXZlbC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNGdWxsUGFnZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiB1bnRlc3RhYmxlICovXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5yZW1vdmVXYWl0Qm91bmRzKHRoaXMuI2VsUmVmKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNXYWl0aW5nKSB7XG4gICAgICB0aGlzLiNhZGFwdGVyU2VydmljZS5zZXRXYWl0Qm91bmRzKHRoaXMuI2VsUmVmKTtcbiAgICB9XG5cbiAgICB0aGlzLiNfaXNGdWxsUGFnZSA9IHZhbHVlO1xuICAgIHRoaXMuI3B1Ymxpc2hBcmlhTGFiZWwoKTtcbiAgICB0aGlzLiNwdWJsaXNoU2NyZWVuUmVhZGVyQ29tcGxldGVkVGV4dCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0Z1bGxQYWdlKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaXNGdWxsUGFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHdhaXQgaW5kaWNhdGlvbiBhcHBlYXJzIGluIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2YgdGhlIGVsZW1lbnRcbiAgICogaW5zdGVhZCBvZiBoaWRpbmcgdGhlIGVudGlyZSBwYXJlbnQgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNOb25CbG9ja2luZyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19pc05vbkJsb2NraW5nID0gdmFsdWU7XG4gICAgdGhpcy4jcHVibGlzaEFyaWFMYWJlbCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc05vbkJsb2NraW5nKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfaXNOb25CbG9ja2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JlZW4gcmVhZGVyIHRleHQgW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KSB3aGVuIHRoZSB3YWl0IHRvZ2dsZXMgb2ZmLlxuICAgKiAgVGhlIGRlZmF1bHQgdmFyaWVzIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHdhaXQgaXMgZm9yIGFuIGVsZW1lbnQgb3IgYSBwYWdlLlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlIGRlZmF1bHQgZm9yIGEgcGFnZS1sZXZlbCB3YWl0IGlzIFwiUGFnZSBsb2FkaW5nIGNvbXBsZXRlLlwiXG4gICAqIEZvciBlbGVtZW50LWxldmVsIHdhaXRzLCB3ZSByZWNvbW1lbmQgdGhhdCBjb25zdW1lcnMgb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHRvIGRlc2NyaWJlIHRoZSBzcGVjaWZpYyBlbGVtZW50LlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBEZXNpZ24gdGFiIGFuZCB0aGUgW1dDQUcgZG9jdW1lbnRhdGlvbiBvbiBzdGF0dXMgbWVzc2FnZXNdKGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvV0NBRzIxL1VuZGVyc3RhbmRpbmcvc3RhdHVzLW1lc3NhZ2VzLmh0bWwpLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzY3JlZW5SZWFkZXJDb21wbGV0ZWRUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNjdXN0b21TY3JlZW5SZWFkZXJDb21wbGV0ZWRUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy4jcHVibGlzaFNjcmVlblJlYWRlckNvbXBsZXRlZFRleHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcmlhTGFiZWxTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwdWJsaWMgYXJpYUxpdmVUZXh0ID0gJyc7XG4gIHB1YmxpYyBzY3JlZW5SZWFkZXJDb21wbGV0ZWRUZXh0U3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICAjY3VzdG9tQXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNjdXN0b21TY3JlZW5SZWFkZXJDb21wbGV0ZWRUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICNpZCA9IGBza3ktd2FpdC0keysrbmV4dElkfWA7XG5cbiAgI2VsUmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAjYWRhcHRlclNlcnZpY2UgPSBpbmplY3QoU2t5V2FpdEFkYXB0ZXJTZXJ2aWNlKTtcbiAgI2xpdmVBbm5vdW5jZXIgPSBpbmplY3QoU2t5TGl2ZUFubm91bmNlclNlcnZpY2UpO1xuICAjcmVzb3VyY2VTdmMgPSBpbmplY3QoU2t5TGliUmVzb3VyY2VzU2VydmljZSk7XG4gICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAjX2lzRnVsbFBhZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICNfaXNOb25CbG9ja2luZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgI19pc1dhaXRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI3B1Ymxpc2hBcmlhTGFiZWwoKTtcbiAgICB0aGlzLiNwdWJsaXNoU2NyZWVuUmVhZGVyQ29tcGxldGVkVGV4dCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gICNwdWJsaXNoQXJpYUxhYmVsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXN0b21BcmlhTGFiZWwpIHtcbiAgICAgIHRoaXMuYXJpYUxhYmVsU3RyZWFtLm5leHQodGhpcy4jY3VzdG9tQXJpYUxhYmVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuaXNGdWxsUGFnZSA/ICdfcGFnZScgOiAnJztcbiAgICAgIGNvbnN0IGJsb2NraW5nID0gdGhpcy5pc05vbkJsb2NraW5nID8gJycgOiAnX2Jsb2NraW5nJztcbiAgICAgIGNvbnN0IGtleSA9IGBza3l1eF93YWl0JHt0eXBlfSR7YmxvY2tpbmd9X2FyaWFfYWx0X3RleHRgO1xuICAgICAgdGhpcy4jcmVzb3VyY2VTdmNcbiAgICAgICAgLmdldFN0cmluZyhrZXkpXG4gICAgICAgIC5waXBlKHRha2UoMSksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICB0aGlzLmFyaWFMYWJlbFN0cmVhbS5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI3B1Ymxpc2hTY3JlZW5SZWFkZXJDb21wbGV0ZWRUZXh0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXN0b21TY3JlZW5SZWFkZXJDb21wbGV0ZWRUZXh0KSB7XG4gICAgICB0aGlzLnNjcmVlblJlYWRlckNvbXBsZXRlZFRleHRTdHJlYW0ubmV4dChcbiAgICAgICAgdGhpcy4jY3VzdG9tU2NyZWVuUmVhZGVyQ29tcGxldGVkVGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuaXNGdWxsUGFnZSA/ICdfcGFnZScgOiAnJztcbiAgICAgIGNvbnN0IGtleSA9IGBza3l1eF93YWl0JHt0eXBlfV9zY3JlZW5fcmVhZGVyX2NvbXBsZXRlZF90ZXh0YDtcbiAgICAgIHRoaXMuI3Jlc291cmNlU3ZjXG4gICAgICAgIC5nZXRTdHJpbmcoa2V5KVxuICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5zY3JlZW5SZWFkZXJDb21wbGV0ZWRUZXh0U3RyZWFtLm5leHQodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktd2FpdC1jb250YWluZXJcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3NreS13YWl0LWZ1bGwtcGFnZSc6IGlzRnVsbFBhZ2UsXG4gICAgJ3NreS13YWl0LW5vbi1ibG9ja2luZyc6IGlzTm9uQmxvY2tpbmdcbiAgfVwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cImlzV2FpdGluZ1wiXG4gICAgY2xhc3M9XCJza3ktd2FpdC1tYXNrXCJcbiAgICByb2xlPVwicHJvZ3Jlc3NiYXJcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsU3RyZWFtIHwgYXN5bmNcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICdza3ktd2FpdC1tYXNrLWxvYWRpbmctZml4ZWQnOiBpc0Z1bGxQYWdlLFxuICAgICAgJ3NreS13YWl0LW1hc2stbG9hZGluZy1ub24tYmxvY2tpbmcnOiBpc05vbkJsb2NraW5nLFxuICAgICAgJ3NreS13YWl0LW1hc2stbG9hZGluZy1ibG9ja2luZyc6ICFpc05vbkJsb2NraW5nXG4gICAgfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwic2t5LXdhaXRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJza3ktd2FpdC1kb3VibGUtYm91bmNlMVwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNreS13YWl0LWRvdWJsZS1ib3VuY2UyXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|