@skyux/tabs 8.7.2 → 8.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
- var _SkyTabComponent_instances, _SkyTabComponent__active, _SkyTabComponent_activeChange, _SkyTabComponent__permalinkValue, _SkyTabComponent_stateChange, _SkyTabComponent__tabHeading, _SkyTabComponent__tabIndex, _SkyTabComponent__layout, _SkyTabComponent_tabIndexChange, _SkyTabComponent_changeDetector, _SkyTabComponent_permalinkService, _SkyTabComponent_tabsetService, _SkyTabComponent_setPermalinkValueOrDefault;
1
+ var _SkyTabComponent_instances, _SkyTabComponent__active, _SkyTabComponent_activeChange, _SkyTabComponent__permalinkValue, _SkyTabComponent_stateChange, _SkyTabComponent__tabHeading, _SkyTabComponent__tabIndex, _SkyTabComponent__layout, _SkyTabComponent__tabElement, _SkyTabComponent_tabIndexChange, _SkyTabComponent_observingTab, _SkyTabComponent_changeDetector, _SkyTabComponent_permalinkService, _SkyTabComponent_tabsetService, _SkyTabComponent_mediaQueryService, _SkyTabComponent_setPermalinkValueOrDefault, _SkyTabComponent_observeTabResize;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, } from '@angular/core';
3
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewChild, inject, } from '@angular/core';
4
+ import { SkyMediaQueryService, SkyResizeObserverMediaQueryService, } from '@skyux/core';
4
5
  import { BehaviorSubject } from 'rxjs';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "./tabset-permalink.service";
@@ -73,16 +74,17 @@ export class SkyTabComponent {
73
74
  return __classPrivateFieldGet(this, _SkyTabComponent__tabIndex, "f");
74
75
  }
75
76
  /**
76
- * The page layout that corresponds with the top-level component type
77
- * used on the page. For laying out custom content, use `auto` to allow
78
- * the page contents to expand beyond the bottom of the browser window
79
- * or `fit` to constrain the page contents to the available viewport.
80
- * @default "auto"
77
+ * The tab layout that applies spacing to the tab container element. Use the layout
78
+ * that corresponds with the top-level component type used within the tab, or use `fit` to
79
+ * constrain the tab contents to the available viewport.
80
+ * Use `none` for custom content that does not adhere to predefined spacing or constraints.
81
+ * @default "none"
81
82
  */
82
83
  set layout(value) {
83
84
  const layout = value || LAYOUT_DEFAULT;
84
85
  __classPrivateFieldSet(this, _SkyTabComponent__layout, layout, "f");
85
86
  this.cssClass = `${LAYOUT_CLASS_PREFIX}${layout}`;
87
+ __classPrivateFieldGet(this, _SkyTabComponent_instances, "m", _SkyTabComponent_observeTabResize).call(this);
86
88
  if (this.active) {
87
89
  __classPrivateFieldGet(this, _SkyTabComponent_tabsetService, "f").updateActiveTabLayout(layout);
88
90
  }
@@ -99,6 +101,13 @@ export class SkyTabComponent {
99
101
  get tabIndexChange() {
100
102
  return __classPrivateFieldGet(this, _SkyTabComponent_tabIndexChange, "f");
101
103
  }
104
+ set tabContentWrapper(tabContentWrapper) {
105
+ __classPrivateFieldSet(this, _SkyTabComponent__tabElement, tabContentWrapper, "f");
106
+ __classPrivateFieldGet(this, _SkyTabComponent_instances, "m", _SkyTabComponent_observeTabResize).call(this);
107
+ }
108
+ get tabContentWrapper() {
109
+ return __classPrivateFieldGet(this, _SkyTabComponent__tabElement, "f");
110
+ }
102
111
  constructor(changeDetector, permalinkService, tabsetService) {
103
112
  _SkyTabComponent_instances.add(this);
104
113
  this.cssClass = `${LAYOUT_CLASS_PREFIX}${LAYOUT_DEFAULT}`;
@@ -117,10 +126,13 @@ export class SkyTabComponent {
117
126
  _SkyTabComponent__tabHeading.set(this, void 0);
118
127
  _SkyTabComponent__tabIndex.set(this, void 0);
119
128
  _SkyTabComponent__layout.set(this, LAYOUT_DEFAULT);
129
+ _SkyTabComponent__tabElement.set(this, void 0);
120
130
  _SkyTabComponent_tabIndexChange.set(this, void 0);
131
+ _SkyTabComponent_observingTab.set(this, false);
121
132
  _SkyTabComponent_changeDetector.set(this, void 0);
122
133
  _SkyTabComponent_permalinkService.set(this, void 0);
123
134
  _SkyTabComponent_tabsetService.set(this, void 0);
135
+ _SkyTabComponent_mediaQueryService.set(this, inject(SkyResizeObserverMediaQueryService));
124
136
  __classPrivateFieldSet(this, _SkyTabComponent_changeDetector, changeDetector, "f");
125
137
  __classPrivateFieldSet(this, _SkyTabComponent_permalinkService, permalinkService, "f");
126
138
  __classPrivateFieldSet(this, _SkyTabComponent_tabsetService, tabsetService, "f");
@@ -139,6 +151,9 @@ export class SkyTabComponent {
139
151
  (changes['permalinkValue'] && !changes['permalinkValue'].firstChange)) {
140
152
  __classPrivateFieldGet(this, _SkyTabComponent_stateChange, "f").next();
141
153
  }
154
+ if (changes['layout'] && changes['layout'].currentValue === 'none') {
155
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").unobserve();
156
+ }
142
157
  }
143
158
  ngOnDestroy() {
144
159
  __classPrivateFieldGet(this, _SkyTabComponent_activeChange, "f").complete();
@@ -147,6 +162,8 @@ export class SkyTabComponent {
147
162
  if (this.tabIndex !== undefined) {
148
163
  __classPrivateFieldGet(this, _SkyTabComponent_tabsetService, "f").unregisterTab(this.tabIndex);
149
164
  }
165
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").unobserve();
166
+ __classPrivateFieldSet(this, _SkyTabComponent_observingTab, false, "f");
150
167
  }
151
168
  init() {
152
169
  __classPrivateFieldSet(this, _SkyTabComponent__tabIndex, __classPrivateFieldGet(this, _SkyTabComponent_tabsetService, "f").registerTab(this.tabIndex), "f");
@@ -165,16 +182,41 @@ export class SkyTabComponent {
165
182
  return this.close.observers.length > 0;
166
183
  }
167
184
  }
168
- _SkyTabComponent__active = new WeakMap(), _SkyTabComponent_activeChange = new WeakMap(), _SkyTabComponent__permalinkValue = new WeakMap(), _SkyTabComponent_stateChange = new WeakMap(), _SkyTabComponent__tabHeading = new WeakMap(), _SkyTabComponent__tabIndex = new WeakMap(), _SkyTabComponent__layout = new WeakMap(), _SkyTabComponent_tabIndexChange = new WeakMap(), _SkyTabComponent_changeDetector = new WeakMap(), _SkyTabComponent_permalinkService = new WeakMap(), _SkyTabComponent_tabsetService = new WeakMap(), _SkyTabComponent_instances = new WeakSet(), _SkyTabComponent_setPermalinkValueOrDefault = function _SkyTabComponent_setPermalinkValueOrDefault() {
185
+ _SkyTabComponent__active = new WeakMap(), _SkyTabComponent_activeChange = new WeakMap(), _SkyTabComponent__permalinkValue = new WeakMap(), _SkyTabComponent_stateChange = new WeakMap(), _SkyTabComponent__tabHeading = new WeakMap(), _SkyTabComponent__tabIndex = new WeakMap(), _SkyTabComponent__layout = new WeakMap(), _SkyTabComponent__tabElement = new WeakMap(), _SkyTabComponent_tabIndexChange = new WeakMap(), _SkyTabComponent_observingTab = new WeakMap(), _SkyTabComponent_changeDetector = new WeakMap(), _SkyTabComponent_permalinkService = new WeakMap(), _SkyTabComponent_tabsetService = new WeakMap(), _SkyTabComponent_mediaQueryService = new WeakMap(), _SkyTabComponent_instances = new WeakSet(), _SkyTabComponent_setPermalinkValueOrDefault = function _SkyTabComponent_setPermalinkValueOrDefault() {
169
186
  this.permalinkValueOrDefault =
170
187
  __classPrivateFieldGet(this, _SkyTabComponent_permalinkService, "f").urlify(this.permalinkValue) ||
171
188
  __classPrivateFieldGet(this, _SkyTabComponent_permalinkService, "f").urlify(this.tabHeading);
189
+ }, _SkyTabComponent_observeTabResize = function _SkyTabComponent_observeTabResize() {
190
+ if (this.tabContentWrapper) {
191
+ if (this.layout !== 'none' && !__classPrivateFieldGet(this, _SkyTabComponent_observingTab, "f")) {
192
+ __classPrivateFieldSet(this, _SkyTabComponent_observingTab, true, "f");
193
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").observe(this.tabContentWrapper, {
194
+ updateResponsiveClasses: true,
195
+ });
196
+ }
197
+ else if (this.layout === 'none' && __classPrivateFieldGet(this, _SkyTabComponent_observingTab, "f")) {
198
+ __classPrivateFieldSet(this, _SkyTabComponent_observingTab, false, "f");
199
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").unobserve();
200
+ }
201
+ }
172
202
  };
173
203
  SkyTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyTabsetPermalinkService }, { token: i2.SkyTabsetService }], target: i0.ɵɵFactoryTarget.Component });
