@edm-sdui/sdui 1.0.61 → 1.0.62

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.
Binary file
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Inject, Injector, Renderer2, ViewChild } from '@angular/core';
1
+ import { ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Inject, Injector, Renderer2, ViewChild, } from '@angular/core';
2
2
  import { UIComponentType } from '../../../core/uicomposition/enums/uicomponent-type';
3
3
  import { TagsRowTagComponent } from './tag/tag.component';
4
4
  import * as i0 from "@angular/core";
@@ -63,6 +63,7 @@ export class TagsRowComponent {
63
63
  ngOnDestroy() {
64
64
  this.resizeObserver?.disconnect();
65
65
  this.resizeObserver = undefined;
66
+ document.body.classList.remove('sdui-tags-fixed');
66
67
  }
67
68
  onWindowScroll() {
68
69
  this.updateFixedState();
@@ -73,7 +74,9 @@ export class TagsRowComponent {
73
74
  // Height spacer: keep the host reserving space so the content below doesn’t jump
74
75
  if (tagsEl) {
75
76
  const h = tagsEl.getBoundingClientRect().height;
76
- if (force || !this.lastMeasuredHeight || Math.abs(h - this.lastMeasuredHeight) > 0.5) {
77
+ if (force ||
78
+ !this.lastMeasuredHeight ||
79
+ Math.abs(h - this.lastMeasuredHeight) > 0.5) {
77
80
  this.lastMeasuredHeight = h;
78
81
  this.hostMinHeight = h;
79
82
  }
@@ -82,7 +85,9 @@ export class TagsRowComponent {
82
85
  if (!this.isFixed) {
83
86
  const rect = hostEl.getBoundingClientRect();
84
87
  const docTop = rect.top + window.scrollY;
85
- if (force || !this.lastMeasuredDocTop || Math.abs(docTop - this.lastMeasuredDocTop) > 0.5) {
88
+ if (force ||
89
+ !this.lastMeasuredDocTop ||
90
+ Math.abs(docTop - this.lastMeasuredDocTop) > 0.5) {
86
91
  this.lastMeasuredDocTop = docTop;
87
92
  this.initialTop = docTop;
88
93
  }
@@ -91,12 +96,11 @@ export class TagsRowComponent {
91
96
  updateFixedState() {
92
97
  this.measureLayout();
93
98
  const offset = this.getStickyOffset();
94
- const isMobile = window.matchMedia('(max-width: 565px)').matches;
95
- const targetTop = isMobile ? 60 : offset;
96
- const plusTarget = isMobile ? 8 : 0;
97
- const triggerPoint = (this.initialTop ?? 0) - offset + plusTarget;
99
+ const targetTop = offset;
100
+ const triggerPoint = (this.initialTop ?? 0) - offset;
98
101
  const shouldFix = window.scrollY >= triggerPoint;
99
102
  this.canFix = shouldFix;
103
+ document.body.classList.toggle('sdui-tags-fixed', shouldFix);
100
104
  if (shouldFix) {
101
105
  if (!this.isFixed) {
102
106
  this.isFixed = true;
@@ -120,11 +124,18 @@ export class TagsRowComponent {
120
124
  }
121
125
  }
122
126
  getStickyOffset() {
127
+ // 1) Honour the explicit CSS custom-property if set
123
128
  const variable = getComputedStyle(document.documentElement).getPropertyValue('--sdui-sticky-offset');
124
129
  const parsed = parseInt(variable || '', 10);
125
130
  if (!isNaN(parsed))
126
131
  return parsed;
127
- return 74; // fallback to navbar height
132
+ // 2) Dynamically measure the fixed app header (nb-layout-header)
133
+ // so the tags-row sits right below it regardless of screen size.
134
+ const appHeader = document.querySelector('nb-layout-header');
135
+ if (appHeader) {
136
+ return appHeader.offsetHeight;
137
+ }
138
+ return 74; // ultimate fallback
128
139
  }
129
140
  setTagsRowTop(value) {
130
141
  const el = this.tagsRowRef?.nativeElement;
@@ -132,16 +143,19 @@ export class TagsRowComponent {
132
143
  return;
133
144
  if (value === undefined || value === null) {
134
145
  this.renderer.removeStyle(el, 'top');
146
+ this.hostRef.nativeElement.style.removeProperty('--tags-row-bottom');
135
147
  return;
136
148
  }
137
149
  this.renderer.setStyle(el, 'top', `${value}px`);
150
+ const height = el.getBoundingClientRect().height;
151
+ this.hostRef.nativeElement.style.setProperty('--tags-row-bottom', `${value + height}px`);
138
152
  }
139
153
  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 }); }
140
- 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;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row:after{content:\"\";flex:0 0 16px}: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-color:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:none}\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"] }] }); }
154
+ 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 <span class=\"tags-row-spacer\" aria-hidden=\"true\"></span>\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;padding-left:var(--sdui-tags-row-padding-x, 16px);background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scroll-padding-left:var(--sdui-tags-row-padding-x, 16px);scroll-padding-right:var(--sdui-tags-row-padding-x, 16px);scrollbar-width:none;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row-spacer{flex:0 0 var(--sdui-tags-row-padding-x, 16px);min-width:var(--sdui-tags-row-padding-x, 16px);height:1px;pointer-events:none}: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;padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}@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));padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}}:host.tags-row--can-fix:before{content:\"\";position:fixed;top:0;left:0;right:0;height:var(--tags-row-bottom, 120px);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent);pointer-events:none;z-index:119}\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"] }] }); }
141
155
  }
