carbon-components-angular 5.21.0 → 5.21.1
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/datepicker/datepicker.component.d.ts +4 -39
- package/docs/documentation/components/DatePicker.html +108 -103
- package/docs/documentation/js/search/search_index.js +2 -2
- package/docs/documentation/modules/ThemeModule/dependencies.svg +13 -13
- package/docs/documentation/modules/ThemeModule.html +13 -13
- package/docs/documentation/modules/TilesModule/dependencies.svg +83 -83
- package/docs/documentation/modules/TilesModule.html +83 -83
- package/docs/documentation/modules/TimePickerModule/dependencies.svg +17 -17
- package/docs/documentation/modules/TimePickerModule.html +17 -17
- package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +45 -49
- package/docs/documentation/modules/TimePickerSelectModule.html +45 -49
- package/docs/documentation/modules/ToggleModule/dependencies.svg +41 -37
- package/docs/documentation/modules/ToggleModule.html +41 -37
- package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
- package/docs/documentation/modules/TooltipModule.html +28 -28
- package/docs/documentation/modules/TreeviewModule/dependencies.svg +26 -26
- package/docs/documentation/modules/TreeviewModule.html +26 -26
- package/docs/documentation.json +66 -66
- package/docs/storybook/iframe.html +1 -1
- package/docs/storybook/main.503cfdea.iframe.bundle.js +1 -0
- package/docs/storybook/project.json +1 -1
- package/esm2020/datepicker/datepicker.component.mjs +1 -1
- package/fesm2015/carbon-components-angular-datepicker.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-datepicker.mjs.map +1 -1
- package/package.json +1 -1
- package/docs/storybook/main.11f564c6.iframe.bundle.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"generatedAt":
|
|
1
|
+
{"generatedAt":1711662950041,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":true,"hasStorybookEslint":false,"refCount":0,"packageManager":{"type":"npm","version":"8.19.4"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/angular","options":{}},"builder":"@storybook/builder-webpack5","renderer":"@storybook/angular","storybookVersion":"7.6.7","storybookVersionSpecifier":"7.6.7","language":"typescript","storybookPackages":{"@storybook/addon-actions":{"version":"7.6.7"},"@storybook/angular":{"version":"7.6.7"},"@storybook/theming":{"version":"7.6.7"},"storybook":{"version":"7.6.7"}},"addons":{"@storybook/addon-links":{"version":"7.6.7"},"@storybook/addon-essentials":{"options":{"backgrounds":false},"version":"7.6.7"},"@storybook/addon-a11y":{"version":"7.6.7"},"@storybook/addon-storysource":{"version":"7.6.7"}}}
|
|
@@ -729,4 +729,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
729
729
|
type: HostListener,
|
|
730
730
|
args: ["focusout"]
|
|
731
731
|
}] } });
|
|
732
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUdqQixZQUFZLEVBTVosU0FBUyxFQUdULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sV0FBVyxNQUFNLG9DQUFvQyxDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRixPQUFPLEtBQUssU0FBUyxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUl2RDs7Ozs7OztHQU9HO0FBQ0gsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUU7SUFDOUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQXNCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDOUgsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7Q0FDSDtBQUVEOzs7Ozs7OztHQVFHO0FBb0VILE1BQU0sT0FBTyxVQUFVO0lBa0x0QixZQUNXLFVBQXNCLEVBQ3RCLElBQVU7UUFEVixlQUFVLEdBQVYs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QkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUdGLGdCQUFnQjtzQkFEbkIsS0FBSztnQkFpQmdDLEtBQUs7c0JBQTFDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDWCxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBRWIsV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxPQUFPO3NCQUFoQixNQUFNO2dCQXdHUCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsU0FBUztnQkFnQnZCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdFZpZXdFbmNhcHN1bGF0aW9uLFxuXHRFbGVtZW50UmVmLFxuXHRPbkRlc3Ryb3ksXG5cdEhvc3RMaXN0ZW5lcixcblx0VGVtcGxhdGVSZWYsXG5cdE9uQ2hhbmdlcyxcblx0U2ltcGxlQ2hhbmdlcyxcblx0QWZ0ZXJWaWV3Q2hlY2tlZCxcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Vmlld0NoaWxkLFxuXHRPbkluaXQsXG5cdFNpbXBsZUNoYW5nZVxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHJhbmdlUGx1Z2luIGZyb20gXCJmbGF0cGlja3IvZGlzdC9wbHVnaW5zL3JhbmdlUGx1Z2luXCI7XG5pbXBvcnQgZmxhdHBpY2tyIGZyb20gXCJmbGF0cGlja3JcIjtcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBjYXJib25GbGF0cGlja3JNb250aFNlbGVjdFBsdWdpbiB9IGZyb20gXCIuL2NhcmJvbi1mbGF0cGlja3ItbW9udGgtc2VsZWN0XCI7XG5pbXBvcnQgKiBhcyBsYW5ndWFnZXMgZnJvbSBcImZsYXRwaWNrci9kaXN0L2wxMG4vaW5kZXhcIjtcbmltcG9ydCB7IERhdGVQaWNrZXJJbnB1dCB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2RhdGVwaWNrZXItaW5wdXRcIjtcbmltcG9ydCB7IEkxOG4gfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9pMThuXCI7XG5cbi8qKlxuICogRHVlIHRvIHR5cGUgZXJyb3IsIHdlIGhhdmUgdG8gdXNlIHNxdWFyZSBicmFja2V0cyBwcm9wZXJ0eSBhY2Nlc3NvclxuICogVGhlcmUgaXMgYSB3ZWJwYWNrIGlzc3VlIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgZXhwb3J0ZWQgbGFuZ3VhZ2VzIGZyb20gZmxhdHBpY2tyIGwxMG4gQW5ndWxhciAxNCsgYXBwc1xuICogbGFuZ3VhZ2VzLmRlZmF1bHRbbG9jYWxlXSBmYWlscyBpbiBhcHAgY29uc3VtaW5nIENDQSBsaWJyYXJ5IGJ1dCBwYXNzZXMgaW4gdGVzdFxuICogbGFuZ3VhZ2VzLmRlZmF1bHQuZGVmYXVsdFtsb2NhbGVdIGZhaWxzIGluIHRlc3QgYnV0IHdvcmtzIGluIGFwcCBjb25zdW1pbmcgQ0NBIGxpYnJhcnkuXG4gKlxuICogVG8gcGxlYXNlIGJvdGggc2NlbmFyaW9zLCB3ZSBhcmUgYWRkaW5nIGEgY29uZGl0aW9uIHRvIHByZXZlbnQgdGVzdHMgZnJvbSBmYWlsaW5nXG4gKi9cbmlmIChsYW5ndWFnZXMuZGVmYXVsdD8uZGVmYXVsdFtcImVuXCJdPy53ZWVrZGF5cykge1xuXHQobGFuZ3VhZ2VzLmRlZmF1bHQuZGVmYXVsdFtcImVuXCJdLndlZWtkYXlzLnNob3J0aGFuZCBhcyBzdHJpbmdbXSkgPSBsYW5ndWFnZXMuZGVmYXVsdC5kZWZhdWx0W1wiZW5cIl0ud2Vla2RheXMubG9uZ2hhbmQubWFwKGRheSA9PiB7XG5cdFx0aWYgKGRheSA9PT0gXCJUaHVyc2RheVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJUaFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gZGF5LmNoYXJBdCgwKTtcblx0fSk7XG59XG5cbi8qKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWRhdGUtcGlja2VyLS1zaW5nbGUpXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogXCJjZHMtZGF0ZS1waWNrZXIsIGlibS1kYXRlLXBpY2tlclwiLFxuXHR0ZW1wbGF0ZTogYFxuXHQ8ZGl2IGNsYXNzPVwiY2RzLS1mb3JtLWl0ZW1cIj5cblx0XHQ8ZGl2XG5cdFx0XHRjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXJcIlxuXHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tcmFuZ2UnIDogcmFuZ2UsXG5cdFx0XHRcdCdjZHMtLWRhdGUtcGlja2VyLS1zaW5nbGUnIDogIXJhbmdlLFxuXHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tbGlnaHQnIDogdGhlbWUgPT09ICdsaWdodCcsXG5cdFx0XHRcdCdjZHMtLXNrZWxldG9uJyA6IHNrZWxldG9uXG5cdFx0XHR9XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlci1jb250YWluZXJcIj5cblx0XHRcdFx0PGNkcy1kYXRlLXBpY2tlci1pbnB1dFxuXHRcdFx0XHRcdCNpbnB1dFxuXHRcdFx0XHRcdFtsYWJlbF09XCJsYWJlbFwiXG5cdFx0XHRcdFx0W3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcblx0XHRcdFx0XHRbcGF0dGVybl09XCJpbnB1dFBhdHRlcm5cIlxuXHRcdFx0XHRcdFtpZF09XCJpZCArICctaW5wdXQnXCJcblx0XHRcdFx0XHRbc2l6ZV09XCJzaXplXCJcblx0XHRcdFx0XHRbdHlwZV09XCIocmFuZ2UgPyAncmFuZ2UnIDogJ3NpbmdsZScpXCJcblx0XHRcdFx0XHRbaGFzSWNvbl09XCIocmFuZ2UgPyBmYWxzZSA6IHRydWUpXCJcblx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFtpbnZhbGlkXT1cImludmFsaWRcIlxuXHRcdFx0XHRcdFtpbnZhbGlkVGV4dF09XCJpbnZhbGlkVGV4dFwiXG5cdFx0XHRcdFx0W3dhcm5dPVwid2FyblwiXG5cdFx0XHRcdFx0W3dhcm5UZXh0XT1cIndhcm5UZXh0XCJcblx0XHRcdFx0XHRbc2tlbGV0b25dPVwic2tlbGV0b25cIlxuXHRcdFx0XHRcdFtoZWxwZXJUZXh0XT1cImhlbHBlclRleHRcIlxuXHRcdFx0XHRcdCh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKCRldmVudClcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvcGVuQ2FsZW5kYXIoaW5wdXQpXCI+XG5cdFx0XHRcdDwvY2RzLWRhdGUtcGlja2VyLWlucHV0PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgKm5nSWY9XCJyYW5nZVwiIGNsYXNzPVwiY2RzLS1kYXRlLXBpY2tlci1jb250YWluZXJcIj5cblx0XHRcdFx0PGNkcy1kYXRlLXBpY2tlci1pbnB1dFxuXHRcdFx0XHRcdCNyYW5nZUlucHV0XG5cdFx0XHRcdFx0W2xhYmVsXT1cInJhbmdlTGFiZWxcIlxuXHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG5cdFx0XHRcdFx0W3BhdHRlcm5dPVwiaW5wdXRQYXR0ZXJuXCJcblx0XHRcdFx0XHRbaWRdPVwiaWQgKyAnLXJhbmdlSW5wdXQnXCJcblx0XHRcdFx0XHRbc2l6ZV09XCJzaXplXCJcblx0XHRcdFx0XHRbdHlwZV09XCIocmFuZ2UgPyAncmFuZ2UnIDogJ3NpbmdsZScpXCJcblx0XHRcdFx0XHRbaGFzSWNvbl09XCIocmFuZ2UgPyB0cnVlIDogbnVsbClcIlxuXHRcdFx0XHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0W2ludmFsaWRdPVwicmFuZ2VJbnZhbGlkXCJcblx0XHRcdFx0XHRbaW52YWxpZFRleHRdPVwicmFuZ2VJbnZhbGlkVGV4dFwiXG5cdFx0XHRcdFx0W3dhcm5dPVwicmFuZ2VXYXJuXCJcblx0XHRcdFx0XHRbd2FyblRleHRdPVwicmFuZ2VXYXJuVGV4dFwiXG5cdFx0XHRcdFx0W3NrZWxldG9uXT1cInNrZWxldG9uXCJcblx0XHRcdFx0XHRbaGVscGVyVGV4dF09XCJyYW5nZUhlbHBlclRleHRcIlxuXHRcdFx0XHRcdCh2YWx1ZUNoYW5nZSk9XCJvblJhbmdlVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG5cdFx0XHRcdFx0KGNsaWNrKT1cIm9wZW5DYWxlbmRhcihyYW5nZUlucHV0KVwiPlxuXHRcdFx0XHQ8L2Nkcy1kYXRlLXBpY2tlci1pbnB1dD5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0YCxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogRGF0ZVBpY2tlcixcblx0XHRcdG11bHRpOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXIgaW1wbGVtZW50c1xuXHRPbkluaXQsXG5cdE9uRGVzdHJveSxcblx0T25DaGFuZ2VzLFxuXHRBZnRlclZpZXdDaGVja2VkLFxuXHRBZnRlclZpZXdJbml0IHtcblx0cHJpdmF0ZSBzdGF0aWMgZGF0ZVBpY2tlckNvdW50ID0gMDtcblxuXHQvKipcblx0ICogU2VsZWN0IGNhbGVuZGFyIHJhbmdlIG1vZGVcblx0ICovXG5cdEBJbnB1dCgpIHJhbmdlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEZvcm1hdCBvZiBkYXRlXG5cdCAqXG5cdCAqIEZvciByZWZlcmVuY2U6IGh0dHBzOi8vZmxhdHBpY2tyLmpzLm9yZy9mb3JtYXR0aW5nL1xuXHQgKi9cblx0QElucHV0KCkgZGF0ZUZvcm1hdCA9IFwibS9kL1lcIjtcblxuXHQvKipcblx0ICogTGFuZ3VhZ2Ugb2YgdGhlIGZsYXRwaWNrciBjYWxlbmRhci5cblx0ICpcblx0ICogRm9yIHJlZmVyZW5jZSBvZiB0aGUgcG9zc2libGUgbG9jYWxlczpcblx0ICogaHR0cHM6Ly9naXRodWIuY29tL2ZsYXRwaWNrci9mbGF0cGlja3IvYmxvYi9tYXN0ZXIvc3JjL2wxMG4vaW5kZXgudHNcblx0ICovXG5cdEBJbnB1dCgpIGxhbmd1YWdlID0gXCJlblwiO1xuXG5cdEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSBoZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSByYW5nZUhlbHBlclRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG5cdEBJbnB1dCgpIHJhbmdlTGFiZWw6IHN0cmluZztcblxuXHRASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwibW0vZGQveXl5eVwiO1xuXG5cdC8qKlxuXHQgKiBBcmlhIGxhYmVsIGFkZGVkIHRvIGRhdGVwaWNrZXIncyBjYWxlbmRhciBjb250YWluZXIuXG5cdCAqL1xuXHRASW5wdXQoKSBhcmlhTGFiZWwgPSBcImNhbGVuZGFyIGNvbnRhaW5lclwiO1xuXG5cdC8qKlxuXHQgKiBUaGUgcGF0dGVybiBmb3IgdGhlIHVuZGVybHlpbmcgaW5wdXQgZWxlbWVudFxuXHQgKi9cblx0QElucHV0KCkgaW5wdXRQYXR0ZXJuID0gXCJeXFxcXGR7MSwyfS9cXFxcZHsxLDJ9L1xcXFxkezR9JFwiO1xuXG5cdEBJbnB1dCgpIGlkID0gYGRhdGVwaWNrZXItJHtEYXRlUGlja2VyLmRhdGVQaWNrZXJDb3VudCsrfWA7XG5cblx0QElucHV0KCkgc2V0IHZhbHVlKHY6IChEYXRlIHwgc3RyaW5nKVtdKSB7XG5cdFx0aWYgKCF2KSB7XG5cdFx0XHR2ID0gW107XG5cdFx0fVxuXHRcdHRoaXMuX3ZhbHVlID0gdjtcblx0fVxuXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdjUgLSBVc2UgYGNkc0xheWVyYCBkaXJlY3RpdmUgaW5zdGVhZFxuXHQgKiBTZXQgdG8gYFwibGlnaHRcImAgdG8gYXBwbHkgdGhlIGxpZ2h0IHN0eWxlXG5cdCAqL1xuXHRASW5wdXQoKSB0aGVtZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgPSBcImRhcmtcIjtcblxuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0IHRvIGB0cnVlYCB0byBkaXNwbGF5IHRoZSBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgaW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIGRhdGVwaWNrZXIgaXMgaW4gYW4gaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWRUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICAqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyBhIHdhcm5pbmcgKGNvbnRlbnRzIHNldCBieSB3YXJuaW5nVGV4dClcblx0ICAqL1xuXHRASW5wdXQoKSB3YXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHRcblx0ICovXG5cdEBJbnB1dCgpIHdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdEBJbnB1dCgpIHNpemU6IFwic21cIiB8IFwibWRcIiB8IFwibGdcIiA9IFwibWRcIjtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzcGxheSB0aGUgaW52YWxpZCBzdGF0ZSBmb3IgdGhlIHNlY29uZCBkYXRlcGlja2VyIGlucHV0LlxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VJbnZhbGlkID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBWYWx1ZSBkaXNwbGF5ZWQgaWYgdGhlIHNlY29uZCBkYXRlcGlja2VyIGlucHV0IGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSByYW5nZUludmFsaWRUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHQvKipcblx0ICAqIFNldCB0byBgdHJ1ZWAgdG8gc2hvdyBhIHdhcm5pbmcgaW4gdGhlIHNlY29uZCBkYXRlcGlja2VyIGlucHV0IChjb250ZW50cyBzZXQgYnkgcmFuZ2VXYXJuaW5nVGV4dClcblx0ICAqL1xuXHRASW5wdXQoKSByYW5nZVdhcm4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldHMgdGhlIHdhcm5pbmcgdGV4dCBmb3IgdGhlIHNlY29uZCBkYXRlcGlja2VyIGlucHV0XG5cdCAqL1xuXHRASW5wdXQoKSByYW5nZVdhcm5UZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cdEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG5cblx0QElucHV0KCkgcGx1Z2lucyA9IFtdO1xuXG5cdEBJbnB1dCgpXG5cdHNldCBmbGF0cGlja3JPcHRpb25zKG9wdGlvbnMpIHtcblx0XHR0aGlzLl9mbGF0cGlja3JPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZmxhdHBpY2tyT3B0aW9ucywgb3B0aW9ucyk7XG5cdH1cblx0Z2V0IGZsYXRwaWNrck9wdGlvbnMoKSB7XG5cdFx0Y29uc3QgcGx1Z2lucyA9IFsuLi50aGlzLnBsdWdpbnMsIGNhcmJvbkZsYXRwaWNrck1vbnRoU2VsZWN0UGx1Z2luXTtcblx0XHRpZiAodGhpcy5yYW5nZSkge1xuXHRcdFx0cGx1Z2lucy5wdXNoKHJhbmdlUGx1Z2luKHsgaW5wdXQ6IGAjJHt0aGlzLmlkfS1yYW5nZUlucHV0YCwgcG9zaXRpb246IFwibGVmdFwiIH0pKTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2ZsYXRwaWNrck9wdGlvbnMsIHRoaXMuZmxhdHBpY2tyQmFzZU9wdGlvbnMsIHtcblx0XHRcdG1vZGU6IHRoaXMucmFuZ2UgPyBcInJhbmdlXCIgOiBcInNpbmdsZVwiLFxuXHRcdFx0cGx1Z2lucyxcblx0XHRcdGRhdGVGb3JtYXQ6IHRoaXMuZGF0ZUZvcm1hdCxcblx0XHRcdGxvY2FsZTogbGFuZ3VhZ2VzLmRlZmF1bHQ/LmRlZmF1bHRbdGhpcy5sYW5ndWFnZV0gfHwgbGFuZ3VhZ2VzLmRlZmF1bHRbdGhpcy5sYW5ndWFnZV1cblx0XHR9KTtcblx0fVxuXG5cdEBWaWV3Q2hpbGQoXCJpbnB1dFwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dDogRGF0ZVBpY2tlcklucHV0O1xuXHRAVmlld0NoaWxkKFwicmFuZ2VJbnB1dFwiKSByYW5nZUlucHV0OiBEYXRlUGlja2VySW5wdXQ7XG5cblx0QE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogV2UgYXJlIG92ZXJyaWRpbmcgb25DbG9zZSBldmVudCBldmVuIGlmIHVzZXJzIHBhc3MgaXQgdmlhIGZsYXRwaWNrciBvcHRpb25zXG5cdCAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gZGF0ZSBwaWNrZXIgY2xvc2VzXG5cdCAqL1xuXHRAT3V0cHV0KCkgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0cHJvdGVjdGVkIF92YWx1ZSA9IFtdO1xuXG5cdHByb3RlY3RlZCBfZmxhdHBpY2tyT3B0aW9ucyA9IHtcblx0XHRhbGxvd0lucHV0OiB0cnVlXG5cdH07XG5cblx0cHJvdGVjdGVkIGZsYXRwaWNrckJhc2VPcHRpb25zID0ge1xuXHRcdG1vZGU6IFwic2luZ2xlXCIsXG5cdFx0ZGF0ZUZvcm1hdDogXCJtL2QvWVwiLFxuXHRcdHBsdWdpbnM6IHRoaXMucGx1Z2lucyxcblx0XHRvbk9wZW46ICgpID0+IHtcblx0XHRcdHRoaXMudXBkYXRlQ2xhc3NOYW1lcygpO1xuXHRcdFx0dGhpcy51cGRhdGVBdHRyaWJ1dGVzKCk7XG5cdFx0XHR0aGlzLnVwZGF0ZUNhbGVuZGFyTGlzdGVuZXJzKCk7XG5cdFx0fSxcblx0XHRvbkNsb3NlOiAoZGF0ZSkgPT4ge1xuXHRcdFx0Ly8gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGBmbGF0cGlja3JJbnN0YW5jZSBzZWxlY3RlZERhdGVzYCBhcmUgaW4gc3luYyB3aXRoIHRoZSB2YWx1ZXMgb2Zcblx0XHRcdC8vIHRoZSBpbnB1dHMgd2hlbiB0aGUgY2FsZW5kYXIgY2xvc2VzLlxuXHRcdFx0aWYgKHRoaXMucmFuZ2UgJiYgdGhpcy5mbGF0cGlja3JJbnN0YW5jZSkge1xuXHRcdFx0XHRpZiAodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzLmxlbmd0aCAhPT0gMikge1xuXHRcdFx0XHRcdC8vIHdlIGNvdWxkIGB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNsZWFyKClgIGJ1dCBpdCBpbnNpc3RzIG9uIG9wZW5pbmcgdGhlIHNlY29uZCBwaWNrZXJcblx0XHRcdFx0XHQvLyBpbiBzb21lIGNhc2VzLCBzbyBpbnN0ZWFkIHdlIGRvIHRoaXNcblx0XHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoW10pO1xuXHRcdFx0XHRcdHRoaXMuZG9TZWxlY3QoW10pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5pbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRjb25zdCByYW5nZUlucHV0VmFsdWUgPSB0aGlzLnJhbmdlSW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdFx0aWYgKGlucHV0VmFsdWUgfHwgcmFuZ2VJbnB1dFZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGFyc2VEYXRlID0gKGRhdGU6IHN0cmluZykgPT4gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5wYXJzZURhdGUoZGF0ZSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoW3BhcnNlRGF0ZShpbnB1dFZhbHVlKSwgcGFyc2VEYXRlKHJhbmdlSW5wdXRWYWx1ZSldKTtcblx0XHRcdFx0XHR0aGlzLmRvU2VsZWN0KHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMub25DbG9zZS5lbWl0KGRhdGUpO1xuXHRcdH0sXG5cdFx0b25EYXlDcmVhdGU6IChfZE9iaiwgX2RTdHIsIF9mcCwgZGF5RWxlbSkgPT4ge1xuXHRcdFx0ZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2RzLS1kYXRlLXBpY2tlcl9fZGF5XCIpO1xuXHRcdH0sXG5cdFx0bmV4dEFycm93OiB0aGlzLnJpZ2h0QXJyb3dIVE1MKCksXG5cdFx0cHJldkFycm93OiB0aGlzLmxlZnRBcnJvd0hUTUwoKSxcblx0XHR2YWx1ZTogdGhpcy52YWx1ZVxuXHR9O1xuXG5cdHByb3RlY3RlZCBmbGF0cGlja3JJbnN0YW5jZSA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG5cdFx0cHJvdGVjdGVkIGkxOG46IEkxOG5cblx0KSB7IH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHQvLyBpZiBpMThuIGlzIHNldCB0byBhbnl0aGluZyBvdGhlciB0aGFuIGVuIHdlJ2xsIHdhbnQgdG8gY2hhbmdlIHRoZSBsYW5ndWFnZVxuXHRcdC8vIG90aGVyd2lzZSB3ZSdsbCBqdXN0IHVzZSB0aGUgbG9jYWwgc2V0dGluZ1xuXHRcdGlmICh0aGlzLmkxOG4uZ2V0TG9jYWxlKCkgIT09IFwiZW5cIikge1xuXHRcdFx0dGhpcy5pMThuLmdldExvY2FsZU9ic2VydmFibGUoKS5zdWJzY3JpYmUobG9jYWxlID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZSA9IGxvY2FsZTtcblx0XHRcdFx0dGhpcy5yZXNldEZsYXRwaWNrckluc3RhbmNlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG5cdFx0Ly8gUmVzZXQgdGhlIGZsYXRwaWNrciBpbnN0YW5jZSBvbiBpbnB1dCBjaGFuZ2VzIHRoYXQgYWZmZWN0IGZsYXRwaWNrci5cblx0XHRjb25zdCBmbGF0cGlja3JDaGFuZ2VLZXlzID0gW1xuXHRcdFx0XCJyYW5nZVwiLFxuXHRcdFx0XCJkYXRlRm9ybWF0XCIsXG5cdFx0XHRcImxhbmd1YWdlXCIsXG5cdFx0XHRcImlkXCIsXG5cdFx0XHRcInZhbHVlXCIsXG5cdFx0XHRcInBsdWdpbnNcIixcblx0XHRcdFwiZmxhdHBpY2tyT3B0aW9uc1wiXG5cdFx0XTtcblx0XHRjb25zdCBjaGFuZ2VLZXlzID0gT2JqZWN0LmtleXMoY2hhbmdlcyk7XG5cdFx0aWYgKGNoYW5nZUtleXMuc29tZShrZXkgPT4gZmxhdHBpY2tyQ2hhbmdlS2V5cy5pbmNsdWRlcyhrZXkpKSkge1xuXHRcdFx0dGhpcy5yZXNldEZsYXRwaWNrckluc3RhbmNlKGNoYW5nZXMudmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuYWRkSW5wdXRMaXN0ZW5lcnMoKTtcblx0XHR9LCAwKTtcblx0fVxuXG5cdC8vIGJlY2F1c2UgdGhlIGFjdHVhbCB2aWV3IG1heSBiZSBkZWxheWVkIGluIGxvYWRpbmcgKHRoaW5rIHByb2plY3Rpb24gaW50byBhIHRhYiBwYW5lKVxuXHQvLyBhbmQgYmVjYXVzZSB3ZSByZWx5IG9uIGEgbGlicmFyeSB0aGF0IG9wZXJhdGVzIG91dHNpZGUgdGhlIEFuZ3VsYXIgdmlldyBvZiB0aGUgd29ybGRcblx0Ly8gd2UgbmVlZCB0byBrZWVwIHRyeWluZyB0byBsb2FkIHRoZSBsaWJyYXJ5LCB1bnRpbCB0aGUgcmVsZXZhbnQgRE9NIGlzIGFjdHVhbGx5IGxpdmVcblx0bmdBZnRlclZpZXdDaGVja2VkKCkge1xuXHRcdGlmICghdGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHQvLyBAdHMtaWdub3JlIHRzIGlzIHVuaGFwcHkgd2l0aCB0aGUgYmVsb3cgY2FsbCB0byBgZmxhdHBpY2tyYFxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZSA9IGZsYXRwaWNrcihgIyR7dGhpcy5pZH0taW5wdXRgLCB0aGlzLmZsYXRwaWNrck9wdGlvbnMpO1xuXHRcdFx0Ly8gaWYgKGFuZCBvbmx5IGlmKSB0aGUgaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLCB3ZSBjYW4gc2V0IHRoZSBkYXRlIHZhbHVlc1xuXHRcdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0XHRpZiAodGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKHRoaXMudmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImZvY3VzaW5cIilcblx0b25Gb2N1cygpIHtcblx0XHQvLyBVcGRhdGVzIHRoZSBtb250aCBtYW51YWxseSB3aGVuIGNhbGVuZGFyIG1vZGUgaXMgcmFuZ2UgYmVjYXVzZSBtb250aFxuXHRcdC8vIHdpbGwgbm90IHVwZGF0ZSBwcm9wZXJseSB3aXRob3V0IG1hbnVhbGx5IHVwZGF0aW5nIHRoZW0gb24gZm9jdXMuXG5cdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdGlmICh0aGlzLnJhbmdlSW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0pIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdLmdldE1vbnRoKCk7XG5cdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGgoY3VycmVudE1vbnRoLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0pIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLmdldE1vbnRoKCk7XG5cdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGgoY3VycmVudE1vbnRoLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImZvY3Vzb3V0XCIpXG5cdG9uRm9jdXNPdXQoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXcml0ZXMgYSB2YWx1ZSBmcm9tIHRoZSBtb2RlbCB0byB0aGUgY29tcG9uZW50LiBFeHBlY3RzIHRoZSB2YWx1ZSB0byBiZSBgbnVsbGAgb3IgYChEYXRlIHwgc3RyaW5nKVtdYFxuXHQgKiBAcGFyYW0gdmFsdWUgdmFsdWUgcmVjZWl2ZWQgZnJvbSB0aGUgbW9kZWxcblx0ICovXG5cdHdyaXRlVmFsdWUodmFsdWU6IChEYXRlIHwgc3RyaW5nKVtdKSB7XG5cdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNvbmZpZykge1xuXHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXModGhpcy52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogYENvbnRyb2xWYWx1ZUFjY2Vzc29yYCBtZXRob2QgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXNhYmxlIHRoZSBEYXRlUGlja2VyLlxuXHQgKlxuXHQgKiBleDogYHRoaXMuZm9ybUdyb3VwLmdldChcIm15RGF0ZVBpY2tlclwiKS5kaXNhYmxlKCk7YFxuXHQgKlxuXHQgKiBAcGFyYW0gaXNEaXNhYmxlZCBgdHJ1ZWAgdG8gZGlzYWJsZSB0aGUgRGF0ZVBpY2tlclxuXHQgKi9cblx0c2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHRyZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcblx0XHR0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHRvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHsgfTtcblxuXHRwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cblx0LyoqXG5cdCAqIENsZWFucyB1cCBvdXIgZmxhdHBpY2tyIGluc3RhbmNlXG5cdCAqL1xuXHRuZ09uRGVzdHJveSgpIHtcblx0XHRpZiAoIXRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkgeyByZXR1cm47IH1cblx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBgdmFsdWVDaGFuZ2VgIGV2ZW50IGZyb20gdGhlIHByaW1hcnkvc2luZ2xlIGlucHV0XG5cdCAqL1xuXHRvblZhbHVlQ2hhbmdlKGV2ZW50OiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5wYXJzZURhdGUoZXZlbnQsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRpZiAodGhpcy5yYW5nZSkge1xuXHRcdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoW2RhdGUsIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1sxXV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKFtkYXRlXSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmRvU2VsZWN0KHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGB2YWx1ZUNoYW5nZWAgZXZlbnQgZnJvbSB0aGUgcmFuZ2UgaW5wdXRcblx0ICovXG5cdG9uUmFuZ2VWYWx1ZUNoYW5nZShldmVudDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmlzT3Blbikge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UucGFyc2VEYXRlKGV2ZW50LCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKFt0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0sIGRhdGVdKTtcblx0XHRcdHRoaXMuZG9TZWxlY3QodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBvcGVuaW5nIHRoZSBjYWxlbmRhciBcInByb3Blcmx5XCIgd2hlbiB0aGUgY2FsZW5kYXIgaWNvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b3BlbkNhbGVuZGFyKGRhdGVwaWNrZXJJbnB1dDogRGF0ZVBpY2tlcklucHV0KSB7XG5cdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdGRhdGVwaWNrZXJJbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG5cblx0XHRcdC8vIElmIHRoZSBmaXJzdCBpbnB1dCdzIGNhbGVuZGFyIGljb24gaXMgY2xpY2tlZCB3aGVuIGNhbGVuZGFyIGlzIGluIHJhbmdlIG1vZGUsIHRoZW5cblx0XHRcdC8vIHRoZSBtb250aCBhbmQgeWVhciBuZWVkcyB0byBiZSBtYW51YWxseSBjaGFuZ2VkIHRvIHRoZSBjdXJyZW50IHNlbGVjdGVkIG1vbnRoIGFuZFxuXHRcdFx0Ly8geWVhciBvdGhlcndpc2UgdGhlIGNhbGVuZGFyIHZpZXcgd2lsbCBub3QgYmUgdXBkYXRlZCB1cG9uIG9wZW5pbmcuXG5cdFx0XHRpZiAoZGF0ZXBpY2tlcklucHV0ID09PSB0aGlzLmlucHV0ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0uZ2V0TW9udGgoKTtcblxuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmN1cnJlbnRZZWFyID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLmdldEZ1bGxZZWFyKCk7XG5cdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGgoY3VycmVudE1vbnRoLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFNpbmdsZS1tb2RlIGZsYXRwaWNrciBoYW5kbGVzIG1vdXNlZG93biBidXQgbm90IGNsaWNrLCBzbyBuYXRpdmVFbGVtZW50LmNsaWNrKCkgd29uJ3Rcblx0XHRcdC8vIHdvcmsgd2hlbiB0aGUgY2FsZW5kYXIgaWNvbiBpcyBjbGlja2VkLiBJbiB0aGlzIGNhc2Ugd2Ugc2ltcGx5IHVzZSBmbGF0cGlja3Iub3BlbigpLlxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5vcGVuKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZUNhbGVuZGFyTGlzdGVuZXJzKCkge1xuXHRcdGNvbnN0IGNhbGVuZGFyQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItY2FsZW5kYXJcIik7XG5cdFx0QXJyYXkuZnJvbShjYWxlbmRhckNvbnRhaW5lcikuZm9yRWFjaChjYWxlbmRhciA9PiB7XG5cdFx0XHRjYWxlbmRhci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5wcmV2ZW50Q2FsZW5kYXJDbG9zZSk7XG5cdFx0XHRjYWxlbmRhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5wcmV2ZW50Q2FsZW5kYXJDbG9zZSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZXZlbnQgbGlzdGVuZXJzIGZvciB0aGUgZGF0ZXBpY2tlciBpbnB1dCBhbmQgcmFuZ2UgaW5wdXQgZmllbGRzLlxuXHQgKi9cblx0cHJvdGVjdGVkIGFkZElucHV0TGlzdGVuZXJzKCkge1xuXHRcdGlmICghdGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3dzIGZvY3VzIHRyYW5zaXRpb24gZnJvbSB0aGUgZGF0ZXBpY2tlciBpbnB1dCBvciByYW5nZSBpbnB1dCBmaWVsZCB0b1xuXHRcdC8vIGZsYXRwaWNrciBjYWxlbmRhciB1c2luZyBhIGtleWJvYXJkLlxuXHRcdGNvbnN0IGFkZEZvY3VzQ2FsZW5kYXJMaXN0ZW5lciA9IChlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50KSA9PiB7XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdFx0XHRpZiAoIXRoaXMuZmxhdHBpY2tySW5zdGFuY2UuaXNPcGVuKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLm9wZW4oKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCBjYWxlbmRhckNvbnRhaW5lciA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2FsZW5kYXJDb250YWluZXI7XG5cdFx0XHRcdFx0Y29uc3QgZGF5RWxlbWVudCA9IGNhbGVuZGFyQ29udGFpbmVyICYmIGNhbGVuZGFyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZmxhdHBpY2tyLWRheVt0YWJpbmRleF1cIik7XG5cblx0XHRcdFx0XHRpZiAoZGF5RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0ZGF5RWxlbWVudC5mb2N1cygpO1xuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgdXNlciBtYW51YWxseSBpbnB1dHMgYSB2YWx1ZSBpbnRvIHRoZSBkYXRlIGZpZWxkIGFuZCBwcmVzc2VzIGFycm93IGRvd24sXG5cdFx0XHRcdFx0XHQvLyBkYXRlcGlja2VyIGlucHV0IG9uY2hhbmdlIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gZm9jdXMgaXMgcmVtb3ZlZCBmcm9tIGl0IGFuZFxuXHRcdFx0XHRcdFx0Ly8gYGZsYXRwaWNrckluc3RhbmNlLnNldERhdGVgIGFuZCBgZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGhgIHdpbGwgYmUgaW52b2tlZFxuXHRcdFx0XHRcdFx0Ly8gd2hpY2ggd2lsbCBhdXRvbWF0aWNhbGx5IGNoYW5nZSBmb2N1cyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudC5cblx0XHRcdFx0XHRcdGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBkYXlFbGVtZW50ICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0uZm9jdXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5pbnB1dCAmJiB0aGlzLmlucHV0LmlucHV0KSB7XG5cdFx0XHRhZGRGb2N1c0NhbGVuZGFyTGlzdGVuZXIodGhpcy5pbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yYW5nZUlucHV0ICYmIHRoaXMucmFuZ2VJbnB1dC5pbnB1dCkge1xuXHRcdFx0YWRkRm9jdXNDYWxlbmRhckxpc3RlbmVyKHRoaXMucmFuZ2VJbnB1dC5pbnB1dC5uYXRpdmVFbGVtZW50KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXRzIHRoZSBmbGF0cGlja3IgaW5zdGFuY2Ugd2hpbGUga2VlcGluZyB0aGUgZGF0ZSB2YWx1ZXMgKG9yIHVwZGF0aW5nIHRoZW0gaWYgbmV3RGF0ZXMgaXMgcHJvdmlkZWQpXG5cdCAqXG5cdCAqIFVzZWQgdG8gcGljayB1cCBpbnB1dCBjaGFuZ2VzIG9yIGxvY2FsZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gbmV3RGF0ZXMgQW4gb3B0aW9uYWwgU2ltcGxlQ2hhbmdlIG9mIGRhdGUgdmFsdWVzXG5cdCAqL1xuXHRwcm90ZWN0ZWQgcmVzZXRGbGF0cGlja3JJbnN0YW5jZShuZXdEYXRlcz86IFNpbXBsZUNoYW5nZSkge1xuXHRcdGlmICh0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkpIHtcblx0XHRcdGxldCBkYXRlcyA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlcztcblx0XHRcdGlmIChuZXdEYXRlcyAmJiB0aGlzLmRpZERhdGVWYWx1ZUNoYW5nZShuZXdEYXRlcy5jdXJyZW50VmFsdWUsIG5ld0RhdGVzLnByZXZpb3VzVmFsdWUpKSB7XG5cdFx0XHRcdGRhdGVzID0gbmV3RGF0ZXMuY3VycmVudFZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0Ly8gb25seSByZXNldCB0aGUgZmxhdHBpY2tyIGluc3RhbmNlIG9uIElucHV0IGNoYW5nZXNcblx0XHRcdC8vIEB0cy1pZ25vcmUgdHMgaXMgdW5oYXBweSB3aXRoIHRoZSBiZWxvdyBjYWxsIHRvIGBmbGF0cGlja3JgXG5cdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlID0gZmxhdHBpY2tyKGAjJHt0aGlzLmlkfS1pbnB1dGAsIHRoaXMuZmxhdHBpY2tyT3B0aW9ucyk7XG5cdFx0XHR0aGlzLnNldERhdGVWYWx1ZXMoZGF0ZXMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYXJib24gdXNlcyBhIG51bWJlciBvZiBzcGVjaWZpYyBjbGFzc25hbWVzIGZvciBwYXJ0cyBvZiB0aGUgZmxhdHBpY2tyIC0gdGhpcyBpZGVtcG90ZW50IG1ldGhvZCBhcHBsaWVzIHRoZW0gaWYgbmVlZGVkLlxuXHQgKi9cblx0cHJvdGVjdGVkIHVwZGF0ZUNsYXNzTmFtZXMoKSB7XG5cdFx0aWYgKCF0aGlzLmVsZW1lbnRSZWYpIHsgcmV0dXJuOyB9XG5cdFx0Ly8gZ2V0IGFsbCB0aGUgcG9zc2libGUgZmxhdHBpY2tycyBpbiB0aGUgZG9jdW1lbnQgLSB3ZSBuZWVkIHRvIGFkZCBjbGFzc2VzIHRvIChwb3RlbnRpYWxseSkgYWxsIG9mIHRoZW1cblx0XHRjb25zdCBjYWxlbmRhckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuXHRcdGNvbnN0IG1vbnRoQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItbW9udGhcIik7XG5cdFx0Y29uc3Qgd2Vla2RheXNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci13ZWVrZGF5c1wiKTtcblx0XHRjb25zdCB3ZWVrZGF5Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3Itd2Vla2RheVwiKTtcblx0XHRjb25zdCBkYXlzQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItZGF5c1wiKTtcblx0XHRjb25zdCBkYXlDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci1kYXlcIik7XG5cblx0XHQvLyBhZGQgY2xhc3NlcyB0byBsaXN0cyBvZiBlbGVtZW50c1xuXHRcdGNvbnN0IGFkZENsYXNzSWZOb3RFeGlzdHMgPSAoY2xhc3NuYW1lOiBzdHJpbmcsIGVsZW1lbnRMaXN0OiBOb2RlTGlzdE9mPEVsZW1lbnQ+KSA9PiB7XG5cdFx0XHRBcnJheS5mcm9tKGVsZW1lbnRMaXN0KS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuXHRcdFx0XHRpZiAoIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzbmFtZSkpIHtcblx0XHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NuYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRcdC8vIGFkZCBjbGFzc2VzIChidXQgb25seSBpZiB0aGV5IGRvbid0IGV4aXN0LCBzbWFsbCBwZXJmIHdpbilcblx0XHRhZGRDbGFzc0lmTm90RXhpc3RzKFwiY2RzLS1kYXRlLXBpY2tlcl9fY2FsZW5kYXJcIiwgY2FsZW5kYXJDb250YWluZXIpO1xuXHRcdGFkZENsYXNzSWZOb3RFeGlzdHMoXCJjZHMtLWRhdGUtcGlja2VyX19tb250aFwiLCBtb250aENvbnRhaW5lcik7XG5cdFx0YWRkQ2xhc3NJZk5vdEV4aXN0cyhcImNkcy0tZGF0ZS1waWNrZXJfX3dlZWtkYXlzXCIsIHdlZWtkYXlzQ29udGFpbmVyKTtcblx0XHRhZGRDbGFzc0lmTm90RXhpc3RzKFwiY2RzLS1kYXRlLXBpY2tlcl9fZGF5c1wiLCBkYXlzQ29udGFpbmVyKTtcblxuXHRcdC8vIGFkZCB3ZWVrZGF5IGNsYXNzZXMgYW5kIGZvcm1hdCB0aGUgdGV4dFxuXHRcdEFycmF5LmZyb20od2Vla2RheUNvbnRhaW5lcikuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdGVsZW1lbnQuaW5uZXJIVE1MID0gZWxlbWVudC5pbm5lckhUTUwucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcblx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNkcy0tZGF0ZS1waWNrZXJfX3dlZWtkYXlcIik7XG5cdFx0fSk7XG5cblx0XHQvLyBhZGQgZGF5IGNsYXNzZXMgYW5kIHNwZWNpYWwgY2FzZSB0aGUgXCJ0b2RheVwiIGVsZW1lbnQgYmFzZWQgb24gYHRoaXMudmFsdWVgXG5cdFx0QXJyYXkuZnJvbShkYXlDb250YWluZXIpLmZvckVhY2goZWxlbWVudCA9PiB7XG5cdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjZHMtLWRhdGUtcGlja2VyX19kYXlcIik7XG5cdFx0XHRpZiAoIXRoaXMudmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwidG9kYXlcIikgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcIm5vLWJvcmRlclwiKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJ0b2RheVwiKSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJuby1ib3JkZXJcIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgdXBkYXRlQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBjYWxlbmRhckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuXHRcdEFycmF5LmZyb20oY2FsZW5kYXJDb250YWluZXIpLmZvckVhY2goY2FsZW5kYXIgPT4ge1xuXHRcdFx0Y2FsZW5kYXIuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcInJlZ2lvblwiKTtcblx0XHRcdGNhbGVuZGFyLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdGhpcy5hcmlhTGFiZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGxpZXMgdGhlIGdpdmVuIGRhdGUgdmFsdWUgYXJyYXkgdG8gYm90aCB0aGUgZmxhdHBpY2tyIGluc3RhbmNlIGFuZCB0aGUgYGlucHV0YChzKVxuXHQgKiBAcGFyYW0gZGF0ZXMgdGhlIGRhdGUgdmFsdWVzIHRvIGFwcGx5XG5cdCAqL1xuXHRwcm90ZWN0ZWQgc2V0RGF0ZVZhbHVlcyhkYXRlczogKERhdGUgfCBzdHJpbmcpW10pIHtcblx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRjb25zdCBzaW5nbGVJbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3RoaXMuaWR9LWlucHV0YCk7XG5cdFx0XHRjb25zdCByYW5nZUlucHV0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy5pZH0tcmFuZ2VJbnB1dGApO1xuXG5cdFx0XHQvLyBgZmxhdHBpY2tySW5zdGFuY2Uuc2V0RGF0ZWAgcmVtb3ZlcyB0aGUgZm9jdXMgb24gdGhlIHNlbGVjdGVkIGRhdGUgZWxlbWVudCBhbmQgd2lsbFxuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBjaGFuZ2UgZm9jdXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuIElmIGEgc2VsZWN0ZWQgZGF0ZSBpc1xuXHRcdFx0Ly8gZm9jdXNlZCBiZWZvcmUgYGZsYXRwaWNrckluc3RhbmNlLnNldERhdGVgIGlzIGludm9rZWQgdGhlbiBpdCBzaG91bGQgcmVtYWluIGZvY3VzZWQuXG5cdFx0XHRsZXQgc2hvdWxkUmVmb2N1c0RhdGVFbGVtZW50ID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVFbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG5cdFx0XHQvLyBzZXQgdGhlIGRhdGUgb24gdGhlIGluc3RhbmNlXG5cdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNldERhdGUoZGF0ZXMpO1xuXG5cdFx0XHRpZiAoc2hvdWxkUmVmb2N1c0RhdGVFbGVtZW50KSB7XG5cdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbS5mb2N1cygpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB3ZSBjYW4gZWl0aGVyIHNldCBhIGRhdGUgdmFsdWUgb3IgYW4gZW1wdHkgc3RyaW5nLCBzbyB3ZSBzdGFydCB3aXRoIGFuIGVtcHR5IHN0cmluZ1xuXHRcdFx0bGV0IHNpbmdsZURhdGUgPSBcIlwiO1xuXHRcdFx0Ly8gaWYgZGF0ZSBpcyBhIHN0cmluZywgcGFyc2UgYW5kIGZvcm1hdFxuXHRcdFx0aWYgKHR5cGVvZiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0c2luZ2xlRGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UucGFyc2VEYXRlKHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0c2luZ2xlRGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuZm9ybWF0RGF0ZShzaW5nbGVEYXRlLCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0Ly8gaWYgZGF0ZSBpcyBub3QgYSBzdHJpbmcgd2UgY2FuIGFzc3VtZSBpdCdzIGEgRGF0ZSBhbmQgd2Ugc2hvdWxkIGZvcm1hdFxuXHRcdFx0fSBlbHNlIGlmICghIXRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0XHRzaW5nbGVEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5mb3JtYXREYXRlKHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJhbmdlSW5wdXQpIHtcblx0XHRcdFx0Ly8gd2UgY2FuIGVpdGhlciBzZXQgYSBkYXRlIHZhbHVlIG9yIGFuIGVtcHR5IHN0cmluZywgc28gd2Ugc3RhcnQgd2l0aCBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdFx0bGV0IHJhbmdlRGF0ZSA9IFwiXCI7XG5cdFx0XHRcdC8vIGlmIGRhdGUgaXMgYSBzdHJpbmcsIHBhcnNlIGFuZCBmb3JtYXRcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0gPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRyYW5nZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnBhcnNlRGF0ZSh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0udG9TdHJpbmcoKSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0XHRyYW5nZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmZvcm1hdERhdGUocmFuZ2VEYXRlLCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0XHQvLyBpZiBkYXRlIGlzIG5vdCBhIHN0cmluZyB3ZSBjYW4gYXNzdW1lIGl0J3MgYSBEYXRlIGFuZCB3ZSBzaG91bGQgZm9ybWF0XG5cdFx0XHRcdH0gZWxzZSBpZiAoISF0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV0pIHtcblx0XHRcdFx0XHRyYW5nZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmZvcm1hdERhdGUodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdLCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdC8vIGFwcGx5IHRoZSB2YWx1ZXNcblx0XHRcdFx0XHRyYW5nZUlucHV0LnZhbHVlID0gcmFuZ2VEYXRlO1xuXHRcdFx0XHRcdHNpbmdsZUlucHV0LnZhbHVlID0gc2luZ2xlRGF0ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJvdGVjdGVkIHByZXZlbnRDYWxlbmRhckNsb3NlID0gZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0cHJvdGVjdGVkIGRvU2VsZWN0KHNlbGVjdGVkVmFsdWU6IChEYXRlIHwgc3RyaW5nKVtdKSB7XG5cdFx0Ly8gSW4gcmFuZ2UgbW9kZSwgaWYgYSBkYXRlIGlzIHNlbGVjdGVkIGZyb20gdGhlIGZpcnN0IGNhbGVuZGFyIHRoYXQgaXMgZnJvbSB0aGUgcHJldmlvdXMgbW9udGgsXG5cdFx0Ly8gdGhlIG1vbnRoIHdpbGwgbm90IGJlIHVwZGF0ZWQgb24gdGhlIGNhbGVuZGFyIHVudGlsIHRoZSBjYWxlbmRhciBpcyByZS1vcGVuZWQuXG5cdFx0Ly8gVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGUgY2FsZW5kYXIgaXMgdXBkYXRlZCB3aXRoIHRoZSBjb3JyZWN0IG1vbnRoLlxuXHRcdGlmICh0aGlzLnJhbmdlICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXSkge1xuXHRcdFx0Y29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLmdldE1vbnRoKCk7XG5cblx0XHRcdC8vIGBmbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aGAgcmVtb3ZlcyB0aGUgZm9jdXMgb24gdGhlIHNlbGVjdGVkIGRhdGUgZWxlbWVudCBhbmQgd2lsbFxuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBjaGFuZ2UgZm9jdXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuIElmIGEgc2VsZWN0ZWQgZGF0ZSBpc1xuXHRcdFx0Ly8gZm9jdXNlZCBiZWZvcmUgYGZsYXRwaWNrckluc3RhbmNlLmNoYW5nZU1vbnRoYCBpcyBpbnZva2VkIHRoZW4gaXQgc2hvdWxkIHJlbWFpbiBmb2N1c2VkLlxuXHRcdFx0bGV0IHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aChjdXJyZW50TW9udGgsIGZhbHNlKTtcblxuXHRcdFx0aWYgKHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0uZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdH1cblx0XHR0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoc2VsZWN0ZWRWYWx1ZSk7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2Uoc2VsZWN0ZWRWYWx1ZSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZGlkRGF0ZVZhbHVlQ2hhbmdlKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkge1xuXHRcdHJldHVybiBjdXJyZW50VmFsdWVbMF0gIT09IHByZXZpb3VzVmFsdWVbMF0gfHwgY3VycmVudFZhbHVlWzFdICE9PSBwcmV2aW91c1ZhbHVlWzFdO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1vcmUgYWR2YW5jZWQgY2hlY2tpbmcgb2YgdGhlIGxvYWRlZCBzdGF0ZSBvZiBmbGF0cGlja3Jcblx0ICovXG5cdHByb3RlY3RlZCBpc0ZsYXRwaWNrckxvYWRlZCgpIHtcblx0XHQvLyBjYXN0IHRoZSBpbnN0YW5jZSB0byBhIGJvb2xlYW4sIGFuZCBzb21lIG1ldGhvZCB0aGF0IGhhcyB0byBleGlzdCBmb3IgdGhlIGxpYnJhcnkgdG8gYmUgbG9hZGVkIGluIHRoaXMgY2FzZSBgc2V0RGF0ZWBcblx0XHRyZXR1cm4gISF0aGlzLmZsYXRwaWNrckluc3RhbmNlICYmICEhdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJpZ2h0IGFycm93IEhUTUwgcGFzc2VkIHRvIGZsYXRwaWNrclxuXHQgKi9cblx0cHJvdGVjdGVkIHJpZ2h0QXJyb3dIVE1MKCkge1xuXHRcdHJldHVybiBgXG5cdFx0XHQ8c3ZnIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG5cdFx0XHRcdDxwb2x5Z29uIHBvaW50cz1cIjExLDggNiwxMyA1LjMsMTIuMyA5LjYsOCA1LjMsMy43IDYsMyBcIi8+XG5cdFx0XHRcdDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHN0eWxlPVwiZmlsbDpub25lXCIgLz5cblx0XHRcdDwvc3ZnPmA7XG5cdH1cblxuXHQvKipcblx0ICogTGVmdCBhcnJvdyBIVE1MIHBhc3NlZCB0byBmbGF0cGlja3Jcblx0ICovXG5cdHByb3RlY3RlZCBsZWZ0QXJyb3dIVE1MKCkge1xuXHRcdHJldHVybiBgXG5cdFx0XHQ8c3ZnIHdpZHRoPVwiMTZweFwiIGhlaWdodD1cIjE2cHhcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG5cdFx0XHRcdDxwb2x5Z29uIHBvaW50cz1cIjUsOCAxMCwzIDEwLjcsMy43IDYuNCw4IDEwLjcsMTIuMyAxMCwxMyBcIi8+XG5cdFx0XHRcdDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHN0eWxlPVwiZmlsbDpub25lXCIgLz5cblx0XHRcdDwvc3ZnPmA7XG5cdH1cbn1cbiJdfQ==
|
|
732
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixFQUdqQixZQUFZLEVBTVosU0FBUyxFQUdULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sV0FBVyxNQUFNLG9DQUFvQyxDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRixPQUFPLEtBQUssU0FBUyxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUt2RDs7Ozs7OztHQU9HO0FBQ0gsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUU7SUFDOUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQXNCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDOUgsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFDRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7Q0FDSDtBQUVEOzs7Ozs7OztHQVFHO0FBb0VILE1BQU0sT0FBTyxVQUFVO0lBa0x0QixZQUNXLFVBQXNCLEVBQ3RCLElBQVU7UUFEVixlQUFVLEdBQVYs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O2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxXQUFXO3NCQUFuQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLElBQUk7c0JBQVosS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQWlCZ0MsS0FBSztzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNYLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFFYixXQUFXO3NCQUFwQixNQUFNO2dCQU1HLE9BQU87c0JBQWhCLE1BQU07Z0JBd0dQLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxTQUFTO2dCQWdCdkIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdElucHV0LFxuXHRPdXRwdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0Vmlld0VuY2Fwc3VsYXRpb24sXG5cdEVsZW1lbnRSZWYsXG5cdE9uRGVzdHJveSxcblx0SG9zdExpc3RlbmVyLFxuXHRUZW1wbGF0ZVJlZixcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRBZnRlclZpZXdDaGVja2VkLFxuXHRBZnRlclZpZXdJbml0LFxuXHRWaWV3Q2hpbGQsXG5cdE9uSW5pdCxcblx0U2ltcGxlQ2hhbmdlXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgcmFuZ2VQbHVnaW4gZnJvbSBcImZsYXRwaWNrci9kaXN0L3BsdWdpbnMvcmFuZ2VQbHVnaW5cIjtcbmltcG9ydCBmbGF0cGlja3IgZnJvbSBcImZsYXRwaWNrclwiO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IGNhcmJvbkZsYXRwaWNrck1vbnRoU2VsZWN0UGx1Z2luIH0gZnJvbSBcIi4vY2FyYm9uLWZsYXRwaWNrci1tb250aC1zZWxlY3RcIjtcbmltcG9ydCAqIGFzIGxhbmd1YWdlcyBmcm9tIFwiZmxhdHBpY2tyL2Rpc3QvbDEwbi9pbmRleFwiO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gXCJmbGF0cGlja3IvZGlzdC90eXBlcy9vcHRpb25zXCI7XG5pbXBvcnQgeyBEYXRlUGlja2VySW5wdXQgfSBmcm9tIFwiY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhci9kYXRlcGlja2VyLWlucHV0XCI7XG5pbXBvcnQgeyBJMThuIH0gZnJvbSBcImNhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXIvaTE4blwiO1xuXG4vKipcbiAqIER1ZSB0byB0eXBlIGVycm9yLCB3ZSBoYXZlIHRvIHVzZSBzcXVhcmUgYnJhY2tldHMgcHJvcGVydHkgYWNjZXNzb3JcbiAqIFRoZXJlIGlzIGEgd2VicGFjayBpc3N1ZSB3aGVuIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGV4cG9ydGVkIGxhbmd1YWdlcyBmcm9tIGZsYXRwaWNrciBsMTBuIEFuZ3VsYXIgMTQrIGFwcHNcbiAqIGxhbmd1YWdlcy5kZWZhdWx0W2xvY2FsZV0gZmFpbHMgaW4gYXBwIGNvbnN1bWluZyBDQ0EgbGlicmFyeSBidXQgcGFzc2VzIGluIHRlc3RcbiAqIGxhbmd1YWdlcy5kZWZhdWx0LmRlZmF1bHRbbG9jYWxlXSBmYWlscyBpbiB0ZXN0IGJ1dCB3b3JrcyBpbiBhcHAgY29uc3VtaW5nIENDQSBsaWJyYXJ5LlxuICpcbiAqIFRvIHBsZWFzZSBib3RoIHNjZW5hcmlvcywgd2UgYXJlIGFkZGluZyBhIGNvbmRpdGlvbiB0byBwcmV2ZW50IHRlc3RzIGZyb20gZmFpbGluZ1xuICovXG5pZiAobGFuZ3VhZ2VzLmRlZmF1bHQ/LmRlZmF1bHRbXCJlblwiXT8ud2Vla2RheXMpIHtcblx0KGxhbmd1YWdlcy5kZWZhdWx0LmRlZmF1bHRbXCJlblwiXS53ZWVrZGF5cy5zaG9ydGhhbmQgYXMgc3RyaW5nW10pID0gbGFuZ3VhZ2VzLmRlZmF1bHQuZGVmYXVsdFtcImVuXCJdLndlZWtkYXlzLmxvbmdoYW5kLm1hcChkYXkgPT4ge1xuXHRcdGlmIChkYXkgPT09IFwiVGh1cnNkYXlcIikge1xuXHRcdFx0cmV0dXJuIFwiVGhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGRheS5jaGFyQXQoMCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRGF0ZVBpY2tlck1vZHVsZSB9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuICogYGBgXG4gKlxuICogW1NlZSBkZW1vXSguLi8uLi8/cGF0aD0vc3RvcnkvY29tcG9uZW50cy1kYXRlLXBpY2tlci0tc2luZ2xlKVxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLWRhdGUtcGlja2VyLCBpYm0tZGF0ZS1waWNrZXJcIixcblx0dGVtcGxhdGU6IGBcblx0PGRpdiBjbGFzcz1cImNkcy0tZm9ybS1pdGVtXCI+XG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3M9XCJjZHMtLWRhdGUtcGlja2VyXCJcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLXJhbmdlJyA6IHJhbmdlLFxuXHRcdFx0XHQnY2RzLS1kYXRlLXBpY2tlci0tc2luZ2xlJyA6ICFyYW5nZSxcblx0XHRcdFx0J2Nkcy0tZGF0ZS1waWNrZXItLWxpZ2h0JyA6IHRoZW1lID09PSAnbGlnaHQnLFxuXHRcdFx0XHQnY2RzLS1za2VsZXRvbicgOiBza2VsZXRvblxuXHRcdFx0fVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdDxjZHMtZGF0ZS1waWNrZXItaW5wdXRcblx0XHRcdFx0XHQjaW5wdXRcblx0XHRcdFx0XHRbbGFiZWxdPVwibGFiZWxcIlxuXHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG5cdFx0XHRcdFx0W3BhdHRlcm5dPVwiaW5wdXRQYXR0ZXJuXCJcblx0XHRcdFx0XHRbaWRdPVwiaWQgKyAnLWlucHV0J1wiXG5cdFx0XHRcdFx0W3NpemVdPVwic2l6ZVwiXG5cdFx0XHRcdFx0W3R5cGVdPVwiKHJhbmdlID8gJ3JhbmdlJyA6ICdzaW5nbGUnKVwiXG5cdFx0XHRcdFx0W2hhc0ljb25dPVwiKHJhbmdlID8gZmFsc2UgOiB0cnVlKVwiXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cImRpc2FibGVkXCJcblx0XHRcdFx0XHRbaW52YWxpZF09XCJpbnZhbGlkXCJcblx0XHRcdFx0XHRbaW52YWxpZFRleHRdPVwiaW52YWxpZFRleHRcIlxuXHRcdFx0XHRcdFt3YXJuXT1cIndhcm5cIlxuXHRcdFx0XHRcdFt3YXJuVGV4dF09XCJ3YXJuVGV4dFwiXG5cdFx0XHRcdFx0W3NrZWxldG9uXT1cInNrZWxldG9uXCJcblx0XHRcdFx0XHRbaGVscGVyVGV4dF09XCJoZWxwZXJUZXh0XCJcblx0XHRcdFx0XHQodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcblx0XHRcdFx0XHQoY2xpY2spPVwib3BlbkNhbGVuZGFyKGlucHV0KVwiPlxuXHRcdFx0XHQ8L2Nkcy1kYXRlLXBpY2tlci1pbnB1dD5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2ICpuZ0lmPVwicmFuZ2VcIiBjbGFzcz1cImNkcy0tZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG5cdFx0XHRcdDxjZHMtZGF0ZS1waWNrZXItaW5wdXRcblx0XHRcdFx0XHQjcmFuZ2VJbnB1dFxuXHRcdFx0XHRcdFtsYWJlbF09XCJyYW5nZUxhYmVsXCJcblx0XHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuXHRcdFx0XHRcdFtwYXR0ZXJuXT1cImlucHV0UGF0dGVyblwiXG5cdFx0XHRcdFx0W2lkXT1cImlkICsgJy1yYW5nZUlucHV0J1wiXG5cdFx0XHRcdFx0W3NpemVdPVwic2l6ZVwiXG5cdFx0XHRcdFx0W3R5cGVdPVwiKHJhbmdlID8gJ3JhbmdlJyA6ICdzaW5nbGUnKVwiXG5cdFx0XHRcdFx0W2hhc0ljb25dPVwiKHJhbmdlID8gdHJ1ZSA6IG51bGwpXCJcblx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuXHRcdFx0XHRcdFtpbnZhbGlkXT1cInJhbmdlSW52YWxpZFwiXG5cdFx0XHRcdFx0W2ludmFsaWRUZXh0XT1cInJhbmdlSW52YWxpZFRleHRcIlxuXHRcdFx0XHRcdFt3YXJuXT1cInJhbmdlV2FyblwiXG5cdFx0XHRcdFx0W3dhcm5UZXh0XT1cInJhbmdlV2FyblRleHRcIlxuXHRcdFx0XHRcdFtza2VsZXRvbl09XCJza2VsZXRvblwiXG5cdFx0XHRcdFx0W2hlbHBlclRleHRdPVwicmFuZ2VIZWxwZXJUZXh0XCJcblx0XHRcdFx0XHQodmFsdWVDaGFuZ2UpPVwib25SYW5nZVZhbHVlQ2hhbmdlKCRldmVudClcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvcGVuQ2FsZW5kYXIocmFuZ2VJbnB1dClcIj5cblx0XHRcdFx0PC9jZHMtZGF0ZS1waWNrZXItaW5wdXQ+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0PC9kaXY+XG5cdGAsXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IERhdGVQaWNrZXIsXG5cdFx0XHRtdWx0aTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlUGlja2VyIGltcGxlbWVudHNcblx0T25Jbml0LFxuXHRPbkRlc3Ryb3ksXG5cdE9uQ2hhbmdlcyxcblx0QWZ0ZXJWaWV3Q2hlY2tlZCxcblx0QWZ0ZXJWaWV3SW5pdCB7XG5cdHByaXZhdGUgc3RhdGljIGRhdGVQaWNrZXJDb3VudCA9IDA7XG5cblx0LyoqXG5cdCAqIFNlbGVjdCBjYWxlbmRhciByYW5nZSBtb2RlXG5cdCAqL1xuXHRASW5wdXQoKSByYW5nZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBGb3JtYXQgb2YgZGF0ZVxuXHQgKlxuXHQgKiBGb3IgcmVmZXJlbmNlOiBodHRwczovL2ZsYXRwaWNrci5qcy5vcmcvZm9ybWF0dGluZy9cblx0ICovXG5cdEBJbnB1dCgpIGRhdGVGb3JtYXQgPSBcIm0vZC9ZXCI7XG5cblx0LyoqXG5cdCAqIExhbmd1YWdlIG9mIHRoZSBmbGF0cGlja3IgY2FsZW5kYXIuXG5cdCAqXG5cdCAqIEZvciByZWZlcmVuY2Ugb2YgdGhlIHBvc3NpYmxlIGxvY2FsZXM6XG5cdCAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mbGF0cGlja3IvZmxhdHBpY2tyL2Jsb2IvbWFzdGVyL3NyYy9sMTBuL2luZGV4LnRzXG5cdCAqL1xuXHRASW5wdXQoKSBsYW5ndWFnZSA9IFwiZW5cIjtcblxuXHRASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0QElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0QElucHV0KCkgcmFuZ2VIZWxwZXJUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSByYW5nZUxhYmVsOiBzdHJpbmc7XG5cblx0QElucHV0KCkgcGxhY2Vob2xkZXIgPSBcIm1tL2RkL3l5eXlcIjtcblxuXHQvKipcblx0ICogQXJpYSBsYWJlbCBhZGRlZCB0byBkYXRlcGlja2VyJ3MgY2FsZW5kYXIgY29udGFpbmVyLlxuXHQgKi9cblx0QElucHV0KCkgYXJpYUxhYmVsID0gXCJjYWxlbmRhciBjb250YWluZXJcIjtcblxuXHQvKipcblx0ICogVGhlIHBhdHRlcm4gZm9yIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnRcblx0ICovXG5cdEBJbnB1dCgpIGlucHV0UGF0dGVybiA9IFwiXlxcXFxkezEsMn0vXFxcXGR7MSwyfS9cXFxcZHs0fSRcIjtcblxuXHRASW5wdXQoKSBpZCA9IGBkYXRlcGlja2VyLSR7RGF0ZVBpY2tlci5kYXRlUGlja2VyQ291bnQrK31gO1xuXG5cdEBJbnB1dCgpIHNldCB2YWx1ZSh2OiAoRGF0ZSB8IHN0cmluZylbXSkge1xuXHRcdGlmICghdikge1xuXHRcdFx0diA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLl92YWx1ZSA9IHY7XG5cdH1cblxuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIHY1IC0gVXNlIGBjZHNMYXllcmAgZGlyZWN0aXZlIGluc3RlYWRcblx0ICogU2V0IHRvIGBcImxpZ2h0XCJgIHRvIGFwcGx5IHRoZSBsaWdodCBzdHlsZVxuXHQgKi9cblx0QElucHV0KCkgdGhlbWU6IFwibGlnaHRcIiB8IFwiZGFya1wiID0gXCJkYXJrXCI7XG5cblx0QElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFNldCB0byBgdHJ1ZWAgdG8gZGlzcGxheSB0aGUgaW52YWxpZCBzdGF0ZS5cblx0ICovXG5cdEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblx0LyoqXG5cdCAqIFZhbHVlIGRpc3BsYXllZCBpZiBkYXRlcGlja2VyIGlzIGluIGFuIGludmFsaWQgc3RhdGUuXG5cdCAqL1xuXHRASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIChjb250ZW50cyBzZXQgYnkgd2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgd2FybiA9IGZhbHNlO1xuXHQvKipcblx0ICogU2V0cyB0aGUgd2FybmluZyB0ZXh0XG5cdCAqL1xuXHRASW5wdXQoKSB3YXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcIm1kXCI7XG5cdC8qKlxuXHQgKiBTZXQgdG8gYHRydWVgIHRvIGRpc3BsYXkgdGhlIGludmFsaWQgc3RhdGUgZm9yIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dC5cblx0ICovXG5cdEBJbnB1dCgpIHJhbmdlSW52YWxpZCA9IGZhbHNlO1xuXHQvKipcblx0ICogVmFsdWUgZGlzcGxheWVkIGlmIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLlxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VJbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pjtcblx0LyoqXG5cdCAgKiBTZXQgdG8gYHRydWVgIHRvIHNob3cgYSB3YXJuaW5nIGluIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dCAoY29udGVudHMgc2V0IGJ5IHJhbmdlV2FybmluZ1RleHQpXG5cdCAgKi9cblx0QElucHV0KCkgcmFuZ2VXYXJuID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBTZXRzIHRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBzZWNvbmQgZGF0ZXBpY2tlciBpbnB1dFxuXHQgKi9cblx0QElucHV0KCkgcmFuZ2VXYXJuVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcblxuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXG5cdEBJbnB1dCgpIHBsdWdpbnMgPSBbXTtcblxuXHRASW5wdXQoKVxuXHRzZXQgZmxhdHBpY2tyT3B0aW9ucyhvcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+KSB7XG5cdFx0dGhpcy5fZmxhdHBpY2tyT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2ZsYXRwaWNrck9wdGlvbnMsIG9wdGlvbnMpO1xuXHR9XG5cdGdldCBmbGF0cGlja3JPcHRpb25zKCk6IFBhcnRpYWw8T3B0aW9ucz4ge1xuXHRcdGNvbnN0IHBsdWdpbnMgPSBbLi4udGhpcy5wbHVnaW5zLCBjYXJib25GbGF0cGlja3JNb250aFNlbGVjdFBsdWdpbl07XG5cdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdHBsdWdpbnMucHVzaChyYW5nZVBsdWdpbih7IGlucHV0OiBgIyR7dGhpcy5pZH0tcmFuZ2VJbnB1dGAsIHBvc2l0aW9uOiBcImxlZnRcIiB9KSk7XG5cdFx0fVxuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9mbGF0cGlja3JPcHRpb25zLCB0aGlzLmZsYXRwaWNrckJhc2VPcHRpb25zLCB7XG5cdFx0XHRtb2RlOiB0aGlzLnJhbmdlID8gXCJyYW5nZVwiIDogXCJzaW5nbGVcIixcblx0XHRcdHBsdWdpbnMsXG5cdFx0XHRkYXRlRm9ybWF0OiB0aGlzLmRhdGVGb3JtYXQsXG5cdFx0XHRsb2NhbGU6IGxhbmd1YWdlcy5kZWZhdWx0Py5kZWZhdWx0W3RoaXMubGFuZ3VhZ2VdIHx8IGxhbmd1YWdlcy5kZWZhdWx0W3RoaXMubGFuZ3VhZ2VdXG5cdFx0fSk7XG5cdH1cblxuXHRAVmlld0NoaWxkKFwiaW5wdXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXQ6IERhdGVQaWNrZXJJbnB1dDtcblx0QFZpZXdDaGlsZChcInJhbmdlSW5wdXRcIikgcmFuZ2VJbnB1dDogRGF0ZVBpY2tlcklucHV0O1xuXG5cdEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFdlIGFyZSBvdmVycmlkaW5nIG9uQ2xvc2UgZXZlbnQgZXZlbiBpZiB1c2VycyBwYXNzIGl0IHZpYSBmbGF0cGlja3Igb3B0aW9uc1xuXHQgKiBFbWl0cyBhbiBldmVudCB3aGVuIGRhdGUgcGlja2VyIGNsb3Nlc1xuXHQgKi9cblx0QE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdHByb3RlY3RlZCBfdmFsdWUgPSBbXTtcblxuXHRwcm90ZWN0ZWQgX2ZsYXRwaWNrck9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG5cdFx0YWxsb3dJbnB1dDogdHJ1ZVxuXHR9O1xuXG5cdHByb3RlY3RlZCBmbGF0cGlja3JCYXNlT3B0aW9ucyA9IHtcblx0XHRtb2RlOiBcInNpbmdsZVwiLFxuXHRcdGRhdGVGb3JtYXQ6IFwibS9kL1lcIixcblx0XHRwbHVnaW5zOiB0aGlzLnBsdWdpbnMsXG5cdFx0b25PcGVuOiAoKSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZUNsYXNzTmFtZXMoKTtcblx0XHRcdHRoaXMudXBkYXRlQXR0cmlidXRlcygpO1xuXHRcdFx0dGhpcy51cGRhdGVDYWxlbmRhckxpc3RlbmVycygpO1xuXHRcdH0sXG5cdFx0b25DbG9zZTogKGRhdGUpID0+IHtcblx0XHRcdC8vIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBgZmxhdHBpY2tySW5zdGFuY2Ugc2VsZWN0ZWREYXRlc2AgYXJlIGluIHN5bmMgd2l0aCB0aGUgdmFsdWVzIG9mXG5cdFx0XHQvLyB0aGUgaW5wdXRzIHdoZW4gdGhlIGNhbGVuZGFyIGNsb3Nlcy5cblx0XHRcdGlmICh0aGlzLnJhbmdlICYmIHRoaXMuZmxhdHBpY2tySW5zdGFuY2UpIHtcblx0XHRcdFx0aWYgKHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlcy5sZW5ndGggIT09IDIpIHtcblx0XHRcdFx0XHQvLyB3ZSBjb3VsZCBgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jbGVhcigpYCBidXQgaXQgaW5zaXN0cyBvbiBvcGVuaW5nIHRoZSBzZWNvbmQgcGlja2VyXG5cdFx0XHRcdFx0Ly8gaW4gc29tZSBjYXNlcywgc28gaW5zdGVhZCB3ZSBkbyB0aGlzXG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKFtdKTtcblx0XHRcdFx0XHR0aGlzLmRvU2VsZWN0KFtdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZTtcblx0XHRcdFx0Y29uc3QgcmFuZ2VJbnB1dFZhbHVlID0gdGhpcy5yYW5nZUlucHV0LmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGlmIChpbnB1dFZhbHVlIHx8IHJhbmdlSW5wdXRWYWx1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IHBhcnNlRGF0ZSA9IChkYXRlOiBzdHJpbmcpID0+IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UucGFyc2VEYXRlKGRhdGUsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKFtwYXJzZURhdGUoaW5wdXRWYWx1ZSksIHBhcnNlRGF0ZShyYW5nZUlucHV0VmFsdWUpXSk7XG5cdFx0XHRcdFx0dGhpcy5kb1NlbGVjdCh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm9uQ2xvc2UuZW1pdChkYXRlKTtcblx0XHR9LFxuXHRcdG9uRGF5Q3JlYXRlOiAoX2RPYmosIF9kU3RyLCBfZnAsIGRheUVsZW0pID0+IHtcblx0XHRcdGRheUVsZW0uY2xhc3NMaXN0LmFkZChcImNkcy0tZGF0ZS1waWNrZXJfX2RheVwiKTtcblx0XHR9LFxuXHRcdG5leHRBcnJvdzogdGhpcy5yaWdodEFycm93SFRNTCgpLFxuXHRcdHByZXZBcnJvdzogdGhpcy5sZWZ0QXJyb3dIVE1MKCksXG5cdFx0dmFsdWU6IHRoaXMudmFsdWVcblx0fTtcblxuXHRwcm90ZWN0ZWQgZmxhdHBpY2tySW5zdGFuY2UgPSBudWxsO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdHByb3RlY3RlZCBpMThuOiBJMThuXG5cdCkgeyB9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0Ly8gaWYgaTE4biBpcyBzZXQgdG8gYW55dGhpbmcgb3RoZXIgdGhhbiBlbiB3ZSdsbCB3YW50IHRvIGNoYW5nZSB0aGUgbGFuZ3VhZ2Vcblx0XHQvLyBvdGhlcndpc2Ugd2UnbGwganVzdCB1c2UgdGhlIGxvY2FsIHNldHRpbmdcblx0XHRpZiAodGhpcy5pMThuLmdldExvY2FsZSgpICE9PSBcImVuXCIpIHtcblx0XHRcdHRoaXMuaTE4bi5nZXRMb2NhbGVPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKGxvY2FsZSA9PiB7XG5cdFx0XHRcdHRoaXMubGFuZ3VhZ2UgPSBsb2NhbGU7XG5cdFx0XHRcdHRoaXMucmVzZXRGbGF0cGlja3JJbnN0YW5jZSgpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdC8vIFJlc2V0IHRoZSBmbGF0cGlja3IgaW5zdGFuY2Ugb24gaW5wdXQgY2hhbmdlcyB0aGF0IGFmZmVjdCBmbGF0cGlja3IuXG5cdFx0Y29uc3QgZmxhdHBpY2tyQ2hhbmdlS2V5cyA9IFtcblx0XHRcdFwicmFuZ2VcIixcblx0XHRcdFwiZGF0ZUZvcm1hdFwiLFxuXHRcdFx0XCJsYW5ndWFnZVwiLFxuXHRcdFx0XCJpZFwiLFxuXHRcdFx0XCJ2YWx1ZVwiLFxuXHRcdFx0XCJwbHVnaW5zXCIsXG5cdFx0XHRcImZsYXRwaWNrck9wdGlvbnNcIlxuXHRcdF07XG5cdFx0Y29uc3QgY2hhbmdlS2V5cyA9IE9iamVjdC5rZXlzKGNoYW5nZXMpO1xuXHRcdGlmIChjaGFuZ2VLZXlzLnNvbWUoa2V5ID0+IGZsYXRwaWNrckNoYW5nZUtleXMuaW5jbHVkZXMoa2V5KSkpIHtcblx0XHRcdHRoaXMucmVzZXRGbGF0cGlja3JJbnN0YW5jZShjaGFuZ2VzLnZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKSB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkZElucHV0TGlzdGVuZXJzKCk7XG5cdFx0fSwgMCk7XG5cdH1cblxuXHQvLyBiZWNhdXNlIHRoZSBhY3R1YWwgdmlldyBtYXkgYmUgZGVsYXllZCBpbiBsb2FkaW5nICh0aGluayBwcm9qZWN0aW9uIGludG8gYSB0YWIgcGFuZSlcblx0Ly8gYW5kIGJlY2F1c2Ugd2UgcmVseSBvbiBhIGxpYnJhcnkgdGhhdCBvcGVyYXRlcyBvdXRzaWRlIHRoZSBBbmd1bGFyIHZpZXcgb2YgdGhlIHdvcmxkXG5cdC8vIHdlIG5lZWQgdG8ga2VlcCB0cnlpbmcgdG8gbG9hZCB0aGUgbGlicmFyeSwgdW50aWwgdGhlIHJlbGV2YW50IERPTSBpcyBhY3R1YWxseSBsaXZlXG5cdG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcblx0XHRpZiAoIXRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0Ly8gQHRzLWlnbm9yZSB0cyBpcyB1bmhhcHB5IHdpdGggdGhlIGJlbG93IGNhbGwgdG8gYGZsYXRwaWNrcmBcblx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UgPSBmbGF0cGlja3IoYCMke3RoaXMuaWR9LWlucHV0YCwgdGhpcy5mbGF0cGlja3JPcHRpb25zKTtcblx0XHRcdC8vIGlmIChhbmQgb25seSBpZikgdGhlIGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZCwgd2UgY2FuIHNldCB0aGUgZGF0ZSB2YWx1ZXNcblx0XHRcdGlmICh0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkpIHtcblx0XHRcdFx0aWYgKHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyh0aGlzLnZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJmb2N1c2luXCIpXG5cdG9uRm9jdXMoKSB7XG5cdFx0Ly8gVXBkYXRlcyB0aGUgbW9udGggbWFudWFsbHkgd2hlbiBjYWxlbmRhciBtb2RlIGlzIHJhbmdlIGJlY2F1c2UgbW9udGhcblx0XHQvLyB3aWxsIG5vdCB1cGRhdGUgcHJvcGVybHkgd2l0aG91dCBtYW51YWxseSB1cGRhdGluZyB0aGVtIG9uIGZvY3VzLlxuXHRcdGlmICh0aGlzLnJhbmdlKSB7XG5cdFx0XHRpZiAodGhpcy5yYW5nZUlucHV0LmlucHV0Lm5hdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRNb250aCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1sxXS5nZXRNb250aCgpO1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNoYW5nZU1vbnRoKGN1cnJlbnRNb250aCwgZmFsc2UpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmlucHV0LmlucHV0Lm5hdGl2ZUVsZW1lbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRNb250aCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXS5nZXRNb250aCgpO1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNoYW5nZU1vbnRoKGN1cnJlbnRNb250aCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoXCJmb2N1c291dFwiKVxuXHRvbkZvY3VzT3V0KCkge1xuXHRcdHRoaXMub25Ub3VjaGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogV3JpdGVzIGEgdmFsdWUgZnJvbSB0aGUgbW9kZWwgdG8gdGhlIGNvbXBvbmVudC4gRXhwZWN0cyB0aGUgdmFsdWUgdG8gYmUgYG51bGxgIG9yIGAoRGF0ZSB8IHN0cmluZylbXWBcblx0ICogQHBhcmFtIHZhbHVlIHZhbHVlIHJlY2VpdmVkIGZyb20gdGhlIG1vZGVsXG5cdCAqL1xuXHR3cml0ZVZhbHVlKHZhbHVlOiAoRGF0ZSB8IHN0cmluZylbXSkge1xuXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkgJiYgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jb25maWcpIHtcblx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKHRoaXMudmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIGBDb250cm9sVmFsdWVBY2Nlc3NvcmAgbWV0aG9kIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzYWJsZSB0aGUgRGF0ZVBpY2tlci5cblx0ICpcblx0ICogZXg6IGB0aGlzLmZvcm1Hcm91cC5nZXQoXCJteURhdGVQaWNrZXJcIikuZGlzYWJsZSgpO2Bcblx0ICpcblx0ICogQHBhcmFtIGlzRGlzYWJsZWQgYHRydWVgIHRvIGRpc2FibGUgdGhlIERhdGVQaWNrZXJcblx0ICovXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHR9XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG5cdFx0dGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0b25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7IH07XG5cblx0cHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuXG5cdC8qKlxuXHQgKiBDbGVhbnMgdXAgb3VyIGZsYXRwaWNrciBpbnN0YW5jZVxuXHQgKi9cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKCF0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkpIHsgcmV0dXJuOyB9XG5cdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgYHZhbHVlQ2hhbmdlYCBldmVudCBmcm9tIHRoZSBwcmltYXJ5L3NpbmdsZSBpbnB1dFxuXHQgKi9cblx0b25WYWx1ZUNoYW5nZShldmVudDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UucGFyc2VEYXRlKGV2ZW50LCB0aGlzLmRhdGVGb3JtYXQpO1xuXHRcdFx0aWYgKHRoaXMucmFuZ2UpIHtcblx0XHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKFtkYXRlLCB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMV1dKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyhbZGF0ZV0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5kb1NlbGVjdCh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBgdmFsdWVDaGFuZ2VgIGV2ZW50IGZyb20gdGhlIHJhbmdlIGlucHV0XG5cdCAqL1xuXHRvblJhbmdlVmFsdWVDaGFuZ2UoZXZlbnQ6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLmlzRmxhdHBpY2tyTG9hZGVkKCkgJiYgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5pc09wZW4pIHtcblx0XHRcdGNvbnN0IGRhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnBhcnNlRGF0ZShldmVudCwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdHRoaXMuc2V0RGF0ZVZhbHVlcyhbdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLCBkYXRlXSk7XG5cdFx0XHR0aGlzLmRvU2VsZWN0KHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgb3BlbmluZyB0aGUgY2FsZW5kYXIgXCJwcm9wZXJseVwiIHdoZW4gdGhlIGNhbGVuZGFyIGljb24gaXMgY2xpY2tlZC5cblx0ICovXG5cdG9wZW5DYWxlbmRhcihkYXRlcGlja2VySW5wdXQ6IERhdGVQaWNrZXJJbnB1dCkge1xuXHRcdGlmICh0aGlzLnJhbmdlKSB7XG5cdFx0XHRkYXRlcGlja2VySW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudC5jbGljaygpO1xuXG5cdFx0XHQvLyBJZiB0aGUgZmlyc3QgaW5wdXQncyBjYWxlbmRhciBpY29uIGlzIGNsaWNrZWQgd2hlbiBjYWxlbmRhciBpcyBpbiByYW5nZSBtb2RlLCB0aGVuXG5cdFx0XHQvLyB0aGUgbW9udGggYW5kIHllYXIgbmVlZHMgdG8gYmUgbWFudWFsbHkgY2hhbmdlZCB0byB0aGUgY3VycmVudCBzZWxlY3RlZCBtb250aCBhbmRcblx0XHRcdC8vIHllYXIgb3RoZXJ3aXNlIHRoZSBjYWxlbmRhciB2aWV3IHdpbGwgbm90IGJlIHVwZGF0ZWQgdXBvbiBvcGVuaW5nLlxuXHRcdFx0aWYgKGRhdGVwaWNrZXJJbnB1dCA9PT0gdGhpcy5pbnB1dCAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0pIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudE1vbnRoID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdLmdldE1vbnRoKCk7XG5cblx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5jdXJyZW50WWVhciA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXS5nZXRGdWxsWWVhcigpO1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNoYW5nZU1vbnRoKGN1cnJlbnRNb250aCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBTaW5nbGUtbW9kZSBmbGF0cGlja3IgaGFuZGxlcyBtb3VzZWRvd24gYnV0IG5vdCBjbGljaywgc28gbmF0aXZlRWxlbWVudC5jbGljaygpIHdvbid0XG5cdFx0XHQvLyB3b3JrIHdoZW4gdGhlIGNhbGVuZGFyIGljb24gaXMgY2xpY2tlZC4gSW4gdGhpcyBjYXNlIHdlIHNpbXBseSB1c2UgZmxhdHBpY2tyLm9wZW4oKS5cblx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uub3BlbigpO1xuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCB1cGRhdGVDYWxlbmRhckxpc3RlbmVycygpIHtcblx0XHRjb25zdCBjYWxlbmRhckNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuXHRcdEFycmF5LmZyb20oY2FsZW5kYXJDb250YWluZXIpLmZvckVhY2goY2FsZW5kYXIgPT4ge1xuXHRcdFx0Y2FsZW5kYXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMucHJldmVudENhbGVuZGFyQ2xvc2UpO1xuXHRcdFx0Y2FsZW5kYXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMucHJldmVudENhbGVuZGFyQ2xvc2UpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIGV2ZW50IGxpc3RlbmVycyBmb3IgdGhlIGRhdGVwaWNrZXIgaW5wdXQgYW5kIHJhbmdlIGlucHV0IGZpZWxkcy5cblx0ICovXG5cdHByb3RlY3RlZCBhZGRJbnB1dExpc3RlbmVycygpIHtcblx0XHRpZiAoIXRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93cyBmb2N1cyB0cmFuc2l0aW9uIGZyb20gdGhlIGRhdGVwaWNrZXIgaW5wdXQgb3IgcmFuZ2UgaW5wdXQgZmllbGQgdG9cblx0XHQvLyBmbGF0cGlja3IgY2FsZW5kYXIgdXNpbmcgYSBrZXlib2FyZC5cblx0XHRjb25zdCBhZGRGb2N1c0NhbGVuZGFyTGlzdGVuZXIgPSAoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCkgPT4ge1xuXHRcdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXZlbnQua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmZsYXRwaWNrckluc3RhbmNlLmlzT3Blbikge1xuXHRcdFx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5vcGVuKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgY2FsZW5kYXJDb250YWluZXIgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmNhbGVuZGFyQ29udGFpbmVyO1xuXHRcdFx0XHRcdGNvbnN0IGRheUVsZW1lbnQgPSBjYWxlbmRhckNvbnRhaW5lciAmJiBjYWxlbmRhckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmZsYXRwaWNrci1kYXlbdGFiaW5kZXhdXCIpO1xuXG5cdFx0XHRcdFx0aWYgKGRheUVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGRheUVsZW1lbnQuZm9jdXMoKTtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHVzZXIgbWFudWFsbHkgaW5wdXRzIGEgdmFsdWUgaW50byB0aGUgZGF0ZSBmaWVsZCBhbmQgcHJlc3NlcyBhcnJvdyBkb3duLFxuXHRcdFx0XHRcdFx0Ly8gZGF0ZXBpY2tlciBpbnB1dCBvbmNoYW5nZSB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIGZvY3VzIGlzIHJlbW92ZWQgZnJvbSBpdCBhbmRcblx0XHRcdFx0XHRcdC8vIGBmbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlYCBhbmQgYGZsYXRwaWNrckluc3RhbmNlLmNoYW5nZU1vbnRoYCB3aWxsIGJlIGludm9rZWRcblx0XHRcdFx0XHRcdC8vIHdoaWNoIHdpbGwgYXV0b21hdGljYWxseSBjaGFuZ2UgZm9jdXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZGF5RWxlbWVudCAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0pIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5pbnB1dCkge1xuXHRcdFx0YWRkRm9jdXNDYWxlbmRhckxpc3RlbmVyKHRoaXMuaW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucmFuZ2VJbnB1dCAmJiB0aGlzLnJhbmdlSW5wdXQuaW5wdXQpIHtcblx0XHRcdGFkZEZvY3VzQ2FsZW5kYXJMaXN0ZW5lcih0aGlzLnJhbmdlSW5wdXQuaW5wdXQubmF0aXZlRWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgZmxhdHBpY2tyIGluc3RhbmNlIHdoaWxlIGtlZXBpbmcgdGhlIGRhdGUgdmFsdWVzIChvciB1cGRhdGluZyB0aGVtIGlmIG5ld0RhdGVzIGlzIHByb3ZpZGVkKVxuXHQgKlxuXHQgKiBVc2VkIHRvIHBpY2sgdXAgaW5wdXQgY2hhbmdlcyBvciBsb2NhbGUgY2hhbmdlcy5cblx0ICpcblx0ICogQHBhcmFtIG5ld0RhdGVzIEFuIG9wdGlvbmFsIFNpbXBsZUNoYW5nZSBvZiBkYXRlIHZhbHVlc1xuXHQgKi9cblx0cHJvdGVjdGVkIHJlc2V0RmxhdHBpY2tySW5zdGFuY2UobmV3RGF0ZXM/OiBTaW1wbGVDaGFuZ2UpIHtcblx0XHRpZiAodGhpcy5pc0ZsYXRwaWNrckxvYWRlZCgpKSB7XG5cdFx0XHRsZXQgZGF0ZXMgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXM7XG5cdFx0XHRpZiAobmV3RGF0ZXMgJiYgdGhpcy5kaWREYXRlVmFsdWVDaGFuZ2UobmV3RGF0ZXMuY3VycmVudFZhbHVlLCBuZXdEYXRlcy5wcmV2aW91c1ZhbHVlKSkge1xuXHRcdFx0XHRkYXRlcyA9IG5ld0RhdGVzLmN1cnJlbnRWYWx1ZTtcblx0XHRcdH1cblx0XHRcdC8vIG9ubHkgcmVzZXQgdGhlIGZsYXRwaWNrciBpbnN0YW5jZSBvbiBJbnB1dCBjaGFuZ2VzXG5cdFx0XHQvLyBAdHMtaWdub3JlIHRzIGlzIHVuaGFwcHkgd2l0aCB0aGUgYmVsb3cgY2FsbCB0byBgZmxhdHBpY2tyYFxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZSA9IGZsYXRwaWNrcihgIyR7dGhpcy5pZH0taW5wdXRgLCB0aGlzLmZsYXRwaWNrck9wdGlvbnMpO1xuXHRcdFx0dGhpcy5zZXREYXRlVmFsdWVzKGRhdGVzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FyYm9uIHVzZXMgYSBudW1iZXIgb2Ygc3BlY2lmaWMgY2xhc3NuYW1lcyBmb3IgcGFydHMgb2YgdGhlIGZsYXRwaWNrciAtIHRoaXMgaWRlbXBvdGVudCBtZXRob2QgYXBwbGllcyB0aGVtIGlmIG5lZWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCB1cGRhdGVDbGFzc05hbWVzKCkge1xuXHRcdGlmICghdGhpcy5lbGVtZW50UmVmKSB7IHJldHVybjsgfVxuXHRcdC8vIGdldCBhbGwgdGhlIHBvc3NpYmxlIGZsYXRwaWNrcnMgaW4gdGhlIGRvY3VtZW50IC0gd2UgbmVlZCB0byBhZGQgY2xhc3NlcyB0byAocG90ZW50aWFsbHkpIGFsbCBvZiB0aGVtXG5cdFx0Y29uc3QgY2FsZW5kYXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci1jYWxlbmRhclwiKTtcblx0XHRjb25zdCBtb250aENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLW1vbnRoXCIpO1xuXHRcdGNvbnN0IHdlZWtkYXlzQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3Itd2Vla2RheXNcIik7XG5cdFx0Y29uc3Qgd2Vla2RheUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLXdlZWtkYXlcIik7XG5cdFx0Y29uc3QgZGF5c0NvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZmxhdHBpY2tyLWRheXNcIik7XG5cdFx0Y29uc3QgZGF5Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mbGF0cGlja3ItZGF5XCIpO1xuXG5cdFx0Ly8gYWRkIGNsYXNzZXMgdG8gbGlzdHMgb2YgZWxlbWVudHNcblx0XHRjb25zdCBhZGRDbGFzc0lmTm90RXhpc3RzID0gKGNsYXNzbmFtZTogc3RyaW5nLCBlbGVtZW50TGlzdDogTm9kZUxpc3RPZjxFbGVtZW50PikgPT4ge1xuXHRcdFx0QXJyYXkuZnJvbShlbGVtZW50TGlzdCkuZm9yRWFjaChlbGVtZW50ID0+IHtcblx0XHRcdFx0aWYgKCFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc25hbWUpKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzbmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHQvLyBhZGQgY2xhc3NlcyAoYnV0IG9ubHkgaWYgdGhleSBkb24ndCBleGlzdCwgc21hbGwgcGVyZiB3aW4pXG5cdFx0YWRkQ2xhc3NJZk5vdEV4aXN0cyhcImNkcy0tZGF0ZS1waWNrZXJfX2NhbGVuZGFyXCIsIGNhbGVuZGFyQ29udGFpbmVyKTtcblx0XHRhZGRDbGFzc0lmTm90RXhpc3RzKFwiY2RzLS1kYXRlLXBpY2tlcl9fbW9udGhcIiwgbW9udGhDb250YWluZXIpO1xuXHRcdGFkZENsYXNzSWZOb3RFeGlzdHMoXCJjZHMtLWRhdGUtcGlja2VyX193ZWVrZGF5c1wiLCB3ZWVrZGF5c0NvbnRhaW5lcik7XG5cdFx0YWRkQ2xhc3NJZk5vdEV4aXN0cyhcImNkcy0tZGF0ZS1waWNrZXJfX2RheXNcIiwgZGF5c0NvbnRhaW5lcik7XG5cblx0XHQvLyBhZGQgd2Vla2RheSBjbGFzc2VzIGFuZCBmb3JtYXQgdGhlIHRleHRcblx0XHRBcnJheS5mcm9tKHdlZWtkYXlDb250YWluZXIpLmZvckVhY2goZWxlbWVudCA9PiB7XG5cdFx0XHRlbGVtZW50LmlubmVySFRNTCA9IGVsZW1lbnQuaW5uZXJIVE1MLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG5cdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjZHMtLWRhdGUtcGlja2VyX193ZWVrZGF5XCIpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIGRheSBjbGFzc2VzIGFuZCBzcGVjaWFsIGNhc2UgdGhlIFwidG9kYXlcIiBlbGVtZW50IGJhc2VkIG9uIGB0aGlzLnZhbHVlYFxuXHRcdEFycmF5LmZyb20oZGF5Q29udGFpbmVyKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuXHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiY2RzLS1kYXRlLXBpY2tlcl9fZGF5XCIpO1xuXHRcdFx0aWYgKCF0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInRvZGF5XCIpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJuby1ib3JkZXJcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwidG9kYXlcIikgJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwibm8tYm9yZGVyXCIpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIHVwZGF0ZUF0dHJpYnV0ZXMoKSB7XG5cdFx0Y29uc3QgY2FsZW5kYXJDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZsYXRwaWNrci1jYWxlbmRhclwiKTtcblx0XHRBcnJheS5mcm9tKGNhbGVuZGFyQ29udGFpbmVyKS5mb3JFYWNoKGNhbGVuZGFyID0+IHtcblx0XHRcdGNhbGVuZGFyLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJyZWdpb25cIik7XG5cdFx0XHRjYWxlbmRhci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHRoaXMuYXJpYUxhYmVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBnaXZlbiBkYXRlIHZhbHVlIGFycmF5IHRvIGJvdGggdGhlIGZsYXRwaWNrciBpbnN0YW5jZSBhbmQgdGhlIGBpbnB1dGAocylcblx0ICogQHBhcmFtIGRhdGVzIHRoZSBkYXRlIHZhbHVlcyB0byBhcHBseVxuXHQgKi9cblx0cHJvdGVjdGVkIHNldERhdGVWYWx1ZXMoZGF0ZXM6IChEYXRlIHwgc3RyaW5nKVtdKSB7XG5cdFx0aWYgKHRoaXMuaXNGbGF0cGlja3JMb2FkZWQoKSkge1xuXHRcdFx0Y29uc3Qgc2luZ2xlSW5wdXQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHt0aGlzLmlkfS1pbnB1dGApO1xuXHRcdFx0Y29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3RoaXMuaWR9LXJhbmdlSW5wdXRgKTtcblxuXHRcdFx0Ly8gYGZsYXRwaWNrckluc3RhbmNlLnNldERhdGVgIHJlbW92ZXMgdGhlIGZvY3VzIG9uIHRoZSBzZWxlY3RlZCBkYXRlIGVsZW1lbnQgYW5kIHdpbGxcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgY2hhbmdlIGZvY3VzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LiBJZiBhIHNlbGVjdGVkIGRhdGUgaXNcblx0XHRcdC8vIGZvY3VzZWQgYmVmb3JlIGBmbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlYCBpcyBpbnZva2VkIHRoZW4gaXQgc2hvdWxkIHJlbWFpbiBmb2N1c2VkLlxuXHRcdFx0bGV0IHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlRWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuXHRcdFx0Ly8gc2V0IHRoZSBkYXRlIG9uIHRoZSBpbnN0YW5jZVxuXHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZXREYXRlKGRhdGVzKTtcblxuXHRcdFx0aWYgKHNob3VsZFJlZm9jdXNEYXRlRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0uZm9jdXMoKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gd2UgY2FuIGVpdGhlciBzZXQgYSBkYXRlIHZhbHVlIG9yIGFuIGVtcHR5IHN0cmluZywgc28gd2Ugc3RhcnQgd2l0aCBhbiBlbXB0eSBzdHJpbmdcblx0XHRcdGxldCBzaW5nbGVEYXRlID0gXCJcIjtcblx0XHRcdC8vIGlmIGRhdGUgaXMgYSBzdHJpbmcsIHBhcnNlIGFuZCBmb3JtYXRcblx0XHRcdGlmICh0eXBlb2YgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzBdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHNpbmdsZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnBhcnNlRGF0ZSh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0sIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRcdHNpbmdsZURhdGUgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLmZvcm1hdERhdGUoc2luZ2xlRGF0ZSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdC8vIGlmIGRhdGUgaXMgbm90IGEgc3RyaW5nIHdlIGNhbiBhc3N1bWUgaXQncyBhIERhdGUgYW5kIHdlIHNob3VsZCBmb3JtYXRcblx0XHRcdH0gZWxzZSBpZiAoISF0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0pIHtcblx0XHRcdFx0c2luZ2xlRGF0ZSA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuZm9ybWF0RGF0ZSh0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0sIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyYW5nZUlucHV0KSB7XG5cdFx0XHRcdC8vIHdlIGNhbiBlaXRoZXIgc2V0IGEgZGF0ZSB2YWx1ZSBvciBhbiBlbXB0eSBzdHJpbmcsIHNvIHdlIHN0YXJ0IHdpdGggYW4gZW1wdHkgc3RyaW5nXG5cdFx0XHRcdGxldCByYW5nZURhdGUgPSBcIlwiO1xuXHRcdFx0XHQvLyBpZiBkYXRlIGlzIGEgc3RyaW5nLCBwYXJzZSBhbmQgZm9ybWF0XG5cdFx0XHRcdGlmICh0eXBlb2YgdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0cmFuZ2VEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5wYXJzZURhdGUodGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdLnRvU3RyaW5nKCksIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdFx0XHRcdFx0cmFuZ2VEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5mb3JtYXREYXRlKHJhbmdlRGF0ZSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0Ly8gaWYgZGF0ZSBpcyBub3QgYSBzdHJpbmcgd2UgY2FuIGFzc3VtZSBpdCdzIGEgRGF0ZSBhbmQgd2Ugc2hvdWxkIGZvcm1hdFxuXHRcdFx0XHR9IGVsc2UgaWYgKCEhdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVzWzFdKSB7XG5cdFx0XHRcdFx0cmFuZ2VEYXRlID0gdGhpcy5mbGF0cGlja3JJbnN0YW5jZS5mb3JtYXREYXRlKHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1sxXSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHQvLyBhcHBseSB0aGUgdmFsdWVzXG5cdFx0XHRcdFx0cmFuZ2VJbnB1dC52YWx1ZSA9IHJhbmdlRGF0ZTtcblx0XHRcdFx0XHRzaW5nbGVJbnB1dC52YWx1ZSA9IHNpbmdsZURhdGU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBwcmV2ZW50Q2FsZW5kYXJDbG9zZSA9IGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdHByb3RlY3RlZCBkb1NlbGVjdChzZWxlY3RlZFZhbHVlOiAoRGF0ZSB8IHN0cmluZylbXSkge1xuXHRcdC8vIEluIHJhbmdlIG1vZGUsIGlmIGEgZGF0ZSBpcyBzZWxlY3RlZCBmcm9tIHRoZSBmaXJzdCBjYWxlbmRhciB0aGF0IGlzIGZyb20gdGhlIHByZXZpb3VzIG1vbnRoLFxuXHRcdC8vIHRoZSBtb250aCB3aWxsIG5vdCBiZSB1cGRhdGVkIG9uIHRoZSBjYWxlbmRhciB1bnRpbCB0aGUgY2FsZW5kYXIgaXMgcmUtb3BlbmVkLlxuXHRcdC8vIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIGNhbGVuZGFyIGlzIHVwZGF0ZWQgd2l0aCB0aGUgY29ycmVjdCBtb250aC5cblx0XHRpZiAodGhpcy5yYW5nZSAmJiB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZXNbMF0pIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRNb250aCA9IHRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2VsZWN0ZWREYXRlc1swXS5nZXRNb250aCgpO1xuXG5cdFx0XHQvLyBgZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGhgIHJlbW92ZXMgdGhlIGZvY3VzIG9uIHRoZSBzZWxlY3RlZCBkYXRlIGVsZW1lbnQgYW5kIHdpbGxcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgY2hhbmdlIGZvY3VzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LiBJZiBhIHNlbGVjdGVkIGRhdGUgaXNcblx0XHRcdC8vIGZvY3VzZWQgYmVmb3JlIGBmbGF0cGlja3JJbnN0YW5jZS5jaGFuZ2VNb250aGAgaXMgaW52b2tlZCB0aGVuIGl0IHNob3VsZCByZW1haW4gZm9jdXNlZC5cblx0XHRcdGxldCBzaG91bGRSZWZvY3VzRGF0ZUVsZW1lbnQgPSB0aGlzLmZsYXRwaWNrckluc3RhbmNlLnNlbGVjdGVkRGF0ZUVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdHRoaXMuZmxhdHBpY2tySW5zdGFuY2UuY2hhbmdlTW9udGgoY3VycmVudE1vbnRoLCBmYWxzZSk7XG5cblx0XHRcdGlmIChzaG91bGRSZWZvY3VzRGF0ZUVsZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5mbGF0cGlja3JJbnN0YW5jZS5zZWxlY3RlZERhdGVFbGVtLmZvY3VzKCk7XG5cdFx0XHR9XG5cblx0XHR9XG5cdFx0dGhpcy52YWx1ZUNoYW5nZS5lbWl0KHNlbGVjdGVkVmFsdWUpO1xuXHRcdHRoaXMucHJvcGFnYXRlQ2hhbmdlKHNlbGVjdGVkVmFsdWUpO1xuXHR9XG5cblx0cHJvdGVjdGVkIGRpZERhdGVWYWx1ZUNoYW5nZShjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpIHtcblx0XHRyZXR1cm4gY3VycmVudFZhbHVlWzBdICE9PSBwcmV2aW91c1ZhbHVlWzBdIHx8IGN1cnJlbnRWYWx1ZVsxXSAhPT0gcHJldmlvdXNWYWx1ZVsxXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNb3JlIGFkdmFuY2VkIGNoZWNraW5nIG9mIHRoZSBsb2FkZWQgc3RhdGUgb2YgZmxhdHBpY2tyXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaXNGbGF0cGlja3JMb2FkZWQoKSB7XG5cdFx0Ly8gY2FzdCB0aGUgaW5zdGFuY2UgdG8gYSBib29sZWFuLCBhbmQgc29tZSBtZXRob2QgdGhhdCBoYXMgdG8gZXhpc3QgZm9yIHRoZSBsaWJyYXJ5IHRvIGJlIGxvYWRlZCBpbiB0aGlzIGNhc2UgYHNldERhdGVgXG5cdFx0cmV0dXJuICEhdGhpcy5mbGF0cGlja3JJbnN0YW5jZSAmJiAhIXRoaXMuZmxhdHBpY2tySW5zdGFuY2Uuc2V0RGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSaWdodCBhcnJvdyBIVE1MIHBhc3NlZCB0byBmbGF0cGlja3Jcblx0ICovXG5cdHByb3RlY3RlZCByaWdodEFycm93SFRNTCgpIHtcblx0XHRyZXR1cm4gYFxuXHRcdFx0PHN2ZyB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuXHRcdFx0XHQ8cG9seWdvbiBwb2ludHM9XCIxMSw4IDYsMTMgNS4zLDEyLjMgOS42LDggNS4zLDMuNyA2LDMgXCIvPlxuXHRcdFx0XHQ8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBzdHlsZT1cImZpbGw6bm9uZVwiIC8+XG5cdFx0XHQ8L3N2Zz5gO1xuXHR9XG5cblx0LyoqXG5cdCAqIExlZnQgYXJyb3cgSFRNTCBwYXNzZWQgdG8gZmxhdHBpY2tyXG5cdCAqL1xuXHRwcm90ZWN0ZWQgbGVmdEFycm93SFRNTCgpIHtcblx0XHRyZXR1cm4gYFxuXHRcdFx0PHN2ZyB3aWR0aD1cIjE2cHhcIiBoZWlnaHQ9XCIxNnB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuXHRcdFx0XHQ8cG9seWdvbiBwb2ludHM9XCI1LDggMTAsMyAxMC43LDMuNyA2LjQsOCAxMC43LDEyLjMgMTAsMTMgXCIvPlxuXHRcdFx0XHQ8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBzdHlsZT1cImZpbGw6bm9uZVwiIC8+XG5cdFx0XHQ8L3N2Zz5gO1xuXHR9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carbon-components-angular-datepicker.mjs","sources":["../../src/datepicker/carbon-flatpickr-month-select.ts","../../src/datepicker/datepicker.component.ts","../../src/datepicker/datepicker.module.ts","../../src/datepicker/carbon-components-angular-datepicker.ts"],"sourcesContent":["/**\n * This is from carbon-components.\n * We need it to format the month select according to specs.\n * Carbon currently doesn't expose this as a seperate package,\n * and we don't import the carbon-components js (on purpose)\n * so some copy pasta is required\n *\n * ref: https://github.com/carbon-design-system/carbon/blob/\n * \tf06f38f0c2ef624e409a3d5711e897a79f4c88fc/packages/components/src/components/date-picker/date-picker.js#L52-L123\n */\n\nconst monthToStr = (monthNumber, shorthand, locale) =>\n\tlocale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\n\nconst config = {\n\tselectorInit: \"[data-date-picker]\",\n\tselectorDatePickerInput: \"[data-date-picker-input]\",\n\tselectorDatePickerInputFrom: \"[data-date-picker-input-from]\",\n\tselectorDatePickerInputTo: \"[data-date-picker-input-to]\",\n\tselectorDatePickerIcon: \"[data-date-picker-icon]\",\n\tselectorFlatpickrMonthYearContainer: \".flatpickr-current-month\",\n\tselectorFlatpickrYearContainer: \".numInputWrapper\",\n\tselectorFlatpickrCurrentMonth: \".cur-month\",\n\tclassCalendarContainer: `cds--date-picker__calendar`,\n\tclassMonth: `cds--date-picker__month`,\n\tclassWeekdays: `cds--date-picker__weekdays`,\n\tclassDays: `cds--date-picker__days`,\n\tclassWeekday: `cds--date-picker__weekday`,\n\tclassDay: `cds--date-picker__day`,\n\tclassFocused: `cds--focused`,\n\tclassVisuallyHidden: `cds--visually-hidden`,\n\tclassFlatpickrCurrentMonth: \"cur-month\",\n\tattribType: \"data-date-picker-type\",\n\tdateFormat: \"m/d/Y\",\n\tshorthand: false\n};\n\nexport const carbonFlatpickrMonthSelectPlugin = fp => {\n\tconst setupElements = () => {\n\t\tif (!fp.monthElements || !fp.yearElements) {\n\t\t\treturn;\n\t\t}\n\t\tfp.monthElements.forEach(elem => {\n\t\t\tif (!elem.parentNode) { return; }\n\t\t\telem.parentNode.removeChild(elem);\n\t\t});\n\t\tfp.monthElements.splice(\n\t\t\t0,\n\t\t\tfp.monthElements.length,\n\t\t\t...fp.monthElements.map(() => {\n\t\t\t\t// eslint-disable-next-line no-underscore-dangle\n\t\t\t\tconst monthElement = fp._createElement(\n\t\t\t\t\t\"span\",\n\t\t\t\t\tconfig.classFlatpickrCurrentMonth\n\t\t\t\t);\n\t\t\t\tmonthElement.textContent = monthToStr(\n\t\t\t\t\tfp.currentMonth,\n\t\t\t\t\tconfig.shorthand === true,\n\t\t\t\t\tfp.l10n\n\t\t\t\t);\n\t\t\t\tfp.yearElements[0]\n\t\t\t\t\t.closest(config.selectorFlatpickrMonthYearContainer)\n\t\t\t\t\t.insertBefore(\n\t\t\t\t\t\tmonthElement,\n\t\t\t\t\t\tfp.yearElements[0].closest(config.selectorFlatpickrYearContainer)\n\t\t\t\t\t);\n\t\t\t\treturn monthElement;\n\t\t\t})\n\t\t);\n\t};\n\tconst updateCurrentMonth = () => {\n\t\tif (!fp.yearElements) {\n\t\t\treturn;\n\t\t}\n\t\tconst monthStr = monthToStr(\n\t\t\tfp.currentMonth,\n\t\t\tconfig.shorthand === true,\n\t\t\tfp.l10n\n\t\t);\n\t\tfp.yearElements.forEach(elem => {\n\t\t\tconst currentMonthContainer = elem.closest(\n\t\t\t\tconfig.selectorFlatpickrMonthYearContainer\n\t\t\t);\n\t\t\tArray.prototype.forEach.call(\n\t\t\t\tcurrentMonthContainer.querySelectorAll(\".cur-month\"),\n\t\t\t\tmonthElement => {\n\t\t\t\t\tmonthElement.textContent = monthStr;\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n\n\tconst register = () => {\n\t\tfp.loadedPlugins.push(\"carbonFlatpickrMonthSelectPlugin\");\n\t};\n\n\treturn {\n\t\tonMonthChange: updateCurrentMonth,\n\t\tonValueUpdate: updateCurrentMonth,\n\t\tonOpen: updateCurrentMonth,\n\t\tonReady: [setupElements, updateCurrentMonth, register]\n\t};\n};\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tViewEncapsulation,\n\tElementRef,\n\tOnDestroy,\n\tHostListener,\n\tTemplateRef,\n\tOnChanges,\n\tSimpleChanges,\n\tAfterViewChecked,\n\tAfterViewInit,\n\tViewChild,\n\tOnInit,\n\tSimpleChange\n} from \"@angular/core\";\nimport rangePlugin from \"flatpickr/dist/plugins/rangePlugin\";\nimport flatpickr from \"flatpickr\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { carbonFlatpickrMonthSelectPlugin } from \"./carbon-flatpickr-month-select\";\nimport * as languages from \"flatpickr/dist/l10n/index\";\nimport { DatePickerInput } from \"carbon-components-angular/datepicker-input\";\nimport { I18n } from \"carbon-components-angular/i18n\";\n\n/**\n * Due to type error, we have to use square brackets property accessor\n * There is a webpack issue when attempting to access exported languages from flatpickr l10n Angular 14+ apps\n * languages.default[locale] fails in app consuming CCA library but passes in test\n * languages.default.default[locale] fails in test but works in app consuming CCA library.\n *\n * To please both scenarios, we are adding a condition to prevent tests from failing\n */\nif (languages.default?.default[\"en\"]?.weekdays) {\n\t(languages.default.default[\"en\"].weekdays.shorthand as string[]) = languages.default.default[\"en\"].weekdays.longhand.map(day => {\n\t\tif (day === \"Thursday\") {\n\t\t\treturn \"Th\";\n\t\t}\n\t\treturn day.charAt(0);\n\t});\n}\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { DatePickerModule } from 'carbon-components-angular';\n * ```\n *\n * [See demo](../../?path=/story/components-date-picker--single)\n */\n@Component({\n\tselector: \"cds-date-picker, ibm-date-picker\",\n\ttemplate: `\n\t<div class=\"cds--form-item\">\n\t\t<div\n\t\t\tclass=\"cds--date-picker\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--date-picker--range' : range,\n\t\t\t\t'cds--date-picker--single' : !range,\n\t\t\t\t'cds--date-picker--light' : theme === 'light',\n\t\t\t\t'cds--skeleton' : skeleton\n\t\t\t}\">\n\t\t\t<div class=\"cds--date-picker-container\">\n\t\t\t\t<cds-date-picker-input\n\t\t\t\t\t#input\n\t\t\t\t\t[label]=\"label\"\n\t\t\t\t\t[placeholder]=\"placeholder\"\n\t\t\t\t\t[pattern]=\"inputPattern\"\n\t\t\t\t\t[id]=\"id + '-input'\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[type]=\"(range ? 'range' : 'single')\"\n\t\t\t\t\t[hasIcon]=\"(range ? false : true)\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[invalid]=\"invalid\"\n\t\t\t\t\t[invalidText]=\"invalidText\"\n\t\t\t\t\t[warn]=\"warn\"\n\t\t\t\t\t[warnText]=\"warnText\"\n\t\t\t\t\t[skeleton]=\"skeleton\"\n\t\t\t\t\t[helperText]=\"helperText\"\n\t\t\t\t\t(valueChange)=\"onValueChange($event)\"\n\t\t\t\t\t(click)=\"openCalendar(input)\">\n\t\t\t\t</cds-date-picker-input>\n\t\t\t</div>\n\n\t\t\t<div *ngIf=\"range\" class=\"cds--date-picker-container\">\n\t\t\t\t<cds-date-picker-input\n\t\t\t\t\t#rangeInput\n\t\t\t\t\t[label]=\"rangeLabel\"\n\t\t\t\t\t[placeholder]=\"placeholder\"\n\t\t\t\t\t[pattern]=\"inputPattern\"\n\t\t\t\t\t[id]=\"id + '-rangeInput'\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[type]=\"(range ? 'range' : 'single')\"\n\t\t\t\t\t[hasIcon]=\"(range ? true : null)\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[invalid]=\"rangeInvalid\"\n\t\t\t\t\t[invalidText]=\"rangeInvalidText\"\n\t\t\t\t\t[warn]=\"rangeWarn\"\n\t\t\t\t\t[warnText]=\"rangeWarnText\"\n\t\t\t\t\t[skeleton]=\"skeleton\"\n\t\t\t\t\t[helperText]=\"rangeHelperText\"\n\t\t\t\t\t(valueChange)=\"onRangeValueChange($event)\"\n\t\t\t\t\t(click)=\"openCalendar(rangeInput)\">\n\t\t\t\t</cds-date-picker-input>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: DatePicker,\n\t\t\tmulti: true\n\t\t}\n\t],\n\tencapsulation: ViewEncapsulation.None\n})\nexport class DatePicker implements\n\tOnInit,\n\tOnDestroy,\n\tOnChanges,\n\tAfterViewChecked,\n\tAfterViewInit {\n\tprivate static datePickerCount = 0;\n\n\t/**\n\t * Select calendar range mode\n\t */\n\t@Input() range = false;\n\n\t/**\n\t * Format of date\n\t *\n\t * For reference: https://flatpickr.js.org/formatting/\n\t */\n\t@Input() dateFormat = \"m/d/Y\";\n\n\t/**\n\t * Language of the flatpickr calendar.\n\t *\n\t * For reference of the possible locales:\n\t * https://github.com/flatpickr/flatpickr/blob/master/src/l10n/index.ts\n\t */\n\t@Input() language = \"en\";\n\n\t@Input() label: string | TemplateRef<any>;\n\t@Input() helperText: string | TemplateRef<any>;\n\t@Input() rangeHelperText: string | TemplateRef<any>;\n\t@Input() rangeLabel: string;\n\n\t@Input() placeholder = \"mm/dd/yyyy\";\n\n\t/**\n\t * Aria label added to datepicker's calendar container.\n\t */\n\t@Input() ariaLabel = \"calendar container\";\n\n\t/**\n\t * The pattern for the underlying input element\n\t */\n\t@Input() inputPattern = \"^\\\\d{1,2}/\\\\d{1,2}/\\\\d{4}$\";\n\n\t@Input() id = `datepicker-${DatePicker.datePickerCount++}`;\n\n\t@Input() set value(v: (Date | string)[]) {\n\t\tif (!v) {\n\t\t\tv = [];\n\t\t}\n\t\tthis._value = v;\n\t}\n\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t * Set to `\"light\"` to apply the light style\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` to display the invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if datepicker 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 warningText)\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\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Set to `true` to display the invalid state for the second datepicker input.\n\t */\n\t@Input() rangeInvalid = false;\n\t/**\n\t * Value displayed if the second datepicker input is in an invalid state.\n\t */\n\t@Input() rangeInvalidText: string | TemplateRef<any>;\n\t/**\n\t * Set to `true` to show a warning in the second datepicker input (contents set by rangeWarningText)\n\t */\n\t@Input() rangeWarn = false;\n\t/**\n\t * Sets the warning text for the second datepicker input\n\t */\n\t@Input() rangeWarnText: string | TemplateRef<any>;\n\n\t@Input() skeleton = false;\n\n\t@Input() plugins = [];\n\n\t@Input()\n\tset flatpickrOptions(options) {\n\t\tthis._flatpickrOptions = Object.assign({}, this._flatpickrOptions, options);\n\t}\n\tget flatpickrOptions() {\n\t\tconst plugins = [...this.plugins, carbonFlatpickrMonthSelectPlugin];\n\t\tif (this.range) {\n\t\t\tplugins.push(rangePlugin({ input: `#${this.id}-rangeInput`, position: \"left\" }));\n\t\t}\n\t\treturn Object.assign({}, this._flatpickrOptions, this.flatpickrBaseOptions, {\n\t\t\tmode: this.range ? \"range\" : \"single\",\n\t\t\tplugins,\n\t\t\tdateFormat: this.dateFormat,\n\t\t\tlocale: languages.default?.default[this.language] || languages.default[this.language]\n\t\t});\n\t}\n\n\t@ViewChild(\"input\", { static: true }) input: DatePickerInput;\n\t@ViewChild(\"rangeInput\") rangeInput: DatePickerInput;\n\n\t@Output() valueChange: EventEmitter<any> = new EventEmitter();\n\n\t/**\n\t * We are overriding onClose event even if users pass it via flatpickr options\n\t * Emits an event when date picker closes\n\t */\n\t@Output() onClose: EventEmitter<any> = new EventEmitter();\n\n\tprotected _value = [];\n\n\tprotected _flatpickrOptions = {\n\t\tallowInput: true\n\t};\n\n\tprotected flatpickrBaseOptions = {\n\t\tmode: \"single\",\n\t\tdateFormat: \"m/d/Y\",\n\t\tplugins: this.plugins,\n\t\tonOpen: () => {\n\t\t\tthis.updateClassNames();\n\t\t\tthis.updateAttributes();\n\t\t\tthis.updateCalendarListeners();\n\t\t},\n\t\tonClose: (date) => {\n\t\t\t// This makes sure that the `flatpickrInstance selectedDates` are in sync with the values of\n\t\t\t// the inputs when the calendar closes.\n\t\t\tif (this.range && this.flatpickrInstance) {\n\t\t\t\tif (this.flatpickrInstance.selectedDates.length !== 2) {\n\t\t\t\t\t// we could `this.flatpickrInstance.clear()` but it insists on opening the second picker\n\t\t\t\t\t// in some cases, so instead we do this\n\t\t\t\t\tthis.setDateValues([]);\n\t\t\t\t\tthis.doSelect([]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst inputValue = this.input.input.nativeElement.value;\n\t\t\t\tconst rangeInputValue = this.rangeInput.input.nativeElement.value;\n\t\t\t\tif (inputValue || rangeInputValue) {\n\t\t\t\t\tconst parseDate = (date: string) => this.flatpickrInstance.parseDate(date, this.dateFormat);\n\t\t\t\t\tthis.setDateValues([parseDate(inputValue), parseDate(rangeInputValue)]);\n\t\t\t\t\tthis.doSelect(this.flatpickrInstance.selectedDates);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.onClose.emit(date);\n\t\t},\n\t\tonDayCreate: (_dObj, _dStr, _fp, dayElem) => {\n\t\t\tdayElem.classList.add(\"cds--date-picker__day\");\n\t\t},\n\t\tnextArrow: this.rightArrowHTML(),\n\t\tprevArrow: this.leftArrowHTML(),\n\t\tvalue: this.value\n\t};\n\n\tprotected flatpickrInstance = null;\n\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected i18n: I18n\n\t) { }\n\n\tngOnInit() {\n\t\t// if i18n is set to anything other than en we'll want to change the language\n\t\t// otherwise we'll just use the local setting\n\t\tif (this.i18n.getLocale() !== \"en\") {\n\t\t\tthis.i18n.getLocaleObservable().subscribe(locale => {\n\t\t\t\tthis.language = locale;\n\t\t\t\tthis.resetFlatpickrInstance();\n\t\t\t});\n\t\t}\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\t// Reset the flatpickr instance on input changes that affect flatpickr.\n\t\tconst flatpickrChangeKeys = [\n\t\t\t\"range\",\n\t\t\t\"dateFormat\",\n\t\t\t\"language\",\n\t\t\t\"id\",\n\t\t\t\"value\",\n\t\t\t\"plugins\",\n\t\t\t\"flatpickrOptions\"\n\t\t];\n\t\tconst changeKeys = Object.keys(changes);\n\t\tif (changeKeys.some(key => flatpickrChangeKeys.includes(key))) {\n\t\t\tthis.resetFlatpickrInstance(changes.value);\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t\tsetTimeout(() => {\n\t\t\tthis.addInputListeners();\n\t\t}, 0);\n\t}\n\n\t// because the actual view may be delayed in loading (think projection into a tab pane)\n\t// and because we rely on a library that operates outside the Angular view of the world\n\t// we need to keep trying to load the library, until the relevant DOM is actually live\n\tngAfterViewChecked() {\n\t\tif (!this.isFlatpickrLoaded()) {\n\t\t\t// @ts-ignore ts is unhappy with the below call to `flatpickr`\n\t\t\tthis.flatpickrInstance = flatpickr(`#${this.id}-input`, this.flatpickrOptions);\n\t\t\t// if (and only if) the initialization succeeded, we can set the date values\n\t\t\tif (this.isFlatpickrLoaded()) {\n\t\t\t\tif (this.value.length > 0) {\n\t\t\t\t\tthis.setDateValues(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t@HostListener(\"focusin\")\n\tonFocus() {\n\t\t// Updates the month manually when calendar mode is range because month\n\t\t// will not update properly without manually updating them on focus.\n\t\tif (this.range) {\n\t\t\tif (this.rangeInput.input.nativeElement === document.activeElement && this.flatpickrInstance.selectedDates[1]) {\n\t\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[1].getMonth();\n\t\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\t\t\t} else if (this.input.input.nativeElement === document.activeElement && this.flatpickrInstance.selectedDates[0]) {\n\t\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[0].getMonth();\n\t\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\t\t\t}\n\t\t}\n\t}\n\n\t@HostListener(\"focusout\")\n\tonFocusOut() {\n\t\tthis.onTouched();\n\t}\n\n\t/**\n\t * Writes a value from the model to the component. Expects the value to be `null` or `(Date | string)[]`\n\t * @param value value received from the model\n\t */\n\twriteValue(value: (Date | string)[]) {\n\t\tthis.value = value;\n\t\tsetTimeout(() => {\n\t\t\tif (this.isFlatpickrLoaded() && this.flatpickrInstance.config) {\n\t\t\t\tthis.setDateValues(this.value);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the DatePicker.\n\t *\n\t * ex: `this.formGroup.get(\"myDatePicker\").disable();`\n\t *\n\t * @param isDisabled `true` to disable the DatePicker\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouched = fn;\n\t}\n\n\tonTouched: () => any = () => { };\n\n\tpropagateChange = (_: any) => { };\n\n\t/**\n\t * Cleans up our flatpickr instance\n\t */\n\tngOnDestroy() {\n\t\tif (!this.isFlatpickrLoaded()) { return; }\n\t\tthis.flatpickrInstance.destroy();\n\t}\n\n\t/**\n\t * Handles the `valueChange` event from the primary/single input\n\t */\n\tonValueChange(event: string) {\n\t\tif (this.isFlatpickrLoaded()) {\n\t\t\tconst date = this.flatpickrInstance.parseDate(event, this.dateFormat);\n\t\t\tif (this.range) {\n\t\t\t\tthis.setDateValues([date, this.flatpickrInstance.selectedDates[1]]);\n\t\t\t} else {\n\t\t\t\tthis.setDateValues([date]);\n\t\t\t}\n\t\t\tthis.doSelect(this.flatpickrInstance.selectedDates);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the `valueChange` event from the range input\n\t */\n\tonRangeValueChange(event: string) {\n\t\tif (this.isFlatpickrLoaded() && this.flatpickrInstance.isOpen) {\n\t\t\tconst date = this.flatpickrInstance.parseDate(event, this.dateFormat);\n\t\t\tthis.setDateValues([this.flatpickrInstance.selectedDates[0], date]);\n\t\t\tthis.doSelect(this.flatpickrInstance.selectedDates);\n\t\t}\n\t}\n\n\t/**\n\t * Handles opening the calendar \"properly\" when the calendar icon is clicked.\n\t */\n\topenCalendar(datepickerInput: DatePickerInput) {\n\t\tif (this.range) {\n\t\t\tdatepickerInput.input.nativeElement.click();\n\n\t\t\t// If the first input's calendar icon is clicked when calendar is in range mode, then\n\t\t\t// the month and year needs to be manually changed to the current selected month and\n\t\t\t// year otherwise the calendar view will not be updated upon opening.\n\t\t\tif (datepickerInput === this.input && this.flatpickrInstance.selectedDates[0]) {\n\t\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[0].getMonth();\n\n\t\t\t\tthis.flatpickrInstance.currentYear = this.flatpickrInstance.selectedDates[0].getFullYear();\n\t\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\t\t\t}\n\t\t} else {\n\t\t\t// Single-mode flatpickr handles mousedown but not click, so nativeElement.click() won't\n\t\t\t// work when the calendar icon is clicked. In this case we simply use flatpickr.open().\n\t\t\tthis.flatpickrInstance.open();\n\t\t}\n\t}\n\n\tprotected updateCalendarListeners() {\n\t\tconst calendarContainer = document.querySelectorAll(\".flatpickr-calendar\");\n\t\tArray.from(calendarContainer).forEach(calendar => {\n\t\t\tcalendar.removeEventListener(\"click\", this.preventCalendarClose);\n\t\t\tcalendar.addEventListener(\"click\", this.preventCalendarClose);\n\t\t});\n\t}\n\n\t/**\n\t * Handles the initialization of event listeners for the datepicker input and range input fields.\n\t */\n\tprotected addInputListeners() {\n\t\tif (!this.isFlatpickrLoaded()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Allows focus transition from the datepicker input or range input field to\n\t\t// flatpickr calendar using a keyboard.\n\t\tconst addFocusCalendarListener = (element: HTMLInputElement) => {\n\t\t\telement.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n\t\t\t\tif (event.key === \"Escape\") {\n\t\t\t\t\tthis.flatpickrInstance.close();\n\t\t\t\t}\n\t\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\t\tif (!this.flatpickrInstance.isOpen) {\n\t\t\t\t\t\tthis.flatpickrInstance.open();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst calendarContainer = this.flatpickrInstance.calendarContainer;\n\t\t\t\t\tconst dayElement = calendarContainer && calendarContainer.querySelector(\".flatpickr-day[tabindex]\");\n\n\t\t\t\t\tif (dayElement) {\n\t\t\t\t\t\tdayElement.focus();\n\n\t\t\t\t\t\t// If the user manually inputs a value into the date field and presses arrow down,\n\t\t\t\t\t\t// datepicker input onchange will be triggered when focus is removed from it and\n\t\t\t\t\t\t// `flatpickrInstance.setDate` and `flatpickrInstance.changeMonth` will be invoked\n\t\t\t\t\t\t// which will automatically change focus to the beginning of the document.\n\t\t\t\t\t\tif (document.activeElement !== dayElement && this.flatpickrInstance.selectedDateElem) {\n\t\t\t\t\t\t\tthis.flatpickrInstance.selectedDateElem.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tif (this.input && this.input.input) {\n\t\t\taddFocusCalendarListener(this.input.input.nativeElement);\n\t\t}\n\n\t\tif (this.rangeInput && this.rangeInput.input) {\n\t\t\taddFocusCalendarListener(this.rangeInput.input.nativeElement);\n\t\t}\n\t}\n\n\t/**\n\t * Resets the flatpickr instance while keeping the date values (or updating them if newDates is provided)\n\t *\n\t * Used to pick up input changes or locale changes.\n\t *\n\t * @param newDates An optional SimpleChange of date values\n\t */\n\tprotected resetFlatpickrInstance(newDates?: SimpleChange) {\n\t\tif (this.isFlatpickrLoaded()) {\n\t\t\tlet dates = this.flatpickrInstance.selectedDates;\n\t\t\tif (newDates && this.didDateValueChange(newDates.currentValue, newDates.previousValue)) {\n\t\t\t\tdates = newDates.currentValue;\n\t\t\t}\n\t\t\t// only reset the flatpickr instance on Input changes\n\t\t\t// @ts-ignore ts is unhappy with the below call to `flatpickr`\n\t\t\tthis.flatpickrInstance = flatpickr(`#${this.id}-input`, this.flatpickrOptions);\n\t\t\tthis.setDateValues(dates);\n\t\t}\n\t}\n\n\t/**\n\t * Carbon uses a number of specific classnames for parts of the flatpickr - this idempotent method applies them if needed.\n\t */\n\tprotected updateClassNames() {\n\t\tif (!this.elementRef) { return; }\n\t\t// get all the possible flatpickrs in the document - we need to add classes to (potentially) all of them\n\t\tconst calendarContainer = document.querySelectorAll(\".flatpickr-calendar\");\n\t\tconst monthContainer = document.querySelectorAll(\".flatpickr-month\");\n\t\tconst weekdaysContainer = document.querySelectorAll(\".flatpickr-weekdays\");\n\t\tconst weekdayContainer = document.querySelectorAll(\".flatpickr-weekday\");\n\t\tconst daysContainer = document.querySelectorAll(\".flatpickr-days\");\n\t\tconst dayContainer = document.querySelectorAll(\".flatpickr-day\");\n\n\t\t// add classes to lists of elements\n\t\tconst addClassIfNotExists = (classname: string, elementList: NodeListOf<Element>) => {\n\t\t\tArray.from(elementList).forEach(element => {\n\t\t\t\tif (!element.classList.contains(classname)) {\n\t\t\t\t\telement.classList.add(classname);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// add classes (but only if they don't exist, small perf win)\n\t\taddClassIfNotExists(\"cds--date-picker__calendar\", calendarContainer);\n\t\taddClassIfNotExists(\"cds--date-picker__month\", monthContainer);\n\t\taddClassIfNotExists(\"cds--date-picker__weekdays\", weekdaysContainer);\n\t\taddClassIfNotExists(\"cds--date-picker__days\", daysContainer);\n\n\t\t// add weekday classes and format the text\n\t\tArray.from(weekdayContainer).forEach(element => {\n\t\t\telement.innerHTML = element.innerHTML.replace(/\\s+/g, \"\");\n\t\t\telement.classList.add(\"cds--date-picker__weekday\");\n\t\t});\n\n\t\t// add day classes and special case the \"today\" element based on `this.value`\n\t\tArray.from(dayContainer).forEach(element => {\n\t\t\telement.classList.add(\"cds--date-picker__day\");\n\t\t\tif (!this.value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (element.classList.contains(\"today\") && this.value.length > 0) {\n\t\t\t\telement.classList.add(\"no-border\");\n\t\t\t} else if (element.classList.contains(\"today\") && this.value.length === 0) {\n\t\t\t\telement.classList.remove(\"no-border\");\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected updateAttributes() {\n\t\tconst calendarContainer = document.querySelectorAll(\".flatpickr-calendar\");\n\t\tArray.from(calendarContainer).forEach(calendar => {\n\t\t\tcalendar.setAttribute(\"role\", \"region\");\n\t\t\tcalendar.setAttribute(\"aria-label\", this.ariaLabel);\n\t\t});\n\t}\n\n\t/**\n\t * Applies the given date value array to both the flatpickr instance and the `input`(s)\n\t * @param dates the date values to apply\n\t */\n\tprotected setDateValues(dates: (Date | string)[]) {\n\t\tif (this.isFlatpickrLoaded()) {\n\t\t\tconst singleInput = this.elementRef.nativeElement.querySelector(`#${this.id}-input`);\n\t\t\tconst rangeInput = this.elementRef.nativeElement.querySelector(`#${this.id}-rangeInput`);\n\n\t\t\t// `flatpickrInstance.setDate` removes the focus on the selected date element and will\n\t\t\t// automatically change focus to the beginning of the document. If a selected date is\n\t\t\t// focused before `flatpickrInstance.setDate` is invoked then it should remain focused.\n\t\t\tlet shouldRefocusDateElement = this.flatpickrInstance.selectedDateElem === document.activeElement;\n\n\t\t\t// set the date on the instance\n\t\t\tthis.flatpickrInstance.setDate(dates);\n\n\t\t\tif (shouldRefocusDateElement) {\n\t\t\t\tthis.flatpickrInstance.selectedDateElem.focus();\n\t\t\t}\n\n\t\t\t// we can either set a date value or an empty string, so we start with an empty string\n\t\t\tlet singleDate = \"\";\n\t\t\t// if date is a string, parse and format\n\t\t\tif (typeof this.flatpickrInstance.selectedDates[0] === \"string\") {\n\t\t\t\tsingleDate = this.flatpickrInstance.parseDate(this.flatpickrInstance.selectedDates[0], this.dateFormat);\n\t\t\t\tsingleDate = this.flatpickrInstance.formatDate(singleDate, this.dateFormat);\n\t\t\t// if date is not a string we can assume it's a Date and we should format\n\t\t\t} else if (!!this.flatpickrInstance.selectedDates[0]) {\n\t\t\t\tsingleDate = this.flatpickrInstance.formatDate(this.flatpickrInstance.selectedDates[0], this.dateFormat);\n\t\t\t}\n\n\t\t\tif (rangeInput) {\n\t\t\t\t// we can either set a date value or an empty string, so we start with an empty string\n\t\t\t\tlet rangeDate = \"\";\n\t\t\t\t// if date is a string, parse and format\n\t\t\t\tif (typeof this.flatpickrInstance.selectedDates[1] === \"string\") {\n\t\t\t\t\trangeDate = this.flatpickrInstance.parseDate(this.flatpickrInstance.selectedDates[1].toString(), this.dateFormat);\n\t\t\t\t\trangeDate = this.flatpickrInstance.formatDate(rangeDate, this.dateFormat);\n\t\t\t\t// if date is not a string we can assume it's a Date and we should format\n\t\t\t\t} else if (!!this.flatpickrInstance.selectedDates[1]) {\n\t\t\t\t\trangeDate = this.flatpickrInstance.formatDate(this.flatpickrInstance.selectedDates[1], this.dateFormat);\n\t\t\t\t}\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// apply the values\n\t\t\t\t\trangeInput.value = rangeDate;\n\t\t\t\t\tsingleInput.value = singleDate;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected preventCalendarClose = event => event.stopPropagation();\n\n\tprotected doSelect(selectedValue: (Date | string)[]) {\n\t\t// In range mode, if a date is selected from the first calendar that is from the previous month,\n\t\t// the month will not be updated on the calendar until the calendar is re-opened.\n\t\t// This will make sure the calendar is updated with the correct month.\n\t\tif (this.range && this.flatpickrInstance.selectedDates[0]) {\n\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[0].getMonth();\n\n\t\t\t// `flatpickrInstance.changeMonth` removes the focus on the selected date element and will\n\t\t\t// automatically change focus to the beginning of the document. If a selected date is\n\t\t\t// focused before `flatpickrInstance.changeMonth` is invoked then it should remain focused.\n\t\t\tlet shouldRefocusDateElement = this.flatpickrInstance.selectedDateElem === document.activeElement;\n\n\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\n\t\t\tif (shouldRefocusDateElement) {\n\t\t\t\tthis.flatpickrInstance.selectedDateElem.focus();\n\t\t\t}\n\n\t\t}\n\t\tthis.valueChange.emit(selectedValue);\n\t\tthis.propagateChange(selectedValue);\n\t}\n\n\tprotected didDateValueChange(currentValue, previousValue) {\n\t\treturn currentValue[0] !== previousValue[0] || currentValue[1] !== previousValue[1];\n\t}\n\n\t/**\n\t * More advanced checking of the loaded state of flatpickr\n\t */\n\tprotected isFlatpickrLoaded() {\n\t\t// cast the instance to a boolean, and some method that has to exist for the library to be loaded in this case `setDate`\n\t\treturn !!this.flatpickrInstance && !!this.flatpickrInstance.setDate;\n\t}\n\n\t/**\n\t * Right arrow HTML passed to flatpickr\n\t */\n\tprotected rightArrowHTML() {\n\t\treturn `\n\t\t\t<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n\t\t\t\t<polygon points=\"11,8 6,13 5.3,12.3 9.6,8 5.3,3.7 6,3 \"/>\n\t\t\t\t<rect width=\"16\" height=\"16\" style=\"fill:none\" />\n\t\t\t</svg>`;\n\t}\n\n\t/**\n\t * Left arrow HTML passed to flatpickr\n\t */\n\tprotected leftArrowHTML() {\n\t\treturn `\n\t\t\t<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n\t\t\t\t<polygon points=\"5,8 10,3 10.7,3.7 6.4,8 10.7,12.3 10,13 \"/>\n\t\t\t\t<rect width=\"16\" height=\"16\" style=\"fill:none\" />\n\t\t\t</svg>`;\n\t}\n}\n","import { DatePickerInputModule } from \"carbon-components-angular/datepicker-input\";\nimport { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { DatePicker } from \"./datepicker.component\";\nimport { UtilsModule } from \"carbon-components-angular/utils\";\nimport { I18nModule } from \"carbon-components-angular/i18n\";\n\n@NgModule({\n\tdeclarations: [\n\t\tDatePicker\n\t],\n\texports: [\n\t\tDatePicker,\n\t\tDatePickerInputModule\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tDatePickerInputModule,\n\t\tUtilsModule,\n\t\tI18nModule\n\t]\n})\nexport class DatePickerModule { }\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-datepicker.mjs","sources":["../../src/datepicker/carbon-flatpickr-month-select.ts","../../src/datepicker/datepicker.component.ts","../../src/datepicker/datepicker.module.ts","../../src/datepicker/carbon-components-angular-datepicker.ts"],"sourcesContent":["/**\n * This is from carbon-components.\n * We need it to format the month select according to specs.\n * Carbon currently doesn't expose this as a seperate package,\n * and we don't import the carbon-components js (on purpose)\n * so some copy pasta is required\n *\n * ref: https://github.com/carbon-design-system/carbon/blob/\n * \tf06f38f0c2ef624e409a3d5711e897a79f4c88fc/packages/components/src/components/date-picker/date-picker.js#L52-L123\n */\n\nconst monthToStr = (monthNumber, shorthand, locale) =>\n\tlocale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber];\n\nconst config = {\n\tselectorInit: \"[data-date-picker]\",\n\tselectorDatePickerInput: \"[data-date-picker-input]\",\n\tselectorDatePickerInputFrom: \"[data-date-picker-input-from]\",\n\tselectorDatePickerInputTo: \"[data-date-picker-input-to]\",\n\tselectorDatePickerIcon: \"[data-date-picker-icon]\",\n\tselectorFlatpickrMonthYearContainer: \".flatpickr-current-month\",\n\tselectorFlatpickrYearContainer: \".numInputWrapper\",\n\tselectorFlatpickrCurrentMonth: \".cur-month\",\n\tclassCalendarContainer: `cds--date-picker__calendar`,\n\tclassMonth: `cds--date-picker__month`,\n\tclassWeekdays: `cds--date-picker__weekdays`,\n\tclassDays: `cds--date-picker__days`,\n\tclassWeekday: `cds--date-picker__weekday`,\n\tclassDay: `cds--date-picker__day`,\n\tclassFocused: `cds--focused`,\n\tclassVisuallyHidden: `cds--visually-hidden`,\n\tclassFlatpickrCurrentMonth: \"cur-month\",\n\tattribType: \"data-date-picker-type\",\n\tdateFormat: \"m/d/Y\",\n\tshorthand: false\n};\n\nexport const carbonFlatpickrMonthSelectPlugin = fp => {\n\tconst setupElements = () => {\n\t\tif (!fp.monthElements || !fp.yearElements) {\n\t\t\treturn;\n\t\t}\n\t\tfp.monthElements.forEach(elem => {\n\t\t\tif (!elem.parentNode) { return; }\n\t\t\telem.parentNode.removeChild(elem);\n\t\t});\n\t\tfp.monthElements.splice(\n\t\t\t0,\n\t\t\tfp.monthElements.length,\n\t\t\t...fp.monthElements.map(() => {\n\t\t\t\t// eslint-disable-next-line no-underscore-dangle\n\t\t\t\tconst monthElement = fp._createElement(\n\t\t\t\t\t\"span\",\n\t\t\t\t\tconfig.classFlatpickrCurrentMonth\n\t\t\t\t);\n\t\t\t\tmonthElement.textContent = monthToStr(\n\t\t\t\t\tfp.currentMonth,\n\t\t\t\t\tconfig.shorthand === true,\n\t\t\t\t\tfp.l10n\n\t\t\t\t);\n\t\t\t\tfp.yearElements[0]\n\t\t\t\t\t.closest(config.selectorFlatpickrMonthYearContainer)\n\t\t\t\t\t.insertBefore(\n\t\t\t\t\t\tmonthElement,\n\t\t\t\t\t\tfp.yearElements[0].closest(config.selectorFlatpickrYearContainer)\n\t\t\t\t\t);\n\t\t\t\treturn monthElement;\n\t\t\t})\n\t\t);\n\t};\n\tconst updateCurrentMonth = () => {\n\t\tif (!fp.yearElements) {\n\t\t\treturn;\n\t\t}\n\t\tconst monthStr = monthToStr(\n\t\t\tfp.currentMonth,\n\t\t\tconfig.shorthand === true,\n\t\t\tfp.l10n\n\t\t);\n\t\tfp.yearElements.forEach(elem => {\n\t\t\tconst currentMonthContainer = elem.closest(\n\t\t\t\tconfig.selectorFlatpickrMonthYearContainer\n\t\t\t);\n\t\t\tArray.prototype.forEach.call(\n\t\t\t\tcurrentMonthContainer.querySelectorAll(\".cur-month\"),\n\t\t\t\tmonthElement => {\n\t\t\t\t\tmonthElement.textContent = monthStr;\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t};\n\n\tconst register = () => {\n\t\tfp.loadedPlugins.push(\"carbonFlatpickrMonthSelectPlugin\");\n\t};\n\n\treturn {\n\t\tonMonthChange: updateCurrentMonth,\n\t\tonValueUpdate: updateCurrentMonth,\n\t\tonOpen: updateCurrentMonth,\n\t\tonReady: [setupElements, updateCurrentMonth, register]\n\t};\n};\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tViewEncapsulation,\n\tElementRef,\n\tOnDestroy,\n\tHostListener,\n\tTemplateRef,\n\tOnChanges,\n\tSimpleChanges,\n\tAfterViewChecked,\n\tAfterViewInit,\n\tViewChild,\n\tOnInit,\n\tSimpleChange\n} from \"@angular/core\";\nimport rangePlugin from \"flatpickr/dist/plugins/rangePlugin\";\nimport flatpickr from \"flatpickr\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { carbonFlatpickrMonthSelectPlugin } from \"./carbon-flatpickr-month-select\";\nimport * as languages from \"flatpickr/dist/l10n/index\";\nimport { Options } from \"flatpickr/dist/types/options\";\nimport { DatePickerInput } from \"carbon-components-angular/datepicker-input\";\nimport { I18n } from \"carbon-components-angular/i18n\";\n\n/**\n * Due to type error, we have to use square brackets property accessor\n * There is a webpack issue when attempting to access exported languages from flatpickr l10n Angular 14+ apps\n * languages.default[locale] fails in app consuming CCA library but passes in test\n * languages.default.default[locale] fails in test but works in app consuming CCA library.\n *\n * To please both scenarios, we are adding a condition to prevent tests from failing\n */\nif (languages.default?.default[\"en\"]?.weekdays) {\n\t(languages.default.default[\"en\"].weekdays.shorthand as string[]) = languages.default.default[\"en\"].weekdays.longhand.map(day => {\n\t\tif (day === \"Thursday\") {\n\t\t\treturn \"Th\";\n\t\t}\n\t\treturn day.charAt(0);\n\t});\n}\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { DatePickerModule } from 'carbon-components-angular';\n * ```\n *\n * [See demo](../../?path=/story/components-date-picker--single)\n */\n@Component({\n\tselector: \"cds-date-picker, ibm-date-picker\",\n\ttemplate: `\n\t<div class=\"cds--form-item\">\n\t\t<div\n\t\t\tclass=\"cds--date-picker\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--date-picker--range' : range,\n\t\t\t\t'cds--date-picker--single' : !range,\n\t\t\t\t'cds--date-picker--light' : theme === 'light',\n\t\t\t\t'cds--skeleton' : skeleton\n\t\t\t}\">\n\t\t\t<div class=\"cds--date-picker-container\">\n\t\t\t\t<cds-date-picker-input\n\t\t\t\t\t#input\n\t\t\t\t\t[label]=\"label\"\n\t\t\t\t\t[placeholder]=\"placeholder\"\n\t\t\t\t\t[pattern]=\"inputPattern\"\n\t\t\t\t\t[id]=\"id + '-input'\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[type]=\"(range ? 'range' : 'single')\"\n\t\t\t\t\t[hasIcon]=\"(range ? false : true)\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[invalid]=\"invalid\"\n\t\t\t\t\t[invalidText]=\"invalidText\"\n\t\t\t\t\t[warn]=\"warn\"\n\t\t\t\t\t[warnText]=\"warnText\"\n\t\t\t\t\t[skeleton]=\"skeleton\"\n\t\t\t\t\t[helperText]=\"helperText\"\n\t\t\t\t\t(valueChange)=\"onValueChange($event)\"\n\t\t\t\t\t(click)=\"openCalendar(input)\">\n\t\t\t\t</cds-date-picker-input>\n\t\t\t</div>\n\n\t\t\t<div *ngIf=\"range\" class=\"cds--date-picker-container\">\n\t\t\t\t<cds-date-picker-input\n\t\t\t\t\t#rangeInput\n\t\t\t\t\t[label]=\"rangeLabel\"\n\t\t\t\t\t[placeholder]=\"placeholder\"\n\t\t\t\t\t[pattern]=\"inputPattern\"\n\t\t\t\t\t[id]=\"id + '-rangeInput'\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[type]=\"(range ? 'range' : 'single')\"\n\t\t\t\t\t[hasIcon]=\"(range ? true : null)\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[invalid]=\"rangeInvalid\"\n\t\t\t\t\t[invalidText]=\"rangeInvalidText\"\n\t\t\t\t\t[warn]=\"rangeWarn\"\n\t\t\t\t\t[warnText]=\"rangeWarnText\"\n\t\t\t\t\t[skeleton]=\"skeleton\"\n\t\t\t\t\t[helperText]=\"rangeHelperText\"\n\t\t\t\t\t(valueChange)=\"onRangeValueChange($event)\"\n\t\t\t\t\t(click)=\"openCalendar(rangeInput)\">\n\t\t\t\t</cds-date-picker-input>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: DatePicker,\n\t\t\tmulti: true\n\t\t}\n\t],\n\tencapsulation: ViewEncapsulation.None\n})\nexport class DatePicker implements\n\tOnInit,\n\tOnDestroy,\n\tOnChanges,\n\tAfterViewChecked,\n\tAfterViewInit {\n\tprivate static datePickerCount = 0;\n\n\t/**\n\t * Select calendar range mode\n\t */\n\t@Input() range = false;\n\n\t/**\n\t * Format of date\n\t *\n\t * For reference: https://flatpickr.js.org/formatting/\n\t */\n\t@Input() dateFormat = \"m/d/Y\";\n\n\t/**\n\t * Language of the flatpickr calendar.\n\t *\n\t * For reference of the possible locales:\n\t * https://github.com/flatpickr/flatpickr/blob/master/src/l10n/index.ts\n\t */\n\t@Input() language = \"en\";\n\n\t@Input() label: string | TemplateRef<any>;\n\t@Input() helperText: string | TemplateRef<any>;\n\t@Input() rangeHelperText: string | TemplateRef<any>;\n\t@Input() rangeLabel: string;\n\n\t@Input() placeholder = \"mm/dd/yyyy\";\n\n\t/**\n\t * Aria label added to datepicker's calendar container.\n\t */\n\t@Input() ariaLabel = \"calendar container\";\n\n\t/**\n\t * The pattern for the underlying input element\n\t */\n\t@Input() inputPattern = \"^\\\\d{1,2}/\\\\d{1,2}/\\\\d{4}$\";\n\n\t@Input() id = `datepicker-${DatePicker.datePickerCount++}`;\n\n\t@Input() set value(v: (Date | string)[]) {\n\t\tif (!v) {\n\t\t\tv = [];\n\t\t}\n\t\tthis._value = v;\n\t}\n\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t * Set to `\"light\"` to apply the light style\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` to display the invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if datepicker 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 warningText)\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\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Set to `true` to display the invalid state for the second datepicker input.\n\t */\n\t@Input() rangeInvalid = false;\n\t/**\n\t * Value displayed if the second datepicker input is in an invalid state.\n\t */\n\t@Input() rangeInvalidText: string | TemplateRef<any>;\n\t/**\n\t * Set to `true` to show a warning in the second datepicker input (contents set by rangeWarningText)\n\t */\n\t@Input() rangeWarn = false;\n\t/**\n\t * Sets the warning text for the second datepicker input\n\t */\n\t@Input() rangeWarnText: string | TemplateRef<any>;\n\n\t@Input() skeleton = false;\n\n\t@Input() plugins = [];\n\n\t@Input()\n\tset flatpickrOptions(options: Partial<Options>) {\n\t\tthis._flatpickrOptions = Object.assign({}, this._flatpickrOptions, options);\n\t}\n\tget flatpickrOptions(): Partial<Options> {\n\t\tconst plugins = [...this.plugins, carbonFlatpickrMonthSelectPlugin];\n\t\tif (this.range) {\n\t\t\tplugins.push(rangePlugin({ input: `#${this.id}-rangeInput`, position: \"left\" }));\n\t\t}\n\t\treturn Object.assign({}, this._flatpickrOptions, this.flatpickrBaseOptions, {\n\t\t\tmode: this.range ? \"range\" : \"single\",\n\t\t\tplugins,\n\t\t\tdateFormat: this.dateFormat,\n\t\t\tlocale: languages.default?.default[this.language] || languages.default[this.language]\n\t\t});\n\t}\n\n\t@ViewChild(\"input\", { static: true }) input: DatePickerInput;\n\t@ViewChild(\"rangeInput\") rangeInput: DatePickerInput;\n\n\t@Output() valueChange: EventEmitter<any> = new EventEmitter();\n\n\t/**\n\t * We are overriding onClose event even if users pass it via flatpickr options\n\t * Emits an event when date picker closes\n\t */\n\t@Output() onClose: EventEmitter<any> = new EventEmitter();\n\n\tprotected _value = [];\n\n\tprotected _flatpickrOptions: Partial<Options> = {\n\t\tallowInput: true\n\t};\n\n\tprotected flatpickrBaseOptions = {\n\t\tmode: \"single\",\n\t\tdateFormat: \"m/d/Y\",\n\t\tplugins: this.plugins,\n\t\tonOpen: () => {\n\t\t\tthis.updateClassNames();\n\t\t\tthis.updateAttributes();\n\t\t\tthis.updateCalendarListeners();\n\t\t},\n\t\tonClose: (date) => {\n\t\t\t// This makes sure that the `flatpickrInstance selectedDates` are in sync with the values of\n\t\t\t// the inputs when the calendar closes.\n\t\t\tif (this.range && this.flatpickrInstance) {\n\t\t\t\tif (this.flatpickrInstance.selectedDates.length !== 2) {\n\t\t\t\t\t// we could `this.flatpickrInstance.clear()` but it insists on opening the second picker\n\t\t\t\t\t// in some cases, so instead we do this\n\t\t\t\t\tthis.setDateValues([]);\n\t\t\t\t\tthis.doSelect([]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst inputValue = this.input.input.nativeElement.value;\n\t\t\t\tconst rangeInputValue = this.rangeInput.input.nativeElement.value;\n\t\t\t\tif (inputValue || rangeInputValue) {\n\t\t\t\t\tconst parseDate = (date: string) => this.flatpickrInstance.parseDate(date, this.dateFormat);\n\t\t\t\t\tthis.setDateValues([parseDate(inputValue), parseDate(rangeInputValue)]);\n\t\t\t\t\tthis.doSelect(this.flatpickrInstance.selectedDates);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.onClose.emit(date);\n\t\t},\n\t\tonDayCreate: (_dObj, _dStr, _fp, dayElem) => {\n\t\t\tdayElem.classList.add(\"cds--date-picker__day\");\n\t\t},\n\t\tnextArrow: this.rightArrowHTML(),\n\t\tprevArrow: this.leftArrowHTML(),\n\t\tvalue: this.value\n\t};\n\n\tprotected flatpickrInstance = null;\n\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected i18n: I18n\n\t) { }\n\n\tngOnInit() {\n\t\t// if i18n is set to anything other than en we'll want to change the language\n\t\t// otherwise we'll just use the local setting\n\t\tif (this.i18n.getLocale() !== \"en\") {\n\t\t\tthis.i18n.getLocaleObservable().subscribe(locale => {\n\t\t\t\tthis.language = locale;\n\t\t\t\tthis.resetFlatpickrInstance();\n\t\t\t});\n\t\t}\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\t// Reset the flatpickr instance on input changes that affect flatpickr.\n\t\tconst flatpickrChangeKeys = [\n\t\t\t\"range\",\n\t\t\t\"dateFormat\",\n\t\t\t\"language\",\n\t\t\t\"id\",\n\t\t\t\"value\",\n\t\t\t\"plugins\",\n\t\t\t\"flatpickrOptions\"\n\t\t];\n\t\tconst changeKeys = Object.keys(changes);\n\t\tif (changeKeys.some(key => flatpickrChangeKeys.includes(key))) {\n\t\t\tthis.resetFlatpickrInstance(changes.value);\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t\tsetTimeout(() => {\n\t\t\tthis.addInputListeners();\n\t\t}, 0);\n\t}\n\n\t// because the actual view may be delayed in loading (think projection into a tab pane)\n\t// and because we rely on a library that operates outside the Angular view of the world\n\t// we need to keep trying to load the library, until the relevant DOM is actually live\n\tngAfterViewChecked() {\n\t\tif (!this.isFlatpickrLoaded()) {\n\t\t\t// @ts-ignore ts is unhappy with the below call to `flatpickr`\n\t\t\tthis.flatpickrInstance = flatpickr(`#${this.id}-input`, this.flatpickrOptions);\n\t\t\t// if (and only if) the initialization succeeded, we can set the date values\n\t\t\tif (this.isFlatpickrLoaded()) {\n\t\t\t\tif (this.value.length > 0) {\n\t\t\t\t\tthis.setDateValues(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t@HostListener(\"focusin\")\n\tonFocus() {\n\t\t// Updates the month manually when calendar mode is range because month\n\t\t// will not update properly without manually updating them on focus.\n\t\tif (this.range) {\n\t\t\tif (this.rangeInput.input.nativeElement === document.activeElement && this.flatpickrInstance.selectedDates[1]) {\n\t\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[1].getMonth();\n\t\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\t\t\t} else if (this.input.input.nativeElement === document.activeElement && this.flatpickrInstance.selectedDates[0]) {\n\t\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[0].getMonth();\n\t\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\t\t\t}\n\t\t}\n\t}\n\n\t@HostListener(\"focusout\")\n\tonFocusOut() {\n\t\tthis.onTouched();\n\t}\n\n\t/**\n\t * Writes a value from the model to the component. Expects the value to be `null` or `(Date | string)[]`\n\t * @param value value received from the model\n\t */\n\twriteValue(value: (Date | string)[]) {\n\t\tthis.value = value;\n\t\tsetTimeout(() => {\n\t\t\tif (this.isFlatpickrLoaded() && this.flatpickrInstance.config) {\n\t\t\t\tthis.setDateValues(this.value);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the DatePicker.\n\t *\n\t * ex: `this.formGroup.get(\"myDatePicker\").disable();`\n\t *\n\t * @param isDisabled `true` to disable the DatePicker\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouched = fn;\n\t}\n\n\tonTouched: () => any = () => { };\n\n\tpropagateChange = (_: any) => { };\n\n\t/**\n\t * Cleans up our flatpickr instance\n\t */\n\tngOnDestroy() {\n\t\tif (!this.isFlatpickrLoaded()) { return; }\n\t\tthis.flatpickrInstance.destroy();\n\t}\n\n\t/**\n\t * Handles the `valueChange` event from the primary/single input\n\t */\n\tonValueChange(event: string) {\n\t\tif (this.isFlatpickrLoaded()) {\n\t\t\tconst date = this.flatpickrInstance.parseDate(event, this.dateFormat);\n\t\t\tif (this.range) {\n\t\t\t\tthis.setDateValues([date, this.flatpickrInstance.selectedDates[1]]);\n\t\t\t} else {\n\t\t\t\tthis.setDateValues([date]);\n\t\t\t}\n\t\t\tthis.doSelect(this.flatpickrInstance.selectedDates);\n\t\t}\n\t}\n\n\t/**\n\t * Handles the `valueChange` event from the range input\n\t */\n\tonRangeValueChange(event: string) {\n\t\tif (this.isFlatpickrLoaded() && this.flatpickrInstance.isOpen) {\n\t\t\tconst date = this.flatpickrInstance.parseDate(event, this.dateFormat);\n\t\t\tthis.setDateValues([this.flatpickrInstance.selectedDates[0], date]);\n\t\t\tthis.doSelect(this.flatpickrInstance.selectedDates);\n\t\t}\n\t}\n\n\t/**\n\t * Handles opening the calendar \"properly\" when the calendar icon is clicked.\n\t */\n\topenCalendar(datepickerInput: DatePickerInput) {\n\t\tif (this.range) {\n\t\t\tdatepickerInput.input.nativeElement.click();\n\n\t\t\t// If the first input's calendar icon is clicked when calendar is in range mode, then\n\t\t\t// the month and year needs to be manually changed to the current selected month and\n\t\t\t// year otherwise the calendar view will not be updated upon opening.\n\t\t\tif (datepickerInput === this.input && this.flatpickrInstance.selectedDates[0]) {\n\t\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[0].getMonth();\n\n\t\t\t\tthis.flatpickrInstance.currentYear = this.flatpickrInstance.selectedDates[0].getFullYear();\n\t\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\t\t\t}\n\t\t} else {\n\t\t\t// Single-mode flatpickr handles mousedown but not click, so nativeElement.click() won't\n\t\t\t// work when the calendar icon is clicked. In this case we simply use flatpickr.open().\n\t\t\tthis.flatpickrInstance.open();\n\t\t}\n\t}\n\n\tprotected updateCalendarListeners() {\n\t\tconst calendarContainer = document.querySelectorAll(\".flatpickr-calendar\");\n\t\tArray.from(calendarContainer).forEach(calendar => {\n\t\t\tcalendar.removeEventListener(\"click\", this.preventCalendarClose);\n\t\t\tcalendar.addEventListener(\"click\", this.preventCalendarClose);\n\t\t});\n\t}\n\n\t/**\n\t * Handles the initialization of event listeners for the datepicker input and range input fields.\n\t */\n\tprotected addInputListeners() {\n\t\tif (!this.isFlatpickrLoaded()) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Allows focus transition from the datepicker input or range input field to\n\t\t// flatpickr calendar using a keyboard.\n\t\tconst addFocusCalendarListener = (element: HTMLInputElement) => {\n\t\t\telement.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n\t\t\t\tif (event.key === \"Escape\") {\n\t\t\t\t\tthis.flatpickrInstance.close();\n\t\t\t\t}\n\t\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\t\tif (!this.flatpickrInstance.isOpen) {\n\t\t\t\t\t\tthis.flatpickrInstance.open();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst calendarContainer = this.flatpickrInstance.calendarContainer;\n\t\t\t\t\tconst dayElement = calendarContainer && calendarContainer.querySelector(\".flatpickr-day[tabindex]\");\n\n\t\t\t\t\tif (dayElement) {\n\t\t\t\t\t\tdayElement.focus();\n\n\t\t\t\t\t\t// If the user manually inputs a value into the date field and presses arrow down,\n\t\t\t\t\t\t// datepicker input onchange will be triggered when focus is removed from it and\n\t\t\t\t\t\t// `flatpickrInstance.setDate` and `flatpickrInstance.changeMonth` will be invoked\n\t\t\t\t\t\t// which will automatically change focus to the beginning of the document.\n\t\t\t\t\t\tif (document.activeElement !== dayElement && this.flatpickrInstance.selectedDateElem) {\n\t\t\t\t\t\t\tthis.flatpickrInstance.selectedDateElem.focus();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tif (this.input && this.input.input) {\n\t\t\taddFocusCalendarListener(this.input.input.nativeElement);\n\t\t}\n\n\t\tif (this.rangeInput && this.rangeInput.input) {\n\t\t\taddFocusCalendarListener(this.rangeInput.input.nativeElement);\n\t\t}\n\t}\n\n\t/**\n\t * Resets the flatpickr instance while keeping the date values (or updating them if newDates is provided)\n\t *\n\t * Used to pick up input changes or locale changes.\n\t *\n\t * @param newDates An optional SimpleChange of date values\n\t */\n\tprotected resetFlatpickrInstance(newDates?: SimpleChange) {\n\t\tif (this.isFlatpickrLoaded()) {\n\t\t\tlet dates = this.flatpickrInstance.selectedDates;\n\t\t\tif (newDates && this.didDateValueChange(newDates.currentValue, newDates.previousValue)) {\n\t\t\t\tdates = newDates.currentValue;\n\t\t\t}\n\t\t\t// only reset the flatpickr instance on Input changes\n\t\t\t// @ts-ignore ts is unhappy with the below call to `flatpickr`\n\t\t\tthis.flatpickrInstance = flatpickr(`#${this.id}-input`, this.flatpickrOptions);\n\t\t\tthis.setDateValues(dates);\n\t\t}\n\t}\n\n\t/**\n\t * Carbon uses a number of specific classnames for parts of the flatpickr - this idempotent method applies them if needed.\n\t */\n\tprotected updateClassNames() {\n\t\tif (!this.elementRef) { return; }\n\t\t// get all the possible flatpickrs in the document - we need to add classes to (potentially) all of them\n\t\tconst calendarContainer = document.querySelectorAll(\".flatpickr-calendar\");\n\t\tconst monthContainer = document.querySelectorAll(\".flatpickr-month\");\n\t\tconst weekdaysContainer = document.querySelectorAll(\".flatpickr-weekdays\");\n\t\tconst weekdayContainer = document.querySelectorAll(\".flatpickr-weekday\");\n\t\tconst daysContainer = document.querySelectorAll(\".flatpickr-days\");\n\t\tconst dayContainer = document.querySelectorAll(\".flatpickr-day\");\n\n\t\t// add classes to lists of elements\n\t\tconst addClassIfNotExists = (classname: string, elementList: NodeListOf<Element>) => {\n\t\t\tArray.from(elementList).forEach(element => {\n\t\t\t\tif (!element.classList.contains(classname)) {\n\t\t\t\t\telement.classList.add(classname);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// add classes (but only if they don't exist, small perf win)\n\t\taddClassIfNotExists(\"cds--date-picker__calendar\", calendarContainer);\n\t\taddClassIfNotExists(\"cds--date-picker__month\", monthContainer);\n\t\taddClassIfNotExists(\"cds--date-picker__weekdays\", weekdaysContainer);\n\t\taddClassIfNotExists(\"cds--date-picker__days\", daysContainer);\n\n\t\t// add weekday classes and format the text\n\t\tArray.from(weekdayContainer).forEach(element => {\n\t\t\telement.innerHTML = element.innerHTML.replace(/\\s+/g, \"\");\n\t\t\telement.classList.add(\"cds--date-picker__weekday\");\n\t\t});\n\n\t\t// add day classes and special case the \"today\" element based on `this.value`\n\t\tArray.from(dayContainer).forEach(element => {\n\t\t\telement.classList.add(\"cds--date-picker__day\");\n\t\t\tif (!this.value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (element.classList.contains(\"today\") && this.value.length > 0) {\n\t\t\t\telement.classList.add(\"no-border\");\n\t\t\t} else if (element.classList.contains(\"today\") && this.value.length === 0) {\n\t\t\t\telement.classList.remove(\"no-border\");\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected updateAttributes() {\n\t\tconst calendarContainer = document.querySelectorAll(\".flatpickr-calendar\");\n\t\tArray.from(calendarContainer).forEach(calendar => {\n\t\t\tcalendar.setAttribute(\"role\", \"region\");\n\t\t\tcalendar.setAttribute(\"aria-label\", this.ariaLabel);\n\t\t});\n\t}\n\n\t/**\n\t * Applies the given date value array to both the flatpickr instance and the `input`(s)\n\t * @param dates the date values to apply\n\t */\n\tprotected setDateValues(dates: (Date | string)[]) {\n\t\tif (this.isFlatpickrLoaded()) {\n\t\t\tconst singleInput = this.elementRef.nativeElement.querySelector(`#${this.id}-input`);\n\t\t\tconst rangeInput = this.elementRef.nativeElement.querySelector(`#${this.id}-rangeInput`);\n\n\t\t\t// `flatpickrInstance.setDate` removes the focus on the selected date element and will\n\t\t\t// automatically change focus to the beginning of the document. If a selected date is\n\t\t\t// focused before `flatpickrInstance.setDate` is invoked then it should remain focused.\n\t\t\tlet shouldRefocusDateElement = this.flatpickrInstance.selectedDateElem === document.activeElement;\n\n\t\t\t// set the date on the instance\n\t\t\tthis.flatpickrInstance.setDate(dates);\n\n\t\t\tif (shouldRefocusDateElement) {\n\t\t\t\tthis.flatpickrInstance.selectedDateElem.focus();\n\t\t\t}\n\n\t\t\t// we can either set a date value or an empty string, so we start with an empty string\n\t\t\tlet singleDate = \"\";\n\t\t\t// if date is a string, parse and format\n\t\t\tif (typeof this.flatpickrInstance.selectedDates[0] === \"string\") {\n\t\t\t\tsingleDate = this.flatpickrInstance.parseDate(this.flatpickrInstance.selectedDates[0], this.dateFormat);\n\t\t\t\tsingleDate = this.flatpickrInstance.formatDate(singleDate, this.dateFormat);\n\t\t\t// if date is not a string we can assume it's a Date and we should format\n\t\t\t} else if (!!this.flatpickrInstance.selectedDates[0]) {\n\t\t\t\tsingleDate = this.flatpickrInstance.formatDate(this.flatpickrInstance.selectedDates[0], this.dateFormat);\n\t\t\t}\n\n\t\t\tif (rangeInput) {\n\t\t\t\t// we can either set a date value or an empty string, so we start with an empty string\n\t\t\t\tlet rangeDate = \"\";\n\t\t\t\t// if date is a string, parse and format\n\t\t\t\tif (typeof this.flatpickrInstance.selectedDates[1] === \"string\") {\n\t\t\t\t\trangeDate = this.flatpickrInstance.parseDate(this.flatpickrInstance.selectedDates[1].toString(), this.dateFormat);\n\t\t\t\t\trangeDate = this.flatpickrInstance.formatDate(rangeDate, this.dateFormat);\n\t\t\t\t// if date is not a string we can assume it's a Date and we should format\n\t\t\t\t} else if (!!this.flatpickrInstance.selectedDates[1]) {\n\t\t\t\t\trangeDate = this.flatpickrInstance.formatDate(this.flatpickrInstance.selectedDates[1], this.dateFormat);\n\t\t\t\t}\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t// apply the values\n\t\t\t\t\trangeInput.value = rangeDate;\n\t\t\t\t\tsingleInput.value = singleDate;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected preventCalendarClose = event => event.stopPropagation();\n\n\tprotected doSelect(selectedValue: (Date | string)[]) {\n\t\t// In range mode, if a date is selected from the first calendar that is from the previous month,\n\t\t// the month will not be updated on the calendar until the calendar is re-opened.\n\t\t// This will make sure the calendar is updated with the correct month.\n\t\tif (this.range && this.flatpickrInstance.selectedDates[0]) {\n\t\t\tconst currentMonth = this.flatpickrInstance.selectedDates[0].getMonth();\n\n\t\t\t// `flatpickrInstance.changeMonth` removes the focus on the selected date element and will\n\t\t\t// automatically change focus to the beginning of the document. If a selected date is\n\t\t\t// focused before `flatpickrInstance.changeMonth` is invoked then it should remain focused.\n\t\t\tlet shouldRefocusDateElement = this.flatpickrInstance.selectedDateElem === document.activeElement;\n\n\t\t\tthis.flatpickrInstance.changeMonth(currentMonth, false);\n\n\t\t\tif (shouldRefocusDateElement) {\n\t\t\t\tthis.flatpickrInstance.selectedDateElem.focus();\n\t\t\t}\n\n\t\t}\n\t\tthis.valueChange.emit(selectedValue);\n\t\tthis.propagateChange(selectedValue);\n\t}\n\n\tprotected didDateValueChange(currentValue, previousValue) {\n\t\treturn currentValue[0] !== previousValue[0] || currentValue[1] !== previousValue[1];\n\t}\n\n\t/**\n\t * More advanced checking of the loaded state of flatpickr\n\t */\n\tprotected isFlatpickrLoaded() {\n\t\t// cast the instance to a boolean, and some method that has to exist for the library to be loaded in this case `setDate`\n\t\treturn !!this.flatpickrInstance && !!this.flatpickrInstance.setDate;\n\t}\n\n\t/**\n\t * Right arrow HTML passed to flatpickr\n\t */\n\tprotected rightArrowHTML() {\n\t\treturn `\n\t\t\t<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n\t\t\t\t<polygon points=\"11,8 6,13 5.3,12.3 9.6,8 5.3,3.7 6,3 \"/>\n\t\t\t\t<rect width=\"16\" height=\"16\" style=\"fill:none\" />\n\t\t\t</svg>`;\n\t}\n\n\t/**\n\t * Left arrow HTML passed to flatpickr\n\t */\n\tprotected leftArrowHTML() {\n\t\treturn `\n\t\t\t<svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n\t\t\t\t<polygon points=\"5,8 10,3 10.7,3.7 6.4,8 10.7,12.3 10,13 \"/>\n\t\t\t\t<rect width=\"16\" height=\"16\" style=\"fill:none\" />\n\t\t\t</svg>`;\n\t}\n}\n","import { DatePickerInputModule } from \"carbon-components-angular/datepicker-input\";\nimport { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { DatePicker } from \"./datepicker.component\";\nimport { UtilsModule } from \"carbon-components-angular/utils\";\nimport { I18nModule } from \"carbon-components-angular/i18n\";\n\n@NgModule({\n\tdeclarations: [\n\t\tDatePicker\n\t],\n\texports: [\n\t\tDatePicker,\n\t\tDatePickerInputModule\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tDatePickerInputModule,\n\t\tUtilsModule,\n\t\tI18nModule\n\t]\n})\nexport class DatePickerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|