174
- SkyTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyTabComponent, selector: "sky-tab", inputs: { active: "active", disabled: "disabled", permalinkValue: "permalinkValue", tabHeaderCount: "tabHeaderCount", tabHeading: "tabHeading", tabIndex: "tabIndex", layout: "layout" }, outputs: { close: "close" }, host: { properties: { "class": "this.cssClass" } }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
204
+ SkyTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyTabComponent, selector: "sky-tab", inputs: { active: "active", disabled: "disabled", permalinkValue: "permalinkValue", tabHeaderCount: "tabHeaderCount", tabHeading: "tabHeading", tabIndex: "tabIndex", layout: "layout" }, outputs: { close: "close" }, host: { properties: { "class": "this.cssClass" } }, providers: [
205
+ SkyResizeObserverMediaQueryService,
206
+ {
207
+ provide: SkyMediaQueryService,
208
+ useExisting: SkyResizeObserverMediaQueryService,
209
+ },
210
+ ], viewQueries: [{ propertyName: "tabContentWrapper", first: true, predicate: ["tabContentWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n #tabContentWrapper\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
175
211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabComponent, decorators: [{
176
212
  type: Component,
177
- args: [{ selector: 'sky-tab', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"] }]
213
+ args: [{ selector: 'sky-tab', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
214
+ SkyResizeObserverMediaQueryService,
215
+ {
216
+ provide: SkyMediaQueryService,
217
+ useExisting: SkyResizeObserverMediaQueryService,
218
+ },
219
+ ], template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n #tabContentWrapper\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"] }]
178
220
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SkyTabsetPermalinkService }, { type: i2.SkyTabsetService }]; }, propDecorators: { active: [{
179
221
  type: Input
180
222
  }], disabled: [{
@@ -194,5 +236,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
194
236
  args: ['class']
195
237
  }], close: [{
196
238
  type: Output
239
+ }], tabContentWrapper: [{
240
+ type: ViewChild,
241
+ args: ['tabContentWrapper']
197
242
  }] } });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy90YWJzL3RhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGFicy9zcmMvbGliL21vZHVsZXMvdGFicy90YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7OztBQU9uRCxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDO0FBQy9DLE1BQU0sY0FBYyxHQUFxQixNQUFNLENBQUM7QUFFaEQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBUWYsTUFBTSxPQUFPLGVBQWU7SUFDMUI7Ozs7T0FJRztJQUNILElBQ1csTUFBTSxDQUFDLEtBQTBCO1FBQzFDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLHVCQUFBLElBQUksZ0NBQVMsRUFBRTtZQUNwRCx1QkFBQSxJQUFJLDRCQUFZLEtBQUssTUFBQSxDQUFDO1lBQ3RCLHVCQUFBLElBQUkscUNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLHVCQUFBLElBQUksZ0NBQVMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sdUJBQUEsSUFBSSxxQ0FBYyxDQUFDO0lBQzVCLENBQUM7SUFTRDs7Ozs7OztPQU9HO0lBQ0gsSUFDVyxjQUFjLENBQUMsS0FBeUI7UUFDakQsdUJBQUEs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UTtzQkFEZCxXQUFXO3VCQUFDLE9BQU87Z0JBU2IsS0FBSztzQkFEWCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreVRhYkluZGV4IH0gZnJvbSAnLi90YWItaW5kZXgnO1xuaW1wb3J0IHsgU2t5VGFiTGF5b3V0VHlwZSB9IGZyb20gJy4vdGFiLWxheW91dC10eXBlJztcbmltcG9ydCB7IFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UgfSBmcm9tICcuL3RhYnNldC1wZXJtYWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUYWJzZXRTZXJ2aWNlIH0gZnJvbSAnLi90YWJzZXQuc2VydmljZSc7XG5cbmNvbnN0IExBWU9VVF9DTEFTU19QUkVGSVggPSAnc2t5LWxheW91dC1ob3N0LSc7XG5jb25zdCBMQVlPVVRfREVGQVVMVDogU2t5VGFiTGF5b3V0VHlwZSA9ICdub25lJztcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10YWInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFiLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0YWIgaXMgYWN0aXZlIHdoZW4gdGhlIHRhYnNldCBsb2Fkcy4gQWZ0ZXIgaW5pdGlhbGl6YXRpb24sIHRoZSBgYWN0aXZlYFxuICAgKiBwcm9wZXJ0eSBvbiB0aGUgdGFic2V0IGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZCB0byBzZXQgdGhlIGFjdGl2ZSB0YWIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICEhdmFsdWUgIT09IHRoaXMuI19hY3RpdmUpIHtcbiAgICAgIHRoaXMuI19hY3RpdmUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuI2FjdGl2ZUNoYW5nZS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuI19hY3RpdmU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZUNoYW5nZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jYWN0aXZlQ2hhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgdGFiLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHF1ZXJ5IHBhcmFtZXRlciB2YWx1ZSBmb3IgdGhlIHRhYi5cbiAgICogVGhpcyB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB0YWJzZXQncyBgcGVybWFsaW5rSWRgIHRvIGRpc3Rpbmd1aXNoXG4gICAqIHRoZSB0YWIncyB1bmlxdWUgc3RhdGUgaW4gdGhlIFVSTCBieSBnZW5lcmF0aW5nIGEgcXVlcnkgcGFyYW1ldGVyIHRoYXQgaXNcbiAgICogd3JpdHRlbiBhcyBgPzxxdWVyeVBhcmFtPi1hY3RpdmUtdGFiPTxzYW5pdGl6ZWQtdGFiLWhlYWRpbmdgLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgcXVlcnkgcGFyYW1ldGVyJ3MgdmFsdWUgaXMgcGFyc2VkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgdGFiJ3MgaGVhZGluZyB0ZXh0LlxuICAgKiBUaGlzIGlucHV0IG9ubHkgYXBwbGllcyB3aGVuIHRoZSB0YWJzZXQncyBgdGFiU3R5bGVgIGlzIGBcInRhYnNcImAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBlcm1hbGlua1ZhbHVlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfcGVybWFsaW5rVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLiNzZXRQZXJtYWxpbmtWYWx1ZU9yRGVmYXVsdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBwZXJtYWxpbmtWYWx1ZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfcGVybWFsaW5rVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgYSBjb3VudGVyIGJlc2lkZSB0aGUgdGFiIGhlYWRlci5cbiAgICogVGhpcyBpbnB1dCBvbmx5IGFwcGxpZXMgd2hlbiB0aGUgdGFic2V0J3MgYHRhYlN0eWxlYCBpcyBgXCJ0YWJzXCJgLlxuICAgKiBAZGVwcmVjYXRlZCBTS1kgVVggbm8gbG9uZ2VyIHJlY29tbWVuZHMgYWRkaW5nIGNvdW50cyB0byB0YWJzLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHRhYkhlYWRlckNvdW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWIgaGVhZGVyLlxuICAgKiBXaGVuIHVzaW5nIHRhYnMgYXMgdGhlIG1haW4gbmF2aWdhdGlvbiBvbiBhIHBhZ2UsXG4gICAqIHVzZSBbdGhlIEFuZ3VsYXIgYFRpdGxlYCBzZXJ2aWNlXShodHRwczovL2FuZ3VsYXIuaW8vZG9jcy90cy9sYXRlc3QvY29va2Jvb2svc2V0LWRvY3VtZW50LXRpdGxlLmh0bWwpXG4gICAqIGFuZCBbdGhlIFNLWSBVWCBgdGl0bGVgIGNvbmZpZ3VyYXRpb24gcHJvcGVydHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jYXBwKVxuICAgKiB0byByZWZsZWN0IHRoZSB0YWIgaGVhZGVyIGluIHRoZSBwYWdlIHRpdGxlLlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiSGVhZGluZyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3RhYkhlYWRpbmcgPSB2YWx1ZTtcblxuICAgIHRoaXMuI3NldFBlcm1hbGlua1ZhbHVlT3JEZWZhdWx0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYkhlYWRpbmcoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3RhYkhlYWRpbmc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdGFiLlxuICAgKiBJZiBub3QgZGVmaW5lZCwgdGhlIGlkZW50aWZpZXIgaXMgc2V0IHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGFiIG9uIGxvYWQsIHN0YXJ0aW5nIHdpdGggYDBgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB0YWJJbmRleCh2YWx1ZTogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy4jX3RhYkluZGV4ICYmXG4gICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLiNfdGFiSW5kZXggIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy4jdGFic2V0U2VydmljZS51cGRhdGVUYWJJbmRleCh0aGlzLiNfdGFiSW5kZXgsIHZhbHVlKTtcbiAgICAgIHRoaXMuI3RhYkluZGV4Q2hhbmdlLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuI190YWJJbmRleCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWJJbmRleCgpOiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI190YWJJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcGFnZSBsYXlvdXQgdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSB0b3AtbGV2ZWwgY29tcG9uZW50IHR5cGVcbiAgICogdXNlZCBvbiB0aGUgcGFnZS4gRm9yIGxheWluZyBvdXQgY3VzdG9tIGNvbnRlbnQsIHVzZSBgYXV0b2AgdG8gYWxsb3dcbiAgICogdGhlIHBhZ2UgY29udGVudHMgdG8gZXhwYW5kIGJleW9uZCB0aGUgYm90dG9tIG9mIHRoZSBicm93c2VyIHdpbmRvd1xuICAgKiBvciBgZml0YCB0byBjb25zdHJhaW4gdGhlIHBhZ2UgY29udGVudHMgdG8gdGhlIGF2YWlsYWJsZSB2aWV3cG9ydC5cbiAgICogQGRlZmF1bHQgXCJhdXRvXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGF5b3V0KHZhbHVlOiBTa3lUYWJMYXlvdXRUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbGF5b3V0ID0gdmFsdWUgfHwgTEFZT1VUX0RFRkFVTFQ7XG5cbiAgICB0aGlzLiNfbGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuY3NzQ2xhc3MgPSBgJHtMQVlPVVRfQ0xBU1NfUFJFRklYfSR7bGF5b3V0fWA7XG5cbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudXBkYXRlQWN0aXZlVGFiTGF5b3V0KGxheW91dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYXlvdXQoKTogU2t5VGFiTGF5b3V0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuI19sYXlvdXQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHVibGljIGNzc0NsYXNzID0gYCR7TEFZT1VUX0NMQVNTX1BSRUZJWH0ke0xBWU9VVF9ERUZBVUxUfWA7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY2xpY2sgdGhlIGJ1dHRvbiB0byBjbG9zZSB0aGUgdGFiLlxuICAgKiBUaGUgY2xvc2UgYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0YWIgd2hlbiB5b3Ugc3BlY2lmeSBhIGxpc3RlbmVyIGZvciB0aGlzIGV2ZW50LlxuICAgKiBUaGlzIGV2ZW50IG9ubHkgYXBwbGllcyB3aGVuIHRoZSB0YWJzZXQncyBgdGFiU3R5bGVgIGlzIGBcInRhYnNcImAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG5cbiAgLyoqXG4gICAqIEFsZXJ0cyB0aGUgdGFic2V0IGNvbXBvbmVudCB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBjaGFuZ2VzIHRoYXQgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIFVJLlxuICAgKi9cbiAgcHVibGljIGdldCBzdGF0ZUNoYW5nZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jc3RhdGVDaGFuZ2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYkluZGV4Q2hhbmdlKCk6IE9ic2VydmFibGU8U2t5VGFiSW5kZXggfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jdGFiSW5kZXhDaGFuZ2U7XG4gIH1cblxuICBwdWJsaWMgcGVybWFsaW5rVmFsdWVPckRlZmF1bHQgPSAnJztcblxuICBwdWJsaWMgc2hvd0NvbnRlbnQgPSBmYWxzZTtcblxuICBwdWJsaWMgdGFiQnV0dG9uSWQ6IHN0cmluZztcblxuICBwdWJsaWMgdGFiUGFuZWxJZDogc3RyaW5nO1xuXG4gICNfYWN0aXZlID0gZmFsc2U7XG5cbiAgI2FjdGl2ZUNoYW5nZTogQmVoYXZpb3JTdWJqZWN0PHZvaWQgfCB1bmRlZmluZWQ+O1xuXG4gICNfcGVybWFsaW5rVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjc3RhdGVDaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDx2b2lkPjtcblxuICAjX3RhYkhlYWRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAjX3RhYkluZGV4OiBTa3lUYWJJbmRleCB8IHVuZGVmaW5lZDtcblxuICAjX2xheW91dDogU2t5VGFiTGF5b3V0VHlwZSA9IExBWU9VVF9ERUZBVUxUO1xuXG4gICN0YWJJbmRleENoYW5nZTogQmVoYXZpb3JTdWJqZWN0PFNreVRhYkluZGV4IHwgdW5kZWZpbmVkPjtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjcGVybWFsaW5rU2VydmljZTogU2t5VGFic2V0UGVybWFsaW5rU2VydmljZTtcbiAgI3RhYnNldFNlcnZpY2U6IFNreVRhYnNldFNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHBlcm1hbGlua1NlcnZpY2U6IFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UsXG4gICAgdGFic2V0U2VydmljZTogU2t5VGFic2V0U2VydmljZVxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2UgPSBwZXJtYWxpbmtTZXJ2aWNlO1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UgPSB0YWJzZXRTZXJ2aWNlO1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGhpcy50YWJQYW5lbElkID0gYHNreS10YWItJHtpZH1gO1xuICAgIHRoaXMudGFiQnV0dG9uSWQgPSBgJHt0aGlzLnRhYlBhbmVsSWR9LW5hdi1idG5gO1xuXG4gICAgdGhpcy4jYWN0aXZlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHRoaXMuI3N0YXRlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICAgIHRoaXMuI3RhYkluZGV4Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTa3lUYWJJbmRleCB8IHVuZGVmaW5lZD4oXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgdGhpcy4jc2V0UGVybWFsaW5rVmFsdWVPckRlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgKGNoYW5nZXNbJ2Rpc2FibGVkJ10gJiYgIWNoYW5nZXNbJ2Rpc2FibGVkJ10uZmlyc3RDaGFuZ2UpIHx8XG4gICAgICAoY2hhbmdlc1sndGFiSGVhZGluZyddICYmICFjaGFuZ2VzWyd0YWJIZWFkaW5nJ10uZmlyc3RDaGFuZ2UpIHx8XG4gICAgICAoY2hhbmdlc1sndGFiSGVhZGVyQ291bnQnXSAmJiAhY2hhbmdlc1sndGFiSGVhZGVyQ291bnQnXS5maXJzdENoYW5nZSkgfHxcbiAgICAgIChjaGFuZ2VzWydwZXJtYWxpbmtWYWx1ZSddICYmICFjaGFuZ2VzWydwZXJtYWxpbmtWYWx1ZSddLmZpcnN0Q2hhbmdlKVxuICAgICkge1xuICAgICAgdGhpcy4jc3RhdGVDaGFuZ2UubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmVDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLiNzdGF0ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3RhYkluZGV4Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgaWYgKHRoaXMudGFiSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jdGFic2V0U2VydmljZS51bnJlZ2lzdGVyVGFiKHRoaXMudGFiSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI190YWJJbmRleCA9IHRoaXMuI3RhYnNldFNlcnZpY2UucmVnaXN0ZXJUYWIodGhpcy50YWJJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgdGhpcy4jX2FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5zaG93Q29udGVudCA9IHRydWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZGVhY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNfYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5zaG93Q29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGlzQ2xvc2VhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgI3NldFBlcm1hbGlua1ZhbHVlT3JEZWZhdWx0KCk6IHZvaWQge1xuICAgIHRoaXMucGVybWFsaW5rVmFsdWVPckRlZmF1bHQgPVxuICAgICAgdGhpcy4jcGVybWFsaW5rU2VydmljZS51cmxpZnkodGhpcy5wZXJtYWxpbmtWYWx1ZSkgfHxcbiAgICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2UudXJsaWZ5KHRoaXMudGFiSGVhZGluZyk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktdGFiXCJcbiAgcm9sZT1cInRhYnBhbmVsXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRhYkJ1dHRvbklkXCJcbiAgW2hpZGRlbl09XCIhc2hvd0NvbnRlbnRcIlxuICBbaWRdPVwidGFiUGFuZWxJZFwiXG4+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy90YWJzL3NyYy9saWIvbW9kdWxlcy90YWJzL3RhYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvdGFicy9zcmMvbGliL21vZHVsZXMvdGFicy90YWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGtDQUFrQyxHQUNuQyxNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBT25ELE1BQU0sbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7QUFDL0MsTUFBTSxjQUFjLEdBQXFCLE1BQU0sQ0FBQztBQUVoRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFlZixNQUFNLE9BQU8sZUFBZTtJQUMxQjs7OztPQUlHO0lBQ0gsSUFDVyxNQUFNLENBQUMsS0FBMEI7UUFDMUMsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssdUJBQUEsSUFBSSxnQ0FBUyxFQUFFO1lBQ3BELHVCQUFBLElBQUksNEJBQVksS0FBSyxNQUFBLENBQUM7WUFDdEIsdUJBQUEsSUFBSSxxQ0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNmLE9BQU8sdUJBQUEsSUFBSSxnQ0FBUyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyx1QkFBQSxJQUFJ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LHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Qsa0NBQWtDO3dCQUNsQzs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLEVBQUUsa0NBQWtDO3lCQUNoRDtxQkFDRjsrS0FTVSxNQUFNO3NCQURoQixLQUFLO2dCQXFCQyxRQUFRO3NCQURkLEtBQUs7Z0JBWUssY0FBYztzQkFEeEIsS0FBSztnQkFnQkMsY0FBYztzQkFEcEIsS0FBSztnQkFZSyxVQUFVO3NCQURwQixLQUFLO2dCQWdCSyxRQUFRO3NCQURsQixLQUFLO2dCQTBCSyxNQUFNO3NCQURoQixLQUFLO2dCQW1CQyxRQUFRO3NCQURkLFdBQVc7dUJBQUMsT0FBTztnQkFTYixLQUFLO3NCQURYLE1BQU07Z0JBZUksaUJBQWlCO3NCQUQzQixTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5TWVkaWFRdWVyeVNlcnZpY2UsXG4gIFNreVJlc2l6ZU9ic2VydmVyTWVkaWFRdWVyeVNlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreVRhYkluZGV4IH0gZnJvbSAnLi90YWItaW5kZXgnO1xuaW1wb3J0IHsgU2t5VGFiTGF5b3V0VHlwZSB9IGZyb20gJy4vdGFiLWxheW91dC10eXBlJztcbmltcG9ydCB7IFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UgfSBmcm9tICcuL3RhYnNldC1wZXJtYWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lUYWJzZXRTZXJ2aWNlIH0gZnJvbSAnLi90YWJzZXQuc2VydmljZSc7XG5cbmNvbnN0IExBWU9VVF9DTEFTU19QUkVGSVggPSAnc2t5LWxheW91dC1ob3N0LSc7XG5jb25zdCBMQVlPVVRfREVGQVVMVDogU2t5VGFiTGF5b3V0VHlwZSA9ICdub25lJztcblxubGV0IG5leHRJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10YWInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFiLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICBTa3lSZXNpemVPYnNlcnZlck1lZGlhUXVlcnlTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNreU1lZGlhUXVlcnlTZXJ2aWNlLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNreVJlc2l6ZU9ic2VydmVyTWVkaWFRdWVyeVNlcnZpY2UsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGFiQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFiIGlzIGFjdGl2ZSB3aGVuIHRoZSB0YWJzZXQgbG9hZHMuIEFmdGVyIGluaXRpYWxpemF0aW9uLCB0aGUgYGFjdGl2ZWBcbiAgICogcHJvcGVydHkgb24gdGhlIHRhYnNldCBjb21wb25lbnQgc2hvdWxkIGJlIHVzZWQgdG8gc2V0IHRoZSBhY3RpdmUgdGFiLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhY3RpdmUodmFsdWU6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhIXZhbHVlICE9PSB0aGlzLiNfYWN0aXZlKSB7XG4gICAgICB0aGlzLiNfYWN0aXZlID0gdmFsdWU7XG4gICAgICB0aGlzLiNhY3RpdmVDaGFuZ2UubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNfYWN0aXZlO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmVDaGFuZ2UoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuI2FjdGl2ZUNoYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgdGhlIHRhYi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBxdWVyeSBwYXJhbWV0ZXIgdmFsdWUgZm9yIHRoZSB0YWIuXG4gICAqIFRoaXMgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgdGFic2V0J3MgYHBlcm1hbGlua0lkYCB0byBkaXN0aW5ndWlzaFxuICAgKiB0aGUgdGFiJ3MgdW5pcXVlIHN0YXRlIGluIHRoZSBVUkwgYnkgZ2VuZXJhdGluZyBhIHF1ZXJ5IHBhcmFtZXRlciB0aGF0IGlzXG4gICAqIHdyaXR0ZW4gYXMgYD88cXVlcnlQYXJhbT4tYWN0aXZlLXRhYj08c2FuaXRpemVkLXRhYi1oZWFkaW5nYC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIHF1ZXJ5IHBhcmFtZXRlcidzIHZhbHVlIGlzIHBhcnNlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIHRhYidzIGhlYWRpbmcgdGV4dC5cbiAgICogVGhpcyBpbnB1dCBvbmx5IGFwcGxpZXMgd2hlbiB0aGUgdGFic2V0J3MgYHRhYlN0eWxlYCBpcyBgXCJ0YWJzXCJgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwZXJtYWxpbmtWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy4jX3Blcm1hbGlua1ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy4jc2V0UGVybWFsaW5rVmFsdWVPckRlZmF1bHQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGVybWFsaW5rVmFsdWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX3Blcm1hbGlua1ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGEgY291bnRlciBiZXNpZGUgdGhlIHRhYiBoZWFkZXIuXG4gICAqIFRoaXMgaW5wdXQgb25seSBhcHBsaWVzIHdoZW4gdGhlIHRhYnNldCdzIGB0YWJTdHlsZWAgaXMgYFwidGFic1wiYC5cbiAgICogQGRlcHJlY2F0ZWQgU0tZIFVYIG5vIGxvbmdlciByZWNvbW1lbmRzIGFkZGluZyBjb3VudHMgdG8gdGFicy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YWJIZWFkZXJDb3VudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFiIGhlYWRlci5cbiAgICogV2hlbiB1c2luZyB0YWJzIGFzIHRoZSBtYWluIG5hdmlnYXRpb24gb24gYSBwYWdlLFxuICAgKiB1c2UgW3RoZSBBbmd1bGFyIGBUaXRsZWAgc2VydmljZV0oaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MvdHMvbGF0ZXN0L2Nvb2tib29rL3NldC1kb2N1bWVudC10aXRsZS5odG1sKVxuICAgKiBhbmQgW3RoZSBTS1kgVVggYHRpdGxlYCBjb25maWd1cmF0aW9uIHByb3BlcnR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2FwcClcbiAgICogdG8gcmVmbGVjdCB0aGUgdGFiIGhlYWRlciBpbiB0aGUgcGFnZSB0aXRsZS5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHRhYkhlYWRpbmcodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI190YWJIZWFkaW5nID0gdmFsdWU7XG5cbiAgICB0aGlzLiNzZXRQZXJtYWxpbmtWYWx1ZU9yRGVmYXVsdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCB0YWJIZWFkaW5nKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI190YWJIZWFkaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRhYi5cbiAgICogSWYgbm90IGRlZmluZWQsIHRoZSBpZGVudGlmaWVyIGlzIHNldCB0byB0aGUgcG9zaXRpb24gb2YgdGhlIHRhYiBvbiBsb2FkLCBzdGFydGluZyB3aXRoIGAwYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiSW5kZXgodmFsdWU6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgIT09IHRoaXMuI190YWJJbmRleCAmJlxuICAgICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy4jX3RhYkluZGV4ICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudXBkYXRlVGFiSW5kZXgodGhpcy4jX3RhYkluZGV4LCB2YWx1ZSk7XG4gICAgICB0aGlzLiN0YWJJbmRleENoYW5nZS5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLiNfdGFiSW5kZXggPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGFiSW5kZXgoKTogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfdGFiSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhYiBsYXlvdXQgdGhhdCBhcHBsaWVzIHNwYWNpbmcgdG8gdGhlIHRhYiBjb250YWluZXIgZWxlbWVudC4gVXNlIHRoZSBsYXlvdXRcbiAgICogdGhhdCBjb3JyZXNwb25kcyB3aXRoIHRoZSB0b3AtbGV2ZWwgY29tcG9uZW50IHR5cGUgdXNlZCB3aXRoaW4gdGhlIHRhYiwgb3IgdXNlIGBmaXRgIHRvXG4gICAqIGNvbnN0cmFpbiB0aGUgdGFiIGNvbnRlbnRzIHRvIHRoZSBhdmFpbGFibGUgdmlld3BvcnQuXG4gICAqIFVzZSBgbm9uZWAgZm9yIGN1c3RvbSBjb250ZW50IHRoYXQgZG9lcyBub3QgYWRoZXJlIHRvIHByZWRlZmluZWQgc3BhY2luZyBvciBjb25zdHJhaW50cy5cbiAgICogQGRlZmF1bHQgXCJub25lXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbGF5b3V0KHZhbHVlOiBTa3lUYWJMYXlvdXRUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbGF5b3V0ID0gdmFsdWUgfHwgTEFZT1VUX0RFRkFVTFQ7XG5cbiAgICB0aGlzLiNfbGF5b3V0ID0gbGF5b3V0O1xuICAgIHRoaXMuY3NzQ2xhc3MgPSBgJHtMQVlPVVRfQ0xBU1NfUFJFRklYfSR7bGF5b3V0fWA7XG5cbiAgICB0aGlzLiNvYnNlcnZlVGFiUmVzaXplKCk7XG5cbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgIHRoaXMuI3RhYnNldFNlcnZpY2UudXBkYXRlQWN0aXZlVGFiTGF5b3V0KGxheW91dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBsYXlvdXQoKTogU2t5VGFiTGF5b3V0VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuI19sYXlvdXQ7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHVibGljIGNzc0NsYXNzID0gYCR7TEFZT1VUX0NMQVNTX1BSRUZJWH0ke0xBWU9VVF9ERUZBVUxUfWA7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY2xpY2sgdGhlIGJ1dHRvbiB0byBjbG9zZSB0aGUgdGFiLlxuICAgKiBUaGUgY2xvc2UgYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0YWIgd2hlbiB5b3Ugc3BlY2lmeSBhIGxpc3RlbmVyIGZvciB0aGlzIGV2ZW50LlxuICAgKiBUaGlzIGV2ZW50IG9ubHkgYXBwbGllcyB3aGVuIHRoZSB0YWJzZXQncyBgdGFiU3R5bGVgIGlzIGBcInRhYnNcImAuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG5cbiAgLyoqXG4gICAqIEFsZXJ0cyB0aGUgdGFic2V0IGNvbXBvbmVudCB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBjaGFuZ2VzIHRoYXQgbmVlZCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIFVJLlxuICAgKi9cbiAgcHVibGljIGdldCBzdGF0ZUNoYW5nZSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jc3RhdGVDaGFuZ2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYkluZGV4Q2hhbmdlKCk6IE9ic2VydmFibGU8U2t5VGFiSW5kZXggfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jdGFiSW5kZXhDaGFuZ2U7XG4gIH1cblxuICBAVmlld0NoaWxkKCd0YWJDb250ZW50V3JhcHBlcicpXG4gIHB1YmxpYyBzZXQgdGFiQ29udGVudFdyYXBwZXIodGFiQ29udGVudFdyYXBwZXI6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfdGFiRWxlbWVudCA9IHRhYkNvbnRlbnRXcmFwcGVyO1xuICAgIHRoaXMuI29ic2VydmVUYWJSZXNpemUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGFiQ29udGVudFdyYXBwZXIoKTogRWxlbWVudFJlZiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI190YWJFbGVtZW50O1xuICB9XG5cbiAgcHVibGljIHBlcm1hbGlua1ZhbHVlT3JEZWZhdWx0ID0gJyc7XG5cbiAgcHVibGljIHNob3dDb250ZW50ID0gZmFsc2U7XG5cbiAgcHVibGljIHRhYkJ1dHRvbklkOiBzdHJpbmc7XG5cbiAgcHVibGljIHRhYlBhbmVsSWQ6IHN0cmluZztcblxuICAjX2FjdGl2ZSA9IGZhbHNlO1xuXG4gICNhY3RpdmVDaGFuZ2U6IEJlaGF2aW9yU3ViamVjdDx2b2lkIHwgdW5kZWZpbmVkPjtcblxuICAjX3Blcm1hbGlua1ZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI3N0YXRlQ2hhbmdlOiBCZWhhdmlvclN1YmplY3Q8dm9pZD47XG5cbiAgI190YWJIZWFkaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgI190YWJJbmRleDogU2t5VGFiSW5kZXggfCB1bmRlZmluZWQ7XG5cbiAgI19sYXlvdXQ6IFNreVRhYkxheW91dFR5cGUgPSBMQVlPVVRfREVGQVVMVDtcblxuICAjX3RhYkVsZW1lbnQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG5cbiAgI3RhYkluZGV4Q2hhbmdlOiBCZWhhdmlvclN1YmplY3Q8U2t5VGFiSW5kZXggfCB1bmRlZmluZWQ+O1xuXG4gICNvYnNlcnZpbmdUYWIgPSBmYWxzZTtcblxuICAjY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmO1xuICAjcGVybWFsaW5rU2VydmljZTogU2t5VGFic2V0UGVybWFsaW5rU2VydmljZTtcbiAgI3RhYnNldFNlcnZpY2U6IFNreVRhYnNldFNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHBlcm1hbGlua1NlcnZpY2U6IFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UsXG4gICAgdGFic2V0U2VydmljZTogU2t5VGFic2V0U2VydmljZVxuICApIHtcbiAgICB0aGlzLiNjaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2UgPSBwZXJtYWxpbmtTZXJ2aWNlO1xuICAgIHRoaXMuI3RhYnNldFNlcnZpY2UgPSB0YWJzZXRTZXJ2aWNlO1xuICAgIGNvbnN0IGlkID0gbmV4dElkKys7XG4gICAgdGhpcy50YWJQYW5lbElkID0gYHNreS10YWItJHtpZH1gO1xuICAgIHRoaXMudGFiQnV0dG9uSWQgPSBgJHt0aGlzLnRhYlBhbmVsSWR9LW5hdi1idG5gO1xuXG4gICAgdGhpcy4jYWN0aXZlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHRoaXMuI3N0YXRlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuICAgIHRoaXMuI3RhYkluZGV4Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTa3lUYWJJbmRleCB8IHVuZGVmaW5lZD4oXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuXG4gICAgdGhpcy4jc2V0UGVybWFsaW5rVmFsdWVPckRlZmF1bHQoKTtcbiAgfVxuXG4gICNtZWRpYVF1ZXJ5U2VydmljZSA9IGluamVjdChTa3lSZXNpemVPYnNlcnZlck1lZGlhUXVlcnlTZXJ2aWNlKTtcblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIChjaGFuZ2VzWydkaXNhYmxlZCddICYmICFjaGFuZ2VzWydkaXNhYmxlZCddLmZpcnN0Q2hhbmdlKSB8fFxuICAgICAgKGNoYW5nZXNbJ3RhYkhlYWRpbmcnXSAmJiAhY2hhbmdlc1sndGFiSGVhZGluZyddLmZpcnN0Q2hhbmdlKSB8fFxuICAgICAgKGNoYW5nZXNbJ3RhYkhlYWRlckNvdW50J10gJiYgIWNoYW5nZXNbJ3RhYkhlYWRlckNvdW50J10uZmlyc3RDaGFuZ2UpIHx8XG4gICAgICAoY2hhbmdlc1sncGVybWFsaW5rVmFsdWUnXSAmJiAhY2hhbmdlc1sncGVybWFsaW5rVmFsdWUnXS5maXJzdENoYW5nZSlcbiAgICApIHtcbiAgICAgIHRoaXMuI3N0YXRlQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snbGF5b3V0J10gJiYgY2hhbmdlc1snbGF5b3V0J10uY3VycmVudFZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgIHRoaXMuI21lZGlhUXVlcnlTZXJ2aWNlLnVub2JzZXJ2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNhY3RpdmVDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLiNzdGF0ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI3RhYkluZGV4Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgaWYgKHRoaXMudGFiSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jdGFic2V0U2VydmljZS51bnJlZ2lzdGVyVGFiKHRoaXMudGFiSW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLiNtZWRpYVF1ZXJ5U2VydmljZS51bm9ic2VydmUoKTtcbiAgICB0aGlzLiNvYnNlcnZpbmdUYWIgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0KCk6IHZvaWQge1xuICAgIHRoaXMuI190YWJJbmRleCA9IHRoaXMuI3RhYnNldFNlcnZpY2UucmVnaXN0ZXJUYWIodGhpcy50YWJJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgdGhpcy4jX2FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5zaG93Q29udGVudCA9IHRydWU7XG4gICAgdGhpcy4jY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZGVhY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLiNfYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5zaG93Q29udGVudCA9IGZhbHNlO1xuICAgIHRoaXMuI2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGlzQ2xvc2VhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlLm9ic2VydmVycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgI3NldFBlcm1hbGlua1ZhbHVlT3JEZWZhdWx0KCk6IHZvaWQge1xuICAgIHRoaXMucGVybWFsaW5rVmFsdWVPckRlZmF1bHQgPVxuICAgICAgdGhpcy4jcGVybWFsaW5rU2VydmljZS51cmxpZnkodGhpcy5wZXJtYWxpbmtWYWx1ZSkgfHxcbiAgICAgIHRoaXMuI3Blcm1hbGlua1NlcnZpY2UudXJsaWZ5KHRoaXMudGFiSGVhZGluZyk7XG4gIH1cblxuICAjb2JzZXJ2ZVRhYlJlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJDb250ZW50V3JhcHBlcikge1xuICAgICAgaWYgKHRoaXMubGF5b3V0ICE9PSAnbm9uZScgJiYgIXRoaXMuI29ic2VydmluZ1RhYikge1xuICAgICAgICB0aGlzLiNvYnNlcnZpbmdUYWIgPSB0cnVlO1xuICAgICAgICB0aGlzLiNtZWRpYVF1ZXJ5U2VydmljZS5vYnNlcnZlKHRoaXMudGFiQ29udGVudFdyYXBwZXIsIHtcbiAgICAgICAgICB1cGRhdGVSZXNwb25zaXZlQ2xhc3NlczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubGF5b3V0ID09PSAnbm9uZScgJiYgdGhpcy4jb2JzZXJ2aW5nVGFiKSB7XG4gICAgICAgIHRoaXMuI29ic2VydmluZ1RhYiA9IGZhbHNlO1xuICAgICAgICB0aGlzLiNtZWRpYVF1ZXJ5U2VydmljZS51bm9ic2VydmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktdGFiXCJcbiAgcm9sZT1cInRhYnBhbmVsXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRhYkJ1dHRvbklkXCJcbiAgW2hpZGRlbl09XCIhc2hvd0NvbnRlbnRcIlxuICBbaWRdPVwidGFiUGFuZWxJZFwiXG4gICN0YWJDb250ZW50V3JhcHBlclxuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
@@ -1,12 +1,12 @@
1
1
  import * as i4 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { NgModule, Injectable, Component, ChangeDetectionStrategy, Optional, Input, ViewChild, HostListener, ContentChildren, EventEmitter, Output, ViewEncapsulation, HostBinding, Pipe, inject } from '@angular/core';
4
+ import { NgModule, Injectable, Component, ChangeDetectionStrategy, Optional, Input, ViewChild, HostListener, ContentChildren, EventEmitter, Output, ViewEncapsulation, inject, HostBinding, Pipe } from '@angular/core';
5
5
  import { SkyCheckboxModule } from '@skyux/forms';
6
6
  import * as i7 from '@skyux/theme';
7
7
  import { SkyThemeModule } from '@skyux/theme';
8
8
  import * as i1 from '@skyux/core';
9
- import { SkyMediaBreakpoints, SkyMediaQueryService, SkyIdModule, SkyLayoutHostService } from '@skyux/core';
9
+ import { SkyMediaBreakpoints, SkyMediaQueryService, SkyIdModule, SkyResizeObserverMediaQueryService, SkyLayoutHostService } from '@skyux/core';
10
10
  import * as i6 from '@skyux/indicators';
11
11
  import { SkyIconModule, SkyExpansionIndicatorModule, SkyStatusIndicatorModule } from '@skyux/indicators';
12
12
  import * as i3 from '@skyux/i18n';
@@ -1674,7 +1674,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1674
1674
  type: Injectable
1675
1675
  }], ctorParameters: function () { return [{ type: i1$1.ActivatedRoute }, { type: i4.Location }, { type: i1$1.Router }]; } });