142
156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowComponent, decorators: [{
143
157
  type: Component,
144
- 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;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row:after{content:\"\";flex:0 0 16px}: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-color:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:none}\n"] }]
158
+ 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 <span class=\"tags-row-spacer\" aria-hidden=\"true\"></span>\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;padding-left:var(--sdui-tags-row-padding-x, 16px);background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scroll-padding-left:var(--sdui-tags-row-padding-x, 16px);scroll-padding-right:var(--sdui-tags-row-padding-x, 16px);scrollbar-width:none;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row-spacer{flex:0 0 var(--sdui-tags-row-padding-x, 16px);min-width:var(--sdui-tags-row-padding-x, 16px);height:1px;pointer-events:none}: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;padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}@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));padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}}:host.tags-row--can-fix:before{content:\"\";position:fixed;top:0;left:0;right:0;height:var(--tags-row-bottom, 120px);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent);pointer-events:none;z-index:119}\n"] }]
145
159
  }], ctorParameters: () => [{ type: undefined, decorators: [{
146
160
  type: Inject,
147
161
  args: ['uiComponent']
@@ -161,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
161
175
  type: HostListener,
162
176
  args: ['window:scroll']
163
177
  }] } });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC90YWdzLXJvdy90YWdzLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3RhZ3Mtcm93L3RhZ3Mtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBYSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSXZKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUVyRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQVExRCxNQUFNLE9BQU8sZ0JBQWdCO0lBWTNCLFlBQ2dDLFdBQXdCLEVBQzlDLFFBQWtCLEVBQ2xCLE9BQWdDLEVBQ2hDLEdBQXNCLEVBQ3RCLFFBQW1CO1FBSkcsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDOUMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBaEJTLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDZCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBR3ZELGlCQUFZLEdBQUcsbUJBQW1CLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBNkIsQ0FBQztJQVkxRCxDQUFDO0lBRUosSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFD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QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtJQUN6QyxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWM7UUFDbEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUM7UUFDMUMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBQ2hCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0F2SlUsZ0JBQWdCLGtCQWFqQixhQUFhO21HQWJaLGdCQUFnQiwwWUNkN0IsK1dBT0E7OzRGRE9hLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDRSxtQkFBbUIsY0FHakIsS0FBSzs7MEJBZWQsTUFBTTsyQkFBQyxhQUFhO2lKQVplLE9BQU87c0JBQTVDLFdBQVc7dUJBQUMsdUJBQXVCO2dCQUNJLE1BQU07c0JBQTdDLFdBQVc7dUJBQUMseUJBQXlCO2dCQUNGLGFBQWE7c0JBQWhELFdBQVc7dUJBQUMscUJBQXFCO2dCQUNMLFVBQVU7c0JBQXRDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQXlFM0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFJlbmRlcmVyMiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVSUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9tb2RlbHMvdWljb21wb25lbnQnO1xuXG5cbmltcG9ydCB7IFVJQ29tcG9uZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9lbnVtcy91aWNvbXBvbmVudC10eXBlJztcbmltcG9ydCB7IFVJVGFnIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aXRhZyc7XG5pbXBvcnQgeyBUYWdzUm93VGFnQ29tcG9uZW50IH0gZnJvbSAnLi90YWcvdGFnLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VkbS1zZHVpLXRhZ3Mtcm93JyxcbiAgc3R5bGVVcmw6ICcuL3RhZ3Mtcm93LmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZ3Mtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NSb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhZ3Mtcm93LS1maXhlZCcpIGlzRml4ZWQgPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWdzLXJvdy0tY2FuLWZpeCcpIGNhbkZpeCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi1oZWlnaHQucHgnKSBob3N0TWluSGVpZ2h0PzogbnVtYmVyO1xuICBAVmlld0NoaWxkKCd0YWdzUm93RWxlbWVudCcpIHRhZ3NSb3dSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgdGFnQ29tcG9uZW50ID0gVGFnc1Jvd1RhZ0NvbXBvbmVudDtcbiAgcHJpdmF0ZSBpbmplY3RvckNhY2hlID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIEluamVjdG9yPigpO1xuICBwcml2YXRlIGluaXRpYWxUb3A/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZWRIZWlnaHQ/OiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdE1lYXN1cmVkRG9jVG9wPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ3VpQ29tcG9uZW50JykgcHVibGljIHVpQ29tcG9uZW50OiBVSUNvbXBvbmVudCxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIGdldCB0YWdzKCk6IFVJVGFnW10ge1xuICAgIHJldHVybiB0aGlzLnVpQ29tcG9uZW50LnRhZ3MgPz8gW107XG4gIH1cblxuICB0cmFja0J5TGFiZWwoaW5kZXg6IG51bWJlciwgdGFnOiBVSVRhZyk6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRhZy5sYWJlbCA/PyBpbmRleDtcbiAgfVxuXG4gIGNyZWF0ZUluamVjdG9yKHRhZzogVUlUYWcsIGluZGV4OiBudW1iZXIpOiBJbmplY3RvciB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRUYWdLZXkodGFnLCBpbmRleCk7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5pbmplY3RvckNhY2hlLmdldChrZXkpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb21wb25lbnQ6IFVJQ29tcG9uZW50ID0ge1xuICAgICAgdHlwZTogVUlDb21wb25lbnRUeXBlLlRBRyxcbiAgICAgIGVsZW1lbnQ6IHRhZyxcbiAgICB9O1xuXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiAndWlDb21wb25lbnQnLCB1c2VWYWx1ZTogY29tcG9uZW50IH1dLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgIH0pO1xuICAgIHRoaXMuaW5qZWN0b3JDYWNoZS5zZXQoa2V5LCBpbmplY3Rvcik7XG4gICAgcmV0dXJuIGluamVjdG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWdLZXkodGFnOiBVSVRhZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB8IG51bWJlciB7XG4gICAgcmV0dXJuIHRhZy5sYWJlbCA/PyAodGFnIGFzIGFueSk/LmFjdGlvbj8ucGFyYW0gPz8gaW5kZXg7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHRoaXMubWVhc3VyZUxheW91dCgpO1xuICAgICAgdGhpcy51cGRhdGVGaXhlZFN0YXRlKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIEluIHByb2R1Y3Rpb24sIGZvbnRzL2ltYWdlcy9oZWFkZXIgY2FuIGNoYW5nZSBoZWlnaHRzIGFmdGVyIGluaXRpYWwgcGFpbnQsXG4gICAgICAvLyB3aGljaCBzaGlmdHMgdGhlIHRyaWdnZXIgcG9pbnQgYW5kIGNhdXNlcyBhIHZpc2libGUgXCJqdW1wXCIuXG4gICAgICAvLyBPYnNlcnZlIHNpemUgY2hhbmdlcyBhbmQgcmUtbWVhc3VyZS5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YWdzUm93UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGVsICYmIHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tZWFzdXJlTGF5b3V0KHRydWUpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRml4ZWRTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBvbldpbmRvd1Njcm9sbCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUZpeGVkU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVhc3VyZUxheW91dChmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdEVsID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGFnc0VsID0gdGhpcy50YWdzUm93UmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gSGVpZ2h0IHNwYWNlcjoga2VlcCB0aGUgaG9zdCByZXNlcnZpbmcgc3BhY2Ugc28gdGhlIGNvbnRlbnQgYmVsb3cgZG9lc27igJl0IGp1bXBcbiAgICBpZiAodGFnc0VsKSB7XG4gICAgICBjb25zdCBoID0gdGFnc0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIGlmIChmb3JjZSB8fCAhdGhpcy5sYXN0TWVhc3VyZWRIZWlnaHQgfHwgTWF0aC5hYnMoaCAtIHRoaXMubGFzdE1lYXN1cmVkSGVpZ2h0KSA+IDAuNSkge1xuICAgICAgICB0aGlzLmxhc3RNZWFzdXJlZEhlaWdodCA9IGg7XG4gICAgICAgIHRoaXMuaG9zdE1pbkhlaWdodCA9IGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBwb3NpdGlvbjogb25seSBjYXB0dXJlL3JlZnJlc2ggd2hlbiBub3QgZml4ZWQsIGJlY2F1c2UgZml4ZWQgY2hhbmdlcyB0aGUgcmVjdFxuICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7XG4gICAgICBjb25zdCByZWN0ID0gaG9zdEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZG9jVG9wID0gcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgIGlmIChmb3JjZSB8fCAhdGhpcy5sYXN0TWVhc3VyZWREb2NUb3AgfHwgTWF0aC5hYnMoZG9jVG9wIC0gdGhpcy5sYXN0TWVhc3VyZWREb2NUb3ApID4gMC41KSB7XG4gICAgICAgIHRoaXMubGFzdE1lYXN1cmVkRG9jVG9wID0gZG9jVG9wO1xuICAgICAgICB0aGlzLmluaXRpYWxUb3AgPSBkb2NUb3A7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaXhlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubWVhc3VyZUxheW91dCgpO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXRTdGlja3lPZmZzZXQoKTtcbiAgICBjb25zdCBpc01vYmlsZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcobWF4LXdpZHRoOiA1NjVweCknKS5tYXRjaGVzO1xuICAgIGNvbnN0IHRhcmdldFRvcCA9IGlzTW9iaWxlID8gNjAgOiBvZmZzZXQ7XG4gICAgY29uc3QgcGx1c1RhcmdldCA9IGlzTW9iaWxlID8gOCA6IDA7XG4gICAgY29uc3QgdHJpZ2dlclBvaW50ID0gKHRoaXMuaW5pdGlhbFRvcCA/PyAwKSAtIG9mZnNldCArIHBsdXNUYXJnZXQ7XG4gICAgY29uc3Qgc2hvdWxkRml4ID0gd2luZG93LnNjcm9sbFkgPj0gdHJpZ2dlclBvaW50O1xuICAgIHRoaXMuY2FuRml4ID0gc2hvdWxkRml4O1xuICAgIGlmIChzaG91bGRGaXgpIHtcbiAgICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7XG4gICAgICAgIHRoaXMuaXNGaXhlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh0YXJnZXRUb3ApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNGaXhlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWdzUm93VG9wKHRhcmdldFRvcCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh0YXJnZXRUb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRml4ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5tZWFzdXJlTGF5b3V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RpY2t5T2Zmc2V0KCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFyaWFibGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zZHVpLXN0aWNreS1vZmZzZXQnKTtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUludCh2YXJpYWJsZSB8fCAnJywgMTApO1xuICAgIGlmICghaXNOYU4ocGFyc2VkKSkgcmV0dXJuIHBhcnNlZDtcbiAgICByZXR1cm4gNzQ7IC8vIGZhbGxiYWNrIHRvIG5hdmJhciBoZWlnaHRcbiAgfVxuXG4gIHByaXZhdGUgc2V0VGFnc1Jvd1RvcCh2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy50YWdzUm93UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ3RvcCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsLCAndG9wJywgYCR7dmFsdWV9cHhgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhZ3Mtcm93XCIgI3RhZ3NSb3dFbGVtZW50IFtjbGFzcy50YWdzLXJvdy1maXhlZF09XCJpc0ZpeGVkXCIgKm5nSWY9XCJ1aUNvbXBvbmVudFwiIFtlZG1TZHVpVmlld109XCJ1aUNvbXBvbmVudC5lbGVtZW50XCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhZyBvZiB0YWdzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5TGFiZWxcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdDb21wb25lbnRPdXRsZXQ9XCJ0YWdDb21wb25lbnQ7IGluamVjdG9yOiBjcmVhdGVJbmplY3Rvcih0YWcsIGkpXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZHVpL3NyYy9saWIvY29tcG9uZW50cy91aWNvbXBvbmVudC90YWdzLXJvdy90YWdzLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NkdWkvc3JjL2xpYi9jb21wb25lbnRzL3VpY29tcG9uZW50L3RhZ3Mtcm93L3RhZ3Mtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBRVIsU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFRMUQsTUFBTSxPQUFPLGdCQUFnQjtJQVkzQixZQUNnQyxXQUF3QixFQUM5QyxRQUFrQixFQUNsQixPQUFnQyxFQUNoQyxHQUFzQixFQUN0QixRQUFtQjtRQUpHLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzlDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQWhCUyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2QsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUd2RCxpQkFBWSxHQUFHLG1CQUFtQixDQUFDO1FBQzNCLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7SUFZMUQsQ0FBQztJQUVKLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FB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c0JBQTdDLFdBQVc7dUJBQUMseUJBQXlCO2dCQUNGLGFBQWE7c0JBQWhELFdBQVc7dUJBQUMscUJBQXFCO2dCQUNMLFVBQVU7c0JBQXRDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQTBFM0IsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVJQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aWNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFVJQ29tcG9uZW50VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdWljb21wb3NpdGlvbi9lbnVtcy91aWNvbXBvbmVudC10eXBlJztcbmltcG9ydCB7IFVJVGFnIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91aWNvbXBvc2l0aW9uL21vZGVscy91aXRhZyc7XG5pbXBvcnQgeyBUYWdzUm93VGFnQ29tcG9uZW50IH0gZnJvbSAnLi90YWcvdGFnLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VkbS1zZHVpLXRhZ3Mtcm93JyxcbiAgc3R5bGVVcmw6ICcuL3RhZ3Mtcm93LmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhZ3Mtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NSb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhZ3Mtcm93LS1maXhlZCcpIGlzRml4ZWQgPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy50YWdzLXJvdy0tY2FuLWZpeCcpIGNhbkZpeCA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi1oZWlnaHQucHgnKSBob3N0TWluSGVpZ2h0PzogbnVtYmVyO1xuICBAVmlld0NoaWxkKCd0YWdzUm93RWxlbWVudCcpIHRhZ3NSb3dSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgdGFnQ29tcG9uZW50ID0gVGFnc1Jvd1RhZ0NvbXBvbmVudDtcbiAgcHJpdmF0ZSBpbmplY3RvckNhY2hlID0gbmV3IE1hcDxzdHJpbmcgfCBudW1iZXIsIEluamVjdG9yPigpO1xuICBwcml2YXRlIGluaXRpYWxUb3A/OiBudW1iZXI7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZWRIZWlnaHQ/OiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdE1lYXN1cmVkRG9jVG9wPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ3VpQ29tcG9uZW50JykgcHVibGljIHVpQ29tcG9uZW50OiBVSUNvbXBvbmVudCxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICkge31cblxuICBnZXQgdGFncygpOiBVSVRhZ1tdIHtcbiAgICByZXR1cm4gdGhpcy51aUNvbXBvbmVudC50YWdzID8/IFtdO1xuICB9XG5cbiAgdHJhY2tCeUxhYmVsKGluZGV4OiBudW1iZXIsIHRhZzogVUlUYWcpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0YWcubGFiZWwgPz8gaW5kZXg7XG4gIH1cblxuICBjcmVhdGVJbmplY3Rvcih0YWc6IFVJVGFnLCBpbmRleDogbnVtYmVyKTogSW5qZWN0b3Ige1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0VGFnS2V5KHRhZywgaW5kZXgpO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuaW5qZWN0b3JDYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgY29tcG9uZW50OiBVSUNvbXBvbmVudCA9IHtcbiAgICAgIHR5cGU6IFVJQ29tcG9uZW50VHlwZS5UQUcsXG4gICAgICBlbGVtZW50OiB0YWcsXG4gICAgfTtcblxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogJ3VpQ29tcG9uZW50JywgdXNlVmFsdWU6IGNvbXBvbmVudCB9XSxcbiAgICAgIHBhcmVudDogdGhpcy5pbmplY3RvcixcbiAgICB9KTtcbiAgICB0aGlzLmluamVjdG9yQ2FjaGUuc2V0KGtleSwgaW5qZWN0b3IpO1xuICAgIHJldHVybiBpbmplY3RvcjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFnS2V5KHRhZzogVUlUYWcsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiB0YWcubGFiZWwgPz8gKHRhZyBhcyBhbnkpPy5hY3Rpb24/LnBhcmFtID8/IGluZGV4O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICB0aGlzLm1lYXN1cmVMYXlvdXQoKTtcbiAgICAgIHRoaXMudXBkYXRlRml4ZWRTdGF0ZSgpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBJbiBwcm9kdWN0aW9uLCBmb250cy9pbWFnZXMvaGVhZGVyIGNhbiBjaGFuZ2UgaGVpZ2h0cyBhZnRlciBpbml0aWFsIHBhaW50LFxuICAgICAgLy8gd2hpY2ggc2hpZnRzIHRoZSB0cmlnZ2VyIHBvaW50IGFuZCBjYXVzZXMgYSB2aXNpYmxlIFwianVtcFwiLlxuICAgICAgLy8gT2JzZXJ2ZSBzaXplIGNoYW5nZXMgYW5kIHJlLW1lYXN1cmUuXG4gICAgICBjb25zdCBlbCA9IHRoaXMudGFnc1Jvd1JlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbCAmJiB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWVhc3VyZUxheW91dCh0cnVlKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZpeGVkU3RhdGUoKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzZHVpLXRhZ3MtZml4ZWQnKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICBvbldpbmRvd1Njcm9sbCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUZpeGVkU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVhc3VyZUxheW91dChmb3JjZSA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdEVsID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGFnc0VsID0gdGhpcy50YWdzUm93UmVmPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gSGVpZ2h0IHNwYWNlcjoga2VlcCB0aGUgaG9zdCByZXNlcnZpbmcgc3BhY2Ugc28gdGhlIGNvbnRlbnQgYmVsb3cgZG9lc27igJl0IGp1bXBcbiAgICBpZiAodGFnc0VsKSB7XG4gICAgICBjb25zdCBoID0gdGFnc0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIGlmIChcbiAgICAgICAgZm9yY2UgfHxcbiAgICAgICAgIXRoaXMubGFzdE1lYXN1cmVkSGVpZ2h0IHx8XG4gICAgICAgIE1hdGguYWJzKGggLSB0aGlzLmxhc3RNZWFzdXJlZEhlaWdodCkgPiAwLjVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmxhc3RNZWFzdXJlZEhlaWdodCA9IGg7XG4gICAgICAgIHRoaXMuaG9zdE1pbkhlaWdodCA9IGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBwb3NpdGlvbjogb25seSBjYXB0dXJlL3JlZnJlc2ggd2hlbiBub3QgZml4ZWQsIGJlY2F1c2UgZml4ZWQgY2hhbmdlcyB0aGUgcmVjdFxuICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7XG4gICAgICBjb25zdCByZWN0ID0gaG9zdEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZG9jVG9wID0gcmVjdC50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgIGlmIChcbiAgICAgICAgZm9yY2UgfHxcbiAgICAgICAgIXRoaXMubGFzdE1lYXN1cmVkRG9jVG9wIHx8XG4gICAgICAgIE1hdGguYWJzKGRvY1RvcCAtIHRoaXMubGFzdE1lYXN1cmVkRG9jVG9wKSA+IDAuNVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubGFzdE1lYXN1cmVkRG9jVG9wID0gZG9jVG9wO1xuICAgICAgICB0aGlzLmluaXRpYWxUb3AgPSBkb2NUb3A7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGaXhlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubWVhc3VyZUxheW91dCgpO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXRTdGlja3lPZmZzZXQoKTtcbiAgICBjb25zdCB0YXJnZXRUb3AgPSBvZmZzZXQ7XG4gICAgY29uc3QgdHJpZ2dlclBvaW50ID0gKHRoaXMuaW5pdGlhbFRvcCA/PyAwKSAtIG9mZnNldDtcbiAgICBjb25zdCBzaG91bGRGaXggPSB3aW5kb3cuc2Nyb2xsWSA+PSB0cmlnZ2VyUG9pbnQ7XG4gICAgdGhpcy5jYW5GaXggPSBzaG91bGRGaXg7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdzZHVpLXRhZ3MtZml4ZWQnLCBzaG91bGRGaXgpO1xuICAgIGlmIChzaG91bGRGaXgpIHtcbiAgICAgIGlmICghdGhpcy5pc0ZpeGVkKSB7XG4gICAgICAgIHRoaXMuaXNGaXhlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh0YXJnZXRUb3ApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNGaXhlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUYWdzUm93VG9wKHRhcmdldFRvcCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh0YXJnZXRUb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRml4ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0VGFnc1Jvd1RvcCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5tZWFzdXJlTGF5b3V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RpY2t5T2Zmc2V0KCk6IG51bWJlciB7XG4gICAgLy8gMSkgSG9ub3VyIHRoZSBleHBsaWNpdCBDU1MgY3VzdG9tLXByb3BlcnR5IGlmIHNldFxuICAgIGNvbnN0IHZhcmlhYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICApLmdldFByb3BlcnR5VmFsdWUoJy0tc2R1aS1zdGlja3ktb2Zmc2V0Jyk7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQodmFyaWFibGUgfHwgJycsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHBhcnNlZCkpIHJldHVybiBwYXJzZWQ7XG5cbiAgICAvLyAyKSBEeW5hbWljYWxseSBtZWFzdXJlIHRoZSBmaXhlZCBhcHAgaGVhZGVyIChuYi1sYXlvdXQtaGVhZGVyKVxuICAgIC8vICAgIHNvIHRoZSB0YWdzLXJvdyBzaXRzIHJpZ2h0IGJlbG93IGl0IHJlZ2FyZGxlc3Mgb2Ygc2NyZWVuIHNpemUuXG4gICAgY29uc3QgYXBwSGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJ25iLWxheW91dC1oZWFkZXInKTtcbiAgICBpZiAoYXBwSGVhZGVyKSB7XG4gICAgICByZXR1cm4gYXBwSGVhZGVyLm9mZnNldEhlaWdodDtcbiAgICB9XG5cbiAgICByZXR1cm4gNzQ7IC8vIHVsdGltYXRlIGZhbGxiYWNrXG4gIH1cblxuICBwcml2YXRlIHNldFRhZ3NSb3dUb3AodmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMudGFnc1Jvd1JlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICd0b3AnKTtcbiAgICAgIHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KCctLXRhZ3Mtcm93LWJvdHRvbScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsLCAndG9wJywgYCR7dmFsdWV9cHhgKTtcbiAgICBjb25zdCBoZWlnaHQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAnLS10YWdzLXJvdy1ib3R0b20nLFxuICAgICAgYCR7dmFsdWUgKyBoZWlnaHR9cHhgLFxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWdzLXJvd1wiICN0YWdzUm93RWxlbWVudCBbY2xhc3MudGFncy1yb3ctZml4ZWRdPVwiaXNGaXhlZFwiICpuZ0lmPVwidWlDb21wb25lbnRcIiBbZWRtU2R1aVZpZXddPVwidWlDb21wb25lbnQuZWxlbWVudFwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnczsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUxhYmVsXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwidGFnQ29tcG9uZW50OyBpbmplY3RvcjogY3JlYXRlSW5qZWN0b3IodGFnLCBpKVwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPHNwYW4gY2xhc3M9XCJ0YWdzLXJvdy1zcGFjZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG48L2Rpdj5cbiJdfQ==
