@spartan-ng/brain 0.0.1-alpha.574 → 0.0.1-alpha.575
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/alert-dialog/index.d.ts +9 -9
- package/dialog/index.d.ts +12 -10
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs +20 -32
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-autocomplete.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-calendar.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-command.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-dialog.mjs +21 -23
- package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-hover-card.mjs +9 -15
- package/fesm2022/spartan-ng-brain-hover-card.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-popover.mjs +11 -27
- package/fesm2022/spartan-ng-brain-popover.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-radio-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-resizable.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-select.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-sheet.mjs +19 -30
- package/fesm2022/spartan-ng-brain-sheet.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-switch.mjs +2 -2
- package/fesm2022/spartan-ng-brain-switch.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tabs.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tooltip.mjs +6 -2
- package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -1
- package/hover-card/index.d.ts +6 -5
- package/package.json +1 -1
- package/popover/index.d.ts +7 -11
- package/resizable/index.d.ts +7 -6
- package/sheet/index.d.ts +8 -7
- package/switch/index.d.ts +2 -2
- package/tabs/index.d.ts +1 -1
- package/tooltip/index.d.ts +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-tabs.mjs","sources":["../tmp-esm2022/tabs/lib/brn-tabs.js","../tmp-esm2022/tabs/lib/brn-tabs-content.js","../tmp-esm2022/tabs/lib/brn-tabs-trigger.js","../tmp-esm2022/tabs/lib/brn-tabs-list.js","../tmp-esm2022/tabs/lib/brn-tabs-paginated-list.js","../tmp-esm2022/tabs/index.js","../tmp-esm2022/tabs/spartan-ng-brain-tabs.js"],"sourcesContent":["import { Directive, input, model, output, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabs {\n orientation = input('horizontal');\n /** internal **/\n $orientation = this.orientation;\n direction = input('ltr');\n /** internal **/\n $direction = this.direction;\n activeTab = model(undefined, { alias: 'brnTabs' });\n /** internal **/\n $activeTab = this.activeTab.asReadonly();\n activationMode = input('automatic');\n /** internal **/\n $activationMode = this.activationMode;\n tabActivated = output();\n _tabs = signal({});\n $tabs = this._tabs.asReadonly();\n registerTrigger(key, trigger) {\n this.updateEntry(key, { trigger });\n }\n registerContent(key, content) {\n this.updateEntry(key, { content });\n }\n unregisterTrigger(key) {\n this.updateEntry(key, { trigger: undefined });\n if (this.activeTab() === key) {\n this.activeTab.set(undefined);\n }\n }\n unregisterContent(key) {\n this.updateEntry(key, { content: undefined });\n }\n updateEntry(key, patch) {\n this._tabs.update((tabs) => {\n const existing = tabs[key] ?? {};\n const merged = { ...existing, ...patch };\n const entryEmpty = !merged.trigger && !merged.content;\n if (entryEmpty) {\n const { [key]: removed, ...rest } = tabs;\n return rest;\n }\n return { ...tabs, [key]: merged };\n });\n }\n emitTabActivated(key) {\n this.tabActivated.emit(key);\n }\n setActiveTab(key) {\n this.activeTab.set(key);\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabs, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabs, isStandalone: true, selector: \"[brnTabs]\", inputs: { orientation: { classPropertyName: \"orientation\", publicName: \"orientation\", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: \"direction\", publicName: \"direction\", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: \"activeTab\", publicName: \"brnTabs\", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: \"activationMode\", publicName: \"activationMode\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: \"brnTabsChange\", tabActivated: \"tabActivated\" }, host: { properties: { \"attr.data-orientation\": \"orientation()\", \"attr.dir\": \"direction()\" } }, exportAs: [\"brnTabs\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabs, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabs]',\n exportAs: 'brnTabs',\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.dir]': 'direction()',\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2xpYi9icm4tdGFicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFpQnhFLE1BQU0sT0FBTyxPQUFPO0lBQ0gsV0FBVyxHQUFHLEtBQUssQ0FBcUIsWUFBWSxDQUFDLENBQUM7SUFDdEUsZ0JBQWdCO0lBQ1QsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFFdkIsU0FBUyxHQUFHLEtBQUssQ0FBbUIsS0FBSyxDQUFDLENBQUM7SUFDM0QsZ0JBQWdCO0lBQ1QsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFFbkIsU0FBUyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkYsZ0JBQWdCO0lBQ1QsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFaEMsY0FBYyxHQUFHLEtBQUssQ0FBb0IsV0FBVyxDQUFDLENBQUM7SUFDdkUsZ0JBQWdCO0lBQ1QsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFFN0IsWUFBWSxHQUFHLE1BQU0sRUFBVSxDQUFDO0lBRS9CLEtBQUssR0FBRyxNQUFNLENBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXpDLGVBQWUsQ0FBQyxHQUFXLEVBQUUsT0FBdUI7UUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBVyxFQUFFLE9BQXVCO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDRixDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBVyxFQUFFLEtBQXdCO1FBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDekMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUN0RCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVc7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7MEhBNURXLE9BQU87OEdBQVAsT0FBTzs7MkZBQVAsT0FBTztrQkFSbkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLElBQUksRUFBRTt3QkFDTCx5QkFBeUIsRUFBRSxlQUFlO3dCQUMxQyxZQUFZLEVBQUUsYUFBYTtxQkFDM0I7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQnJuVGFic0NvbnRlbnQgfSBmcm9tICcuL2Jybi10YWJzLWNvbnRlbnQnO1xuaW1wb3J0IHR5cGUgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vYnJuLXRhYnMtdHJpZ2dlcic7XG5cbmV4cG9ydCB0eXBlIEJyblRhYnNPcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5leHBvcnQgdHlwZSBCcm5UYWJzRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcbmV4cG9ydCB0eXBlIEJybkFjdGl2YXRpb25Nb2RlID0gJ2F1dG9tYXRpYycgfCAnbWFudWFsJztcbmV4cG9ydCB0eXBlIFRhYkVudHJ5ID0geyB0cmlnZ2VyOiBCcm5UYWJzVHJpZ2dlcjsgY29udGVudDogQnJuVGFic0NvbnRlbnQgfTtcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW2JyblRhYnNdJyxcblx0ZXhwb3J0QXM6ICdicm5UYWJzJyxcblx0aG9zdDoge1xuXHRcdCdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdvcmllbnRhdGlvbigpJyxcblx0XHQnW2F0dHIuZGlyXSc6ICdkaXJlY3Rpb24oKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnMge1xuXHRwdWJsaWMgcmVhZG9ubHkgb3JpZW50YXRpb24gPSBpbnB1dDxCcm5UYWJzT3JpZW50YXRpb24+KCdob3Jpem9udGFsJyk7XG5cdC8qKiBpbnRlcm5hbCAqKi9cblx0cHVibGljICRvcmllbnRhdGlvbiA9IHRoaXMub3JpZW50YXRpb247XG5cblx0cHVibGljIHJlYWRvbmx5IGRpcmVjdGlvbiA9IGlucHV0PEJyblRhYnNEaXJlY3Rpb24+KCdsdHInKTtcblx0LyoqIGludGVybmFsICoqL1xuXHRwdWJsaWMgJGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xuXG5cdHB1YmxpYyByZWFkb25seSBhY3RpdmVUYWIgPSBtb2RlbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2JyblRhYnMnIH0pO1xuXHQvKiogaW50ZXJuYWwgKiovXG5cdHB1YmxpYyAkYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIuYXNSZWFkb25seSgpO1xuXG5cdHB1YmxpYyByZWFkb25seSBhY3RpdmF0aW9uTW9kZSA9IGlucHV0PEJybkFjdGl2YXRpb25Nb2RlPignYXV0b21hdGljJyk7XG5cdC8qKiBpbnRlcm5hbCAqKi9cblx0cHVibGljICRhY3RpdmF0aW9uTW9kZSA9IHRoaXMuYWN0aXZhdGlvbk1vZGU7XG5cblx0cHVibGljIHJlYWRvbmx5IHRhYkFjdGl2YXRlZCA9IG91dHB1dDxzdHJpbmc+KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfdGFicyA9IHNpZ25hbDx7IFtrZXk6IHN0cmluZ106IFRhYkVudHJ5IH0+KHt9KTtcblx0cHVibGljIHJlYWRvbmx5ICR0YWJzID0gdGhpcy5fdGFicy5hc1JlYWRvbmx5KCk7XG5cblx0cHVibGljIHJlZ2lzdGVyVHJpZ2dlcihrZXk6IHN0cmluZywgdHJpZ2dlcjogQnJuVGFic1RyaWdnZXIpIHtcblx0XHR0aGlzLnVwZGF0ZUVudHJ5KGtleSwgeyB0cmlnZ2VyIH0pO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udGVudChrZXk6IHN0cmluZywgY29udGVudDogQnJuVGFic0NvbnRlbnQpIHtcblx0XHR0aGlzLnVwZGF0ZUVudHJ5KGtleSwgeyBjb250ZW50IH0pO1xuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJUcmlnZ2VyKGtleTogc3RyaW5nKSB7XG5cdFx0dGhpcy51cGRhdGVFbnRyeShrZXksIHsgdHJpZ2dlcjogdW5kZWZpbmVkIH0pO1xuXHRcdGlmICh0aGlzLmFjdGl2ZVRhYigpID09PSBrZXkpIHtcblx0XHRcdHRoaXMuYWN0aXZlVGFiLnNldCh1bmRlZmluZWQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udGVudChrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMudXBkYXRlRW50cnkoa2V5LCB7IGNvbnRlbnQ6IHVuZGVmaW5lZCB9KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRW50cnkoa2V5OiBzdHJpbmcsIHBhdGNoOiBQYXJ0aWFsPFRhYkVudHJ5Pikge1xuXHRcdHRoaXMuX3RhYnMudXBkYXRlKCh0YWJzKSA9PiB7XG5cdFx0XHRjb25zdCBleGlzdGluZyA9IHRhYnNba2V5XSA/PyB7fTtcblx0XHRcdGNvbnN0IG1lcmdlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnBhdGNoIH07XG5cdFx0XHRjb25zdCBlbnRyeUVtcHR5ID0gIW1lcmdlZC50cmlnZ2VyICYmICFtZXJnZWQuY29udGVudDtcblx0XHRcdGlmIChlbnRyeUVtcHR5KSB7XG5cdFx0XHRcdGNvbnN0IHsgW2tleV06IHJlbW92ZWQsIC4uLnJlc3QgfSA9IHRhYnM7XG5cdFx0XHRcdHJldHVybiByZXN0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgLi4udGFicywgW2tleV06IG1lcmdlZCB9O1xuXHRcdH0pO1xuXHR9XG5cblx0ZW1pdFRhYkFjdGl2YXRlZChrZXk6IHN0cmluZykge1xuXHRcdHRoaXMudGFiQWN0aXZhdGVkLmVtaXQoa2V5KTtcblx0fVxuXG5cdHNldEFjdGl2ZVRhYihrZXk6IHN0cmluZykge1xuXHRcdHRoaXMuYWN0aXZlVGFiLnNldChrZXkpO1xuXHR9XG59XG4iXX0=","import { computed, Directive, effect, ElementRef, inject, input, untracked } from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsContent {\n _root = inject(BrnTabs);\n _elementRef = inject(ElementRef);\n contentFor = input.required({ alias: 'brnTabsContent' });\n _isSelected = computed(() => this._root.$activeTab() === this.contentFor());\n _contentId = computed(() => `brn-tabs-content-${this.contentFor()}`);\n _labelId = computed(() => `brn-tabs-label-${this.contentFor()}`);\n constructor() {\n effect(() => {\n const contentFor = this.contentFor();\n untracked(() => this._root.registerContent(contentFor, this));\n });\n }\n focus() {\n this._elementRef.nativeElement.focus();\n }\n ngOnDestroy() {\n this._root.unregisterContent(this.contentFor());\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsContent, isStandalone: true, selector: \"[brnTabsContent]\", inputs: { contentFor: { classPropertyName: \"contentFor\", publicName: \"brnTabsContent\", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { \"role\": \"tabpanel\", \"tabindex\": \"0\" }, properties: { \"id\": \"_contentId()\", \"attr.aria-labelledby\": \"_labelId()\", \"hidden\": \"_isSelected() === false\" } }, exportAs: [\"brnTabsContent\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsContent, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabsContent]',\n exportAs: 'brnTabsContent',\n host: {\n role: 'tabpanel',\n tabindex: '0',\n '[id]': '_contentId()',\n '[attr.aria-labelledby]': '_labelId()',\n '[hidden]': '_isSelected() === false',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFhckMsTUFBTSxPQUFPLGNBQWM7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbEMsVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1RSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFcEY7UUFDQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7MEhBdEJXLGNBQWM7OEdBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFYMUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLFFBQVEsRUFBRSxHQUFHO3dCQUNiLE1BQU0sRUFBRSxjQUFjO3dCQUN0Qix3QkFBd0IsRUFBRSxZQUFZO3dCQUN0QyxVQUFVLEVBQUUseUJBQXlCO3FCQUNyQztpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgdHlwZSBPbkRlc3Ryb3ksIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJuVGFicyB9IGZyb20gJy4vYnJuLXRhYnMnO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYnJuVGFic0NvbnRlbnRdJyxcblx0ZXhwb3J0QXM6ICdicm5UYWJzQ29udGVudCcsXG5cdGhvc3Q6IHtcblx0XHRyb2xlOiAndGFicGFuZWwnLFxuXHRcdHRhYmluZGV4OiAnMCcsXG5cdFx0J1tpZF0nOiAnX2NvbnRlbnRJZCgpJyxcblx0XHQnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdfbGFiZWxJZCgpJyxcblx0XHQnW2hpZGRlbl0nOiAnX2lzU2VsZWN0ZWQoKSA9PT0gZmFsc2UnLFxuXHR9LFxufSlcbmV4cG9ydCBjbGFzcyBCcm5UYWJzQ29udGVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Jvb3QgPSBpbmplY3QoQnJuVGFicyk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cblx0cHVibGljIHJlYWRvbmx5IGNvbnRlbnRGb3IgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KHsgYWxpYXM6ICdicm5UYWJzQ29udGVudCcgfSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfaXNTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYigpID09PSB0aGlzLmNvbnRlbnRGb3IoKSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfY29udGVudElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWNvbnRlbnQtJHt0aGlzLmNvbnRlbnRGb3IoKX1gKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9sYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWxhYmVsLSR7dGhpcy5jb250ZW50Rm9yKCl9YCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRlbnRGb3IgPSB0aGlzLmNvbnRlbnRGb3IoKTtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB0aGlzLl9yb290LnJlZ2lzdGVyQ29udGVudChjb250ZW50Rm9yLCB0aGlzKSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgZm9jdXMoKSB7XG5cdFx0dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLl9yb290LnVucmVnaXN0ZXJDb250ZW50KHRoaXMuY29udGVudEZvcigpKTtcblx0fVxufVxuIl19","import { Directive, ElementRef, booleanAttribute, computed, effect, inject, input, untracked, } from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsTrigger {\n elementRef = inject(ElementRef);\n _root = inject(BrnTabs);\n _orientation = this._root.$orientation;\n triggerFor = input.required({ alias: 'brnTabsTrigger' });\n selected = computed(() => this._root.$activeTab() === this.triggerFor());\n _contentId = computed(() => `brn-tabs-content-${this.triggerFor()}`);\n _labelId = computed(() => `brn-tabs-label-${this.triggerFor()}`);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _disabled = input(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n get disabled() {\n return this._disabled();\n }\n constructor() {\n effect(() => {\n const triggerFor = this.triggerFor();\n untracked(() => this._root.registerTrigger(triggerFor, this));\n });\n }\n focus() {\n this.elementRef.nativeElement.focus();\n if (this._root.$activationMode() === 'automatic') {\n this.activate();\n }\n }\n activate() {\n if (!this.triggerFor())\n return;\n this._root.setActiveTab(this.triggerFor());\n this._root.emitTabActivated(this.triggerFor());\n }\n get key() {\n return this.triggerFor();\n }\n ngOnDestroy() {\n this._root.unregisterTrigger(this.triggerFor());\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsTrigger, isStandalone: true, selector: \"button[brnTabsTrigger]\", inputs: { triggerFor: { classPropertyName: \"triggerFor\", publicName: \"brnTabsTrigger\", isSignal: true, isRequired: true, transformFunction: null }, _disabled: { classPropertyName: \"_disabled\", publicName: \"disabled\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"type\": \"button\", \"role\": \"tab\" }, listeners: { \"click\": \"activate()\" }, properties: { \"id\": \"_labelId()\", \"tabindex\": \"_disabled() ? -1 : (selected() ? 0 : -1)\", \"attr.aria-selected\": \"selected()\", \"attr.aria-controls\": \"_contentId()\", \"attr.aria-disabled\": \"_disabled()\", \"attr.data-state\": \"selected() ? 'active' : 'inactive'\", \"attr.data-orientation\": \"_orientation()\", \"attr.data-disabled\": \"_disabled() ? '' : undefined\", \"attr.disabled\": \"_disabled() ? '' : undefined\" } }, exportAs: [\"brnTabsTrigger\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[brnTabsTrigger]',\n exportAs: 'brnTabsTrigger',\n host: {\n '[id]': '_labelId()',\n type: 'button',\n role: 'tab',\n '[tabindex]': '_disabled() ? -1 : (selected() ? 0 : -1)',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': '_contentId()',\n '[attr.aria-disabled]': '_disabled()',\n '[attr.data-state]': \"selected() ? 'active' : 'inactive'\",\n '[attr.data-orientation]': '_orientation()',\n '[attr.data-disabled]': \"_disabled() ? '' : undefined\",\n '[attr.disabled]': \"_disabled() ? '' : undefined\",\n '(click)': 'activate()',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtdHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLXRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBRVYsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFvQnJDLE1BQU0sT0FBTyxjQUFjO0lBQ1YsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUvQixLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRCLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUUxQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBUyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDakUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVwRixnRUFBZ0U7SUFDaEQsU0FBUyxHQUFHLEtBQUssQ0FBd0IsS0FBSyxFQUFFO1FBQy9ELEtBQUssRUFBRSxVQUFVO1FBQ2pCLFNBQVMsRUFBRSxnQkFBZ0I7S0FDM0IsQ0FBQyxDQUFDO0lBRUgsSUFBVyxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDtRQUNDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUs7UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDRixDQUFDO0lBRU0sUUFBUTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLEdBQUc7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQzswSEFoRFcsY0FBYzs4R0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQWxCMUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLFlBQVk7d0JBQ3BCLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxLQUFLO3dCQUNYLFlBQVksRUFBRSwwQ0FBMEM7d0JBQ3hELHNCQUFzQixFQUFFLFlBQVk7d0JBQ3BDLHNCQUFzQixFQUFFLGNBQWM7d0JBQ3RDLHNCQUFzQixFQUFFLGFBQWE7d0JBQ3JDLG1CQUFtQixFQUFFLG9DQUFvQzt3QkFDekQseUJBQXlCLEVBQUUsZ0JBQWdCO3dCQUMzQyxzQkFBc0IsRUFBRSw4QkFBOEI7d0JBQ3RELGlCQUFpQixFQUFFLDhCQUE4Qjt3QkFDakQsU0FBUyxFQUFFLFlBQVk7cUJBQ3ZCO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHR0eXBlIE9uRGVzdHJveSxcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyblRhYnMgfSBmcm9tICcuL2Jybi10YWJzJztcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnYnV0dG9uW2JyblRhYnNUcmlnZ2VyXScsXG5cdGV4cG9ydEFzOiAnYnJuVGFic1RyaWdnZXInLFxuXHRob3N0OiB7XG5cdFx0J1tpZF0nOiAnX2xhYmVsSWQoKScsXG5cdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0cm9sZTogJ3RhYicsXG5cdFx0J1t0YWJpbmRleF0nOiAnX2Rpc2FibGVkKCkgPyAtMSA6IChzZWxlY3RlZCgpID8gMCA6IC0xKScsXG5cdFx0J1thdHRyLmFyaWEtc2VsZWN0ZWRdJzogJ3NlbGVjdGVkKCknLFxuXHRcdCdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdfY29udGVudElkKCknLFxuXHRcdCdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdfZGlzYWJsZWQoKScsXG5cdFx0J1thdHRyLmRhdGEtc3RhdGVdJzogXCJzZWxlY3RlZCgpID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnXCIsXG5cdFx0J1thdHRyLmRhdGEtb3JpZW50YXRpb25dJzogJ19vcmllbnRhdGlvbigpJyxcblx0XHQnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiBcIl9kaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIixcblx0XHQnW2F0dHIuZGlzYWJsZWRdJzogXCJfZGlzYWJsZWQoKSA/ICcnIDogdW5kZWZpbmVkXCIsXG5cdFx0JyhjbGljayknOiAnYWN0aXZhdGUoKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnNUcmlnZ2VyIGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfcm9vdCA9IGluamVjdChCcm5UYWJzKTtcblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX29yaWVudGF0aW9uID0gdGhpcy5fcm9vdC4kb3JpZW50YXRpb247XG5cblx0cHVibGljIHJlYWRvbmx5IHRyaWdnZXJGb3IgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KHsgYWxpYXM6ICdicm5UYWJzVHJpZ2dlcicgfSk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYigpID09PSB0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfY29udGVudElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWNvbnRlbnQtJHt0aGlzLnRyaWdnZXJGb3IoKX1gKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9sYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWxhYmVsLSR7dGhpcy50cmlnZ2VyRm9yKCl9YCk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRwdWJsaWMgcmVhZG9ubHkgX2Rpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwge1xuXHRcdGFsaWFzOiAnZGlzYWJsZWQnLFxuXHRcdHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcblx0fSk7XG5cblx0cHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzYWJsZWQoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCB0cmlnZ2VyRm9yID0gdGhpcy50cmlnZ2VyRm9yKCk7XG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy5fcm9vdC5yZWdpc3RlclRyaWdnZXIodHJpZ2dlckZvciwgdGhpcykpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGZvY3VzKCkge1xuXHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0aWYgKHRoaXMuX3Jvb3QuJGFjdGl2YXRpb25Nb2RlKCkgPT09ICdhdXRvbWF0aWMnKSB7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFjdGl2YXRlKCkge1xuXHRcdGlmICghdGhpcy50cmlnZ2VyRm9yKCkpIHJldHVybjtcblx0XHR0aGlzLl9yb290LnNldEFjdGl2ZVRhYih0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdFx0dGhpcy5fcm9vdC5lbWl0VGFiQWN0aXZhdGVkKHRoaXMudHJpZ2dlckZvcigpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQga2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMudHJpZ2dlckZvcigpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5fcm9vdC51bnJlZ2lzdGVyVHJpZ2dlcih0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdH1cbn1cbiJdfQ==","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directive, ElementRef, contentChildren, inject } from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\nimport { BrnTabsTrigger } from './brn-tabs-trigger';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsList {\n _root = inject(BrnTabs);\n _orientation = this._root.$orientation;\n _direction = this._root.$direction;\n _activeTab = this._root.$activeTab;\n _tabs = this._root.$tabs;\n _elementRef = inject(ElementRef);\n _keyDownListener = fromEvent(this._elementRef.nativeElement, 'keydown');\n _keyManager;\n triggers = contentChildren(BrnTabsTrigger, { descendants: true });\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager(this.triggers())\n .withHorizontalOrientation(this._direction())\n .withHomeAndEnd()\n .withPageUpDown()\n .withWrap();\n // needed because by default the index is set to -1, which means first interaction is skipped\n this._keyDownListener.pipe(take(1)).subscribe(() => {\n const currentTabKey = this._activeTab();\n const tabs = this._tabs();\n let activeIndex = 0;\n if (currentTabKey) {\n const currentTab = tabs[currentTabKey];\n if (currentTab) {\n activeIndex = this.triggers().indexOf(currentTab.trigger);\n }\n }\n this._keyManager?.setActiveItem(activeIndex);\n });\n this._keyDownListener.subscribe((event) => {\n if ('key' in event) {\n if (this._orientation() === 'horizontal') {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown')\n return;\n }\n if (this._orientation() === 'vertical') {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n return;\n }\n }\n this._keyManager?.onKeydown(event);\n });\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsList, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.0.7\", type: BrnTabsList, isStandalone: true, selector: \"[brnTabsList]\", host: { attributes: { \"role\": \"tablist\" }, properties: { \"attr.aria-orientation\": \"_orientation()\", \"attr.data-orientation\": \"_orientation()\" } }, queries: [{ propertyName: \"triggers\", predicate: BrnTabsTrigger, descendants: true, isSignal: true }], exportAs: [\"brnTabsList\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsList, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabsList]',\n exportAs: 'brnTabsList',\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': '_orientation()',\n '[attr.data-orientation]': '_orientation()',\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBeUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVdwRCxNQUFNLE9BQU8sV0FBVztJQUNOLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdEIsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3pDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDbkMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3pCLFdBQVcsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBQzFELGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVqRixXQUFXLENBQW1DO0lBRXRDLFFBQVEsR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFM0Usa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNyRSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDNUMsY0FBYyxFQUFFO2FBQ2hCLGNBQWMsRUFBRTthQUNoQixRQUFRLEVBQUUsQ0FBQztRQUViLDZGQUE2RjtRQUM3RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNoQixXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNELENBQUM7WUFDRixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekMsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUMxQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVzt3QkFBRSxPQUFPO2dCQUNsRSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN4QyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWTt3QkFBRSxPQUFPO2dCQUNyRSxDQUFDO1lBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQXNCLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7MEhBOUNXLFdBQVc7OEdBQVgsV0FBVyxxUEFZb0IsY0FBYzs7MkZBWjdDLFdBQVc7a0JBVHZCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixJQUFJLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFNBQVM7d0JBQ2YseUJBQXlCLEVBQUUsZ0JBQWdCO3dCQUMzQyx5QkFBeUIsRUFBRSxnQkFBZ0I7cUJBQzNDO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgdHlwZSBBZnRlckNvbnRlbnRJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGNvbnRlbnRDaGlsZHJlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9icm4tdGFicyc7XG5pbXBvcnQgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vYnJuLXRhYnMtdHJpZ2dlcic7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1ticm5UYWJzTGlzdF0nLFxuXHRleHBvcnRBczogJ2JyblRhYnNMaXN0Jyxcblx0aG9zdDoge1xuXHRcdHJvbGU6ICd0YWJsaXN0Jyxcblx0XHQnW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0nOiAnX29yaWVudGF0aW9uKCknLFxuXHRcdCdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdfb3JpZW50YXRpb24oKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnNMaXN0IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Jvb3QgPSBpbmplY3QoQnJuVGFicyk7XG5cblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9vcmllbnRhdGlvbiA9IHRoaXMuX3Jvb3QuJG9yaWVudGF0aW9uO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kaXJlY3Rpb24gPSB0aGlzLl9yb290LiRkaXJlY3Rpb247XG5cdHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVRhYiA9IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYjtcblx0cHJpdmF0ZSByZWFkb25seSBfdGFicyA9IHRoaXMuX3Jvb3QuJHRhYnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9rZXlEb3duTGlzdGVuZXIgPSBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpO1xuXG5cdHByaXZhdGUgX2tleU1hbmFnZXI/OiBGb2N1c0tleU1hbmFnZXI8QnJuVGFic1RyaWdnZXI+O1xuXG5cdHB1YmxpYyByZWFkb25seSB0cmlnZ2VycyA9IGNvbnRlbnRDaGlsZHJlbihCcm5UYWJzVHJpZ2dlciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcblxuXHRwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyPEJyblRhYnNUcmlnZ2VyPih0aGlzLnRyaWdnZXJzKCkpXG5cdFx0XHQud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9kaXJlY3Rpb24oKSlcblx0XHRcdC53aXRoSG9tZUFuZEVuZCgpXG5cdFx0XHQud2l0aFBhZ2VVcERvd24oKVxuXHRcdFx0LndpdGhXcmFwKCk7XG5cblx0XHQvLyBuZWVkZWQgYmVjYXVzZSBieSBkZWZhdWx0IHRoZSBpbmRleCBpcyBzZXQgdG8gLTEsIHdoaWNoIG1lYW5zIGZpcnN0IGludGVyYWN0aW9uIGlzIHNraXBwZWRcblx0XHR0aGlzLl9rZXlEb3duTGlzdGVuZXIucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudFRhYktleSA9IHRoaXMuX2FjdGl2ZVRhYigpO1xuXHRcdFx0Y29uc3QgdGFicyA9IHRoaXMuX3RhYnMoKTtcblx0XHRcdGxldCBhY3RpdmVJbmRleCA9IDA7XG5cdFx0XHRpZiAoY3VycmVudFRhYktleSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFiID0gdGFic1tjdXJyZW50VGFiS2V5XTtcblx0XHRcdFx0aWYgKGN1cnJlbnRUYWIpIHtcblx0XHRcdFx0XHRhY3RpdmVJbmRleCA9IHRoaXMudHJpZ2dlcnMoKS5pbmRleE9mKGN1cnJlbnRUYWIudHJpZ2dlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSW5kZXgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fa2V5RG93bkxpc3RlbmVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdGlmICgna2V5JyBpbiBldmVudCkge1xuXHRcdFx0XHRpZiAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSByZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCBhcyBLZXlib2FyZEV2ZW50KTtcblx0XHR9KTtcblx0fVxufVxuIl19","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tabs/paginated-tab-header.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ANIMATION_MODULE_TYPE, ChangeDetectorRef, Directive, ElementRef, Injector, NgZone, afterNextRender, booleanAttribute, computed, effect, inject, input, output, signal, } from '@angular/core';\nimport { EMPTY, Observable, Subject, fromEvent, merge, of as observableOf, timer } from 'rxjs';\nimport { debounceTime, filter, skip, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\nexport class BrnTabsPaginatedList {\n /** The distance in pixels that the tab labels should be translated to the left. */\n _scrollDistance = 0;\n /** Whether the header should scroll to the selected index after the view has been checked. */\n _selectedIndexChanged = false;\n _root = inject(BrnTabs);\n _activeTab = this._root.$activeTab;\n _tabs = this._root.$tabs;\n /** Emits when the component is destroyed. */\n _destroyed = new Subject();\n /** Whether the controls for pagination should be displayed */\n showPaginationControls = signal(false);\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n disableScrollAfter = true;\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n disableScrollBefore = true;\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n _tabLabelCount;\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n _scrollDistanceChanged;\n /** Used to manage focus between the tabs. */\n _keyManager;\n /** Cached text content of the header. */\n _currentTextContent;\n /** Stream that will stop the automated scrolling. */\n _stopScrolling = new Subject();\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n disablePagination = input(false, { transform: booleanAttribute });\n /** The index of the active tab. */\n _selectedIndex = computed(() => {\n const currentTabKey = this._activeTab();\n const tabs = this._tabs();\n let activeIndex = 0;\n if (currentTabKey && this.items()) {\n const currentTab = tabs[currentTabKey];\n if (currentTab) {\n activeIndex = this.items().indexOf(currentTab.trigger);\n }\n }\n return activeIndex;\n });\n /** Event emitted when the option is selected. */\n selectFocusedIndex = output();\n /** Event emitted when a label is focused. */\n indexFocused = output();\n _sharedResizeObserver = inject(SharedResizeObserver);\n _injector = inject(Injector);\n _elementRef = inject(ElementRef);\n _changeDetectorRef = inject(ChangeDetectorRef);\n _viewportRuler = inject(ViewportRuler);\n _dir = inject(Directionality, { optional: true });\n _ngZone = inject(NgZone);\n _platform = inject(Platform);\n animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n constructor() {\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._stopInterval();\n });\n });\n effect(() => {\n const selectedIndex = this._selectedIndex();\n if (selectedIndex !== 0) {\n this._selectedIndexChanged = true;\n if (this._keyManager) {\n this._keyManager.updateActiveItem(selectedIndex);\n }\n }\n });\n }\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this.previousPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('before');\n });\n fromEvent(this.nextPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('after');\n });\n }\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : observableOf('ltr');\n // We need to debounce resize events because the alignment logic is expensive.\n // If someone animates the width of tabs, we don't want to realign on every animation frame.\n // Once we haven't seen any more resize events in the last 32ms (~2 animaion frames) we can\n // re-align.\n const resize = this._sharedResizeObserver\n .observe(this._elementRef.nativeElement)\n .pipe(debounceTime(32), takeUntil(this._destroyed));\n // Note: We do not actually need to watch these events for proper functioning of the tabs,\n // the resize events above should capture any viewport resize that we care about. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n const viewportResize = this._viewportRuler.change(150).pipe(takeUntil(this._destroyed));\n const realign = () => {\n this.updatePagination();\n };\n this._keyManager = new FocusKeyManager(this.items())\n .withHorizontalOrientation(this._getLayoutDirection())\n .withHomeAndEnd()\n .withWrap()\n // Allow focus to land on disabled tabs, as per https://w3c.github.io/aria-practices/#kbd_disabled_controls\n .skipPredicate(() => false);\n this._keyManager.updateActiveItem(this._selectedIndex());\n // Note: We do not need to realign after the first render for proper functioning of the tabs\n // the resize events above should fire when we first start observing the element. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n afterNextRender(realign, { injector: this._injector });\n // On dir change or resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, viewportResize, resize, this.itemsChanges, this._itemsResized())\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n // We need to defer this to give the browser some time to recalculate\n // the element dimensions. The call has to be wrapped in `NgZone.run`,\n // because the viewport change handler runs outside of Angular.\n this._ngZone.run(() => {\n Promise.resolve().then(() => {\n // Clamp the scroll distance, because it can change with the number of tabs.\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance));\n realign();\n });\n });\n this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n });\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this._keyManager.change.subscribe((newFocusIndex) => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n /** Sends any changes that could affect the layout of the items. */\n _itemsResized() {\n if (typeof ResizeObserver !== 'function') {\n return EMPTY;\n }\n return this.itemsChanges.pipe(startWith(this.items()), switchMap((tabItems) => new Observable((observer) => this._ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver((entries) => observer.next(entries));\n for (const tabItem of tabItems) {\n resizeObserver.observe(tabItem.elementRef.nativeElement);\n }\n return () => {\n resizeObserver.disconnect();\n };\n }))), \n // Skip the first emit since the resize observer emits when an item\n // is observed for new items when the tab is already inserted\n skip(1), \n // Skip emissions where all the elements are invisible since we don't want\n // the header to try and re-render with invalid measurements. See #25574.\n filter((entries) => entries.some((e) => e.contentRect.width > 0 && e.contentRect.height > 0)));\n }\n ngAfterContentChecked() {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount !== this.items().length) {\n this.updatePagination();\n this._tabLabelCount = this.items().length;\n this._changeDetectorRef.markForCheck();\n }\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex());\n this._checkScrollingControls();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n /** Handles keyboard events on the header. */\n _handleKeydown(event) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n if (this.focusIndex !== this._selectedIndex()) {\n const item = this.items()[this.focusIndex];\n if (item && !item.disabled) {\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n }\n }\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n const textContent = this._elementRef.nativeElement.textContent;\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this._currentTextContent) {\n this._currentTextContent = textContent || '';\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this._ngZone.run(() => {\n this.updatePagination();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex() {\n return this._keyManager ? (this._keyManager.activeItemIndex ?? 0) : 0;\n }\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n this._keyManager.setActiveItem(value);\n }\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index) {\n return this.items() ? !!this.items()[index] : true;\n }\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex) {\n if (this.showPaginationControls()) {\n this._scrollToLabel(tabIndex);\n }\n if (this.items()?.length) {\n this.items()[tabIndex].focus();\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this.tabListContainer().nativeElement;\n const dir = this._getLayoutDirection();\n if (dir === 'ltr') {\n containerEl.scrollLeft = 0;\n }\n else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n /** The layout direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n if (this.disablePagination()) {\n return;\n }\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this.tabList().nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n if (this._platform.TRIDENT || this._platform.EDGE) {\n this.tabListContainer().nativeElement.scrollLeft = 0;\n }\n }\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance() {\n return this._scrollDistance;\n }\n set scrollDistance(value) {\n this._scrollTo(value);\n }\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(direction) {\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = ((direction === 'before' ? -1 : 1) * viewLength) / 3;\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex) {\n if (this.disablePagination()) {\n return;\n }\n const selectedLabel = this.items() ? this.items()[labelIndex] : null;\n if (!selectedLabel) {\n return;\n }\n // The view length is the visible width of the tab labels.\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n let labelBeforePos;\n let labelAfterPos;\n if (this._getLayoutDirection() === 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n }\n else {\n labelAfterPos = this.tabListInner().nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos;\n }\n else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += Math.min(labelAfterPos - afterVisiblePos, labelBeforePos - beforeVisiblePos);\n }\n }\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n if (this.disablePagination()) {\n this.showPaginationControls.set(false);\n }\n else {\n const isEnabled = this.tabListInner().nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n if (isEnabled !== this.showPaginationControls()) {\n this._changeDetectorRef.markForCheck();\n }\n this.showPaginationControls.set(isEnabled);\n }\n }\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n if (this.disablePagination()) {\n this.disableScrollAfter = this.disableScrollBefore = true;\n }\n else {\n // Check if the pagination arrows should be activated.\n this.disableScrollBefore = this.scrollDistance === 0;\n this.disableScrollAfter = this.scrollDistance === this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance() {\n const lengthOfTabList = this.tabListInner().nativeElement.scrollWidth;\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n return lengthOfTabList - viewLength || 0;\n }\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n _handlePaginatorPress(direction, mouseEvent) {\n // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n // null check the `button`, but we do it so we don't break tests that use fake events.\n if (mouseEvent && mouseEvent.button !== null && mouseEvent.button !== 0) {\n return;\n }\n // Avoid overlapping timers.\n this._stopInterval();\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n .subscribe(() => {\n const { maxScrollDistance, distance } = this._scrollHeader(direction);\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this._stopInterval();\n }\n });\n }\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n _scrollTo(position) {\n if (this.disablePagination()) {\n return { maxScrollDistance: 0, distance: 0 };\n }\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n return { maxScrollDistance, distance: this._scrollDistance };\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsPaginatedList, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsPaginatedList, isStandalone: true, inputs: { disablePagination: { classPropertyName: \"disablePagination\", publicName: \"disablePagination\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectFocusedIndex: \"selectFocusedIndex\", indexFocused: \"indexFocused\" }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsPaginatedList, decorators: [{\n type: Directive\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtcGFnaW5hdGVkLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2xpYi9icm4tdGFicy1wYWdpbmF0ZWQtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUg7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBd0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQWtCLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLHFCQUFxQixFQUlyQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUdOLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVB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LENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQzVELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV0RSx3REFBd0Q7WUFDeEQsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLFFBQVEsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxTQUFTLENBQUMsUUFBZ0I7UUFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTFFLHVGQUF1RjtRQUN2RixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUUvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5RCxDQUFDOzBIQS9qQm9CLG9CQUFvQjs4R0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUR6QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBXZSBhcmUgYnVpbGRpbmcgb24gc2hvdWxkZXJzIG9mIGdpYW50cyBoZXJlIGFuZCBhZGFwdCB0aGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGluY3JlZGlibGUgQW5ndWxhclxuICogdGVhbTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL3RhYnMvcGFnaW5hdGVkLXRhYi1oZWFkZXIudHNcbiAqIENoZWNrIHRoZW0gb3V0ISBHaXZlIHRoZW0gYSB0cnkhIExlYXZlIGEgc3RhciEgVGhlaXIgd29yayBpcyBpbmNyZWRpYmxlIVxuICovXG5cbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIHR5cGUgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgdHlwZSBEaXJlY3Rpb24sIERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgRU5URVIsIFNQQUNFLCBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBTaGFyZWRSZXNpemVPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vYnNlcnZlcnMvcHJpdmF0ZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybSwgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBWaWV3cG9ydFJ1bGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuXHRBTklNQVRJT05fTU9EVUxFX1RZUEUsXG5cdHR5cGUgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcblx0dHlwZSBBZnRlckNvbnRlbnRJbml0LFxuXHR0eXBlIEFmdGVyVmlld0luaXQsXG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHREaXJlY3RpdmUsXG5cdEVsZW1lbnRSZWYsXG5cdEluamVjdG9yLFxuXHROZ1pvbmUsXG5cdHR5cGUgT25EZXN0cm95LFxuXHR0eXBlIFNpZ25hbCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRib29sZWFuQXR0cmlidXRlLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHRvdXRwdXQsXG5cdHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgdHlwZSBPYnNlcnZlciwgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSwgb2YgYXMgb2JzZXJ2YWJsZU9mLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHNraXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9icm4tdGFicyc7XG5cbi8qKiBDb25maWcgdXNlZCB0byBiaW5kIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzICovXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHtcblx0cGFzc2l2ZTogdHJ1ZSxcbn0pIGFzIEV2ZW50TGlzdGVuZXJPcHRpb25zO1xuXG4vKipcbiAqIFRoZSBkaXJlY3Rpb25zIHRoYXQgc2Nyb2xsaW5nIGNhbiBnbyBpbiB3aGVuIHRoZSBoZWFkZXIncyB0YWJzIGV4Y2VlZCB0aGUgaGVhZGVyIHdpZHRoLiAnQWZ0ZXInXG4gKiB3aWxsIHNjcm9sbCB0aGUgaGVhZGVyIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgdGFicyBsaXN0IGFuZCAnYmVmb3JlJyB3aWxsIHNjcm9sbCB0b3dhcmRzIHRoZVxuICogYmVnaW5uaW5nIG9mIHRoZSBsaXN0LlxuICovXG5leHBvcnQgdHlwZSBTY3JvbGxEaXJlY3Rpb24gPSAnYWZ0ZXInIHwgJ2JlZm9yZSc7XG5cbi8qKlxuICogQW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBzdGFydGluZyB0byBzY3JvbGwgdGhlIGhlYWRlciBhdXRvbWF0aWNhbGx5LlxuICogU2V0IGEgbGl0dGxlIGNvbnNlcnZhdGl2ZWx5IGluIG9yZGVyIHRvIGhhbmRsZSBmYWtlIGV2ZW50cyBkaXNwYXRjaGVkIG9uIHRvdWNoIGRldmljZXMuXG4gKi9cbmNvbnN0IEhFQURFUl9TQ1JPTExfREVMQVkgPSA2NTA7XG5cbi8qKlxuICogSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGF0IHdoaWNoIHRvIHNjcm9sbCB0aGUgaGVhZGVyXG4gKiB3aGlsZSB0aGUgdXNlciBpcyBob2xkaW5nIHRoZWlyIHBvaW50ZXIuXG4gKi9cbmNvbnN0IEhFQURFUl9TQ1JPTExfSU5URVJWQUwgPSAxMDA7XG5cbi8qKiBJdGVtIGluc2lkZSBhIHBhZ2luYXRlZCB0YWIgaGVhZGVyLiAqL1xuZXhwb3J0IHR5cGUgQnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbSA9IEZvY3VzYWJsZU9wdGlvbiAmIHsgZWxlbWVudFJlZjogRWxlbWVudFJlZiB9O1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGEgdGFiIGhlYWRlciB0aGF0IHN1cHBvcnRlZCBwYWdpbmF0aW9uLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCcm5UYWJzUGFnaW5hdGVkTGlzdCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cdHB1YmxpYyBhYnN0cmFjdCBpdGVtczogU2lnbmFsPFJlYWRvbmx5QXJyYXk8QnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgaXRlbXNDaGFuZ2VzOiBPYnNlcnZhYmxlPFJlYWRvbmx5QXJyYXk8QnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgdGFiTGlzdENvbnRhaW5lcjogU2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pjtcblx0cHVibGljIGFic3RyYWN0IHRhYkxpc3Q6IFNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cdHB1YmxpYyBhYnN0cmFjdCB0YWJMaXN0SW5uZXI6IFNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cdHB1YmxpYyBhYnN0cmFjdCBuZXh0UGFnaW5hdG9yOiBTaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgcHJldmlvdXNQYWdpbmF0b3I6IFNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cblx0LyoqIFRoZSBkaXN0YW5jZSBpbiBwaXhlbHMgdGhhdCB0aGUgdGFiIGxhYmVscyBzaG91bGQgYmUgdHJhbnNsYXRlZCB0byB0aGUgbGVmdC4gKi9cblx0cHJpdmF0ZSBfc2Nyb2xsRGlzdGFuY2UgPSAwO1xuXG5cdC8qKiBXaGV0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIHNjcm9sbCB0byB0aGUgc2VsZWN0ZWQgaW5kZXggYWZ0ZXIgdGhlIHZpZXcgaGFzIGJlZW4gY2hlY2tlZC4gKi9cblx0cHJpdmF0ZSBfc2VsZWN0ZWRJbmRleENoYW5nZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9yb290ID0gaW5qZWN0KEJyblRhYnMpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVUYWIgPSB0aGlzLl9yb290LiRhY3RpdmVUYWI7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3RhYnMgPSB0aGlzLl9yb290LiR0YWJzO1xuXG5cdC8qKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLiAqL1xuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0LyoqIFdoZXRoZXIgdGhlIGNvbnRyb2xzIGZvciBwYWdpbmF0aW9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgKi9cblx0cHVibGljIHJlYWRvbmx5IHNob3dQYWdpbmF0aW9uQ29udHJvbHMgPSBzaWduYWwoZmFsc2UpO1xuXG5cdC8qKiBXaGV0aGVyIHRoZSB0YWIgbGlzdCBjYW4gYmUgc2Nyb2xsZWQgbW9yZSB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHRhYiBsYWJlbCBsaXN0LiAqL1xuXHRwdWJsaWMgZGlzYWJsZVNjcm9sbEFmdGVyID0gdHJ1ZTtcblxuXHQvKiogV2hldGhlciB0aGUgdGFiIGxpc3QgY2FuIGJlIHNjcm9sbGVkIG1vcmUgdG93YXJkcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0YWIgbGFiZWwgbGlzdC4gKi9cblx0cHVibGljIGRpc2FibGVTY3JvbGxCZWZvcmUgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgbnVtYmVyIG9mIHRhYiBsYWJlbHMgdGhhdCBhcmUgZGlzcGxheWVkIG9uIHRoZSBoZWFkZXIuIFdoZW4gdGhpcyBjaGFuZ2VzLCB0aGUgaGVhZGVyXG5cdCAqIHNob3VsZCByZS1ldmFsdWF0ZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBfdGFiTGFiZWxDb3VudCE6IG51bWJlcjtcblxuXHQvKiogV2hldGhlciB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBjaGFuZ2VkIGFuZCBzaG91bGQgYmUgYXBwbGllZCBhZnRlciB0aGUgdmlldyBpcyBjaGVja2VkLiAqL1xuXHRwcml2YXRlIF9zY3JvbGxEaXN0YW5jZUNoYW5nZWQhOiBib29sZWFuO1xuXG5cdC8qKiBVc2VkIHRvIG1hbmFnZSBmb2N1cyBiZXR3ZWVuIHRoZSB0YWJzLiAqL1xuXHRwcml2YXRlIF9rZXlNYW5hZ2VyITogRm9jdXNLZXlNYW5hZ2VyPEJyblBhZ2luYXRlZFRhYkhlYWRlckl0ZW0+O1xuXG5cdC8qKiBDYWNoZWQgdGV4dCBjb250ZW50IG9mIHRoZSBoZWFkZXIuICovXG5cdHByaXZhdGUgX2N1cnJlbnRUZXh0Q29udGVudCE6IHN0cmluZztcblxuXHQvKiogU3RyZWFtIHRoYXQgd2lsbCBzdG9wIHRoZSBhdXRvbWF0ZWQgc2Nyb2xsaW5nLiAqL1xuXHRwcml2YXRlIHJlYWRvbmx5IF9zdG9wU2Nyb2xsaW5nID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuXHQvKipcblx0ICogV2hldGhlciBwYWdpbmF0aW9uIHNob3VsZCBiZSBkaXNhYmxlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuXHQgKiBsYXlvdXQgcmVjYWxjdWxhdGlvbnMgaWYgaXQncyBrbm93biB0aGF0IHBhZ2luYXRpb24gd29uJ3QgYmUgcmVxdWlyZWQuXG5cdCAqL1xuXHRwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZVBhZ2luYXRpb24gPSBpbnB1dChmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cblx0LyoqIFRoZSBpbmRleCBvZiB0aGUgYWN0aXZlIHRhYi4gKi9cblx0cHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRJbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50VGFiS2V5ID0gdGhpcy5fYWN0aXZlVGFiKCk7XG5cdFx0Y29uc3QgdGFicyA9IHRoaXMuX3RhYnMoKTtcblxuXHRcdGxldCBhY3RpdmVJbmRleCA9IDA7XG5cdFx0aWYgKGN1cnJlbnRUYWJLZXkgJiYgdGhpcy5pdGVtcygpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VGFiID0gdGFic1tjdXJyZW50VGFiS2V5XTtcblx0XHRcdGlmIChjdXJyZW50VGFiKSB7XG5cdFx0XHRcdGFjdGl2ZUluZGV4ID0gdGhpcy5pdGVtcygpLmluZGV4T2YoY3VycmVudFRhYi50cmlnZ2VyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aXZlSW5kZXg7XG5cdH0pO1xuXG5cdC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4gKi9cblx0cHVibGljIHJlYWRvbmx5IHNlbGVjdEZvY3VzZWRJbmRleCA9IG91dHB1dDxudW1iZXI+KCk7XG5cblx0LyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGxhYmVsIGlzIGZvY3VzZWQuICovXG5cdHB1YmxpYyByZWFkb25seSBpbmRleEZvY3VzZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX3NoYXJlZFJlc2l6ZU9ic2VydmVyID0gaW5qZWN0KFNoYXJlZFJlc2l6ZU9ic2VydmVyKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0cHJvdGVjdGVkIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcblx0cHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF92aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyID0gaW5qZWN0KFZpZXdwb3J0UnVsZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kaXIgPSBpbmplY3QoRGlyZWN0aW9uYWxpdHksIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtOiBQbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybSk7XG5cdHB1YmxpYyByZWFkb25seSBhbmltYXRpb25Nb2RlID0gaW5qZWN0KEFOSU1BVElPTl9NT0RVTEVfVFlQRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHQvLyBCaW5kIHRoZSBgbW91c2VsZWF2ZWAgZXZlbnQgb24gdGhlIG91dHNpZGUgc2luY2UgaXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIHZpZXcuXG5cdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCgpO1xuXG5cdFx0XHRpZiAoc2VsZWN0ZWRJbmRleCAhPT0gMCkge1xuXHRcdFx0XHR0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZCA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzLl9rZXlNYW5hZ2VyKSB7XG5cdFx0XHRcdFx0dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHNlbGVjdGVkSW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGFuIGl0ZW0gdmlhIHRoZSBrZXlib2FyZC4gKi9cblx0cHJvdGVjdGVkIGFic3RyYWN0IF9pdGVtU2VsZWN0ZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGVzZSBldmVudHMgbWFudWFsbHksIGJlY2F1c2Ugd2Ugd2FudCB0byBiaW5kIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzLlxuXHRcdGZyb21FdmVudCh0aGlzLnByZXZpb3VzUGFnaW5hdG9yKCkubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygnYmVmb3JlJyk7XG5cdFx0XHR9KTtcblxuXHRcdGZyb21FdmVudCh0aGlzLm5leHRQYWdpbmF0b3IoKS5uYXRpdmVFbGVtZW50LCAndG91Y2hzdGFydCcsIHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucylcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCdhZnRlcicpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cdFx0Y29uc3QgZGlyQ2hhbmdlID0gdGhpcy5fZGlyID8gdGhpcy5fZGlyLmNoYW5nZSA6IG9ic2VydmFibGVPZignbHRyJyk7XG5cdFx0Ly8gV2UgbmVlZCB0byBkZWJvdW5jZSByZXNpemUgZXZlbnRzIGJlY2F1c2UgdGhlIGFsaWdubWVudCBsb2dpYyBpcyBleHBlbnNpdmUuXG5cdFx0Ly8gSWYgc29tZW9uZSBhbmltYXRlcyB0aGUgd2lkdGggb2YgdGFicywgd2UgZG9uJ3Qgd2FudCB0byByZWFsaWduIG9uIGV2ZXJ5IGFuaW1hdGlvbiBmcmFtZS5cblx0XHQvLyBPbmNlIHdlIGhhdmVuJ3Qgc2VlbiBhbnkgbW9yZSByZXNpemUgZXZlbnRzIGluIHRoZSBsYXN0IDMybXMgKH4yIGFuaW1haW9uIGZyYW1lcykgd2UgY2FuXG5cdFx0Ly8gcmUtYWxpZ24uXG5cdFx0Y29uc3QgcmVzaXplID0gdGhpcy5fc2hhcmVkUmVzaXplT2JzZXJ2ZXJcblx0XHRcdC5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcblx0XHRcdC5waXBlKGRlYm91bmNlVGltZSgzMiksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKTtcblx0XHQvLyBOb3RlOiBXZSBkbyBub3QgYWN0dWFsbHkgbmVlZCB0byB3YXRjaCB0aGVzZSBldmVudHMgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0aGUgdGFicyxcblx0XHQvLyB0aGUgcmVzaXplIGV2ZW50cyBhYm92ZSBzaG91bGQgY2FwdHVyZSBhbnkgdmlld3BvcnQgcmVzaXplIHRoYXQgd2UgY2FyZSBhYm91dC4gSG93ZXZlcixcblx0XHQvLyByZW1vdmluZyB0aGlzIGlzIGZhaXJseSBicmVha2luZyBmb3Igc2NyZWVuc2hvdCB0ZXN0cywgc28gd2UncmUgbGVhdmluZyBpdCBoZXJlIGZvciBub3cuXG5cdFx0Y29uc3Qgdmlld3BvcnRSZXNpemUgPSB0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpO1xuXG5cdFx0Y29uc3QgcmVhbGlnbiA9ICgpID0+IHtcblx0XHRcdHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xuXHRcdH07XG5cblx0XHR0aGlzLl9rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcjxCcm5QYWdpbmF0ZWRUYWJIZWFkZXJJdGVtPih0aGlzLml0ZW1zKCkpXG5cdFx0XHQud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSlcblx0XHRcdC53aXRoSG9tZUFuZEVuZCgpXG5cdFx0XHQud2l0aFdyYXAoKVxuXHRcdFx0Ly8gQWxsb3cgZm9jdXMgdG8gbGFuZCBvbiBkaXNhYmxlZCB0YWJzLCBhcyBwZXIgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2FyaWEtcHJhY3RpY2VzLyNrYmRfZGlzYWJsZWRfY29udHJvbHNcblx0XHRcdC5za2lwUHJlZGljYXRlKCgpID0+IGZhbHNlKTtcblxuXHRcdHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSh0aGlzLl9zZWxlY3RlZEluZGV4KCkpO1xuXG5cdFx0Ly8gTm90ZTogV2UgZG8gbm90IG5lZWQgdG8gcmVhbGlnbiBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIHRhYnNcblx0XHQvLyB0aGUgcmVzaXplIGV2ZW50cyBhYm92ZSBzaG91bGQgZmlyZSB3aGVuIHdlIGZpcnN0IHN0YXJ0IG9ic2VydmluZyB0aGUgZWxlbWVudC4gSG93ZXZlcixcblx0XHQvLyByZW1vdmluZyB0aGlzIGlzIGZhaXJseSBicmVha2luZyBmb3Igc2NyZWVuc2hvdCB0ZXN0cywgc28gd2UncmUgbGVhdmluZyBpdCBoZXJlIGZvciBub3cuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKHJlYWxpZ24sIHsgaW5qZWN0b3I6IHRoaXMuX2luamVjdG9yIH0pO1xuXG5cdFx0Ly8gT24gZGlyIGNoYW5nZSBvciByZXNpemUsIHJlYWxpZ24gdGhlIGluayBiYXIgYW5kIHVwZGF0ZSB0aGUgb3JpZW50YXRpb24gb2Zcblx0XHQvLyB0aGUga2V5IG1hbmFnZXIgaWYgdGhlIGRpcmVjdGlvbiBoYXMgY2hhbmdlZC5cblx0XHRtZXJnZShkaXJDaGFuZ2UsIHZpZXdwb3J0UmVzaXplLCByZXNpemUsIHRoaXMuaXRlbXNDaGFuZ2VzLCB0aGlzLl9pdGVtc1Jlc2l6ZWQoKSlcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gZGVmZXIgdGhpcyB0byBnaXZlIHRoZSBicm93c2VyIHNvbWUgdGltZSB0byByZWNhbGN1bGF0ZVxuXHRcdFx0XHQvLyB0aGUgZWxlbWVudCBkaW1lbnNpb25zLiBUaGUgY2FsbCBoYXMgdG8gYmUgd3JhcHBlZCBpbiBgTmdab25lLnJ1bmAsXG5cdFx0XHRcdC8vIGJlY2F1c2UgdGhlIHZpZXdwb3J0IGNoYW5nZSBoYW5kbGVyIHJ1bnMgb3V0c2lkZSBvZiBBbmd1bGFyLlxuXHRcdFx0XHR0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdC8vIENsYW1wIHRoZSBzY3JvbGwgZGlzdGFuY2UsIGJlY2F1c2UgaXQgY2FuIGNoYW5nZSB3aXRoIHRoZSBudW1iZXIgb2YgdGFicy5cblx0XHRcdFx0XHRcdHRoaXMuX3Njcm9sbERpc3RhbmNlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSwgdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKTtcblx0XHRcdFx0XHRcdHJlYWxpZ24oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSk7XG5cdFx0XHR9KTtcblxuXHRcdC8vIElmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBmb2N1cyBrZXkgbWFuYWdlciB3ZSBuZWVkIHRvIGVtaXQgdGhlIGBpbmRleEZvY3VzZWRgXG5cdFx0Ly8gZXZlbnQgaW4gb3JkZXIgdG8gcHJvdmlkZSBhIHB1YmxpYyBldmVudCB0aGF0IG5vdGlmaWVzIGFib3V0IGZvY3VzIGNoYW5nZXMuIEFsc28gd2UgcmVhbGlnblxuXHRcdC8vIHRoZSB0YWJzIGNvbnRhaW5lciBieSBzY3JvbGxpbmcgdGhlIG5ldyBmb2N1c2VkIHRhYiBpbnRvIHRoZSB2aXNpYmxlIHNlY3Rpb24uXG5cdFx0dGhpcy5fa2V5TWFuYWdlci5jaGFuZ2Uuc3Vic2NyaWJlKChuZXdGb2N1c0luZGV4KSA9PiB7XG5cdFx0XHR0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KG5ld0ZvY3VzSW5kZXgpO1xuXHRcdFx0dGhpcy5fc2V0VGFiRm9jdXMobmV3Rm9jdXNJbmRleCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogU2VuZHMgYW55IGNoYW5nZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGxheW91dCBvZiB0aGUgaXRlbXMuICovXG5cdHByaXZhdGUgX2l0ZW1zUmVzaXplZCgpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4ge1xuXHRcdGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBFTVBUWTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtc0NoYW5nZXMucGlwZShcblx0XHRcdHN0YXJ0V2l0aCh0aGlzLml0ZW1zKCkpLFxuXHRcdFx0c3dpdGNoTWFwKFxuXHRcdFx0XHQodGFiSXRlbXM6IFJlYWRvbmx5QXJyYXk8QnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4pID0+XG5cdFx0XHRcdFx0bmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxSZXNpemVPYnNlcnZlckVudHJ5W10+KSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IG9ic2VydmVyLm5leHQoZW50cmllcykpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHRhYkl0ZW0gb2YgdGFiSXRlbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNpemVPYnNlcnZlci5vYnNlcnZlKHRhYkl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCksXG5cdFx0XHQpLFxuXHRcdFx0Ly8gU2tpcCB0aGUgZmlyc3QgZW1pdCBzaW5jZSB0aGUgcmVzaXplIG9ic2VydmVyIGVtaXRzIHdoZW4gYW4gaXRlbVxuXHRcdFx0Ly8gaXMgb2JzZXJ2ZWQgZm9yIG5ldyBpdGVtcyB3aGVuIHRoZSB0YWIgaXMgYWxyZWFkeSBpbnNlcnRlZFxuXHRcdFx0c2tpcCgxKSxcblx0XHRcdC8vIFNraXAgZW1pc3Npb25zIHdoZXJlIGFsbCB0aGUgZWxlbWVudHMgYXJlIGludmlzaWJsZSBzaW5jZSB3ZSBkb24ndCB3YW50XG5cdFx0XHQvLyB0aGUgaGVhZGVyIHRvIHRyeSBhbmQgcmUtcmVuZGVyIHdpdGggaW52YWxpZCBtZWFzdXJlbWVudHMuIFNlZSAjMjU1NzQuXG5cdFx0XHRmaWx0ZXIoKGVudHJpZXMpID0+IGVudHJpZXMuc29tZSgoZSkgPT4gZS5jb250ZW50UmVjdC53aWR0aCA+IDAgJiYgZS5jb250ZW50UmVjdC5oZWlnaHQgPiAwKSksXG5cdFx0KTtcblx0fVxuXG5cdG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcblx0XHQvLyBJZiB0aGUgbnVtYmVyIG9mIHRhYiBsYWJlbHMgaGF2ZSBjaGFuZ2VkLCBjaGVjayBpZiBzY3JvbGxpbmcgc2hvdWxkIGJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5fdGFiTGFiZWxDb3VudCAhPT0gdGhpcy5pdGVtcygpLmxlbmd0aCkge1xuXHRcdFx0dGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XG5cdFx0XHR0aGlzLl90YWJMYWJlbENvdW50ID0gdGhpcy5pdGVtcygpLmxlbmd0aDtcblx0XHRcdHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBzZWxlY3RlZCBpbmRleCBoYXMgY2hhbmdlZCwgc2Nyb2xsIHRvIHRoZSBsYWJlbCBhbmQgY2hlY2sgaWYgdGhlIHNjcm9sbGluZyBjb250cm9sc1xuXHRcdC8vIHNob3VsZCBiZSBkaXNhYmxlZC5cblx0XHRpZiAodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQpIHtcblx0XHRcdHRoaXMuX3Njcm9sbFRvTGFiZWwodGhpcy5fc2VsZWN0ZWRJbmRleCgpKTtcblx0XHRcdHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBiZWVuIGNoYW5nZWQgKHRhYiBzZWxlY3RlZCwgZm9jdXNlZCwgc2Nyb2xsIGNvbnRyb2xzIGFjdGl2YXRlZCksXG5cdFx0Ly8gdGhlbiB0cmFuc2xhdGUgdGhlIGhlYWRlciB0byByZWZsZWN0IHRoaXMuXG5cdFx0aWYgKHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCkge1xuXHRcdFx0dGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKTtcblx0XHRcdHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG5cdFx0dGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fc3RvcFNjcm9sbGluZy5jb21wbGV0ZSgpO1xuXHR9XG5cblx0LyoqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBoZWFkZXIuICovXG5cdF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0Ly8gV2UgZG9uJ3QgaGFuZGxlIGFueSBrZXkgYmluZGluZ3Mgd2l0aCBhIG1vZGlmaWVyIGtleS5cblx0XHRpZiAoaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG5cdFx0XHRjYXNlIEVOVEVSOlxuXHRcdFx0Y2FzZSBTUEFDRTpcblx0XHRcdFx0aWYgKHRoaXMuZm9jdXNJbmRleCAhPT0gdGhpcy5fc2VsZWN0ZWRJbmRleCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXMoKVt0aGlzLmZvY3VzSW5kZXhdO1xuXG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgIWl0ZW0uZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KTtcblx0XHRcdFx0XHRcdHRoaXMuX2l0ZW1TZWxlY3RlZChldmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgTXV0YXRpb25PYnNlcnZlciBkZXRlY3RzIHRoYXQgdGhlIGNvbnRlbnQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRfb25Db250ZW50Q2hhbmdlcygpIHtcblx0XHRjb25zdCB0ZXh0Q29udGVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtcblxuXHRcdC8vIFdlIG5lZWQgdG8gZGlmZiB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBoZWFkZXIsIGJlY2F1c2UgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcblx0XHQvLyB3aWxsIGZpcmUgZXZlbiBpZiB0aGUgdGV4dCBjb250ZW50IGRpZG4ndCBjaGFuZ2Ugd2hpY2ggaXMgaW5lZmZpY2llbnQgYW5kIGlzIHByb25lXG5cdFx0Ly8gdG8gaW5maW5pdGUgbG9vcHMgaWYgYSBwb29ybHkgY29uc3RydWN0ZWQgZXhwcmVzc2lvbiBpcyBwYXNzZWQgaW4gKHNlZSAjMTQyNDkpLlxuXHRcdGlmICh0ZXh0Q29udGVudCAhPT0gdGhpcy5fY3VycmVudFRleHRDb250ZW50KSB7XG5cdFx0XHR0aGlzLl9jdXJyZW50VGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudCB8fCAnJztcblxuXHRcdFx0Ly8gVGhlIGNvbnRlbnQgb2JzZXJ2ZXIgcnVucyBvdXRzaWRlIHRoZSBgTmdab25lYCBieSBkZWZhdWx0LCB3aGljaFxuXHRcdFx0Ly8gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGJyaW5nIHRoZSBjYWxsYmFjayBiYWNrIGluIG91cnNlbHZlcy5cblx0XHRcdHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcblx0XHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdmlldyB3aGV0aGVyIHBhZ2luYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LlxuXHQgKlxuXHQgKiBXQVJOSU5HOiBDYWxsaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSB2ZXJ5IGNvc3RseSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZS4gSXQgc2hvdWxkIGJlIGNhbGxlZFxuXHQgKiBhcyBpbmZyZXF1ZW50bHkgYXMgcG9zc2libGUgZnJvbSBvdXRzaWRlIG9mIHRoZSBUYWJzIGNvbXBvbmVudCBhcyBpdCBjYXVzZXMgYSByZWZsb3cgb2YgdGhlXG5cdCAqIHBhZ2UuXG5cdCAqL1xuXHR1cGRhdGVQYWdpbmF0aW9uKCkge1xuXHRcdHRoaXMuX2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKTtcblx0XHR0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCk7XG5cdFx0dGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKTtcblx0fVxuXG5cdC8qKiBUcmFja3Mgd2hpY2ggZWxlbWVudCBoYXMgZm9jdXM7IHVzZWQgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gKi9cblx0cHVibGljIGdldCBmb2N1c0luZGV4KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2tleU1hbmFnZXIgPyAodGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXggPz8gMCkgOiAwO1xuXHR9XG5cblx0LyoqIFdoZW4gdGhlIGZvY3VzIGluZGV4IGlzIHNldCwgd2UgbXVzdCBtYW51YWxseSBzZW5kIGZvY3VzIHRvIHRoZSBjb3JyZWN0IGxhYmVsICovXG5cdHB1YmxpYyBzZXQgZm9jdXNJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLl9pc1ZhbGlkSW5kZXgodmFsdWUpIHx8IHRoaXMuZm9jdXNJbmRleCA9PT0gdmFsdWUgfHwgIXRoaXMuX2tleU1hbmFnZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYW4gaW5kZXggaXMgdmFsaWQuICBJZiB0aGUgdGFicyBhcmUgbm90IHJlYWR5IHlldCwgd2UgYXNzdW1lIHRoYXQgdGhlIHVzZXIgaXNcblx0ICogcHJvdmlkaW5nIGEgdmFsaWQgaW5kZXggYW5kIHJldHVybiB0cnVlLlxuXHQgKi9cblx0X2lzVmFsaWRJbmRleChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbXMoKSA/ICEhdGhpcy5pdGVtcygpW2luZGV4XSA6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBmb2N1cyBvbiB0aGUgSFRNTCBlbGVtZW50IGZvciB0aGUgbGFiZWwgd3JhcHBlciBhbmQgc2Nyb2xscyBpdCBpbnRvIHRoZSB2aWV3IGlmXG5cdCAqIHNjcm9sbGluZyBpcyBlbmFibGVkLlxuXHQgKi9cblx0X3NldFRhYkZvY3VzKHRhYkluZGV4OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKCkpIHtcblx0XHRcdHRoaXMuX3Njcm9sbFRvTGFiZWwodGFiSW5kZXgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLml0ZW1zKCk/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5pdGVtcygpW3RhYkluZGV4XS5mb2N1cygpO1xuXG5cdFx0XHQvLyBEbyBub3QgbGV0IHRoZSBicm93c2VyIG1hbmFnZSBzY3JvbGxpbmcgdG8gZm9jdXMgdGhlIGVsZW1lbnQsIHRoaXMgd2lsbCBiZSBoYW5kbGVkXG5cdFx0XHQvLyBieSB1c2luZyB0cmFuc2xhdGlvbi4gSW4gTFRSLCB0aGUgc2Nyb2xsIGxlZnQgc2hvdWxkIGJlIDAuIEluIFJUTCwgdGhlIHNjcm9sbCB3aWR0aFxuXHRcdFx0Ly8gc2hvdWxkIGJlIHRoZSBmdWxsIHdpZHRoIG1pbnVzIHRoZSBvZmZzZXQgd2lkdGguXG5cdFx0XHRjb25zdCBjb250YWluZXJFbCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRjb25zdCBkaXIgPSB0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKTtcblxuXHRcdFx0aWYgKGRpciA9PT0gJ2x0cicpIHtcblx0XHRcdFx0Y29udGFpbmVyRWwuc2Nyb2xsTGVmdCA9IDA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250YWluZXJFbC5zY3JvbGxMZWZ0ID0gY29udGFpbmVyRWwuc2Nyb2xsV2lkdGggLSBjb250YWluZXJFbC5vZmZzZXRXaWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogVGhlIGxheW91dCBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYXBwLiAqL1xuXHRfZ2V0TGF5b3V0RGlyZWN0aW9uKCk6IERpcmVjdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2RpciAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdydGwnID8gJ3J0bCcgOiAnbHRyJztcblx0fVxuXG5cdC8qKiBQZXJmb3JtcyB0aGUgQ1NTIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSB0YWIgbGlzdCB0aGF0IHdpbGwgY2F1c2UgdGhlIGxpc3QgdG8gc2Nyb2xsLiAqL1xuXHRfdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24oKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNjcm9sbERpc3RhbmNlID0gdGhpcy5zY3JvbGxEaXN0YW5jZTtcblx0XHRjb25zdCB0cmFuc2xhdGVYID0gdGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkgPT09ICdsdHInID8gLXNjcm9sbERpc3RhbmNlIDogc2Nyb2xsRGlzdGFuY2U7XG5cblx0XHQvLyBEb24ndCB1c2UgYHRyYW5zbGF0ZTNkYCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBuZXcgbGF5ZXIuIEEgbmV3IGxheWVyXG5cdFx0Ly8gc2VlbXMgdG8gY2F1c2UgZmxpY2tlcmluZyBhbmQgb3ZlcmZsb3cgaW4gSW50ZXJuZXQgRXhwbG9yZXIuIEZvciBleGFtcGxlLCB0aGUgaW5rIGJhclxuXHRcdC8vIGFuZCByaXBwbGVzIHdpbGwgZXhjZWVkIHRoZSBib3VuZGFyaWVzIG9mIHRoZSB2aXNpYmxlIHRhYiBiYXIuXG5cdFx0Ly8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8xMDI3NlxuXHRcdC8vIFdlIHJvdW5kIHRoZSBgdHJhbnNmb3JtYCBoZXJlLCBiZWNhdXNlIHRyYW5zZm9ybXMgd2l0aCBzdWItcGl4ZWwgcHJlY2lzaW9uIGNhdXNlIHNvbWVcblx0XHQvLyBicm93c2VycyB0byBibHVyIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50LlxuXHRcdHRoaXMudGFiTGlzdCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKHRyYW5zbGF0ZVgpfXB4KWA7XG5cblx0XHQvLyBTZXR0aW5nIHRoZSBgdHJhbnNmb3JtYCBvbiBJRSB3aWxsIGNoYW5nZSB0aGUgc2Nyb2xsIG9mZnNldCBvZiB0aGUgcGFyZW50LCBjYXVzaW5nIHRoZVxuXHRcdC8vIHBvc2l0aW9uIHRvIGJlIHRocm93biBvZmYgaW4gc29tZSBjYXNlcy4gV2UgaGF2ZSB0byByZXNldCBpdCBvdXJzZWx2ZXMgdG8gZW5zdXJlIHRoYXRcblx0XHQvLyBpdCBkb2Vzbid0IGdldCB0aHJvd24gb2ZmLiBOb3RlIHRoYXQgd2Ugc2NvcGUgaXQgb25seSB0byBJRSBhbmQgRWRnZSwgYmVjYXVzZSBtZXNzaW5nXG5cdFx0Ly8gd2l0aCB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRocm93cyBvZmYgQ2hyb21lIDcxKyBpbiBSVEwgbW9kZSAoc2VlICMxNDY4OSkuXG5cdFx0aWYgKHRoaXMuX3BsYXRmb3JtLlRSSURFTlQgfHwgdGhpcy5fcGxhdGZvcm0uRURHRSkge1xuXHRcdFx0dGhpcy50YWJMaXN0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcblx0XHR9XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgZGlzdGFuY2UgaW4gcGl4ZWxzIHRoYXQgdGhlIHRhYiBoZWFkZXIgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGluIHRoZSBYLWF4aXMuICovXG5cdHB1YmxpYyBnZXQgc2Nyb2xsRGlzdGFuY2UoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U7XG5cdH1cblx0cHVibGljIHNldCBzY3JvbGxEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5fc2Nyb2xsVG8odmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1vdmVzIHRoZSB0YWIgbGlzdCBpbiB0aGUgJ2JlZm9yZScgb3IgJ2FmdGVyJyBkaXJlY3Rpb24gKHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBvclxuXHQgKiB0aGUgZW5kIG9mIHRoZSBsaXN0LCByZXNwZWN0aXZlbHkpLiBUaGUgZGlzdGFuY2UgdG8gc2Nyb2xsIGlzIGNvbXB1dGVkIHRvIGJlIGEgdGhpcmQgb2YgdGhlXG5cdCAqIGxlbmd0aCBvZiB0aGUgdGFiIGxpc3QgdmlldyB3aW5kb3cuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfc2Nyb2xsSGVhZGVyKGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uKSB7XG5cdFx0Y29uc3Qgdmlld0xlbmd0aCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cblx0XHQvLyBNb3ZlIHRoZSBzY3JvbGwgZGlzdGFuY2Ugb25lLXRoaXJkIHRoZSBsZW5ndGggb2YgdGhlIHRhYiBsaXN0J3Mgdmlld3BvcnQuXG5cdFx0Y29uc3Qgc2Nyb2xsQW1vdW50ID0gKChkaXJlY3Rpb24gPT09ICdiZWZvcmUnID8gLTEgOiAxKSAqIHZpZXdMZW5ndGgpIC8gMztcblxuXHRcdHJldHVybiB0aGlzLl9zY3JvbGxUbyh0aGlzLl9zY3JvbGxEaXN0YW5jZSArIHNjcm9sbEFtb3VudCk7XG5cdH1cblxuXHQvKiogSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIHBhZ2luYXRpb24gYXJyb3dzLiAqL1xuXHRfaGFuZGxlUGFnaW5hdG9yQ2xpY2soZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcblx0XHR0aGlzLl9zdG9wSW50ZXJ2YWwoKTtcblx0XHR0aGlzLl9zY3JvbGxIZWFkZXIoZGlyZWN0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNb3ZlcyB0aGUgdGFiIGxpc3Qgc3VjaCB0aGF0IHRoZSBkZXNpcmVkIHRhYiBsYWJlbCAobWFya2VkIGJ5IGluZGV4KSBpcyBtb3ZlZCBpbnRvIHZpZXcuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfc2Nyb2xsVG9MYWJlbChsYWJlbEluZGV4OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VsZWN0ZWRMYWJlbCA9IHRoaXMuaXRlbXMoKSA/IHRoaXMuaXRlbXMoKVtsYWJlbEluZGV4XSA6IG51bGw7XG5cblx0XHRpZiAoIXNlbGVjdGVkTGFiZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBUaGUgdmlldyBsZW5ndGggaXMgdGhlIHZpc2libGUgd2lkdGggb2YgdGhlIHRhYiBsYWJlbHMuXG5cdFx0Y29uc3Qgdmlld0xlbmd0aCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cdFx0Y29uc3QgeyBvZmZzZXRMZWZ0LCBvZmZzZXRXaWR0aCB9ID0gc2VsZWN0ZWRMYWJlbC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRsZXQgbGFiZWxCZWZvcmVQb3M6IG51bWJlcjtcblx0XHRsZXQgbGFiZWxBZnRlclBvczogbnVtYmVyO1xuXHRcdGlmICh0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSA9PT0gJ2x0cicpIHtcblx0XHRcdGxhYmVsQmVmb3JlUG9zID0gb2Zmc2V0TGVmdDtcblx0XHRcdGxhYmVsQWZ0ZXJQb3MgPSBsYWJlbEJlZm9yZVBvcyArIG9mZnNldFdpZHRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsYWJlbEFmdGVyUG9zID0gdGhpcy50YWJMaXN0SW5uZXIoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gb2Zmc2V0TGVmdDtcblx0XHRcdGxhYmVsQmVmb3JlUG9zID0gbGFiZWxBZnRlclBvcyAtIG9mZnNldFdpZHRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJlZm9yZVZpc2libGVQb3MgPSB0aGlzLnNjcm9sbERpc3RhbmNlO1xuXHRcdGNvbnN0IGFmdGVyVmlzaWJsZVBvcyA9IHRoaXMuc2Nyb2xsRGlzdGFuY2UgKyB2aWV3TGVuZ3RoO1xuXG5cdFx0aWYgKGxhYmVsQmVmb3JlUG9zIDwgYmVmb3JlVmlzaWJsZVBvcykge1xuXHRcdFx0Ly8gU2Nyb2xsIGhlYWRlciB0byBtb3ZlIGxhYmVsIHRvIHRoZSBiZWZvcmUgZGlyZWN0aW9uXG5cdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlIC09IGJlZm9yZVZpc2libGVQb3MgLSBsYWJlbEJlZm9yZVBvcztcblx0XHR9IGVsc2UgaWYgKGxhYmVsQWZ0ZXJQb3MgPiBhZnRlclZpc2libGVQb3MpIHtcblx0XHRcdC8vIFNjcm9sbCBoZWFkZXIgdG8gbW92ZSBsYWJlbCB0byB0aGUgYWZ0ZXIgZGlyZWN0aW9uXG5cdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlICs9IE1hdGgubWluKGxhYmVsQWZ0ZXJQb3MgLSBhZnRlclZpc2libGVQb3MsIGxhYmVsQmVmb3JlUG9zIC0gYmVmb3JlVmlzaWJsZVBvcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlIHdoZXRoZXIgdGhlIHBhZ2luYXRpb24gY29udHJvbHMgc2hvdWxkIGJlIGRpc3BsYXllZC4gSWYgdGhlIHNjcm9sbCB3aWR0aCBvZiB0aGVcblx0ICogdGFiIGxpc3QgaXMgd2lkZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGNvbnRhaW5lciwgdGhlbiB0aGUgcGFnaW5hdGlvbiBjb250cm9scyBzaG91bGRcblx0ICogYmUgc2hvd24uXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHR0aGlzLnNob3dQYWdpbmF0aW9uQ29udHJvbHMuc2V0KGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaXNFbmFibGVkID0gdGhpcy50YWJMaXN0SW5uZXIoKS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG5cdFx0XHRpZiAoIWlzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzRW5hYmxlZCAhPT0gdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKCkpIHtcblx0XHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scy5zZXQoaXNFbmFibGVkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZhbHVhdGUgd2hldGhlciB0aGUgYmVmb3JlIGFuZCBhZnRlciBjb250cm9scyBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogSWYgdGhlIGhlYWRlciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IChzY3JvbGwgZGlzdGFuY2UgaXMgZXF1YWwgdG8gMCkgdGhlbiBkaXNhYmxlIHRoZVxuXHQgKiBiZWZvcmUgYnV0dG9uLiBJZiB0aGUgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKHNjcm9sbCBkaXN0YW5jZSBpcyBlcXVhbCB0byB0aGVcblx0ICogbWF4aW11bSBkaXN0YW5jZSB3ZSBjYW4gc2Nyb2xsKSwgdGhlbiBkaXNhYmxlIHRoZSBhZnRlciBidXR0b24uXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfY2hlY2tTY3JvbGxpbmdDb250cm9scygpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHR0aGlzLmRpc2FibGVTY3JvbGxBZnRlciA9IHRoaXMuZGlzYWJsZVNjcm9sbEJlZm9yZSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBwYWdpbmF0aW9uIGFycm93cyBzaG91bGQgYmUgYWN0aXZhdGVkLlxuXHRcdFx0dGhpcy5kaXNhYmxlU2Nyb2xsQmVmb3JlID0gdGhpcy5zY3JvbGxEaXN0YW5jZSA9PT0gMDtcblx0XHRcdHRoaXMuZGlzYWJsZVNjcm9sbEFmdGVyID0gdGhpcy5zY3JvbGxEaXN0YW5jZSA9PT0gdGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtcblx0XHRcdHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIGluIHBpeGVscyB0aGF0IGNhbiBiZSBzZXQgZm9yIHRoZSBzY3JvbGwgZGlzdGFuY2UuIFRoaXNcblx0ICogaXMgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UgaW4gd2lkdGggYmV0d2VlbiB0aGUgdGFiIGxpc3QgY29udGFpbmVyIGFuZCB0YWIgaGVhZGVyIGNvbnRhaW5lci5cblx0ICpcblx0ICogVGhpcyBpcyBhbiBleHBlbnNpdmUgY2FsbCB0aGF0IGZvcmNlcyBhIGxheW91dCByZWZsb3cgdG8gY29tcHV0ZSBib3ggYW5kIHNjcm9sbCBtZXRyaWNzIGFuZFxuXHQgKiBzaG91bGQgYmUgY2FsbGVkIHNwYXJpbmdseS5cblx0ICovXG5cdF9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpOiBudW1iZXIge1xuXHRcdGNvbnN0IGxlbmd0aE9mVGFiTGlzdCA9IHRoaXMudGFiTGlzdElubmVyKCkubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcblx0XHRjb25zdCB2aWV3TGVuZ3RoID0gdGhpcy50YWJMaXN0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblx0XHRyZXR1cm4gbGVuZ3RoT2ZUYWJMaXN0IC0gdmlld0xlbmd0aCB8fCAwO1xuXHR9XG5cblx0LyoqIFN0b3BzIHRoZSBjdXJyZW50bHktcnVubmluZyBwYWdpbmF0b3IgaW50ZXJ2YWwuICAqL1xuXHRfc3RvcEludGVydmFsKCkge1xuXHRcdHRoaXMuX3N0b3BTY3JvbGxpbmcubmV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHVzZXIgcHJlc3NpbmcgZG93biBvbiBvbmUgb2YgdGhlIHBhZ2luYXRvcnMuXG5cdCAqIFN0YXJ0cyBzY3JvbGxpbmcgdGhlIGhlYWRlciBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUuXG5cdCAqIEBwYXJhbSBkaXJlY3Rpb24gSW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwYWdpbmF0b3Igc2hvdWxkIGJlIHNjcm9sbGVkLlxuXHQgKi9cblx0X2hhbmRsZVBhZ2luYXRvclByZXNzKGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50PzogTW91c2VFdmVudCkge1xuXHRcdC8vIERvbid0IHN0YXJ0IGF1dG8gc2Nyb2xsaW5nIGZvciByaWdodCBtb3VzZSBidXR0b24gY2xpY2tzLiBOb3RlIHRoYXQgd2Ugc2hvdWxkbid0IGhhdmUgdG9cblx0XHQvLyBudWxsIGNoZWNrIHRoZSBgYnV0dG9uYCwgYnV0IHdlIGRvIGl0IHNvIHdlIGRvbid0IGJyZWFrIHRlc3RzIHRoYXQgdXNlIGZha2UgZXZlbnRzLlxuXHRcdGlmIChtb3VzZUV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0dG9uICE9PSBudWxsICYmIG1vdXNlRXZlbnQuYnV0dG9uICE9PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQXZvaWQgb3ZlcmxhcHBpbmcgdGltZXJzLlxuXHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXG5cdFx0Ly8gU3RhcnQgYSB0aW1lciBhZnRlciB0aGUgZGVsYXkgYW5kIGtlZXAgZmlyaW5nIGJhc2VkIG9uIHRoZSBpbnRlcnZhbC5cblx0XHR0aW1lcihIRUFERVJfU0NST0xMX0RFTEFZLCBIRUFERVJfU0NST0xMX0lOVEVSVkFMKVxuXHRcdFx0Ly8gS2VlcCB0aGUgdGltZXIgZ29pbmcgdW50aWwgc29tZXRoaW5nIHRlbGxzIGl0IHRvIHN0b3Agb3IgdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXG5cdFx0XHQucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fc3RvcFNjcm9sbGluZywgdGhpcy5fZGVzdHJveWVkKSkpXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgeyBtYXhTY3JvbGxEaXN0YW5jZSwgZGlzdGFuY2UgfSA9IHRoaXMuX3Njcm9sbEhlYWRlcihkaXJlY3Rpb24pO1xuXG5cdFx0XHRcdC8vIFN0b3AgdGhlIHRpbWVyIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQuXG5cdFx0XHRcdGlmIChkaXN0YW5jZSA9PT0gMCB8fCBkaXN0YW5jZSA+PSBtYXhTY3JvbGxEaXN0YW5jZSkge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGxzIHRoZSBoZWFkZXIgdG8gYSBnaXZlbiBwb3NpdGlvbi5cblx0ICogQHBhcmFtIHBvc2l0aW9uIFBvc2l0aW9uIHRvIHdoaWNoIHRvIHNjcm9sbC5cblx0ICogQHJldHVybnMgSW5mb3JtYXRpb24gb24gdGhlIGN1cnJlbnQgc2Nyb2xsIGRpc3RhbmNlIGFuZCB0aGUgbWF4aW11bS5cblx0ICovXG5cdHByaXZhdGUgX3Njcm9sbFRvKHBvc2l0aW9uOiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHRyZXR1cm4geyBtYXhTY3JvbGxEaXN0YW5jZTogMCwgZGlzdGFuY2U6IDAgfTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXhTY3JvbGxEaXN0YW5jZSA9IHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7XG5cdFx0dGhpcy5fc2Nyb2xsRGlzdGFuY2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhTY3JvbGxEaXN0YW5jZSwgcG9zaXRpb24pKTtcblxuXHRcdC8vIE1hcmsgdGhhdCB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBjaGFuZ2VkIHNvIHRoYXQgYWZ0ZXIgdGhlIHZpZXcgaXMgY2hlY2tlZCwgdGhlIENTU1xuXHRcdC8vIHRyYW5zZm9ybWF0aW9uIGNhbiBtb3ZlIHRoZSBoZWFkZXIuXG5cdFx0dGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkID0gdHJ1ZTtcblx0XHR0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCk7XG5cblx0XHRyZXR1cm4geyBtYXhTY3JvbGxEaXN0YW5jZSwgZGlzdGFuY2U6IHRoaXMuX3Njcm9sbERpc3RhbmNlIH07XG5cdH1cbn1cbiJdfQ==","import { BrnTabs } from './lib/brn-tabs';\nimport { BrnTabsContent } from './lib/brn-tabs-content';\nimport { BrnTabsList } from './lib/brn-tabs-list';\nimport { BrnTabsTrigger } from './lib/brn-tabs-trigger';\nexport * from './lib/brn-tabs';\nexport * from './lib/brn-tabs-content';\nexport * from './lib/brn-tabs-list';\nexport * from './lib/brn-tabs-paginated-list';\nexport * from './lib/brn-tabs-trigger';\nexport const BrnTabsImports = [BrnTabs, BrnTabsList, BrnTabsTrigger, BrnTabsContent];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9saWIvYnJuLXRhYnMnO1xuaW1wb3J0IHsgQnJuVGFic0NvbnRlbnQgfSBmcm9tICcuL2xpYi9icm4tdGFicy1jb250ZW50JztcbmltcG9ydCB7IEJyblRhYnNMaXN0IH0gZnJvbSAnLi9saWIvYnJuLXRhYnMtbGlzdCc7XG5pbXBvcnQgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vbGliL2Jybi10YWJzLXRyaWdnZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdGFicyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdGFicy1jb250ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jybi10YWJzLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRhYnMtcGFnaW5hdGVkLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRhYnMtdHJpZ2dlcic7XG5cbmV4cG9ydCBjb25zdCBCcm5UYWJzSW1wb3J0cyA9IFtCcm5UYWJzLCBCcm5UYWJzTGlzdCwgQnJuVGFic1RyaWdnZXIsIEJyblRhYnNDb250ZW50XSBhcyBjb25zdDtcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnRhbi1uZy1icmFpbi10YWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9icmFpbi90YWJzL3NyYy9zcGFydGFuLW5nLWJyYWluLXRhYnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["observableOf"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-tabs.mjs","sources":["../tmp-esm2022/tabs/lib/brn-tabs.js","../tmp-esm2022/tabs/lib/brn-tabs-content.js","../tmp-esm2022/tabs/lib/brn-tabs-trigger.js","../tmp-esm2022/tabs/lib/brn-tabs-list.js","../tmp-esm2022/tabs/lib/brn-tabs-paginated-list.js","../tmp-esm2022/tabs/index.js","../tmp-esm2022/tabs/spartan-ng-brain-tabs.js"],"sourcesContent":["import { Directive, input, model, output, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabs {\n orientation = input('horizontal');\n /** internal **/\n $orientation = this.orientation;\n direction = input('ltr');\n /** internal **/\n $direction = this.direction;\n activeTab = model(undefined, { alias: 'brnTabs' });\n /** internal **/\n $activeTab = this.activeTab.asReadonly();\n activationMode = input('automatic');\n /** internal **/\n $activationMode = this.activationMode;\n tabActivated = output();\n _tabs = signal({});\n $tabs = this._tabs.asReadonly();\n registerTrigger(key, trigger) {\n this.updateEntry(key, { trigger });\n }\n registerContent(key, content) {\n this.updateEntry(key, { content });\n }\n unregisterTrigger(key) {\n this.updateEntry(key, { trigger: undefined });\n if (this.activeTab() === key) {\n this.activeTab.set(undefined);\n }\n }\n unregisterContent(key) {\n this.updateEntry(key, { content: undefined });\n }\n updateEntry(key, patch) {\n this._tabs.update((tabs) => {\n const existing = tabs[key] ?? {};\n const merged = { ...existing, ...patch };\n const entryEmpty = !merged.trigger && !merged.content;\n if (entryEmpty) {\n const { [key]: removed, ...rest } = tabs;\n return rest;\n }\n return { ...tabs, [key]: merged };\n });\n }\n emitTabActivated(key) {\n this.tabActivated.emit(key);\n }\n setActiveTab(key) {\n this.activeTab.set(key);\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabs, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabs, isStandalone: true, selector: \"[brnTabs]\", inputs: { orientation: { classPropertyName: \"orientation\", publicName: \"orientation\", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: \"direction\", publicName: \"direction\", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: \"activeTab\", publicName: \"brnTabs\", isSignal: true, isRequired: false, transformFunction: null }, activationMode: { classPropertyName: \"activationMode\", publicName: \"activationMode\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeTab: \"brnTabsChange\", tabActivated: \"tabActivated\" }, host: { properties: { \"attr.data-orientation\": \"orientation()\", \"attr.dir\": \"direction()\" } }, exportAs: [\"brnTabs\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabs, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabs]',\n exportAs: 'brnTabs',\n host: {\n '[attr.data-orientation]': 'orientation()',\n '[attr.dir]': 'direction()',\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2xpYi9icm4tdGFicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFpQnhFLE1BQU0sT0FBTyxPQUFPO0lBQ0gsV0FBVyxHQUFHLEtBQUssQ0FBcUIsWUFBWSxDQUFDLENBQUM7SUFDdEUsZ0JBQWdCO0lBQ1QsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFFdkIsU0FBUyxHQUFHLEtBQUssQ0FBbUIsS0FBSyxDQUFDLENBQUM7SUFDM0QsZ0JBQWdCO0lBQ1QsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7SUFFbkIsU0FBUyxHQUFHLEtBQUssQ0FBcUIsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDdkYsZ0JBQWdCO0lBQ1QsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFaEMsY0FBYyxHQUFHLEtBQUssQ0FBb0IsV0FBVyxDQUFDLENBQUM7SUFDdkUsZ0JBQWdCO0lBQ1QsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7SUFFN0IsWUFBWSxHQUFHLE1BQU0sRUFBVSxDQUFDO0lBRS9CLEtBQUssR0FBRyxNQUFNLENBQThCLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBRXpDLGVBQWUsQ0FBQyxHQUFXLEVBQUUsT0FBdUI7UUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBVyxFQUFFLE9BQXVCO1FBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDRixDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBVyxFQUFFLEtBQXdCO1FBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDekMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUN0RCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVc7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7MEhBNURXLE9BQU87OEdBQVAsT0FBTzs7MkZBQVAsT0FBTztrQkFSbkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLElBQUksRUFBRTt3QkFDTCx5QkFBeUIsRUFBRSxlQUFlO3dCQUMxQyxZQUFZLEVBQUUsYUFBYTtxQkFDM0I7aUJBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQnJuVGFic0NvbnRlbnQgfSBmcm9tICcuL2Jybi10YWJzLWNvbnRlbnQnO1xuaW1wb3J0IHR5cGUgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vYnJuLXRhYnMtdHJpZ2dlcic7XG5cbmV4cG9ydCB0eXBlIEJyblRhYnNPcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc7XG5leHBvcnQgdHlwZSBCcm5UYWJzRGlyZWN0aW9uID0gJ2x0cicgfCAncnRsJztcbmV4cG9ydCB0eXBlIEJybkFjdGl2YXRpb25Nb2RlID0gJ2F1dG9tYXRpYycgfCAnbWFudWFsJztcbmV4cG9ydCB0eXBlIFRhYkVudHJ5ID0geyB0cmlnZ2VyOiBCcm5UYWJzVHJpZ2dlcjsgY29udGVudDogQnJuVGFic0NvbnRlbnQgfTtcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnW2JyblRhYnNdJyxcblx0ZXhwb3J0QXM6ICdicm5UYWJzJyxcblx0aG9zdDoge1xuXHRcdCdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdvcmllbnRhdGlvbigpJyxcblx0XHQnW2F0dHIuZGlyXSc6ICdkaXJlY3Rpb24oKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnMge1xuXHRwdWJsaWMgcmVhZG9ubHkgb3JpZW50YXRpb24gPSBpbnB1dDxCcm5UYWJzT3JpZW50YXRpb24+KCdob3Jpem9udGFsJyk7XG5cdC8qKiBpbnRlcm5hbCAqKi9cblx0cHVibGljICRvcmllbnRhdGlvbiA9IHRoaXMub3JpZW50YXRpb247XG5cblx0cHVibGljIHJlYWRvbmx5IGRpcmVjdGlvbiA9IGlucHV0PEJyblRhYnNEaXJlY3Rpb24+KCdsdHInKTtcblx0LyoqIGludGVybmFsICoqL1xuXHRwdWJsaWMgJGRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uO1xuXG5cdHB1YmxpYyByZWFkb25seSBhY3RpdmVUYWIgPSBtb2RlbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwgeyBhbGlhczogJ2JyblRhYnMnIH0pO1xuXHQvKiogaW50ZXJuYWwgKiovXG5cdHB1YmxpYyAkYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIuYXNSZWFkb25seSgpO1xuXG5cdHB1YmxpYyByZWFkb25seSBhY3RpdmF0aW9uTW9kZSA9IGlucHV0PEJybkFjdGl2YXRpb25Nb2RlPignYXV0b21hdGljJyk7XG5cdC8qKiBpbnRlcm5hbCAqKi9cblx0cHVibGljICRhY3RpdmF0aW9uTW9kZSA9IHRoaXMuYWN0aXZhdGlvbk1vZGU7XG5cblx0cHVibGljIHJlYWRvbmx5IHRhYkFjdGl2YXRlZCA9IG91dHB1dDxzdHJpbmc+KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfdGFicyA9IHNpZ25hbDx7IFtrZXk6IHN0cmluZ106IFRhYkVudHJ5IH0+KHt9KTtcblx0cHVibGljIHJlYWRvbmx5ICR0YWJzID0gdGhpcy5fdGFicy5hc1JlYWRvbmx5KCk7XG5cblx0cHVibGljIHJlZ2lzdGVyVHJpZ2dlcihrZXk6IHN0cmluZywgdHJpZ2dlcjogQnJuVGFic1RyaWdnZXIpIHtcblx0XHR0aGlzLnVwZGF0ZUVudHJ5KGtleSwgeyB0cmlnZ2VyIH0pO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyQ29udGVudChrZXk6IHN0cmluZywgY29udGVudDogQnJuVGFic0NvbnRlbnQpIHtcblx0XHR0aGlzLnVwZGF0ZUVudHJ5KGtleSwgeyBjb250ZW50IH0pO1xuXHR9XG5cblx0cHVibGljIHVucmVnaXN0ZXJUcmlnZ2VyKGtleTogc3RyaW5nKSB7XG5cdFx0dGhpcy51cGRhdGVFbnRyeShrZXksIHsgdHJpZ2dlcjogdW5kZWZpbmVkIH0pO1xuXHRcdGlmICh0aGlzLmFjdGl2ZVRhYigpID09PSBrZXkpIHtcblx0XHRcdHRoaXMuYWN0aXZlVGFiLnNldCh1bmRlZmluZWQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyB1bnJlZ2lzdGVyQ29udGVudChrZXk6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMudXBkYXRlRW50cnkoa2V5LCB7IGNvbnRlbnQ6IHVuZGVmaW5lZCB9KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRW50cnkoa2V5OiBzdHJpbmcsIHBhdGNoOiBQYXJ0aWFsPFRhYkVudHJ5Pikge1xuXHRcdHRoaXMuX3RhYnMudXBkYXRlKCh0YWJzKSA9PiB7XG5cdFx0XHRjb25zdCBleGlzdGluZyA9IHRhYnNba2V5XSA/PyB7fTtcblx0XHRcdGNvbnN0IG1lcmdlZCA9IHsgLi4uZXhpc3RpbmcsIC4uLnBhdGNoIH07XG5cdFx0XHRjb25zdCBlbnRyeUVtcHR5ID0gIW1lcmdlZC50cmlnZ2VyICYmICFtZXJnZWQuY29udGVudDtcblx0XHRcdGlmIChlbnRyeUVtcHR5KSB7XG5cdFx0XHRcdGNvbnN0IHsgW2tleV06IHJlbW92ZWQsIC4uLnJlc3QgfSA9IHRhYnM7XG5cdFx0XHRcdHJldHVybiByZXN0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgLi4udGFicywgW2tleV06IG1lcmdlZCB9O1xuXHRcdH0pO1xuXHR9XG5cblx0ZW1pdFRhYkFjdGl2YXRlZChrZXk6IHN0cmluZykge1xuXHRcdHRoaXMudGFiQWN0aXZhdGVkLmVtaXQoa2V5KTtcblx0fVxuXG5cdHNldEFjdGl2ZVRhYihrZXk6IHN0cmluZykge1xuXHRcdHRoaXMuYWN0aXZlVGFiLnNldChrZXkpO1xuXHR9XG59XG4iXX0=","import { computed, Directive, effect, ElementRef, inject, input, untracked } from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsContent {\n _root = inject(BrnTabs);\n _elementRef = inject(ElementRef);\n contentFor = input.required({ alias: 'brnTabsContent' });\n _isSelected = computed(() => this._root.$activeTab() === this.contentFor());\n _contentId = computed(() => `brn-tabs-content-${this.contentFor()}`);\n _labelId = computed(() => `brn-tabs-label-${this.contentFor()}`);\n constructor() {\n effect(() => {\n const contentFor = this.contentFor();\n untracked(() => this._root.registerContent(contentFor, this));\n });\n }\n focus() {\n this._elementRef.nativeElement.focus();\n }\n ngOnDestroy() {\n this._root.unregisterContent(this.contentFor());\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsContent, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsContent, isStandalone: true, selector: \"[brnTabsContent]\", inputs: { contentFor: { classPropertyName: \"contentFor\", publicName: \"brnTabsContent\", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { \"role\": \"tabpanel\", \"tabindex\": \"0\" }, properties: { \"id\": \"_contentId()\", \"attr.aria-labelledby\": \"_labelId()\", \"hidden\": \"_isSelected() === false\" } }, exportAs: [\"brnTabsContent\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsContent, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabsContent]',\n exportAs: 'brnTabsContent',\n host: {\n role: 'tabpanel',\n tabindex: '0',\n '[id]': '_contentId()',\n '[attr.aria-labelledby]': '_labelId()',\n '[hidden]': '_isSelected() === false',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtY29udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLWNvbnRlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFhckMsTUFBTSxPQUFPLGNBQWM7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbEMsVUFBVSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzlELFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM1RSxVQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFcEY7UUFDQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLO1FBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7MEhBdEJXLGNBQWM7OEdBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFYMUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLFFBQVEsRUFBRSxHQUFHO3dCQUNiLE1BQU0sRUFBRSxjQUFjO3dCQUN0Qix3QkFBd0IsRUFBRSxZQUFZO3dCQUN0QyxVQUFVLEVBQUUseUJBQXlCO3FCQUNyQztpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBEaXJlY3RpdmUsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgdHlwZSBPbkRlc3Ryb3ksIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnJuVGFicyB9IGZyb20gJy4vYnJuLXRhYnMnO1xuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbYnJuVGFic0NvbnRlbnRdJyxcblx0ZXhwb3J0QXM6ICdicm5UYWJzQ29udGVudCcsXG5cdGhvc3Q6IHtcblx0XHRyb2xlOiAndGFicGFuZWwnLFxuXHRcdHRhYmluZGV4OiAnMCcsXG5cdFx0J1tpZF0nOiAnX2NvbnRlbnRJZCgpJyxcblx0XHQnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdfbGFiZWxJZCgpJyxcblx0XHQnW2hpZGRlbl0nOiAnX2lzU2VsZWN0ZWQoKSA9PT0gZmFsc2UnLFxuXHR9LFxufSlcbmV4cG9ydCBjbGFzcyBCcm5UYWJzQ29udGVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Jvb3QgPSBpbmplY3QoQnJuVGFicyk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cblx0cHVibGljIHJlYWRvbmx5IGNvbnRlbnRGb3IgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KHsgYWxpYXM6ICdicm5UYWJzQ29udGVudCcgfSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfaXNTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYigpID09PSB0aGlzLmNvbnRlbnRGb3IoKSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfY29udGVudElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWNvbnRlbnQtJHt0aGlzLmNvbnRlbnRGb3IoKX1gKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9sYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWxhYmVsLSR7dGhpcy5jb250ZW50Rm9yKCl9YCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IGNvbnRlbnRGb3IgPSB0aGlzLmNvbnRlbnRGb3IoKTtcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB0aGlzLl9yb290LnJlZ2lzdGVyQ29udGVudChjb250ZW50Rm9yLCB0aGlzKSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgZm9jdXMoKSB7XG5cdFx0dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLl9yb290LnVucmVnaXN0ZXJDb250ZW50KHRoaXMuY29udGVudEZvcigpKTtcblx0fVxufVxuIl19","import { Directive, ElementRef, booleanAttribute, computed, effect, inject, input, untracked, } from '@angular/core';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsTrigger {\n elementRef = inject(ElementRef);\n _root = inject(BrnTabs);\n _orientation = this._root.$orientation;\n triggerFor = input.required({ alias: 'brnTabsTrigger' });\n selected = computed(() => this._root.$activeTab() === this.triggerFor());\n _contentId = computed(() => `brn-tabs-content-${this.triggerFor()}`);\n _labelId = computed(() => `brn-tabs-label-${this.triggerFor()}`);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _disabled = input(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\n get disabled() {\n return this._disabled();\n }\n constructor() {\n effect(() => {\n const triggerFor = this.triggerFor();\n untracked(() => this._root.registerTrigger(triggerFor, this));\n });\n }\n focus() {\n this.elementRef.nativeElement.focus();\n if (this._root.$activationMode() === 'automatic') {\n this.activate();\n }\n }\n activate() {\n if (!this.triggerFor())\n return;\n this._root.setActiveTab(this.triggerFor());\n this._root.emitTabActivated(this.triggerFor());\n }\n get key() {\n return this.triggerFor();\n }\n ngOnDestroy() {\n this._root.unregisterTrigger(this.triggerFor());\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsTrigger, isStandalone: true, selector: \"button[brnTabsTrigger]\", inputs: { triggerFor: { classPropertyName: \"triggerFor\", publicName: \"brnTabsTrigger\", isSignal: true, isRequired: true, transformFunction: null }, _disabled: { classPropertyName: \"_disabled\", publicName: \"disabled\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"type\": \"button\", \"role\": \"tab\" }, listeners: { \"click\": \"activate()\" }, properties: { \"id\": \"_labelId()\", \"tabindex\": \"_disabled() ? -1 : (selected() ? 0 : -1)\", \"attr.aria-selected\": \"selected()\", \"attr.aria-controls\": \"_contentId()\", \"attr.aria-disabled\": \"_disabled()\", \"attr.data-state\": \"selected() ? 'active' : 'inactive'\", \"attr.data-orientation\": \"_orientation()\", \"attr.data-disabled\": \"_disabled() ? '' : undefined\", \"attr.disabled\": \"_disabled() ? '' : undefined\" } }, exportAs: [\"brnTabsTrigger\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsTrigger, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[brnTabsTrigger]',\n exportAs: 'brnTabsTrigger',\n host: {\n '[id]': '_labelId()',\n type: 'button',\n role: 'tab',\n '[tabindex]': '_disabled() ? -1 : (selected() ? 0 : -1)',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': '_contentId()',\n '[attr.aria-disabled]': '_disabled()',\n '[attr.data-state]': \"selected() ? 'active' : 'inactive'\",\n '[attr.data-orientation]': '_orientation()',\n '[attr.data-disabled]': \"_disabled() ? '' : undefined\",\n '[attr.disabled]': \"_disabled() ? '' : undefined\",\n '(click)': 'activate()',\n },\n }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtdHJpZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLXRyaWdnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNOLFNBQVMsRUFDVCxVQUFVLEVBRVYsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFvQnJDLE1BQU0sT0FBTyxjQUFjO0lBQ1YsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUvQixLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRCLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUUxQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBUyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDakUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVwRixnRUFBZ0U7SUFDaEQsU0FBUyxHQUFHLEtBQUssQ0FBd0IsS0FBSyxFQUFFO1FBQy9ELEtBQUssRUFBRSxVQUFVO1FBQ2pCLFNBQVMsRUFBRSxnQkFBZ0I7S0FDM0IsQ0FBQyxDQUFDO0lBRUgsSUFBVyxRQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDtRQUNDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUs7UUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDRixDQUFDO0lBRU0sUUFBUTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLEdBQUc7UUFDYixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQzswSEFoRFcsY0FBYzs4R0FBZCxjQUFjOzsyRkFBZCxjQUFjO2tCQWxCMUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLFlBQVk7d0JBQ3BCLElBQUksRUFBRSxRQUFRO3dCQUNkLElBQUksRUFBRSxLQUFLO3dCQUNYLFlBQVksRUFBRSwwQ0FBMEM7d0JBQ3hELHNCQUFzQixFQUFFLFlBQVk7d0JBQ3BDLHNCQUFzQixFQUFFLGNBQWM7d0JBQ3RDLHNCQUFzQixFQUFFLGFBQWE7d0JBQ3JDLG1CQUFtQixFQUFFLG9DQUFvQzt3QkFDekQseUJBQXlCLEVBQUUsZ0JBQWdCO3dCQUMzQyxzQkFBc0IsRUFBRSw4QkFBOEI7d0JBQ3RELGlCQUFpQixFQUFFLDhCQUE4Qjt3QkFDakQsU0FBUyxFQUFFLFlBQVk7cUJBQ3ZCO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHR0eXBlIE9uRGVzdHJveSxcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyblRhYnMgfSBmcm9tICcuL2Jybi10YWJzJztcblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiAnYnV0dG9uW2JyblRhYnNUcmlnZ2VyXScsXG5cdGV4cG9ydEFzOiAnYnJuVGFic1RyaWdnZXInLFxuXHRob3N0OiB7XG5cdFx0J1tpZF0nOiAnX2xhYmVsSWQoKScsXG5cdFx0dHlwZTogJ2J1dHRvbicsXG5cdFx0cm9sZTogJ3RhYicsXG5cdFx0J1t0YWJpbmRleF0nOiAnX2Rpc2FibGVkKCkgPyAtMSA6IChzZWxlY3RlZCgpID8gMCA6IC0xKScsXG5cdFx0J1thdHRyLmFyaWEtc2VsZWN0ZWRdJzogJ3NlbGVjdGVkKCknLFxuXHRcdCdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdfY29udGVudElkKCknLFxuXHRcdCdbYXR0ci5hcmlhLWRpc2FibGVkXSc6ICdfZGlzYWJsZWQoKScsXG5cdFx0J1thdHRyLmRhdGEtc3RhdGVdJzogXCJzZWxlY3RlZCgpID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnXCIsXG5cdFx0J1thdHRyLmRhdGEtb3JpZW50YXRpb25dJzogJ19vcmllbnRhdGlvbigpJyxcblx0XHQnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiBcIl9kaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIixcblx0XHQnW2F0dHIuZGlzYWJsZWRdJzogXCJfZGlzYWJsZWQoKSA/ICcnIDogdW5kZWZpbmVkXCIsXG5cdFx0JyhjbGljayknOiAnYWN0aXZhdGUoKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnNUcmlnZ2VyIGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0cHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfcm9vdCA9IGluamVjdChCcm5UYWJzKTtcblxuXHRwcm90ZWN0ZWQgcmVhZG9ubHkgX29yaWVudGF0aW9uID0gdGhpcy5fcm9vdC4kb3JpZW50YXRpb247XG5cblx0cHVibGljIHJlYWRvbmx5IHRyaWdnZXJGb3IgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KHsgYWxpYXM6ICdicm5UYWJzVHJpZ2dlcicgfSk7XG5cdHB1YmxpYyByZWFkb25seSBzZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYigpID09PSB0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdHByb3RlY3RlZCByZWFkb25seSBfY29udGVudElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWNvbnRlbnQtJHt0aGlzLnRyaWdnZXJGb3IoKX1gKTtcblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9sYWJlbElkID0gY29tcHV0ZWQoKCkgPT4gYGJybi10YWJzLWxhYmVsLSR7dGhpcy50cmlnZ2VyRm9yKCl9YCk7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuXHRwdWJsaWMgcmVhZG9ubHkgX2Rpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwge1xuXHRcdGFsaWFzOiAnZGlzYWJsZWQnLFxuXHRcdHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSxcblx0fSk7XG5cblx0cHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzYWJsZWQoKTtcblx0fVxuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCB0cmlnZ2VyRm9yID0gdGhpcy50cmlnZ2VyRm9yKCk7XG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy5fcm9vdC5yZWdpc3RlclRyaWdnZXIodHJpZ2dlckZvciwgdGhpcykpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIGZvY3VzKCkge1xuXHRcdHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0aWYgKHRoaXMuX3Jvb3QuJGFjdGl2YXRpb25Nb2RlKCkgPT09ICdhdXRvbWF0aWMnKSB7XG5cdFx0XHR0aGlzLmFjdGl2YXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFjdGl2YXRlKCkge1xuXHRcdGlmICghdGhpcy50cmlnZ2VyRm9yKCkpIHJldHVybjtcblx0XHR0aGlzLl9yb290LnNldEFjdGl2ZVRhYih0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdFx0dGhpcy5fcm9vdC5lbWl0VGFiQWN0aXZhdGVkKHRoaXMudHJpZ2dlckZvcigpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQga2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMudHJpZ2dlckZvcigpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5fcm9vdC51bnJlZ2lzdGVyVHJpZ2dlcih0aGlzLnRyaWdnZXJGb3IoKSk7XG5cdH1cbn1cbiJdfQ==","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directive, ElementRef, contentChildren, inject } from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\nimport { BrnTabsTrigger } from './brn-tabs-trigger';\nimport * as i0 from \"@angular/core\";\nexport class BrnTabsList {\n _root = inject(BrnTabs);\n _orientation = this._root.$orientation;\n _direction = this._root.$direction;\n _activeTab = this._root.$activeTab;\n _tabs = this._root.$tabs;\n _elementRef = inject(ElementRef);\n _keyDownListener = fromEvent(this._elementRef.nativeElement, 'keydown');\n _keyManager;\n triggers = contentChildren(BrnTabsTrigger, { descendants: true });\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager(this.triggers())\n .withHorizontalOrientation(this._direction())\n .withHomeAndEnd()\n .withPageUpDown()\n .withWrap();\n // needed because by default the index is set to -1, which means first interaction is skipped\n this._keyDownListener.pipe(take(1)).subscribe(() => {\n const currentTabKey = this._activeTab();\n const tabs = this._tabs();\n let activeIndex = 0;\n if (currentTabKey) {\n const currentTab = tabs[currentTabKey];\n if (currentTab) {\n activeIndex = this.triggers().indexOf(currentTab.trigger);\n }\n }\n this._keyManager?.setActiveItem(activeIndex);\n });\n this._keyDownListener.subscribe((event) => {\n if ('key' in event) {\n if (this._orientation() === 'horizontal') {\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown')\n return;\n }\n if (this._orientation() === 'vertical') {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight')\n return;\n }\n }\n this._keyManager?.onKeydown(event);\n });\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsList, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.2.0\", version: \"20.0.7\", type: BrnTabsList, isStandalone: true, selector: \"[brnTabsList]\", host: { attributes: { \"role\": \"tablist\" }, properties: { \"attr.aria-orientation\": \"_orientation()\", \"attr.data-orientation\": \"_orientation()\" } }, queries: [{ propertyName: \"triggers\", predicate: BrnTabsTrigger, descendants: true, isSignal: true }], exportAs: [\"brnTabsList\"], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsList, decorators: [{\n type: Directive,\n args: [{\n selector: '[brnTabsList]',\n exportAs: 'brnTabsList',\n host: {\n role: 'tablist',\n '[attr.aria-orientation]': '_orientation()',\n '[attr.data-orientation]': '_orientation()',\n },\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtbGlzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYnJhaW4vdGFicy9zcmMvbGliL2Jybi10YWJzLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBeUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVdwRCxNQUFNLE9BQU8sV0FBVztJQUNOLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdEIsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3pDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDbkMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3pCLFdBQVcsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBQzFELGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUVqRixXQUFXLENBQW1DO0lBRXRDLFFBQVEsR0FBRyxlQUFlLENBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFM0Usa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWlCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNyRSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDNUMsY0FBYyxFQUFFO2FBQ2hCLGNBQWMsRUFBRTthQUNoQixRQUFRLEVBQUUsQ0FBQztRQUViLDZGQUE2RjtRQUM3RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMxQixJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNoQixXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNELENBQUM7WUFDRixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDekMsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUMxQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVzt3QkFBRSxPQUFPO2dCQUNsRSxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN4QyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWTt3QkFBRSxPQUFPO2dCQUNyRSxDQUFDO1lBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQXNCLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7MEhBOUNXLFdBQVc7OEdBQVgsV0FBVyxxUEFZb0IsY0FBYzs7MkZBWjdDLFdBQVc7a0JBVHZCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixJQUFJLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFNBQVM7d0JBQ2YseUJBQXlCLEVBQUUsZ0JBQWdCO3dCQUMzQyx5QkFBeUIsRUFBRSxnQkFBZ0I7cUJBQzNDO2lCQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgdHlwZSBBZnRlckNvbnRlbnRJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGNvbnRlbnRDaGlsZHJlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9icm4tdGFicyc7XG5pbXBvcnQgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vYnJuLXRhYnMtdHJpZ2dlcic7XG5cbkBEaXJlY3RpdmUoe1xuXHRzZWxlY3RvcjogJ1ticm5UYWJzTGlzdF0nLFxuXHRleHBvcnRBczogJ2JyblRhYnNMaXN0Jyxcblx0aG9zdDoge1xuXHRcdHJvbGU6ICd0YWJsaXN0Jyxcblx0XHQnW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0nOiAnX29yaWVudGF0aW9uKCknLFxuXHRcdCdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdfb3JpZW50YXRpb24oKScsXG5cdH0sXG59KVxuZXhwb3J0IGNsYXNzIEJyblRhYnNMaXN0IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3Jvb3QgPSBpbmplY3QoQnJuVGFicyk7XG5cblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9vcmllbnRhdGlvbiA9IHRoaXMuX3Jvb3QuJG9yaWVudGF0aW9uO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kaXJlY3Rpb24gPSB0aGlzLl9yb290LiRkaXJlY3Rpb247XG5cdHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVRhYiA9IHRoaXMuX3Jvb3QuJGFjdGl2ZVRhYjtcblx0cHJpdmF0ZSByZWFkb25seSBfdGFicyA9IHRoaXMuX3Jvb3QuJHRhYnM7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9rZXlEb3duTGlzdGVuZXIgPSBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpO1xuXG5cdHByaXZhdGUgX2tleU1hbmFnZXI/OiBGb2N1c0tleU1hbmFnZXI8QnJuVGFic1RyaWdnZXI+O1xuXG5cdHB1YmxpYyByZWFkb25seSB0cmlnZ2VycyA9IGNvbnRlbnRDaGlsZHJlbihCcm5UYWJzVHJpZ2dlciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcblxuXHRwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuXHRcdHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyPEJyblRhYnNUcmlnZ2VyPih0aGlzLnRyaWdnZXJzKCkpXG5cdFx0XHQud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9kaXJlY3Rpb24oKSlcblx0XHRcdC53aXRoSG9tZUFuZEVuZCgpXG5cdFx0XHQud2l0aFBhZ2VVcERvd24oKVxuXHRcdFx0LndpdGhXcmFwKCk7XG5cblx0XHQvLyBuZWVkZWQgYmVjYXVzZSBieSBkZWZhdWx0IHRoZSBpbmRleCBpcyBzZXQgdG8gLTEsIHdoaWNoIG1lYW5zIGZpcnN0IGludGVyYWN0aW9uIGlzIHNraXBwZWRcblx0XHR0aGlzLl9rZXlEb3duTGlzdGVuZXIucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0Y29uc3QgY3VycmVudFRhYktleSA9IHRoaXMuX2FjdGl2ZVRhYigpO1xuXHRcdFx0Y29uc3QgdGFicyA9IHRoaXMuX3RhYnMoKTtcblx0XHRcdGxldCBhY3RpdmVJbmRleCA9IDA7XG5cdFx0XHRpZiAoY3VycmVudFRhYktleSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGFiID0gdGFic1tjdXJyZW50VGFiS2V5XTtcblx0XHRcdFx0aWYgKGN1cnJlbnRUYWIpIHtcblx0XHRcdFx0XHRhY3RpdmVJbmRleCA9IHRoaXMudHJpZ2dlcnMoKS5pbmRleE9mKGN1cnJlbnRUYWIudHJpZ2dlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSW5kZXgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fa2V5RG93bkxpc3RlbmVyLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcblx0XHRcdGlmICgna2V5JyBpbiBldmVudCkge1xuXHRcdFx0XHRpZiAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnKSB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fb3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdFx0XHRcdGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSByZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuX2tleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCBhcyBLZXlib2FyZEV2ZW50KTtcblx0XHR9KTtcblx0fVxufVxuIl19","/**\n * We are building on shoulders of giants here and adapt the implementation provided by the incredible Angular\n * team: https://github.com/angular/components/blob/main/src/material/tabs/paginated-tab-header.ts\n * Check them out! Give them a try! Leave a star! Their work is incredible!\n */\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform, normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport { ANIMATION_MODULE_TYPE, ChangeDetectorRef, Directive, ElementRef, Injector, NgZone, afterNextRender, booleanAttribute, computed, effect, inject, input, output, signal, } from '@angular/core';\nimport { EMPTY, Observable, Subject, fromEvent, merge, of as observableOf, timer } from 'rxjs';\nimport { debounceTime, filter, skip, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { BrnTabs } from './brn-tabs';\nimport * as i0 from \"@angular/core\";\n/** Config used to bind passive event listeners */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({\n passive: true,\n});\n/**\n * Amount of milliseconds to wait before starting to scroll the header automatically.\n * Set a little conservatively in order to handle fake events dispatched on touch devices.\n */\nconst HEADER_SCROLL_DELAY = 650;\n/**\n * Interval in milliseconds at which to scroll the header\n * while the user is holding their pointer.\n */\nconst HEADER_SCROLL_INTERVAL = 100;\n/**\n * Base class for a tab header that supported pagination.\n * @docs-private\n */\nexport class BrnTabsPaginatedList {\n /** The distance in pixels that the tab labels should be translated to the left. */\n _scrollDistance = 0;\n /** Whether the header should scroll to the selected index after the view has been checked. */\n _selectedIndexChanged = false;\n _root = inject(BrnTabs);\n _activeTab = this._root.$activeTab;\n _tabs = this._root.$tabs;\n /** Emits when the component is destroyed. */\n _destroyed = new Subject();\n /** Whether the controls for pagination should be displayed */\n showPaginationControls = signal(false);\n /** Whether the tab list can be scrolled more towards the end of the tab label list. */\n disableScrollAfter = true;\n /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */\n disableScrollBefore = true;\n /**\n * The number of tab labels that are displayed on the header. When this changes, the header\n * should re-evaluate the scroll position.\n */\n _tabLabelCount;\n /** Whether the scroll distance has changed and should be applied after the view is checked. */\n _scrollDistanceChanged;\n /** Used to manage focus between the tabs. */\n _keyManager;\n /** Cached text content of the header. */\n _currentTextContent;\n /** Stream that will stop the automated scrolling. */\n _stopScrolling = new Subject();\n /**\n * Whether pagination should be disabled. This can be used to avoid unnecessary\n * layout recalculations if it's known that pagination won't be required.\n */\n disablePagination = input(false, { transform: booleanAttribute });\n /** The index of the active tab. */\n _selectedIndex = computed(() => {\n const currentTabKey = this._activeTab();\n const tabs = this._tabs();\n let activeIndex = 0;\n if (currentTabKey && this.items()) {\n const currentTab = tabs[currentTabKey];\n if (currentTab) {\n activeIndex = this.items().indexOf(currentTab.trigger);\n }\n }\n return activeIndex;\n });\n /** Event emitted when the option is selected. */\n selectFocusedIndex = output();\n /** Event emitted when a label is focused. */\n indexFocused = output();\n _sharedResizeObserver = inject(SharedResizeObserver);\n _injector = inject(Injector);\n _elementRef = inject(ElementRef);\n _changeDetectorRef = inject(ChangeDetectorRef);\n _viewportRuler = inject(ViewportRuler);\n _dir = inject(Directionality, { optional: true });\n _ngZone = inject(NgZone);\n _platform = inject(Platform);\n animationMode = inject(ANIMATION_MODULE_TYPE, { optional: true });\n constructor() {\n // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'mouseleave')\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._stopInterval();\n });\n });\n effect(() => {\n const selectedIndex = this._selectedIndex();\n if (selectedIndex !== 0) {\n this._selectedIndexChanged = true;\n if (this._keyManager) {\n this._keyManager.updateActiveItem(selectedIndex);\n }\n }\n });\n }\n ngAfterViewInit() {\n // We need to handle these events manually, because we want to bind passive event listeners.\n fromEvent(this.previousPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('before');\n });\n fromEvent(this.nextPaginator().nativeElement, 'touchstart', passiveEventListenerOptions)\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n this._handlePaginatorPress('after');\n });\n }\n ngAfterContentInit() {\n const dirChange = this._dir ? this._dir.change : observableOf('ltr');\n // We need to debounce resize events because the alignment logic is expensive.\n // If someone animates the width of tabs, we don't want to realign on every animation frame.\n // Once we haven't seen any more resize events in the last 32ms (~2 animaion frames) we can\n // re-align.\n const resize = this._sharedResizeObserver\n .observe(this._elementRef.nativeElement)\n .pipe(debounceTime(32), takeUntil(this._destroyed));\n // Note: We do not actually need to watch these events for proper functioning of the tabs,\n // the resize events above should capture any viewport resize that we care about. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n const viewportResize = this._viewportRuler.change(150).pipe(takeUntil(this._destroyed));\n const realign = () => {\n this.updatePagination();\n };\n this._keyManager = new FocusKeyManager(this.items())\n .withHorizontalOrientation(this._getLayoutDirection())\n .withHomeAndEnd()\n .withWrap()\n // Allow focus to land on disabled tabs, as per https://w3c.github.io/aria-practices/#kbd_disabled_controls\n .skipPredicate(() => false);\n this._keyManager.updateActiveItem(this._selectedIndex());\n // Note: We do not need to realign after the first render for proper functioning of the tabs\n // the resize events above should fire when we first start observing the element. However,\n // removing this is fairly breaking for screenshot tests, so we're leaving it here for now.\n afterNextRender(realign, { injector: this._injector });\n // On dir change or resize, realign the ink bar and update the orientation of\n // the key manager if the direction has changed.\n merge(dirChange, viewportResize, resize, this.itemsChanges, this._itemsResized())\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => {\n // We need to defer this to give the browser some time to recalculate\n // the element dimensions. The call has to be wrapped in `NgZone.run`,\n // because the viewport change handler runs outside of Angular.\n this._ngZone.run(() => {\n Promise.resolve().then(() => {\n // Clamp the scroll distance, because it can change with the number of tabs.\n this._scrollDistance = Math.max(0, Math.min(this._getMaxScrollDistance(), this._scrollDistance));\n realign();\n });\n });\n this._keyManager.withHorizontalOrientation(this._getLayoutDirection());\n });\n // If there is a change in the focus key manager we need to emit the `indexFocused`\n // event in order to provide a public event that notifies about focus changes. Also we realign\n // the tabs container by scrolling the new focused tab into the visible section.\n this._keyManager.change.subscribe((newFocusIndex) => {\n this.indexFocused.emit(newFocusIndex);\n this._setTabFocus(newFocusIndex);\n });\n }\n /** Sends any changes that could affect the layout of the items. */\n _itemsResized() {\n if (typeof ResizeObserver !== 'function') {\n return EMPTY;\n }\n return this.itemsChanges.pipe(startWith(this.items()), switchMap((tabItems) => new Observable((observer) => this._ngZone.runOutsideAngular(() => {\n const resizeObserver = new ResizeObserver((entries) => observer.next(entries));\n for (const tabItem of tabItems) {\n resizeObserver.observe(tabItem.elementRef.nativeElement);\n }\n return () => {\n resizeObserver.disconnect();\n };\n }))), \n // Skip the first emit since the resize observer emits when an item\n // is observed for new items when the tab is already inserted\n skip(1), \n // Skip emissions where all the elements are invisible since we don't want\n // the header to try and re-render with invalid measurements. See #25574.\n filter((entries) => entries.some((e) => e.contentRect.width > 0 && e.contentRect.height > 0)));\n }\n ngAfterContentChecked() {\n // If the number of tab labels have changed, check if scrolling should be enabled\n if (this._tabLabelCount !== this.items().length) {\n this.updatePagination();\n this._tabLabelCount = this.items().length;\n this._changeDetectorRef.markForCheck();\n }\n // If the selected index has changed, scroll to the label and check if the scrolling controls\n // should be disabled.\n if (this._selectedIndexChanged) {\n this._scrollToLabel(this._selectedIndex());\n this._checkScrollingControls();\n this._selectedIndexChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n // If the scroll distance has been changed (tab selected, focused, scroll controls activated),\n // then translate the header to reflect this.\n if (this._scrollDistanceChanged) {\n this._updateTabScrollPosition();\n this._scrollDistanceChanged = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n ngOnDestroy() {\n this._keyManager?.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n this._stopScrolling.complete();\n }\n /** Handles keyboard events on the header. */\n _handleKeydown(event) {\n // We don't handle any key bindings with a modifier key.\n if (hasModifierKey(event)) {\n return;\n }\n switch (event.keyCode) {\n case ENTER:\n case SPACE:\n if (this.focusIndex !== this._selectedIndex()) {\n const item = this.items()[this.focusIndex];\n if (item && !item.disabled) {\n this.selectFocusedIndex.emit(this.focusIndex);\n this._itemSelected(event);\n }\n }\n break;\n default:\n this._keyManager.onKeydown(event);\n }\n }\n /**\n * Callback for when the MutationObserver detects that the content has changed.\n */\n _onContentChanges() {\n const textContent = this._elementRef.nativeElement.textContent;\n // We need to diff the text content of the header, because the MutationObserver callback\n // will fire even if the text content didn't change which is inefficient and is prone\n // to infinite loops if a poorly constructed expression is passed in (see #14249).\n if (textContent !== this._currentTextContent) {\n this._currentTextContent = textContent || '';\n // The content observer runs outside the `NgZone` by default, which\n // means that we need to bring the callback back in ourselves.\n this._ngZone.run(() => {\n this.updatePagination();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /**\n * Updates the view whether pagination should be enabled or not.\n *\n * WARNING: Calling this method can be very costly in terms of performance. It should be called\n * as infrequently as possible from outside of the Tabs component as it causes a reflow of the\n * page.\n */\n updatePagination() {\n this._checkPaginationEnabled();\n this._checkScrollingControls();\n this._updateTabScrollPosition();\n }\n /** Tracks which element has focus; used for keyboard navigation */\n get focusIndex() {\n return this._keyManager ? (this._keyManager.activeItemIndex ?? 0) : 0;\n }\n /** When the focus index is set, we must manually send focus to the correct label */\n set focusIndex(value) {\n if (!this._isValidIndex(value) || this.focusIndex === value || !this._keyManager) {\n return;\n }\n this._keyManager.setActiveItem(value);\n }\n /**\n * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is\n * providing a valid index and return true.\n */\n _isValidIndex(index) {\n return this.items() ? !!this.items()[index] : true;\n }\n /**\n * Sets focus on the HTML element for the label wrapper and scrolls it into the view if\n * scrolling is enabled.\n */\n _setTabFocus(tabIndex) {\n if (this.showPaginationControls()) {\n this._scrollToLabel(tabIndex);\n }\n if (this.items()?.length) {\n this.items()[tabIndex].focus();\n // Do not let the browser manage scrolling to focus the element, this will be handled\n // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width\n // should be the full width minus the offset width.\n const containerEl = this.tabListContainer().nativeElement;\n const dir = this._getLayoutDirection();\n if (dir === 'ltr') {\n containerEl.scrollLeft = 0;\n }\n else {\n containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;\n }\n }\n }\n /** The layout direction of the containing app. */\n _getLayoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Performs the CSS transformation on the tab list that will cause the list to scroll. */\n _updateTabScrollPosition() {\n if (this.disablePagination()) {\n return;\n }\n const scrollDistance = this.scrollDistance;\n const translateX = this._getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;\n // Don't use `translate3d` here because we don't want to create a new layer. A new layer\n // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar\n // and ripples will exceed the boundaries of the visible tab bar.\n // See: https://github.com/angular/components/issues/10276\n // We round the `transform` here, because transforms with sub-pixel precision cause some\n // browsers to blur the content of the element.\n this.tabList().nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;\n // Setting the `transform` on IE will change the scroll offset of the parent, causing the\n // position to be thrown off in some cases. We have to reset it ourselves to ensure that\n // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing\n // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).\n if (this._platform.TRIDENT || this._platform.EDGE) {\n this.tabListContainer().nativeElement.scrollLeft = 0;\n }\n }\n /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */\n get scrollDistance() {\n return this._scrollDistance;\n }\n set scrollDistance(value) {\n this._scrollTo(value);\n }\n /**\n * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or\n * the end of the list, respectively). The distance to scroll is computed to be a third of the\n * length of the tab list view window.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollHeader(direction) {\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n // Move the scroll distance one-third the length of the tab list's viewport.\n const scrollAmount = ((direction === 'before' ? -1 : 1) * viewLength) / 3;\n return this._scrollTo(this._scrollDistance + scrollAmount);\n }\n /** Handles click events on the pagination arrows. */\n _handlePaginatorClick(direction) {\n this._stopInterval();\n this._scrollHeader(direction);\n }\n /**\n * Moves the tab list such that the desired tab label (marked by index) is moved into view.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _scrollToLabel(labelIndex) {\n if (this.disablePagination()) {\n return;\n }\n const selectedLabel = this.items() ? this.items()[labelIndex] : null;\n if (!selectedLabel) {\n return;\n }\n // The view length is the visible width of the tab labels.\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;\n let labelBeforePos;\n let labelAfterPos;\n if (this._getLayoutDirection() === 'ltr') {\n labelBeforePos = offsetLeft;\n labelAfterPos = labelBeforePos + offsetWidth;\n }\n else {\n labelAfterPos = this.tabListInner().nativeElement.offsetWidth - offsetLeft;\n labelBeforePos = labelAfterPos - offsetWidth;\n }\n const beforeVisiblePos = this.scrollDistance;\n const afterVisiblePos = this.scrollDistance + viewLength;\n if (labelBeforePos < beforeVisiblePos) {\n // Scroll header to move label to the before direction\n this.scrollDistance -= beforeVisiblePos - labelBeforePos;\n }\n else if (labelAfterPos > afterVisiblePos) {\n // Scroll header to move label to the after direction\n this.scrollDistance += Math.min(labelAfterPos - afterVisiblePos, labelBeforePos - beforeVisiblePos);\n }\n }\n /**\n * Evaluate whether the pagination controls should be displayed. If the scroll width of the\n * tab list is wider than the size of the header container, then the pagination controls should\n * be shown.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkPaginationEnabled() {\n if (this.disablePagination()) {\n this.showPaginationControls.set(false);\n }\n else {\n const isEnabled = this.tabListInner().nativeElement.scrollWidth > this._elementRef.nativeElement.offsetWidth;\n if (!isEnabled) {\n this.scrollDistance = 0;\n }\n if (isEnabled !== this.showPaginationControls()) {\n this._changeDetectorRef.markForCheck();\n }\n this.showPaginationControls.set(isEnabled);\n }\n }\n /**\n * Evaluate whether the before and after controls should be enabled or disabled.\n * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the\n * before button. If the header is at the end of the list (scroll distance is equal to the\n * maximum distance we can scroll), then disable the after button.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _checkScrollingControls() {\n if (this.disablePagination()) {\n this.disableScrollAfter = this.disableScrollBefore = true;\n }\n else {\n // Check if the pagination arrows should be activated.\n this.disableScrollBefore = this.scrollDistance === 0;\n this.disableScrollAfter = this.scrollDistance === this._getMaxScrollDistance();\n this._changeDetectorRef.markForCheck();\n }\n }\n /**\n * Determines what is the maximum length in pixels that can be set for the scroll distance. This\n * is equal to the difference in width between the tab list container and tab header container.\n *\n * This is an expensive call that forces a layout reflow to compute box and scroll metrics and\n * should be called sparingly.\n */\n _getMaxScrollDistance() {\n const lengthOfTabList = this.tabListInner().nativeElement.scrollWidth;\n const viewLength = this.tabListContainer().nativeElement.offsetWidth;\n return lengthOfTabList - viewLength || 0;\n }\n /** Stops the currently-running paginator interval. */\n _stopInterval() {\n this._stopScrolling.next();\n }\n /**\n * Handles the user pressing down on one of the paginators.\n * Starts scrolling the header after a certain amount of time.\n * @param direction In which direction the paginator should be scrolled.\n */\n _handlePaginatorPress(direction, mouseEvent) {\n // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to\n // null check the `button`, but we do it so we don't break tests that use fake events.\n if (mouseEvent && mouseEvent.button !== null && mouseEvent.button !== 0) {\n return;\n }\n // Avoid overlapping timers.\n this._stopInterval();\n // Start a timer after the delay and keep firing based on the interval.\n timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)\n // Keep the timer going until something tells it to stop or the component is destroyed.\n .pipe(takeUntil(merge(this._stopScrolling, this._destroyed)))\n .subscribe(() => {\n const { maxScrollDistance, distance } = this._scrollHeader(direction);\n // Stop the timer if we've reached the start or the end.\n if (distance === 0 || distance >= maxScrollDistance) {\n this._stopInterval();\n }\n });\n }\n /**\n * Scrolls the header to a given position.\n * @param position Position to which to scroll.\n * @returns Information on the current scroll distance and the maximum.\n */\n _scrollTo(position) {\n if (this.disablePagination()) {\n return { maxScrollDistance: 0, distance: 0 };\n }\n const maxScrollDistance = this._getMaxScrollDistance();\n this._scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));\n // Mark that the scroll distance has changed so that after the view is checked, the CSS\n // transformation can move the header.\n this._scrollDistanceChanged = true;\n this._checkScrollingControls();\n return { maxScrollDistance, distance: this._scrollDistance };\n }\n /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsPaginatedList, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"17.1.0\", version: \"20.0.7\", type: BrnTabsPaginatedList, isStandalone: true, inputs: { disablePagination: { classPropertyName: \"disablePagination\", publicName: \"disablePagination\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectFocusedIndex: \"selectFocusedIndex\", indexFocused: \"indexFocused\" }, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.7\", ngImport: i0, type: BrnTabsPaginatedList, decorators: [{\n type: Directive\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJuLXRhYnMtcGFnaW5hdGVkLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2xpYi9icm4tdGFicy1wYWdpbmF0ZWQtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUg7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBd0IsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRSxPQUFPLEVBQWtCLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUNOLHFCQUFxQixFQUlyQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUdOLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQWlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxPQUFPLEVB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ZSBhbmQgYWRhcHQgdGhlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBpbmNyZWRpYmxlIEFuZ3VsYXJcbiAqIHRlYW06IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvYmxvYi9tYWluL3NyYy9tYXRlcmlhbC90YWJzL3BhZ2luYXRlZC10YWItaGVhZGVyLnRzXG4gKiBDaGVjayB0aGVtIG91dCEgR2l2ZSB0aGVtIGEgdHJ5ISBMZWF2ZSBhIHN0YXIhIFRoZWlyIHdvcmsgaXMgaW5jcmVkaWJsZSFcbiAqL1xuXG4vKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyLCB0eXBlIEZvY3VzYWJsZU9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IHR5cGUgRGlyZWN0aW9uLCBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IHR5cGUgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEVOVEVSLCBTUEFDRSwgaGFzTW9kaWZpZXJLZXkgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgU2hhcmVkUmVzaXplT2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb2JzZXJ2ZXJzL3ByaXZhdGUnO1xuaW1wb3J0IHsgUGxhdGZvcm0sIG5vcm1hbGl6ZVBhc3NpdmVMaXN0ZW5lck9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcblx0QU5JTUFUSU9OX01PRFVMRV9UWVBFLFxuXHR0eXBlIEFmdGVyQ29udGVudENoZWNrZWQsXG5cdHR5cGUgQWZ0ZXJDb250ZW50SW5pdCxcblx0dHlwZSBBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0Tmdab25lLFxuXHR0eXBlIE9uRGVzdHJveSxcblx0dHlwZSBTaWduYWwsXG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0b3V0cHV0LFxuXHRzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIHR5cGUgT2JzZXJ2ZXIsIFN1YmplY3QsIGZyb21FdmVudCwgbWVyZ2UsIG9mIGFzIG9ic2VydmFibGVPZiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBza2lwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQnJuVGFicyB9IGZyb20gJy4vYnJuLXRhYnMnO1xuXG4vKiogQ29uZmlnIHVzZWQgdG8gYmluZCBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycyAqL1xuY29uc3QgcGFzc2l2ZUV2ZW50TGlzdGVuZXJPcHRpb25zID0gbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucyh7XG5cdHBhc3NpdmU6IHRydWUsXG59KSBhcyBFdmVudExpc3RlbmVyT3B0aW9ucztcblxuLyoqXG4gKiBUaGUgZGlyZWN0aW9ucyB0aGF0IHNjcm9sbGluZyBjYW4gZ28gaW4gd2hlbiB0aGUgaGVhZGVyJ3MgdGFicyBleGNlZWQgdGhlIGhlYWRlciB3aWR0aC4gJ0FmdGVyJ1xuICogd2lsbCBzY3JvbGwgdGhlIGhlYWRlciB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHRhYnMgbGlzdCBhbmQgJ2JlZm9yZScgd2lsbCBzY3JvbGwgdG93YXJkcyB0aGVcbiAqIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IHR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2FmdGVyJyB8ICdiZWZvcmUnO1xuXG4vKipcbiAqIEFtb3VudCBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgc3RhcnRpbmcgdG8gc2Nyb2xsIHRoZSBoZWFkZXIgYXV0b21hdGljYWxseS5cbiAqIFNldCBhIGxpdHRsZSBjb25zZXJ2YXRpdmVseSBpbiBvcmRlciB0byBoYW5kbGUgZmFrZSBldmVudHMgZGlzcGF0Y2hlZCBvbiB0b3VjaCBkZXZpY2VzLlxuICovXG5jb25zdCBIRUFERVJfU0NST0xMX0RFTEFZID0gNjUwO1xuXG4vKipcbiAqIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyBhdCB3aGljaCB0byBzY3JvbGwgdGhlIGhlYWRlclxuICogd2hpbGUgdGhlIHVzZXIgaXMgaG9sZGluZyB0aGVpciBwb2ludGVyLlxuICovXG5jb25zdCBIRUFERVJfU0NST0xMX0lOVEVSVkFMID0gMTAwO1xuXG4vKiogSXRlbSBpbnNpZGUgYSBwYWdpbmF0ZWQgdGFiIGhlYWRlci4gKi9cbmV4cG9ydCB0eXBlIEJyblBhZ2luYXRlZFRhYkhlYWRlckl0ZW0gPSBGb2N1c2FibGVPcHRpb24gJiB7IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYgfTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhIHRhYiBoZWFkZXIgdGhhdCBzdXBwb3J0ZWQgcGFnaW5hdGlvbi5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJuVGFic1BhZ2luYXRlZExpc3QgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwdWJsaWMgYWJzdHJhY3QgaXRlbXM6IFNpZ25hbDxSZWFkb25seUFycmF5PEJyblBhZ2luYXRlZFRhYkhlYWRlckl0ZW0+Pjtcblx0cHVibGljIGFic3RyYWN0IGl0ZW1zQ2hhbmdlczogT2JzZXJ2YWJsZTxSZWFkb25seUFycmF5PEJyblBhZ2luYXRlZFRhYkhlYWRlckl0ZW0+Pjtcblx0cHVibGljIGFic3RyYWN0IHRhYkxpc3RDb250YWluZXI6IFNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XG5cdHB1YmxpYyBhYnN0cmFjdCB0YWJMaXN0OiBTaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgdGFiTGlzdElubmVyOiBTaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXHRwdWJsaWMgYWJzdHJhY3QgbmV4dFBhZ2luYXRvcjogU2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+Pjtcblx0cHVibGljIGFic3RyYWN0IHByZXZpb3VzUGFnaW5hdG9yOiBTaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+O1xuXG5cdC8qKiBUaGUgZGlzdGFuY2UgaW4gcGl4ZWxzIHRoYXQgdGhlIHRhYiBsYWJlbHMgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgdG8gdGhlIGxlZnQuICovXG5cdHByaXZhdGUgX3Njcm9sbERpc3RhbmNlID0gMDtcblxuXHQvKiogV2hldGhlciB0aGUgaGVhZGVyIHNob3VsZCBzY3JvbGwgdG8gdGhlIHNlbGVjdGVkIGluZGV4IGFmdGVyIHRoZSB2aWV3IGhhcyBiZWVuIGNoZWNrZWQuICovXG5cdHByaXZhdGUgX3NlbGVjdGVkSW5kZXhDaGFuZ2VkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSByZWFkb25seSBfcm9vdCA9IGluamVjdChCcm5UYWJzKTtcblx0cHJpdmF0ZSByZWFkb25seSBfYWN0aXZlVGFiID0gdGhpcy5fcm9vdC4kYWN0aXZlVGFiO1xuXHRwcml2YXRlIHJlYWRvbmx5IF90YWJzID0gdGhpcy5fcm9vdC4kdGFicztcblxuXHQvKiogRW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gKi9cblx0cHJvdGVjdGVkIHJlYWRvbmx5IF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG5cdC8qKiBXaGV0aGVyIHRoZSBjb250cm9scyBmb3IgcGFnaW5hdGlvbiBzaG91bGQgYmUgZGlzcGxheWVkICovXG5cdHB1YmxpYyByZWFkb25seSBzaG93UGFnaW5hdGlvbkNvbnRyb2xzID0gc2lnbmFsKGZhbHNlKTtcblxuXHQvKiogV2hldGhlciB0aGUgdGFiIGxpc3QgY2FuIGJlIHNjcm9sbGVkIG1vcmUgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSB0YWIgbGFiZWwgbGlzdC4gKi9cblx0cHVibGljIGRpc2FibGVTY3JvbGxBZnRlciA9IHRydWU7XG5cblx0LyoqIFdoZXRoZXIgdGhlIHRhYiBsaXN0IGNhbiBiZSBzY3JvbGxlZCBtb3JlIHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGFiIGxhYmVsIGxpc3QuICovXG5cdHB1YmxpYyBkaXNhYmxlU2Nyb2xsQmVmb3JlID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlIG51bWJlciBvZiB0YWIgbGFiZWxzIHRoYXQgYXJlIGRpc3BsYXllZCBvbiB0aGUgaGVhZGVyLiBXaGVuIHRoaXMgY2hhbmdlcywgdGhlIGhlYWRlclxuXHQgKiBzaG91bGQgcmUtZXZhbHVhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbi5cblx0ICovXG5cdHByaXZhdGUgX3RhYkxhYmVsQ291bnQhOiBudW1iZXI7XG5cblx0LyoqIFdoZXRoZXIgdGhlIHNjcm9sbCBkaXN0YW5jZSBoYXMgY2hhbmdlZCBhbmQgc2hvdWxkIGJlIGFwcGxpZWQgYWZ0ZXIgdGhlIHZpZXcgaXMgY2hlY2tlZC4gKi9cblx0cHJpdmF0ZSBfc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkITogYm9vbGVhbjtcblxuXHQvKiogVXNlZCB0byBtYW5hZ2UgZm9jdXMgYmV0d2VlbiB0aGUgdGFicy4gKi9cblx0cHJpdmF0ZSBfa2V5TWFuYWdlciE6IEZvY3VzS2V5TWFuYWdlcjxCcm5QYWdpbmF0ZWRUYWJIZWFkZXJJdGVtPjtcblxuXHQvKiogQ2FjaGVkIHRleHQgY29udGVudCBvZiB0aGUgaGVhZGVyLiAqL1xuXHRwcml2YXRlIF9jdXJyZW50VGV4dENvbnRlbnQhOiBzdHJpbmc7XG5cblx0LyoqIFN0cmVhbSB0aGF0IHdpbGwgc3RvcCB0aGUgYXV0b21hdGVkIHNjcm9sbGluZy4gKi9cblx0cHJpdmF0ZSByZWFkb25seSBfc3RvcFNjcm9sbGluZyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblx0LyoqXG5cdCAqIFdoZXRoZXIgcGFnaW5hdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgdW5uZWNlc3Nhcnlcblx0ICogbGF5b3V0IHJlY2FsY3VsYXRpb25zIGlmIGl0J3Mga25vd24gdGhhdCBwYWdpbmF0aW9uIHdvbid0IGJlIHJlcXVpcmVkLlxuXHQgKi9cblx0cHVibGljIHJlYWRvbmx5IGRpc2FibGVQYWdpbmF0aW9uID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cblx0LyoqIFRoZSBpbmRleCBvZiB0aGUgYWN0aXZlIHRhYi4gKi9cblx0cHJpdmF0ZSByZWFkb25seSBfc2VsZWN0ZWRJbmRleCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50VGFiS2V5ID0gdGhpcy5fYWN0aXZlVGFiKCk7XG5cdFx0Y29uc3QgdGFicyA9IHRoaXMuX3RhYnMoKTtcblxuXHRcdGxldCBhY3RpdmVJbmRleCA9IDA7XG5cdFx0aWYgKGN1cnJlbnRUYWJLZXkgJiYgdGhpcy5pdGVtcygpKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VGFiID0gdGFic1tjdXJyZW50VGFiS2V5XTtcblx0XHRcdGlmIChjdXJyZW50VGFiKSB7XG5cdFx0XHRcdGFjdGl2ZUluZGV4ID0gdGhpcy5pdGVtcygpLmluZGV4T2YoY3VycmVudFRhYi50cmlnZ2VyKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gYWN0aXZlSW5kZXg7XG5cdH0pO1xuXG5cdC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4gKi9cblx0cHVibGljIHJlYWRvbmx5IHNlbGVjdEZvY3VzZWRJbmRleCA9IG91dHB1dDxudW1iZXI+KCk7XG5cblx0LyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGxhYmVsIGlzIGZvY3VzZWQuICovXG5cdHB1YmxpYyByZWFkb25seSBpbmRleEZvY3VzZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX3NoYXJlZFJlc2l6ZU9ic2VydmVyID0gaW5qZWN0KFNoYXJlZFJlc2l6ZU9ic2VydmVyKTtcblxuXHRwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0cHJvdGVjdGVkIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9IGluamVjdChFbGVtZW50UmVmKTtcblx0cHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF92aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyID0gaW5qZWN0KFZpZXdwb3J0UnVsZXIpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kaXIgPSBpbmplY3QoRGlyZWN0aW9uYWxpdHksIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtOiBQbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybSk7XG5cdHB1YmxpYyByZWFkb25seSBhbmltYXRpb25Nb2RlID0gaW5qZWN0KEFOSU1BVElPTl9NT0RVTEVfVFlQRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHQvLyBCaW5kIHRoZSBgbW91c2VsZWF2ZWAgZXZlbnQgb24gdGhlIG91dHNpZGUgc2luY2UgaXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIHZpZXcuXG5cdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdGZyb21FdmVudCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJylcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXHRcdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCgpO1xuXG5cdFx0XHRpZiAoc2VsZWN0ZWRJbmRleCAhPT0gMCkge1xuXHRcdFx0XHR0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZCA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzLl9rZXlNYW5hZ2VyKSB7XG5cdFx0XHRcdFx0dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHNlbGVjdGVkSW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGFuIGl0ZW0gdmlhIHRoZSBrZXlib2FyZC4gKi9cblx0cHJvdGVjdGVkIGFic3RyYWN0IF9pdGVtU2VsZWN0ZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHQvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGVzZSBldmVudHMgbWFudWFsbHksIGJlY2F1c2Ugd2Ugd2FudCB0byBiaW5kIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzLlxuXHRcdGZyb21FdmVudCh0aGlzLnByZXZpb3VzUGFnaW5hdG9yKCkubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG5cdFx0XHQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygnYmVmb3JlJyk7XG5cdFx0XHR9KTtcblxuXHRcdGZyb21FdmVudCh0aGlzLm5leHRQYWdpbmF0b3IoKS5uYXRpdmVFbGVtZW50LCAndG91Y2hzdGFydCcsIHBhc3NpdmVFdmVudExpc3RlbmVyT3B0aW9ucylcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCdhZnRlcicpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ0FmdGVyQ29udGVudEluaXQoKSB7XG5cdFx0Y29uc3QgZGlyQ2hhbmdlID0gdGhpcy5fZGlyID8gdGhpcy5fZGlyLmNoYW5nZSA6IG9ic2VydmFibGVPZignbHRyJyk7XG5cdFx0Ly8gV2UgbmVlZCB0byBkZWJvdW5jZSByZXNpemUgZXZlbnRzIGJlY2F1c2UgdGhlIGFsaWdubWVudCBsb2dpYyBpcyBleHBlbnNpdmUuXG5cdFx0Ly8gSWYgc29tZW9uZSBhbmltYXRlcyB0aGUgd2lkdGggb2YgdGFicywgd2UgZG9uJ3Qgd2FudCB0byByZWFsaWduIG9uIGV2ZXJ5IGFuaW1hdGlvbiBmcmFtZS5cblx0XHQvLyBPbmNlIHdlIGhhdmVuJ3Qgc2VlbiBhbnkgbW9yZSByZXNpemUgZXZlbnRzIGluIHRoZSBsYXN0IDMybXMgKH4yIGFuaW1haW9uIGZyYW1lcykgd2UgY2FuXG5cdFx0Ly8gcmUtYWxpZ24uXG5cdFx0Y29uc3QgcmVzaXplID0gdGhpcy5fc2hhcmVkUmVzaXplT2JzZXJ2ZXJcblx0XHRcdC5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcblx0XHRcdC5waXBlKGRlYm91bmNlVGltZSgzMiksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKTtcblx0XHQvLyBOb3RlOiBXZSBkbyBub3QgYWN0dWFsbHkgbmVlZCB0byB3YXRjaCB0aGVzZSBldmVudHMgZm9yIHByb3BlciBmdW5jdGlvbmluZyBvZiB0aGUgdGFicyxcblx0XHQvLyB0aGUgcmVzaXplIGV2ZW50cyBhYm92ZSBzaG91bGQgY2FwdHVyZSBhbnkgdmlld3BvcnQgcmVzaXplIHRoYXQgd2UgY2FyZSBhYm91dC4gSG93ZXZlcixcblx0XHQvLyByZW1vdmluZyB0aGlzIGlzIGZhaXJseSBicmVha2luZyBmb3Igc2NyZWVuc2hvdCB0ZXN0cywgc28gd2UncmUgbGVhdmluZyBpdCBoZXJlIGZvciBub3cuXG5cdFx0Y29uc3Qgdmlld3BvcnRSZXNpemUgPSB0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpO1xuXG5cdFx0Y29uc3QgcmVhbGlnbiA9ICgpID0+IHtcblx0XHRcdHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xuXHRcdH07XG5cblx0XHR0aGlzLl9rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcjxCcm5QYWdpbmF0ZWRUYWJIZWFkZXJJdGVtPih0aGlzLml0ZW1zKCkpXG5cdFx0XHQud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSlcblx0XHRcdC53aXRoSG9tZUFuZEVuZCgpXG5cdFx0XHQud2l0aFdyYXAoKVxuXHRcdFx0Ly8gQWxsb3cgZm9jdXMgdG8gbGFuZCBvbiBkaXNhYmxlZCB0YWJzLCBhcyBwZXIgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2FyaWEtcHJhY3RpY2VzLyNrYmRfZGlzYWJsZWRfY29udHJvbHNcblx0XHRcdC5za2lwUHJlZGljYXRlKCgpID0+IGZhbHNlKTtcblxuXHRcdHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSh0aGlzLl9zZWxlY3RlZEluZGV4KCkpO1xuXG5cdFx0Ly8gTm90ZTogV2UgZG8gbm90IG5lZWQgdG8gcmVhbGlnbiBhZnRlciB0aGUgZmlyc3QgcmVuZGVyIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIHRhYnNcblx0XHQvLyB0aGUgcmVzaXplIGV2ZW50cyBhYm92ZSBzaG91bGQgZmlyZSB3aGVuIHdlIGZpcnN0IHN0YXJ0IG9ic2VydmluZyB0aGUgZWxlbWVudC4gSG93ZXZlcixcblx0XHQvLyByZW1vdmluZyB0aGlzIGlzIGZhaXJseSBicmVha2luZyBmb3Igc2NyZWVuc2hvdCB0ZXN0cywgc28gd2UncmUgbGVhdmluZyBpdCBoZXJlIGZvciBub3cuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKHJlYWxpZ24sIHsgaW5qZWN0b3I6IHRoaXMuX2luamVjdG9yIH0pO1xuXG5cdFx0Ly8gT24gZGlyIGNoYW5nZSBvciByZXNpemUsIHJlYWxpZ24gdGhlIGluayBiYXIgYW5kIHVwZGF0ZSB0aGUgb3JpZW50YXRpb24gb2Zcblx0XHQvLyB0aGUga2V5IG1hbmFnZXIgaWYgdGhlIGRpcmVjdGlvbiBoYXMgY2hhbmdlZC5cblx0XHRtZXJnZShkaXJDaGFuZ2UsIHZpZXdwb3J0UmVzaXplLCByZXNpemUsIHRoaXMuaXRlbXNDaGFuZ2VzLCB0aGlzLl9pdGVtc1Jlc2l6ZWQoKSlcblx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gZGVmZXIgdGhpcyB0byBnaXZlIHRoZSBicm93c2VyIHNvbWUgdGltZSB0byByZWNhbGN1bGF0ZVxuXHRcdFx0XHQvLyB0aGUgZWxlbWVudCBkaW1lbnNpb25zLiBUaGUgY2FsbCBoYXMgdG8gYmUgd3JhcHBlZCBpbiBgTmdab25lLnJ1bmAsXG5cdFx0XHRcdC8vIGJlY2F1c2UgdGhlIHZpZXdwb3J0IGNoYW5nZSBoYW5kbGVyIHJ1bnMgb3V0c2lkZSBvZiBBbmd1bGFyLlxuXHRcdFx0XHR0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcblx0XHRcdFx0XHRQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdC8vIENsYW1wIHRoZSBzY3JvbGwgZGlzdGFuY2UsIGJlY2F1c2UgaXQgY2FuIGNoYW5nZSB3aXRoIHRoZSBudW1iZXIgb2YgdGFicy5cblx0XHRcdFx0XHRcdHRoaXMuX3Njcm9sbERpc3RhbmNlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSwgdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKTtcblx0XHRcdFx0XHRcdHJlYWxpZ24oKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSk7XG5cdFx0XHR9KTtcblxuXHRcdC8vIElmIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBmb2N1cyBrZXkgbWFuYWdlciB3ZSBuZWVkIHRvIGVtaXQgdGhlIGBpbmRleEZvY3VzZWRgXG5cdFx0Ly8gZXZlbnQgaW4gb3JkZXIgdG8gcHJvdmlkZSBhIHB1YmxpYyBldmVudCB0aGF0IG5vdGlmaWVzIGFib3V0IGZvY3VzIGNoYW5nZXMuIEFsc28gd2UgcmVhbGlnblxuXHRcdC8vIHRoZSB0YWJzIGNvbnRhaW5lciBieSBzY3JvbGxpbmcgdGhlIG5ldyBmb2N1c2VkIHRhYiBpbnRvIHRoZSB2aXNpYmxlIHNlY3Rpb24uXG5cdFx0dGhpcy5fa2V5TWFuYWdlci5jaGFuZ2Uuc3Vic2NyaWJlKChuZXdGb2N1c0luZGV4KSA9PiB7XG5cdFx0XHR0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KG5ld0ZvY3VzSW5kZXgpO1xuXHRcdFx0dGhpcy5fc2V0VGFiRm9jdXMobmV3Rm9jdXNJbmRleCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKiogU2VuZHMgYW55IGNoYW5nZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGxheW91dCBvZiB0aGUgaXRlbXMuICovXG5cdHByaXZhdGUgX2l0ZW1zUmVzaXplZCgpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4ge1xuXHRcdGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdHJldHVybiBFTVBUWTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5pdGVtc0NoYW5nZXMucGlwZShcblx0XHRcdHN0YXJ0V2l0aCh0aGlzLml0ZW1zKCkpLFxuXHRcdFx0c3dpdGNoTWFwKFxuXHRcdFx0XHQodGFiSXRlbXM6IFJlYWRvbmx5QXJyYXk8QnJuUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4pID0+XG5cdFx0XHRcdFx0bmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxSZXNpemVPYnNlcnZlckVudHJ5W10+KSA9PlxuXHRcdFx0XHRcdFx0dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IG9ic2VydmVyLm5leHQoZW50cmllcykpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IHRhYkl0ZW0gb2YgdGFiSXRlbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNpemVPYnNlcnZlci5vYnNlcnZlKHRhYkl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCksXG5cdFx0XHQpLFxuXHRcdFx0Ly8gU2tpcCB0aGUgZmlyc3QgZW1pdCBzaW5jZSB0aGUgcmVzaXplIG9ic2VydmVyIGVtaXRzIHdoZW4gYW4gaXRlbVxuXHRcdFx0Ly8gaXMgb2JzZXJ2ZWQgZm9yIG5ldyBpdGVtcyB3aGVuIHRoZSB0YWIgaXMgYWxyZWFkeSBpbnNlcnRlZFxuXHRcdFx0c2tpcCgxKSxcblx0XHRcdC8vIFNraXAgZW1pc3Npb25zIHdoZXJlIGFsbCB0aGUgZWxlbWVudHMgYXJlIGludmlzaWJsZSBzaW5jZSB3ZSBkb24ndCB3YW50XG5cdFx0XHQvLyB0aGUgaGVhZGVyIHRvIHRyeSBhbmQgcmUtcmVuZGVyIHdpdGggaW52YWxpZCBtZWFzdXJlbWVudHMuIFNlZSAjMjU1NzQuXG5cdFx0XHRmaWx0ZXIoKGVudHJpZXMpID0+IGVudHJpZXMuc29tZSgoZSkgPT4gZS5jb250ZW50UmVjdC53aWR0aCA+IDAgJiYgZS5jb250ZW50UmVjdC5oZWlnaHQgPiAwKSksXG5cdFx0KTtcblx0fVxuXG5cdG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcblx0XHQvLyBJZiB0aGUgbnVtYmVyIG9mIHRhYiBsYWJlbHMgaGF2ZSBjaGFuZ2VkLCBjaGVjayBpZiBzY3JvbGxpbmcgc2hvdWxkIGJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5fdGFiTGFiZWxDb3VudCAhPT0gdGhpcy5pdGVtcygpLmxlbmd0aCkge1xuXHRcdFx0dGhpcy51cGRhdGVQYWdpbmF0aW9uKCk7XG5cdFx0XHR0aGlzLl90YWJMYWJlbENvdW50ID0gdGhpcy5pdGVtcygpLmxlbmd0aDtcblx0XHRcdHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBzZWxlY3RlZCBpbmRleCBoYXMgY2hhbmdlZCwgc2Nyb2xsIHRvIHRoZSBsYWJlbCBhbmQgY2hlY2sgaWYgdGhlIHNjcm9sbGluZyBjb250cm9sc1xuXHRcdC8vIHNob3VsZCBiZSBkaXNhYmxlZC5cblx0XHRpZiAodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQpIHtcblx0XHRcdHRoaXMuX3Njcm9sbFRvTGFiZWwodGhpcy5fc2VsZWN0ZWRJbmRleCgpKTtcblx0XHRcdHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBiZWVuIGNoYW5nZWQgKHRhYiBzZWxlY3RlZCwgZm9jdXNlZCwgc2Nyb2xsIGNvbnRyb2xzIGFjdGl2YXRlZCksXG5cdFx0Ly8gdGhlbiB0cmFuc2xhdGUgdGhlIGhlYWRlciB0byByZWZsZWN0IHRoaXMuXG5cdFx0aWYgKHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCkge1xuXHRcdFx0dGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKTtcblx0XHRcdHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCk7XG5cdFx0dGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCk7XG5cdFx0dGhpcy5fc3RvcFNjcm9sbGluZy5jb21wbGV0ZSgpO1xuXHR9XG5cblx0LyoqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIHRoZSBoZWFkZXIuICovXG5cdF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0Ly8gV2UgZG9uJ3QgaGFuZGxlIGFueSBrZXkgYmluZGluZ3Mgd2l0aCBhIG1vZGlmaWVyIGtleS5cblx0XHRpZiAoaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG5cdFx0XHRjYXNlIEVOVEVSOlxuXHRcdFx0Y2FzZSBTUEFDRTpcblx0XHRcdFx0aWYgKHRoaXMuZm9jdXNJbmRleCAhPT0gdGhpcy5fc2VsZWN0ZWRJbmRleCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbXMoKVt0aGlzLmZvY3VzSW5kZXhdO1xuXG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgIWl0ZW0uZGlzYWJsZWQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KTtcblx0XHRcdFx0XHRcdHRoaXMuX2l0ZW1TZWxlY3RlZChldmVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayBmb3Igd2hlbiB0aGUgTXV0YXRpb25PYnNlcnZlciBkZXRlY3RzIHRoYXQgdGhlIGNvbnRlbnQgaGFzIGNoYW5nZWQuXG5cdCAqL1xuXHRfb25Db250ZW50Q2hhbmdlcygpIHtcblx0XHRjb25zdCB0ZXh0Q29udGVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtcblxuXHRcdC8vIFdlIG5lZWQgdG8gZGlmZiB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBoZWFkZXIsIGJlY2F1c2UgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcblx0XHQvLyB3aWxsIGZpcmUgZXZlbiBpZiB0aGUgdGV4dCBjb250ZW50IGRpZG4ndCBjaGFuZ2Ugd2hpY2ggaXMgaW5lZmZpY2llbnQgYW5kIGlzIHByb25lXG5cdFx0Ly8gdG8gaW5maW5pdGUgbG9vcHMgaWYgYSBwb29ybHkgY29uc3RydWN0ZWQgZXhwcmVzc2lvbiBpcyBwYXNzZWQgaW4gKHNlZSAjMTQyNDkpLlxuXHRcdGlmICh0ZXh0Q29udGVudCAhPT0gdGhpcy5fY3VycmVudFRleHRDb250ZW50KSB7XG5cdFx0XHR0aGlzLl9jdXJyZW50VGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudCB8fCAnJztcblxuXHRcdFx0Ly8gVGhlIGNvbnRlbnQgb2JzZXJ2ZXIgcnVucyBvdXRzaWRlIHRoZSBgTmdab25lYCBieSBkZWZhdWx0LCB3aGljaFxuXHRcdFx0Ly8gbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIGJyaW5nIHRoZSBjYWxsYmFjayBiYWNrIGluIG91cnNlbHZlcy5cblx0XHRcdHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKTtcblx0XHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyB0aGUgdmlldyB3aGV0aGVyIHBhZ2luYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LlxuXHQgKlxuXHQgKiBXQVJOSU5HOiBDYWxsaW5nIHRoaXMgbWV0aG9kIGNhbiBiZSB2ZXJ5IGNvc3RseSBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZS4gSXQgc2hvdWxkIGJlIGNhbGxlZFxuXHQgKiBhcyBpbmZyZXF1ZW50bHkgYXMgcG9zc2libGUgZnJvbSBvdXRzaWRlIG9mIHRoZSBUYWJzIGNvbXBvbmVudCBhcyBpdCBjYXVzZXMgYSByZWZsb3cgb2YgdGhlXG5cdCAqIHBhZ2UuXG5cdCAqL1xuXHR1cGRhdGVQYWdpbmF0aW9uKCkge1xuXHRcdHRoaXMuX2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKTtcblx0XHR0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCk7XG5cdFx0dGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKTtcblx0fVxuXG5cdC8qKiBUcmFja3Mgd2hpY2ggZWxlbWVudCBoYXMgZm9jdXM7IHVzZWQgZm9yIGtleWJvYXJkIG5hdmlnYXRpb24gKi9cblx0cHVibGljIGdldCBmb2N1c0luZGV4KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2tleU1hbmFnZXIgPyAodGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXggPz8gMCkgOiAwO1xuXHR9XG5cblx0LyoqIFdoZW4gdGhlIGZvY3VzIGluZGV4IGlzIHNldCwgd2UgbXVzdCBtYW51YWxseSBzZW5kIGZvY3VzIHRvIHRoZSBjb3JyZWN0IGxhYmVsICovXG5cdHB1YmxpYyBzZXQgZm9jdXNJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0aWYgKCF0aGlzLl9pc1ZhbGlkSW5kZXgodmFsdWUpIHx8IHRoaXMuZm9jdXNJbmRleCA9PT0gdmFsdWUgfHwgIXRoaXMuX2tleU1hbmFnZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgaWYgYW4gaW5kZXggaXMgdmFsaWQuICBJZiB0aGUgdGFicyBhcmUgbm90IHJlYWR5IHlldCwgd2UgYXNzdW1lIHRoYXQgdGhlIHVzZXIgaXNcblx0ICogcHJvdmlkaW5nIGEgdmFsaWQgaW5kZXggYW5kIHJldHVybiB0cnVlLlxuXHQgKi9cblx0X2lzVmFsaWRJbmRleChpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXRlbXMoKSA/ICEhdGhpcy5pdGVtcygpW2luZGV4XSA6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBmb2N1cyBvbiB0aGUgSFRNTCBlbGVtZW50IGZvciB0aGUgbGFiZWwgd3JhcHBlciBhbmQgc2Nyb2xscyBpdCBpbnRvIHRoZSB2aWV3IGlmXG5cdCAqIHNjcm9sbGluZyBpcyBlbmFibGVkLlxuXHQgKi9cblx0X3NldFRhYkZvY3VzKHRhYkluZGV4OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKCkpIHtcblx0XHRcdHRoaXMuX3Njcm9sbFRvTGFiZWwodGFiSW5kZXgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLml0ZW1zKCk/Lmxlbmd0aCkge1xuXHRcdFx0dGhpcy5pdGVtcygpW3RhYkluZGV4XS5mb2N1cygpO1xuXG5cdFx0XHQvLyBEbyBub3QgbGV0IHRoZSBicm93c2VyIG1hbmFnZSBzY3JvbGxpbmcgdG8gZm9jdXMgdGhlIGVsZW1lbnQsIHRoaXMgd2lsbCBiZSBoYW5kbGVkXG5cdFx0XHQvLyBieSB1c2luZyB0cmFuc2xhdGlvbi4gSW4gTFRSLCB0aGUgc2Nyb2xsIGxlZnQgc2hvdWxkIGJlIDAuIEluIFJUTCwgdGhlIHNjcm9sbCB3aWR0aFxuXHRcdFx0Ly8gc2hvdWxkIGJlIHRoZSBmdWxsIHdpZHRoIG1pbnVzIHRoZSBvZmZzZXQgd2lkdGguXG5cdFx0XHRjb25zdCBjb250YWluZXJFbCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRjb25zdCBkaXIgPSB0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKTtcblxuXHRcdFx0aWYgKGRpciA9PT0gJ2x0cicpIHtcblx0XHRcdFx0Y29udGFpbmVyRWwuc2Nyb2xsTGVmdCA9IDA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb250YWluZXJFbC5zY3JvbGxMZWZ0ID0gY29udGFpbmVyRWwuc2Nyb2xsV2lkdGggLSBjb250YWluZXJFbC5vZmZzZXRXaWR0aDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKiogVGhlIGxheW91dCBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYXBwLiAqL1xuXHRfZ2V0TGF5b3V0RGlyZWN0aW9uKCk6IERpcmVjdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2RpciAmJiB0aGlzLl9kaXIudmFsdWUgPT09ICdydGwnID8gJ3J0bCcgOiAnbHRyJztcblx0fVxuXG5cdC8qKiBQZXJmb3JtcyB0aGUgQ1NTIHRyYW5zZm9ybWF0aW9uIG9uIHRoZSB0YWIgbGlzdCB0aGF0IHdpbGwgY2F1c2UgdGhlIGxpc3QgdG8gc2Nyb2xsLiAqL1xuXHRfdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSB7XG5cdFx0aWYgKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24oKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNjcm9sbERpc3RhbmNlID0gdGhpcy5zY3JvbGxEaXN0YW5jZTtcblx0XHRjb25zdCB0cmFuc2xhdGVYID0gdGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkgPT09ICdsdHInID8gLXNjcm9sbERpc3RhbmNlIDogc2Nyb2xsRGlzdGFuY2U7XG5cblx0XHQvLyBEb24ndCB1c2UgYHRyYW5zbGF0ZTNkYCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjcmVhdGUgYSBuZXcgbGF5ZXIuIEEgbmV3IGxheWVyXG5cdFx0Ly8gc2VlbXMgdG8gY2F1c2UgZmxpY2tlcmluZyBhbmQgb3ZlcmZsb3cgaW4gSW50ZXJuZXQgRXhwbG9yZXIuIEZvciBleGFtcGxlLCB0aGUgaW5rIGJhclxuXHRcdC8vIGFuZCByaXBwbGVzIHdpbGwgZXhjZWVkIHRoZSBib3VuZGFyaWVzIG9mIHRoZSB2aXNpYmxlIHRhYiBiYXIuXG5cdFx0Ly8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8xMDI3NlxuXHRcdC8vIFdlIHJvdW5kIHRoZSBgdHJhbnNmb3JtYCBoZXJlLCBiZWNhdXNlIHRyYW5zZm9ybXMgd2l0aCBzdWItcGl4ZWwgcHJlY2lzaW9uIGNhdXNlIHNvbWVcblx0XHQvLyBicm93c2VycyB0byBibHVyIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50LlxuXHRcdHRoaXMudGFiTGlzdCgpLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKHRyYW5zbGF0ZVgpfXB4KWA7XG5cblx0XHQvLyBTZXR0aW5nIHRoZSBgdHJhbnNmb3JtYCBvbiBJRSB3aWxsIGNoYW5nZSB0aGUgc2Nyb2xsIG9mZnNldCBvZiB0aGUgcGFyZW50LCBjYXVzaW5nIHRoZVxuXHRcdC8vIHBvc2l0aW9uIHRvIGJlIHRocm93biBvZmYgaW4gc29tZSBjYXNlcy4gV2UgaGF2ZSB0byByZXNldCBpdCBvdXJzZWx2ZXMgdG8gZW5zdXJlIHRoYXRcblx0XHQvLyBpdCBkb2Vzbid0IGdldCB0aHJvd24gb2ZmLiBOb3RlIHRoYXQgd2Ugc2NvcGUgaXQgb25seSB0byBJRSBhbmQgRWRnZSwgYmVjYXVzZSBtZXNzaW5nXG5cdFx0Ly8gd2l0aCB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRocm93cyBvZmYgQ2hyb21lIDcxKyBpbiBSVEwgbW9kZSAoc2VlICMxNDY4OSkuXG5cdFx0aWYgKHRoaXMuX3BsYXRmb3JtLlRSSURFTlQgfHwgdGhpcy5fcGxhdGZvcm0uRURHRSkge1xuXHRcdFx0dGhpcy50YWJMaXN0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcblx0XHR9XG5cdH1cblxuXHQvKiogU2V0cyB0aGUgZGlzdGFuY2UgaW4gcGl4ZWxzIHRoYXQgdGhlIHRhYiBoZWFkZXIgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGluIHRoZSBYLWF4aXMuICovXG5cdHB1YmxpYyBnZXQgc2Nyb2xsRGlzdGFuY2UoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U7XG5cdH1cblx0cHVibGljIHNldCBzY3JvbGxEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5fc2Nyb2xsVG8odmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1vdmVzIHRoZSB0YWIgbGlzdCBpbiB0aGUgJ2JlZm9yZScgb3IgJ2FmdGVyJyBkaXJlY3Rpb24gKHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBvclxuXHQgKiB0aGUgZW5kIG9mIHRoZSBsaXN0LCByZXNwZWN0aXZlbHkpLiBUaGUgZGlzdGFuY2UgdG8gc2Nyb2xsIGlzIGNvbXB1dGVkIHRvIGJlIGEgdGhpcmQgb2YgdGhlXG5cdCAqIGxlbmd0aCBvZiB0aGUgdGFiIGxpc3QgdmlldyB3aW5kb3cuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfc2Nyb2xsSGVhZGVyKGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uKSB7XG5cdFx0Y29uc3Qgdmlld0xlbmd0aCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cblx0XHQvLyBNb3ZlIHRoZSBzY3JvbGwgZGlzdGFuY2Ugb25lLXRoaXJkIHRoZSBsZW5ndGggb2YgdGhlIHRhYiBsaXN0J3Mgdmlld3BvcnQuXG5cdFx0Y29uc3Qgc2Nyb2xsQW1vdW50ID0gKChkaXJlY3Rpb24gPT09ICdiZWZvcmUnID8gLTEgOiAxKSAqIHZpZXdMZW5ndGgpIC8gMztcblxuXHRcdHJldHVybiB0aGlzLl9zY3JvbGxUbyh0aGlzLl9zY3JvbGxEaXN0YW5jZSArIHNjcm9sbEFtb3VudCk7XG5cdH1cblxuXHQvKiogSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIHBhZ2luYXRpb24gYXJyb3dzLiAqL1xuXHRfaGFuZGxlUGFnaW5hdG9yQ2xpY2soZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcblx0XHR0aGlzLl9zdG9wSW50ZXJ2YWwoKTtcblx0XHR0aGlzLl9zY3JvbGxIZWFkZXIoZGlyZWN0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNb3ZlcyB0aGUgdGFiIGxpc3Qgc3VjaCB0aGF0IHRoZSBkZXNpcmVkIHRhYiBsYWJlbCAobWFya2VkIGJ5IGluZGV4KSBpcyBtb3ZlZCBpbnRvIHZpZXcuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfc2Nyb2xsVG9MYWJlbChsYWJlbEluZGV4OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VsZWN0ZWRMYWJlbCA9IHRoaXMuaXRlbXMoKSA/IHRoaXMuaXRlbXMoKVtsYWJlbEluZGV4XSA6IG51bGw7XG5cblx0XHRpZiAoIXNlbGVjdGVkTGFiZWwpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBUaGUgdmlldyBsZW5ndGggaXMgdGhlIHZpc2libGUgd2lkdGggb2YgdGhlIHRhYiBsYWJlbHMuXG5cdFx0Y29uc3Qgdmlld0xlbmd0aCA9IHRoaXMudGFiTGlzdENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cdFx0Y29uc3QgeyBvZmZzZXRMZWZ0LCBvZmZzZXRXaWR0aCB9ID0gc2VsZWN0ZWRMYWJlbC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRsZXQgbGFiZWxCZWZvcmVQb3M6IG51bWJlcjtcblx0XHRsZXQgbGFiZWxBZnRlclBvczogbnVtYmVyO1xuXHRcdGlmICh0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSA9PT0gJ2x0cicpIHtcblx0XHRcdGxhYmVsQmVmb3JlUG9zID0gb2Zmc2V0TGVmdDtcblx0XHRcdGxhYmVsQWZ0ZXJQb3MgPSBsYWJlbEJlZm9yZVBvcyArIG9mZnNldFdpZHRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsYWJlbEFmdGVyUG9zID0gdGhpcy50YWJMaXN0SW5uZXIoKS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC0gb2Zmc2V0TGVmdDtcblx0XHRcdGxhYmVsQmVmb3JlUG9zID0gbGFiZWxBZnRlclBvcyAtIG9mZnNldFdpZHRoO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJlZm9yZVZpc2libGVQb3MgPSB0aGlzLnNjcm9sbERpc3RhbmNlO1xuXHRcdGNvbnN0IGFmdGVyVmlzaWJsZVBvcyA9IHRoaXMuc2Nyb2xsRGlzdGFuY2UgKyB2aWV3TGVuZ3RoO1xuXG5cdFx0aWYgKGxhYmVsQmVmb3JlUG9zIDwgYmVmb3JlVmlzaWJsZVBvcykge1xuXHRcdFx0Ly8gU2Nyb2xsIGhlYWRlciB0byBtb3ZlIGxhYmVsIHRvIHRoZSBiZWZvcmUgZGlyZWN0aW9uXG5cdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlIC09IGJlZm9yZVZpc2libGVQb3MgLSBsYWJlbEJlZm9yZVBvcztcblx0XHR9IGVsc2UgaWYgKGxhYmVsQWZ0ZXJQb3MgPiBhZnRlclZpc2libGVQb3MpIHtcblx0XHRcdC8vIFNjcm9sbCBoZWFkZXIgdG8gbW92ZSBsYWJlbCB0byB0aGUgYWZ0ZXIgZGlyZWN0aW9uXG5cdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlICs9IE1hdGgubWluKGxhYmVsQWZ0ZXJQb3MgLSBhZnRlclZpc2libGVQb3MsIGxhYmVsQmVmb3JlUG9zIC0gYmVmb3JlVmlzaWJsZVBvcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2YWx1YXRlIHdoZXRoZXIgdGhlIHBhZ2luYXRpb24gY29udHJvbHMgc2hvdWxkIGJlIGRpc3BsYXllZC4gSWYgdGhlIHNjcm9sbCB3aWR0aCBvZiB0aGVcblx0ICogdGFiIGxpc3QgaXMgd2lkZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGNvbnRhaW5lciwgdGhlbiB0aGUgcGFnaW5hdGlvbiBjb250cm9scyBzaG91bGRcblx0ICogYmUgc2hvd24uXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHR0aGlzLnNob3dQYWdpbmF0aW9uQ29udHJvbHMuc2V0KGZhbHNlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaXNFbmFibGVkID0gdGhpcy50YWJMaXN0SW5uZXIoKS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoID4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG5cdFx0XHRpZiAoIWlzRW5hYmxlZCkge1xuXHRcdFx0XHR0aGlzLnNjcm9sbERpc3RhbmNlID0gMDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzRW5hYmxlZCAhPT0gdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKCkpIHtcblx0XHRcdFx0dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scy5zZXQoaXNFbmFibGVkKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZhbHVhdGUgd2hldGhlciB0aGUgYmVmb3JlIGFuZCBhZnRlciBjb250cm9scyBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC5cblx0ICogSWYgdGhlIGhlYWRlciBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0IChzY3JvbGwgZGlzdGFuY2UgaXMgZXF1YWwgdG8gMCkgdGhlbiBkaXNhYmxlIHRoZVxuXHQgKiBiZWZvcmUgYnV0dG9uLiBJZiB0aGUgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKHNjcm9sbCBkaXN0YW5jZSBpcyBlcXVhbCB0byB0aGVcblx0ICogbWF4aW11bSBkaXN0YW5jZSB3ZSBjYW4gc2Nyb2xsKSwgdGhlbiBkaXNhYmxlIHRoZSBhZnRlciBidXR0b24uXG5cdCAqXG5cdCAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcblx0ICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG5cdCAqL1xuXHRfY2hlY2tTY3JvbGxpbmdDb250cm9scygpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHR0aGlzLmRpc2FibGVTY3JvbGxBZnRlciA9IHRoaXMuZGlzYWJsZVNjcm9sbEJlZm9yZSA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBwYWdpbmF0aW9uIGFycm93cyBzaG91bGQgYmUgYWN0aXZhdGVkLlxuXHRcdFx0dGhpcy5kaXNhYmxlU2Nyb2xsQmVmb3JlID0gdGhpcy5zY3JvbGxEaXN0YW5jZSA9PT0gMDtcblx0XHRcdHRoaXMuZGlzYWJsZVNjcm9sbEFmdGVyID0gdGhpcy5zY3JvbGxEaXN0YW5jZSA9PT0gdGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtcblx0XHRcdHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIGluIHBpeGVscyB0aGF0IGNhbiBiZSBzZXQgZm9yIHRoZSBzY3JvbGwgZGlzdGFuY2UuIFRoaXNcblx0ICogaXMgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UgaW4gd2lkdGggYmV0d2VlbiB0aGUgdGFiIGxpc3QgY29udGFpbmVyIGFuZCB0YWIgaGVhZGVyIGNvbnRhaW5lci5cblx0ICpcblx0ICogVGhpcyBpcyBhbiBleHBlbnNpdmUgY2FsbCB0aGF0IGZvcmNlcyBhIGxheW91dCByZWZsb3cgdG8gY29tcHV0ZSBib3ggYW5kIHNjcm9sbCBtZXRyaWNzIGFuZFxuXHQgKiBzaG91bGQgYmUgY2FsbGVkIHNwYXJpbmdseS5cblx0ICovXG5cdF9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpOiBudW1iZXIge1xuXHRcdGNvbnN0IGxlbmd0aE9mVGFiTGlzdCA9IHRoaXMudGFiTGlzdElubmVyKCkubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcblx0XHRjb25zdCB2aWV3TGVuZ3RoID0gdGhpcy50YWJMaXN0Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcblx0XHRyZXR1cm4gbGVuZ3RoT2ZUYWJMaXN0IC0gdmlld0xlbmd0aCB8fCAwO1xuXHR9XG5cblx0LyoqIFN0b3BzIHRoZSBjdXJyZW50bHktcnVubmluZyBwYWdpbmF0b3IgaW50ZXJ2YWwuICAqL1xuXHRfc3RvcEludGVydmFsKCkge1xuXHRcdHRoaXMuX3N0b3BTY3JvbGxpbmcubmV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHVzZXIgcHJlc3NpbmcgZG93biBvbiBvbmUgb2YgdGhlIHBhZ2luYXRvcnMuXG5cdCAqIFN0YXJ0cyBzY3JvbGxpbmcgdGhlIGhlYWRlciBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUuXG5cdCAqIEBwYXJhbSBkaXJlY3Rpb24gSW4gd2hpY2ggZGlyZWN0aW9uIHRoZSBwYWdpbmF0b3Igc2hvdWxkIGJlIHNjcm9sbGVkLlxuXHQgKi9cblx0X2hhbmRsZVBhZ2luYXRvclByZXNzKGRpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uLCBtb3VzZUV2ZW50PzogTW91c2VFdmVudCkge1xuXHRcdC8vIERvbid0IHN0YXJ0IGF1dG8gc2Nyb2xsaW5nIGZvciByaWdodCBtb3VzZSBidXR0b24gY2xpY2tzLiBOb3RlIHRoYXQgd2Ugc2hvdWxkbid0IGhhdmUgdG9cblx0XHQvLyBudWxsIGNoZWNrIHRoZSBgYnV0dG9uYCwgYnV0IHdlIGRvIGl0IHNvIHdlIGRvbid0IGJyZWFrIHRlc3RzIHRoYXQgdXNlIGZha2UgZXZlbnRzLlxuXHRcdGlmIChtb3VzZUV2ZW50ICYmIG1vdXNlRXZlbnQuYnV0dG9uICE9PSBudWxsICYmIG1vdXNlRXZlbnQuYnV0dG9uICE9PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQXZvaWQgb3ZlcmxhcHBpbmcgdGltZXJzLlxuXHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXG5cdFx0Ly8gU3RhcnQgYSB0aW1lciBhZnRlciB0aGUgZGVsYXkgYW5kIGtlZXAgZmlyaW5nIGJhc2VkIG9uIHRoZSBpbnRlcnZhbC5cblx0XHR0aW1lcihIRUFERVJfU0NST0xMX0RFTEFZLCBIRUFERVJfU0NST0xMX0lOVEVSVkFMKVxuXHRcdFx0Ly8gS2VlcCB0aGUgdGltZXIgZ29pbmcgdW50aWwgc29tZXRoaW5nIHRlbGxzIGl0IHRvIHN0b3Agb3IgdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXG5cdFx0XHQucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fc3RvcFNjcm9sbGluZywgdGhpcy5fZGVzdHJveWVkKSkpXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgeyBtYXhTY3JvbGxEaXN0YW5jZSwgZGlzdGFuY2UgfSA9IHRoaXMuX3Njcm9sbEhlYWRlcihkaXJlY3Rpb24pO1xuXG5cdFx0XHRcdC8vIFN0b3AgdGhlIHRpbWVyIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQuXG5cdFx0XHRcdGlmIChkaXN0YW5jZSA9PT0gMCB8fCBkaXN0YW5jZSA+PSBtYXhTY3JvbGxEaXN0YW5jZSkge1xuXHRcdFx0XHRcdHRoaXMuX3N0b3BJbnRlcnZhbCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGxzIHRoZSBoZWFkZXIgdG8gYSBnaXZlbiBwb3NpdGlvbi5cblx0ICogQHBhcmFtIHBvc2l0aW9uIFBvc2l0aW9uIHRvIHdoaWNoIHRvIHNjcm9sbC5cblx0ICogQHJldHVybnMgSW5mb3JtYXRpb24gb24gdGhlIGN1cnJlbnQgc2Nyb2xsIGRpc3RhbmNlIGFuZCB0aGUgbWF4aW11bS5cblx0ICovXG5cdHByaXZhdGUgX3Njcm9sbFRvKHBvc2l0aW9uOiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbigpKSB7XG5cdFx0XHRyZXR1cm4geyBtYXhTY3JvbGxEaXN0YW5jZTogMCwgZGlzdGFuY2U6IDAgfTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXhTY3JvbGxEaXN0YW5jZSA9IHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCk7XG5cdFx0dGhpcy5fc2Nyb2xsRGlzdGFuY2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihtYXhTY3JvbGxEaXN0YW5jZSwgcG9zaXRpb24pKTtcblxuXHRcdC8vIE1hcmsgdGhhdCB0aGUgc2Nyb2xsIGRpc3RhbmNlIGhhcyBjaGFuZ2VkIHNvIHRoYXQgYWZ0ZXIgdGhlIHZpZXcgaXMgY2hlY2tlZCwgdGhlIENTU1xuXHRcdC8vIHRyYW5zZm9ybWF0aW9uIGNhbiBtb3ZlIHRoZSBoZWFkZXIuXG5cdFx0dGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkID0gdHJ1ZTtcblx0XHR0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCk7XG5cblx0XHRyZXR1cm4geyBtYXhTY3JvbGxEaXN0YW5jZSwgZGlzdGFuY2U6IHRoaXMuX3Njcm9sbERpc3RhbmNlIH07XG5cdH1cbn1cbiJdfQ==","import { BrnTabs } from './lib/brn-tabs';\nimport { BrnTabsContent } from './lib/brn-tabs-content';\nimport { BrnTabsList } from './lib/brn-tabs-list';\nimport { BrnTabsTrigger } from './lib/brn-tabs-trigger';\nexport * from './lib/brn-tabs';\nexport * from './lib/brn-tabs-content';\nexport * from './lib/brn-tabs-list';\nexport * from './lib/brn-tabs-paginated-list';\nexport * from './lib/brn-tabs-trigger';\nexport const BrnTabsImports = [BrnTabs, BrnTabsList, BrnTabsTrigger, BrnTabsContent];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2JyYWluL3RhYnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcm5UYWJzIH0gZnJvbSAnLi9saWIvYnJuLXRhYnMnO1xuaW1wb3J0IHsgQnJuVGFic0NvbnRlbnQgfSBmcm9tICcuL2xpYi9icm4tdGFicy1jb250ZW50JztcbmltcG9ydCB7IEJyblRhYnNMaXN0IH0gZnJvbSAnLi9saWIvYnJuLXRhYnMtbGlzdCc7XG5pbXBvcnQgeyBCcm5UYWJzVHJpZ2dlciB9IGZyb20gJy4vbGliL2Jybi10YWJzLXRyaWdnZXInO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdGFicyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icm4tdGFicy1jb250ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jybi10YWJzLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRhYnMtcGFnaW5hdGVkLWxpc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJuLXRhYnMtdHJpZ2dlcic7XG5cbmV4cG9ydCBjb25zdCBCcm5UYWJzSW1wb3J0cyA9IFtCcm5UYWJzLCBCcm5UYWJzTGlzdCwgQnJuVGFic1RyaWdnZXIsIEJyblRhYnNDb250ZW50XSBhcyBjb25zdDtcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcnRhbi1uZy1icmFpbi10YWJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9icmFpbi90YWJzL3NyYy9zcGFydGFuLW5nLWJyYWluLXRhYnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["observableOf"],"mappings":"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"}
|