carbon-components-angular 6.0.0-rc.4 → 6.0.0-rc.6
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/combobox/combobox.component.d.ts +3 -2
- package/docs/documentation/components/ComboBox.html +160 -138
- package/docs/documentation/components/ContentSwitcher.html +19 -13
- package/docs/documentation/components/ContextMenuComponent.html +35 -29
- package/docs/documentation/components/ContextMenuDividerComponent.html +11 -6
- package/docs/documentation/components/ContextMenuGroupComponent.html +25 -19
- package/docs/documentation/components/ContextMenuItemComponent.html +70 -64
- package/docs/documentation/components/DatePicker.html +106 -100
- package/docs/documentation/components/DatePickerInput.html +41 -35
- package/docs/documentation/components/Dropdown.html +118 -119
- package/docs/documentation/components/DropdownList.html +88 -97
- package/docs/documentation/js/search/search_index.js +2 -2
- package/docs/documentation/modules/TilesModule/dependencies.svg +106 -106
- package/docs/documentation/modules/TilesModule.html +106 -106
- package/docs/documentation/modules/TimePickerModule/dependencies.svg +36 -40
- package/docs/documentation/modules/TimePickerModule.html +36 -40
- package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +49 -45
- package/docs/documentation/modules/TimePickerSelectModule.html +49 -45
- package/docs/documentation/modules/ToggleModule/dependencies.svg +4 -4
- package/docs/documentation/modules/ToggleModule.html +4 -4
- package/docs/documentation/modules/TooltipModule/dependencies.svg +29 -29
- package/docs/documentation/modules/TooltipModule.html +29 -29
- package/docs/documentation/modules/TreeviewModule/dependencies.svg +35 -35
- package/docs/documentation/modules/TreeviewModule.html +35 -35
- package/docs/documentation.json +505 -497
- package/docs/storybook/{8383.1f80f6c8.iframe.bundle.js → 8383.844bcd95.iframe.bundle.js} +1 -1
- package/docs/storybook/combobox-combobox-stories.2b92d137.iframe.bundle.js +1 -0
- package/docs/storybook/{content-switcher-content-switcher-stories.753fbf1c.iframe.bundle.js → content-switcher-content-switcher-stories.0d959b5c.iframe.bundle.js} +1 -1
- package/docs/storybook/{context-menu-context-menu-stories.6344e050.iframe.bundle.js → context-menu-context-menu-stories.d2e63fe8.iframe.bundle.js} +1 -1
- package/docs/storybook/{datepicker-datepicker-stories.5cf89dc1.iframe.bundle.js → datepicker-datepicker-stories.b4bcda9f.iframe.bundle.js} +1 -1
- package/docs/storybook/iframe.html +2 -2
- package/docs/storybook/main.07778da0.iframe.bundle.js +1 -0
- package/docs/storybook/project.json +1 -1
- package/docs/storybook/{runtime~main.de5a4ef6.iframe.bundle.js → runtime~main.ec2949a5.iframe.bundle.js} +1 -1
- package/dropdown/dropdown.component.d.ts +2 -3
- package/dropdown/list/dropdown-list.component.d.ts +2 -3
- package/esm2022/combobox/combobox.component.mjs +11 -9
- package/esm2022/content-switcher/content-switcher.component.mjs +5 -4
- package/esm2022/context-menu/context-menu-divider.component.mjs +5 -4
- package/esm2022/context-menu/context-menu-group.component.mjs +5 -4
- package/esm2022/context-menu/context-menu-item.component.mjs +4 -4
- package/esm2022/context-menu/context-menu.component.mjs +4 -4
- package/esm2022/datepicker/datepicker.component.mjs +5 -4
- package/esm2022/datepicker-input/datepicker-input.component.mjs +5 -4
- package/esm2022/dropdown/dropdown.component.mjs +1 -1
- package/esm2022/dropdown/list/dropdown-list.component.mjs +4 -6
- package/fesm2022/carbon-components-angular-combobox.mjs +10 -8
- package/fesm2022/carbon-components-angular-combobox.mjs.map +1 -1
- package/fesm2022/carbon-components-angular-content-switcher.mjs +4 -3
- package/fesm2022/carbon-components-angular-content-switcher.mjs.map +1 -1
- package/fesm2022/carbon-components-angular-context-menu.mjs +11 -9
- package/fesm2022/carbon-components-angular-context-menu.mjs.map +1 -1
- package/fesm2022/carbon-components-angular-datepicker-input.mjs +4 -3
- package/fesm2022/carbon-components-angular-datepicker-input.mjs.map +1 -1
- package/fesm2022/carbon-components-angular-datepicker.mjs +4 -3
- package/fesm2022/carbon-components-angular-datepicker.mjs.map +1 -1
- package/fesm2022/carbon-components-angular-dropdown.mjs +3 -5
- package/fesm2022/carbon-components-angular-dropdown.mjs.map +1 -1
- package/package.json +7 -7
- package/docs/storybook/combobox-combobox-stories.3bf37571.iframe.bundle.js +0 -1
- package/docs/storybook/main.3c25e34a.iframe.bundle.js +0 -1
|
@@ -62,10 +62,9 @@ export class DropdownList {
|
|
|
62
62
|
/**
|
|
63
63
|
* Creates an instance of `DropdownList`.
|
|
64
64
|
*/
|
|
65
|
-
constructor(elementRef, i18n
|
|
65
|
+
constructor(elementRef, i18n) {
|
|
66
66
|
this.elementRef = elementRef;
|
|
67
67
|
this.i18n = i18n;
|
|
68
|
-
this.appRef = appRef;
|
|
69
68
|
this.ariaLabel = this.i18n.get().DROPDOWN_LIST.LABEL;
|
|
70
69
|
/**
|
|
71
70
|
* Template to bind to items in the `DropdownList` (optional).
|
|
@@ -441,7 +440,6 @@ export class DropdownList {
|
|
|
441
440
|
this.index = this.displayItems.indexOf(item);
|
|
442
441
|
this.highlightedItem = this.getItemId(this.index);
|
|
443
442
|
this.doEmitSelect(false);
|
|
444
|
-
this.appRef.tick();
|
|
445
443
|
}
|
|
446
444
|
}
|
|
447
445
|
onItemFocus(index) {
|
|
@@ -479,7 +477,7 @@ export class DropdownList {
|
|
|
479
477
|
});
|
|
480
478
|
}
|
|
481
479
|
}
|
|
482
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DropdownList, deps: [{ token: i0.ElementRef }, { token: i1.I18n }
|
|
480
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DropdownList, deps: [{ token: i0.ElementRef }, { token: i1.I18n }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
483
481
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: { ariaLabel: "ariaLabel", items: "items", listTpl: "listTpl", type: "type", showTitles: "showTitles" }, outputs: { select: "select", scroll: "scroll", blurIntent: "blurIntent" }, providers: [
|
|
484
482
|
{
|
|
485
483
|
provide: AbstractDropdownView,
|
|
@@ -615,7 +613,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
|
|
|
615
613
|
}
|
|
616
614
|
]
|
|
617
615
|
}]
|
|
618
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.I18n }
|
|
616
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.I18n }], propDecorators: { ariaLabel: [{
|
|
619
617
|
type: Input
|
|
620
618
|
}], items: [{
|
|
621
619
|
type: Input
|
|
@@ -638,4 +636,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
|
|
|
638
636
|
type: ViewChildren,
|
|
639
637
|
args: ["listItem"]
|
|
640
638
|
}] } });
|
|
641
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZHJvcGRvd24vbGlzdC9kcm9wZG93bi1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBRU4sWUFBWSxFQUdaLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQWdCLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7OztBQUlsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBcUVILE1BQU0sT0FBTyxZQUFZO2FBQ2pCLGNBQVMsR0FBRyxDQUFDLEFBQUosQ0FBSztJQUVyQjs7T0FFRztJQUNILElBQWEsS0FBSyxDQUFDLEtBQW9EO1FBQ3RFLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksVUFBVSxDQUFVLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLElB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bnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRPbkRlc3Ryb3ksXG5cdEV2ZW50RW1pdHRlcixcblx0VGVtcGxhdGVSZWYsXG5cdEFmdGVyVmlld0luaXQsXG5cdFZpZXdDaGlsZCxcblx0RWxlbWVudFJlZixcblx0Vmlld0NoaWxkcmVuLFxuXHRRdWVyeUxpc3QsXG5cdEFwcGxpY2F0aW9uUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBpc09ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgSTE4biB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IEFic3RyYWN0RHJvcGRvd25WaWV3IH0gZnJvbSBcIi4uL2Fic3RyYWN0LWRyb3Bkb3duLXZpZXcuY2xhc3NcIjtcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSBcIi4uL2xpc3QtaXRlbS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IHdhdGNoRm9jdXNKdW1wIH0gZnJvbSBcIi4uL2Ryb3Bkb3dudG9vbHNcIjtcbmltcG9ydCB7IFNjcm9sbEN1c3RvbUV2ZW50IH0gZnJvbSBcIi4vc2Nyb2xsLWN1c3RvbS1ldmVudC5pbnRlcmZhY2VcIjtcblxuXG4vKipcbiAqIGBgYGh0bWxcbiAqIDxjZHMtZHJvcGRvd24tbGlzdCBbaXRlbXNdPVwibGlzdEl0ZW1zXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAqIGBgYFxuICogYGBgdHlwZXNjcmlwdFxuICogbGlzdEl0ZW1zID0gW1xuICogXHR7XG4gKiBcdFx0Y29udGVudDogXCJpdGVtIG9uZVwiLFxuICogXHRcdHNlbGVjdGVkOiBmYWxzZVxuICogXHR9LFxuICogXHR7XG4gKiBcdFx0Y29udGVudDogXCJpdGVtIHR3b1wiLFxuICogXHRcdHNlbGVjdGVkOiBmYWxzZSxcbiAqIFx0fSxcbiAqIFx0e1xuICogXHRcdGNvbnRlbnQ6IFwiaXRlbSB0aHJlZVwiLFxuICogXHRcdHNlbGVjdGVkOiBmYWxzZVxuICogXHR9LFxuICogXHR7XG4gKiBcdFx0Y29udGVudDogXCJpdGVtIGZvdXJcIixcbiAqIFx0XHRzZWxlY3RlZDogZmFsc2VcbiAqIFx0fVxuICogXTtcbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLWRyb3Bkb3duLWxpc3QsIGlibS1kcm9wZG93bi1saXN0XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PHVsXG5cdFx0XHQjbGlzdFxuXHRcdFx0W2lkXT1cImxpc3RJZFwiXG5cdFx0XHRyb2xlPVwibGlzdGJveFwiXG5cdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX21lbnUgY2RzLS1tdWx0aS1zZWxlY3RcIlxuXHRcdFx0KHNjcm9sbCk9XCJlbWl0U2Nyb2xsKCRldmVudClcIlxuXHRcdFx0KGtleWRvd24pPVwibmF2aWdhdGVMaXN0KCRldmVudClcIlxuXHRcdFx0dGFiaW5kZXg9XCItMVwiXG5cdFx0XHRbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG5cdFx0XHRbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiaGlnaGxpZ2h0ZWRJdGVtXCI+XG5cdFx0XHRAZm9yIChpdGVtIG9mIGRpc3BsYXlJdGVtczsgdHJhY2sgaXRlbTsgbGV0IGkgPSAkaW5kZXgpIHtcblx0XHRcdFx0PGxpXG5cdFx0XHRcdFx0cm9sZT1cIm9wdGlvblwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cImRvQ2xpY2soJGV2ZW50LCBpdGVtKVwiXG5cdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19tZW51LWl0ZW1cIlxuXHRcdFx0XHRcdFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXRlbS5zZWxlY3RlZFwiXG5cdFx0XHRcdFx0W2lkXT1cImdldEl0ZW1JZChpKVwiXG5cdFx0XHRcdFx0W2F0dHIudGl0bGVdPVwiIHNob3dUaXRsZXMgPyBpdGVtLmNvbnRlbnQgOiBudWxsXCJcblx0XHRcdFx0XHRbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIlxuXHRcdFx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0XHRcdCdjZHMtLWxpc3QtYm94X19tZW51LWl0ZW0tLWFjdGl2ZSc6IGl0ZW0uc2VsZWN0ZWQsXG5cdFx0XHRcdFx0XHQnY2RzLS1saXN0LWJveF9fbWVudS1pdGVtLS1oaWdobGlnaHRlZCc6IGhpZ2hsaWdodGVkSXRlbSA9PT0gZ2V0SXRlbUlkKGkpXG5cdFx0XHRcdFx0fVwiPlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdCNsaXN0SXRlbVxuXHRcdFx0XHRcdFx0dGFiaW5kZXg9XCItMVwiXG5cdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX21lbnUtaXRlbV9fb3B0aW9uXCI+XG5cdFx0XHRcdFx0XHRAaWYgKCFsaXN0VHBsICYmIHR5cGUgPT09ICdtdWx0aScpIHtcblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1mb3JtLWl0ZW0gY2RzLS1jaGVja2JveC13cmFwcGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGxhYmVsIFthdHRyLmRhdGEtY29udGFpbmVkLWNoZWNrYm94LXN0YXRlXT1cIml0ZW0uc2VsZWN0ZWRcIiBjbGFzcz1cImNkcy0tY2hlY2tib3gtbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tY2hlY2tib3hcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiY2hlY2tib3hcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIi0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tY2hlY2tib3gtYXBwZWFyYW5jZVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiY2RzLS1jaGVja2JveC1sYWJlbC10ZXh0XCI+e3tpdGVtLmNvbnRlbnR9fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdEBpZiAoIWxpc3RUcGwgJiYgdHlwZSA9PT0gJ3NpbmdsZScpIHtcblx0XHRcdFx0XHRcdFx0e3tpdGVtLmNvbnRlbnR9fVxuXHRcdFx0XHRcdFx0XHQ8c3ZnXG5cdFx0XHRcdFx0XHRcdFx0Y2RzSWNvbj1cImNoZWNrbWFya1wiXG5cdFx0XHRcdFx0XHRcdFx0c2l6ZT1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tbGlzdC1ib3hfX21lbnUtaXRlbV9fc2VsZWN0ZWQtaWNvblwiPlxuXHRcdFx0XHRcdFx0XHQ8L3N2Zz5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdEBpZiAobGlzdFRwbCkge1xuXHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtfVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUcGxcIiAvPlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2xpPlxuXHRcdFx0fVxuXHRcdDwvdWw+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IEFic3RyYWN0RHJvcGRvd25WaWV3LFxuXHRcdFx0dXNlRXhpc3Rpbmc6IERyb3Bkb3duTGlzdFxuXHRcdH1cblx0XVxufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkxpc3QgaW1wbGVtZW50cyBBYnN0cmFjdERyb3Bkb3duVmlldywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblx0c3RhdGljIGxpc3RDb3VudCA9IDA7XG5cdEBJbnB1dCgpIGFyaWFMYWJlbCA9IHRoaXMuaTE4bi5nZXQoKS5EUk9QRE9XTl9MSVNULkxBQkVMO1xuXHQvKipcblx0ICogVGhlIGxpc3QgaXRlbXMgYmVsb25naW5nIHRvIHRoZSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogQXJyYXk8TGlzdEl0ZW0+IHwgT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+KSB7XG5cdFx0aWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcblx0XHRcdGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuXHRcdFx0XHR0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5faXRlbXNSZWFkeSA9IG5ldyBPYnNlcnZhYmxlPGJvb2xlYW4+KChvYnNlcnZlcikgPT4ge1xuXHRcdFx0XHR0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbiA9IHZhbHVlLnN1YnNjcmliZSh2ID0+IHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUxpc3Qodik7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIubmV4dCh0cnVlKTtcblx0XHRcdFx0XHRvYnNlcnZlci5jb21wbGV0ZSgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5vbkl0ZW1zUmVhZHkobnVsbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlTGlzdCh2YWx1ZSk7XG5cdFx0fVxuXHRcdHRoaXMuX29yaWdpbmFsSXRlbXMgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBpdGVtcygpOiBBcnJheTxMaXN0SXRlbT4gfCBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj4ge1xuXHRcdHJldHVybiB0aGlzLl9vcmlnaW5hbEl0ZW1zO1xuXHR9XG5cdC8qKlxuXHQgKiBUZW1wbGF0ZSB0byBiaW5kIHRvIGl0ZW1zIGluIHRoZSBgRHJvcGRvd25MaXN0YCAob3B0aW9uYWwpLlxuXHQgKi9cblx0QElucHV0KCkgbGlzdFRwbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XG5cdC8qKlxuXHQgKiBFdmVudCB0byBlbWl0IHNlbGVjdGlvbiBvZiBhIGxpc3QgaXRlbSB3aXRoaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0QE91dHB1dCgpIHNlbGVjdDogRXZlbnRFbWl0dGVyPHsgaXRlbTogTGlzdEl0ZW0sIGlzVXBkYXRlPzogYm9vbGVhbiB9IHwgTGlzdEl0ZW1bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdC8qKlxuXHQgKiBFdmVudCB0byBlbWl0IHNjcm9sbCBldmVudCBvZiBhIGxpc3Qgd2l0aGluIHRoZSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdEBPdXRwdXQoKSBzY3JvbGw6IEV2ZW50RW1pdHRlcjxTY3JvbGxDdXN0b21FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cdC8qKlxuXHQgKiBFdmVudCB0byBzdWdnZXN0IGEgYmx1ciBvbiB0aGUgdmlldy5cblx0ICogRW1pdHMgX2FmdGVyXyB0aGUgZmlyc3QvbGFzdCBpdGVtIGhhcyBiZWVuIGZvY3VzZWQuXG5cdCAqIGV4LlxuXHQgKiBBcnJvd1VwIC0+IGZvY3VzIGZpcnN0IGl0ZW1cblx0ICogQXJyb3dVcCAtPiBlbWl0IGV2ZW50XG5cdCAqXG5cdCAqIFdoZW4gdGhpcyBldmVudCBmaXJlcyBmb2N1cyBzaG91bGQgYmUgcGxhY2VkIG9uIHNvbWUgZWxlbWVudCBvdXRzaWRlIG9mIHRoZSBsaXN0IC0gYmx1cnJpbmcgdGhlIGxpc3QgYXMgYSByZXN1bHRcblx0ICovXG5cdEBPdXRwdXQoKSBibHVySW50ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxcInRvcFwiIHwgXCJib3R0b21cIj4oKTtcblx0LyoqXG5cdCAqIE1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmlldyBET00gZWxlbWVudCBmb3IgdGhlIHVub3JkZXJlZCBsaXN0IG9mIGl0ZW1zIHdpdGhpbiB0aGUgYERyb3Bkb3duTGlzdGAuXG5cdCAqL1xuXHRAVmlld0NoaWxkKFwibGlzdFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBsaXN0OiBFbGVtZW50UmVmO1xuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgYERyb3Bkb3duTGlzdGAgc3VwcG9ydHMgc2VsZWN0aW5nIG11bHRpcGxlIGl0ZW1zIGFzIG9wcG9zZWQgdG8gc2luZ2xlXG5cdCAqIGl0ZW0gc2VsZWN0aW9uLlxuXHQgKi9cblx0QElucHV0KCkgdHlwZTogXCJzaW5nbGVcIiB8IFwibXVsdGlcIiA9IFwic2luZ2xlXCI7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0byBzaG93IHRpdGxlIGF0dHJpYnV0ZSBvciBub3Rcblx0ICovXG5cdEBJbnB1dCgpIHNob3dUaXRsZXMgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSByZW5kZXJpbmcgc2l6ZSBvZiB0aGUgYERyb3Bkb3duTGlzdGAgaW5wdXQgY29tcG9uZW50LlxuXHQgKi9cblx0cHVibGljIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0cHVibGljIGxpc3RJZCA9IGBsaXN0Ym94LSR7RHJvcGRvd25MaXN0Lmxpc3RDb3VudCsrfWA7XG5cdHB1YmxpYyBoaWdobGlnaHRlZEl0ZW0gPSBudWxsO1xuXHQvKipcblx0ICogSG9sZHMgdGhlIGxpc3Qgb2YgaXRlbXMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgYERyb3Bkb3duTGlzdGAuXG5cdCAqIEl0IGRpZmZlcnMgZnJvbSB0aGUgdGhlIGNvbXBsZXRlIHNldCBvZiBpdGVtcyB3aGVuIGZpbHRlcmluZyBpcyB1c2VkIChidXRcblx0ICogaXQgaXMgYWx3YXlzIGEgc3Vic2V0IG9mIHRoZSB0b3RhbCBpdGVtcyBpbiBgRHJvcGRvd25MaXN0YCkuXG5cdCAqL1xuXHRwdWJsaWMgZGlzcGxheUl0ZW1zOiBBcnJheTxMaXN0SXRlbT4gPSBbXTtcblx0LyoqXG5cdCAqIE1haW50YWlucyB0aGUgaW5kZXggZm9yIHRoZSBzZWxlY3RlZCBpdGVtIHdpdGhpbiB0aGUgYERyb3Bkb3duTGlzdGAuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaW5kZXggPSAtMTtcblx0LyoqXG5cdCAqIEFuIGFycmF5IGhvbGRpbmcgdGhlIEhUTUwgbGlzdCBlbGVtZW50cyBpbiB0aGUgdmlldy5cblx0ICovXG5cdEBWaWV3Q2hpbGRyZW4oXCJsaXN0SXRlbVwiKSBwcm90ZWN0ZWQgbGlzdEVsZW1lbnRMaXN0OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cdC8qKlxuXHQgKiBPYnNlcnZhYmxlIGJvdW5kIHRvIGtleWRvd24gZXZlbnRzIHRvIGNvbnRyb2wgZmlsdGVyaW5nLlxuXHQgKi9cblx0cHJvdGVjdGVkIGZvY3VzSnVtcDtcblx0LyoqXG5cdCAqIFRyYWNrcyB0aGUgY3VycmVudCAoaWYgYW55KSBzdWJzY3JpcHRpb24gdG8gdGhlIGl0ZW1zIG9ic2VydmFibGUgc28gd2UgY2FuIGNsZWFuIHVwIHdoZW4gdGhlIGlucHV0IGlzIHVwZGF0ZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX2l0ZW1zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cdC8qKlxuXHQgKiBVc2VkIHRvIHJldGFpbiB0aGUgb3JpZ2luYWwgaXRlbXMgcGFzc2VkIHRvIHRoZSBzZXR0ZXIuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX29yaWdpbmFsSXRlbXM6IEFycmF5PExpc3RJdGVtPiB8IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+Pjtcblx0LyoqXG5cdCAqIFVzZWZ1bCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaXRlbXMsIHNob3VsZCBiZSBhY2Nlc3NlZCB2aWEgYGdldExpc3RJdGVtc2AuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgX2l0ZW1zOiBBcnJheTxMaXN0SXRlbT4gPSBbXTtcblx0LyoqXG5cdCAqIFVzZWQgdG8gd2FpdCBmb3IgaXRlbXMgaW4gY2FzZSB0aGV5IGFyZSBwYXNzZWQgdGhyb3VnaCBhbiBvYnNlcnZhYmxlLlxuXHQgKi9cblx0cHJvdGVjdGVkIF9pdGVtc1JlYWR5OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Y29uc3RydWN0b3IocHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBpMThuOiBJMThuLCBwcm90ZWN0ZWQgYXBwUmVmOiBBcHBsaWNhdGlvblJlZikge31cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFycmF5IG9mIGxpc3QgaXRlbXMgYW5kIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpdGVtIGFmdGVyIHZpZXcgaGFzIHJlbmRlcmVkLlxuXHQgKiBBZGRpdGlvbmFsbHksIGFueSBPYnNlcnZhYmxlcyBmb3IgdGhlIGBEcm9wZG93bkxpc3RgIGFyZSBpbml0aWFsaXplZC5cblx0ICovXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHR0aGlzLmluZGV4ID0gdGhpcy5nZXRMaXN0SXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKTtcblx0XHR0aGlzLnNldHVwRm9jdXNPYnNlcnZhYmxlKCk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmRvRW1pdFNlbGVjdCh0cnVlKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFueSBPYnNlcnZhYmxlcyBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKHRoaXMuZm9jdXNKdW1wKSB7XG5cdFx0XHR0aGlzLmZvY3VzSnVtcC51bnN1YnNjcmliZSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcblx0XHRcdHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZG9FbWl0U2VsZWN0KGlzVXBkYXRlID0gdHJ1ZSkge1xuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdHRoaXMuc2VsZWN0LmVtaXQoeyBpdGVtOiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCksIGlzVXBkYXRlOiBpc1VwZGF0ZSB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYWJ1c2UgamF2YXNjcmlwdHMgb2JqZWN0IG11dGFiaWxpdHkgdW50aWwgd2UgY2FuIGJyZWFrIHRoZSBBUEkgYW5kIHN3aXRjaCB0b1xuXHRcdFx0Ly8geyBpdGVtczogW10sIGlzVXBkYXRlOiB0cnVlIH1cblx0XHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZCgpIHx8IFtdO1xuXHRcdFx0c2VsZWN0ZWRbXCJpc1VwZGF0ZVwiXSA9IGlzVXBkYXRlO1xuXHRcdFx0dGhpcy5zZWxlY3QuZW1pdChzZWxlY3RlZCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0SXRlbUlkKGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5saXN0SWR9LSR7aW5kZXh9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBkaXNwbGF5ZWQgbGlzdCBvZiBpdGVtcyBhbmQgdGhlbiByZXRyaWV2ZXMgdGhlIG1vc3QgY3VycmVudCBwcm9wZXJ0aWVzIGZvciB0aGUgYERyb3Bkb3duTGlzdGAgZnJvbSB0aGUgRE9NLlxuXHQgKi9cblx0dXBkYXRlTGlzdChpdGVtcykge1xuXHRcdHRoaXMuX2l0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSkpO1xuXHRcdHRoaXMuZGlzcGxheUl0ZW1zID0gdGhpcy5faXRlbXM7XG5cdFx0dGhpcy51cGRhdGVJbmRleCgpO1xuXHRcdHRoaXMuc2V0dXBGb2N1c09ic2VydmFibGUoKTtcblx0XHR0aGlzLmRvRW1pdFNlbGVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbHRlcnMgdGhlIGl0ZW1zIGJlaW5nIGRpc3BsYXllZCBpbiB0aGUgRE9NIGxpc3QuXG5cdCAqL1xuXHRmaWx0ZXJCeShxdWVyeSA9IFwiXCIpIHtcblx0XHRpZiAocXVlcnkpIHtcblx0XHRcdHRoaXMuZGlzcGxheUl0ZW1zID0gdGhpcy5nZXRMaXN0SXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmNvbnRlbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKSk7XG5cdFx0XHQvLyBSZXNldCBpbmRleCBpZiBpdGVtcyB3ZXJlIGZvdW5kXG5cdFx0XHQvLyBQcmV2ZW50IHNlbGVjdGluZyBpbmRleCBpbiBsaXN0IHRoYXQgYXJlIHVuZGVmaW5lZC5cblx0XHRcdGlmICh0aGlzLmRpc3BsYXlJdGVtcykge1xuXHRcdFx0XHR0aGlzLmluZGV4ID0gMDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5kaXNwbGF5SXRlbXMgPSB0aGlzLmdldExpc3RJdGVtcygpO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlSW5kZXgoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyAob3IgcmUtaW5pdGlhbGl6ZXMpIHRoZSBPYnNlcnZhYmxlIHRoYXQgaGFuZGxlcyBzd2l0Y2hpbmcgZm9jdXMgdG8gYW4gZWxlbWVudCBiYXNlZCBvblxuXHQgKiBrZXkgaW5wdXQgbWF0Y2hpbmcgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgaXRlbSBpbiB0aGUgbGlzdC5cblx0ICovXG5cdHNldHVwRm9jdXNPYnNlcnZhYmxlKCkge1xuXHRcdGlmICghdGhpcy5saXN0KSB7IHJldHVybjsgfVxuXHRcdGlmICh0aGlzLmZvY3VzSnVtcCkge1xuXHRcdFx0dGhpcy5mb2N1c0p1bXAudW5zdWJzY3JpYmUoKTtcblx0XHR9XG5cdFx0bGV0IGVsTGlzdCA9IEFycmF5LmZyb20odGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcImxpXCIpKTtcblx0XHR0aGlzLmZvY3VzSnVtcCA9IHdhdGNoRm9jdXNKdW1wKHRoaXMubGlzdC5uYXRpdmVFbGVtZW50LCBlbExpc3QpXG5cdFx0XHQuc3Vic2NyaWJlKGVsID0+IHtcblx0XHRcdFx0ZWwuZm9jdXMoKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGBMaXN0SXRlbWAgdGhhdCBpcyBzdWJzZXF1ZW50IHRvIHRoZSBzZWxlY3RlZCBpdGVtIGluIHRoZSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdGdldE5leHRJdGVtKCk6IExpc3RJdGVtIHtcblx0XHRpZiAodGhpcy5pbmRleCA8IHRoaXMuZGlzcGxheUl0ZW1zLmxlbmd0aCAtIDEpIHtcblx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGlzcGxheUl0ZW1zW3RoaXMuaW5kZXhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3RlZCBpdGVtIGlzIG5vdCB0aGUgbGFzdCBpdGVtIGluIHRoZSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdGhhc05leHRFbGVtZW50KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmluZGV4IDwgdGhpcy5kaXNwbGF5SXRlbXMubGVuZ3RoIC0gMSAmJlxuXHRcdFx0KCEodGhpcy5pbmRleCA9PT0gdGhpcy5kaXNwbGF5SXRlbXMubGVuZ3RoIC0gMikgfHwgIXRoaXMuZGlzcGxheUl0ZW1zW3RoaXMuaW5kZXggKyAxXS5kaXNhYmxlZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYEhUTUxFbGVtZW50YCBmb3IgdGhlIGl0ZW0gdGhhdCBpcyBzdWJzZXF1ZW50IHRvIHRoZSBzZWxlY3RlZCBpdGVtLlxuXHQgKi9cblx0Z2V0TmV4dEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuXHRcdC8vIE9ubHkgcmV0dXJuIG5hdGl2ZSBlbGVtZW50cyBpZiB0aGV5IGFyZSByZW5kZXJlZFxuXHRcdGNvbnN0IGVsZW1MaXN0ID0gdGhpcy5saXN0RWxlbWVudExpc3QgPyB0aGlzLmxpc3RFbGVtZW50TGlzdC50b0FycmF5KCkgOiBbXTtcblx0XHRpZiAoIWVsZW1MaXN0Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogU3RhcnQgY2hlY2tpbmcgZnJvbSBuZXh0IGluZGV4XG5cdFx0ICogQ29udGludWUgbG9vcGluZyB0aHJvdWdoIHRoZSBsaXN0IHVudGlsIGEgbm9uIGRpc2FiZWxlZCBlbGVtZW50IGlzIGZvdW5kIG9yXG5cdFx0ICogZW5kIG9mIGxpc3QgaXMgcmVhY2hlZFxuXHRcdCAqL1xuXHRcdGZvciAobGV0IGkgPSB0aGlzLmluZGV4ICsgMTsgaSA8IGVsZW1MaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvLyBJZiB0aGUgdmFsdWVzIGluIHRoZSBsaXN0IGFyZSBub3QgZGlzYWJsZWRcblx0XHRcdGlmICghdGhpcy5kaXNwbGF5SXRlbXNbaV0uZGlzYWJsZWQpIHtcblx0XHRcdFx0dGhpcy5pbmRleCA9IGk7XG5cdFx0XHRcdHJldHVybiBlbGVtTGlzdFtpXS5uYXRpdmVFbGVtZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtTGlzdFt0aGlzLmluZGV4XT8ubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBgTGlzdEl0ZW1gIHRoYXQgcHJlY2VkZXMgdGhlIHNlbGVjdGVkIGl0ZW0gd2l0aGluIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0UHJldkl0ZW0oKTogTGlzdEl0ZW0ge1xuXHRcdGlmICh0aGlzLmluZGV4ID4gMCkge1xuXHRcdFx0dGhpcy5pbmRleC0tO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaXNwbGF5SXRlbXNbdGhpcy5pbmRleF07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgbm90IHRoZSBmaXJzdCBpbiB0aGUgbGlzdC5cblx0ICovXG5cdGhhc1ByZXZFbGVtZW50KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmluZGV4ID4gMCAmJiAoISh0aGlzLmluZGV4ID09PSAxKSB8fCAhdGhpcy5kaXNwbGF5SXRlbXNbMF0uZGlzYWJsZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGBIVE1MRWxlbWVudGAgZm9yIHRoZSBpdGVtIHRoYXQgcHJlY2VkZXMgdGhlIHNlbGVjdGVkIGl0ZW0uXG5cdCAqL1xuXHRnZXRQcmV2RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG5cdFx0Ly8gT25seSByZXR1cm4gbmF0aXZlIGVsZW1lbnRzIGlmIHRoZXkgYXJlIHJlbmRlcmVkXG5cdFx0Y29uc3QgZWxlbUxpc3QgPSB0aGlzLmxpc3RFbGVtZW50TGlzdCA/IHRoaXMubGlzdEVsZW1lbnRMaXN0LnRvQXJyYXkoKSA6IFtdO1xuXHRcdGlmICghZWxlbUxpc3QubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBTdGFydCBjaGVja2luZyBmcm9tIG5leHQgaW5kZXhcblx0XHQgKiBDb250aW51ZSBsb29waW5nIHRocm91Z2ggdGhlIGxpc3QgdW50aWwgYSBub24gZGlzYWJlbGVkIGVsZW1lbnQgaXMgZm91bmQgb3Jcblx0XHQgKiBlbmQgb2YgbGlzdCBpcyByZWFjaGVkXG5cdFx0ICovXG5cdFx0Zm9yIChsZXQgaSA9IHRoaXMuaW5kZXggLSAxOyBpIDwgdGhpcy5pbmRleCAmJiBpID49IDA7IGktLSkge1xuXHRcdFx0Ly8gSWYgdGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBhcmUgbm90IGRpc2FibGVkXG5cdFx0XHRpZiAoIXRoaXMuZGlzcGxheUl0ZW1zW2ldLmRpc2FibGVkKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXggPSBpO1xuXHRcdFx0XHRyZXR1cm4gZWxlbUxpc3RbaV0ubmF0aXZlRWxlbWVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbUxpc3RbdGhpcy5pbmRleF0ubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBgTGlzdEl0ZW1gIHRoYXQgaXMgc2VsZWN0ZWQgd2l0aGluIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0Q3VycmVudEl0ZW0oKTogTGlzdEl0ZW0ge1xuXHRcdGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGlzcGxheUl0ZW1zWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaXNwbGF5SXRlbXNbdGhpcy5pbmRleF07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYEhUTUxFbGVtZW50YCBmb3IgdGhlIGl0ZW0gdGhhdCBpcyBzZWxlY3RlZCB3aXRoaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0Q3VycmVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuXHRcdGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubGlzdEVsZW1lbnRMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmxpc3RFbGVtZW50TGlzdC50b0FycmF5KClbdGhpcy5pbmRleF0ubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpdGVtcyBhcyBhbiBBcnJheVxuXHQgKi9cblx0Z2V0TGlzdEl0ZW1zKCk6IEFycmF5PExpc3RJdGVtPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIGl0ZW0ocykgaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0U2VsZWN0ZWQoKTogTGlzdEl0ZW1bXSB7XG5cdFx0bGV0IHNlbGVjdGVkID0gdGhpcy5nZXRMaXN0SXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKTtcblx0XHRpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmFuc2Zvcm1zIGFycmF5IGlucHV0IGxpc3Qgb2YgaXRlbXMgdG8gdGhlIGNvcnJlY3Qgc3RhdGUgYnkgdXBkYXRpbmcgdGhlIHNlbGVjdGVkIGl0ZW0ocykuXG5cdCAqL1xuXHRwcm9wYWdhdGVTZWxlY3RlZCh2YWx1ZTogQXJyYXk8TGlzdEl0ZW0+KTogdm9pZCB7XG5cdFx0Ly8gaWYgd2UgZ2V0IGEgbm9uLWFycmF5LCBsb2cgb3V0IGFuIGVycm9yIChzaW5jZSBpdCBpcyBvbmUpXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LnByb3BhZ2F0ZVNlbGVjdGVkIGV4cGVjdHMgYW4gQXJyYXk8TGlzdEl0ZW0+LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG5cdFx0fVxuXHRcdHRoaXMub25JdGVtc1JlYWR5KCgpID0+IHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkTmV3SXRlbXMgPSBbXTtcblx0XHRcdGZvciAobGV0IG5ld0l0ZW0gb2YgdmFsdWUpIHtcblx0XHRcdFx0aWYgKG5ld0l0ZW0gJiYgbmV3SXRlbS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdC8vIGNvcHkgdGhlIGl0ZW1cblx0XHRcdFx0XHRsZXQgdGVtcE5ld0l0ZW06IHN0cmluZyB8IExpc3RJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgbmV3SXRlbSk7XG5cdFx0XHRcdFx0Ly8gZGVsZXRlZCBzZWxlY3RlZCBiZWNhdXNlIGl0J3Mgd2hhdCB3ZSBfd2FudF8gdG8gY2hhbmdlXG5cdFx0XHRcdFx0ZGVsZXRlIHRlbXBOZXdJdGVtLnNlbGVjdGVkO1xuXHRcdFx0XHRcdC8vIHN0cmluZ2lmeSBmb3IgY29tcGFyZSBsYXRlclxuXHRcdFx0XHRcdHRlbXBOZXdJdGVtID0gSlNPTi5zdHJpbmdpZnkodGVtcE5ld0l0ZW0pO1xuXHRcdFx0XHRcdC8vIGFkZCB0byB0aGUgbGlzdCBvZiBzZWxlY3RlZCBpdGVtc1xuXHRcdFx0XHRcdHNlbGVjdGVkTmV3SXRlbXMucHVzaCh0ZW1wTmV3SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSBsaXN0IGl0ZW1zIGFuZCB1cGRhdGUgdGhlIGBzZWxlY3RlZGAgc3RhdGUgZm9yIG1hdGNoaW5nIGl0ZW1zIGluIGB2YWx1ZWBcblx0XHRcdGZvciAobGV0IG9sZEl0ZW0gb2YgdGhpcy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0XHQvLyBmYXN0IHBhdGggd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWRcblx0XHRcdFx0aWYgKHNlbGVjdGVkTmV3SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0b2xkSXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY29weSB0aGUgaXRlbVxuXHRcdFx0XHRsZXQgdGVtcE9sZEl0ZW06IHN0cmluZyB8IExpc3RJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgb2xkSXRlbSk7XG5cdFx0XHRcdC8vIGRlbGV0ZWQgc2VsZWN0ZWQgYmVjYXVzZSBpdCdzIHdoYXQgd2UgX3dhbnRfIHRvIGNoYW5nZVxuXHRcdFx0XHRkZWxldGUgdGVtcE9sZEl0ZW0uc2VsZWN0ZWQ7XG5cdFx0XHRcdC8vIHN0cmluZ2lmeSBmb3IgY29tcGFyZVxuXHRcdFx0XHR0ZW1wT2xkSXRlbSA9IEpTT04uc3RyaW5naWZ5KHRlbXBPbGRJdGVtKTtcblx0XHRcdFx0Zm9yIChsZXQgc2VsZWN0ZWROZXdJdGVtIG9mIHNlbGVjdGVkTmV3SXRlbXMpIHtcblx0XHRcdFx0XHQvLyBkbyB0aGUgY29tcGFyZVxuXHRcdFx0XHRcdGlmICh0ZW1wT2xkSXRlbS5pbmNsdWRlcyhzZWxlY3RlZE5ld0l0ZW0pKSB7XG5cdFx0XHRcdFx0XHRvbGRJdGVtLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdC8vIGlmIHdlJ3ZlIGZvdW5kIGEgbWF0Y2hpbmcgaXRlbSwgd2UgY2FuIHN0b3AgbG9vcGluZ1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9sZEl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBmb2N1cyBpbiB0aGUgbGlzdCwgZWZmZWN0aXZlbHkgYSB3cmFwcGVyIGZvciBgZ2V0Q3VycmVudEVsZW1lbnQoKS5mb2N1cygpYFxuXHQgKi9cblx0aW5pdEZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHRcdFx0dGhpcy51cGRhdGVJbmRleCgpO1xuXHRcdH1cblxuXHRcdHRoaXMubGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuaW5kZXgpO1xuXHRcdH0pO1xuXHR9XG5cblx0dXBkYXRlSW5kZXgoKSB7XG5cdFx0Ly8gaW5pdGlhbGl6ZSBpbmRleCBvbiB0aGUgZmlyc3Qgc2VsZWN0ZWQgaXRlbSBvclxuXHRcdC8vIG9uIHRoZSBuZXh0IG5vbiBkaXNhYmxlZCBpdGVtIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZFxuXHRcdC8vIGluIGNhc2UsIGlmIGFsbCBpdGVtcyBhcmUgZGlzYWJsZWQsIHRoZSBpbmRleCB2YWx1ZSB3aWxsIHJlbWFpbiBzYW1lXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5pbmRleCA9IHRoaXMuZGlzcGxheUl0ZW1zLmluZGV4T2Yoc2VsZWN0ZWRbMF0pO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5oYXNOZXh0RWxlbWVudCgpKSB7XG5cdFx0XHR0aGlzLmdldE5leHRFbGVtZW50KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5hdmlnYXRpb24gYW5kIHNlbGVjdGlvbiB3aXRoaW4gYSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdG5hdmlnYXRlTGlzdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG5cdFx0XHRpZiAodGhpcy5saXN0RWxlbWVudExpc3Quc29tZShvcHRpb24gPT4gb3B0aW9uLm5hdGl2ZUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHR0aGlzLmRvQ2xpY2soZXZlbnQsIHRoaXMuZ2V0Q3VycmVudEl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdFx0aWYgKHRoaXMuaGFzTmV4dEVsZW1lbnQoKSkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0TmV4dEVsZW1lbnQoKT8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJlbmRcIiB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmJsdXJJbnRlbnQuZW1pdChcImJvdHRvbVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XG5cdFx0XHRcdGlmICh0aGlzLmhhc1ByZXZFbGVtZW50KCkpIHtcblx0XHRcdFx0XHR0aGlzLmdldFByZXZFbGVtZW50KCkuc2Nyb2xsSW50b1ZpZXcoeyAgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuYmx1ckludGVudC5lbWl0KFwidG9wXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5oaWdobGlnaHRlZEl0ZW0gPSB0aGlzLmdldEl0ZW1JZCh0aGlzLmluZGV4KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgaXRlbSBvciBpdGVtcyBhZnRlciBhIG1vdXNlIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZC5cblx0ICovXG5cdGRvQ2xpY2soZXZlbnQsIGl0ZW0pIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmIChpdGVtICYmICFpdGVtLmRpc2FibGVkKSB7XG5cdFx0XHR0aGlzLmxpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0XHRpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0Ly8gcmVzZXQgdGhlIHNlbGVjdGlvblxuXHRcdFx0XHRmb3IgKGxldCBvdGhlckl0ZW0gb2YgdGhpcy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0XHRcdGlmIChpdGVtICE9PSBvdGhlckl0ZW0pIHsgb3RoZXJJdGVtLnNlbGVjdGVkID0gZmFsc2U7IH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pbmRleCA9IHRoaXMuZGlzcGxheUl0ZW1zLmluZGV4T2YoaXRlbSk7XG5cdFx0XHR0aGlzLmhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuaW5kZXgpO1xuXHRcdFx0dGhpcy5kb0VtaXRTZWxlY3QoZmFsc2UpO1xuXHRcdFx0dGhpcy5hcHBSZWYudGljaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uSXRlbUZvY3VzKGluZGV4KSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMubGlzdEVsZW1lbnRMaXN0LnRvQXJyYXkoKVtpbmRleF0ubmF0aXZlRWxlbWVudDtcblx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjZHMtLWxpc3QtYm94X19tZW51LWl0ZW0tLWhpZ2hsaWdodGVkXCIpO1xuXHRcdGVsZW1lbnQudGFiSW5kZXggPSAwO1xuXHR9XG5cblx0b25JdGVtQmx1cihpbmRleCkge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLmxpc3RFbGVtZW50TGlzdC50b0FycmF5KClbaW5kZXhdLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0ZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY2RzLS1saXN0LWJveF9fbWVudS1pdGVtLS1oaWdobGlnaHRlZFwiKTtcblx0XHRlbGVtZW50LnRhYkluZGV4ID0gLTE7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgdGhlIHNjcm9sbCBldmVudCBvZiB0aGUgb3B0aW9ucyBsaXN0XG5cdCAqL1xuXHRlbWl0U2Nyb2xsKGV2ZW50KSB7XG5cdFx0Y29uc3QgYXRUb3A6IGJvb2xlYW4gPSBldmVudC5zcmNFbGVtZW50LnNjcm9sbFRvcCA9PT0gMDtcblx0XHRjb25zdCBhdEJvdHRvbTogYm9vbGVhbiA9IGV2ZW50LnNyY0VsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gZXZlbnQuc3JjRWxlbWVudC5zY3JvbGxUb3AgPT09IGV2ZW50LnNyY0VsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXHRcdGNvbnN0IGN1c3RvbVNjcm9sbEV2ZW50ID0geyBhdFRvcCwgYXRCb3R0b20sIGV2ZW50IH07XG5cdFx0dGhpcy5zY3JvbGwuZW1pdChjdXN0b21TY3JvbGxFdmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogU3Vic2NyaWJlIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYW4gaW50ZXJuYWwgb2JzZXJ2YWJsZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBpdGVtcyBhcmUgcmVhZHlcblx0ICovXG5cdG9uSXRlbXNSZWFkeShzdWJjcmlwdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdC8vIHRoaXMgc3Vic2NyaXB0aW9uIHdpbGwgYXV0byB1bnN1YnNjcmliZSBiZWNhdXNlIG9mIHRoZSBgZmlyc3QoKWAgcGlwZVxuXHRcdCh0aGlzLl9pdGVtc1JlYWR5IHx8IG9mKHRydWUpKS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZShzdWJjcmlwdGlvbik7XG5cdH1cblxuXHRyZW9yZGVyU2VsZWN0ZWQobW92ZUZvY3VzID0gdHJ1ZSk6IHZvaWQge1xuXHRcdHRoaXMuZGlzcGxheUl0ZW1zID0gWy4uLnRoaXMuZ2V0U2VsZWN0ZWQoKSwgLi4udGhpcy5nZXRMaXN0SXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5zZWxlY3RlZCldO1xuXHRcdGlmIChtb3ZlRm9jdXMpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUluZGV4KCk7XG5cdFx0XHRcdHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gdGhpcy5nZXRJdGVtSWQodGhpcy5pbmRleCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==
|
|
639
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZHJvcGRvd24vbGlzdC9kcm9wZG93bi1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBRU4sWUFBWSxFQUdaLFNBQVMsRUFFVCxZQUFZLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNOLFVBQVUsRUFDVixZQUFZLEVBRVosRUFBRSxFQUNGLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3ZDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFJbEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQXFFSCxNQUFNLE9BQU8sWUFBWTthQUNqQixjQUFTLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUFFckI7O09BRUc7SUFDSCxJQUFhLEtBQUssQ0FBQyxLQUFvRDtRQUN0RSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBVSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN2RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbkIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJ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RyxFQUFFO2dCQUNmLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDRixDQUFDOytHQTFlVyxZQUFZO21HQUFaLFlBQVksMFBBUGI7WUFDVjtnQkFDQyxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsWUFBWTthQUN6QjtTQUNELHVOQWhFUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTBEVDs7NEZBUVcsWUFBWTtrQkFwRXhCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNDQUFzQztvQkFDaEQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMERUO29CQUNELFNBQVMsRUFBRTt3QkFDVjs0QkFDQyxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLGNBQWM7eUJBQ3pCO3FCQUNEO2lCQUNEO2tHQUdTLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkF5QkcsT0FBTztzQkFBZixLQUFLO2dCQUlJLE1BQU07c0JBQWYsTUFBTTtnQkFJRyxNQUFNO3NCQUFmLE1BQU07Z0JBVUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFJOEIsSUFBSTtzQkFBeEMsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUsxQixJQUFJO3NCQUFaLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFxQjhCLGVBQWU7c0JBQWxELFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0T25EZXN0cm95LFxuXHRFdmVudEVtaXR0ZXIsXG5cdFRlbXBsYXRlUmVmLFxuXHRBZnRlclZpZXdJbml0LFxuXHRWaWV3Q2hpbGQsXG5cdEVsZW1lbnRSZWYsXG5cdFZpZXdDaGlsZHJlbixcblx0UXVlcnlMaXN0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuXHRPYnNlcnZhYmxlLFxuXHRpc09ic2VydmFibGUsXG5cdFN1YnNjcmlwdGlvbixcblx0b2Zcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IEkxOG4gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9pMThuXCI7XG5pbXBvcnQgeyBBYnN0cmFjdERyb3Bkb3duVmlldyB9IGZyb20gXCIuLi9hYnN0cmFjdC1kcm9wZG93bi12aWV3LmNsYXNzXCI7XG5pbXBvcnQgeyBMaXN0SXRlbSB9IGZyb20gXCIuLi9saXN0LWl0ZW0uaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyB3YXRjaEZvY3VzSnVtcCB9IGZyb20gXCIuLi9kcm9wZG93bnRvb2xzXCI7XG5pbXBvcnQgeyBTY3JvbGxDdXN0b21FdmVudCB9IGZyb20gXCIuL3Njcm9sbC1jdXN0b20tZXZlbnQuaW50ZXJmYWNlXCI7XG5cblxuLyoqXG4gKiBgYGBodG1sXG4gKiA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImxpc3RJdGVtc1wiPjwvY2RzLWRyb3Bkb3duLWxpc3Q+XG4gKiBgYGBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGxpc3RJdGVtcyA9IFtcbiAqIFx0e1xuICogXHRcdGNvbnRlbnQ6IFwiaXRlbSBvbmVcIixcbiAqIFx0XHRzZWxlY3RlZDogZmFsc2VcbiAqIFx0fSxcbiAqIFx0e1xuICogXHRcdGNvbnRlbnQ6IFwiaXRlbSB0d29cIixcbiAqIFx0XHRzZWxlY3RlZDogZmFsc2UsXG4gKiBcdH0sXG4gKiBcdHtcbiAqIFx0XHRjb250ZW50OiBcIml0ZW0gdGhyZWVcIixcbiAqIFx0XHRzZWxlY3RlZDogZmFsc2VcbiAqIFx0fSxcbiAqIFx0e1xuICogXHRcdGNvbnRlbnQ6IFwiaXRlbSBmb3VyXCIsXG4gKiBcdFx0c2VsZWN0ZWQ6IGZhbHNlXG4gKiBcdH1cbiAqIF07XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1kcm9wZG93bi1saXN0LCBpYm0tZHJvcGRvd24tbGlzdFwiLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDx1bFxuXHRcdFx0I2xpc3Rcblx0XHRcdFtpZF09XCJsaXN0SWRcIlxuXHRcdFx0cm9sZT1cImxpc3Rib3hcIlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19tZW51IGNkcy0tbXVsdGktc2VsZWN0XCJcblx0XHRcdChzY3JvbGwpPVwiZW1pdFNjcm9sbCgkZXZlbnQpXCJcblx0XHRcdChrZXlkb3duKT1cIm5hdmlnYXRlTGlzdCgkZXZlbnQpXCJcblx0XHRcdHRhYmluZGV4PVwiLTFcIlxuXHRcdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuXHRcdFx0W2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cImhpZ2hsaWdodGVkSXRlbVwiPlxuXHRcdFx0QGZvciAoaXRlbSBvZiBkaXNwbGF5SXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG5cdFx0XHRcdDxsaVxuXHRcdFx0XHRcdHJvbGU9XCJvcHRpb25cIlxuXHRcdFx0XHRcdChjbGljayk9XCJkb0NsaWNrKCRldmVudCwgaXRlbSlcIlxuXHRcdFx0XHRcdGNsYXNzPVwiY2RzLS1saXN0LWJveF9fbWVudS1pdGVtXCJcblx0XHRcdFx0XHRbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIml0ZW0uc2VsZWN0ZWRcIlxuXHRcdFx0XHRcdFtpZF09XCJnZXRJdGVtSWQoaSlcIlxuXHRcdFx0XHRcdFthdHRyLnRpdGxlXT1cIiBzaG93VGl0bGVzID8gaXRlbS5jb250ZW50IDogbnVsbFwiXG5cdFx0XHRcdFx0W2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcblx0XHRcdFx0XHRbbmdDbGFzc109XCJ7XG5cdFx0XHRcdFx0XHQnY2RzLS1saXN0LWJveF9fbWVudS1pdGVtLS1hY3RpdmUnOiBpdGVtLnNlbGVjdGVkLFxuXHRcdFx0XHRcdFx0J2Nkcy0tbGlzdC1ib3hfX21lbnUtaXRlbS0taGlnaGxpZ2h0ZWQnOiBoaWdobGlnaHRlZEl0ZW0gPT09IGdldEl0ZW1JZChpKVxuXHRcdFx0XHRcdH1cIj5cblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHQjbGlzdEl0ZW1cblx0XHRcdFx0XHRcdHRhYmluZGV4PVwiLTFcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19tZW51LWl0ZW1fX29wdGlvblwiPlxuXHRcdFx0XHRcdFx0QGlmICghbGlzdFRwbCAmJiB0eXBlID09PSAnbXVsdGknKSB7XG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNkcy0tZm9ybS1pdGVtIGNkcy0tY2hlY2tib3gtd3JhcHBlclwiPlxuXHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBbYXR0ci5kYXRhLWNvbnRhaW5lZC1jaGVja2JveC1zdGF0ZV09XCJpdGVtLnNlbGVjdGVkXCIgY2xhc3M9XCJjZHMtLWNoZWNrYm94LWxhYmVsXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWNoZWNrYm94XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImNoZWNrYm94XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0W2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCItMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJjZHMtLWNoZWNrYm94LWFwcGVhcmFuY2VcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNkcy0tY2hlY2tib3gtbGFiZWwtdGV4dFwiPnt7aXRlbS5jb250ZW50fX08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRAaWYgKCFsaXN0VHBsICYmIHR5cGUgPT09ICdzaW5nbGUnKSB7XG5cdFx0XHRcdFx0XHRcdHt7aXRlbS5jb250ZW50fX1cblx0XHRcdFx0XHRcdFx0PHN2Z1xuXHRcdFx0XHRcdFx0XHRcdGNkc0ljb249XCJjaGVja21hcmtcIlxuXHRcdFx0XHRcdFx0XHRcdHNpemU9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJjZHMtLWxpc3QtYm94X19tZW51LWl0ZW1fX3NlbGVjdGVkLWljb25cIj5cblx0XHRcdFx0XHRcdFx0PC9zdmc+XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRAaWYgKGxpc3RUcGwpIHtcblx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbX1cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0VHBsXCIgLz5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9saT5cblx0XHRcdH1cblx0XHQ8L3VsPlxuXHRgLFxuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRwcm92aWRlOiBBYnN0cmFjdERyb3Bkb3duVmlldyxcblx0XHRcdHVzZUV4aXN0aW5nOiBEcm9wZG93bkxpc3Rcblx0XHR9XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25MaXN0IGltcGxlbWVudHMgQWJzdHJhY3REcm9wZG93blZpZXcsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cdHN0YXRpYyBsaXN0Q291bnQgPSAwO1xuXHRASW5wdXQoKSBhcmlhTGFiZWwgPSB0aGlzLmkxOG4uZ2V0KCkuRFJPUERPV05fTElTVC5MQUJFTDtcblx0LyoqXG5cdCAqIFRoZSBsaXN0IGl0ZW1zIGJlbG9uZ2luZyB0byB0aGUgYERyb3Bkb3duTGlzdGAuXG5cdCAqL1xuXHRASW5wdXQoKSBzZXQgaXRlbXModmFsdWU6IEFycmF5PExpc3RJdGVtPiB8IE9ic2VydmFibGU8QXJyYXk8TGlzdEl0ZW0+Pikge1xuXHRcdGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG5cdFx0XHRpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcblx0XHRcdFx0dGhpcy5faXRlbXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2l0ZW1zUmVhZHkgPSBuZXcgT2JzZXJ2YWJsZTxib29sZWFuPigob2JzZXJ2ZXIpID0+IHtcblx0XHRcdFx0dGhpcy5faXRlbXNTdWJzY3JpcHRpb24gPSB2YWx1ZS5zdWJzY3JpYmUodiA9PiB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVMaXN0KHYpO1xuXHRcdFx0XHRcdG9ic2VydmVyLm5leHQodHJ1ZSk7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuY29tcGxldGUoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMub25JdGVtc1JlYWR5KG51bGwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUxpc3QodmFsdWUpO1xuXHRcdH1cblx0XHR0aGlzLl9vcmlnaW5hbEl0ZW1zID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgaXRlbXMoKTogQXJyYXk8TGlzdEl0ZW0+IHwgT2JzZXJ2YWJsZTxBcnJheTxMaXN0SXRlbT4+IHtcblx0XHRyZXR1cm4gdGhpcy5fb3JpZ2luYWxJdGVtcztcblx0fVxuXHQvKipcblx0ICogVGVtcGxhdGUgdG8gYmluZCB0byBpdGVtcyBpbiB0aGUgYERyb3Bkb3duTGlzdGAgKG9wdGlvbmFsKS5cblx0ICovXG5cdEBJbnB1dCgpIGxpc3RUcGw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xuXHQvKipcblx0ICogRXZlbnQgdG8gZW1pdCBzZWxlY3Rpb24gb2YgYSBsaXN0IGl0ZW0gd2l0aGluIHRoZSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdEBPdXRwdXQoKSBzZWxlY3Q6IEV2ZW50RW1pdHRlcjx7IGl0ZW06IExpc3RJdGVtLCBpc1VwZGF0ZT86IGJvb2xlYW4gfSB8IExpc3RJdGVtW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHQvKipcblx0ICogRXZlbnQgdG8gZW1pdCBzY3JvbGwgZXZlbnQgb2YgYSBsaXN0IHdpdGhpbiB0aGUgYERyb3Bkb3duTGlzdGAuXG5cdCAqL1xuXHRAT3V0cHV0KCkgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8U2Nyb2xsQ3VzdG9tRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHQvKipcblx0ICogRXZlbnQgdG8gc3VnZ2VzdCBhIGJsdXIgb24gdGhlIHZpZXcuXG5cdCAqIEVtaXRzIF9hZnRlcl8gdGhlIGZpcnN0L2xhc3QgaXRlbSBoYXMgYmVlbiBmb2N1c2VkLlxuXHQgKiBleC5cblx0ICogQXJyb3dVcCAtPiBmb2N1cyBmaXJzdCBpdGVtXG5cdCAqIEFycm93VXAgLT4gZW1pdCBldmVudFxuXHQgKlxuXHQgKiBXaGVuIHRoaXMgZXZlbnQgZmlyZXMgZm9jdXMgc2hvdWxkIGJlIHBsYWNlZCBvbiBzb21lIGVsZW1lbnQgb3V0c2lkZSBvZiB0aGUgbGlzdCAtIGJsdXJyaW5nIHRoZSBsaXN0IGFzIGEgcmVzdWx0XG5cdCAqL1xuXHRAT3V0cHV0KCkgYmx1ckludGVudCA9IG5ldyBFdmVudEVtaXR0ZXI8XCJ0b3BcIiB8IFwiYm90dG9tXCI+KCk7XG5cdC8qKlxuXHQgKiBNYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZpZXcgRE9NIGVsZW1lbnQgZm9yIHRoZSB1bm9yZGVyZWQgbGlzdCBvZiBpdGVtcyB3aXRoaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0QFZpZXdDaGlsZChcImxpc3RcIiwgeyBzdGF0aWM6IHRydWUgfSkgbGlzdDogRWxlbWVudFJlZjtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciBvciBub3QgdGhlIGBEcm9wZG93bkxpc3RgIHN1cHBvcnRzIHNlbGVjdGluZyBtdWx0aXBsZSBpdGVtcyBhcyBvcHBvc2VkIHRvIHNpbmdsZVxuXHQgKiBpdGVtIHNlbGVjdGlvbi5cblx0ICovXG5cdEBJbnB1dCgpIHR5cGU6IFwic2luZ2xlXCIgfCBcIm11bHRpXCIgPSBcInNpbmdsZVwiO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdG8gc2hvdyB0aXRsZSBhdHRyaWJ1dGUgb3Igbm90XG5cdCAqL1xuXHRASW5wdXQoKSBzaG93VGl0bGVzID0gdHJ1ZTtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVuZGVyaW5nIHNpemUgb2YgdGhlIGBEcm9wZG93bkxpc3RgIGlucHV0IGNvbXBvbmVudC5cblx0ICovXG5cdHB1YmxpYyBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcIm1kXCI7XG5cdHB1YmxpYyBsaXN0SWQgPSBgbGlzdGJveC0ke0Ryb3Bkb3duTGlzdC5saXN0Q291bnQrK31gO1xuXHRwdWJsaWMgaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcblx0LyoqXG5cdCAqIEhvbGRzIHRoZSBsaXN0IG9mIGl0ZW1zIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKiBJdCBkaWZmZXJzIGZyb20gdGhlIHRoZSBjb21wbGV0ZSBzZXQgb2YgaXRlbXMgd2hlbiBmaWx0ZXJpbmcgaXMgdXNlZCAoYnV0XG5cdCAqIGl0IGlzIGFsd2F5cyBhIHN1YnNldCBvZiB0aGUgdG90YWwgaXRlbXMgaW4gYERyb3Bkb3duTGlzdGApLlxuXHQgKi9cblx0cHVibGljIGRpc3BsYXlJdGVtczogQXJyYXk8TGlzdEl0ZW0+ID0gW107XG5cdC8qKlxuXHQgKiBNYWludGFpbnMgdGhlIGluZGV4IGZvciB0aGUgc2VsZWN0ZWQgaXRlbSB3aXRoaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0cHJvdGVjdGVkIGluZGV4ID0gLTE7XG5cdC8qKlxuXHQgKiBBbiBhcnJheSBob2xkaW5nIHRoZSBIVE1MIGxpc3QgZWxlbWVudHMgaW4gdGhlIHZpZXcuXG5cdCAqL1xuXHRAVmlld0NoaWxkcmVuKFwibGlzdEl0ZW1cIikgcHJvdGVjdGVkIGxpc3RFbGVtZW50TGlzdDogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXHQvKipcblx0ICogT2JzZXJ2YWJsZSBib3VuZCB0byBrZXlkb3duIGV2ZW50cyB0byBjb250cm9sIGZpbHRlcmluZy5cblx0ICovXG5cdHByb3RlY3RlZCBmb2N1c0p1bXA7XG5cdC8qKlxuXHQgKiBUcmFja3MgdGhlIGN1cnJlbnQgKGlmIGFueSkgc3Vic2NyaXB0aW9uIHRvIHRoZSBpdGVtcyBvYnNlcnZhYmxlIHNvIHdlIGNhbiBjbGVhbiB1cCB3aGVuIHRoZSBpbnB1dCBpcyB1cGRhdGVkLlxuXHQgKi9cblx0cHJvdGVjdGVkIF9pdGVtc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXHQvKipcblx0ICogVXNlZCB0byByZXRhaW4gdGhlIG9yaWdpbmFsIGl0ZW1zIHBhc3NlZCB0byB0aGUgc2V0dGVyLlxuXHQgKi9cblx0cHJvdGVjdGVkIF9vcmlnaW5hbEl0ZW1zOiBBcnJheTxMaXN0SXRlbT4gfCBPYnNlcnZhYmxlPEFycmF5PExpc3RJdGVtPj47XG5cdC8qKlxuXHQgKiBVc2VmdWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGl0ZW1zLCBzaG91bGQgYmUgYWNjZXNzZWQgdmlhIGBnZXRMaXN0SXRlbXNgLlxuXHQgKi9cblx0cHJvdGVjdGVkIF9pdGVtczogQXJyYXk8TGlzdEl0ZW0+ID0gW107XG5cdC8qKlxuXHQgKiBVc2VkIHRvIHdhaXQgZm9yIGl0ZW1zIGluIGNhc2UgdGhleSBhcmUgcGFzc2VkIHRocm91Z2ggYW4gb2JzZXJ2YWJsZS5cblx0ICovXG5cdHByb3RlY3RlZCBfaXRlbXNSZWFkeTogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcm90ZWN0ZWQgaTE4bjogSTE4bikge31cblxuXHQvKipcblx0ICogUmV0cmlldmVzIGFycmF5IG9mIGxpc3QgaXRlbXMgYW5kIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpdGVtIGFmdGVyIHZpZXcgaGFzIHJlbmRlcmVkLlxuXHQgKiBBZGRpdGlvbmFsbHksIGFueSBPYnNlcnZhYmxlcyBmb3IgdGhlIGBEcm9wZG93bkxpc3RgIGFyZSBpbml0aWFsaXplZC5cblx0ICovXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHR0aGlzLmluZGV4ID0gdGhpcy5nZXRMaXN0SXRlbXMoKS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKTtcblx0XHR0aGlzLnNldHVwRm9jdXNPYnNlcnZhYmxlKCk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmRvRW1pdFNlbGVjdCh0cnVlKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGFueSBPYnNlcnZhYmxlcyBvbiBkZXN0cnVjdGlvbiBvZiB0aGUgY29tcG9uZW50LlxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKHRoaXMuZm9jdXNKdW1wKSB7XG5cdFx0XHR0aGlzLmZvY3VzSnVtcC51bnN1YnNjcmliZSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcblx0XHRcdHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZG9FbWl0U2VsZWN0KGlzVXBkYXRlID0gdHJ1ZSkge1xuXHRcdGlmICh0aGlzLnR5cGUgPT09IFwic2luZ2xlXCIpIHtcblx0XHRcdHRoaXMuc2VsZWN0LmVtaXQoeyBpdGVtOiB0aGlzLl9pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCksIGlzVXBkYXRlOiBpc1VwZGF0ZSB9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYWJ1c2UgamF2YXNjcmlwdHMgb2JqZWN0IG11dGFiaWxpdHkgdW50aWwgd2UgY2FuIGJyZWFrIHRoZSBBUEkgYW5kIHN3aXRjaCB0b1xuXHRcdFx0Ly8geyBpdGVtczogW10sIGlzVXBkYXRlOiB0cnVlIH1cblx0XHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZCgpIHx8IFtdO1xuXHRcdFx0c2VsZWN0ZWRbXCJpc1VwZGF0ZVwiXSA9IGlzVXBkYXRlO1xuXHRcdFx0dGhpcy5zZWxlY3QuZW1pdChzZWxlY3RlZCk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0SXRlbUlkKGluZGV4OiBudW1iZXIpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5saXN0SWR9LSR7aW5kZXh9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHRoZSBkaXNwbGF5ZWQgbGlzdCBvZiBpdGVtcyBhbmQgdGhlbiByZXRyaWV2ZXMgdGhlIG1vc3QgY3VycmVudCBwcm9wZXJ0aWVzIGZvciB0aGUgYERyb3Bkb3duTGlzdGAgZnJvbSB0aGUgRE9NLlxuXHQgKi9cblx0dXBkYXRlTGlzdChpdGVtcykge1xuXHRcdHRoaXMuX2l0ZW1zID0gaXRlbXMubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSkpO1xuXHRcdHRoaXMuZGlzcGxheUl0ZW1zID0gdGhpcy5faXRlbXM7XG5cdFx0dGhpcy51cGRhdGVJbmRleCgpO1xuXHRcdHRoaXMuc2V0dXBGb2N1c09ic2VydmFibGUoKTtcblx0XHR0aGlzLmRvRW1pdFNlbGVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbHRlcnMgdGhlIGl0ZW1zIGJlaW5nIGRpc3BsYXllZCBpbiB0aGUgRE9NIGxpc3QuXG5cdCAqL1xuXHRmaWx0ZXJCeShxdWVyeSA9IFwiXCIpIHtcblx0XHRpZiAocXVlcnkpIHtcblx0XHRcdHRoaXMuZGlzcGxheUl0ZW1zID0gdGhpcy5nZXRMaXN0SXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmNvbnRlbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKSk7XG5cdFx0XHQvLyBSZXNldCBpbmRleCBpZiBpdGVtcyB3ZXJlIGZvdW5kXG5cdFx0XHQvLyBQcmV2ZW50IHNlbGVjdGluZyBpbmRleCBpbiBsaXN0IHRoYXQgYXJlIHVuZGVmaW5lZC5cblx0XHRcdGlmICh0aGlzLmRpc3BsYXlJdGVtcykge1xuXHRcdFx0XHR0aGlzLmluZGV4ID0gMDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5kaXNwbGF5SXRlbXMgPSB0aGlzLmdldExpc3RJdGVtcygpO1xuXHRcdH1cblxuXHRcdHRoaXMudXBkYXRlSW5kZXgoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyAob3IgcmUtaW5pdGlhbGl6ZXMpIHRoZSBPYnNlcnZhYmxlIHRoYXQgaGFuZGxlcyBzd2l0Y2hpbmcgZm9jdXMgdG8gYW4gZWxlbWVudCBiYXNlZCBvblxuXHQgKiBrZXkgaW5wdXQgbWF0Y2hpbmcgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgaXRlbSBpbiB0aGUgbGlzdC5cblx0ICovXG5cdHNldHVwRm9jdXNPYnNlcnZhYmxlKCkge1xuXHRcdGlmICghdGhpcy5saXN0KSB7IHJldHVybjsgfVxuXHRcdGlmICh0aGlzLmZvY3VzSnVtcCkge1xuXHRcdFx0dGhpcy5mb2N1c0p1bXAudW5zdWJzY3JpYmUoKTtcblx0XHR9XG5cdFx0bGV0IGVsTGlzdCA9IEFycmF5LmZyb20odGhpcy5saXN0Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcImxpXCIpKTtcblx0XHR0aGlzLmZvY3VzSnVtcCA9IHdhdGNoRm9jdXNKdW1wKHRoaXMubGlzdC5uYXRpdmVFbGVtZW50LCBlbExpc3QpXG5cdFx0XHQuc3Vic2NyaWJlKGVsID0+IHtcblx0XHRcdFx0ZWwuZm9jdXMoKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGBMaXN0SXRlbWAgdGhhdCBpcyBzdWJzZXF1ZW50IHRvIHRoZSBzZWxlY3RlZCBpdGVtIGluIHRoZSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdGdldE5leHRJdGVtKCk6IExpc3RJdGVtIHtcblx0XHRpZiAodGhpcy5pbmRleCA8IHRoaXMuZGlzcGxheUl0ZW1zLmxlbmd0aCAtIDEpIHtcblx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZGlzcGxheUl0ZW1zW3RoaXMuaW5kZXhdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3RlZCBpdGVtIGlzIG5vdCB0aGUgbGFzdCBpdGVtIGluIHRoZSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdGhhc05leHRFbGVtZW50KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmluZGV4IDwgdGhpcy5kaXNwbGF5SXRlbXMubGVuZ3RoIC0gMSAmJlxuXHRcdFx0KCEodGhpcy5pbmRleCA9PT0gdGhpcy5kaXNwbGF5SXRlbXMubGVuZ3RoIC0gMikgfHwgIXRoaXMuZGlzcGxheUl0ZW1zW3RoaXMuaW5kZXggKyAxXS5kaXNhYmxlZCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYEhUTUxFbGVtZW50YCBmb3IgdGhlIGl0ZW0gdGhhdCBpcyBzdWJzZXF1ZW50IHRvIHRoZSBzZWxlY3RlZCBpdGVtLlxuXHQgKi9cblx0Z2V0TmV4dEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuXHRcdC8vIE9ubHkgcmV0dXJuIG5hdGl2ZSBlbGVtZW50cyBpZiB0aGV5IGFyZSByZW5kZXJlZFxuXHRcdGNvbnN0IGVsZW1MaXN0ID0gdGhpcy5saXN0RWxlbWVudExpc3QgPyB0aGlzLmxpc3RFbGVtZW50TGlzdC50b0FycmF5KCkgOiBbXTtcblx0XHRpZiAoIWVsZW1MaXN0Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogU3RhcnQgY2hlY2tpbmcgZnJvbSBuZXh0IGluZGV4XG5cdFx0ICogQ29udGludWUgbG9vcGluZyB0aHJvdWdoIHRoZSBsaXN0IHVudGlsIGEgbm9uIGRpc2FiZWxlZCBlbGVtZW50IGlzIGZvdW5kIG9yXG5cdFx0ICogZW5kIG9mIGxpc3QgaXMgcmVhY2hlZFxuXHRcdCAqL1xuXHRcdGZvciAobGV0IGkgPSB0aGlzLmluZGV4ICsgMTsgaSA8IGVsZW1MaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHQvLyBJZiB0aGUgdmFsdWVzIGluIHRoZSBsaXN0IGFyZSBub3QgZGlzYWJsZWRcblx0XHRcdGlmICghdGhpcy5kaXNwbGF5SXRlbXNbaV0uZGlzYWJsZWQpIHtcblx0XHRcdFx0dGhpcy5pbmRleCA9IGk7XG5cdFx0XHRcdHJldHVybiBlbGVtTGlzdFtpXS5uYXRpdmVFbGVtZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtTGlzdFt0aGlzLmluZGV4XT8ubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBgTGlzdEl0ZW1gIHRoYXQgcHJlY2VkZXMgdGhlIHNlbGVjdGVkIGl0ZW0gd2l0aGluIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0UHJldkl0ZW0oKTogTGlzdEl0ZW0ge1xuXHRcdGlmICh0aGlzLmluZGV4ID4gMCkge1xuXHRcdFx0dGhpcy5pbmRleC0tO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaXNwbGF5SXRlbXNbdGhpcy5pbmRleF07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgbm90IHRoZSBmaXJzdCBpbiB0aGUgbGlzdC5cblx0ICovXG5cdGhhc1ByZXZFbGVtZW50KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmluZGV4ID4gMCAmJiAoISh0aGlzLmluZGV4ID09PSAxKSB8fCAhdGhpcy5kaXNwbGF5SXRlbXNbMF0uZGlzYWJsZWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGBIVE1MRWxlbWVudGAgZm9yIHRoZSBpdGVtIHRoYXQgcHJlY2VkZXMgdGhlIHNlbGVjdGVkIGl0ZW0uXG5cdCAqL1xuXHRnZXRQcmV2RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG5cdFx0Ly8gT25seSByZXR1cm4gbmF0aXZlIGVsZW1lbnRzIGlmIHRoZXkgYXJlIHJlbmRlcmVkXG5cdFx0Y29uc3QgZWxlbUxpc3QgPSB0aGlzLmxpc3RFbGVtZW50TGlzdCA/IHRoaXMubGlzdEVsZW1lbnRMaXN0LnRvQXJyYXkoKSA6IFtdO1xuXHRcdGlmICghZWxlbUxpc3QubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBTdGFydCBjaGVja2luZyBmcm9tIG5leHQgaW5kZXhcblx0XHQgKiBDb250aW51ZSBsb29waW5nIHRocm91Z2ggdGhlIGxpc3QgdW50aWwgYSBub24gZGlzYWJlbGVkIGVsZW1lbnQgaXMgZm91bmQgb3Jcblx0XHQgKiBlbmQgb2YgbGlzdCBpcyByZWFjaGVkXG5cdFx0ICovXG5cdFx0Zm9yIChsZXQgaSA9IHRoaXMuaW5kZXggLSAxOyBpIDwgdGhpcy5pbmRleCAmJiBpID49IDA7IGktLSkge1xuXHRcdFx0Ly8gSWYgdGhlIHZhbHVlcyBpbiB0aGUgbGlzdCBhcmUgbm90IGRpc2FibGVkXG5cdFx0XHRpZiAoIXRoaXMuZGlzcGxheUl0ZW1zW2ldLmRpc2FibGVkKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXggPSBpO1xuXHRcdFx0XHRyZXR1cm4gZWxlbUxpc3RbaV0ubmF0aXZlRWxlbWVudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbUxpc3RbdGhpcy5pbmRleF0ubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBgTGlzdEl0ZW1gIHRoYXQgaXMgc2VsZWN0ZWQgd2l0aGluIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0Q3VycmVudEl0ZW0oKTogTGlzdEl0ZW0ge1xuXHRcdGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGlzcGxheUl0ZW1zWzBdO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kaXNwbGF5SXRlbXNbdGhpcy5pbmRleF07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYEhUTUxFbGVtZW50YCBmb3IgdGhlIGl0ZW0gdGhhdCBpcyBzZWxlY3RlZCB3aXRoaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0Q3VycmVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuXHRcdGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHRcdFx0cmV0dXJuIHRoaXMubGlzdEVsZW1lbnRMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmxpc3RFbGVtZW50TGlzdC50b0FycmF5KClbdGhpcy5pbmRleF0ubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpdGVtcyBhcyBhbiBBcnJheVxuXHQgKi9cblx0Z2V0TGlzdEl0ZW1zKCk6IEFycmF5PExpc3RJdGVtPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2l0ZW1zO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIGl0ZW0ocykgaW4gdGhlIGBEcm9wZG93bkxpc3RgLlxuXHQgKi9cblx0Z2V0U2VsZWN0ZWQoKTogTGlzdEl0ZW1bXSB7XG5cdFx0bGV0IHNlbGVjdGVkID0gdGhpcy5nZXRMaXN0SXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKTtcblx0XHRpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmFuc2Zvcm1zIGFycmF5IGlucHV0IGxpc3Qgb2YgaXRlbXMgdG8gdGhlIGNvcnJlY3Qgc3RhdGUgYnkgdXBkYXRpbmcgdGhlIHNlbGVjdGVkIGl0ZW0ocykuXG5cdCAqL1xuXHRwcm9wYWdhdGVTZWxlY3RlZCh2YWx1ZTogQXJyYXk8TGlzdEl0ZW0+KTogdm9pZCB7XG5cdFx0Ly8gaWYgd2UgZ2V0IGEgbm9uLWFycmF5LCBsb2cgb3V0IGFuIGVycm9yIChzaW5jZSBpdCBpcyBvbmUpXG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9LnByb3BhZ2F0ZVNlbGVjdGVkIGV4cGVjdHMgYW4gQXJyYXk8TGlzdEl0ZW0+LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG5cdFx0fVxuXHRcdHRoaXMub25JdGVtc1JlYWR5KCgpID0+IHtcblx0XHRcdGNvbnN0IHNlbGVjdGVkTmV3SXRlbXMgPSBbXTtcblx0XHRcdGZvciAobGV0IG5ld0l0ZW0gb2YgdmFsdWUpIHtcblx0XHRcdFx0aWYgKG5ld0l0ZW0gJiYgbmV3SXRlbS5zZWxlY3RlZCkge1xuXHRcdFx0XHRcdC8vIGNvcHkgdGhlIGl0ZW1cblx0XHRcdFx0XHRsZXQgdGVtcE5ld0l0ZW06IHN0cmluZyB8IExpc3RJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgbmV3SXRlbSk7XG5cdFx0XHRcdFx0Ly8gZGVsZXRlZCBzZWxlY3RlZCBiZWNhdXNlIGl0J3Mgd2hhdCB3ZSBfd2FudF8gdG8gY2hhbmdlXG5cdFx0XHRcdFx0ZGVsZXRlIHRlbXBOZXdJdGVtLnNlbGVjdGVkO1xuXHRcdFx0XHRcdC8vIHN0cmluZ2lmeSBmb3IgY29tcGFyZSBsYXRlclxuXHRcdFx0XHRcdHRlbXBOZXdJdGVtID0gSlNPTi5zdHJpbmdpZnkodGVtcE5ld0l0ZW0pO1xuXHRcdFx0XHRcdC8vIGFkZCB0byB0aGUgbGlzdCBvZiBzZWxlY3RlZCBpdGVtc1xuXHRcdFx0XHRcdHNlbGVjdGVkTmV3SXRlbXMucHVzaCh0ZW1wTmV3SXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gbG9vcCB0aHJvdWdoIHRoZSBsaXN0IGl0ZW1zIGFuZCB1cGRhdGUgdGhlIGBzZWxlY3RlZGAgc3RhdGUgZm9yIG1hdGNoaW5nIGl0ZW1zIGluIGB2YWx1ZWBcblx0XHRcdGZvciAobGV0IG9sZEl0ZW0gb2YgdGhpcy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0XHQvLyBmYXN0IHBhdGggd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWRcblx0XHRcdFx0aWYgKHNlbGVjdGVkTmV3SXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0b2xkSXRlbS5zZWxlY3RlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY29weSB0aGUgaXRlbVxuXHRcdFx0XHRsZXQgdGVtcE9sZEl0ZW06IHN0cmluZyB8IExpc3RJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgb2xkSXRlbSk7XG5cdFx0XHRcdC8vIGRlbGV0ZWQgc2VsZWN0ZWQgYmVjYXVzZSBpdCdzIHdoYXQgd2UgX3dhbnRfIHRvIGNoYW5nZVxuXHRcdFx0XHRkZWxldGUgdGVtcE9sZEl0ZW0uc2VsZWN0ZWQ7XG5cdFx0XHRcdC8vIHN0cmluZ2lmeSBmb3IgY29tcGFyZVxuXHRcdFx0XHR0ZW1wT2xkSXRlbSA9IEpTT04uc3RyaW5naWZ5KHRlbXBPbGRJdGVtKTtcblx0XHRcdFx0Zm9yIChsZXQgc2VsZWN0ZWROZXdJdGVtIG9mIHNlbGVjdGVkTmV3SXRlbXMpIHtcblx0XHRcdFx0XHQvLyBkbyB0aGUgY29tcGFyZVxuXHRcdFx0XHRcdGlmICh0ZW1wT2xkSXRlbS5pbmNsdWRlcyhzZWxlY3RlZE5ld0l0ZW0pKSB7XG5cdFx0XHRcdFx0XHRvbGRJdGVtLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdC8vIGlmIHdlJ3ZlIGZvdW5kIGEgbWF0Y2hpbmcgaXRlbSwgd2UgY2FuIHN0b3AgbG9vcGluZ1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9sZEl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBmb2N1cyBpbiB0aGUgbGlzdCwgZWZmZWN0aXZlbHkgYSB3cmFwcGVyIGZvciBgZ2V0Q3VycmVudEVsZW1lbnQoKS5mb2N1cygpYFxuXHQgKi9cblx0aW5pdEZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmluZGV4IDwgMCkge1xuXHRcdFx0dGhpcy51cGRhdGVJbmRleCgpO1xuXHRcdH1cblxuXHRcdHRoaXMubGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuaW5kZXgpO1xuXHRcdH0pO1xuXHR9XG5cblx0dXBkYXRlSW5kZXgoKSB7XG5cdFx0Ly8gaW5pdGlhbGl6ZSBpbmRleCBvbiB0aGUgZmlyc3Qgc2VsZWN0ZWQgaXRlbSBvclxuXHRcdC8vIG9uIHRoZSBuZXh0IG5vbiBkaXNhYmxlZCBpdGVtIGlmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZFxuXHRcdC8vIGluIGNhc2UsIGlmIGFsbCBpdGVtcyBhcmUgZGlzYWJsZWQsIHRoZSBpbmRleCB2YWx1ZSB3aWxsIHJlbWFpbiBzYW1lXG5cdFx0Y29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkKCk7XG5cdFx0aWYgKHNlbGVjdGVkLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5pbmRleCA9IHRoaXMuZGlzcGxheUl0ZW1zLmluZGV4T2Yoc2VsZWN0ZWRbMF0pO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5oYXNOZXh0RWxlbWVudCgpKSB7XG5cdFx0XHR0aGlzLmdldE5leHRFbGVtZW50KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5hdmlnYXRpb24gYW5kIHNlbGVjdGlvbiB3aXRoaW4gYSBgRHJvcGRvd25MaXN0YC5cblx0ICovXG5cdG5hdmlnYXRlTGlzdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXHRcdGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG5cdFx0XHRpZiAodGhpcy5saXN0RWxlbWVudExpc3Quc29tZShvcHRpb24gPT4gb3B0aW9uLm5hdGl2ZUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCkpIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdH1cblx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHR0aGlzLmRvQ2xpY2soZXZlbnQsIHRoaXMuZ2V0Q3VycmVudEl0ZW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnQua2V5ID09PSBcIkFycm93VXBcIikge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdFx0aWYgKHRoaXMuaGFzTmV4dEVsZW1lbnQoKSkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0TmV4dEVsZW1lbnQoKT8uc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJlbmRcIiB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmJsdXJJbnRlbnQuZW1pdChcImJvdHRvbVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiKSB7XG5cdFx0XHRcdGlmICh0aGlzLmhhc1ByZXZFbGVtZW50KCkpIHtcblx0XHRcdFx0XHR0aGlzLmdldFByZXZFbGVtZW50KCkuc2Nyb2xsSW50b1ZpZXcoeyAgYmxvY2s6IFwibmVhcmVzdFwiIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuYmx1ckludGVudC5lbWl0KFwidG9wXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5oaWdobGlnaHRlZEl0ZW0gPSB0aGlzLmdldEl0ZW1JZCh0aGlzLmluZGV4KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFbWl0cyB0aGUgc2VsZWN0ZWQgaXRlbSBvciBpdGVtcyBhZnRlciBhIG1vdXNlIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZC5cblx0ICovXG5cdGRvQ2xpY2soZXZlbnQsIGl0ZW0pIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmIChpdGVtICYmICFpdGVtLmRpc2FibGVkKSB7XG5cdFx0XHR0aGlzLmxpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0aWYgKHRoaXMudHlwZSA9PT0gXCJzaW5nbGVcIikge1xuXHRcdFx0XHRpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcblx0XHRcdFx0Ly8gcmVzZXQgdGhlIHNlbGVjdGlvblxuXHRcdFx0XHRmb3IgKGxldCBvdGhlckl0ZW0gb2YgdGhpcy5nZXRMaXN0SXRlbXMoKSkge1xuXHRcdFx0XHRcdGlmIChpdGVtICE9PSBvdGhlckl0ZW0pIHsgb3RoZXJJdGVtLnNlbGVjdGVkID0gZmFsc2U7IH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXRlbS5zZWxlY3RlZCA9ICFpdGVtLnNlbGVjdGVkO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pbmRleCA9IHRoaXMuZGlzcGxheUl0ZW1zLmluZGV4T2YoaXRlbSk7XG5cdFx0XHR0aGlzLmhpZ2hsaWdodGVkSXRlbSA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuaW5kZXgpO1xuXHRcdFx0dGhpcy5kb0VtaXRTZWxlY3QoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdG9uSXRlbUZvY3VzKGluZGV4KSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMubGlzdEVsZW1lbnRMaXN0LnRvQXJyYXkoKVtpbmRleF0ubmF0aXZlRWxlbWVudDtcblx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjZHMtLWxpc3QtYm94X19tZW51LWl0ZW0tLWhpZ2hsaWdodGVkXCIpO1xuXHRcdGVsZW1lbnQudGFiSW5kZXggPSAwO1xuXHR9XG5cblx0b25JdGVtQmx1cihpbmRleCkge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLmxpc3RFbGVtZW50TGlzdC50b0FycmF5KClbaW5kZXhdLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0ZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY2RzLS1saXN0LWJveF9fbWVudS1pdGVtLS1oaWdobGlnaHRlZFwiKTtcblx0XHRlbGVtZW50LnRhYkluZGV4ID0gLTE7XG5cdH1cblxuXHQvKipcblx0ICogRW1pdHMgdGhlIHNjcm9sbCBldmVudCBvZiB0aGUgb3B0aW9ucyBsaXN0XG5cdCAqL1xuXHRlbWl0U2Nyb2xsKGV2ZW50KSB7XG5cdFx0Y29uc3QgYXRUb3A6IGJvb2xlYW4gPSBldmVudC5zcmNFbGVtZW50LnNjcm9sbFRvcCA9PT0gMDtcblx0XHRjb25zdCBhdEJvdHRvbTogYm9vbGVhbiA9IGV2ZW50LnNyY0VsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gZXZlbnQuc3JjRWxlbWVudC5zY3JvbGxUb3AgPT09IGV2ZW50LnNyY0VsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXHRcdGNvbnN0IGN1c3RvbVNjcm9sbEV2ZW50ID0geyBhdFRvcCwgYXRCb3R0b20sIGV2ZW50IH07XG5cdFx0dGhpcy5zY3JvbGwuZW1pdChjdXN0b21TY3JvbGxFdmVudCk7XG5cdH1cblxuXHQvKipcblx0ICogU3Vic2NyaWJlIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gYW4gaW50ZXJuYWwgb2JzZXJ2YWJsZSB0aGF0IHdpbGwgcmVzb2x2ZSBvbmNlIHRoZSBpdGVtcyBhcmUgcmVhZHlcblx0ICovXG5cdG9uSXRlbXNSZWFkeShzdWJjcmlwdGlvbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdC8vIHRoaXMgc3Vic2NyaXB0aW9uIHdpbGwgYXV0byB1bnN1YnNjcmliZSBiZWNhdXNlIG9mIHRoZSBgZmlyc3QoKWAgcGlwZVxuXHRcdCh0aGlzLl9pdGVtc1JlYWR5IHx8IG9mKHRydWUpKS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZShzdWJjcmlwdGlvbik7XG5cdH1cblxuXHRyZW9yZGVyU2VsZWN0ZWQobW92ZUZvY3VzID0gdHJ1ZSk6IHZvaWQge1xuXHRcdHRoaXMuZGlzcGxheUl0ZW1zID0gWy4uLnRoaXMuZ2V0U2VsZWN0ZWQoKSwgLi4udGhpcy5nZXRMaXN0SXRlbXMoKS5maWx0ZXIoaXRlbSA9PiAhaXRlbS5zZWxlY3RlZCldO1xuXHRcdGlmIChtb3ZlRm9jdXMpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZUluZGV4KCk7XG5cdFx0XHRcdHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gdGhpcy5nZXRJdGVtSWQodGhpcy5pbmRleCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, TemplateRef, Component, Input, Output, ContentChild, ViewChild, HostBinding, HostListener, NgModule } from '@angular/core';
|
|
2
|
+
import { EventEmitter, TemplateRef, Component, ChangeDetectionStrategy, Input, Output, ContentChild, ViewChild, HostBinding, HostListener, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from 'carbon-components-angular/dropdown';
|
|
4
4
|
import { AbstractDropdownView, DropdownModule, DropdownService } from 'carbon-components-angular/dropdown';
|
|
5
5
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
@@ -92,10 +92,11 @@ class ComboBox {
|
|
|
92
92
|
/**
|
|
93
93
|
* Creates an instance of ComboBox.
|
|
94
94
|
*/
|
|
95
|
-
constructor(elementRef, dropdownService, i18n) {
|
|
95
|
+
constructor(elementRef, dropdownService, i18n, cdr) {
|
|
96
96
|
this.elementRef = elementRef;
|
|
97
97
|
this.dropdownService = dropdownService;
|
|
98
98
|
this.i18n = i18n;
|
|
99
|
+
this.cdr = cdr;
|
|
99
100
|
this.id = `combobox-${ComboBox.comboBoxCount++}`;
|
|
100
101
|
this.labelId = `combobox-label-${ComboBox.comboBoxCount++}`;
|
|
101
102
|
/**
|
|
@@ -476,6 +477,7 @@ class ComboBox {
|
|
|
476
477
|
this._appendToDropdown();
|
|
477
478
|
}
|
|
478
479
|
document.removeEventListener("click", this.outsideClick, true);
|
|
480
|
+
this.cdr.markForCheck();
|
|
479
481
|
}
|
|
480
482
|
/**
|
|
481
483
|
* Opens the dropdown.
|
|
@@ -497,6 +499,7 @@ class ComboBox {
|
|
|
497
499
|
this._dropUp = this._shouldDropUp();
|
|
498
500
|
}
|
|
499
501
|
}, 0);
|
|
502
|
+
this.cdr.markForCheck();
|
|
500
503
|
}
|
|
501
504
|
/**
|
|
502
505
|
* Toggles the dropdown.
|
|
@@ -659,7 +662,7 @@ class ComboBox {
|
|
|
659
662
|
this.view.reorderSelected(true);
|
|
660
663
|
}
|
|
661
664
|
}
|
|
662
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ComboBox, deps: [{ token: i0.ElementRef }, { token: i1.DropdownService }, { token: i2.I18n }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
665
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ComboBox, deps: [{ token: i0.ElementRef }, { token: i1.DropdownService }, { token: i2.I18n }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
663
666
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: ComboBox, selector: "cds-combo-box, ibm-combo-box", inputs: { placeholder: "placeholder", openMenuAria: "openMenuAria", closeMenuAria: "closeMenuAria", clearSelectionsTitle: "clearSelectionsTitle", clearSelectionsAria: "clearSelectionsAria", clearSelectionTitle: "clearSelectionTitle", clearSelectionAria: "clearSelectionAria", id: "id", labelId: "labelId", items: "items", type: "type", size: "size", itemValueKey: "itemValueKey", label: "label", hideLabel: "hideLabel", helperText: "helperText", appendInline: "appendInline", invalid: "invalid", invalidText: "invalidText", warn: "warn", warnText: "warnText", maxLength: "maxLength", theme: "theme", selectionFeedback: "selectionFeedback", autocomplete: "autocomplete", dropUp: "dropUp", disabled: "disabled", readonly: "readonly", fluid: "fluid" }, outputs: { selected: "selected", submit: "submit", close: "close", search: "search", clear: "clear" }, host: { listeners: { "keydown": "hostkeys($event)" }, properties: { "class.cds--list-box__wrapper": "this.hostClass" } }, providers: [
|
|
664
667
|
{
|
|
665
668
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -765,7 +768,6 @@ class ComboBox {
|
|
|
765
768
|
[placeholder]="placeholder"/>
|
|
766
769
|
@if (invalid) {
|
|
767
770
|
<svg
|
|
768
|
-
|
|
769
771
|
cdsIcon="warning--filled"
|
|
770
772
|
size="16"
|
|
771
773
|
class="cds--list-box__invalid-icon">
|
|
@@ -842,7 +844,7 @@ class ComboBox {
|
|
|
842
844
|
</div>
|
|
843
845
|
}
|
|
844
846
|
</div>
|
|
845
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }] }); }
|
|
847
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
846
848
|
}
|
|
847
849
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ComboBox, decorators: [{
|
|
848
850
|
type: Component,
|
|
@@ -947,7 +949,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
|
|
|
947
949
|
[placeholder]="placeholder"/>
|
|
948
950
|
@if (invalid) {
|
|
949
951
|
<svg
|
|
950
|
-
|
|
951
952
|
cdsIcon="warning--filled"
|
|
952
953
|
size="16"
|
|
953
954
|
class="cds--list-box__invalid-icon">
|
|
@@ -1031,9 +1032,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
|
|
|
1031
1032
|
useExisting: ComboBox,
|
|
1032
1033
|
multi: true
|
|
1033
1034
|
}
|
|
1034
|
-
]
|
|
1035
|
+
],
|
|
1036
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
1035
1037
|
}]
|
|
1036
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DropdownService }, { type: i2.I18n }], propDecorators: { placeholder: [{
|
|
1038
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DropdownService }, { type: i2.I18n }, { type: i0.ChangeDetectorRef }], propDecorators: { placeholder: [{
|
|
1037
1039
|
type: Input
|
|
1038
1040
|
}], openMenuAria: [{
|
|
1039
1041
|
type: Input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carbon-components-angular-combobox.mjs","sources":["../../src/combobox/combobox.component.ts","../../src/combobox/combobox.module.ts","../../src/combobox/carbon-components-angular-combobox.ts"],"sourcesContent":["import {\n\tComponent,\n\tOnChanges,\n\tContentChild,\n\tInput,\n\tOutput,\n\tHostListener,\n\tElementRef,\n\tViewChild,\n\tEventEmitter,\n\tAfterViewInit,\n\tAfterContentInit,\n\tHostBinding,\n\tTemplateRef,\n\tOnDestroy\n} from \"@angular/core\";\nimport { AbstractDropdownView, DropdownService } from \"carbon-components-angular/dropdown\";\nimport { ListItem } from \"carbon-components-angular/dropdown\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { filter } from \"rxjs/operators\";\nimport {\n\tgetScrollableParents,\n\thasScrollableParents\n} from \"carbon-components-angular/utils\";\nimport { I18n, Overridable } from \"carbon-components-angular/i18n\";\nimport { Observable } from \"rxjs\";\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { ComboBoxModule } from 'carbon-components-angular';\n * ```\n *\n * ComboBoxes are similar to dropdowns, except a combobox provides an input field for users to search items and (optionally) add their own.\n * Multi-select comboboxes also provide \"pills\" of selected items.\n *\n * [See demo](../../?path=/story/components-combobox--basic)\n */\n@Component({\n\tselector: \"cds-combo-box, ibm-combo-box\",\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"cds--list-box__wrapper\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--list-box__wrapper--fluid': fluid,\n\t\t\t\t'cds--list-box__wrapper--fluid--invalid': fluid && invalid,\n\t\t\t\t'cds--list-box__wrapper--fluid--focus': fluid && _isFocused\n\t\t\t}\">\n\t\t\t@if (label) {\n\t\t\t\t<label\n\t\t\t\t\t[for]=\"id\"\n\t\t\t\t\t[id]=\"labelId\"\n\t\t\t\t\tclass=\"cds--label\"\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t'cds--label--disabled': disabled,\n\t\t\t\t\t\t'cds--visually-hidden': hideLabel\n\t\t\t\t\t}\">\n\t\t\t\t\t@if (isTemplate(label)) {\n\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"label\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{label}}\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\t\t\t<div\n\t\t\t\t#listbox\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--multi-select cds--multi-select--filterable': type === 'multi',\n\t\t\t\t\t'cds--list-box--light': theme === 'light',\n\t\t\t\t\t'cds--list-box--expanded': open,\n\t\t\t\t\t'cds--list-box--sm': size === 'sm',\n\t\t\t\t\t'cds--list-box--md': size === 'md',\n\t\t\t\t\t'cds--list-box--lg': size === 'lg',\n\t\t\t\t\t'cds--list-box--disabled': disabled,\n\t\t\t\t\t'cds--combo-box--readonly': readonly,\n\t\t\t\t\t'cds--combo-box--warning cds--list-box--warning': warn,\n\t\t\t\t\t'cds--list-box--invalid': invalid\n\t\t\t\t}\"\n\t\t\t\tclass=\"cds--list-box cds--combo-box\"\n\t\t\t\t[attr.data-invalid]=\"(invalid ? true : null)\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"cds--list-box__field\"\n\t\t\t\t\t(click)=\"toggleDropdown()\"\n\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t@if (type === 'multi' && pills.length > 0) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"cds--tag cds--tag--filter cds--tag--high-contrast\"\n\t\t\t\t\t\t\t[ngClass]=\"{'cds--tag--disabled': disabled || readonly}\">\n\t\t\t\t\t\t\t<span class=\"cds--tag__label\">{{ pills.length }}</span>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t(click)=\"clearSelected($event)\"\n\t\t\t\t\t\t\t\t(blur)=\"onBlur()\"\n\t\t\t\t\t\t\t\t(keydown.enter)=\"clearSelected($event)\"\n\t\t\t\t\t\t\t\tclass=\"cds--tag__close-icon\"\n\t\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t\t[title]=\"clearSelectionsTitle\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled || readonly\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\">\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tfocusable=\"false\"\n\t\t\t\t\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\"\n\t\t\t\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<path d=\"M12 4.7l-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\"></path>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\t<input\n\t\t\t\t\t\t#input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t[readOnly]=\"readonly\"\n\t\t\t\t\t\t(input)=\"onSearch($event.target.value)\"\n\t\t\t\t\t\t(focus)=\"fluid ? handleFocus($event) : null\"\n\t\t\t\t\t\t(blur)=\"fluid ? handleFocus($event) : onBlur()\"\n\t\t\t\t\t\t(keydown.enter)=\"onSubmit($event)\"\n\t\t\t\t\t\t[value]=\"selectedValue\"\n\t\t\t\t\t\tclass=\"cds--text-input\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--text-input--empty': !showClearButton}\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"labelId\"\n\t\t\t\t\t\t[attr.aria-expanded]=\"open\"\n\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t[attr.maxlength]=\"maxLength\"\n\t\t\t\t\t\t[attr.aria-controls]=\"open ? view?.listId : null\"\n\t\t\t\t\t\t[attr.aria-autocomplete]=\"autocomplete\"\n\t\t\t\t\t\t[placeholder]=\"placeholder\"/>\n\t\t\t\t\t@if (invalid) {\n\t\t\t\t\t\t<svg\n\n\t\t\t\t\t\t\tcdsIcon=\"warning--filled\"\n\t\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon\">\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t} @else if (warn) {\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tcdsIcon=\"warning--alt--filled\"\n\t\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon cds--list-box__invalid-icon--warning\">\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t}\n\t\t\t\t\t@if (showClearButton) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tclass=\"cds--list-box__selection\"\n\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\"\n\t\t\t\t\t\t\t[title]=\"clearSelectionTitle\"\n\t\t\t\t\t\t\t(keyup.enter)=\"clearInput($event)\"\n\t\t\t\t\t\t\t(click)=\"clearInput($event)\"\n\t\t\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t\t\t<svg cdsIcon=\"close\" size=\"16\"></svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"cds--list-box__menu-icon\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t[title]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[attr.aria-label]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--list-box__menu-icon--open': open}\">\n\t\t\t\t\t\t<svg cdsIcon=\"chevron--down\" size=\"16\"></svg>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\t#dropdownMenu\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t'cds--list-box--up': this.dropUp !== null && this.dropUp !== undefined ? dropUp : _dropUp\n\t\t\t\t\t}\">\n\t\t\t\t\t@if (open) {\n\t\t\t\t\t\t<ng-content />\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t@if (fluid) {\n\t\t\t\t<hr class=\"cds--list-box__divider\" />\n\t\t\t}\n\t\t\t@if (invalid) {\n\t\t\t\t<div class=\"cds--form-requirement\">\n\t\t\t\t\t@if (isTemplate(invalidText)) {\n\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"invalidText\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{ invalidText }}\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t} @else if (warn) {\n\t\t\t\t<div class=\"cds--form-requirement\">\n\t\t\t\t\t@if (isTemplate(warnText)) {\n\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"warnText\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{warnText}}\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t} @else if(helperText && !fluid) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"cds--form__helper-text\"\n\t\t\t\t\t[ngClass]=\"{'cds--form__helper-text--disabled': disabled}\">\n\t\t\t\t\t\t@if (isTemplate(helperText)) {\n\t\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"helperText\" />\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t{{helperText}}\n\t\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: ComboBox,\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class ComboBox implements OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Text to show when nothing is selected.\n\t */\n\t@Input() set placeholder(value: string | Observable<string>) {\n\t\tthis._placeholder.override(value);\n\t}\n\n\tget placeholder() {\n\t\treturn this._placeholder.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when closed\n\t */\n\t@Input() set openMenuAria(value: string | Observable<string>) {\n\t\tthis._openMenuAria.override(value);\n\t}\n\n\tget openMenuAria() {\n\t\treturn this._openMenuAria.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when opened\n\t */\n\t@Input() set closeMenuAria(value: string | Observable<string>) {\n\t\tthis._closeMenuAria.override(value);\n\t}\n\n\tget closeMenuAria() {\n\t\treturn this._closeMenuAria.value;\n\t}\n\t/**\n\t * Value to display on the clear selections icon, when multi is selected\n\t */\n\t@Input() set clearSelectionsTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionsTitle.override(value);\n\t}\n\n\tget clearSelectionsTitle() {\n\t\treturn this._clearSelectionsTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes to clear selections, when multi is selected\n\t */\n\t@Input() set clearSelectionsAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionsAria.override(value);\n\t}\n\n\tget clearSelectionsAria() {\n\t\treturn this._clearSelectionsAria.value;\n\t}\n\t/**\n\t * Value to display on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionTitle.override(value);\n\t}\n\n\tget clearSelectionTitle() {\n\t\treturn this._clearSelectionTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionAria.override(value);\n\t}\n\n\tget clearSelectionAria() {\n\t\treturn this._clearSelectionAria.value;\n\t}\n\tstatic comboBoxCount = 0;\n\t@Input() id = `combobox-${ComboBox.comboBoxCount++}`;\n\t@Input() labelId = `combobox-label-${ComboBox.comboBoxCount++}`;\n\t/**\n\t * List of items to fill the content with.\n\t *\n\t * **Example:**\n\t * ```javascript\n\t * items = [\n\t *\t\t{\n\t *\t\t\tcontent: \"Abacus\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Byte\",\n\t *\t\t\tselected: false,\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Computer\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Digital\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t * ];\n\t * ```\n\t *\n\t */\n\t@Input() items: Array<ListItem> = [];\n\t/**\n\t * Combo box type (supporting single or multi selection of items).\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * Combo box render size.\n\t */\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Specifies the property to be used as the return value to `ngModel`\n\t */\n\t@Input() itemValueKey: string;\n\t/**\n\t * Label for the combobox.\n\t */\n\t@Input() label: string | TemplateRef<any>;\n\t/**\n\t * Hide label while keeping it accessible for screen readers\n\t */\n\t@Input() hideLabel = false;\n\t/**\n\t * Sets the optional helper text.\n\t */\n\t@Input() helperText: string | TemplateRef<any>;\n\t/**\n\t * set to `true` to place the dropdown view inline with the component\n\t */\n\t@Input() appendInline: boolean = null;\n\t/**\n\t * Set to `true` to show the invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if combobox is in an invalid state.\n\t */\n\t@Input() invalidText: string | TemplateRef<any>;\n\t/**\n\t* Set to `true` to show a warning (contents set by warnText)\n\t*/\n\t@Input() warn = false;\n\t/**\n\t * Sets the warning text\n\t */\n\t@Input() warnText: string | TemplateRef<any>;\n\t/**\n\t * Max length value to limit input characters\n\t */\n\t@Input() maxLength: number = null;\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\t/**\n\t * Specify feedback (mode) of the selection.\n\t * `top`: selected item jumps to top\n\t * `fixed`: selected item stays at its position\n\t * `top-after-reopen`: selected item jump to top after reopen dropdown\n\t */\n\t@Input() selectionFeedback: \"top\" | \"fixed\" | \"top-after-reopen\" = \"top-after-reopen\";\n\t/**\n\t * Specify aria-autocomplete attribute of text input.\n\t * \"list\", is the expected value for a combobox that invokes a drop-down list\n\t */\n\t@Input() autocomplete = \"list\";\n\t/**\n\t * Overrides the automatic dropUp.\n\t */\n\t@Input() dropUp: boolean;\n\t/**\n\t * Set to `true` to disable combobox.\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` for readonly state.\n\t */\n\t@Input() readonly = false;\n\t/**\n\t * Experimental: enable fluid state\n\t */\n\t@Input() fluid = false;\n\t/**\n\t * Emits a ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t * \t\tcontent: \"one\",\n\t * \t\tselected: true\n\t * }\n\t * ```\n\t */\n\t@Output() selected = new EventEmitter<ListItem | ListItem[]>();\n\t/**\n\t * Intended to be used to add items to the list.\n\t *\n\t * Emits an event that includes the current item list, the suggested index for the new item, and a simple ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t *\t{\n\t *\t\titems: [{content: \"one\", selected: true}, {content: \"two\", selected: true}],\n\t *\t\tindex: 1,\n\t *\t\tvalue: {\n\t *\t\t\tcontent: \"some user string\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t *\t}\n\t * ```\n\t *\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t *\tafter: 1,\n\t *\tvalue: \"some user string\"\n\t * }\n\t * ```\n\t */\n\t@Output() submit = new EventEmitter<{\n\t\titems: ListItem[],\n\t\tindex: number,\n\t\tvalue: {\n\t\t\tcontent: string,\n\t\t\tselected: boolean\n\t\t}\n\t}>();\n\t/** Emits an empty event when the menu is closed */\n\t@Output() close = new EventEmitter<void>();\n\t/** Emits the search string from the input */\n\t@Output() search = new EventEmitter<string>();\n\t/** Emits an event when the clear button is clicked. */\n\t@Output() clear = new EventEmitter<Event>();\n\t/** ContentChild reference to the instantiated dropdown list */\n\t@ContentChild(AbstractDropdownView, { static: true }) view: AbstractDropdownView;\n\t@ViewChild(\"dropdownMenu\") dropdownMenu;\n\t@ViewChild(\"input\", { static: true }) input: ElementRef;\n\t@ViewChild(\"listbox\", { static: true }) listbox: ElementRef;\n\t@HostBinding(\"class.cds--list-box__wrapper\") hostClass = true;\n\n\tpublic open = false;\n\n\tpublic showClearButton = false;\n\n\t/** Selected items for multi-select combo-boxes. */\n\tpublic pills = [];\n\t/** used to update the displayValue */\n\tpublic selectedValue = \"\";\n\n\toutsideClick = this._outsideClick.bind(this);\n\tkeyboardNav = this._keyboardNav.bind(this);\n\t/**\n\t * controls whether the `drop-up` class is applied\n\t */\n\t_dropUp = false;\n\n\tprotected noop = this._noop.bind(this);\n\tprotected onTouchedCallback: () => void = this._noop;\n\tprotected propagateChangeCallback: (_: any) => void = this._noop;\n\n\tprotected _placeholder = this.i18n.getOverridable(\"COMBOBOX.PLACEHOLDER\");\n\tprotected _closeMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLOSE_MENU\");\n\tprotected _openMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.OPEN_MENU\");\n\tprotected _clearSelectionsTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionsAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTED\");\n\tprotected _clearSelectionAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTED\");\n\n\tprotected _isFocused = false;\n\n\t/**\n\t * Creates an instance of ComboBox.\n\t */\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected dropdownService: DropdownService,\n\t\tprotected i18n: I18n\n\t) {}\n\n\t/**\n\t * Lifecycle hook.\n\t * Updates pills if necessary.\n\t *\n\t */\n\tngOnChanges(changes) {\n\t\tif (changes.items) {\n\t\t\tthis.view.items = changes.items.currentValue;\n\t\t\tthis.updateSelected();\n\t\t\t// If new items are added into the combobox while there is search input,\n\t\t\t// repeat the search. Search should only trigger for type 'single' when there is no value selected.\n\t\t\tif (this.type === \"multi\" || (this.type === \"single\" && !this.selectedValue)) {\n\t\t\t\tthis.onSearch(this.input.nativeElement.value, false);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets initial state that depends on child components\n\t * Subscribes to select events and handles focus/filtering/initial list updates\n\t */\n\tngAfterContentInit() {\n\t\tif (this.view) {\n\t\t\tthis.view.type = this.type;\n\n\t\t\t// function to check if the event is organic (isUpdate === false) or programmatic\n\t\t\tconst isUpdate = event => event && event.isUpdate;\n\n\t\t\tthis.view.select.subscribe(event => {\n\t\t\t\tif (Array.isArray(event)) {\n\t\t\t\t\tthis.updatePills();\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tif (this.itemValueKey && this.view.getSelected()) {\n\t\t\t\t\t\t\tconst values = this.view.getSelected().map(item => item[this.itemValueKey]);\n\t\t\t\t\t\t\tthis.propagateChangeCallback(values);\n\t\t\t\t\t\t// otherwise just pass up the values from `getSelected`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(this.view.getSelected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.selected.emit(event);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If type is single, dropdown list will emit an object\n\t\t\t\t\tif (event.item && event.item.selected) {\n\t\t\t\t\t\tthis.showClearButton = true;\n\t\t\t\t\t\tthis.selectedValue = event.item.content;\n\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item[this.itemValueKey]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.selectedValue = \"\";\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// not guarding these since the nativeElement has to be loaded\n\t\t\t\t\t// for select to even fire\n\t\t\t\t\t// only focus for \"organic\" selections\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tthis.elementRef.nativeElement.querySelector(\"input\").focus();\n\t\t\t\t\t\tthis.view.filterBy(\"\");\n\t\t\t\t\t\tthis.selected.emit(event.item);\n\t\t\t\t\t}\n\t\t\t\t\tthis.closeDropdown();\n\t\t\t\t}\n\t\t\t});\n\t\t\t// update the rest of combobox with any pre-selected items\n\t\t\t// setTimeout just defers the call to the next check cycle\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateSelected();\n\t\t\t});\n\n\t\t\tthis.view.blurIntent.pipe(filter(v => v === \"top\")).subscribe(() => {\n\t\t\t\tthis.elementRef.nativeElement.querySelector(\".cds--text-input\").focus();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Binds event handlers against the rendered view\n\t */\n\tngAfterViewInit() {\n\t\t// if appendInline is default valued (null) we should:\n\t\t// 1. if there are scrollable parents (not including body) don't append inline\n\t\t// this should also cover the case where the dropdown is in a modal\n\t\t// (where we _do_ want to append to the placeholder)\n\t\tif (this.appendInline === null && hasScrollableParents(this.elementRef.nativeElement)) {\n\t\t\tthis.appendInline = false;\n\t\t// 2. otherwise we should append inline\n\t\t} else if (this.appendInline === null) {\n\t\t\tthis.appendInline = true;\n\t\t}\n\t}\n\n\t/**\n\t * Removing the `Dropdown` from the body if it is appended to the body.\n\t */\n\tngOnDestroy() {\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Handles `Escape/Tab` key closing the dropdown, and arrow up/down focus to/from the dropdown list.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\thostkeys(ev: KeyboardEvent) {\n\t\tif (ev.key === \"Escape\") {\n\t\t\tthis.closeDropdown();\n\t\t} else if ((ev.key === \"ArrowDown\")\n\t\t\t&& (!this.dropdownMenu || !this.dropdownMenu.nativeElement.contains(ev.target))) {\n\t\t\tev.preventDefault();\n\t\t\tthis.openDropdown();\n\t\t\tsetTimeout(() => { this.view.initFocus(); }, 0);\n\t\t}\n\n\t\tif (\n\t\t\tthis.open && ev.key === \"Tab\" &&\n\t\t\t(this.dropdownMenu.nativeElement.contains(ev.target as Node) || ev.target === this.input.nativeElement)\n\t\t) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tif (this.open && ev.key === \"Tab\" && ev.shiftKey) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/*\n\t * no-op method for null event listeners, and other no op calls\n\t */\n\t_noop() {}\n\n\t/*\n\t * propagates the value provided from ngModel\n\t */\n\twriteValue(value: any) {\n\t\tif (this.type === \"single\") {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the specified item and update its state\n\t\t\t\tconst newValue = Object.assign({}, this.view.getListItems().find(item => item[this.itemValueKey] === value));\n\t\t\t\tnewValue.selected = true;\n\t\t\t\tthis.view.propagateSelected([newValue]);\n\t\t\t} else {\n\t\t\t\t// all items in propagateSelected must be iterable\n\t\t\t\tthis.view.propagateSelected([value || \"\"]);\n\t\t\t}\n\t\t\tthis.showClearButton = !!(value && this.view.getSelected().length);\n\t\t} else {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the items and update their state based on the received value array\n\t\t\t\t// this way we don't lose any additional metadata that may be passed in via the `items` Input\n\t\t\t\tlet newValues = [];\n\t\t\t\tfor (const v of value ?? []) {\n\t\t\t\t\tfor (const item of this.view.getListItems()) {\n\t\t\t\t\t\tif (item[this.itemValueKey] === v) {\n\t\t\t\t\t\t\tnewValues.push(Object.assign({}, item, { selected: true }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.view.propagateSelected(newValues);\n\t\t\t} else {\n\t\t\t\tthis.view.propagateSelected(value ? value : [\"\"]);\n\t\t\t}\n\t\t}\n\t\tthis.updateSelected();\n\t}\n\n\tonBlur() {\n\t\tthis.onTouchedCallback();\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChangeCallback = fn;\n\t}\n\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouchedCallback = fn;\n\t}\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the combobox.\n\t *\n\t * ex: `this.formGroup.get(\"myCoolCombobox\").disable();`\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/**\n\t * Called by `n-pill-input` when the selected pills have changed.\n\t */\n\tpublic updatePills() {\n\t\tthis.pills = this.view.getSelected() || [];\n\t\tthis.checkForReorder();\n\t}\n\n\tpublic clearSelected(event) {\n\t\tthis.items = this.items.map(item => {\n\t\t\tif (!item.disabled) {\n\t\t\t\titem.selected = false;\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t\tthis.view.items = this.items;\n\t\tthis.updatePills();\n\t\t// clearSelected can only fire on type=multi\n\t\t// so we just emit getSelected() (just in case there's any disabled but selected items)\n\t\tconst selected = this.view.getSelected();\n\n\t\t// in case there are disabled items they should be mapped according to itemValueKey\n\t\tif (this.itemValueKey && selected) {\n\t\t\tconst values = selected.map((item) => item[this.itemValueKey]);\n\t\t\tthis.propagateChangeCallback(values);\n\t\t} else {\n\t\t\tthis.propagateChangeCallback(selected);\n\t\t}\n\n\t\tthis.selected.emit(selected as any);\n\t\tthis.clear.emit(event);\n\t}\n\n\t/**\n\t * Closes the dropdown and emits the close event.\n\t */\n\tpublic closeDropdown() {\n\t\tthis.open = false;\n\t\tthis.checkForReorder();\n\t\tthis.close.emit();\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\n\t\tdocument.removeEventListener(\"click\", this.outsideClick, true);\n\t}\n\n\t/**\n\t * Opens the dropdown.\n\t */\n\tpublic openDropdown() {\n\t\tif (this.disabled || this.readonly) { return; }\n\t\tthis.open = true;\n\t\tthis._dropUp = false;\n\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToBody();\n\t\t}\n\n\t\tdocument.addEventListener(\"click\", this.outsideClick, true);\n\n\t\t// set the dropdown menu to drop up if it is near the bottom of the screen\n\t\t// setTimeout lets us do the calculations after it is visible in the DOM\n\t\tsetTimeout(() => {\n\t\t\tif (this.dropUp === null || this.dropUp === undefined) {\n\t\t\t\tthis._dropUp = this._shouldDropUp();\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Toggles the dropdown.\n\t */\n\tpublic toggleDropdown() {\n\t\tif (this.open) {\n\t\t\tthis.closeDropdown();\n\t\t} else {\n\t\t\tthis.openDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Sets the list group filter, and manages single select item selection.\n\t */\n\tpublic onSearch(searchString, shouldEmitSearch = true) {\n\t\tif (shouldEmitSearch) {\n\t\t\tthis.search.emit(searchString);\n\t\t}\n\t\tthis.showClearButton = !!searchString;\n\t\tthis.view.filterBy(searchString);\n\t\tif (searchString !== \"\") {\n\t\t\tif (!this.open) {\n\t\t\t\tthis.openDropdown();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectedValue = \"\";\n\t\t\tif (this.type === \"multi\" &&\n\t\t\t\t(this.selectionFeedback === \"top\" || this.selectionFeedback === \"top-after-reopen\")) {\n\t\t\t\tthis.view.reorderSelected();\n\t\t\t}\n\t\t}\n\t\tif (this.type === \"single\") {\n\t\t\t// deselect if the input doesn't match the content\n\t\t\t// of any given item\n\t\t\tconst matches = this.view.getListItems().some(item => item.content.toLowerCase().includes(searchString.toLowerCase()));\n\t\t\tif (!matches) {\n\t\t\t\tconst selected = this.view.getSelected();\n\t\t\t\tif (!selected || !selected[0]) {\n\t\t\t\t\tthis.view.filterBy(searchString);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Intended to be used to add items to the list.\n\t */\n\tpublic onSubmit(event: KeyboardEvent) {\n\t\tthis.submit.emit({\n\t\t\titems: this.view.getListItems(),\n\t\t\tindex: 0,\n\t\t\tvalue: {\n\t\t\t\tcontent: (event.target as HTMLInputElement).value,\n\t\t\t\tselected: false\n\t\t\t}\n\t\t});\n\t}\n\n\tclearInput(event) {\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\tif (this.disabled || this.readonly) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type === \"single\") { // don't want to clear selected or close if multi\n\t\t\tthis.clearSelected(event);\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tthis.selectedValue = \"\";\n\t\tthis.input.nativeElement.value = \"\";\n\n\t\tthis.showClearButton = false;\n\t\tthis.input.nativeElement.focus();\n\t\tthis.onSearch(this.input.nativeElement.value);\n\t}\n\n\tpublic isTemplate(value) {\n\t\treturn value instanceof TemplateRef;\n\t}\n\n\t/**\n\t * Handles keyboard events so users are controlling the `Dropdown` instead of unintentionally controlling outside elements.\n\t */\n\t_keyboardNav(event: KeyboardEvent) {\n\t\tif ((event.key === \"Escape\") && this.open) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close modal if inside of it\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeDropdown();\n\t\t\tthis.input.nativeElement.focus();\n\t\t} else if (this.open && event.key === \"Tab\") {\n\t\t\t// this way focus will start on the next focusable item from the dropdown\n\t\t\t// not the top of the body!\n\t\t\tthis.input.nativeElement.focus();\n\t\t\tthis.input.nativeElement.dispatchEvent(new KeyboardEvent(\"keydown\", { bubbles: true, cancelable: true, key: \"Tab\" }));\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list as an element that is appended to the DOM body.\n\t */\n\t_appendToBody() {\n\t\tthis.dropdownService.appendToBody(\n\t\t\tthis.listbox.nativeElement,\n\t\t\tthis.dropdownMenu.nativeElement,\n\t\t\t`${this.elementRef.nativeElement.className}${this.open ? \" cds--list-box--expanded\" : \"\"}`);\n\t\tthis.dropdownMenu.nativeElement.addEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list appending it to the dropdown parent object instead of the body.\n\t */\n\t_appendToDropdown() {\n\t\tthis.dropdownService.appendToDropdown(this.elementRef.nativeElement);\n\t\tthis.dropdownMenu.nativeElement.removeEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Detects whether or not the `Dropdown` list is visible within all scrollable parents.\n\t * This can be overridden by passing in a value to the `dropUp` input.\n\t */\n\t_shouldDropUp() {\n\t\t// check if dropdownMenu exists first.\n\t\tconst menu = this.dropdownMenu && this.dropdownMenu.nativeElement.querySelector(\".cds--list-box__menu\");\n\t\t// check if menu exists first.\n\t\tconst menuRect = menu && menu.getBoundingClientRect();\n\t\tif (menu && menuRect) {\n\t\t\tconst scrollableParents = getScrollableParents(menu);\n\t\t\treturn scrollableParents.reduce((shouldDropUp: boolean, parent: HTMLElement) => {\n\t\t\t\tconst parentRect = parent.getBoundingClientRect();\n\t\t\t\tconst isBelowParent = !(menuRect.bottom <= parentRect.bottom);\n\t\t\t\treturn shouldDropUp || isBelowParent;\n\t\t\t}, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handles clicks outside of the `Dropdown` list.\n\t */\n\t_outsideClick(event) {\n\t\tif (!this.elementRef.nativeElement.contains(event.target) &&\n\t\t\t// if we're appendToBody the list isn't within the _elementRef,\n\t\t\t// so we've got to check if our target is possibly in there too.\n\t\t\t!this.dropdownMenu.nativeElement.contains(event.target)) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\thandleFocus(event: FocusEvent) {\n\t\tthis._isFocused = event.type === \"focus\";\n\t}\n\n\tprotected updateSelected() {\n\t\tconst selected = this.view.getSelected();\n\t\tif (this.type === \"multi\") {\n\t\t\tthis.updatePills();\n\t\t} else if (selected) {\n\t\t\tconst value = selected[0] ? selected[0].content : \"\";\n\t\t\tconst changeCallbackValue = selected[0] ? selected[0] : \"\";\n\t\t\tthis.selectedValue = value;\n\t\t\tthis.showClearButton = !!value;\n\t\t}\n\t}\n\n\tprotected checkForReorder() {\n\t\tconst topAfterReopen = !this.open && this.selectionFeedback === \"top-after-reopen\";\n\t\tif ((this.type === \"multi\") && (topAfterReopen || this.selectionFeedback === \"top\")) {\n\t\t\tthis.view.reorderSelected(true);\n\t\t}\n\t}\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { ComboBox } from \"./combobox.component\";\nimport { DropdownModule, DropdownService } from \"carbon-components-angular/dropdown\";\nimport { I18nModule } from \"carbon-components-angular/i18n\";\nimport { UtilsModule } from \"carbon-components-angular/utils\";\nimport { IconModule } from \"carbon-components-angular/icon\";\n\n@NgModule({\n\tdeclarations: [\n\t\tComboBox\n\t],\n\texports: [\n\t\tComboBox,\n\t\tDropdownModule\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tDropdownModule,\n\t\tI18nModule,\n\t\tUtilsModule,\n\t\tIconModule\n\t],\n\tproviders: [ DropdownService ]\n})\nexport class ComboBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"carbon-components-angular-combobox.mjs","sources":["../../src/combobox/combobox.component.ts","../../src/combobox/combobox.module.ts","../../src/combobox/carbon-components-angular-combobox.ts"],"sourcesContent":["import {\n\tComponent,\n\tOnChanges,\n\tContentChild,\n\tInput,\n\tOutput,\n\tHostListener,\n\tElementRef,\n\tViewChild,\n\tEventEmitter,\n\tAfterViewInit,\n\tAfterContentInit,\n\tHostBinding,\n\tTemplateRef,\n\tOnDestroy,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef\n} from \"@angular/core\";\nimport { AbstractDropdownView, DropdownService } from \"carbon-components-angular/dropdown\";\nimport { ListItem } from \"carbon-components-angular/dropdown\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { filter } from \"rxjs/operators\";\nimport {\n\tgetScrollableParents,\n\thasScrollableParents\n} from \"carbon-components-angular/utils\";\nimport { I18n, Overridable } from \"carbon-components-angular/i18n\";\nimport { Observable } from \"rxjs\";\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { ComboBoxModule } from 'carbon-components-angular';\n * ```\n *\n * ComboBoxes are similar to dropdowns, except a combobox provides an input field for users to search items and (optionally) add their own.\n * Multi-select comboboxes also provide \"pills\" of selected items.\n *\n * [See demo](../../?path=/story/components-combobox--basic)\n */\n@Component({\n\tselector: \"cds-combo-box, ibm-combo-box\",\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"cds--list-box__wrapper\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--list-box__wrapper--fluid': fluid,\n\t\t\t\t'cds--list-box__wrapper--fluid--invalid': fluid && invalid,\n\t\t\t\t'cds--list-box__wrapper--fluid--focus': fluid && _isFocused\n\t\t\t}\">\n\t\t\t@if (label) {\n\t\t\t\t<label\n\t\t\t\t\t[for]=\"id\"\n\t\t\t\t\t[id]=\"labelId\"\n\t\t\t\t\tclass=\"cds--label\"\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t'cds--label--disabled': disabled,\n\t\t\t\t\t\t'cds--visually-hidden': hideLabel\n\t\t\t\t\t}\">\n\t\t\t\t\t@if (isTemplate(label)) {\n\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"label\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{label}}\n\t\t\t\t\t}\n\t\t\t\t</label>\n\t\t\t}\n\t\t\t<div\n\t\t\t\t#listbox\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--multi-select cds--multi-select--filterable': type === 'multi',\n\t\t\t\t\t'cds--list-box--light': theme === 'light',\n\t\t\t\t\t'cds--list-box--expanded': open,\n\t\t\t\t\t'cds--list-box--sm': size === 'sm',\n\t\t\t\t\t'cds--list-box--md': size === 'md',\n\t\t\t\t\t'cds--list-box--lg': size === 'lg',\n\t\t\t\t\t'cds--list-box--disabled': disabled,\n\t\t\t\t\t'cds--combo-box--readonly': readonly,\n\t\t\t\t\t'cds--combo-box--warning cds--list-box--warning': warn,\n\t\t\t\t\t'cds--list-box--invalid': invalid\n\t\t\t\t}\"\n\t\t\t\tclass=\"cds--list-box cds--combo-box\"\n\t\t\t\t[attr.data-invalid]=\"(invalid ? true : null)\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"cds--list-box__field\"\n\t\t\t\t\t(click)=\"toggleDropdown()\"\n\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t@if (type === 'multi' && pills.length > 0) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"cds--tag cds--tag--filter cds--tag--high-contrast\"\n\t\t\t\t\t\t\t[ngClass]=\"{'cds--tag--disabled': disabled || readonly}\">\n\t\t\t\t\t\t\t<span class=\"cds--tag__label\">{{ pills.length }}</span>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t(click)=\"clearSelected($event)\"\n\t\t\t\t\t\t\t\t(blur)=\"onBlur()\"\n\t\t\t\t\t\t\t\t(keydown.enter)=\"clearSelected($event)\"\n\t\t\t\t\t\t\t\tclass=\"cds--tag__close-icon\"\n\t\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t\t[title]=\"clearSelectionsTitle\"\n\t\t\t\t\t\t\t\t[disabled]=\"disabled || readonly\"\n\t\t\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\">\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tfocusable=\"false\"\n\t\t\t\t\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\"\n\t\t\t\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<path d=\"M12 4.7l-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\"></path>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\t<input\n\t\t\t\t\t\t#input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t[readOnly]=\"readonly\"\n\t\t\t\t\t\t(input)=\"onSearch($event.target.value)\"\n\t\t\t\t\t\t(focus)=\"fluid ? handleFocus($event) : null\"\n\t\t\t\t\t\t(blur)=\"fluid ? handleFocus($event) : onBlur()\"\n\t\t\t\t\t\t(keydown.enter)=\"onSubmit($event)\"\n\t\t\t\t\t\t[value]=\"selectedValue\"\n\t\t\t\t\t\tclass=\"cds--text-input\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--text-input--empty': !showClearButton}\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"labelId\"\n\t\t\t\t\t\t[attr.aria-expanded]=\"open\"\n\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t[attr.maxlength]=\"maxLength\"\n\t\t\t\t\t\t[attr.aria-controls]=\"open ? view?.listId : null\"\n\t\t\t\t\t\t[attr.aria-autocomplete]=\"autocomplete\"\n\t\t\t\t\t\t[placeholder]=\"placeholder\"/>\n\t\t\t\t\t@if (invalid) {\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tcdsIcon=\"warning--filled\"\n\t\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon\">\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t} @else if (warn) {\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tcdsIcon=\"warning--alt--filled\"\n\t\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon cds--list-box__invalid-icon--warning\">\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t}\n\t\t\t\t\t@if (showClearButton) {\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tclass=\"cds--list-box__selection\"\n\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\"\n\t\t\t\t\t\t\t[title]=\"clearSelectionTitle\"\n\t\t\t\t\t\t\t(keyup.enter)=\"clearInput($event)\"\n\t\t\t\t\t\t\t(click)=\"clearInput($event)\"\n\t\t\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t\t\t<svg cdsIcon=\"close\" size=\"16\"></svg>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"cds--list-box__menu-icon\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t[title]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[attr.aria-label]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--list-box__menu-icon--open': open}\">\n\t\t\t\t\t\t<svg cdsIcon=\"chevron--down\" size=\"16\"></svg>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\t#dropdownMenu\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t'cds--list-box--up': this.dropUp !== null && this.dropUp !== undefined ? dropUp : _dropUp\n\t\t\t\t\t}\">\n\t\t\t\t\t@if (open) {\n\t\t\t\t\t\t<ng-content />\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t@if (fluid) {\n\t\t\t\t<hr class=\"cds--list-box__divider\" />\n\t\t\t}\n\t\t\t@if (invalid) {\n\t\t\t\t<div class=\"cds--form-requirement\">\n\t\t\t\t\t@if (isTemplate(invalidText)) {\n\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"invalidText\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{ invalidText }}\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t} @else if (warn) {\n\t\t\t\t<div class=\"cds--form-requirement\">\n\t\t\t\t\t@if (isTemplate(warnText)) {\n\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"warnText\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t{{warnText}}\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t} @else if(helperText && !fluid) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"cds--form__helper-text\"\n\t\t\t\t\t[ngClass]=\"{'cds--form__helper-text--disabled': disabled}\">\n\t\t\t\t\t\t@if (isTemplate(helperText)) {\n\t\t\t\t\t\t\t<ng-template [ngTemplateOutlet]=\"helperText\" />\n\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t{{helperText}}\n\t\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: ComboBox,\n\t\t\tmulti: true\n\t\t}\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ComboBox implements OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Text to show when nothing is selected.\n\t */\n\t@Input() set placeholder(value: string | Observable<string>) {\n\t\tthis._placeholder.override(value);\n\t}\n\n\tget placeholder() {\n\t\treturn this._placeholder.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when closed\n\t */\n\t@Input() set openMenuAria(value: string | Observable<string>) {\n\t\tthis._openMenuAria.override(value);\n\t}\n\n\tget openMenuAria() {\n\t\treturn this._openMenuAria.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when opened\n\t */\n\t@Input() set closeMenuAria(value: string | Observable<string>) {\n\t\tthis._closeMenuAria.override(value);\n\t}\n\n\tget closeMenuAria() {\n\t\treturn this._closeMenuAria.value;\n\t}\n\t/**\n\t * Value to display on the clear selections icon, when multi is selected\n\t */\n\t@Input() set clearSelectionsTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionsTitle.override(value);\n\t}\n\n\tget clearSelectionsTitle() {\n\t\treturn this._clearSelectionsTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes to clear selections, when multi is selected\n\t */\n\t@Input() set clearSelectionsAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionsAria.override(value);\n\t}\n\n\tget clearSelectionsAria() {\n\t\treturn this._clearSelectionsAria.value;\n\t}\n\t/**\n\t * Value to display on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionTitle.override(value);\n\t}\n\n\tget clearSelectionTitle() {\n\t\treturn this._clearSelectionTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionAria.override(value);\n\t}\n\n\tget clearSelectionAria() {\n\t\treturn this._clearSelectionAria.value;\n\t}\n\tstatic comboBoxCount = 0;\n\t@Input() id = `combobox-${ComboBox.comboBoxCount++}`;\n\t@Input() labelId = `combobox-label-${ComboBox.comboBoxCount++}`;\n\t/**\n\t * List of items to fill the content with.\n\t *\n\t * **Example:**\n\t * ```javascript\n\t * items = [\n\t *\t\t{\n\t *\t\t\tcontent: \"Abacus\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Byte\",\n\t *\t\t\tselected: false,\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Computer\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Digital\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t * ];\n\t * ```\n\t *\n\t */\n\t@Input() items: Array<ListItem> = [];\n\t/**\n\t * Combo box type (supporting single or multi selection of items).\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * Combo box render size.\n\t */\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Specifies the property to be used as the return value to `ngModel`\n\t */\n\t@Input() itemValueKey: string;\n\t/**\n\t * Label for the combobox.\n\t */\n\t@Input() label: string | TemplateRef<any>;\n\t/**\n\t * Hide label while keeping it accessible for screen readers\n\t */\n\t@Input() hideLabel = false;\n\t/**\n\t * Sets the optional helper text.\n\t */\n\t@Input() helperText: string | TemplateRef<any>;\n\t/**\n\t * set to `true` to place the dropdown view inline with the component\n\t */\n\t@Input() appendInline: boolean = null;\n\t/**\n\t * Set to `true` to show the invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if combobox is in an invalid state.\n\t */\n\t@Input() invalidText: string | TemplateRef<any>;\n\t/**\n\t* Set to `true` to show a warning (contents set by warnText)\n\t*/\n\t@Input() warn = false;\n\t/**\n\t * Sets the warning text\n\t */\n\t@Input() warnText: string | TemplateRef<any>;\n\t/**\n\t * Max length value to limit input characters\n\t */\n\t@Input() maxLength: number = null;\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\t/**\n\t * Specify feedback (mode) of the selection.\n\t * `top`: selected item jumps to top\n\t * `fixed`: selected item stays at its position\n\t * `top-after-reopen`: selected item jump to top after reopen dropdown\n\t */\n\t@Input() selectionFeedback: \"top\" | \"fixed\" | \"top-after-reopen\" = \"top-after-reopen\";\n\t/**\n\t * Specify aria-autocomplete attribute of text input.\n\t * \"list\", is the expected value for a combobox that invokes a drop-down list\n\t */\n\t@Input() autocomplete = \"list\";\n\t/**\n\t * Overrides the automatic dropUp.\n\t */\n\t@Input() dropUp: boolean;\n\t/**\n\t * Set to `true` to disable combobox.\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` for readonly state.\n\t */\n\t@Input() readonly = false;\n\t/**\n\t * Experimental: enable fluid state\n\t */\n\t@Input() fluid = false;\n\t/**\n\t * Emits a ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t * \t\tcontent: \"one\",\n\t * \t\tselected: true\n\t * }\n\t * ```\n\t */\n\t@Output() selected = new EventEmitter<ListItem | ListItem[]>();\n\t/**\n\t * Intended to be used to add items to the list.\n\t *\n\t * Emits an event that includes the current item list, the suggested index for the new item, and a simple ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t *\t{\n\t *\t\titems: [{content: \"one\", selected: true}, {content: \"two\", selected: true}],\n\t *\t\tindex: 1,\n\t *\t\tvalue: {\n\t *\t\t\tcontent: \"some user string\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t *\t}\n\t * ```\n\t *\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t *\tafter: 1,\n\t *\tvalue: \"some user string\"\n\t * }\n\t * ```\n\t */\n\t@Output() submit = new EventEmitter<{\n\t\titems: ListItem[],\n\t\tindex: number,\n\t\tvalue: {\n\t\t\tcontent: string,\n\t\t\tselected: boolean\n\t\t}\n\t}>();\n\t/** Emits an empty event when the menu is closed */\n\t@Output() close = new EventEmitter<void>();\n\t/** Emits the search string from the input */\n\t@Output() search = new EventEmitter<string>();\n\t/** Emits an event when the clear button is clicked. */\n\t@Output() clear = new EventEmitter<Event>();\n\t/** ContentChild reference to the instantiated dropdown list */\n\t@ContentChild(AbstractDropdownView, { static: true }) view: AbstractDropdownView;\n\t@ViewChild(\"dropdownMenu\") dropdownMenu;\n\t@ViewChild(\"input\", { static: true }) input: ElementRef;\n\t@ViewChild(\"listbox\", { static: true }) listbox: ElementRef;\n\t@HostBinding(\"class.cds--list-box__wrapper\") hostClass = true;\n\n\tpublic open = false;\n\n\tpublic showClearButton = false;\n\n\t/** Selected items for multi-select combo-boxes. */\n\tpublic pills = [];\n\t/** used to update the displayValue */\n\tpublic selectedValue = \"\";\n\n\toutsideClick = this._outsideClick.bind(this);\n\tkeyboardNav = this._keyboardNav.bind(this);\n\t/**\n\t * controls whether the `drop-up` class is applied\n\t */\n\t_dropUp = false;\n\n\tprotected noop = this._noop.bind(this);\n\tprotected onTouchedCallback: () => void = this._noop;\n\tprotected propagateChangeCallback: (_: any) => void = this._noop;\n\n\tprotected _placeholder = this.i18n.getOverridable(\"COMBOBOX.PLACEHOLDER\");\n\tprotected _closeMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLOSE_MENU\");\n\tprotected _openMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.OPEN_MENU\");\n\tprotected _clearSelectionsTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionsAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTED\");\n\tprotected _clearSelectionAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTED\");\n\n\tprotected _isFocused = false;\n\n\t/**\n\t * Creates an instance of ComboBox.\n\t */\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected dropdownService: DropdownService,\n\t\tprotected i18n: I18n,\n\t\tprotected cdr: ChangeDetectorRef\n\t) {}\n\n\t/**\n\t * Lifecycle hook.\n\t * Updates pills if necessary.\n\t *\n\t */\n\tngOnChanges(changes) {\n\t\tif (changes.items) {\n\t\t\tthis.view.items = changes.items.currentValue;\n\t\t\tthis.updateSelected();\n\t\t\t// If new items are added into the combobox while there is search input,\n\t\t\t// repeat the search. Search should only trigger for type 'single' when there is no value selected.\n\t\t\tif (this.type === \"multi\" || (this.type === \"single\" && !this.selectedValue)) {\n\t\t\t\tthis.onSearch(this.input.nativeElement.value, false);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets initial state that depends on child components\n\t * Subscribes to select events and handles focus/filtering/initial list updates\n\t */\n\tngAfterContentInit() {\n\t\tif (this.view) {\n\t\t\tthis.view.type = this.type;\n\n\t\t\t// function to check if the event is organic (isUpdate === false) or programmatic\n\t\t\tconst isUpdate = event => event && event.isUpdate;\n\n\t\t\tthis.view.select.subscribe(event => {\n\t\t\t\tif (Array.isArray(event)) {\n\t\t\t\t\tthis.updatePills();\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tif (this.itemValueKey && this.view.getSelected()) {\n\t\t\t\t\t\t\tconst values = this.view.getSelected().map(item => item[this.itemValueKey]);\n\t\t\t\t\t\t\tthis.propagateChangeCallback(values);\n\t\t\t\t\t\t// otherwise just pass up the values from `getSelected`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(this.view.getSelected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.selected.emit(event);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If type is single, dropdown list will emit an object\n\t\t\t\t\tif (event.item && event.item.selected) {\n\t\t\t\t\t\tthis.showClearButton = true;\n\t\t\t\t\t\tthis.selectedValue = event.item.content;\n\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item[this.itemValueKey]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.selectedValue = \"\";\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// not guarding these since the nativeElement has to be loaded\n\t\t\t\t\t// for select to even fire\n\t\t\t\t\t// only focus for \"organic\" selections\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tthis.elementRef.nativeElement.querySelector(\"input\").focus();\n\t\t\t\t\t\tthis.view.filterBy(\"\");\n\t\t\t\t\t\tthis.selected.emit(event.item);\n\t\t\t\t\t}\n\t\t\t\t\tthis.closeDropdown();\n\t\t\t\t}\n\t\t\t});\n\t\t\t// update the rest of combobox with any pre-selected items\n\t\t\t// setTimeout just defers the call to the next check cycle\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateSelected();\n\t\t\t});\n\n\t\t\tthis.view.blurIntent.pipe(filter(v => v === \"top\")).subscribe(() => {\n\t\t\t\tthis.elementRef.nativeElement.querySelector(\".cds--text-input\").focus();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Binds event handlers against the rendered view\n\t */\n\tngAfterViewInit() {\n\t\t// if appendInline is default valued (null) we should:\n\t\t// 1. if there are scrollable parents (not including body) don't append inline\n\t\t// this should also cover the case where the dropdown is in a modal\n\t\t// (where we _do_ want to append to the placeholder)\n\t\tif (this.appendInline === null && hasScrollableParents(this.elementRef.nativeElement)) {\n\t\t\tthis.appendInline = false;\n\t\t// 2. otherwise we should append inline\n\t\t} else if (this.appendInline === null) {\n\t\t\tthis.appendInline = true;\n\t\t}\n\t}\n\n\t/**\n\t * Removing the `Dropdown` from the body if it is appended to the body.\n\t */\n\tngOnDestroy() {\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Handles `Escape/Tab` key closing the dropdown, and arrow up/down focus to/from the dropdown list.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\thostkeys(ev: KeyboardEvent) {\n\t\tif (ev.key === \"Escape\") {\n\t\t\tthis.closeDropdown();\n\t\t} else if ((ev.key === \"ArrowDown\")\n\t\t\t&& (!this.dropdownMenu || !this.dropdownMenu.nativeElement.contains(ev.target))) {\n\t\t\tev.preventDefault();\n\t\t\tthis.openDropdown();\n\t\t\tsetTimeout(() => { this.view.initFocus(); }, 0);\n\t\t}\n\n\t\tif (\n\t\t\tthis.open && ev.key === \"Tab\" &&\n\t\t\t(this.dropdownMenu.nativeElement.contains(ev.target as Node) || ev.target === this.input.nativeElement)\n\t\t) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tif (this.open && ev.key === \"Tab\" && ev.shiftKey) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/*\n\t * no-op method for null event listeners, and other no op calls\n\t */\n\t_noop() {}\n\n\t/*\n\t * propagates the value provided from ngModel\n\t */\n\twriteValue(value: any) {\n\t\tif (this.type === \"single\") {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the specified item and update its state\n\t\t\t\tconst newValue = Object.assign({}, this.view.getListItems().find(item => item[this.itemValueKey] === value));\n\t\t\t\tnewValue.selected = true;\n\t\t\t\tthis.view.propagateSelected([newValue]);\n\t\t\t} else {\n\t\t\t\t// all items in propagateSelected must be iterable\n\t\t\t\tthis.view.propagateSelected([value || \"\"]);\n\t\t\t}\n\t\t\tthis.showClearButton = !!(value && this.view.getSelected().length);\n\t\t} else {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the items and update their state based on the received value array\n\t\t\t\t// this way we don't lose any additional metadata that may be passed in via the `items` Input\n\t\t\t\tlet newValues = [];\n\t\t\t\tfor (const v of value ?? []) {\n\t\t\t\t\tfor (const item of this.view.getListItems()) {\n\t\t\t\t\t\tif (item[this.itemValueKey] === v) {\n\t\t\t\t\t\t\tnewValues.push(Object.assign({}, item, { selected: true }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.view.propagateSelected(newValues);\n\t\t\t} else {\n\t\t\t\tthis.view.propagateSelected(value ? value : [\"\"]);\n\t\t\t}\n\t\t}\n\t\tthis.updateSelected();\n\t}\n\n\tonBlur() {\n\t\tthis.onTouchedCallback();\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChangeCallback = fn;\n\t}\n\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouchedCallback = fn;\n\t}\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the combobox.\n\t *\n\t * ex: `this.formGroup.get(\"myCoolCombobox\").disable();`\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/**\n\t * Called by `n-pill-input` when the selected pills have changed.\n\t */\n\tpublic updatePills() {\n\t\tthis.pills = this.view.getSelected() || [];\n\t\tthis.checkForReorder();\n\t}\n\n\tpublic clearSelected(event) {\n\t\tthis.items = this.items.map(item => {\n\t\t\tif (!item.disabled) {\n\t\t\t\titem.selected = false;\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t\tthis.view.items = this.items;\n\t\tthis.updatePills();\n\t\t// clearSelected can only fire on type=multi\n\t\t// so we just emit getSelected() (just in case there's any disabled but selected items)\n\t\tconst selected = this.view.getSelected();\n\n\t\t// in case there are disabled items they should be mapped according to itemValueKey\n\t\tif (this.itemValueKey && selected) {\n\t\t\tconst values = selected.map((item) => item[this.itemValueKey]);\n\t\t\tthis.propagateChangeCallback(values);\n\t\t} else {\n\t\t\tthis.propagateChangeCallback(selected);\n\t\t}\n\n\t\tthis.selected.emit(selected as any);\n\t\tthis.clear.emit(event);\n\t}\n\n\t/**\n\t * Closes the dropdown and emits the close event.\n\t */\n\tpublic closeDropdown() {\n\t\tthis.open = false;\n\t\tthis.checkForReorder();\n\t\tthis.close.emit();\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\n\t\tdocument.removeEventListener(\"click\", this.outsideClick, true);\n\n\t\tthis.cdr.markForCheck();\n\t}\n\n\t/**\n\t * Opens the dropdown.\n\t */\n\tpublic openDropdown() {\n\t\tif (this.disabled || this.readonly) { return; }\n\t\tthis.open = true;\n\t\tthis._dropUp = false;\n\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToBody();\n\t\t}\n\n\t\tdocument.addEventListener(\"click\", this.outsideClick, true);\n\n\t\t// set the dropdown menu to drop up if it is near the bottom of the screen\n\t\t// setTimeout lets us do the calculations after it is visible in the DOM\n\t\tsetTimeout(() => {\n\t\t\tif (this.dropUp === null || this.dropUp === undefined) {\n\t\t\t\tthis._dropUp = this._shouldDropUp();\n\t\t\t}\n\t\t}, 0);\n\n\t\tthis.cdr.markForCheck();\n\t}\n\n\t/**\n\t * Toggles the dropdown.\n\t */\n\tpublic toggleDropdown() {\n\t\tif (this.open) {\n\t\t\tthis.closeDropdown();\n\t\t} else {\n\t\t\tthis.openDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Sets the list group filter, and manages single select item selection.\n\t */\n\tpublic onSearch(searchString, shouldEmitSearch = true) {\n\t\tif (shouldEmitSearch) {\n\t\t\tthis.search.emit(searchString);\n\t\t}\n\t\tthis.showClearButton = !!searchString;\n\t\tthis.view.filterBy(searchString);\n\t\tif (searchString !== \"\") {\n\t\t\tif (!this.open) {\n\t\t\t\tthis.openDropdown();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectedValue = \"\";\n\t\t\tif (this.type === \"multi\" &&\n\t\t\t\t(this.selectionFeedback === \"top\" || this.selectionFeedback === \"top-after-reopen\")) {\n\t\t\t\tthis.view.reorderSelected();\n\t\t\t}\n\t\t}\n\t\tif (this.type === \"single\") {\n\t\t\t// deselect if the input doesn't match the content\n\t\t\t// of any given item\n\t\t\tconst matches = this.view.getListItems().some(item => item.content.toLowerCase().includes(searchString.toLowerCase()));\n\t\t\tif (!matches) {\n\t\t\t\tconst selected = this.view.getSelected();\n\t\t\t\tif (!selected || !selected[0]) {\n\t\t\t\t\tthis.view.filterBy(searchString);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Intended to be used to add items to the list.\n\t */\n\tpublic onSubmit(event: KeyboardEvent) {\n\t\tthis.submit.emit({\n\t\t\titems: this.view.getListItems(),\n\t\t\tindex: 0,\n\t\t\tvalue: {\n\t\t\t\tcontent: (event.target as HTMLInputElement).value,\n\t\t\t\tselected: false\n\t\t\t}\n\t\t});\n\t}\n\n\tclearInput(event) {\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\tif (this.disabled || this.readonly) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type === \"single\") { // don't want to clear selected or close if multi\n\t\t\tthis.clearSelected(event);\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tthis.selectedValue = \"\";\n\t\tthis.input.nativeElement.value = \"\";\n\n\t\tthis.showClearButton = false;\n\t\tthis.input.nativeElement.focus();\n\t\tthis.onSearch(this.input.nativeElement.value);\n\t}\n\n\tpublic isTemplate(value) {\n\t\treturn value instanceof TemplateRef;\n\t}\n\n\t/**\n\t * Handles keyboard events so users are controlling the `Dropdown` instead of unintentionally controlling outside elements.\n\t */\n\t_keyboardNav(event: KeyboardEvent) {\n\t\tif ((event.key === \"Escape\") && this.open) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close modal if inside of it\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeDropdown();\n\t\t\tthis.input.nativeElement.focus();\n\t\t} else if (this.open && event.key === \"Tab\") {\n\t\t\t// this way focus will start on the next focusable item from the dropdown\n\t\t\t// not the top of the body!\n\t\t\tthis.input.nativeElement.focus();\n\t\t\tthis.input.nativeElement.dispatchEvent(new KeyboardEvent(\"keydown\", { bubbles: true, cancelable: true, key: \"Tab\" }));\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list as an element that is appended to the DOM body.\n\t */\n\t_appendToBody() {\n\t\tthis.dropdownService.appendToBody(\n\t\t\tthis.listbox.nativeElement,\n\t\t\tthis.dropdownMenu.nativeElement,\n\t\t\t`${this.elementRef.nativeElement.className}${this.open ? \" cds--list-box--expanded\" : \"\"}`);\n\t\tthis.dropdownMenu.nativeElement.addEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list appending it to the dropdown parent object instead of the body.\n\t */\n\t_appendToDropdown() {\n\t\tthis.dropdownService.appendToDropdown(this.elementRef.nativeElement);\n\t\tthis.dropdownMenu.nativeElement.removeEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Detects whether or not the `Dropdown` list is visible within all scrollable parents.\n\t * This can be overridden by passing in a value to the `dropUp` input.\n\t */\n\t_shouldDropUp() {\n\t\t// check if dropdownMenu exists first.\n\t\tconst menu = this.dropdownMenu && this.dropdownMenu.nativeElement.querySelector(\".cds--list-box__menu\");\n\t\t// check if menu exists first.\n\t\tconst menuRect = menu && menu.getBoundingClientRect();\n\t\tif (menu && menuRect) {\n\t\t\tconst scrollableParents = getScrollableParents(menu);\n\t\t\treturn scrollableParents.reduce((shouldDropUp: boolean, parent: HTMLElement) => {\n\t\t\t\tconst parentRect = parent.getBoundingClientRect();\n\t\t\t\tconst isBelowParent = !(menuRect.bottom <= parentRect.bottom);\n\t\t\t\treturn shouldDropUp || isBelowParent;\n\t\t\t}, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handles clicks outside of the `Dropdown` list.\n\t */\n\t_outsideClick(event) {\n\t\tif (!this.elementRef.nativeElement.contains(event.target) &&\n\t\t\t// if we're appendToBody the list isn't within the _elementRef,\n\t\t\t// so we've got to check if our target is possibly in there too.\n\t\t\t!this.dropdownMenu.nativeElement.contains(event.target)) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\thandleFocus(event: FocusEvent) {\n\t\tthis._isFocused = event.type === \"focus\";\n\t}\n\n\tprotected updateSelected() {\n\t\tconst selected = this.view.getSelected();\n\t\tif (this.type === \"multi\") {\n\t\t\tthis.updatePills();\n\t\t} else if (selected) {\n\t\t\tconst value = selected[0] ? selected[0].content : \"\";\n\t\t\tconst changeCallbackValue = selected[0] ? selected[0] : \"\";\n\t\t\tthis.selectedValue = value;\n\t\t\tthis.showClearButton = !!value;\n\t\t}\n\t}\n\n\tprotected checkForReorder() {\n\t\tconst topAfterReopen = !this.open && this.selectionFeedback === \"top-after-reopen\";\n\t\tif ((this.type === \"multi\") && (topAfterReopen || this.selectionFeedback === \"top\")) {\n\t\t\tthis.view.reorderSelected(true);\n\t\t}\n\t}\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { ComboBox } from \"./combobox.component\";\nimport { DropdownModule, DropdownService } from \"carbon-components-angular/dropdown\";\nimport { I18nModule } from \"carbon-components-angular/i18n\";\nimport { UtilsModule } from \"carbon-components-angular/utils\";\nimport { IconModule } from \"carbon-components-angular/icon\";\n\n@NgModule({\n\tdeclarations: [\n\t\tComboBox\n\t],\n\texports: [\n\t\tComboBox,\n\t\tDropdownModule\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tDropdownModule,\n\t\tI18nModule,\n\t\tUtilsModule,\n\t\tIconModule\n\t],\n\tproviders: [ DropdownService ]\n})\nexport class ComboBoxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|