@@ -4,11 +4,11 @@ import * as i1 from "@angular/common";
4
4
  import * as i2 from "../../uicomponent/uicomponent.component";
5
5
  export class UINavigationComponent {
6
6
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UINavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: UINavigationComponent, isStandalone: false, selector: "edm-sdui-navigation", inputs: { uiNavigation: "uiNavigation" }, ngImport: i0, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0;z-index:110;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent)}.nav-main h2{text-align:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UIComponentComponent, selector: "edm-sdui-component", inputs: ["uiComponent", "translateLabel"] }] }); }
7
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: UINavigationComponent, isStandalone: false, selector: "edm-sdui-navigation", inputs: { uiNavigation: "uiNavigation" }, ngImport: i0, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0}.nav-main h2{text-align:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UIComponentComponent, selector: "edm-sdui-component", inputs: ["uiComponent", "translateLabel"] }] }); }
8
8
  }
9
9
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UINavigationComponent, decorators: [{
10
10
  type: Component,
11
- args: [{ selector: 'edm-sdui-navigation', standalone: false, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0;z-index:110;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent)}.nav-main h2{text-align:center}\n"] }]
11
+ args: [{ selector: 'edm-sdui-navigation', standalone: false, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0}.nav-main h2{text-align:center}\n"] }]
12
12
  }], propDecorators: { uiNavigation: [{
13
13
  type: Input
14
14
  }] } });