1676
1676
 
1677
- var _SkyTabComponent_instances, _SkyTabComponent__active, _SkyTabComponent_activeChange, _SkyTabComponent__permalinkValue, _SkyTabComponent_stateChange, _SkyTabComponent__tabHeading, _SkyTabComponent__tabIndex, _SkyTabComponent__layout, _SkyTabComponent_tabIndexChange, _SkyTabComponent_changeDetector, _SkyTabComponent_permalinkService, _SkyTabComponent_tabsetService, _SkyTabComponent_setPermalinkValueOrDefault;
1677
+ var _SkyTabComponent_instances, _SkyTabComponent__active, _SkyTabComponent_activeChange, _SkyTabComponent__permalinkValue, _SkyTabComponent_stateChange, _SkyTabComponent__tabHeading, _SkyTabComponent__tabIndex, _SkyTabComponent__layout, _SkyTabComponent__tabElement, _SkyTabComponent_tabIndexChange, _SkyTabComponent_observingTab, _SkyTabComponent_changeDetector, _SkyTabComponent_permalinkService, _SkyTabComponent_tabsetService, _SkyTabComponent_mediaQueryService, _SkyTabComponent_setPermalinkValueOrDefault, _SkyTabComponent_observeTabResize;
1678
1678
  const LAYOUT_CLASS_PREFIX = 'sky-layout-host-';
