@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,154 +0,0 @@
|
|
|
1
|
-
var _SkyTextHighlightDirective_instances, _SkyTextHighlightDirective_existingHighlight, _SkyTextHighlightDirective_observer, _SkyTextHighlightDirective_searchTerms, _SkyTextHighlightDirective_el, _SkyTextHighlightDirective_observerSvc, _SkyTextHighlightDirective_disconnectObserver, _SkyTextHighlightDirective_highlight, _SkyTextHighlightDirective_observeDom;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { Directive, ElementRef, Input, inject, } from '@angular/core';
|
|
4
|
-
import { SkyMutationObserverService } from '@skyux/core';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
const CLASS_NAME = 'sky-highlight-mark';
|
|
7
|
-
const SPECIAL_CHAR_REGEX = /[-/\\^$*+?.()|[\]{}]/g;
|
|
8
|
-
function markNode(node, searchRegex) {
|
|
9
|
-
// The search regular expression is reused across calls to markNode(), so reset
|
|
10
|
-
// it so it searches from the start of the string each time.
|
|
11
|
-
searchRegex.lastIndex = 0;
|
|
12
|
-
const text = node.nodeValue;
|
|
13
|
-
if (text) {
|
|
14
|
-
const match = searchRegex.exec(text);
|
|
15
|
-
if (match) {
|
|
16
|
-
// Split apart text node with mark tags in the middle on the search term.
|
|
17
|
-
const matchIndex = match.index;
|
|
18
|
-
const middle = node.splitText(matchIndex);
|
|
19
|
-
middle.splitText(searchRegex.lastIndex - matchIndex);
|
|
20
|
-
const middleClone = middle.cloneNode(true);
|
|
21
|
-
const markNode = document.createElement('mark');
|
|
22
|
-
markNode.className = CLASS_NAME;
|
|
23
|
-
markNode.appendChild(middleClone);
|
|
24
|
-
/* istanbul ignore else */
|
|
25
|
-
if (middle.parentNode) {
|
|
26
|
-
middle.parentNode.replaceChild(markNode, middle);
|
|
27
|
-
}
|
|
28
|
-
return 1;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return 0;
|
|
32
|
-
}
|
|
33
|
-
function markTextNodes(node, searchRegex) {
|
|
34
|
-
if (node.nodeType === 3) {
|
|
35
|
-
return markNode(node, searchRegex);
|
|
36
|
-
}
|
|
37
|
-
else if (node.nodeType === 1 && node.childNodes) {
|
|
38
|
-
for (let i = 0; i < node.childNodes.length; i++) {
|
|
39
|
-
const childNode = node.childNodes[i];
|
|
40
|
-
i += markTextNodes(childNode, searchRegex);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return 0;
|
|
44
|
-
}
|
|
45
|
-
function removeHighlight(el) {
|
|
46
|
-
const matchedElements = el.nativeElement.querySelectorAll(`mark.${CLASS_NAME}`);
|
|
47
|
-
if (matchedElements) {
|
|
48
|
-
for (let i = 0; i < matchedElements.length; i++) {
|
|
49
|
-
const node = matchedElements[i];
|
|
50
|
-
const parentNode = node.parentNode;
|
|
51
|
-
if (parentNode && node.firstChild) {
|
|
52
|
-
parentNode.replaceChild(node.firstChild, node);
|
|
53
|
-
parentNode.normalize();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
function createSearchRegex(searchTerms) {
|
|
59
|
-
let searchRegex;
|
|
60
|
-
if (searchTerms.length > 0) {
|
|
61
|
-
// Escape all the special regular expression characters by adding a
|
|
62
|
-
// preceding '\' to each match.
|
|
63
|
-
searchTerms = searchTerms.map((searchTerm) => searchTerm.replace(SPECIAL_CHAR_REGEX, '\\$&'));
|
|
64
|
-
searchRegex = new RegExp(searchTerms.join('|'), 'gi');
|
|
65
|
-
}
|
|
66
|
-
return searchRegex;
|
|
67
|
-
}
|
|
68
|
-
// Need to add the following to classes which contain static methods.
|
|
69
|
-
// See: https://github.com/ng-packagr/ng-packagr/issues/641
|
|
70
|
-
// @dynamic
|
|
71
|
-
/**
|
|
72
|
-
* Highlights all matching text within the current DOM element.
|
|
73
|
-
*/
|
|
74
|
-
export class SkyTextHighlightDirective {
|
|
75
|
-
constructor() {
|
|
76
|
-
_SkyTextHighlightDirective_instances.add(this);
|
|
77
|
-
_SkyTextHighlightDirective_existingHighlight.set(this, false);
|
|
78
|
-
_SkyTextHighlightDirective_observer.set(this, void 0);
|
|
79
|
-
_SkyTextHighlightDirective_searchTerms.set(this, []);
|
|
80
|
-
_SkyTextHighlightDirective_el.set(this, inject(ElementRef));
|
|
81
|
-
_SkyTextHighlightDirective_observerSvc.set(this, inject(SkyMutationObserverService));
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* The text to highlight.
|
|
85
|
-
*/
|
|
86
|
-
set skyHighlight(value) {
|
|
87
|
-
value = value || [];
|
|
88
|
-
if (Array.isArray(value)) {
|
|
89
|
-
__classPrivateFieldSet(this, _SkyTextHighlightDirective_searchTerms, value.filter((item) => !!item), "f");
|
|
90
|
-
// Reorder strings by their length in descending order to avoid missing matches
|
|
91
|
-
// that contain substrings of other matches.
|
|
92
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_searchTerms, "f").sort(function (a, b) {
|
|
93
|
-
return b.length - a.length;
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
__classPrivateFieldSet(this, _SkyTextHighlightDirective_searchTerms, [value], "f");
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
ngOnChanges(changes) {
|
|
101
|
-
if (changes['skyHighlight'] && !changes['skyHighlight'].firstChange) {
|
|
102
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_instances, "m", _SkyTextHighlightDirective_highlight).call(this);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
ngAfterViewInit() {
|
|
106
|
-
__classPrivateFieldSet(this, _SkyTextHighlightDirective_observer, __classPrivateFieldGet(this, _SkyTextHighlightDirective_observerSvc, "f").create(() => {
|
|
107
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_instances, "m", _SkyTextHighlightDirective_highlight).call(this);
|
|
108
|
-
}), "f");
|
|
109
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_instances, "m", _SkyTextHighlightDirective_highlight).call(this);
|
|
110
|
-
}
|
|
111
|
-
ngOnDestroy() {
|
|
112
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_instances, "m", _SkyTextHighlightDirective_disconnectObserver).call(this);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
_SkyTextHighlightDirective_existingHighlight = new WeakMap(), _SkyTextHighlightDirective_observer = new WeakMap(), _SkyTextHighlightDirective_searchTerms = new WeakMap(), _SkyTextHighlightDirective_el = new WeakMap(), _SkyTextHighlightDirective_observerSvc = new WeakMap(), _SkyTextHighlightDirective_instances = new WeakSet(), _SkyTextHighlightDirective_disconnectObserver = function _SkyTextHighlightDirective_disconnectObserver() {
|
|
116
|
-
if (__classPrivateFieldGet(this, _SkyTextHighlightDirective_observer, "f")) {
|
|
117
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_observer, "f").disconnect();
|
|
118
|
-
}
|
|
119
|
-
}, _SkyTextHighlightDirective_highlight = function _SkyTextHighlightDirective_highlight() {
|
|
120
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_instances, "m", _SkyTextHighlightDirective_disconnectObserver).call(this);
|
|
121
|
-
if (__classPrivateFieldGet(this, _SkyTextHighlightDirective_existingHighlight, "f")) {
|
|
122
|
-
removeHighlight(__classPrivateFieldGet(this, _SkyTextHighlightDirective_el, "f"));
|
|
123
|
-
}
|
|
124
|
-
const node = __classPrivateFieldGet(this, _SkyTextHighlightDirective_el, "f").nativeElement;
|
|
125
|
-
if (node) {
|
|
126
|
-
const searchRegex = createSearchRegex(__classPrivateFieldGet(this, _SkyTextHighlightDirective_searchTerms, "f"));
|
|
127
|
-
// mark all matched text in the DOM
|
|
128
|
-
if (searchRegex) {
|
|
129
|
-
markTextNodes(node, searchRegex);
|
|
130
|
-
__classPrivateFieldSet(this, _SkyTextHighlightDirective_existingHighlight, true, "f");
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_instances, "m", _SkyTextHighlightDirective_observeDom).call(this);
|
|
134
|
-
}, _SkyTextHighlightDirective_observeDom = function _SkyTextHighlightDirective_observeDom() {
|
|
135
|
-
if (__classPrivateFieldGet(this, _SkyTextHighlightDirective_observer, "f")) {
|
|
136
|
-
const config = {
|
|
137
|
-
attributes: false,
|
|
138
|
-
childList: true,
|
|
139
|
-
characterData: true,
|
|
140
|
-
};
|
|
141
|
-
__classPrivateFieldGet(this, _SkyTextHighlightDirective_observer, "f").observe(__classPrivateFieldGet(this, _SkyTextHighlightDirective_el, "f").nativeElement, config);
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
SkyTextHighlightDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTextHighlightDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
145
|
-
SkyTextHighlightDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SkyTextHighlightDirective, selector: "[skyHighlight]", inputs: { skyHighlight: "skyHighlight" }, usesOnChanges: true, ngImport: i0 });
|
|
146
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTextHighlightDirective, decorators: [{
|
|
147
|
-
type: Directive,
|
|
148
|
-
args: [{
|
|
149
|
-
selector: '[skyHighlight]',
|
|
150
|
-
}]
|
|
151
|
-
}], propDecorators: { skyHighlight: [{
|
|
152
|
-
type: Input
|
|
153
|
-
}] } });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1oaWdobGlnaHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2luZGljYXRvcnMvc3JjL2xpYi9tb2R1bGVzL3RleHQtaGlnaGxpZ2h0L3RleHQtaGlnaGxpZ2h0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUV6RCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQztBQUN4QyxNQUFNLGtCQUFrQixHQUFHLHVCQUF1QixDQUFDO0FBRW5ELFNBQVMsUUFBUSxDQUFDLElBQVUsRUFBRSxXQUFtQjtJQUMvQywrRUFBK0U7SUFDL0UsNERBQTREO0lBQzVELFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFFNUIsSUFBSSxJQUFJLEVBQUU7UUFDUixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLElBQUksS0FBSyxFQUFFO1lBQ1QseUVBQXlFO1lBQ3pFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFFL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDckQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUzQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFD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LE1BQXhCLElBQUksQ0FBc0IsQ0FBQztJQUUzQixJQUFJLHVCQUFBLElBQUksb0RBQW1CLEVBQUU7UUFDM0IsZUFBZSxDQUFDLHVCQUFBLElBQUkscUNBQUksQ0FBQyxDQUFDO0tBQzNCO0lBRUQsTUFBTSxJQUFJLEdBQUcsdUJBQUEsSUFBSSxxQ0FBSSxDQUFDLGFBQWEsQ0FBQztJQUVwQyxJQUFJLElBQUksRUFBRTtRQUNSLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLHVCQUFBLElBQUksOENBQWEsQ0FBQyxDQUFDO1FBRXpELG1DQUFtQztRQUNuQyxJQUFJLFdBQVcsRUFBRTtZQUNmLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDakMsdUJBQUEsSUFBSSxnREFBc0IsSUFBSSxNQUFBLENBQUM7U0FDaEM7S0FDRjtJQUVELHVCQUFBLElBQUksbUZBQVksTUFBaEIsSUFBSSxDQUFjLENBQUM7QUFDckIsQ0FBQztJQUdDLElBQUksdUJBQUEsSUFBSSwyQ0FBVSxFQUFFO1FBQ2xCLE1BQU0sTUFBTSxHQUFHO1lBQ2IsVUFBVSxFQUFFLEtBQUs7WUFDakIsU0FBUyxFQUFFLElBQUk7WUFDZixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDO1FBRUYsdUJBQUEsSUFBSSwyQ0FBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBQSxJQUFJLHFDQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3hEO0FBQ0gsQ0FBQztzSEF2RlUseUJBQXlCOzBHQUF6Qix5QkFBeUI7MkZBQXpCLHlCQUF5QjtrQkFIckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQjs4QkFRWSxZQUFZO3NCQUR0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lNdXRhdGlvbk9ic2VydmVyU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuY29uc3QgQ0xBU1NfTkFNRSA9ICdza3ktaGlnaGxpZ2h0LW1hcmsnO1xuY29uc3QgU1BFQ0lBTF9DSEFSX1JFR0VYID0gL1stL1xcXFxeJCorPy4oKXxbXFxde31dL2c7XG5cbmZ1bmN0aW9uIG1hcmtOb2RlKG5vZGU6IFRleHQsIHNlYXJjaFJlZ2V4OiBSZWdFeHApOiBudW1iZXIge1xuICAvLyBUaGUgc2VhcmNoIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyByZXVzZWQgYWNyb3NzIGNhbGxzIHRvIG1hcmtOb2RlKCksIHNvIHJlc2V0XG4gIC8vIGl0IHNvIGl0IHNlYXJjaGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgZWFjaCB0aW1lLlxuICBzZWFyY2hSZWdleC5sYXN0SW5kZXggPSAwO1xuXG4gIGNvbnN0IHRleHQgPSBub2RlLm5vZGVWYWx1ZTtcblxuICBpZiAodGV4dCkge1xuICAgIGNvbnN0IG1hdGNoID0gc2VhcmNoUmVnZXguZXhlYyh0ZXh0KTtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gU3BsaXQgYXBhcnQgdGV4dCBub2RlIHdpdGggbWFyayB0YWdzIGluIHRoZSBtaWRkbGUgb24gdGhlIHNlYXJjaCB0ZXJtLlxuICAgICAgY29uc3QgbWF0Y2hJbmRleCA9IG1hdGNoLmluZGV4O1xuXG4gICAgICBjb25zdCBtaWRkbGUgPSBub2RlLnNwbGl0VGV4dChtYXRjaEluZGV4KTtcbiAgICAgIG1pZGRsZS5zcGxpdFRleHQoc2VhcmNoUmVnZXgubGFzdEluZGV4IC0gbWF0Y2hJbmRleCk7XG4gICAgICBjb25zdCBtaWRkbGVDbG9uZSA9IG1pZGRsZS5jbG9uZU5vZGUodHJ1ZSk7XG5cbiAgICAgIGNvbnN0IG1hcmtOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbWFyaycpO1xuICAgICAgbWFya05vZGUuY2xhc3NOYW1lID0gQ0xBU1NfTkFNRTtcbiAgICAgIG1hcmtOb2RlLmFwcGVuZENoaWxkKG1pZGRsZUNsb25lKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChtaWRkbGUucGFyZW50Tm9kZSkge1xuICAgICAgICBtaWRkbGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobWFya05vZGUsIG1pZGRsZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBtYXJrVGV4dE5vZGVzKG5vZGU6IE5vZGUsIHNlYXJjaFJlZ2V4OiBSZWdFeHApOiBudW1iZXIge1xuICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgIHJldHVybiBtYXJrTm9kZShub2RlIGFzIFRleHQsIHNlYXJjaFJlZ2V4KTtcbiAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSAxICYmIG5vZGUuY2hpbGROb2Rlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZE5vZGUgPSBub2RlLmNoaWxkTm9kZXNbaV07XG4gICAgICBpICs9IG1hcmtUZXh0Tm9kZXMoY2hpbGROb2RlLCBzZWFyY2hSZWdleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUhpZ2hsaWdodChlbDogRWxlbWVudFJlZik6IHZvaWQge1xuICBjb25zdCBtYXRjaGVkRWxlbWVudHMgPSAoZWwubmF0aXZlRWxlbWVudCBhcyBFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgIGBtYXJrLiR7Q0xBU1NfTkFNRX1gXG4gICk7XG5cbiAgaWYgKG1hdGNoZWRFbGVtZW50cykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hlZEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gbWF0Y2hlZEVsZW1lbnRzW2ldO1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblxuICAgICAgaWYgKHBhcmVudE5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCwgbm9kZSk7XG4gICAgICAgIHBhcmVudE5vZGUubm9ybWFsaXplKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlYXJjaFJlZ2V4KHNlYXJjaFRlcm1zOiBzdHJpbmdbXSk6IFJlZ0V4cCB8IHVuZGVmaW5lZCB7XG4gIGxldCBzZWFyY2hSZWdleDogUmVnRXhwIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChzZWFyY2hUZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgLy8gRXNjYXBlIGFsbCB0aGUgc3BlY2lhbCByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVycyBieSBhZGRpbmcgYVxuICAgIC8vIHByZWNlZGluZyAnXFwnIHRvIGVhY2ggbWF0Y2guXG4gICAgc2VhcmNoVGVybXMgPSBzZWFyY2hUZXJtcy5tYXAoKHNlYXJjaFRlcm0pID0+XG4gICAgICBzZWFyY2hUZXJtLnJlcGxhY2UoU1BFQ0lBTF9DSEFSX1JFR0VYLCAnXFxcXCQmJylcbiAgICApO1xuXG4gICAgc2VhcmNoUmVnZXggPSBuZXcgUmVnRXhwKHNlYXJjaFRlcm1zLmpvaW4oJ3wnKSwgJ2dpJyk7XG4gIH1cblxuICByZXR1cm4gc2VhcmNoUmVnZXg7XG59XG5cbi8vIE5lZWQgdG8gYWRkIHRoZSBmb2xsb3dpbmcgdG8gY2xhc3NlcyB3aGljaCBjb250YWluIHN0YXRpYyBtZXRob2RzLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbmctcGFja2Fnci9uZy1wYWNrYWdyL2lzc3Vlcy82NDFcbi8vIEBkeW5hbWljXG4vKipcbiAqIEhpZ2hsaWdodHMgYWxsIG1hdGNoaW5nIHRleHQgd2l0aGluIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5SGlnaGxpZ2h0XScsXG59KVxuZXhwb3J0IGNsYXNzIFNreVRleHRIaWdobGlnaHREaXJlY3RpdmVcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveVxue1xuICAvKipcbiAgICogVGhlIHRleHQgdG8gaGlnaGxpZ2h0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lIaWdobGlnaHQodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSB2YWx1ZSB8fCBbXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdGhpcy4jc2VhcmNoVGVybXMgPSB2YWx1ZS5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSk7XG4gICAgICAvLyBSZW9yZGVyIHN0cmluZ3MgYnkgdGhlaXIgbGVuZ3RoIGluIGRlc2NlbmRpbmcgb3JkZXIgdG8gYXZvaWQgbWlzc2luZyBtYXRjaGVzXG4gICAgICAvLyB0aGF0IGNvbnRhaW4gc3Vic3RyaW5ncyBvZiBvdGhlciBtYXRjaGVzLlxuICAgICAgdGhpcy4jc2VhcmNoVGVybXMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNzZWFyY2hUZXJtcyA9IFt2YWx1ZSBhcyBzdHJpbmddO1xuICAgIH1cbiAgfVxuXG4gICNleGlzdGluZ0hpZ2hsaWdodCA9IGZhbHNlO1xuXG4gICNvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IHVuZGVmaW5lZDtcblxuICAjc2VhcmNoVGVybXM6IHN0cmluZ1tdID0gW107XG5cbiAgI2VsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAjb2JzZXJ2ZXJTdmMgPSBpbmplY3QoU2t5TXV0YXRpb25PYnNlcnZlclNlcnZpY2UpO1xuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NreUhpZ2hsaWdodCddICYmICFjaGFuZ2VzWydza3lIaWdobGlnaHQnXS5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy4jaGlnaGxpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNvYnNlcnZlciA9IHRoaXMuI29ic2VydmVyU3ZjLmNyZWF0ZSgoKSA9PiB7XG4gICAgICB0aGlzLiNoaWdobGlnaHQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuI2hpZ2hsaWdodCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI2Rpc2Nvbm5lY3RPYnNlcnZlcigpO1xuICB9XG5cbiAgI2Rpc2Nvbm5lY3RPYnNlcnZlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuI29ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICAjaGlnaGxpZ2h0KCk6IHZvaWQge1xuICAgIHRoaXMuI2Rpc2Nvbm5lY3RPYnNlcnZlcigpO1xuXG4gICAgaWYgKHRoaXMuI2V4aXN0aW5nSGlnaGxpZ2h0KSB7XG4gICAgICByZW1vdmVIaWdobGlnaHQodGhpcy4jZWwpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLiNlbC5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFJlZ2V4ID0gY3JlYXRlU2VhcmNoUmVnZXgodGhpcy4jc2VhcmNoVGVybXMpO1xuXG4gICAgICAvLyBtYXJrIGFsbCBtYXRjaGVkIHRleHQgaW4gdGhlIERPTVxuICAgICAgaWYgKHNlYXJjaFJlZ2V4KSB7XG4gICAgICAgIG1hcmtUZXh0Tm9kZXMobm9kZSwgc2VhcmNoUmVnZXgpO1xuICAgICAgICB0aGlzLiNleGlzdGluZ0hpZ2hsaWdodCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jb2JzZXJ2ZURvbSgpO1xuICB9XG5cbiAgI29ic2VydmVEb20oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI29ic2VydmVyKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IGZhbHNlLFxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLiNvYnNlcnZlci5vYnNlcnZlKHRoaXMuI2VsLm5hdGl2ZUVsZW1lbnQsIGNvbmZpZyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
var _SkyTokensComponent_instances, _SkyTokensComponent__disabled, _SkyTokensComponent__dismissible, _SkyTokensComponent__focusable, _SkyTokensComponent__tokens, _SkyTokensComponent__displayWith, _SkyTokensComponent_messageStreamSub, _SkyTokensComponent_ngUnsubscribe, _SkyTokensComponent_changeDetector, _SkyTokensComponent__activeIndex, _SkyTokensComponent__messageStream, _SkyTokensComponent_focusPreviousToken, _SkyTokensComponent_focusNextToken, _SkyTokensComponent_focusLastToken, _SkyTokensComponent_focusActiveToken, _SkyTokensComponent_removeActiveToken, _SkyTokensComponent_initMessageStream, _SkyTokensComponent_notifyTokenSelected;
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { animate, style, transition, trigger } from '@angular/animations';
|
|
4
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChildren, inject, } from '@angular/core';
|
|
5
|
-
import { Subject } from 'rxjs';
|
|
6
|
-
import { takeUntil } from 'rxjs/operators';
|
|
7
|
-
import { SkyTokenComponent } from './token.component';
|
|
8
|
-
import { SkyTokensMessageType } from './types/tokens-message-type';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/common";
|
|
11
|
-
import * as i2 from "./token.component";
|
|
12
|
-
const DISPLAY_WITH_DEFAULT = 'name';
|
|
13
|
-
/**
|
|
14
|
-
* Creates a container that enables navigation between tokens using keyboard arrow keys.
|
|
15
|
-
* This is useful when combined with other components where the <kbd>Tab</kbd> key is
|
|
16
|
-
* reserved for other functions, such as the SKY UX Lookup component.
|
|
17
|
-
*/
|
|
18
|
-
export class SkyTokensComponent {
|
|
19
|
-
/**
|
|
20
|
-
* Whether to disable the tokens list to prevent users from selecting tokens,
|
|
21
|
-
* dismissing tokens, or navigating through the list with the arrow keys. When the tokens list
|
|
22
|
-
* is disabled, users can still place focus on items in the list using the `Tab` key.
|
|
23
|
-
* @default false
|
|
24
|
-
*/
|
|
25
|
-
set disabled(value) {
|
|
26
|
-
__classPrivateFieldSet(this, _SkyTokensComponent__disabled, !!value, "f");
|
|
27
|
-
}
|
|
28
|
-
get disabled() {
|
|
29
|
-
return __classPrivateFieldGet(this, _SkyTokensComponent__disabled, "f");
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Whether users can remove a token from the list by selecting a token's close button.
|
|
33
|
-
* @default true
|
|
34
|
-
*/
|
|
35
|
-
set dismissible(value) {
|
|
36
|
-
__classPrivateFieldSet(this, _SkyTokensComponent__dismissible, value !== false, "f");
|
|
37
|
-
}
|
|
38
|
-
get dismissible() {
|
|
39
|
-
return __classPrivateFieldGet(this, _SkyTokensComponent__dismissible, "f");
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* The token property to display for each item in the tokens list.
|
|
43
|
-
* @default "name"
|
|
44
|
-
*/
|
|
45
|
-
set displayWith(value) {
|
|
46
|
-
__classPrivateFieldSet(this, _SkyTokensComponent__displayWith, value || DISPLAY_WITH_DEFAULT, "f");
|
|
47
|
-
}
|
|
48
|
-
get displayWith() {
|
|
49
|
-
return __classPrivateFieldGet(this, _SkyTokensComponent__displayWith, "f");
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Whether users can place focus on tokens in the list using the `Tab` key.
|
|
53
|
-
* This does not affect the ability of users to select tokens, dismiss tokens,
|
|
54
|
-
* or navigate through the list with the arrow keys.
|
|
55
|
-
* @default true
|
|
56
|
-
*/
|
|
57
|
-
set focusable(value) {
|
|
58
|
-
__classPrivateFieldSet(this, _SkyTokensComponent__focusable, value !== false, "f");
|
|
59
|
-
}
|
|
60
|
-
get focusable() {
|
|
61
|
-
return __classPrivateFieldGet(this, _SkyTokensComponent__focusable, "f");
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* The array of tokens to include in the list.
|
|
65
|
-
*/
|
|
66
|
-
set tokens(value) {
|
|
67
|
-
__classPrivateFieldSet(this, _SkyTokensComponent__tokens, value || [], "f");
|
|
68
|
-
// The previous behavior was to set `this._tokens = value`, then emit `this._tokens`,
|
|
69
|
-
// which would emit `undefined` instead of a default value of `[]` returned by the
|
|
70
|
-
// get accessor when set to `undefined`. Emitting `value` instead of `this.#_tokensOrDefault`
|
|
71
|
-
// preserves that behavior.
|
|
72
|
-
this.tokensChange.emit(value);
|
|
73
|
-
}
|
|
74
|
-
get tokens() {
|
|
75
|
-
return __classPrivateFieldGet(this, _SkyTokensComponent__tokens, "f");
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* The observable of `SkyTokensMessage` that can place focus on a
|
|
79
|
-
* particular token or remove the active token from the list.
|
|
80
|
-
*/
|
|
81
|
-
set messageStream(value) {
|
|
82
|
-
__classPrivateFieldSet(this, _SkyTokensComponent__messageStream, value || new Subject(), "f");
|
|
83
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_initMessageStream).call(this);
|
|
84
|
-
}
|
|
85
|
-
get messageStream() {
|
|
86
|
-
return __classPrivateFieldGet(this, _SkyTokensComponent__messageStream, "f");
|
|
87
|
-
}
|
|
88
|
-
get activeIndex() {
|
|
89
|
-
return __classPrivateFieldGet(this, _SkyTokensComponent__activeIndex, "f");
|
|
90
|
-
}
|
|
91
|
-
set activeIndex(value) {
|
|
92
|
-
if (value >= __classPrivateFieldGet(this, _SkyTokensComponent__tokens, "f").length) {
|
|
93
|
-
value = __classPrivateFieldGet(this, _SkyTokensComponent__tokens, "f").length - 1;
|
|
94
|
-
this.focusIndexOverRange.emit();
|
|
95
|
-
}
|
|
96
|
-
if (value < 0) {
|
|
97
|
-
value = 0;
|
|
98
|
-
this.focusIndexUnderRange.emit();
|
|
99
|
-
}
|
|
100
|
-
__classPrivateFieldSet(this, _SkyTokensComponent__activeIndex, value || 0, "f");
|
|
101
|
-
}
|
|
102
|
-
constructor() {
|
|
103
|
-
_SkyTokensComponent_instances.add(this);
|
|
104
|
-
/**
|
|
105
|
-
* Fires when users navigate through the tokens list with the `Tab` key
|
|
106
|
-
* and attempt to move past the final token in the list.
|
|
107
|
-
*/
|
|
108
|
-
this.focusIndexOverRange = new EventEmitter();
|
|
109
|
-
/**
|
|
110
|
-
* Fires when users navigate through the tokens list with the `Tab` key
|
|
111
|
-
* and attempt to move before the first token in the list.
|
|
112
|
-
*/
|
|
113
|
-
this.focusIndexUnderRange = new EventEmitter();
|
|
114
|
-
/**
|
|
115
|
-
* Fires when users select a token in the list. This event emits the selected token.
|
|
116
|
-
*/
|
|
117
|
-
this.tokenSelected = new EventEmitter();
|
|
118
|
-
/**
|
|
119
|
-
* Fires when the tokens in the list change.
|
|
120
|
-
* This event emits an array of the tokens in the updated list.
|
|
121
|
-
*/
|
|
122
|
-
this.tokensChange = new EventEmitter();
|
|
123
|
-
/**
|
|
124
|
-
* Fires when all animations on the tokens are complete.
|
|
125
|
-
* @internal
|
|
126
|
-
*/
|
|
127
|
-
this.tokensRendered = new EventEmitter();
|
|
128
|
-
_SkyTokensComponent__disabled.set(this, false);
|
|
129
|
-
_SkyTokensComponent__dismissible.set(this, true);
|
|
130
|
-
_SkyTokensComponent__focusable.set(this, true);
|
|
131
|
-
_SkyTokensComponent__tokens.set(this, []);
|
|
132
|
-
_SkyTokensComponent__displayWith.set(this, DISPLAY_WITH_DEFAULT);
|
|
133
|
-
_SkyTokensComponent_messageStreamSub.set(this, void 0);
|
|
134
|
-
_SkyTokensComponent_ngUnsubscribe.set(this, new Subject());
|
|
135
|
-
_SkyTokensComponent_changeDetector.set(this, inject(ChangeDetectorRef));
|
|
136
|
-
_SkyTokensComponent__activeIndex.set(this, 0);
|
|
137
|
-
_SkyTokensComponent__messageStream.set(this, new Subject());
|
|
138
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_initMessageStream).call(this);
|
|
139
|
-
// Angular calls the trackBy function without applying the component instance's scope.
|
|
140
|
-
// Use a fat-arrow function so the current component instance's trackWith property can
|
|
141
|
-
// be referenced.
|
|
142
|
-
this.trackTokenFn = (_index, item) => {
|
|
143
|
-
if (this.trackWith) {
|
|
144
|
-
return item.value[this.trackWith];
|
|
145
|
-
}
|
|
146
|
-
return item;
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
ngOnDestroy() {
|
|
150
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_ngUnsubscribe, "f").next();
|
|
151
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_ngUnsubscribe, "f").complete();
|
|
152
|
-
}
|
|
153
|
-
onTokenClick(token) {
|
|
154
|
-
if (this.disabled) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_notifyTokenSelected).call(this, token);
|
|
158
|
-
}
|
|
159
|
-
animationDone() {
|
|
160
|
-
this.tokensRendered.emit();
|
|
161
|
-
}
|
|
162
|
-
onTokenKeyDown(event) {
|
|
163
|
-
if (!this.disabled) {
|
|
164
|
-
switch (event.key) {
|
|
165
|
-
case 'Left':
|
|
166
|
-
case 'ArrowLeft':
|
|
167
|
-
__classPrivateFieldGet(this, _SkyTokensComponent__messageStream, "f").next({
|
|
168
|
-
type: SkyTokensMessageType.FocusPreviousToken,
|
|
169
|
-
});
|
|
170
|
-
event.preventDefault();
|
|
171
|
-
break;
|
|
172
|
-
case 'Right':
|
|
173
|
-
case 'ArrowRight':
|
|
174
|
-
__classPrivateFieldGet(this, _SkyTokensComponent__messageStream, "f").next({
|
|
175
|
-
type: SkyTokensMessageType.FocusNextToken,
|
|
176
|
-
});
|
|
177
|
-
event.preventDefault();
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
selectToken(token) {
|
|
183
|
-
if (!this.disabled) {
|
|
184
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_notifyTokenSelected).call(this, token);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
removeToken(token) {
|
|
188
|
-
this.tokens = this.tokens.filter((t) => t !== token);
|
|
189
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_changeDetector, "f").detectChanges();
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
_SkyTokensComponent__disabled = new WeakMap(), _SkyTokensComponent__dismissible = new WeakMap(), _SkyTokensComponent__focusable = new WeakMap(), _SkyTokensComponent__tokens = new WeakMap(), _SkyTokensComponent__displayWith = new WeakMap(), _SkyTokensComponent_messageStreamSub = new WeakMap(), _SkyTokensComponent_ngUnsubscribe = new WeakMap(), _SkyTokensComponent_changeDetector = new WeakMap(), _SkyTokensComponent__activeIndex = new WeakMap(), _SkyTokensComponent__messageStream = new WeakMap(), _SkyTokensComponent_instances = new WeakSet(), _SkyTokensComponent_focusPreviousToken = function _SkyTokensComponent_focusPreviousToken() {
|
|
193
|
-
this.activeIndex--;
|
|
194
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_focusActiveToken).call(this);
|
|
195
|
-
}, _SkyTokensComponent_focusNextToken = function _SkyTokensComponent_focusNextToken() {
|
|
196
|
-
this.activeIndex++;
|
|
197
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_focusActiveToken).call(this);
|
|
198
|
-
}, _SkyTokensComponent_focusLastToken = function _SkyTokensComponent_focusLastToken() {
|
|
199
|
-
if (this.tokenComponents) {
|
|
200
|
-
this.activeIndex = this.tokenComponents.length - 1;
|
|
201
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_focusActiveToken).call(this);
|
|
202
|
-
}
|
|
203
|
-
}, _SkyTokensComponent_focusActiveToken = function _SkyTokensComponent_focusActiveToken() {
|
|
204
|
-
if (this.tokenComponents) {
|
|
205
|
-
const tokenComponent = this.tokenComponents.find((_comp, i) => {
|
|
206
|
-
return this.activeIndex === i;
|
|
207
|
-
});
|
|
208
|
-
if (tokenComponent) {
|
|
209
|
-
tokenComponent.focusElement();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}, _SkyTokensComponent_removeActiveToken = function _SkyTokensComponent_removeActiveToken() {
|
|
213
|
-
const token = this.tokens[this.activeIndex];
|
|
214
|
-
if (token) {
|
|
215
|
-
this.removeToken(token);
|
|
216
|
-
}
|
|
217
|
-
}, _SkyTokensComponent_initMessageStream = function _SkyTokensComponent_initMessageStream() {
|
|
218
|
-
if (__classPrivateFieldGet(this, _SkyTokensComponent_messageStreamSub, "f")) {
|
|
219
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_messageStreamSub, "f").unsubscribe();
|
|
220
|
-
}
|
|
221
|
-
__classPrivateFieldSet(this, _SkyTokensComponent_messageStreamSub, this.messageStream
|
|
222
|
-
.pipe(takeUntil(__classPrivateFieldGet(this, _SkyTokensComponent_ngUnsubscribe, "f")))
|
|
223
|
-
.subscribe((message) => {
|
|
224
|
-
switch (message.type) {
|
|
225
|
-
case SkyTokensMessageType.FocusLastToken:
|
|
226
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_focusLastToken).call(this);
|
|
227
|
-
break;
|
|
228
|
-
case SkyTokensMessageType.FocusActiveToken:
|
|
229
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_focusActiveToken).call(this);
|
|
230
|
-
break;
|
|
231
|
-
case SkyTokensMessageType.FocusPreviousToken:
|
|
232
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_focusPreviousToken).call(this);
|
|
233
|
-
break;
|
|
234
|
-
case SkyTokensMessageType.FocusNextToken:
|
|
235
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_focusNextToken).call(this);
|
|
236
|
-
break;
|
|
237
|
-
case SkyTokensMessageType.RemoveActiveToken:
|
|
238
|
-
__classPrivateFieldGet(this, _SkyTokensComponent_instances, "m", _SkyTokensComponent_removeActiveToken).call(this);
|
|
239
|
-
break;
|
|
240
|
-
}
|
|
241
|
-
}), "f");
|
|
242
|
-
}, _SkyTokensComponent_notifyTokenSelected = function _SkyTokensComponent_notifyTokenSelected(token) {
|
|
243
|
-
this.tokenSelected.emit({
|
|
244
|
-
token,
|
|
245
|
-
});
|
|
246
|
-
};
|
|
247
|
-
SkyTokensComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTokensComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
248
|
-
SkyTokensComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyTokensComponent, selector: "sky-tokens", inputs: { disabled: "disabled", dismissible: "dismissible", displayWith: "displayWith", trackWith: "trackWith", focusable: "focusable", tokens: "tokens", messageStream: "messageStream" }, outputs: { focusIndexOverRange: "focusIndexOverRange", focusIndexUnderRange: "focusIndexUnderRange", tokenSelected: "tokenSelected", tokensChange: "tokensChange", tokensRendered: "tokensRendered" }, viewQueries: [{ propertyName: "tokenComponents", predicate: SkyTokenComponent, descendants: true }], ngImport: i0, template: "<div\n class=\"sky-tokens\"\n [@blockAnimationOnLoad]\n [attr.role]=\"tokens.length ? 'grid' : null\"\n>\n <!--\n The role must use square brackets otherwise Angular sets the native 'role'\n attribute as well as the input attribute of the token, which fails accessibility rules.\n -->\n <sky-token\n *ngFor=\"let token of tokens; let i = index; trackBy: trackTokenFn\"\n [@.disabled]=\"!trackWith\"\n [@dismiss]\n [disabled]=\"disabled\"\n [dismissible]=\"dismissible\"\n [focusable]=\"focusable\"\n [role]=\"'row'\"\n (@dismiss.done)=\"animationDone()\"\n (dismiss)=\"removeToken(token)\"\n (click)=\"onTokenClick(token)\"\n (keydown)=\"onTokenKeyDown($event)\"\n (keyup.enter)=\"selectToken(token); $event.preventDefault()\"\n (tokenFocus)=\"activeIndex = i\"\n >\n {{ token.value[displayWith] }}\n </sky-token>\n <div class=\"sky-tokens-content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.sky-tokens{display:flex;flex-wrap:wrap;align-items:baseline;margin:-2px}.sky-tokens .sky-tokens-content,.sky-tokens ::ng-deep sky-token{flex:0 0 auto;display:inline-flex;padding:2px}.sky-tokens .sky-tokens-content{flex-grow:1;flex-basis:0px}.sky-tokens .sky-tokens-content:before{content:\"\\200b\"}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.SkyTokenComponent, selector: "sky-token", inputs: ["disabled", "ariaLabel", "dismissible", "focusable", "role"], outputs: ["dismiss", "tokenFocus"] }], animations: [
|
|
249
|
-
trigger('blockAnimationOnLoad', [transition(':enter', [])]),
|
|
250
|
-
trigger('dismiss', [
|
|
251
|
-
transition(':enter', [
|
|
252
|
-
style({
|
|
253
|
-
opacity: 0,
|
|
254
|
-
width: 0,
|
|
255
|
-
}),
|
|
256
|
-
animate('150ms ease-in', style({
|
|
257
|
-
opacity: 1,
|
|
258
|
-
width: '*',
|
|
259
|
-
})),
|
|
260
|
-
]),
|
|
261
|
-
transition(':leave', [
|
|
262
|
-
animate('150ms ease-in', style({
|
|
263
|
-
opacity: 0,
|
|
264
|
-
width: 0,
|
|
265
|
-
})),
|
|
266
|
-
]),
|
|
267
|
-
]),
|
|
268
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
269
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTokensComponent, decorators: [{
|
|
270
|
-
type: Component,
|
|
271
|
-
args: [{ selector: 'sky-tokens', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
272
|
-
trigger('blockAnimationOnLoad', [transition(':enter', [])]),
|
|
273
|
-
trigger('dismiss', [
|
|
274
|
-
transition(':enter', [
|
|
275
|
-
style({
|
|
276
|
-
opacity: 0,
|
|
277
|
-
width: 0,
|
|
278
|
-
}),
|
|
279
|
-
animate('150ms ease-in', style({
|
|
280
|
-
opacity: 1,
|
|
281
|
-
width: '*',
|
|
282
|
-
})),
|
|
283
|
-
]),
|
|
284
|
-
transition(':leave', [
|
|
285
|
-
animate('150ms ease-in', style({
|
|
286
|
-
opacity: 0,
|
|
287
|
-
width: 0,
|
|
288
|
-
})),
|
|
289
|
-
]),
|
|
290
|
-
]),
|
|
291
|
-
], template: "<div\n class=\"sky-tokens\"\n [@blockAnimationOnLoad]\n [attr.role]=\"tokens.length ? 'grid' : null\"\n>\n <!--\n The role must use square brackets otherwise Angular sets the native 'role'\n attribute as well as the input attribute of the token, which fails accessibility rules.\n -->\n <sky-token\n *ngFor=\"let token of tokens; let i = index; trackBy: trackTokenFn\"\n [@.disabled]=\"!trackWith\"\n [@dismiss]\n [disabled]=\"disabled\"\n [dismissible]=\"dismissible\"\n [focusable]=\"focusable\"\n [role]=\"'row'\"\n (@dismiss.done)=\"animationDone()\"\n (dismiss)=\"removeToken(token)\"\n (click)=\"onTokenClick(token)\"\n (keydown)=\"onTokenKeyDown($event)\"\n (keyup.enter)=\"selectToken(token); $event.preventDefault()\"\n (tokenFocus)=\"activeIndex = i\"\n >\n {{ token.value[displayWith] }}\n </sky-token>\n <div class=\"sky-tokens-content\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";.sky-tokens{display:flex;flex-wrap:wrap;align-items:baseline;margin:-2px}.sky-tokens .sky-tokens-content,.sky-tokens ::ng-deep sky-token{flex:0 0 auto;display:inline-flex;padding:2px}.sky-tokens .sky-tokens-content{flex-grow:1;flex-basis:0px}.sky-tokens .sky-tokens-content:before{content:\"\\200b\"}\n"] }]
|
|
292
|
-
}], ctorParameters: function () { return []; }, propDecorators: { disabled: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}], dismissible: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}], displayWith: [{
|
|
297
|
-
type: Input
|
|
298
|
-
}], trackWith: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], focusable: [{
|
|
301
|
-
type: Input
|
|
302
|
-
}], tokens: [{
|
|
303
|
-
type: Input
|
|
304
|
-
}], messageStream: [{
|
|
305
|
-
type: Input
|
|
306
|
-
}], focusIndexOverRange: [{
|
|
307
|
-
type: Output
|
|
308
|
-
}], focusIndexUnderRange: [{
|
|
309
|
-
type: Output
|
|
310
|
-
}], tokenSelected: [{
|
|
311
|
-
type: Output
|
|
312
|
-
}], tokensChange: [{
|
|
313
|
-
type: Output
|
|
314
|
-
}], tokensRendered: [{
|
|
315
|
-
type: Output
|
|
316
|
-
}], tokenComponents: [{
|
|
317
|
-
type: ViewChildren,
|
|
318
|
-
args: [SkyTokenComponent]
|
|
319
|
-
}] } });
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9pbmRpY2F0b3JzL3NyYy9saWIvbW9kdWxlcy90b2tlbnMvdG9rZW5zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9pbmRpY2F0b3JzL3NyYy9saWIvbW9kdWxlcy90b2tlbnMvdG9rZW5zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFHTixZQUFZLEVBQ1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQUVuRSxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUVwQzs7OztHQUlHO0FBa0NILE1BQU0sT0FBTyxrQkFBa0I7SUFDN0I7Ozs7O09BS0c7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUEwQjtRQUM1Qyx1QkFBQSxJQUFJLGlDQUFjLENBQUMsQ0FBQyxLQUFLLE1BQUEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sdUJBQUEsSUFBSSxxQ0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFD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VUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsS0FBSyxDQUFDO29DQUNKLE9BQU8sRUFBRSxDQUFDO29DQUNWLEtBQUssRUFBRSxDQUFDO2lDQUNULENBQUM7Z0NBQ0YsT0FBTyxDQUNMLGVBQWUsRUFDZixLQUFLLENBQUM7b0NBQ0osT0FBTyxFQUFFLENBQUM7b0NBQ1YsS0FBSyxFQUFFLEdBQUc7aUNBQ1gsQ0FBQyxDQUNIOzZCQUNGLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsT0FBTyxDQUNMLGVBQWUsRUFDZixLQUFLLENBQUM7b0NBQ0osT0FBTyxFQUFFLENBQUM7b0NBQ1YsS0FBSyxFQUFFLENBQUM7aUNBQ1QsQ0FBQyxDQUNIOzZCQUNGLENBQUM7eUJBQ0gsQ0FBQztxQkFDSDswRUFVVSxRQUFRO3NCQURsQixLQUFLO2dCQWNLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBY0ssV0FBVztzQkFEckIsS0FBSztnQkFjQyxTQUFTO3NCQURmLEtBQUs7Z0JBVUssU0FBUztzQkFEbkIsS0FBSztnQkFhSyxNQUFNO3NCQURoQixLQUFLO2dCQW1CSyxhQUFhO3NCQUR2QixLQUFLO2dCQWVDLG1CQUFtQjtzQkFEekIsTUFBTTtnQkFRQSxvQkFBb0I7c0JBRDFCLE1BQU07Z0JBT0EsYUFBYTtzQkFEbkIsTUFBTTtnQkFRQSxZQUFZO3NCQURsQixNQUFNO2dCQVFBLGNBQWM7c0JBRHBCLE1BQU07Z0JBOEJBLGVBQWU7c0JBRHJCLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUcmFja0J5RnVuY3Rpb24sXG4gIFZpZXdDaGlsZHJlbixcbiAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVRva2VuQ29tcG9uZW50IH0gZnJvbSAnLi90b2tlbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5VG9rZW4gfSBmcm9tICcuL3R5cGVzL3Rva2VuJztcbmltcG9ydCB7IFNreVRva2VuU2VsZWN0ZWRFdmVudEFyZ3MgfSBmcm9tICcuL3R5cGVzL3Rva2VuLXNlbGVjdGVkLWV2ZW50LWFyZ3MnO1xuaW1wb3J0IHsgU2t5VG9rZW5zTWVzc2FnZSB9IGZyb20gJy4vdHlwZXMvdG9rZW5zLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5VG9rZW5zTWVzc2FnZVR5cGUgfSBmcm9tICcuL3R5cGVzL3Rva2Vucy1tZXNzYWdlLXR5cGUnO1xuXG5jb25zdCBESVNQTEFZX1dJVEhfREVGQVVMVCA9ICduYW1lJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29udGFpbmVyIHRoYXQgZW5hYmxlcyBuYXZpZ2F0aW9uIGJldHdlZW4gdG9rZW5zIHVzaW5nIGtleWJvYXJkIGFycm93IGtleXMuXG4gKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgY29tcG9uZW50cyB3aGVyZSB0aGUgPGtiZD5UYWI8L2tiZD4ga2V5IGlzXG4gKiByZXNlcnZlZCBmb3Igb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIHRoZSBTS1kgVVggTG9va3VwIGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXRva2VucycsXG4gIHRlbXBsYXRlVXJsOiAnLi90b2tlbnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90b2tlbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdibG9ja0FuaW1hdGlvbk9uTG9hZCcsIFt0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXSldKSxcbiAgICB0cmlnZ2VyKCdkaXNtaXNzJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgfSksXG4gICAgICAgIGFuaW1hdGUoXG4gICAgICAgICAgJzE1MG1zIGVhc2UtaW4nLFxuICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgICAgICB3aWR0aDogJyonLFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMTUwbXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VG9rZW5zQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgdG9rZW5zIGxpc3QgdG8gcHJldmVudCB1c2VycyBmcm9tIHNlbGVjdGluZyB0b2tlbnMsXG4gICAqIGRpc21pc3NpbmcgdG9rZW5zLCBvciBuYXZpZ2F0aW5nIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUgYXJyb3cga2V5cy4gV2hlbiB0aGUgdG9rZW5zIGxpc3RcbiAgICogaXMgZGlzYWJsZWQsIHVzZXJzIGNhbiBzdGlsbCBwbGFjZSBmb2N1cyBvbiBpdGVtcyBpbiB0aGUgbGlzdCB1c2luZyB0aGUgYFRhYmAga2V5LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9ICEhdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfZGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB1c2VycyBjYW4gcmVtb3ZlIGEgdG9rZW4gZnJvbSB0aGUgbGlzdCBieSBzZWxlY3RpbmcgYSB0b2tlbidzIGNsb3NlIGJ1dHRvbi5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNtaXNzaWJsZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNtaXNzaWJsZSA9IHZhbHVlICE9PSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzbWlzc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19kaXNtaXNzaWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdG9rZW4gcHJvcGVydHkgdG8gZGlzcGxheSBmb3IgZWFjaCBpdGVtIGluIHRoZSB0b2tlbnMgbGlzdC5cbiAgICogQGRlZmF1bHQgXCJuYW1lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheVdpdGgodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNwbGF5V2l0aCA9IHZhbHVlIHx8IERJU1BMQVlfV0lUSF9ERUZBVUxUO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNwbGF5V2l0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNfZGlzcGxheVdpdGg7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRva2VuIHByb3BlcnR5IHRoYXQgcmVwcmVzZW50cyB0aGUgdG9rZW4ncyB1bmlxdWUgaWRlbnRpZmllci4gV2hlbiB0aGlzIHByb3BlcnR5XG4gICAqIGlzIHNldCwgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZCB3aGVuIGRpc21pc3NpbmcgdG9rZW5zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHRyYWNrV2l0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHVzZXJzIGNhbiBwbGFjZSBmb2N1cyBvbiB0b2tlbnMgaW4gdGhlIGxpc3QgdXNpbmcgdGhlIGBUYWJgIGtleS5cbiAgICogVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIGFiaWxpdHkgb2YgdXNlcnMgdG8gc2VsZWN0IHRva2VucywgZGlzbWlzcyB0b2tlbnMsXG4gICAqIG9yIG5hdmlnYXRlIHRocm91Z2ggdGhlIGxpc3Qgd2l0aCB0aGUgYXJyb3cga2V5cy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmb2N1c2FibGUodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfZm9jdXNhYmxlID0gdmFsdWUgIT09IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldCBmb2N1c2FibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19mb2N1c2FibGU7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFycmF5IG9mIHRva2VucyB0byBpbmNsdWRlIGluIHRoZSBsaXN0LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0b2tlbnModmFsdWU6IFNreVRva2VuW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfdG9rZW5zID0gdmFsdWUgfHwgW107XG4gICAgLy8gVGhlIHByZXZpb3VzIGJlaGF2aW9yIHdhcyB0byBzZXQgYHRoaXMuX3Rva2VucyA9IHZhbHVlYCwgdGhlbiBlbWl0IGB0aGlzLl90b2tlbnNgLFxuICAgIC8vIHdoaWNoIHdvdWxkIGVtaXQgYHVuZGVmaW5lZGAgaW5zdGVhZCBvZiBhIGRlZmF1bHQgdmFsdWUgb2YgYFtdYCByZXR1cm5lZCBieSB0aGVcbiAgICAvLyBnZXQgYWNjZXNzb3Igd2hlbiBzZXQgdG8gYHVuZGVmaW5lZGAuIEVtaXR0aW5nIGB2YWx1ZWAgaW5zdGVhZCBvZiBgdGhpcy4jX3Rva2Vuc09yRGVmYXVsdGBcbiAgICAvLyBwcmVzZXJ2ZXMgdGhhdCBiZWhhdmlvci5cbiAgICB0aGlzLnRva2Vuc0NoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9rZW5zKCk6IFNreVRva2VuW10ge1xuICAgIHJldHVybiB0aGlzLiNfdG9rZW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvYnNlcnZhYmxlIG9mIGBTa3lUb2tlbnNNZXNzYWdlYCB0aGF0IGNhbiBwbGFjZSBmb2N1cyBvbiBhXG4gICAqIHBhcnRpY3VsYXIgdG9rZW4gb3IgcmVtb3ZlIHRoZSBhY3RpdmUgdG9rZW4gZnJvbSB0aGUgbGlzdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbWVzc2FnZVN0cmVhbSh2YWx1ZTogU3ViamVjdDxTa3lUb2tlbnNNZXNzYWdlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19tZXNzYWdlU3RyZWFtID0gdmFsdWUgfHwgbmV3IFN1YmplY3Q8U2t5VG9rZW5zTWVzc2FnZT4oKTtcbiAgICB0aGlzLiNpbml0TWVzc2FnZVN0cmVhbSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBtZXNzYWdlU3RyZWFtKCk6IFN1YmplY3Q8U2t5VG9rZW5zTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLiNfbWVzc2FnZVN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIG5hdmlnYXRlIHRocm91Z2ggdGhlIHRva2VucyBsaXN0IHdpdGggdGhlIGBUYWJgIGtleVxuICAgKiBhbmQgYXR0ZW1wdCB0byBtb3ZlIHBhc3QgdGhlIGZpbmFsIHRva2VuIGluIHRoZSBsaXN0LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBmb2N1c0luZGV4T3ZlclJhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIG5hdmlnYXRlIHRocm91Z2ggdGhlIHRva2VucyBsaXN0IHdpdGggdGhlIGBUYWJgIGtleVxuICAgKiBhbmQgYXR0ZW1wdCB0byBtb3ZlIGJlZm9yZSB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGZvY3VzSW5kZXhVbmRlclJhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHNlbGVjdCBhIHRva2VuIGluIHRoZSBsaXN0LiBUaGlzIGV2ZW50IGVtaXRzIHRoZSBzZWxlY3RlZCB0b2tlbi5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdG9rZW5TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5VG9rZW5TZWxlY3RlZEV2ZW50QXJncz4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgdG9rZW5zIGluIHRoZSBsaXN0IGNoYW5nZS5cbiAgICogVGhpcyBldmVudCBlbWl0cyBhbiBhcnJheSBvZiB0aGUgdG9rZW5zIGluIHRoZSB1cGRhdGVkIGxpc3QuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHRva2Vuc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5VG9rZW5bXT4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgdG9rZW5zIGFyZSBjb21wbGV0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHRva2Vuc1JlbmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHB1YmxpYyBnZXQgYWN0aXZlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy4jX2FjdGl2ZUluZGV4O1xuICB9XG5cbiAgcHVibGljIHNldCBhY3RpdmVJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlID49IHRoaXMuI190b2tlbnMubGVuZ3RoKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuI190b2tlbnMubGVuZ3RoIC0gMTtcbiAgICAgIHRoaXMuZm9jdXNJbmRleE92ZXJSYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgdmFsdWUgPSAwO1xuICAgICAgdGhpcy5mb2N1c0luZGV4VW5kZXJSYW5nZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgdGhpcy4jX2FjdGl2ZUluZGV4ID0gdmFsdWUgfHwgMDtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja1Rva2VuRm46IFRyYWNrQnlGdW5jdGlvbjxTa3lUb2tlbj47XG5cbiAgI19kaXNhYmxlZCA9IGZhbHNlO1xuICAjX2Rpc21pc3NpYmxlID0gdHJ1ZTtcbiAgI19mb2N1c2FibGUgPSB0cnVlO1xuICAjX3Rva2VuczogU2t5VG9rZW5bXSA9IFtdO1xuICAjX2Rpc3BsYXlXaXRoID0gRElTUExBWV9XSVRIX0RFRkFVTFQ7XG5cbiAgQFZpZXdDaGlsZHJlbihTa3lUb2tlbkNvbXBvbmVudClcbiAgcHVibGljIHRva2VuQ29tcG9uZW50czogUXVlcnlMaXN0PFNreVRva2VuQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICAjbWVzc2FnZVN0cmVhbVN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI2NoYW5nZURldGVjdG9yID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAjX2FjdGl2ZUluZGV4ID0gMDtcbiAgI19tZXNzYWdlU3RyZWFtID0gbmV3IFN1YmplY3Q8U2t5VG9rZW5zTWVzc2FnZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNpbml0TWVzc2FnZVN0cmVhbSgpO1xuXG4gICAgLy8gQW5ndWxhciBjYWxscyB0aGUgdHJhY2tCeSBmdW5jdGlvbiB3aXRob3V0IGFwcGx5aW5nIHRoZSBjb21wb25lbnQgaW5zdGFuY2UncyBzY29wZS5cbiAgICAvLyBVc2UgYSBmYXQtYXJyb3cgZnVuY3Rpb24gc28gdGhlIGN1cnJlbnQgY29tcG9uZW50IGluc3RhbmNlJ3MgdHJhY2tXaXRoIHByb3BlcnR5IGNhblxuICAgIC8vIGJlIHJlZmVyZW5jZWQuXG4gICAgdGhpcy50cmFja1Rva2VuRm4gPSAoX2luZGV4LCBpdGVtKTogdW5rbm93biA9PiB7XG4gICAgICBpZiAodGhpcy50cmFja1dpdGgpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWVbdGhpcy50cmFja1dpdGhdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblRva2VuQ2xpY2sodG9rZW46IFNreVRva2VuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNub3RpZnlUb2tlblNlbGVjdGVkKHRva2VuKTtcbiAgfVxuXG4gIHB1YmxpYyBhbmltYXRpb25Eb25lKCk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5zUmVuZGVyZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uVG9rZW5LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICBjYXNlICdMZWZ0JzpcbiAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgICB0aGlzLiNfbWVzc2FnZVN0cmVhbS5uZXh0KHtcbiAgICAgICAgICAgIHR5cGU6IFNreVRva2Vuc01lc3NhZ2VUeXBlLkZvY3VzUHJldmlvdXNUb2tlbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ1JpZ2h0JzpcbiAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgICAgdGhpcy4jX21lc3NhZ2VTdHJlYW0ubmV4dCh7XG4gICAgICAgICAgICB0eXBlOiBTa3lUb2tlbnNNZXNzYWdlVHlwZS5Gb2N1c05leHRUb2tlbixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RUb2tlbih0b2tlbjogU2t5VG9rZW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuI25vdGlmeVRva2VuU2VsZWN0ZWQodG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUb2tlbih0b2tlbjogU2t5VG9rZW4pOiB2b2lkIHtcbiAgICB0aGlzLnRva2VucyA9IHRoaXMudG9rZW5zLmZpbHRlcigodCkgPT4gdCAhPT0gdG9rZW4pO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gICNmb2N1c1ByZXZpb3VzVG9rZW4oKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVJbmRleC0tO1xuICAgIHRoaXMuI2ZvY3VzQWN0aXZlVG9rZW4oKTtcbiAgfVxuXG4gICNmb2N1c05leHRUb2tlbigpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4Kys7XG4gICAgdGhpcy4jZm9jdXNBY3RpdmVUb2tlbigpO1xuICB9XG5cbiAgI2ZvY3VzTGFzdFRva2VuKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRva2VuQ29tcG9uZW50cykge1xuICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMudG9rZW5Db21wb25lbnRzLmxlbmd0aCAtIDE7XG4gICAgICB0aGlzLiNmb2N1c0FjdGl2ZVRva2VuKCk7XG4gICAgfVxuICB9XG5cbiAgI2ZvY3VzQWN0aXZlVG9rZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG9rZW5Db21wb25lbnRzKSB7XG4gICAgICBjb25zdCB0b2tlbkNvbXBvbmVudCA9IHRoaXMudG9rZW5Db21wb25lbnRzLmZpbmQoXG4gICAgICAgIChfY29tcDogU2t5VG9rZW5Db21wb25lbnQsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUluZGV4ID09PSBpO1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAodG9rZW5Db21wb25lbnQpIHtcbiAgICAgICAgdG9rZW5Db21wb25lbnQuZm9jdXNFbGVtZW50KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI3JlbW92ZUFjdGl2ZVRva2VuKCk6IHZvaWQge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5hY3RpdmVJbmRleF07XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLnJlbW92ZVRva2VuKHRva2VuKTtcbiAgICB9XG4gIH1cblxuICAjaW5pdE1lc3NhZ2VTdHJlYW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIpIHtcbiAgICAgIHRoaXMuI21lc3NhZ2VTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLiNtZXNzYWdlU3RyZWFtU3ViID0gdGhpcy5tZXNzYWdlU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBTa3lUb2tlbnNNZXNzYWdlKSA9PiB7XG4gICAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBTa3lUb2tlbnNNZXNzYWdlVHlwZS5Gb2N1c0xhc3RUb2tlbjpcbiAgICAgICAgICAgIHRoaXMuI2ZvY3VzTGFzdFRva2VuKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgU2t5VG9rZW5zTWVzc2FnZVR5cGUuRm9jdXNBY3RpdmVUb2tlbjpcbiAgICAgICAgICAgIHRoaXMuI2ZvY3VzQWN0aXZlVG9rZW4oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBTa3lUb2tlbnNNZXNzYWdlVHlwZS5Gb2N1c1ByZXZpb3VzVG9rZW46XG4gICAgICAgICAgICB0aGlzLiNmb2N1c1ByZXZpb3VzVG9rZW4oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBTa3lUb2tlbnNNZXNzYWdlVHlwZS5Gb2N1c05leHRUb2tlbjpcbiAgICAgICAgICAgIHRoaXMuI2ZvY3VzTmV4dFRva2VuKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgU2t5VG9rZW5zTWVzc2FnZVR5cGUuUmVtb3ZlQWN0aXZlVG9rZW46XG4gICAgICAgICAgICB0aGlzLiNyZW1vdmVBY3RpdmVUb2tlbigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgI25vdGlmeVRva2VuU2VsZWN0ZWQodG9rZW46IFNreVRva2VuKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblNlbGVjdGVkLmVtaXQoe1xuICAgICAgdG9rZW4sXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktdG9rZW5zXCJcbiAgW0BibG9ja0FuaW1hdGlvbk9uTG9hZF1cbiAgW2F0dHIucm9sZV09XCJ0b2tlbnMubGVuZ3RoID8gJ2dyaWQnIDogbnVsbFwiXG4+XG4gIDwhLS1cbiAgICAgIFRoZSByb2xlIG11c3QgdXNlIHNxdWFyZSBicmFja2V0cyBvdGhlcndpc2UgQW5ndWxhciBzZXRzIHRoZSBuYXRpdmUgJ3JvbGUnXG4gICAgICBhdHRyaWJ1dGUgYXMgd2VsbCBhcyB0aGUgaW5wdXQgYXR0cmlidXRlIG9mIHRoZSB0b2tlbiwgd2hpY2ggZmFpbHMgYWNjZXNzaWJpbGl0eSBydWxlcy5cbiAgICAtLT5cbiAgPHNreS10b2tlblxuICAgICpuZ0Zvcj1cImxldCB0b2tlbiBvZiB0b2tlbnM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrVG9rZW5GblwiXG4gICAgW0AuZGlzYWJsZWRdPVwiIXRyYWNrV2l0aFwiXG4gICAgW0BkaXNtaXNzXVxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2Rpc21pc3NpYmxlXT1cImRpc21pc3NpYmxlXCJcbiAgICBbZm9jdXNhYmxlXT1cImZvY3VzYWJsZVwiXG4gICAgW3JvbGVdPVwiJ3JvdydcIlxuICAgIChAZGlzbWlzcy5kb25lKT1cImFuaW1hdGlvbkRvbmUoKVwiXG4gICAgKGRpc21pc3MpPVwicmVtb3ZlVG9rZW4odG9rZW4pXCJcbiAgICAoY2xpY2spPVwib25Ub2tlbkNsaWNrKHRva2VuKVwiXG4gICAgKGtleWRvd24pPVwib25Ub2tlbktleURvd24oJGV2ZW50KVwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlbGVjdFRva2VuKHRva2VuKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICh0b2tlbkZvY3VzKT1cImFjdGl2ZUluZGV4ID0gaVwiXG4gID5cbiAgICB7eyB0b2tlbi52YWx1ZVtkaXNwbGF5V2l0aF0gfX1cbiAgPC9za3ktdG9rZW4+XG4gIDxkaXYgY2xhc3M9XCJza3ktdG9rZW5zLWNvbnRlbnRcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|