@ethlete/cdk 4.2.1 → 4.2.2
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @ethlete/cdk
|
|
2
2
|
|
|
3
|
+
## 4.2.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`748a7815`](https://github.com/ethlete-io/ethdk/commit/748a781501ec9a3ab01edf05895f47a3e31da27a) Thanks [@TomTomB](https://github.com/TomTomB)! - Remove old grid styling from scrollable
|
|
8
|
+
|
|
9
|
+
- [`7c9ac832`](https://github.com/ethlete-io/ethdk/commit/7c9ac8320faf63447c69928160c9eda0354e39d0) Thanks [@TomTomB](https://github.com/TomTomB)! - Use scrollable element as root for internal intersection observer
|
|
10
|
+
|
|
3
11
|
## 4.2.1
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -132,9 +132,9 @@ export class ScrollableComponent {
|
|
|
132
132
|
this.activeElementList = signal(null);
|
|
133
133
|
this.elementList = signal(null);
|
|
134
134
|
this.containerScrollState = signalElementScrollState(this.scrollable);
|
|
135
|
-
this.firstElementIntersection = signalElementIntersection(this.firstElement);
|
|
135
|
+
this.firstElementIntersection = signalElementIntersection(this.firstElement, { root: this.scrollable });
|
|
136
136
|
this.firstElementVisibility = signal(null);
|
|
137
|
-
this.lastElementIntersection = signalElementIntersection(this.lastElement);
|
|
137
|
+
this.lastElementIntersection = signalElementIntersection(this.lastElement, { root: this.scrollable });
|
|
138
138
|
this.lastElementVisibility = signal(null);
|
|
139
139
|
this.canScroll = computed(() => {
|
|
140
140
|
const dir = this.direction();
|
|
@@ -380,13 +380,13 @@ export class ScrollableComponent {
|
|
|
380
380
|
.subscribe();
|
|
381
381
|
}
|
|
382
382
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
383
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: IS_ACTIVE_ELEMENT, descendants: true }, { propertyName: "_elementList", predicate: IS_ELEMENT, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden
|
|
383
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: IS_ACTIVE_ELEMENT, descendants: true }, { propertyName: "_elementList", predicate: IS_ELEMENT, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;block-size:100%;inline-size:1px;pointer-events:none}.et-scrollable .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
384
384
|
}
|
|
385
385
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: ScrollableComponent, decorators: [{
|
|
386
386
|
type: Component,
|
|
387
387
|
args: [{ selector: 'et-scrollable', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CursorDragScrollDirective, ObserveScrollStateDirective, NgClass, LetDirective, ChevronIconComponent], host: {
|
|
388
388
|
class: 'et-scrollable',
|
|
389
|
-
}, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden
|
|
389
|
+
}, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;block-size:100%;inline-size:1px;pointer-events:none}.et-scrollable .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"] }]
|
|
390
390
|
}], ctorParameters: () => [], propDecorators: { _itemSize: [{
|
|
391
391
|
type: Input,
|
|
392
392
|
args: [{ alias: 'itemSize' }]
|
|
@@ -446,4 +446,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImpor
|
|
|
446
446
|
type: ContentChildren,
|
|
447
447
|
args: [IS_ELEMENT, { descendants: true }]
|
|
448
448
|
}] } });
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBR1YsWUFBWSxFQUVaLDJCQUEyQixFQUczQixjQUFjLEVBQ2QsYUFBYSxFQUNiLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxF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O3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzdCLGFBQWE7c0JBRHhCLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPL0IsWUFBWTtzQkFEdkIsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU85QixrQkFBa0I7c0JBRDdCLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQU83QyxZQUFZO3NCQUR2QixlQUFlO3VCQUFDLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlzRGV2TW9kZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ3VycmVudEVsZW1lbnRWaXNpYmlsaXR5LFxuICBDdXJzb3JEcmFnU2Nyb2xsRGlyZWN0aXZlLFxuICBJU19BQ1RJVkVfRUxFTUVOVCxcbiAgSVNfRUxFTUVOVCxcbiAgSXNBY3RpdmVFbGVtZW50RGlyZWN0aXZlLFxuICBJc0VsZW1lbnREaXJlY3RpdmUsXG4gIExldERpcmVjdGl2ZSxcbiAgTmdDbGFzc1R5cGUsXG4gIE9ic2VydmVTY3JvbGxTdGF0ZURpcmVjdGl2ZSxcbiAgU2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZSxcbiAgU2Nyb2xsVG9FbGVtZW50T3B0aW9ucyxcbiAgVHlwZWRRdWVyeUxpc3QsXG4gIGNyZWF0ZURlc3Ryb3ksXG4gIGdldEVsZW1lbnRWaXNpYmxlU3RhdGVzLFxuICBpc0VsZW1lbnRWaXNpYmxlLFxuICBuZXh0RnJhbWUsXG4gIHNjcm9sbFRvRWxlbWVudCxcbiAgc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbixcbiAgc2lnbmFsRWxlbWVudFNjcm9sbFN0YXRlLFxuICBzaWduYWxIb3N0QXR0cmlidXRlcyxcbiAgc2lnbmFsSG9zdENsYXNzZXMsXG59IGZyb20gJ0BldGhsZXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgbWVyZ2UsIG9mLCBzdGFydFdpdGgsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGV2cm9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb25zJztcbmltcG9ydCB7IFNjcm9sbGFibGVJbnRlcnNlY3Rpb25DaGFuZ2UsIFNjcm9sbGFibGVTY3JvbGxNb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldC1zY3JvbGxhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Njcm9sbGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zY3JvbGxhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ3Vyc29yRHJhZ1Njcm9sbERpcmVjdGl2ZSwgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlLCBOZ0NsYXNzLCBMZXREaXJlY3RpdmUsIENoZXZyb25JY29uQ29tcG9uZW50XSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZXQtc2Nyb2xsYWJsZScsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIFNjcm9sbGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBjcmVhdGVEZXN0cm95KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzQ3Vyc29yRHJhZ2dpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhdGVzdFZpc2liaWxpdHlTdGF0ZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTY3JvbGxhYmxlSW50ZXJzZWN0aW9uQ2hhbmdlW10+KFtdKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2l0ZW1TaXplJyB9KVxuICBzZXQgX2l0ZW1TaXplKHY6ICdhdXRvJyB8ICdzYW1lJyB8ICdmdWxsJykge1xuICAgIHRoaXMuaXRlbVNpemUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGl0ZW1TaXplID0gc2lnbmFsPCdhdXRvJyB8ICdzYW1lJyB8ICdmdWxsJz4oJ2F1dG8nKTtcblxuICBASW5wdXQoeyBhbGlhczogJ2RpcmVjdGlvbicgfSlcbiAgc2V0IF9kaXJlY3Rpb24odjogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJykge1xuICAgIHRoaXMuZGlyZWN0aW9uLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBkaXJlY3Rpb24gPSBzaWduYWw8J2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJz4oJ2hvcml6b250YWwnKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbGFibGVSb2xlJyB9KVxuICBzZXQgX3Njcm9sbGFibGVSb2xlKHY6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLnNjcm9sbGFibGVSb2xlLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlUm9sZSA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbGFibGVDbGFzcycgfSlcbiAgc2V0IF9zY3JvbGxhYmxlQ2xhc3ModjogTmdDbGFzc1R5cGUgfCBudWxsKSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlQ2xhc3Muc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHNjcm9sbGFibGVDbGFzcyA9IHNpZ25hbDxOZ0NsYXNzVHlwZSB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdyZW5kZXJNYXNrcycgfSlcbiAgc2V0IF9yZW5kZXJNYXNrcyh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5yZW5kZXJNYXNrcy5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgcmVuZGVyTWFza3MgPSBzaWduYWwodHJ1ZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3JlbmRlckJ1dHRvbnMnIH0pXG4gIHNldCBfcmVuZGVyQnV0dG9ucyh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5yZW5kZXJCdXR0b25zLnNldCh2KTtcbiAgfVxuICByZWFkb25seSByZW5kZXJCdXR0b25zID0gc2lnbmFsKHRydWUpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdyZW5kZXJTY3JvbGxiYXJzJyB9KVxuICBzZXQgX3JlbmRlclNjcm9sbGJhcnModjogYm9vbGVhbikge1xuICAgIHRoaXMucmVuZGVyU2Nyb2xsYmFycy5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgcmVuZGVyU2Nyb2xsYmFycyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3N0aWNreUJ1dHRvbnMnIH0pXG4gIHNldCBfc3RpY2t5QnV0dG9ucyh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5zdGlja3lCdXR0b25zLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBzdGlja3lCdXR0b25zID0gc2lnbmFsKGZhbHNlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnY3Vyc29yRHJhZ1Njcm9sbCcgfSlcbiAgc2V0IF9jdXJzb3JEcmFnU2Nyb2xsKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmN1cnNvckRyYWdTY3JvbGwuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGN1cnNvckRyYWdTY3JvbGwgPSBzaWduYWwodHJ1ZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ2Rpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nJyB9KVxuICBzZXQgX2Rpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nLnNldCh2KTtcbiAgfVxuICByZWFkb25seSBkaXNhYmxlQWN0aXZlRWxlbWVudFNjcm9sbGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KHsgYWxpYXM6ICdzY3JvbGxNb2RlJyB9KVxuICBzZXQgX3Njcm9sbE1vZGUodjogU2Nyb2xsYWJsZVNjcm9sbE1vZGUpIHtcbiAgICB0aGlzLnNjcm9sbE1vZGUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHNjcm9sbE1vZGUgPSBzaWduYWw8U2Nyb2xsYWJsZVNjcm9sbE1vZGU+KCdjb250YWluZXInKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnc25hcCcgfSlcbiAgc2V0IF9zbmFwKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNuYXAuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHNuYXAgPSBzaWduYWwoZmFsc2UpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlLCBhbGlhczogJ3Njcm9sbE1hcmdpbicgfSlcbiAgc2V0IF9zY3JvbGxNYXJnaW4odjogbnVtYmVyKSB7XG4gICAgdGhpcy5zY3JvbGxNYXJnaW4uc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHNjcm9sbE1hcmdpbiA9IHNpZ25hbCgwKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgc2Nyb2xsU3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNjcm9sbE9ic2VydmVyU2Nyb2xsU3RhdGU+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGludGVyc2VjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2Nyb2xsYWJsZUludGVyc2VjdGlvbkNoYW5nZVtdPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbGFibGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIHNldCBfc2Nyb2xsYWJsZShlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMuc2Nyb2xsYWJsZS5zZXQoZSk7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsYWJsZSA9IHNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IG51bGw+KG51bGwpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpcnN0RWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9maXJzdEVsZW1lbnQoZTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICB0aGlzLmZpcnN0RWxlbWVudC5zZXQoZSk7XG4gIH1cbiAgcmVhZG9ubHkgZmlyc3RFbGVtZW50ID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgnbGFzdEVsZW1lbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIHNldCBfbGFzdEVsZW1lbnQoZTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICB0aGlzLmxhc3RFbGVtZW50LnNldChlKTtcbiAgfVxuICByZWFkb25seSBsYXN0RWxlbWVudCA9IHNpZ25hbDxFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IG51bGw+KG51bGwpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oSVNfQUNUSVZFX0VMRU1FTlQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHJpdmF0ZSBzZXQgX2FjdGl2ZUVsZW1lbnRMaXN0KGU6IFR5cGVkUXVlcnlMaXN0PElzQWN0aXZlRWxlbWVudERpcmVjdGl2ZT4pIHtcbiAgICB0aGlzLmFjdGl2ZUVsZW1lbnRMaXN0LnNldChlKTtcbiAgfVxuICByZWFkb25seSBhY3RpdmVFbGVtZW50TGlzdCA9IHNpZ25hbDxUeXBlZFF1ZXJ5TGlzdDxJc0FjdGl2ZUVsZW1lbnREaXJlY3RpdmU+IHwgbnVsbD4obnVsbCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihJU19FTEVNRU5ULCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9lbGVtZW50TGlzdChlOiBUeXBlZFF1ZXJ5TGlzdDxJc0VsZW1lbnREaXJlY3RpdmU+KSB7XG4gICAgdGhpcy5lbGVtZW50TGlzdC5zZXQoZSk7XG4gIH1cbiAgcmVhZG9ubHkgZWxlbWVudExpc3QgPSBzaWduYWw8VHlwZWRRdWVyeUxpc3Q8SXNFbGVtZW50RGlyZWN0aXZlPiB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBoaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbigpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuX2xhdGVzdFZpc2liaWxpdHlTdGF0ZXMkLnZhbHVlO1xuXG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgIGlmICghcHJldikge1xuICAgICAgICByZXR1cm4gY3VycjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGN1cnIuaW50ZXJzZWN0aW9uUmF0aW8gPiBwcmV2LmludGVyc2VjdGlvblJhdGlvID8gY3VyciA6IHByZXY7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgbmV4dFBhcnRpYWxJbnRlcnNlY3Rpb24oKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLl9sYXRlc3RWaXNpYmlsaXR5U3RhdGVzJC52YWx1ZTtcblxuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBoaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbiA9IHRoaXMuaGlnaGVzdFZpc2libGVJbnRlcnNlY3Rpb247XG5cbiAgICBpZiAoIWhpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0SW5kZXggPSBlbGVtZW50cy5zbGljZShoaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbi5pbmRleCkuZmluZEluZGV4KChlKSA9PiAhZS5pc0ludGVyc2VjdGluZyk7XG5cbiAgICBpZiAobmV4dEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50c1toaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbi5pbmRleCArIG5leHRJbmRleF07XG5cbiAgICByZXR1cm4gbmV4dEVsZW1lbnQgfHwgbnVsbDtcbiAgfVxuXG4gIGdldCBwcmV2aW91c1BhcnRpYWxJbnRlcnNlY3Rpb24oKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLl9sYXRlc3RWaXNpYmlsaXR5U3RhdGVzJC52YWx1ZTtcblxuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBoaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbiA9IHRoaXMuaGlnaGVzdFZpc2libGVJbnRlcnNlY3Rpb247XG5cbiAgICBpZiAoIWhpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gZWxlbWVudHNcbiAgICAgIC5zbGljZSgwLCBoaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbi5pbmRleClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maW5kSW5kZXgoKGUpID0+ICFlLmlzSW50ZXJzZWN0aW5nKTtcblxuICAgIGlmIChwcmV2aW91c0luZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNFbGVtZW50ID0gZWxlbWVudHNbaGlnaGVzdFZpc2libGVJbnRlcnNlY3Rpb24uaW5kZXggLSBwcmV2aW91c0luZGV4IC0gMV07XG5cbiAgICByZXR1cm4gcHJldmlvdXNFbGVtZW50IHx8IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGFpbmVyU2Nyb2xsU3RhdGUgPSBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUodGhpcy5zY3JvbGxhYmxlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpcnN0RWxlbWVudEludGVyc2VjdGlvbiA9IHNpZ25hbEVsZW1lbnRJbnRlcnNlY3Rpb24odGhpcy5maXJzdEVsZW1lbnQpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlyc3RFbGVtZW50VmlzaWJpbGl0eSA9IHNpZ25hbDxDdXJyZW50RWxlbWVudFZpc2liaWxpdHkgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxhc3RFbGVtZW50SW50ZXJzZWN0aW9uID0gc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbih0aGlzLmxhc3RFbGVtZW50KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxhc3RFbGVtZW50VmlzaWJpbGl0eSA9IHNpZ25hbDxDdXJyZW50RWxlbWVudFZpc2liaWxpdHkgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuU2Nyb2xsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRpciA9IHRoaXMuZGlyZWN0aW9uKCk7XG5cbiAgICBpZiAoZGlyID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclNjcm9sbFN0YXRlKCkuY2FuU2Nyb2xsSG9yaXpvbnRhbGx5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclNjcm9sbFN0YXRlKCkuY2FuU2Nyb2xsVmVydGljYWxseTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQXRTdGFydCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuU2Nyb2xsKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMuZmlyc3RFbGVtZW50SW50ZXJzZWN0aW9uKCk7XG5cbiAgICBpZiAoIWludGVyc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50VmlzaWJpbGl0eSgpPy5pbmxpbmUgPz8gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJzZWN0aW9uLmlzSW50ZXJzZWN0aW5nO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzQXRFbmQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNhblNjcm9sbCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSB0aGlzLmxhc3RFbGVtZW50SW50ZXJzZWN0aW9uKCk7XG5cbiAgICBpZiAoIWludGVyc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMubGFzdEVsZW1lbnRWaXNpYmlsaXR5KCk/LmlubGluZSA/PyB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb24uaXNJbnRlcnNlY3Rpbmc7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBlbmFibGVPdmVybGF5QW5pbWF0aW9ucyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhvc3RBdHRyaWJ1dGVzID0gc2lnbmFsSG9zdEF0dHJpYnV0ZXMoe1xuICAgICdpdGVtLXNpemUnOiB0aGlzLml0ZW1TaXplLFxuICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24sXG4gICAgJ3JlbmRlci1zY3JvbGxiYXJzJzogdGhpcy5yZW5kZXJTY3JvbGxiYXJzLFxuICAgICdzdGlja3ktYnV0dG9ucyc6IHRoaXMuc3RpY2t5QnV0dG9ucyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhvc3RDbGFzc2VzID0gc2lnbmFsSG9zdENsYXNzZXMoe1xuICAgICdldC1zY3JvbGxhYmxlLS1jYW4tc2Nyb2xsJzogdGhpcy5jYW5TY3JvbGwsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWlzLWF0LXN0YXJ0JzogdGhpcy5pc0F0U3RhcnQsXG4gICAgJ2V0LXNjcm9sbGFibGUtLWlzLWF0LWVuZCc6IHRoaXMuaXNBdEVuZCxcbiAgICAnZXQtc2Nyb2xsYWJsZS0tZW5hYmxlLW92ZXJsYXktYW5pbWF0aW9ucyc6IHRoaXMuZW5hYmxlT3ZlcmxheUFuaW1hdGlvbnMsXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZSA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSB0aGlzLmZpcnN0RWxlbWVudCgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBsYXN0RWxlbWVudCA9IHRoaXMubGFzdEVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudExpc3QgPSB0aGlzLmFjdGl2ZUVsZW1lbnRMaXN0KCk/LnRvQXJyYXkoKTtcblxuICAgICAgICBpZiAoIXNjcm9sbGFibGUgfHwgIWZpcnN0RWxlbWVudCB8fCAhbGFzdEVsZW1lbnQgfHwgIWFjdGl2ZUVsZW1lbnRMaXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RBY3RpdmUgPSBhY3RpdmVFbGVtZW50TGlzdC5maW5kKChhKSA9PiBhLmlzQWN0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGZpcnN0QWN0aXZlICYmICF0aGlzLmRpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nKCkpIHtcbiAgICAgICAgICBjb25zdCBvZmZzZXRUb3AgPSBmaXJzdEFjdGl2ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wIC0gc2Nyb2xsYWJsZS5vZmZzZXRUb3A7XG4gICAgICAgICAgY29uc3Qgb2Zmc2V0TGVmdCA9IGZpcnN0QWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gc2Nyb2xsYWJsZS5vZmZzZXRMZWZ0O1xuICAgICAgICAgIHNjcm9sbGFibGUuc2Nyb2xsTGVmdCA9IG9mZnNldExlZnQ7XG4gICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxUb3AgPSBvZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcnN0RWxlbWVudFZpc2liaWxpdHkuc2V0KFxuICAgICAgICAgIGlzRWxlbWVudFZpc2libGUoe1xuICAgICAgICAgICAgY29udGFpbmVyOiBzY3JvbGxhYmxlLFxuICAgICAgICAgICAgZWxlbWVudDogZmlyc3RFbGVtZW50LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubGFzdEVsZW1lbnRWaXNpYmlsaXR5LnNldChcbiAgICAgICAgICBpc0VsZW1lbnRWaXNpYmxlKHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogc2Nyb2xsYWJsZSxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGxhc3RFbGVtZW50LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBvbmUgZnJhbWUgYmVmb3JlIGVuYWJsaW5nIGFuaW1hdGlvbnMgdG8gcHJldmVudCBhIGFuaW1hdGlvbiBmcm9tIHBsYXlpbmcgZHVyaW5nIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICBuZXh0RnJhbWUoKCkgPT4gdGhpcy5lbmFibGVPdmVybGF5QW5pbWF0aW9ucy5zZXQodHJ1ZSkpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICApO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGlzQXRTdGFydCA9IHRoaXMuaXNBdFN0YXJ0KCk7XG4gICAgICBjb25zdCBpc0F0RW5kID0gdGhpcy5pc0F0RW5kKCk7XG4gICAgICBjb25zdCBjYW5TY3JvbGwgPSB0aGlzLmNhblNjcm9sbCgpO1xuXG4gICAgICB0aGlzLnNjcm9sbFN0YXRlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBjYW5TY3JvbGwsXG4gICAgICAgIGlzQXRFbmQ6ICEhaXNBdEVuZCxcbiAgICAgICAgaXNBdFN0YXJ0OiAhIWlzQXRTdGFydCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldHVwU2Nyb2xsTGlzdGVuaW5nKCk7XG4gIH1cblxuICBzY3JvbGxPbmVDb250YWluZXJTaXplKGRpcmVjdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYgKCFzY3JvbGxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3Qgc2Nyb2xsYWJsZVNpemUgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyBwYXJlbnQuY2xpZW50V2lkdGggOiBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyBzY3JvbGxFbGVtZW50LnNjcm9sbExlZnQgOiBzY3JvbGxFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgIHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG8oe1xuICAgICAgW3RoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdsZWZ0JyA6ICd0b3AnXTpcbiAgICAgICAgY3VycmVudFNjcm9sbCArIChkaXJlY3Rpb24gPT09ICdzdGFydCcgPyAtc2Nyb2xsYWJsZVNpemUgOiBzY3JvbGxhYmxlU2l6ZSksXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSk7XG4gIH1cblxuICBzY3JvbGxPbmVJdGVtU2l6ZShkaXJlY3Rpb246ICdzdGFydCcgfCAnZW5kJykge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fbGF0ZXN0VmlzaWJpbGl0eVN0YXRlcyQudmFsdWU7XG5cbiAgICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnTm8gZWxlbWVudHMgZm91bmQgdG8gc2Nyb2xsIHRvLiBNYWtlIHN1cmUgdG8gYXBwbHkgdGhlIGlzRWxlbWVudCBkaXJlY3RpdmUgdG8gdGhlIGVsZW1lbnRzIHlvdSB3YW50IHRvIHNjcm9sbCB0by4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsID0gZGlyZWN0aW9uID09PSAnc3RhcnQnID8gdGhpcy5wcmV2aW91c1BhcnRpYWxJbnRlcnNlY3Rpb24gOiB0aGlzLm5leHRQYXJ0aWFsSW50ZXJzZWN0aW9uO1xuXG4gICAgaWYgKCFlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgIGVsZW1lbnQ6IGVsPy5lbGVtZW50LFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyAnaW5saW5lJyA6ICdibG9jaycsXG4gICAgICBvcmlnaW46IGRpcmVjdGlvbixcbiAgICAgIC4uLih0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyB7IHNjcm9sbElubGluZU1hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9XG4gICAgICAgIDogeyBzY3JvbGxCbG9ja01hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHNjcm9sbFRvRWxlbWVudChvcHRpb25zOiBPbWl0PFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsICdjb250YWluZXInPikge1xuICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLnNjcm9sbGFibGUoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIHNjcm9sbFRvRWxlbWVudCh7XG4gICAgICBjb250YWluZXI6IHNjcm9sbEVsZW1lbnQsXG4gICAgICAuLi4odGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8geyBzY3JvbGxJbmxpbmVNYXJnaW46IHRoaXMuc2Nyb2xsTWFyZ2luKCkgfVxuICAgICAgICA6IHsgc2Nyb2xsQmxvY2tNYXJnaW46IHRoaXMuc2Nyb2xsTWFyZ2luKCkgfSksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50QnlJbmRleChvcHRpb25zOiBPbWl0PFNjcm9sbFRvRWxlbWVudE9wdGlvbnMsICdjb250YWluZXInPiAmIHsgaW5kZXg6IG51bWJlciB9KSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRMaXN0KCk/LnRvQXJyYXkoKSA/PyBbXTtcblxuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdObyBlbGVtZW50cyBmb3VuZCB0byBzY3JvbGwgdG8uIE1ha2Ugc3VyZSB0byBhcHBseSB0aGUgaXNFbGVtZW50IGRpcmVjdGl2ZSB0byB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gc2Nyb2xsIHRvLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tvcHRpb25zLmluZGV4XT8uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi4odGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8geyBzY3JvbGxJbmxpbmVNYXJnaW46IHRoaXMuc2Nyb2xsTWFyZ2luKCkgfVxuICAgICAgICA6IHsgc2Nyb2xsQmxvY2tNYXJnaW46IHRoaXMuc2Nyb2xsTWFyZ2luKCkgfSksXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldElzQ3Vyc29yRHJhZ2dpbmcoaXNEcmFnZ2luZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzQ3Vyc29yRHJhZ2dpbmckLm5leHQoaXNEcmFnZ2luZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9TdGFydERpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxNb2RlKCkgPT09ICdjb250YWluZXInKSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUNvbnRhaW5lclNpemUoJ3N0YXJ0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lSXRlbVNpemUoJ3N0YXJ0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFRvU3RhcnRFbmQoKSB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsTW9kZSgpID09PSAnY29udGFpbmVyJykge1xuICAgICAgdGhpcy5zY3JvbGxPbmVDb250YWluZXJTaXplKCdlbmQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxPbmVJdGVtU2l6ZSgnZW5kJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBTY3JvbGxMaXN0ZW5pbmcoKSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5lbGVtZW50TGlzdCgpO1xuXG4gICAgaWYgKCFzY3JvbGxFbGVtZW50IHx8ICFlbGVtZW50cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpc1NuYXBwaW5nID0gZmFsc2U7XG4gICAgbGV0IHNuYXBUaW1lb3V0ID0gMDtcblxuICAgIG1lcmdlKGZyb21FdmVudDxXaGVlbEV2ZW50PihzY3JvbGxFbGVtZW50LCAnd2hlZWwnKSwgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHNjcm9sbEVsZW1lbnQsICd0b3VjaHN0YXJ0JykpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBpc1NuYXBwaW5nID0gZmFsc2U7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgbWVyZ2UoXG4gICAgICBmcm9tRXZlbnQoc2Nyb2xsRWxlbWVudCwgJ3Njcm9sbCcpLFxuICAgICAgdGhpcy5faXNDdXJzb3JEcmFnZ2luZyQsXG4gICAgICBlbGVtZW50cy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKGVsZW1lbnRzKSkgPz8gb2YobnVsbCksXG4gICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVscyA9XG4gICAgICAgICAgICBlbGVtZW50c1xuICAgICAgICAgICAgICA/LnRvQXJyYXkoKVxuICAgICAgICAgICAgICAubWFwKChlKSA9PiBlPy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGUpOiBlIGlzIEhUTUxFbGVtZW50ID0+ICEhZSkgPz8gW107XG5cbiAgICAgICAgICBpZiAoIWVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhdGVzdFZpc2liaWxpdHlTdGF0ZXMkLm5leHQoW10pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3RhdGVzID0gZ2V0RWxlbWVudFZpc2libGVTdGF0ZXMoe1xuICAgICAgICAgICAgZWxlbWVudHM6IGVscyxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHByb3AgPSB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyAnaW5saW5lSW50ZXJzZWN0aW9uJyA6ICdibG9ja0ludGVyc2VjdGlvbic7XG4gICAgICAgICAgY29uc3Qgc3RhdGVDbGFzcyA9IGBldC1lbGVtZW50LS1pcy1pbnRlcnNlY3RpbmdgO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiBzdGF0ZXMpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZVtwcm9wXSA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChzdGF0ZUNsYXNzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXRlLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShzdGF0ZUNsYXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25DaGFuZ2VzID0gc3RhdGVzLm1hcCgocywgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGU6IFNjcm9sbGFibGVJbnRlcnNlY3Rpb25DaGFuZ2UgPSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQ6IHMuZWxlbWVudCxcbiAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uUmF0aW86IHNbcHJvcF0gLyAxMDAsXG4gICAgICAgICAgICAgIGlzSW50ZXJzZWN0aW5nOiBzW3Byb3BdID09PSAxMDAsXG4gICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5pbnRlcnNlY3Rpb25DaGFuZ2UuZW1pdChpbnRlcnNlY3Rpb25DaGFuZ2VzKTtcblxuICAgICAgICAgIHRoaXMuX2xhdGVzdFZpc2liaWxpdHlTdGF0ZXMkLm5leHQoaW50ZXJzZWN0aW9uQ2hhbmdlcyk7XG5cbiAgICAgICAgICBpZiAoaXNTbmFwcGluZyB8fCB0aGlzLl9pc0N1cnNvckRyYWdnaW5nJC52YWx1ZSB8fCAhdGhpcy5zbmFwKCkpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLnByZXZpb3VzUGFydGlhbEludGVyc2VjdGlvbjtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5uZXh0UGFydGlhbEludGVyc2VjdGlvbjtcbiAgICAgICAgICBjb25zdCBza2lwU25hcCA9XG4gICAgICAgICAgICAhcHJldiB8fFxuICAgICAgICAgICAgIW5leHQgfHxcbiAgICAgICAgICAgIHByZXYuaW50ZXJzZWN0aW9uUmF0aW8gPT09IDAgfHxcbiAgICAgICAgICAgIG5leHQuaW50ZXJzZWN0aW9uUmF0aW8gPT09IDAgfHxcbiAgICAgICAgICAgIHByZXYuaW50ZXJzZWN0aW9uUmF0aW8gPT09IG5leHQuaW50ZXJzZWN0aW9uUmF0aW87XG5cbiAgICAgICAgICBpZiAoc2tpcFNuYXApIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGhpZ2hlc3RJbnRlcnNlY3RpbmcgPSBwcmV2LmludGVyc2VjdGlvblJhdGlvID4gbmV4dC5pbnRlcnNlY3Rpb25SYXRpbyA/IHByZXYgOiBuZXh0O1xuICAgICAgICAgIGNvbnN0IGZ1bGxJbnRlcnNlY3Rpb25JbmRleCA9IHRoaXMuaGlnaGVzdFZpc2libGVJbnRlcnNlY3Rpb24/LmluZGV4O1xuXG4gICAgICAgICAgaWYgKGZ1bGxJbnRlcnNlY3Rpb25JbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBoaWdoZXN0SW50ZXJzZWN0aW5nSW5kZXggPSBoaWdoZXN0SW50ZXJzZWN0aW5nLmluZGV4O1xuICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IGhpZ2hlc3RJbnRlcnNlY3RpbmdJbmRleCA+IGZ1bGxJbnRlcnNlY3Rpb25JbmRleCA/ICdlbmQnIDogJ3N0YXJ0JztcblxuICAgICAgICAgIHNjcm9sbFRvRWxlbWVudCh7XG4gICAgICAgICAgICBjb250YWluZXI6IHNjcm9sbEVsZW1lbnQsXG4gICAgICAgICAgICBlbGVtZW50OiBoaWdoZXN0SW50ZXJzZWN0aW5nLmVsZW1lbnQsXG4gICAgICAgICAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdpbmxpbmUnIDogJ2Jsb2NrJyxcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyAwIDogdGhpcy5zY3JvbGxNYXJnaW4oKSxcbiAgICAgICAgICAgIHNjcm9sbElubGluZU1hcmdpbjogdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5zY3JvbGxNYXJnaW4oKSA6IDAsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpc1NuYXBwaW5nID0gdHJ1ZTtcblxuICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoc25hcFRpbWVvdXQpO1xuXG4gICAgICAgICAgc25hcFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpc1NuYXBwaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2XG4gICNzY3JvbGxhYmxlXG4gIFthdHRyLnJvbGVdPVwic2Nyb2xsYWJsZVJvbGUoKSA/PyB1bmRlZmluZWRcIlxuICBbZXRDdXJzb3JEcmFnU2Nyb2xsXT1cImN1cnNvckRyYWdTY3JvbGwoKVwiXG4gIFthbGxvd2VkRGlyZWN0aW9uXT1cImRpcmVjdGlvbigpXCJcbiAgKGN1cnNvckRyYWdTdGFydCk9XCJzZXRJc0N1cnNvckRyYWdnaW5nKHRydWUpXCJcbiAgKGN1cnNvckRyYWdFbmQpPVwic2V0SXNDdXJzb3JEcmFnZ2luZyhmYWxzZSlcIlxuICBjbGFzcz1cImV0LXNjcm9sbGFibGUtY29udGFpbmVyLW91dGVyXCJcbj5cbiAgPGRpdiBbbmdDbGFzc109XCJzY3JvbGxhYmxlQ2xhc3MoKVwiIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1jb250YWluZXJcIj5cbiAgICA8ZGl2ICNmaXJzdEVsZW1lbnQgY2xhc3M9XCJldC1zY3JvbGwtb2JzZXJ2ZXItZmlyc3QtZWxlbWVudFwiPjwvZGl2PlxuICAgIDxuZy1jb250ZW50IC8+XG4gICAgPGRpdiAjbGFzdEVsZW1lbnQgY2xhc3M9XCJldC1zY3JvbGwtb2JzZXJ2ZXItbGFzdC1lbGVtZW50XCI+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbkBpZiAocmVuZGVyTWFza3MoKSkge1xuICA8ZGl2IGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1tYXNrc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2sgZXQtc2Nyb2xsYWJsZS1tYXNrLS1zdGFydFwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2sgZXQtc2Nyb2xsYWJsZS1tYXNrLS1lbmRcIj48L2Rpdj5cbiAgPC9kaXY+XG59XG5cbkBpZiAocmVuZGVyQnV0dG9ucygpKSB7XG4gIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWJ1dHRvbnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwic2Nyb2xsVG9TdGFydERpcmVjdGlvbigpXCJcbiAgICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1idXR0b24gZXQtc2Nyb2xsYWJsZS1idXR0b24tLXN0YXJ0XCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwic2Nyb2xsVG9TdGFydEVuZCgpXCJcbiAgICAgIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1idXR0b24gZXQtc2Nyb2xsYWJsZS1idXR0b24tLWVuZFwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICA+XG4gICAgICA8ZXQtY2hldnJvbi1pY29uIC8+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxufVxuIl19
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL2NvbXBvbmVudHMvc2Nyb2xsYWJsZS9jb21wb25lbnRzL3Njcm9sbGFibGUvc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixVQUFVLEVBR1YsWUFBWSxFQUVaLDJCQUEyQixFQUczQixjQUFjLEVBQ2QsYUFBYSxFQUNiLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZix5QkFBeUIsRUFDekIsd0JBQXdCLEVBQ3hCLG9CQUFvQixFQUNwQixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxF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YyxFQUFFO2dCQU9uRCxpQkFBaUI7c0JBRHpCLE1BQU07Z0JBSUUsa0JBQWtCO3NCQUQxQixNQUFNO2dCQUlLLFdBQVc7c0JBRHRCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPN0IsYUFBYTtzQkFEeEIsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU8vQixZQUFZO3NCQUR2QixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzlCLGtCQUFrQjtzQkFEN0IsZUFBZTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBTzdDLFlBQVk7c0JBRHZCLGVBQWU7dUJBQUMsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaXNEZXZNb2RlLFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDdXJyZW50RWxlbWVudFZpc2liaWxpdHksXG4gIEN1cnNvckRyYWdTY3JvbGxEaXJlY3RpdmUsXG4gIElTX0FDVElWRV9FTEVNRU5ULFxuICBJU19FTEVNRU5ULFxuICBJc0FjdGl2ZUVsZW1lbnREaXJlY3RpdmUsXG4gIElzRWxlbWVudERpcmVjdGl2ZSxcbiAgTGV0RGlyZWN0aXZlLFxuICBOZ0NsYXNzVHlwZSxcbiAgT2JzZXJ2ZVNjcm9sbFN0YXRlRGlyZWN0aXZlLFxuICBTY3JvbGxPYnNlcnZlclNjcm9sbFN0YXRlLFxuICBTY3JvbGxUb0VsZW1lbnRPcHRpb25zLFxuICBUeXBlZFF1ZXJ5TGlzdCxcbiAgY3JlYXRlRGVzdHJveSxcbiAgZ2V0RWxlbWVudFZpc2libGVTdGF0ZXMsXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIG5leHRGcmFtZSxcbiAgc2Nyb2xsVG9FbGVtZW50LFxuICBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uLFxuICBzaWduYWxFbGVtZW50U2Nyb2xsU3RhdGUsXG4gIHNpZ25hbEhvc3RBdHRyaWJ1dGVzLFxuICBzaWduYWxIb3N0Q2xhc3Nlcyxcbn0gZnJvbSAnQGV0aGxldGUvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZnJvbUV2ZW50LCBtZXJnZSwgb2YsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoZXZyb25JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vaWNvbnMnO1xuaW1wb3J0IHsgU2Nyb2xsYWJsZUludGVyc2VjdGlvbkNoYW5nZSwgU2Nyb2xsYWJsZVNjcm9sbE1vZGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V0LXNjcm9sbGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2Nyb2xsYWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Njcm9sbGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtDdXJzb3JEcmFnU2Nyb2xsRGlyZWN0aXZlLCBPYnNlcnZlU2Nyb2xsU3RhdGVEaXJlY3RpdmUsIE5nQ2xhc3MsIExldERpcmVjdGl2ZSwgQ2hldnJvbkljb25Db21wb25lbnRdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdldC1zY3JvbGxhYmxlJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgU2Nyb2xsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaXNDdXJzb3JEcmFnZ2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfbGF0ZXN0VmlzaWJpbGl0eVN0YXRlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNjcm9sbGFibGVJbnRlcnNlY3Rpb25DaGFuZ2VbXT4oW10pO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnaXRlbVNpemUnIH0pXG4gIHNldCBfaXRlbVNpemUodjogJ2F1dG8nIHwgJ3NhbWUnIHwgJ2Z1bGwnKSB7XG4gICAgdGhpcy5pdGVtU2l6ZS5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgaXRlbVNpemUgPSBzaWduYWw8J2F1dG8nIHwgJ3NhbWUnIHwgJ2Z1bGwnPignYXV0bycpO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnZGlyZWN0aW9uJyB9KVxuICBzZXQgX2RpcmVjdGlvbih2OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKSB7XG4gICAgdGhpcy5kaXJlY3Rpb24uc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGRpcmVjdGlvbiA9IHNpZ25hbDwnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnPignaG9yaXpvbnRhbCcpO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnc2Nyb2xsYWJsZVJvbGUnIH0pXG4gIHNldCBfc2Nyb2xsYWJsZVJvbGUodjogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuc2Nyb2xsYWJsZVJvbGUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHNjcm9sbGFibGVSb2xlID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnc2Nyb2xsYWJsZUNsYXNzJyB9KVxuICBzZXQgX3Njcm9sbGFibGVDbGFzcyh2OiBOZ0NsYXNzVHlwZSB8IG51bGwpIHtcbiAgICB0aGlzLnNjcm9sbGFibGVDbGFzcy5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsYWJsZUNsYXNzID0gc2lnbmFsPE5nQ2xhc3NUeXBlIHwgbnVsbD4obnVsbCk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3JlbmRlck1hc2tzJyB9KVxuICBzZXQgX3JlbmRlck1hc2tzKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlbmRlck1hc2tzLnNldCh2KTtcbiAgfVxuICByZWFkb25seSByZW5kZXJNYXNrcyA9IHNpZ25hbCh0cnVlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAncmVuZGVyQnV0dG9ucycgfSlcbiAgc2V0IF9yZW5kZXJCdXR0b25zKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlbmRlckJ1dHRvbnMuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHJlbmRlckJ1dHRvbnMgPSBzaWduYWwodHJ1ZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlLCBhbGlhczogJ3JlbmRlclNjcm9sbGJhcnMnIH0pXG4gIHNldCBfcmVuZGVyU2Nyb2xsYmFycyh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5yZW5kZXJTY3JvbGxiYXJzLnNldCh2KTtcbiAgfVxuICByZWFkb25seSByZW5kZXJTY3JvbGxiYXJzID0gc2lnbmFsKGZhbHNlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnc3RpY2t5QnV0dG9ucycgfSlcbiAgc2V0IF9zdGlja3lCdXR0b25zKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnN0aWNreUJ1dHRvbnMuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHN0aWNreUJ1dHRvbnMgPSBzaWduYWwoZmFsc2UpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdjdXJzb3JEcmFnU2Nyb2xsJyB9KVxuICBzZXQgX2N1cnNvckRyYWdTY3JvbGwodjogYm9vbGVhbikge1xuICAgIHRoaXMuY3Vyc29yRHJhZ1Njcm9sbC5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgY3Vyc29yRHJhZ1Njcm9sbCA9IHNpZ25hbCh0cnVlKTtcblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUsIGFsaWFzOiAnZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcnIH0pXG4gIHNldCBfZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcodjogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IGRpc2FibGVBY3RpdmVFbGVtZW50U2Nyb2xsaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBASW5wdXQoeyBhbGlhczogJ3Njcm9sbE1vZGUnIH0pXG4gIHNldCBfc2Nyb2xsTW9kZSh2OiBTY3JvbGxhYmxlU2Nyb2xsTW9kZSkge1xuICAgIHRoaXMuc2Nyb2xsTW9kZS5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsTW9kZSA9IHNpZ25hbDxTY3JvbGxhYmxlU2Nyb2xsTW9kZT4oJ2NvbnRhaW5lcicpO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSwgYWxpYXM6ICdzbmFwJyB9KVxuICBzZXQgX3NuYXAodjogYm9vbGVhbikge1xuICAgIHRoaXMuc25hcC5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc25hcCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUsIGFsaWFzOiAnc2Nyb2xsTWFyZ2luJyB9KVxuICBzZXQgX3Njcm9sbE1hcmdpbih2OiBudW1iZXIpIHtcbiAgICB0aGlzLnNjcm9sbE1hcmdpbi5zZXQodik7XG4gIH1cbiAgcmVhZG9ubHkgc2Nyb2xsTWFyZ2luID0gc2lnbmFsKDApO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBzY3JvbGxTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2Nyb2xsT2JzZXJ2ZXJTY3JvbGxTdGF0ZT4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgaW50ZXJzZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTY3JvbGxhYmxlSW50ZXJzZWN0aW9uQ2hhbmdlW10+KCk7XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9zY3JvbGxhYmxlKGU6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5zY3JvbGxhYmxlLnNldChlKTtcbiAgfVxuICByZWFkb25seSBzY3JvbGxhYmxlID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgnZmlyc3RFbGVtZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBzZXQgX2ZpcnN0RWxlbWVudChlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMuZmlyc3RFbGVtZW50LnNldChlKTtcbiAgfVxuICByZWFkb25seSBmaXJzdEVsZW1lbnQgPSBzaWduYWw8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBudWxsPihudWxsKTtcblxuICBAVmlld0NoaWxkKCdsYXN0RWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2V0IF9sYXN0RWxlbWVudChlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMubGFzdEVsZW1lbnQuc2V0KGUpO1xuICB9XG4gIHJlYWRvbmx5IGxhc3RFbGVtZW50ID0gc2lnbmFsPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihJU19BQ1RJVkVfRUxFTUVOVCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwcml2YXRlIHNldCBfYWN0aXZlRWxlbWVudExpc3QoZTogVHlwZWRRdWVyeUxpc3Q8SXNBY3RpdmVFbGVtZW50RGlyZWN0aXZlPikge1xuICAgIHRoaXMuYWN0aXZlRWxlbWVudExpc3Quc2V0KGUpO1xuICB9XG4gIHJlYWRvbmx5IGFjdGl2ZUVsZW1lbnRMaXN0ID0gc2lnbmFsPFR5cGVkUXVlcnlMaXN0PElzQWN0aXZlRWxlbWVudERpcmVjdGl2ZT4gfCBudWxsPihudWxsKTtcblxuICBAQ29udGVudENoaWxkcmVuKElTX0VMRU1FTlQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHJpdmF0ZSBzZXQgX2VsZW1lbnRMaXN0KGU6IFR5cGVkUXVlcnlMaXN0PElzRWxlbWVudERpcmVjdGl2ZT4pIHtcbiAgICB0aGlzLmVsZW1lbnRMaXN0LnNldChlKTtcbiAgfVxuICByZWFkb25seSBlbGVtZW50TGlzdCA9IHNpZ25hbDxUeXBlZFF1ZXJ5TGlzdDxJc0VsZW1lbnREaXJlY3RpdmU+IHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGhpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uKCkge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5fbGF0ZXN0VmlzaWJpbGl0eVN0YXRlcyQudmFsdWU7XG5cbiAgICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgICAgaWYgKCFwcmV2KSB7XG4gICAgICAgIHJldHVybiBjdXJyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3Vyci5pbnRlcnNlY3Rpb25SYXRpbyA+IHByZXYuaW50ZXJzZWN0aW9uUmF0aW8gPyBjdXJyIDogcHJldjtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBuZXh0UGFydGlhbEludGVyc2VjdGlvbigpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuX2xhdGVzdFZpc2liaWxpdHlTdGF0ZXMkLnZhbHVlO1xuXG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGhpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uID0gdGhpcy5oaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbjtcblxuICAgIGlmICghaGlnaGVzdFZpc2libGVJbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRJbmRleCA9IGVsZW1lbnRzLnNsaWNlKGhpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uLmluZGV4KS5maW5kSW5kZXgoKGUpID0+ICFlLmlzSW50ZXJzZWN0aW5nKTtcblxuICAgIGlmIChuZXh0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGVsZW1lbnRzW2hpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uLmluZGV4ICsgbmV4dEluZGV4XTtcblxuICAgIHJldHVybiBuZXh0RWxlbWVudCB8fCBudWxsO1xuICB9XG5cbiAgZ2V0IHByZXZpb3VzUGFydGlhbEludGVyc2VjdGlvbigpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuX2xhdGVzdFZpc2liaWxpdHlTdGF0ZXMkLnZhbHVlO1xuXG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGhpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uID0gdGhpcy5oaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbjtcblxuICAgIGlmICghaGlnaGVzdFZpc2libGVJbnRlcnNlY3Rpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzSW5kZXggPSBlbGVtZW50c1xuICAgICAgLnNsaWNlKDAsIGhpZ2hlc3RWaXNpYmxlSW50ZXJzZWN0aW9uLmluZGV4KVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZpbmRJbmRleCgoZSkgPT4gIWUuaXNJbnRlcnNlY3RpbmcpO1xuXG4gICAgaWYgKHByZXZpb3VzSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c0VsZW1lbnQgPSBlbGVtZW50c1toaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbi5pbmRleCAtIHByZXZpb3VzSW5kZXggLSAxXTtcblxuICAgIHJldHVybiBwcmV2aW91c0VsZW1lbnQgfHwgbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb250YWluZXJTY3JvbGxTdGF0ZSA9IHNpZ25hbEVsZW1lbnRTY3JvbGxTdGF0ZSh0aGlzLnNjcm9sbGFibGUpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlyc3RFbGVtZW50SW50ZXJzZWN0aW9uID0gc2lnbmFsRWxlbWVudEludGVyc2VjdGlvbih0aGlzLmZpcnN0RWxlbWVudCwgeyByb290OiB0aGlzLnNjcm9sbGFibGUgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaXJzdEVsZW1lbnRWaXNpYmlsaXR5ID0gc2lnbmFsPEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eSB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24gPSBzaWduYWxFbGVtZW50SW50ZXJzZWN0aW9uKHRoaXMubGFzdEVsZW1lbnQsIHsgcm9vdDogdGhpcy5zY3JvbGxhYmxlIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGFzdEVsZW1lbnRWaXNpYmlsaXR5ID0gc2lnbmFsPEN1cnJlbnRFbGVtZW50VmlzaWJpbGl0eSB8IG51bGw+KG51bGwpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5TY3JvbGwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGlyID0gdGhpcy5kaXJlY3Rpb24oKTtcblxuICAgIGlmIChkaXIgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyU2Nyb2xsU3RhdGUoKS5jYW5TY3JvbGxIb3Jpem9udGFsbHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyU2Nyb2xsU3RhdGUoKS5jYW5TY3JvbGxWZXJ0aWNhbGx5O1xuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNBdFN0YXJ0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5jYW5TY3JvbGwoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJzZWN0aW9uID0gdGhpcy5maXJzdEVsZW1lbnRJbnRlcnNlY3Rpb24oKTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRWaXNpYmlsaXR5KCk/LmlubGluZSA/PyB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb24uaXNJbnRlcnNlY3Rpbmc7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNBdEVuZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuY2FuU2Nyb2xsKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IHRoaXMubGFzdEVsZW1lbnRJbnRlcnNlY3Rpb24oKTtcblxuICAgIGlmICghaW50ZXJzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0RWxlbWVudFZpc2liaWxpdHkoKT8uaW5saW5lID8/IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyc2VjdGlvbi5pc0ludGVyc2VjdGluZztcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGVuYWJsZU92ZXJsYXlBbmltYXRpb25zID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaG9zdEF0dHJpYnV0ZXMgPSBzaWduYWxIb3N0QXR0cmlidXRlcyh7XG4gICAgJ2l0ZW0tc2l6ZSc6IHRoaXMuaXRlbVNpemUsXG4gICAgZGlyZWN0aW9uOiB0aGlzLmRpcmVjdGlvbixcbiAgICAncmVuZGVyLXNjcm9sbGJhcnMnOiB0aGlzLnJlbmRlclNjcm9sbGJhcnMsXG4gICAgJ3N0aWNreS1idXR0b25zJzogdGhpcy5zdGlja3lCdXR0b25zLFxuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaG9zdENsYXNzZXMgPSBzaWduYWxIb3N0Q2xhc3Nlcyh7XG4gICAgJ2V0LXNjcm9sbGFibGUtLWNhbi1zY3JvbGwnOiB0aGlzLmNhblNjcm9sbCxcbiAgICAnZXQtc2Nyb2xsYWJsZS0taXMtYXQtc3RhcnQnOiB0aGlzLmlzQXRTdGFydCxcbiAgICAnZXQtc2Nyb2xsYWJsZS0taXMtYXQtZW5kJzogdGhpcy5pc0F0RW5kLFxuICAgICdldC1zY3JvbGxhYmxlLS1lbmFibGUtb3ZlcmxheS1hbmltYXRpb25zJzogdGhpcy5lbmFibGVPdmVybGF5QW5pbWF0aW9ucyxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZpcnN0RWxlbWVudCA9IHRoaXMuZmlyc3RFbGVtZW50KCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gdGhpcy5sYXN0RWxlbWVudCgpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50TGlzdCA9IHRoaXMuYWN0aXZlRWxlbWVudExpc3QoKT8udG9BcnJheSgpO1xuXG4gICAgICAgIGlmICghc2Nyb2xsYWJsZSB8fCAhZmlyc3RFbGVtZW50IHx8ICFsYXN0RWxlbWVudCB8fCAhYWN0aXZlRWxlbWVudExpc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaXJzdEFjdGl2ZSA9IGFjdGl2ZUVsZW1lbnRMaXN0LmZpbmQoKGEpID0+IGEuaXNBY3RpdmVFbGVtZW50KTtcblxuICAgICAgICBpZiAoZmlyc3RBY3RpdmUgJiYgIXRoaXMuZGlzYWJsZUFjdGl2ZUVsZW1lbnRTY3JvbGxpbmcoKSkge1xuICAgICAgICAgIGNvbnN0IG9mZnNldFRvcCA9IGZpcnN0QWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSBzY3JvbGxhYmxlLm9mZnNldFRvcDtcbiAgICAgICAgICBjb25zdCBvZmZzZXRMZWZ0ID0gZmlyc3RBY3RpdmUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLSBzY3JvbGxhYmxlLm9mZnNldExlZnQ7XG4gICAgICAgICAgc2Nyb2xsYWJsZS5zY3JvbGxMZWZ0ID0gb2Zmc2V0TGVmdDtcbiAgICAgICAgICBzY3JvbGxhYmxlLnNjcm9sbFRvcCA9IG9mZnNldFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyc3RFbGVtZW50VmlzaWJpbGl0eS5zZXQoXG4gICAgICAgICAgaXNFbGVtZW50VmlzaWJsZSh7XG4gICAgICAgICAgICBjb250YWluZXI6IHNjcm9sbGFibGUsXG4gICAgICAgICAgICBlbGVtZW50OiBmaXJzdEVsZW1lbnQsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5sYXN0RWxlbWVudFZpc2liaWxpdHkuc2V0KFxuICAgICAgICAgIGlzRWxlbWVudFZpc2libGUoe1xuICAgICAgICAgICAgY29udGFpbmVyOiBzY3JvbGxhYmxlLFxuICAgICAgICAgICAgZWxlbWVudDogbGFzdEVsZW1lbnQsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB3YWl0IG9uZSBmcmFtZSBiZWZvcmUgZW5hYmxpbmcgYW5pbWF0aW9ucyB0byBwcmV2ZW50IGEgYW5pbWF0aW9uIGZyb20gcGxheWluZyBkdXJpbmcgaW5pdGlhbCByZW5kZXIuXG4gICAgICAgIG5leHRGcmFtZSgoKSA9PiB0aGlzLmVuYWJsZU92ZXJsYXlBbmltYXRpb25zLnNldCh0cnVlKSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaXNBdFN0YXJ0ID0gdGhpcy5pc0F0U3RhcnQoKTtcbiAgICAgIGNvbnN0IGlzQXRFbmQgPSB0aGlzLmlzQXRFbmQoKTtcbiAgICAgIGNvbnN0IGNhblNjcm9sbCA9IHRoaXMuY2FuU2Nyb2xsKCk7XG5cbiAgICAgIHRoaXMuc2Nyb2xsU3RhdGVDaGFuZ2UuZW1pdCh7XG4gICAgICAgIGNhblNjcm9sbCxcbiAgICAgICAgaXNBdEVuZDogISFpc0F0RW5kLFxuICAgICAgICBpc0F0U3RhcnQ6ICEhaXNBdFN0YXJ0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc2V0dXBTY3JvbGxMaXN0ZW5pbmcoKTtcbiAgfVxuXG4gIHNjcm9sbE9uZUNvbnRhaW5lclNpemUoZGlyZWN0aW9uOiAnc3RhcnQnIHwgJ2VuZCcpIHtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAoIXNjcm9sbEVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBzY3JvbGxhYmxlU2l6ZSA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHBhcmVudC5jbGllbnRXaWR0aCA6IHBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgY3VycmVudFNjcm9sbCA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IHNjcm9sbEVsZW1lbnQuc2Nyb2xsTGVmdCA6IHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wO1xuXG4gICAgc2Nyb2xsRWxlbWVudC5zY3JvbGxUbyh7XG4gICAgICBbdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2xlZnQnIDogJ3RvcCddOlxuICAgICAgICBjdXJyZW50U2Nyb2xsICsgKGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JyA/IC1zY3JvbGxhYmxlU2l6ZSA6IHNjcm9sbGFibGVTaXplKSxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KTtcbiAgfVxuXG4gIHNjcm9sbE9uZUl0ZW1TaXplKGRpcmVjdGlvbjogJ3N0YXJ0JyB8ICdlbmQnKSB7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLl9sYXRlc3RWaXNpYmlsaXR5U3RhdGVzJC52YWx1ZTtcblxuICAgIGlmICghZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdObyBlbGVtZW50cyBmb3VuZCB0byBzY3JvbGwgdG8uIE1ha2Ugc3VyZSB0byBhcHBseSB0aGUgaXNFbGVtZW50IGRpcmVjdGl2ZSB0byB0aGUgZWxlbWVudHMgeW91IHdhbnQgdG8gc2Nyb2xsIHRvLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZWwgPSBkaXJlY3Rpb24gPT09ICdzdGFydCcgPyB0aGlzLnByZXZpb3VzUGFydGlhbEludGVyc2VjdGlvbiA6IHRoaXMubmV4dFBhcnRpYWxJbnRlcnNlY3Rpb247XG5cbiAgICBpZiAoIWVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgZWxlbWVudDogZWw/LmVsZW1lbnQsXG4gICAgICBkaXJlY3Rpb246IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdpbmxpbmUnIDogJ2Jsb2NrJyxcbiAgICAgIG9yaWdpbjogZGlyZWN0aW9uLFxuICAgICAgLi4uKHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHsgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH1cbiAgICAgICAgOiB7IHNjcm9sbEJsb2NrTWFyZ2luOiB0aGlzLnNjcm9sbE1hcmdpbigpIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgc2Nyb2xsVG9FbGVtZW50KG9wdGlvbnM6IE9taXQ8U2Nyb2xsVG9FbGVtZW50T3B0aW9ucywgJ2NvbnRhaW5lcic+KSB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsYWJsZSgpPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgIC4uLih0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyB7IHNjcm9sbElubGluZU1hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9XG4gICAgICAgIDogeyBzY3JvbGxCbG9ja01hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9KSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBzY3JvbGxUb0VsZW1lbnRCeUluZGV4KG9wdGlvbnM6IE9taXQ8U2Nyb2xsVG9FbGVtZW50T3B0aW9ucywgJ2NvbnRhaW5lcic+ICYgeyBpbmRleDogbnVtYmVyIH0pIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZWxlbWVudExpc3QoKT8udG9BcnJheSgpID8/IFtdO1xuXG4gICAgaWYgKCFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ05vIGVsZW1lbnRzIGZvdW5kIHRvIHNjcm9sbCB0by4gTWFrZSBzdXJlIHRvIGFwcGx5IHRoZSBpc0VsZW1lbnQgZGlyZWN0aXZlIHRvIHRoZSBlbGVtZW50cyB5b3Ugd2FudCB0byBzY3JvbGwgdG8uJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW29wdGlvbnMuaW5kZXhdPy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBzY3JvbGxUb0VsZW1lbnQoe1xuICAgICAgY29udGFpbmVyOiBzY3JvbGxFbGVtZW50LFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLih0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyB7IHNjcm9sbElubGluZU1hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9XG4gICAgICAgIDogeyBzY3JvbGxCbG9ja01hcmdpbjogdGhpcy5zY3JvbGxNYXJnaW4oKSB9KSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0SXNDdXJzb3JEcmFnZ2luZyhpc0RyYWdnaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNDdXJzb3JEcmFnZ2luZyQubmV4dChpc0RyYWdnaW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb1N0YXJ0RGlyZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNjcm9sbE1vZGUoKSA9PT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgIHRoaXMuc2Nyb2xsT25lQ29udGFpbmVyU2l6ZSgnc3RhcnQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxPbmVJdGVtU2l6ZSgnc3RhcnQnKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2Nyb2xsVG9TdGFydEVuZCgpIHtcbiAgICBpZiAodGhpcy5zY3JvbGxNb2RlKCkgPT09ICdjb250YWluZXInKSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUNvbnRhaW5lclNpemUoJ2VuZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjcm9sbE9uZUl0ZW1TaXplKCdlbmQnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXR1cFNjcm9sbExpc3RlbmluZygpIHtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gdGhpcy5zY3JvbGxhYmxlKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRMaXN0KCk7XG5cbiAgICBpZiAoIXNjcm9sbEVsZW1lbnQgfHwgIWVsZW1lbnRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGlzU25hcHBpbmcgPSBmYWxzZTtcbiAgICBsZXQgc25hcFRpbWVvdXQgPSAwO1xuXG4gICAgbWVyZ2UoZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHNjcm9sbEVsZW1lbnQsICd3aGVlbCcpLCBmcm9tRXZlbnQ8VG91Y2hFdmVudD4oc2Nyb2xsRWxlbWVudCwgJ3RvdWNoc3RhcnQnKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIGlzU25hcHBpbmcgPSBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICBtZXJnZShcbiAgICAgIGZyb21FdmVudChzY3JvbGxFbGVtZW50LCAnc2Nyb2xsJyksXG4gICAgICB0aGlzLl9pc0N1cnNvckRyYWdnaW5nJCxcbiAgICAgIGVsZW1lbnRzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoZWxlbWVudHMpKSA/PyBvZihudWxsKSxcbiAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWxzID1cbiAgICAgICAgICAgIGVsZW1lbnRzXG4gICAgICAgICAgICAgID8udG9BcnJheSgpXG4gICAgICAgICAgICAgIC5tYXAoKGUpID0+IGU/LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgLmZpbHRlcigoZSk6IGUgaXMgSFRNTEVsZW1lbnQgPT4gISFlKSA/PyBbXTtcblxuICAgICAgICAgIGlmICghZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5fbGF0ZXN0VmlzaWJpbGl0eVN0YXRlcyQubmV4dChbXSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdGF0ZXMgPSBnZXRFbGVtZW50VmlzaWJsZVN0YXRlcyh7XG4gICAgICAgICAgICBlbGVtZW50czogZWxzLFxuICAgICAgICAgICAgY29udGFpbmVyOiBzY3JvbGxFbGVtZW50LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgcHJvcCA9IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdpbmxpbmVJbnRlcnNlY3Rpb24nIDogJ2Jsb2NrSW50ZXJzZWN0aW9uJztcbiAgICAgICAgICBjb25zdCBzdGF0ZUNsYXNzID0gYGV0LWVsZW1lbnQtLWlzLWludGVyc2VjdGluZ2A7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIHN0YXRlcykge1xuICAgICAgICAgICAgaWYgKHN0YXRlW3Byb3BdID09PSAxMDApIHtcbiAgICAgICAgICAgICAgc3RhdGUuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHN0YXRlQ2xhc3MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhdGUuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHN0YXRlQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvbkNoYW5nZXMgPSBzdGF0ZXMubWFwKChzLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZTogU2Nyb2xsYWJsZUludGVyc2VjdGlvbkNoYW5nZSA9IHtcbiAgICAgICAgICAgICAgZWxlbWVudDogcy5lbGVtZW50LFxuICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25SYXRpbzogc1twcm9wXSAvIDEwMCxcbiAgICAgICAgICAgICAgaXNJbnRlcnNlY3Rpbmc6IHNbcHJvcF0gPT09IDEwMCxcbiAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbkNoYW5nZS5lbWl0KGludGVyc2VjdGlvbkNoYW5nZXMpO1xuXG4gICAgICAgICAgdGhpcy5fbGF0ZXN0VmlzaWJpbGl0eVN0YXRlcyQubmV4dChpbnRlcnNlY3Rpb25DaGFuZ2VzKTtcblxuICAgICAgICAgIGlmIChpc1NuYXBwaW5nIHx8IHRoaXMuX2lzQ3Vyc29yRHJhZ2dpbmckLnZhbHVlIHx8ICF0aGlzLnNuYXAoKSkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMucHJldmlvdXNQYXJ0aWFsSW50ZXJzZWN0aW9uO1xuICAgICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm5leHRQYXJ0aWFsSW50ZXJzZWN0aW9uO1xuICAgICAgICAgIGNvbnN0IHNraXBTbmFwID1cbiAgICAgICAgICAgICFwcmV2IHx8XG4gICAgICAgICAgICAhbmV4dCB8fFxuICAgICAgICAgICAgcHJldi5pbnRlcnNlY3Rpb25SYXRpbyA9PT0gMCB8fFxuICAgICAgICAgICAgbmV4dC5pbnRlcnNlY3Rpb25SYXRpbyA9PT0gMCB8fFxuICAgICAgICAgICAgcHJldi5pbnRlcnNlY3Rpb25SYXRpbyA9PT0gbmV4dC5pbnRlcnNlY3Rpb25SYXRpbztcblxuICAgICAgICAgIGlmIChza2lwU25hcCkgcmV0dXJuO1xuXG4gICAgICAgICAgY29uc3QgaGlnaGVzdEludGVyc2VjdGluZyA9IHByZXYuaW50ZXJzZWN0aW9uUmF0aW8gPiBuZXh0LmludGVyc2VjdGlvblJhdGlvID8gcHJldiA6IG5leHQ7XG4gICAgICAgICAgY29uc3QgZnVsbEludGVyc2VjdGlvbkluZGV4ID0gdGhpcy5oaWdoZXN0VmlzaWJsZUludGVyc2VjdGlvbj8uaW5kZXg7XG5cbiAgICAgICAgICBpZiAoZnVsbEludGVyc2VjdGlvbkluZGV4ID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IGhpZ2hlc3RJbnRlcnNlY3RpbmdJbmRleCA9IGhpZ2hlc3RJbnRlcnNlY3RpbmcuaW5kZXg7XG4gICAgICAgICAgY29uc3Qgb3JpZ2luID0gaGlnaGVzdEludGVyc2VjdGluZ0luZGV4ID4gZnVsbEludGVyc2VjdGlvbkluZGV4ID8gJ2VuZCcgOiAnc3RhcnQnO1xuXG4gICAgICAgICAgc2Nyb2xsVG9FbGVtZW50KHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogc2Nyb2xsRWxlbWVudCxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGhpZ2hlc3RJbnRlcnNlY3RpbmcuZWxlbWVudCxcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5kaXJlY3Rpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJ2lubGluZScgOiAnYmxvY2snLFxuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgc2Nyb2xsQmxvY2tNYXJnaW46IHRoaXMuZGlyZWN0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/IDAgOiB0aGlzLnNjcm9sbE1hcmdpbigpLFxuICAgICAgICAgICAgc2Nyb2xsSW5saW5lTWFyZ2luOiB0aGlzLmRpcmVjdGlvbigpID09PSAnaG9yaXpvbnRhbCcgPyB0aGlzLnNjcm9sbE1hcmdpbigpIDogMCxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlzU25hcHBpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzbmFwVGltZW91dCk7XG5cbiAgICAgICAgICBzbmFwVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlzU25hcHBpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI3Njcm9sbGFibGVcbiAgW2F0dHIucm9sZV09XCJzY3JvbGxhYmxlUm9sZSgpID8/IHVuZGVmaW5lZFwiXG4gIFtldEN1cnNvckRyYWdTY3JvbGxdPVwiY3Vyc29yRHJhZ1Njcm9sbCgpXCJcbiAgW2FsbG93ZWREaXJlY3Rpb25dPVwiZGlyZWN0aW9uKClcIlxuICAoY3Vyc29yRHJhZ1N0YXJ0KT1cInNldElzQ3Vyc29yRHJhZ2dpbmcodHJ1ZSlcIlxuICAoY3Vyc29yRHJhZ0VuZCk9XCJzZXRJc0N1cnNvckRyYWdnaW5nKGZhbHNlKVwiXG4gIGNsYXNzPVwiZXQtc2Nyb2xsYWJsZS1jb250YWluZXItb3V0ZXJcIlxuPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInNjcm9sbGFibGVDbGFzcygpXCIgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgI2ZpcnN0RWxlbWVudCBjbGFzcz1cImV0LXNjcm9sbC1vYnNlcnZlci1maXJzdC1lbGVtZW50XCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8ZGl2ICNsYXN0RWxlbWVudCBjbGFzcz1cImV0LXNjcm9sbC1vYnNlcnZlci1sYXN0LWVsZW1lbnRcIj48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuQGlmIChyZW5kZXJNYXNrcygpKSB7XG4gIDxkaXYgY2xhc3M9XCJldC1zY3JvbGxhYmxlLW1hc2tzXCI+XG4gICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtbWFzayBldC1zY3JvbGxhYmxlLW1hc2stLXN0YXJ0XCI+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtbWFzayBldC1zY3JvbGxhYmxlLW1hc2stLWVuZFwiPjwvZGl2PlxuICA8L2Rpdj5cbn1cblxuQGlmIChyZW5kZXJCdXR0b25zKCkpIHtcbiAgPGRpdiBjbGFzcz1cImV0LXNjcm9sbGFibGUtYnV0dG9uc1wiPlxuICAgIDxidXR0b25cbiAgICAgIChjbGljayk9XCJzY3JvbGxUb1N0YXJ0RGlyZWN0aW9uKClcIlxuICAgICAgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWJ1dHRvbiBldC1zY3JvbGxhYmxlLWJ1dHRvbi0tc3RhcnRcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgPGV0LWNoZXZyb24taWNvbiAvPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgIChjbGljayk9XCJzY3JvbGxUb1N0YXJ0RW5kKClcIlxuICAgICAgY2xhc3M9XCJldC1zY3JvbGxhYmxlLWJ1dHRvbiBldC1zY3JvbGxhYmxlLWJ1dHRvbi0tZW5kXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgID5cbiAgICAgIDxldC1jaGV2cm9uLWljb24gLz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG59XG4iXX0=
|
package/fesm2022/ethlete-cdk.mjs
CHANGED
|
@@ -12132,9 +12132,9 @@ class ScrollableComponent {
|
|
|
12132
12132
|
this.activeElementList = signal(null);
|
|
12133
12133
|
this.elementList = signal(null);
|
|
12134
12134
|
this.containerScrollState = signalElementScrollState(this.scrollable);
|
|
12135
|
-
this.firstElementIntersection = signalElementIntersection(this.firstElement);
|
|
12135
|
+
this.firstElementIntersection = signalElementIntersection(this.firstElement, { root: this.scrollable });
|
|
12136
12136
|
this.firstElementVisibility = signal(null);
|
|
12137
|
-
this.lastElementIntersection = signalElementIntersection(this.lastElement);
|
|
12137
|
+
this.lastElementIntersection = signalElementIntersection(this.lastElement, { root: this.scrollable });
|
|
12138
12138
|
this.lastElementVisibility = signal(null);
|
|
12139
12139
|
this.canScroll = computed(() => {
|
|
12140
12140
|
const dir = this.direction();
|
|
@@ -12380,13 +12380,13 @@ class ScrollableComponent {
|
|
|
12380
12380
|
.subscribe();
|
|
12381
12381
|
}
|
|
12382
12382
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: ScrollableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12383
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: IS_ACTIVE_ELEMENT, descendants: true }, { propertyName: "_elementList", predicate: IS_ELEMENT, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden
|
|
12383
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.2", type: ScrollableComponent, isStandalone: true, selector: "et-scrollable", inputs: { _itemSize: ["itemSize", "_itemSize"], _direction: ["direction", "_direction"], _scrollableRole: ["scrollableRole", "_scrollableRole"], _scrollableClass: ["scrollableClass", "_scrollableClass"], _renderMasks: ["renderMasks", "_renderMasks", booleanAttribute], _renderButtons: ["renderButtons", "_renderButtons", booleanAttribute], _renderScrollbars: ["renderScrollbars", "_renderScrollbars", booleanAttribute], _stickyButtons: ["stickyButtons", "_stickyButtons", booleanAttribute], _cursorDragScroll: ["cursorDragScroll", "_cursorDragScroll", booleanAttribute], _disableActiveElementScrolling: ["disableActiveElementScrolling", "_disableActiveElementScrolling", booleanAttribute], _scrollMode: ["scrollMode", "_scrollMode"], _snap: ["snap", "_snap", booleanAttribute], _scrollMargin: ["scrollMargin", "_scrollMargin", numberAttribute] }, outputs: { scrollStateChange: "scrollStateChange", intersectionChange: "intersectionChange" }, host: { classAttribute: "et-scrollable" }, queries: [{ propertyName: "_activeElementList", predicate: IS_ACTIVE_ELEMENT, descendants: true }, { propertyName: "_elementList", predicate: IS_ELEMENT, descendants: true }], viewQueries: [{ propertyName: "_scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "_firstElement", first: true, predicate: ["firstElement"], descendants: true, static: true }, { propertyName: "_lastElement", first: true, predicate: ["lastElement"], descendants: true, static: true }], ngImport: i0, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;block-size:100%;inline-size:1px;pointer-events:none}.et-scrollable .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"], dependencies: [{ kind: "directive", type: CursorDragScrollDirective, selector: "[etCursorDragScroll]", inputs: ["etCursorDragScroll", "allowedDirection"], outputs: ["cursorDragStart", "cursorDragMove", "cursorDragEnd"], exportAs: ["etCursorDragScroll"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ChevronIconComponent, selector: "et-chevron-icon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
12384
12384
|
}
|
|
12385
12385
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.2", ngImport: i0, type: ScrollableComponent, decorators: [{
|
|
12386
12386
|
type: Component,
|
|
12387
12387
|
args: [{ selector: 'et-scrollable', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CursorDragScrollDirective, ObserveScrollStateDirective, NgClass, LetDirective, ChevronIconComponent], host: {
|
|
12388
12388
|
class: 'et-scrollable',
|
|
12389
|
-
}, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden
|
|
12389
|
+
}, template: "<div\n #scrollable\n [attr.role]=\"scrollableRole() ?? undefined\"\n [etCursorDragScroll]=\"cursorDragScroll()\"\n [allowedDirection]=\"direction()\"\n (cursorDragStart)=\"setIsCursorDragging(true)\"\n (cursorDragEnd)=\"setIsCursorDragging(false)\"\n class=\"et-scrollable-container-outer\"\n>\n <div [ngClass]=\"scrollableClass()\" class=\"et-scrollable-container\">\n <div #firstElement class=\"et-scroll-observer-first-element\"></div>\n <ng-content />\n <div #lastElement class=\"et-scroll-observer-last-element\"></div>\n </div>\n</div>\n\n@if (renderMasks()) {\n <div class=\"et-scrollable-masks\">\n <div class=\"et-scrollable-mask et-scrollable-mask--start\"></div>\n <div class=\"et-scrollable-mask et-scrollable-mask--end\"></div>\n </div>\n}\n\n@if (renderButtons()) {\n <div class=\"et-scrollable-buttons\">\n <button\n (click)=\"scrollToStartDirection()\"\n class=\"et-scrollable-button et-scrollable-button--start\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n <button\n (click)=\"scrollToStartEnd()\"\n class=\"et-scrollable-button et-scrollable-button--end\"\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n >\n <et-chevron-icon />\n </button>\n </div>\n}\n", styles: [".et-scrollable{--mask: #121212 0, transparent 100%;--mask-size: 25px;--_auto-size: min-content;--_flow: column;display:grid;position:relative}.et-scrollable[item-size=same]{--_auto-size: 1fr}.et-scrollable[item-size=full]{--_auto-size: 100%}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer{scrollbar-width:none}.et-scrollable[render-scrollbars=false] .et-scrollable-container-outer::-webkit-scrollbar{display:none}.et-scrollable[direction=horizontal] .et-scrollable-container-outer{overflow-x:auto;overflow-y:hidden}.et-scrollable[direction=horizontal] .et-scrollable-container{grid-auto-columns:var(--_auto-size)}.et-scrollable[direction=horizontal] .et-scrollable-mask,.et-scrollable[direction=horizontal] .et-scrollable-button{inline-size:var(--mask-size);block-size:100%}.et-scrollable[direction=horizontal] .et-scrollable-mask--start,.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:0;inset-inline:0 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--end,.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:0;inset-inline:calc(100% - 40px) 0}.et-scrollable[direction=horizontal] .et-scrollable-mask--start{background:linear-gradient(to right,var(--mask))}.et-scrollable[direction=horizontal] .et-scrollable-mask--end{background:linear-gradient(to left,var(--mask));inset-inline:calc(100% - var(--mask-size)) 100%}.et-scrollable[direction=horizontal] .et-scrollable-button--start{inset-block-start:calc(50% - 20px);transform:rotate(-90deg)}.et-scrollable[direction=horizontal] .et-scrollable-button--end{inset-block-start:calc(50% - 20px);transform:rotate(90deg)}.et-scrollable[direction=vertical]{--_flow: row}.et-scrollable[direction=vertical] .et-scrollable-container-outer{overflow-x:hidden;overflow-y:auto}.et-scrollable[direction=vertical] .et-scrollable-container{grid-auto-rows:var(--_auto-size)}.et-scrollable[direction=vertical] .et-scrollable-mask,.et-scrollable[direction=vertical] .et-scrollable-button{block-size:var(--mask-size);inline-size:100%}.et-scrollable[direction=vertical] .et-scrollable-mask--start,.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-block-start:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--end,.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-block-end:0;inset-inline-start:0}.et-scrollable[direction=vertical] .et-scrollable-mask--start{background:linear-gradient(to bottom,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-mask--end{background:linear-gradient(to top,var(--mask))}.et-scrollable[direction=vertical] .et-scrollable-button--start{inset-inline-start:calc(50% - 20px);transform:rotate(0)}.et-scrollable[direction=vertical] .et-scrollable-button--end{inset-inline-start:calc(50% - 20px);transform:rotate(180deg)}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-masks .et-scrollable-mask--start,.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{opacity:1}.et-scrollable:not(.et-scrollable--is-at-start) .et-scrollable-buttons .et-scrollable-button--start{pointer-events:all}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-masks .et-scrollable-mask--end,.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{opacity:1}.et-scrollable:not(.et-scrollable--is-at-end) .et-scrollable-buttons .et-scrollable-button--end{pointer-events:all}.et-scrollable .et-scrollable-container-outer{overflow:auto;display:grid;grid-row:1/1;grid-column:1/1}.et-scrollable .et-scroll-observer-first-element,.et-scrollable .et-scroll-observer-last-element{position:absolute;block-size:100%;inline-size:1px;pointer-events:none}.et-scrollable .et-scroll-observer-first-element{inset-inline-start:1px}.et-scrollable .et-scroll-observer-last-element{inset-inline-end:1px}.et-scrollable .et-scrollable-container{display:grid;grid-auto-flow:var(--_flow);position:relative}.et-scrollable .et-scrollable-masks,.et-scrollable .et-scrollable-buttons{grid-row:1/1;grid-column:1/1;pointer-events:none}.et-scrollable .et-scrollable-masks .et-scrollable-mask,.et-scrollable .et-scrollable-masks .et-scrollable-button,.et-scrollable .et-scrollable-buttons .et-scrollable-mask,.et-scrollable .et-scrollable-buttons .et-scrollable-button{position:absolute;opacity:0}.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-mask,.et-scrollable.et-scrollable--can-scroll.et-scrollable--enable-overlay-animations .et-scrollable-button{transition:opacity .3s var(--ease-5)}.et-scrollable .et-scrollable-buttons .et-scrollable-button{background:transparent;border:none;padding:12px;inline-size:40px;block-size:40px;border-radius:4px;cursor:pointer}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-chevron-icon{pointer-events:none}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--start{inset-inline:0 0}.et-scrollable .et-scrollable-buttons .et-scrollable-button .et-scrollable-button--end{inset-inline:calc(100% - 40px) 0}.et-scrollable[sticky-buttons=true]{--_sticky-margin: 10%}.et-scrollable[sticky-buttons=true] .et-scrollable-button{position:sticky}.et-scrollable[sticky-buttons=true][direction=horizontal] .et-scrollable-buttons{margin-block:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons{margin-inline:var(--_sticky-margin)}.et-scrollable[sticky-buttons=true][direction=vertical] .et-scrollable-buttons .et-scrollable-button--end{inset-block-start:100%}\n"] }]
|
|
12390
12390
|
}], ctorParameters: () => [], propDecorators: { _itemSize: [{
|
|
12391
12391
|
type: Input,
|
|
12392
12392
|
args: [{ alias: 'itemSize' }]
|