@@ -470,11 +470,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
470
470
 
471
471
  class UINavigationComponent {
472
472
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UINavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
473
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: UINavigationComponent, isStandalone: false, selector: "edm-sdui-navigation", inputs: { uiNavigation: "uiNavigation" }, ngImport: i0, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0;z-index:110;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent)}.nav-main h2{text-align:center}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: UIComponentComponent, selector: "edm-sdui-component", inputs: ["uiComponent", "translateLabel"] }] }); }
473
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: UINavigationComponent, isStandalone: false, selector: "edm-sdui-navigation", inputs: { uiNavigation: "uiNavigation" }, ngImport: i0, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0}.nav-main h2{text-align:center}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: UIComponentComponent, selector: "edm-sdui-component", inputs: ["uiComponent", "translateLabel"] }] }); }
474
474
  }
475
475
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UINavigationComponent, decorators: [{
476
476
  type: Component,
477
- args: [{ selector: 'edm-sdui-navigation', standalone: false, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0;z-index:110;backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent)}.nav-main h2{text-align:center}\n"] }]
477
+ args: [{ selector: 'edm-sdui-navigation', standalone: false, template: "<div class=\"nav-main\" *ngIf=\"uiNavigation\">\n <h2 *ngIf=\"uiNavigation.title\">{{ uiNavigation.title }}</h2>\n\n <edm-sdui-component\n [uiComponent]=\"uiNavigation.titleComponent\"\n *ngIf=\"uiNavigation.titleComponent\"\n ></edm-sdui-component>\n</div>\n", styles: [":host{display:contents}.nav-main{position:sticky;top:0}.nav-main h2{text-align:center}\n"] }]
478
478
  }], propDecorators: { uiNavigation: [{
479
479
  type: Input
480
480
  }] } });