1679
1679
  const LAYOUT_DEFAULT = 'none';
1680
1680
  let nextId = 0;
@@ -1743,16 +1743,17 @@ class SkyTabComponent {
1743
1743
  return __classPrivateFieldGet(this, _SkyTabComponent__tabIndex, "f");
1744
1744
  }
1745
1745
  /**
1746
- * The page layout that corresponds with the top-level component type
1747
- * used on the page. For laying out custom content, use `auto` to allow
1748
- * the page contents to expand beyond the bottom of the browser window
1749
- * or `fit` to constrain the page contents to the available viewport.
1750
- * @default "auto"
1746
+ * The tab layout that applies spacing to the tab container element. Use the layout
1747
+ * that corresponds with the top-level component type used within the tab, or use `fit` to
1748
+ * constrain the tab contents to the available viewport.
1749
+ * Use `none` for custom content that does not adhere to predefined spacing or constraints.
1750
+ * @default "none"
1751
1751
  */
1752
1752
  set layout(value) {
1753
1753
  const layout = value || LAYOUT_DEFAULT;
1754
1754
  __classPrivateFieldSet(this, _SkyTabComponent__layout, layout, "f");
1755
1755
  this.cssClass = `${LAYOUT_CLASS_PREFIX}${layout}`;
1756
+ __classPrivateFieldGet(this, _SkyTabComponent_instances, "m", _SkyTabComponent_observeTabResize).call(this);
1756
1757
  if (this.active) {
1757
1758
  __classPrivateFieldGet(this, _SkyTabComponent_tabsetService, "f").updateActiveTabLayout(layout);
1758
1759
  }
@@ -1769,6 +1770,13 @@ class SkyTabComponent {
1769
1770
  get tabIndexChange() {
1770
1771
  return __classPrivateFieldGet(this, _SkyTabComponent_tabIndexChange, "f");
1771
1772
  }
1773
+ set tabContentWrapper(tabContentWrapper) {
1774
+ __classPrivateFieldSet(this, _SkyTabComponent__tabElement, tabContentWrapper, "f");
1775
+ __classPrivateFieldGet(this, _SkyTabComponent_instances, "m", _SkyTabComponent_observeTabResize).call(this);
1776
+ }
1777
+ get tabContentWrapper() {
1778
+ return __classPrivateFieldGet(this, _SkyTabComponent__tabElement, "f");
1779
+ }
1772
1780
  constructor(changeDetector, permalinkService, tabsetService) {
1773
1781
  _SkyTabComponent_instances.add(this);
1774
1782
  this.cssClass = `${LAYOUT_CLASS_PREFIX}${LAYOUT_DEFAULT}`;
@@ -1787,10 +1795,13 @@ class SkyTabComponent {
1787
1795
  _SkyTabComponent__tabHeading.set(this, void 0);
1788
1796
  _SkyTabComponent__tabIndex.set(this, void 0);
1789
1797
  _SkyTabComponent__layout.set(this, LAYOUT_DEFAULT);
1798
+ _SkyTabComponent__tabElement.set(this, void 0);
1790
1799
  _SkyTabComponent_tabIndexChange.set(this, void 0);
1800
+ _SkyTabComponent_observingTab.set(this, false);
1791
1801
  _SkyTabComponent_changeDetector.set(this, void 0);
1792
1802
  _SkyTabComponent_permalinkService.set(this, void 0);
1793
1803
  _SkyTabComponent_tabsetService.set(this, void 0);
1804
+ _SkyTabComponent_mediaQueryService.set(this, inject(SkyResizeObserverMediaQueryService));
1794
1805
  __classPrivateFieldSet(this, _SkyTabComponent_changeDetector, changeDetector, "f");
1795
1806
  __classPrivateFieldSet(this, _SkyTabComponent_permalinkService, permalinkService, "f");
1796
1807
  __classPrivateFieldSet(this, _SkyTabComponent_tabsetService, tabsetService, "f");
@@ -1809,6 +1820,9 @@ class SkyTabComponent {
1809
1820
  (changes['permalinkValue'] && !changes['permalinkValue'].firstChange)) {
1810
1821
  __classPrivateFieldGet(this, _SkyTabComponent_stateChange, "f").next();
1811
1822
  }
1823
+ if (changes['layout'] && changes['layout'].currentValue === 'none') {
1824
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").unobserve();
1825
+ }
1812
1826
  }
1813
1827
  ngOnDestroy() {
1814
1828
  __classPrivateFieldGet(this, _SkyTabComponent_activeChange, "f").complete();
@@ -1817,6 +1831,8 @@ class SkyTabComponent {
1817
1831
  if (this.tabIndex !== undefined) {
1818
1832
  __classPrivateFieldGet(this, _SkyTabComponent_tabsetService, "f").unregisterTab(this.tabIndex);
1819
1833
  }
1834
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").unobserve();
1835
+ __classPrivateFieldSet(this, _SkyTabComponent_observingTab, false, "f");
1820
1836
  }
1821
1837
  init() {
1822
1838
  __classPrivateFieldSet(this, _SkyTabComponent__tabIndex, __classPrivateFieldGet(this, _SkyTabComponent_tabsetService, "f").registerTab(this.tabIndex), "f");
@@ -1835,16 +1851,41 @@ class SkyTabComponent {
1835
1851
  return this.close.observers.length > 0;
1836
1852
  }
1837
1853
  }
1838
- _SkyTabComponent__active = new WeakMap(), _SkyTabComponent_activeChange = new WeakMap(), _SkyTabComponent__permalinkValue = new WeakMap(), _SkyTabComponent_stateChange = new WeakMap(), _SkyTabComponent__tabHeading = new WeakMap(), _SkyTabComponent__tabIndex = new WeakMap(), _SkyTabComponent__layout = new WeakMap(), _SkyTabComponent_tabIndexChange = new WeakMap(), _SkyTabComponent_changeDetector = new WeakMap(), _SkyTabComponent_permalinkService = new WeakMap(), _SkyTabComponent_tabsetService = new WeakMap(), _SkyTabComponent_instances = new WeakSet(), _SkyTabComponent_setPermalinkValueOrDefault = function _SkyTabComponent_setPermalinkValueOrDefault() {
1854
+ _SkyTabComponent__active = new WeakMap(), _SkyTabComponent_activeChange = new WeakMap(), _SkyTabComponent__permalinkValue = new WeakMap(), _SkyTabComponent_stateChange = new WeakMap(), _SkyTabComponent__tabHeading = new WeakMap(), _SkyTabComponent__tabIndex = new WeakMap(), _SkyTabComponent__layout = new WeakMap(), _SkyTabComponent__tabElement = new WeakMap(), _SkyTabComponent_tabIndexChange = new WeakMap(), _SkyTabComponent_observingTab = new WeakMap(), _SkyTabComponent_changeDetector = new WeakMap(), _SkyTabComponent_permalinkService = new WeakMap(), _SkyTabComponent_tabsetService = new WeakMap(), _SkyTabComponent_mediaQueryService = new WeakMap(), _SkyTabComponent_instances = new WeakSet(), _SkyTabComponent_setPermalinkValueOrDefault = function _SkyTabComponent_setPermalinkValueOrDefault() {
1839
1855
  this.permalinkValueOrDefault =
1840
1856
  __classPrivateFieldGet(this, _SkyTabComponent_permalinkService, "f").urlify(this.permalinkValue) ||
1841
1857
  __classPrivateFieldGet(this, _SkyTabComponent_permalinkService, "f").urlify(this.tabHeading);
1858
+ }, _SkyTabComponent_observeTabResize = function _SkyTabComponent_observeTabResize() {
1859
+ if (this.tabContentWrapper) {
1860
+ if (this.layout !== 'none' && !__classPrivateFieldGet(this, _SkyTabComponent_observingTab, "f")) {
1861
+ __classPrivateFieldSet(this, _SkyTabComponent_observingTab, true, "f");
1862
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").observe(this.tabContentWrapper, {
1863
+ updateResponsiveClasses: true,
1864
+ });
1865
+ }
1866
+ else if (this.layout === 'none' && __classPrivateFieldGet(this, _SkyTabComponent_observingTab, "f")) {
1867
+ __classPrivateFieldSet(this, _SkyTabComponent_observingTab, false, "f");
1868
+ __classPrivateFieldGet(this, _SkyTabComponent_mediaQueryService, "f").unobserve();
1869
+ }
1870
+ }
1842
1871
  };
1843
1872
  SkyTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: SkyTabsetPermalinkService }, { token: SkyTabsetService }], target: i0.ɵɵFactoryTarget.Component });
