@edm-sdui/sdui 1.0.45 → 1.0.46
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/esm2022/lib/components/uicomponent/tags-row/tags-row.component.mjs +47 -17
- package/fesm2022/edm-sdui-sdui.mjs +46 -16
- package/fesm2022/edm-sdui-sdui.mjs.map +1 -1
- package/lib/components/uicomponent/tags-row/tags-row.component.d.ts +7 -3
- package/lib/components/uicomponent/tags-row/tags-row.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/edm-sdui-sdui-1.0.45.tgz +0 -0
|
@@ -43,25 +43,57 @@ export class TagsRowComponent {
|
|
|
43
43
|
}
|
|
44
44
|
ngAfterViewInit() {
|
|
45
45
|
requestAnimationFrame(() => {
|
|
46
|
+
this.measureLayout();
|
|
46
47
|
this.updateFixedState();
|
|
47
48
|
this.cdr.detectChanges();
|
|
49
|
+
// In production, fonts/images/header can change heights after initial paint,
|
|
50
|
+
// which shifts the trigger point and causes a visible "jump".
|
|
51
|
+
// Observe size changes and re-measure.
|
|
52
|
+
const el = this.tagsRowRef?.nativeElement;
|
|
53
|
+
if (el && typeof ResizeObserver !== 'undefined') {
|
|
54
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
55
|
+
this.measureLayout(true);
|
|
56
|
+
this.updateFixedState();
|
|
57
|
+
this.cdr.detectChanges();
|
|
58
|
+
});
|
|
59
|
+
this.resizeObserver.observe(el);
|
|
60
|
+
}
|
|
48
61
|
});
|
|
49
62
|
}
|
|
63
|
+
ngOnDestroy() {
|
|
64
|
+
this.resizeObserver?.disconnect();
|
|
65
|
+
this.resizeObserver = undefined;
|
|
66
|
+
}
|
|
50
67
|
onWindowScroll() {
|
|
51
68
|
this.updateFixedState();
|
|
52
|
-
console.log('versao 4433');
|
|
53
69
|
}
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
|
|
70
|
+
measureLayout(force = false) {
|
|
71
|
+
const hostEl = this.hostRef.nativeElement;
|
|
72
|
+
const tagsEl = this.tagsRowRef?.nativeElement;
|
|
73
|
+
// Height spacer: keep the host reserving space so the content below doesn’t jump
|
|
74
|
+
if (tagsEl) {
|
|
75
|
+
const h = tagsEl.getBoundingClientRect().height;
|
|
76
|
+
if (force || !this.lastMeasuredHeight || Math.abs(h - this.lastMeasuredHeight) > 0.5) {
|
|
77
|
+
this.lastMeasuredHeight = h;
|
|
78
|
+
this.hostMinHeight = h;
|
|
79
|
+
}
|
|
60
80
|
}
|
|
61
|
-
|
|
62
|
-
|
|
81
|
+
// Trigger position: only capture/refresh when not fixed, because fixed changes the rect
|
|
82
|
+
if (!this.isFixed) {
|
|
83
|
+
const rect = hostEl.getBoundingClientRect();
|
|
84
|
+
const docTop = rect.top + window.scrollY;
|
|
85
|
+
if (force || !this.lastMeasuredDocTop || Math.abs(docTop - this.lastMeasuredDocTop) > 0.5) {
|
|
86
|
+
this.lastMeasuredDocTop = docTop;
|
|
87
|
+
this.initialTop = docTop;
|
|
88
|
+
}
|
|
63
89
|
}
|
|
64
|
-
|
|
90
|
+
}
|
|
91
|
+
updateFixedState() {
|
|
92
|
+
this.measureLayout();
|
|
93
|
+
const offset = this.getStickyOffset();
|
|
94
|
+
const isMobile = window.matchMedia('(max-width: 565px)').matches;
|
|
95
|
+
const targetTop = isMobile ? 60 : offset;
|
|
96
|
+
const triggerPoint = (this.initialTop ?? 0) - offset;
|
|
65
97
|
const shouldFix = window.scrollY >= triggerPoint;
|
|
66
98
|
this.canFix = shouldFix;
|
|
67
99
|
if (shouldFix) {
|
|
@@ -83,6 +115,7 @@ export class TagsRowComponent {
|
|
|
83
115
|
else {
|
|
84
116
|
this.isFixed = false;
|
|
85
117
|
this.setTagsRowTop(undefined);
|
|
118
|
+
this.measureLayout(true);
|
|
86
119
|
}
|
|
87
120
|
}
|
|
88
121
|
getStickyOffset() {
|
|
@@ -90,10 +123,7 @@ export class TagsRowComponent {
|
|
|
90
123
|
const parsed = parseInt(variable || '', 10);
|
|
91
124
|
if (!isNaN(parsed))
|
|
92
125
|
return parsed;
|
|
93
|
-
return
|
|
94
|
-
}
|
|
95
|
-
getStickyTop() {
|
|
96
|
-
return window.matchMedia('(max-width: 565px)').matches ? 58 : 78;
|
|
126
|
+
return 74; // fallback to navbar height
|
|
97
127
|
}
|
|
98
128
|
setTagsRowTop(value) {
|
|
99
129
|
const el = this.tagsRowRef?.nativeElement;
|
|
@@ -106,11 +136,11 @@ export class TagsRowComponent {
|
|
|
106
136
|
this.renderer.setStyle(el, 'top', `${value}px`);
|
|
107
137
|
}
|
|
108
138
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowComponent, deps: [{ token: 'uiComponent' }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
109
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TagsRowComponent, isStandalone: false, selector: "edm-sdui-tags-row", host: { listeners: { "window:scroll": "onWindowScroll()" }, properties: { "class.tags-row--fixed": "this.isFixed", "class.tags-row--can-fix": "this.canFix", "style.min-height.px": "this.hostMinHeight" } }, viewQueries: [{ propertyName: "tagsRowRef", first: true, predicate: ["tagsRowElement"], descendants: true }], ngImport: i0, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:78px;left:32px;right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{
|
|
139
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TagsRowComponent, isStandalone: false, selector: "edm-sdui-tags-row", host: { listeners: { "window:scroll": "onWindowScroll()" }, properties: { "class.tags-row--fixed": "this.isFixed", "class.tags-row--can-fix": "this.canFix", "style.min-height.px": "this.hostMinHeight" } }, viewQueries: [{ propertyName: "tagsRowRef", first: true, predicate: ["tagsRowElement"], descendants: true }], ngImport: i0, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:var(--sdui-tags-row-top, 78px);left:var(--sdui-tags-row-left, 32px);right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{left:var(--sdui-tags-row-left-mobile, 0);top:var(--sdui-tags-row-top-mobile, var(--sdui-tags-row-top, 78px))}}:host.tags-row--can-fix .tags-row{background:var(--bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 4px 16px #0003}\n"], dependencies: [{ kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
|
|
110
140
|
}
|
|
111
141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowComponent, decorators: [{
|
|
112
142
|
type: Component,
|
|
113
|
-
args: [{ selector: 'edm-sdui-tags-row', standalone: false, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:78px;left:32px;right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{
|
|
143
|
+
args: [{ selector: 'edm-sdui-tags-row', standalone: false, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:var(--sdui-tags-row-top, 78px);left:var(--sdui-tags-row-left, 32px);right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{left:var(--sdui-tags-row-left-mobile, 0);top:var(--sdui-tags-row-top-mobile, var(--sdui-tags-row-top, 78px))}}:host.tags-row--can-fix .tags-row{background:var(--bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 4px 16px #0003}\n"] }]
|
|
114
144
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
115
145
|
type: Inject,
|
|
116
146
|
args: ['uiComponent']
|
|
@@ -130,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
130
160
|
type: HostListener,
|
|
131
161
|
args: ['window:scroll']
|
|
132
162
|
}] } });
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC90YWdzLXJvdy90YWdzLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3RhZ3Mtcm93L3RhZ3Mtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTVJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQVExRCxNQUFNLE9BQU8sZ0JBQWdCO0lBUzNCLFlBQ2dDLFdBQXdCLEVBQzlDLFFBQWtCLEVBQ2xCLE9BQWdDLEVBQ2hDLEdBQXNCLEVBQ3RCLFFBQW1CO1FBSkcsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBYlMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNkLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFHdkQsaUJBQVksR0FBRyxtQkFBbUIsQ0FBQztRQUMzQixrQkFBYSxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0lBUzFELENBQUM7SUFFSixJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMs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QUMsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7K0dBbkhVLGdCQUFnQixrQkFVakIsYUFBYTttR0FWWixnQkFBZ0IsMFlDZDdCLCtXQU9BOzs0RkRPYSxnQkFBZ0I7a0JBTjVCLFNBQVM7K0JBQ0UsbUJBQW1CLGNBR2pCLEtBQUs7OzBCQVlkLE1BQU07MkJBQUMsYUFBYTtpSkFUZSxPQUFPO3NCQUE1QyxXQUFXO3VCQUFDLHVCQUF1QjtnQkFDSSxNQUFNO3NCQUE3QyxXQUFXO3VCQUFDLHlCQUF5QjtnQkFDRixhQUFhO3NCQUFoRCxXQUFXO3VCQUFDLHFCQUFxQjtnQkFDTCxVQUFVO3NCQUF0QyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFtRDNCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvciwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVJQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aWNvbXBvbmVudCc7XG5cblxuaW1wb3J0IHsgVUlDb21wb25lbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL2VudW1zL3VpY29tcG9uZW50LXR5cGUnO1xuaW1wb3J0IHsgVUlUYWcgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3VpY29tcG9zaXRpb24vbW9kZWxzL3VpdGFnJztcbmltcG9ydCB7IFRhZ3NSb3dUYWdDb21wb25lbnQgfSBmcm9tICcuL3RhZy90YWcuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWRtLXNkdWktdGFncy1yb3cnLFxuICBzdHlsZVVybDogJy4vdGFncy1yb3cuY29tcG9uZW50LnNjc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFncy1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgVGFnc1Jvd0NvbXBvbmVudCB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFncy1yb3ctLWZpeGVkJykgaXNGaXhlZCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhZ3Mtcm93LS1jYW4tZml4JykgY2FuRml4ID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnc3R5bGUubWluLWhlaWdodC5weCcpIGhvc3RNaW5IZWlnaHQ/OiBudW1iZXI7XG4gIEBWaWV3Q2hpbGQoJ3RhZ3NSb3dFbGVtZW50JykgdGFnc1Jvd1JlZj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICB0YWdDb21wb25lbnQgPSBUYWdzUm93VGFnQ29tcG9uZW50O1xuICBwcml2YXRlIGluamVjdG9yQ2FjaGUgPSBuZXcgTWFwPHN0cmluZyB8IG51bWJlciwgSW5qZWN0b3I+KCk7XG4gIHByaXZhdGUgaW5pdGlhbFRvcD86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCd1aUNvbXBvbmVudCcpIHB1YmxpYyB1aUNvbXBvbmVudDogVUlDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICkge31cblxuICBnZXQgdGFncygpOiBVSVRhZ1tdIHtcbiAgICByZXR1cm4gdGhpcy51aUNvbXBvbmVudC50YWdzID8/IFtdO1xuICB9XG5cbiAgdHJhY2tCeUxhYmVsKGluZGV4OiBudW1iZXIsIHRhZzogVUlUYWcpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0YWcubGFiZWwgPz8gaW5kZXg7XG4gIH1cblxuICBjcmVhdGVJbmplY3Rvcih0YWc6IFVJVGFnLCBpbmRleDogbnVtYmVyKTogSW5qZWN0b3Ige1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VGFnS2V5KHRhZywgaW5kZXgpO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuaW5qZWN0b3JDYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgY29tcG9uZW50OiBVSUNvbXBvbmVudCA9IHtcbiAgICAgIHR5cGU6IFVJQ29tcG9uZW50VHlwZS5UQUcsXG4gICAgICBlbGVtZW50OiB0YWcsXG4gICAgfTtcblxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogJ3VpQ29tcG9uZW50JywgdXNlVmFsdWU6IGNvbXBvbmVudCB9XSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgICB0aGlzLmluamVjdG9yQ2FjaGUuc2V0KGtleSwgaW5qZWN0b3IpO1xuICAgIHJldHVybiBpbmplY3RvcjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFnS2V5KHRhZzogVUlUYWcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0YWcubGFiZWwgPz8gKHRhZyBhcyBhbnkpPy5hY3Rpb24/LnBhcmFtID8/IGluZGV4O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUZpeGVkU3RhdGUoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBvbldpbmRvd1Njcm9sbCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUZpeGVkU3RhdGUoKTtcbiAgICBjb25zb2xlLmxvZygndmVyc2FvIDQ0MzMnKVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaXhlZFN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuZ2V0U3RpY2t5T2Zmc2V0KCk7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHRhcmdldFRvcCA9IHRoaXMuZ2V0U3RpY2t5VG9wKCk7XG5cbiAgICBpZiAoIXRoaXMuaW5pdGlhbFRvcCkge1xuICAgICAgdGhpcy5pbml0aWFsVG9wID0gcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaG9zdE1pbkhlaWdodCkge1xuICAgICAgdGhpcy5ob3N0TWluSGVpZ2h0ID0gcmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZ2dlclBvaW50ID0gKHRoaXMuaW5pdGlhbFRvcCA/PyAwKSAtIG9mZnNldCArIDg7XG4gICAgY29uc3Qgc2hvdWxkRml4ID0gd2luZG93LnNjcm9sbFkgPj0gdHJpZ2dlclBvaW50O1xuICAgIHRoaXMuY2FuRml4ID0gc2hvdWxkRml4O1xuICAgIGlmIChzaG91bGRGaXgpIHtcbiAgICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7XG4gICAgICAgIHRoaXMuaXNGaXhlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh0YXJnZXRUb3ApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNGaXhlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWdzUm93VG9wKHRhcmdldFRvcCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh0YXJnZXRUb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRml4ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RpY2t5T2Zmc2V0KCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFyaWFibGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zZHVpLXN0aWNreS1vZmZzZXQnKTtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YXJpYWJsZSB8fCAnJywgMTApO1xuICAgIGlmICghaXNOYU4ocGFyc2VkKSkgcmV0dXJuIHBhcnNlZDtcbiAgICByZXR1cm4gNzI7IC8vIGZhbGxiYWNrIHRvIG5hdmJhciBoZWlnaHRcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RpY2t5VG9wKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA1NjVweCknKS5tYXRjaGVzID8gNTggOiA3ODtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFnc1Jvd1RvcCh2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy50YWdzUm93UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3RvcCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsLCAndG9wJywgYCR7dmFsdWV9cHhgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhZ3Mtcm93XCIgI3RhZ3NSb3dFbGVtZW50IFtjbGFzcy50YWdzLXJvdy1maXhlZF09XCJpc0ZpeGVkXCIgKm5nSWY9XCJ1aUNvbXBvbmVudFwiIFtlZG1TZHVpVmlld109XCJ1aUNvbXBvbmVudC5lbGVtZW50XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhZyBvZiB0YWdzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5TGFiZWxcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJ0YWdDb21wb25lbnQ7IGluamVjdG9yOiBjcmVhdGVJbmplY3Rvcih0YWcsIGkpXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC90YWdzLXJvdy90YWdzLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3RhZ3Mtcm93L3RhZ3Mtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBYSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXZKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQVExRCxNQUFNLE9BQU8sZ0JBQWdCO0lBWTNCLFlBQ2dDLFdBQXdCLEVBQzlDLFFBQWtCLEVBQ2xCLE9BQWdDLEVBQ2hDLEdBQXNCLEVBQ3RCLFFBQW1CO1FBSkcsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBaEJTLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBR3ZELGlCQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQVkxRCxDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFD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SUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBQ2hCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0F2SlUsZ0JBQWdCLGtCQWFqQixhQUFhO21HQWJaLGdCQUFnQiwwWUNkN0IsK1dBT0E7OzRGRE9hLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsS0FBSzs7MEJBZWQsTUFBTTsyQkFBQyxhQUFhO2lKQVplLE9BQU87c0JBQTVDLFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNJLE1BQU07c0JBQTdDLFdBQVc7dUJBQUMseUJBQXlCO2dCQUNGLGFBQWE7c0JBQWhELFdBQVc7dUJBQUMscUJBQXFCO2dCQUNMLFVBQVU7c0JBQXRDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQXlFM0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVSUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9tb2RlbHMvdWljb21wb25lbnQnO1xuXG5cbmltcG9ydCB7IFVJQ29tcG9uZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9lbnVtcy91aWNvbXBvbmVudC10eXBlJztcbmltcG9ydCB7IFVJVGFnIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aXRhZyc7XG5pbXBvcnQgeyBUYWdzUm93VGFnQ29tcG9uZW50IH0gZnJvbSAnLi90YWcvdGFnLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VkbS1zZHVpLXRhZ3Mtcm93JyxcbiAgc3R5bGVVcmw6ICcuL3RhZ3Mtcm93LmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZ3Mtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NSb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhZ3Mtcm93LS1maXhlZCcpIGlzRml4ZWQgPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWdzLXJvdy0tY2FuLWZpeCcpIGNhbkZpeCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi1oZWlnaHQucHgnKSBob3N0TWluSGVpZ2h0PzogbnVtYmVyO1xuICBAVmlld0NoaWxkKCd0YWdzUm93RWxlbWVudCcpIHRhZ3NSb3dSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgdGFnQ29tcG9uZW50ID0gVGFnc1Jvd1RhZ0NvbXBvbmVudDtcbiAgcHJpdmF0ZSBpbmplY3RvckNhY2hlID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIEluamVjdG9yPigpO1xuICBwcml2YXRlIGluaXRpYWxUb3A/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZWRIZWlnaHQ/OiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdE1lYXN1cmVkRG9jVG9wPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ3VpQ29tcG9uZW50JykgcHVibGljIHVpQ29tcG9uZW50OiBVSUNvbXBvbmVudCxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIGdldCB0YWdzKCk6IFVJVGFnW10ge1xuICAgIHJldHVybiB0aGlzLnVpQ29tcG9uZW50LnRhZ3MgPz8gW107XG4gIH1cblxuICB0cmFja0J5TGFiZWwoaW5kZXg6IG51bWJlciwgdGFnOiBVSVRhZyk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRhZy5sYWJlbCA/PyBpbmRleDtcbiAgfVxuXG4gIGNyZWF0ZUluamVjdG9yKHRhZzogVUlUYWcsIGluZGV4OiBudW1iZXIpOiBJbmplY3RvciB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUYWdLZXkodGFnLCBpbmRleCk7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5pbmplY3RvckNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb21wb25lbnQ6IFVJQ29tcG9uZW50ID0ge1xuICAgICAgdHlwZTogVUlDb21wb25lbnRUeXBlLlRBRyxcbiAgICAgIGVsZW1lbnQ6IHRhZyxcbiAgICB9O1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiAndWlDb21wb25lbnQnLCB1c2VWYWx1ZTogY29tcG9uZW50IH1dLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICAgIHRoaXMuaW5qZWN0b3JDYWNoZS5zZXQoa2V5LCBpbmplY3Rvcik7XG4gICAgcmV0dXJuIGluamVjdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWdLZXkodGFnOiBVSVRhZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRhZy5sYWJlbCA/PyAodGFnIGFzIGFueSk/LmFjdGlvbj8ucGFyYW0gPz8gaW5kZXg7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMubWVhc3VyZUxheW91dCgpO1xuICAgICAgdGhpcy51cGRhdGVGaXhlZFN0YXRlKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIEluIHByb2R1Y3Rpb24sIGZvbnRzL2ltYWdlcy9oZWFkZXIgY2FuIGNoYW5nZSBoZWlnaHRzIGFmdGVyIGluaXRpYWwgcGFpbnQsXG4gICAgICAvLyB3aGljaCBzaGlmdHMgdGhlIHRyaWdnZXIgcG9pbnQgYW5kIGNhdXNlcyBhIHZpc2libGUgXCJqdW1wXCIuXG4gICAgICAvLyBPYnNlcnZlIHNpemUgY2hhbmdlcyBhbmQgcmUtbWVhc3VyZS5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YWdzUm93UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGVsICYmIHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tZWFzdXJlTGF5b3V0KHRydWUpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRml4ZWRTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBvbldpbmRvd1Njcm9sbCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUZpeGVkU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVhc3VyZUxheW91dChmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdEVsID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGFnc0VsID0gdGhpcy50YWdzUm93UmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gSGVpZ2h0IHNwYWNlcjoga2VlcCB0aGUgaG9zdCByZXNlcnZpbmcgc3BhY2Ugc28gdGhlIGNvbnRlbnQgYmVsb3cgZG9lc27igJl0IGp1bXBcbiAgICBpZiAodGFnc0VsKSB7XG4gICAgICBjb25zdCBoID0gdGFnc0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIGlmIChmb3JjZSB8fCAhdGhpcy5sYXN0TWVhc3VyZWRIZWlnaHQgfHwgTWF0aC5hYnMoaCAtIHRoaXMubGFzdE1lYXN1cmVkSGVpZ2h0KSA+IDAuNSkge1xuICAgICAgICB0aGlzLmxhc3RNZWFzdXJlZEhlaWdodCA9IGg7XG4gICAgICAgIHRoaXMuaG9zdE1pbkhlaWdodCA9IGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBwb3NpdGlvbjogb25seSBjYXB0dXJlL3JlZnJlc2ggd2hlbiBub3QgZml4ZWQsIGJlY2F1c2UgZml4ZWQgY2hhbmdlcyB0aGUgcmVjdFxuICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7XG4gICAgICBjb25zdCByZWN0ID0gaG9zdEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZG9jVG9wID0gcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgIGlmIChmb3JjZSB8fCAhdGhpcy5sYXN0TWVhc3VyZWREb2NUb3AgfHwgTWF0aC5hYnMoZG9jVG9wIC0gdGhpcy5sYXN0TWVhc3VyZWREb2NUb3ApID4gMC41KSB7XG4gICAgICAgIHRoaXMubGFzdE1lYXN1cmVkRG9jVG9wID0gZG9jVG9wO1xuICAgICAgICB0aGlzLmluaXRpYWxUb3AgPSBkb2NUb3A7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaXhlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubWVhc3VyZUxheW91dCgpO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXRTdGlja3lPZmZzZXQoKTtcbiAgICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA1NjVweCknKS5tYXRjaGVzO1xuICAgIGNvbnN0IHRhcmdldFRvcCA9IGlzTW9iaWxlID8gNjAgOiBvZmZzZXQ7XG5cbiAgICBjb25zdCB0cmlnZ2VyUG9pbnQgPSAodGhpcy5pbml0aWFsVG9wID8/IDApIC0gb2Zmc2V0O1xuICAgIGNvbnN0IHNob3VsZEZpeCA9IHdpbmRvdy5zY3JvbGxZID49IHRyaWdnZXJQb2ludDtcbiAgICB0aGlzLmNhbkZpeCA9IHNob3VsZEZpeDtcbiAgICBpZiAoc2hvdWxkRml4KSB7XG4gICAgICBpZiAoIXRoaXMuaXNGaXhlZCkge1xuICAgICAgICB0aGlzLmlzRml4ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldFRhZ3NSb3dUb3AodGFyZ2V0VG9wKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmlzRml4ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh0YXJnZXRUb3ApO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFRhZ3NSb3dUb3AodGFyZ2V0VG9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0ZpeGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldFRhZ3NSb3dUb3AodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMubWVhc3VyZUxheW91dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFN0aWNreU9mZnNldCgpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0tc2R1aS1zdGlja3ktb2Zmc2V0Jyk7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFyaWFibGUgfHwgJycsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHJldHVybiBwYXJzZWQ7XG4gICAgcmV0dXJuIDc0OyAvLyBmYWxsYmFjayB0byBuYXZiYXIgaGVpZ2h0XG4gIH1cblxuICBwcml2YXRlIHNldFRhZ3NSb3dUb3AodmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMudGFnc1Jvd1JlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICd0b3AnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbCwgJ3RvcCcsIGAke3ZhbHVlfXB4YCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWdzLXJvd1wiICN0YWdzUm93RWxlbWVudCBbY2xhc3MudGFncy1yb3ctZml4ZWRdPVwiaXNGaXhlZFwiICpuZ0lmPVwidWlDb21wb25lbnRcIiBbZWRtU2R1aVZpZXddPVwidWlDb21wb25lbnQuZWxlbWVudFwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUxhYmVsXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwidGFnQ29tcG9uZW50OyBpbmplY3RvcjogY3JlYXRlSW5qZWN0b3IodGFnLCBpKVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
|
|
@@ -3918,25 +3918,57 @@ class TagsRowComponent {
|
|
|
3918
3918
|
}
|
|
3919
3919
|
ngAfterViewInit() {
|
|
3920
3920
|
requestAnimationFrame(() => {
|
|
3921
|
+
this.measureLayout();
|
|
3921
3922
|
this.updateFixedState();
|
|
3922
3923
|
this.cdr.detectChanges();
|
|
3924
|
+
// In production, fonts/images/header can change heights after initial paint,
|
|
3925
|
+
// which shifts the trigger point and causes a visible "jump".
|
|
3926
|
+
// Observe size changes and re-measure.
|
|
3927
|
+
const el = this.tagsRowRef?.nativeElement;
|
|
3928
|
+
if (el && typeof ResizeObserver !== 'undefined') {
|
|
3929
|
+
this.resizeObserver = new ResizeObserver(() => {
|
|
3930
|
+
this.measureLayout(true);
|
|
3931
|
+
this.updateFixedState();
|
|
3932
|
+
this.cdr.detectChanges();
|
|
3933
|
+
});
|
|
3934
|
+
this.resizeObserver.observe(el);
|
|
3935
|
+
}
|
|
3923
3936
|
});
|
|
3924
3937
|
}
|
|
3938
|
+
ngOnDestroy() {
|
|
3939
|
+
this.resizeObserver?.disconnect();
|
|
3940
|
+
this.resizeObserver = undefined;
|
|
3941
|
+
}
|
|
3925
3942
|
onWindowScroll() {
|
|
3926
3943
|
this.updateFixedState();
|
|
3927
|
-
console.log('versao 4433');
|
|
3928
3944
|
}
|
|
3929
|
-
|
|
3930
|
-
const
|
|
3931
|
-
const
|
|
3932
|
-
|
|
3933
|
-
if (
|
|
3934
|
-
|
|
3945
|
+
measureLayout(force = false) {
|
|
3946
|
+
const hostEl = this.hostRef.nativeElement;
|
|
3947
|
+
const tagsEl = this.tagsRowRef?.nativeElement;
|
|
3948
|
+
// Height spacer: keep the host reserving space so the content below doesn’t jump
|
|
3949
|
+
if (tagsEl) {
|
|
3950
|
+
const h = tagsEl.getBoundingClientRect().height;
|
|
3951
|
+
if (force || !this.lastMeasuredHeight || Math.abs(h - this.lastMeasuredHeight) > 0.5) {
|
|
3952
|
+
this.lastMeasuredHeight = h;
|
|
3953
|
+
this.hostMinHeight = h;
|
|
3954
|
+
}
|
|
3935
3955
|
}
|
|
3936
|
-
|
|
3937
|
-
|
|
3956
|
+
// Trigger position: only capture/refresh when not fixed, because fixed changes the rect
|
|
3957
|
+
if (!this.isFixed) {
|
|
3958
|
+
const rect = hostEl.getBoundingClientRect();
|
|
3959
|
+
const docTop = rect.top + window.scrollY;
|
|
3960
|
+
if (force || !this.lastMeasuredDocTop || Math.abs(docTop - this.lastMeasuredDocTop) > 0.5) {
|
|
3961
|
+
this.lastMeasuredDocTop = docTop;
|
|
3962
|
+
this.initialTop = docTop;
|
|
3963
|
+
}
|
|
3938
3964
|
}
|
|
3939
|
-
|
|
3965
|
+
}
|
|
3966
|
+
updateFixedState() {
|
|
3967
|
+
this.measureLayout();
|
|
3968
|
+
const offset = this.getStickyOffset();
|
|
3969
|
+
const isMobile = window.matchMedia('(max-width: 565px)').matches;
|
|
3970
|
+
const targetTop = isMobile ? 60 : offset;
|
|
3971
|
+
const triggerPoint = (this.initialTop ?? 0) - offset;
|
|
3940
3972
|
const shouldFix = window.scrollY >= triggerPoint;
|
|
3941
3973
|
this.canFix = shouldFix;
|
|
3942
3974
|
if (shouldFix) {
|
|
@@ -3958,6 +3990,7 @@ class TagsRowComponent {
|
|
|
3958
3990
|
else {
|
|
3959
3991
|
this.isFixed = false;
|
|
3960
3992
|
this.setTagsRowTop(undefined);
|
|
3993
|
+
this.measureLayout(true);
|
|
3961
3994
|
}
|
|
3962
3995
|
}
|
|
3963
3996
|
getStickyOffset() {
|
|
@@ -3965,10 +3998,7 @@ class TagsRowComponent {
|
|
|
3965
3998
|
const parsed = parseInt(variable || '', 10);
|
|
3966
3999
|
if (!isNaN(parsed))
|
|
3967
4000
|
return parsed;
|
|
3968
|
-
return
|
|
3969
|
-
}
|
|
3970
|
-
getStickyTop() {
|
|
3971
|
-
return window.matchMedia('(max-width: 565px)').matches ? 58 : 78;
|
|
4001
|
+
return 74; // fallback to navbar height
|
|
3972
4002
|
}
|
|
3973
4003
|
setTagsRowTop(value) {
|
|
3974
4004
|
const el = this.tagsRowRef?.nativeElement;
|
|
@@ -3981,11 +4011,11 @@ class TagsRowComponent {
|
|
|
3981
4011
|
this.renderer.setStyle(el, 'top', `${value}px`);
|
|
3982
4012
|
}
|
|
3983
4013
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowComponent, deps: [{ token: 'uiComponent' }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3984
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TagsRowComponent, isStandalone: false, selector: "edm-sdui-tags-row", host: { listeners: { "window:scroll": "onWindowScroll()" }, properties: { "class.tags-row--fixed": "this.isFixed", "class.tags-row--can-fix": "this.canFix", "style.min-height.px": "this.hostMinHeight" } }, viewQueries: [{ propertyName: "tagsRowRef", first: true, predicate: ["tagsRowElement"], descendants: true }], ngImport: i0, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:78px;left:32px;right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{
|
|
4014
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: TagsRowComponent, isStandalone: false, selector: "edm-sdui-tags-row", host: { listeners: { "window:scroll": "onWindowScroll()" }, properties: { "class.tags-row--fixed": "this.isFixed", "class.tags-row--can-fix": "this.canFix", "style.min-height.px": "this.hostMinHeight" } }, viewQueries: [{ propertyName: "tagsRowRef", first: true, predicate: ["tagsRowElement"], descendants: true }], ngImport: i0, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:var(--sdui-tags-row-top, 78px);left:var(--sdui-tags-row-left, 32px);right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{left:var(--sdui-tags-row-left-mobile, 0);top:var(--sdui-tags-row-top-mobile, var(--sdui-tags-row-top, 78px))}}:host.tags-row--can-fix .tags-row{background:var(--bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 4px 16px #0003}\n"], dependencies: [{ kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: UIViewDirective, selector: "[edmSduiView]", inputs: ["edmSduiView", "disableClick"] }] }); }
|
|
3985
4015
|
}
|
|
3986
4016
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowComponent, decorators: [{
|
|
3987
4017
|
type: Component,
|
|
3988
|
-
args: [{ selector: 'edm-sdui-tags-row', standalone: false, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:78px;left:32px;right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{
|
|
4018
|
+
args: [{ selector: 'edm-sdui-tags-row', standalone: false, template: "<div class=\"tags-row\" #tagsRowElement [class.tags-row-fixed]=\"isFixed\" *ngIf=\"uiComponent\" [edmSduiView]=\"uiComponent.element\">\n <ng-container *ngFor=\"let tag of tags; let i = index; trackBy: trackByLabel\">\n <ng-container\n *ngComponentOutlet=\"tagComponent; injector: createInjector(tag, i)\"\n ></ng-container>\n </ng-container>\n</div>\n", styles: [":host{display:block;width:100%;box-sizing:border-box;margin-top:var(--sdui-header-margin-top, 12px)}.tags-row{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;padding:6px 0 6px 16px;background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;scroll-padding-left:16px;scroll-padding-right:16px}:host .tags-row>*{flex:0 0 auto}:host.tags-row--fixed{box-sizing:border-box}:host.tags-row--fixed .tags-row{position:fixed;top:var(--sdui-tags-row-top, 78px);left:var(--sdui-tags-row-left, 32px);right:0;z-index:120;transition:top .16s ease;will-change:top;padding:6px 0 6px 16px}@media (max-width: 565px){:host.tags-row--fixed .tags-row{left:var(--sdui-tags-row-left-mobile, 0);top:var(--sdui-tags-row-top-mobile, var(--sdui-tags-row-top, 78px))}}:host.tags-row--can-fix .tags-row{background:var(--bg);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 4px 16px #0003}\n"] }]
|
|
3989
4019
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
3990
4020
|
type: Inject,
|
|
3991
4021
|
args: ['uiComponent']
|