@@ -4427,6 +4427,7 @@ class TagsRowComponent {
4427
4427
  ngOnDestroy() {
4428
4428
  this.resizeObserver?.disconnect();
4429
4429
  this.resizeObserver = undefined;
4430
+ document.body.classList.remove('sdui-tags-fixed');
4430
4431
  }
4431
4432
  onWindowScroll() {
4432
4433
  this.updateFixedState();
@@ -4437,7 +4438,9 @@ class TagsRowComponent {
4437
4438
  // Height spacer: keep the host reserving space so the content below doesn’t jump
4438
4439
  if (tagsEl) {
4439
4440
  const h = tagsEl.getBoundingClientRect().height;
4440
- if (force || !this.lastMeasuredHeight || Math.abs(h - this.lastMeasuredHeight) > 0.5) {
4441
+ if (force ||
4442
+ !this.lastMeasuredHeight ||
4443
+ Math.abs(h - this.lastMeasuredHeight) > 0.5) {
4441
4444
  this.lastMeasuredHeight = h;
4442
4445
  this.hostMinHeight = h;
4443
4446
  }
@@ -4446,7 +4449,9 @@ class TagsRowComponent {
4446
4449
  if (!this.isFixed) {
4447
4450
  const rect = hostEl.getBoundingClientRect();
4448
4451
  const docTop = rect.top + window.scrollY;
4449
- if (force || !this.lastMeasuredDocTop || Math.abs(docTop - this.lastMeasuredDocTop) > 0.5) {
4452
+ if (force ||
4453
+ !this.lastMeasuredDocTop ||
4454
+ Math.abs(docTop - this.lastMeasuredDocTop) > 0.5) {
4450
4455
  this.lastMeasuredDocTop = docTop;
4451
4456
  this.initialTop = docTop;
4452
4457
  }
@@ -4455,12 +4460,11 @@ class TagsRowComponent {
4455
4460
  updateFixedState() {
4456
4461
  this.measureLayout();
4457
4462
  const offset = this.getStickyOffset();
4458
- const isMobile = window.matchMedia('(max-width: 565px)').matches;
4459
- const targetTop = isMobile ? 60 : offset;
4460
- const plusTarget = isMobile ? 8 : 0;
4461
- const triggerPoint = (this.initialTop ?? 0) - offset + plusTarget;
4463
+ const targetTop = offset;
4464
+ const triggerPoint = (this.initialTop ?? 0) - offset;
4462
4465
  const shouldFix = window.scrollY >= triggerPoint;
4463
4466
  this.canFix = shouldFix;
4467
+ document.body.classList.toggle('sdui-tags-fixed', shouldFix);
4464
4468
  if (shouldFix) {
4465
4469
  if (!this.isFixed) {
4466
4470
  this.isFixed = true;
@@ -4484,11 +4488,18 @@ class TagsRowComponent {
4484
4488
  }
4485
4489
  }
4486
4490
  getStickyOffset() {
4491
+ // 1) Honour the explicit CSS custom-property if set
4487
4492
  const variable = getComputedStyle(document.documentElement).getPropertyValue('--sdui-sticky-offset');
4488
4493
  const parsed = parseInt(variable || '', 10);
4489
4494
  if (!isNaN(parsed))
4490
4495
  return parsed;
4491
- return 74; // fallback to navbar height
4496
+ // 2) Dynamically measure the fixed app header (nb-layout-header)
4497
+ // so the tags-row sits right below it regardless of screen size.
4498
+ const appHeader = document.querySelector('nb-layout-header');
4499
+ if (appHeader) {
4500
+ return appHeader.offsetHeight;
4501
+ }
4502
+ return 74; // ultimate fallback
4492
4503
  }
4493
4504
  setTagsRowTop(value) {
4494
4505
  const el = this.tagsRowRef?.nativeElement;
@@ -4496,16 +4507,19 @@ class TagsRowComponent {
4496
4507
  return;
4497
4508
  if (value === undefined || value === null) {
4498
4509
  this.renderer.removeStyle(el, 'top');
4510
+ this.hostRef.nativeElement.style.removeProperty('--tags-row-bottom');
4499
4511
  return;
4500
4512
  }
4501
4513
  this.renderer.setStyle(el, 'top', `${value}px`);
4514
+ const height = el.getBoundingClientRect().height;
4515
+ this.hostRef.nativeElement.style.setProperty('--tags-row-bottom', `${value + height}px`);
4502
4516
  }
4503
4517
  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 }); }
4504
- 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;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row:after{content:\"\";flex:0 0 16px}: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-color:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:none}\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"] }] }); }
4518
+ 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 <span class=\"tags-row-spacer\" aria-hidden=\"true\"></span>\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;padding-left:var(--sdui-tags-row-padding-x, 16px);background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scroll-padding-left:var(--sdui-tags-row-padding-x, 16px);scroll-padding-right:var(--sdui-tags-row-padding-x, 16px);scrollbar-width:none;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row-spacer{flex:0 0 var(--sdui-tags-row-padding-x, 16px);min-width:var(--sdui-tags-row-padding-x, 16px);height:1px;pointer-events:none}: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;padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}@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));padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}}:host.tags-row--can-fix:before{content:\"\";position:fixed;top:0;left:0;right:0;height:var(--tags-row-bottom, 120px);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent);pointer-events:none;z-index:119}\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"] }] }); }
4505
4519
  }