1844
- SkyTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyTabComponent, selector: "sky-tab", inputs: { active: "active", disabled: "disabled", permalinkValue: "permalinkValue", tabHeaderCount: "tabHeaderCount", tabHeading: "tabHeading", tabIndex: "tabIndex", layout: "layout" }, outputs: { close: "close" }, host: { properties: { "class": "this.cssClass" } }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1873
+ SkyTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyTabComponent, selector: "sky-tab", inputs: { active: "active", disabled: "disabled", permalinkValue: "permalinkValue", tabHeaderCount: "tabHeaderCount", tabHeading: "tabHeading", tabIndex: "tabIndex", layout: "layout" }, outputs: { close: "close" }, host: { properties: { "class": "this.cssClass" } }, providers: [
1874
+ SkyResizeObserverMediaQueryService,
1875
+ {
1876
+ provide: SkyMediaQueryService,
1877
+ useExisting: SkyResizeObserverMediaQueryService,
1878
+ },
1879
+ ], viewQueries: [{ propertyName: "tabContentWrapper", first: true, predicate: ["tabContentWrapper"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n #tabContentWrapper\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1845
1880
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabComponent, decorators: [{
1846
1881
  type: Component,
1847
- args: [{ selector: 'sky-tab', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"] }]
1882
+ args: [{ selector: 'sky-tab', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
1883
+ SkyResizeObserverMediaQueryService,
1884
+ {
1885
+ provide: SkyMediaQueryService,
1886
+ useExisting: SkyResizeObserverMediaQueryService,
1887
+ },
1888
+ ], template: "<div\n class=\"sky-tab\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tabButtonId\"\n [hidden]=\"!showContent\"\n [id]=\"tabPanelId\"\n #tabContentWrapper\n>\n <ng-content></ng-content>\n</div>\n", styles: [":host.sky-layout-host-fit{display:flex;flex-grow:1;position:static}:host.sky-layout-host-fit .sky-tab{flex-grow:1;position:relative}.sky-tab{flex-grow:var(--sky-layout-host-content-flex-grow, 0);overflow:var(--sky-layout-host-content-overflow, visible);padding:var(--sky-layout-host-content-spacing, 0);position:var(--sky-layout-host-content-position, static)}\n"] }]
1848
1889
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: SkyTabsetPermalinkService }, { type: SkyTabsetService }]; }, propDecorators: { active: [{
1849
1890
  type: Input
1850
1891
  }], disabled: [{
@@ -1864,6 +1905,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1864
1905
  args: ['class']
1865
1906
  }], close: [{
1866
1907
  type: Output
1908
+ }], tabContentWrapper: [{
1909
+ type: ViewChild,
1910
+ args: ['tabContentWrapper']
1867
1911
  }] } });
1868
1912
 
1869
1913
  class SkyTabsetNavButtonDisabledPipe {