4506
4520
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TagsRowComponent, decorators: [{
4507
4521
  type: Component,
4508
- 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;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row:after{content:\"\";flex:0 0 16px}: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-color:color-mix(in srgb,var(--bg) 60%,transparent);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);box-shadow:none}\n"] }]
4522
+ 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 <span class=\"tags-row-spacer\" aria-hidden=\"true\"></span>\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;padding-left:var(--sdui-tags-row-padding-x, 16px);background-color:inherit;justify-content:flex-start;box-sizing:border-box;width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scroll-padding-left:var(--sdui-tags-row-padding-x, 16px);scroll-padding-right:var(--sdui-tags-row-padding-x, 16px);scrollbar-width:none;padding-bottom:8px!important}:host .tags-row>*{flex:0 0 auto}.tags-row-spacer{flex:0 0 var(--sdui-tags-row-padding-x, 16px);min-width:var(--sdui-tags-row-padding-x, 16px);height:1px;pointer-events:none}: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;padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}@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));padding-left:var(--sdui-tags-row-padding-x, 16px);padding-right:var(--sdui-tags-row-padding-x, 32px)}}:host.tags-row--can-fix:before{content:\"\";position:fixed;top:0;left:0;right:0;height:var(--tags-row-bottom, 120px);backdrop-filter:blur(24px);-webkit-backdrop-filter:blur(24px);background-color:color-mix(in srgb,var(--bg) 60%,transparent);pointer-events:none;z-index:119}\n"] }]
4509
4523
  }], ctorParameters: () => [{ type: undefined, decorators: [{
4510
4524
  type: Inject,
4511
4525
  args: ['uiComponent']