@rededor/site-front-end-lib 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
- import { Component, Input, Output, EventEmitter, signal, effect, inject, ViewChild, CUSTOM_ELEMENTS_SCHEMA, HostBinding, HostListener, } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, signal, effect, inject, ViewChild, CUSTOM_ELEMENTS_SCHEMA, HostBinding, HostListener, ViewChildren, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { CuraService } from '../../services/cura/cura.service';
4
4
  import { RdsiteLinkDirective } from '../../directives';
5
+ import { BehaviorSubject, debounceTime } from 'rxjs';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/common";
7
8
  export class SectionNavigationComponent {
@@ -29,6 +30,8 @@ export class SectionNavigationComponent {
29
30
  this.config = signal(undefined);
30
31
  this.activeSection = signal('');
31
32
  this.isMobile = window.innerWidth < 768;
33
+ this.scrollToMenuAnchorSubscription = null;
34
+ this.scrollToMenuAnchorSubject = new BehaviorSubject('');
32
35
  this.ariaLabel = 'Navegação da página';
33
36
  this.sectionChange = new EventEmitter();
34
37
  this.styleBinding = {
@@ -53,29 +56,60 @@ export class SectionNavigationComponent {
53
56
  if (!this.activeSection()) {
54
57
  this.activeSection.set(sections[0].id);
55
58
  }
59
+ // Usado para evitar multiplos calculos desnecessários enquanto scrolla
60
+ const TIME_TO_AVOID_UNECESSARY_CALCULATIONS = 50;
61
+ this.scrollToMenuAnchorSubscription = this.scrollToMenuAnchorSubject.pipe(debounceTime(TIME_TO_AVOID_UNECESSARY_CALCULATIONS)).subscribe((anchorId) => {
62
+ this.scrollToMenuAnchor(anchorId);
63
+ });
56
64
  }
57
65
  windowScroll() {
58
66
  const navHeight = document.querySelector('.rdsite-section-navigation')?.getBoundingClientRect().top || 0;
59
67
  const pageHeaderHeight = document.querySelector('.page-header')?.getBoundingClientRect().top || 0;
60
- let activeIndex = -1;
61
- this.sections().forEach((section, index) => {
68
+ let selectedIndex = -1;
69
+ this.sections()?.forEach((section, index) => {
62
70
  const menuTop = document.querySelector(`#${section.id}`)?.getBoundingClientRect().top || 0;
63
71
  if (menuTop) {
64
72
  const calc = window.scrollY - menuTop + navHeight + pageHeaderHeight;
65
73
  if (calc >= 0) {
66
- activeIndex = index;
67
- this.activeSection.set(this.sections()[activeIndex].id);
74
+ selectedIndex = index;
75
+ if (this.sections()?.[selectedIndex]) {
76
+ this.activeSection.set(this.sections()?.[selectedIndex]?.id);
77
+ }
68
78
  }
69
79
  }
70
80
  });
81
+ if (this.sections()?.[selectedIndex]) {
82
+ this.scrollToMenuAnchorSubject.next(this.sections()?.[selectedIndex]?.id);
83
+ }
84
+ }
85
+ scrollToMenuAnchor(anchorId) {
86
+ const anchor = this.anchorsEl.find((anchor) => anchor.nativeElement.id == `anchor-${anchorId}`);
87
+ if (!anchor)
88
+ return;
89
+ const distanceFromTheCenterOfTheAnchor = (anchor.nativeElement.offsetLeft + anchor.nativeElement.offsetLeft + anchor?.nativeElement.offsetWidth) / 2;
90
+ const centerOfContainerEl = this.containerEl?.nativeElement.clientWidth / 2;
91
+ const left = distanceFromTheCenterOfTheAnchor - centerOfContainerEl;
92
+ this.containerEl.nativeElement.scrollTo({
93
+ left: left,
94
+ behavior: 'smooth',
95
+ });
96
+ }
97
+ ngOnDestroy() {
98
+ this.scrollToMenuAnchorSubscription?.unsubscribe();
71
99
  }
72
100
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SectionNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SectionNavigationComponent, isStandalone: true, selector: "nav[rdsite-section-navigation]", inputs: { navigationSections: "navigationSections", navigationConfig: "navigationConfig", ariaLabel: "ariaLabel" }, outputs: { sectionChange: "sectionChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:scroll": "onWindowScroll()" }, properties: { "style": "this.styleBinding" } }, viewQueries: [{ propertyName: "navigationMenu", first: true, predicate: ["navigationMenu"], descendants: true, static: true }], ngImport: i0, template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #navigationMenu class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n target=\"_self\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RdsiteLinkDirective, selector: "[rdsitelink]", inputs: ["anchorAdjustment", "anchorExtraAdjustment", "phonemodal"] }] }); }
101
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SectionNavigationComponent, isStandalone: true, selector: "nav[rdsite-section-navigation]", inputs: { navigationSections: "navigationSections", navigationConfig: "navigationConfig", ariaLabel: "ariaLabel" }, outputs: { sectionChange: "sectionChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:scroll": "onWindowScroll()" }, properties: { "style": "this.styleBinding" } }, viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerEl"], descendants: true }, { propertyName: "navigationMenu", first: true, predicate: ["navigationMenu"], descendants: true, static: true }, { propertyName: "anchorsEl", predicate: ["anchorEl"], descendants: true }], ngImport: i0, template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #containerEl class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n #anchorEl\r\n id=\"anchor-{{ section.id }}\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RdsiteLinkDirective, selector: "[rdsitelink]", inputs: ["anchorAdjustment", "anchorExtraAdjustment", "phonemodal"] }] }); }
74
102
  }
75
103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SectionNavigationComponent, decorators: [{
76
104
  type: Component,
77
- args: [{ selector: 'nav[rdsite-section-navigation]', standalone: true, imports: [CommonModule, RdsiteLinkDirective], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #navigationMenu class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n target=\"_self\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"] }]
78
- }], ctorParameters: () => [], propDecorators: { onWindowResize: [{
105
+ args: [{ selector: 'nav[rdsite-section-navigation]', standalone: true, imports: [CommonModule, RdsiteLinkDirective], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #containerEl class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n #anchorEl\r\n id=\"anchor-{{ section.id }}\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"] }]
106
+ }], ctorParameters: () => [], propDecorators: { containerEl: [{
107
+ type: ViewChild,
108
+ args: ['containerEl']
109
+ }], anchorsEl: [{
110
+ type: ViewChildren,
111
+ args: ['anchorEl']
112
+ }], onWindowResize: [{
79
113
  type: HostListener,
80
114
  args: ['window:resize']
81
115
  }], onWindowScroll: [{
@@ -97,4 +131,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
97
131
  type: ViewChild,
98
132
  args: ['navigationMenu', { static: true }]
99
133
  }] } });
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc2VjdGlvbi1uYXZpZ2F0aW9uL3NlY3Rpb24tbmF2aWdhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9jb21wb25lbnRzL3NlY3Rpb24tbmF2aWdhdGlvbi9zZWN0aW9uLW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sRUFDTixTQUFTLEVBRVQsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBV3ZELE1BQU0sT0FBTywwQkFBMEI7SUFVckMsY0FBYztRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDMUMsQ0FBQztJQUdELGNBQWM7UUFDWixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksa0JBQWtCLENBQUMsS0FBOEI7UUFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELElB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RSxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDeEcsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7Z0JBQ3JFLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNkLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBdEZVLDBCQUEwQjttR0FBMUIsMEJBQTBCLDRnQkM3QnZDLDJ6QkFxQkEscWlDREdZLFlBQVksNkhBQUUsbUJBQW1COzs0RkFLaEMsMEJBQTBCO2tCQVR0QyxTQUFTOytCQUVFLGdDQUFnQyxjQUM5QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsV0FDbkMsQ0FBQyxzQkFBc0IsQ0FBQzt3REFjakMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWU7Z0JBTTdCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlO2dCQU16QixrQkFBa0I7c0JBRHJCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQWFyQixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBTU4sU0FBUztzQkFEUixLQUFLO2dCQUlOLGFBQWE7c0JBRFosTUFBTTtnQkFHZSxZQUFZO3NCQUFqQyxXQUFXO3VCQUFDLE9BQU87Z0JBUTJCLGNBQWM7c0JBQTVELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBzaWduYWwsXHJcbiAgZWZmZWN0LFxyXG4gIE9uSW5pdCxcclxuICBpbmplY3QsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFNlY3Rpb25OYXZpZ2F0aW9uRGF0YSwgU2VjdGlvbk5hdmlnYXRpb25Db25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VjdGlvbi1uYXZpZ2F0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgQ3VyYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXJhL2N1cmEuc2VydmljZSc7XHJcbmltcG9ydCB7IFJkc2l0ZUxpbmtEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICduYXZbcmRzaXRlLXNlY3Rpb24tbmF2aWdhdGlvbl0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmRzaXRlTGlua0RpcmVjdGl2ZV0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWN0aW9uLW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlY3Rpb24tbmF2aWdhdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VjdGlvbk5hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3VyYVNlcnZpY2UgPSBpbmplY3QoQ3VyYVNlcnZpY2UpO1xyXG5cclxuICByZWFkb25seSBzZWN0aW9ucyA9IHNpZ25hbDxTZWN0aW9uTmF2aWdhdGlvbkRhdGFbXT4oW10pO1xyXG4gIHJlYWRvbmx5IGNvbmZpZyA9IHNpZ25hbDxTZWN0aW9uTmF2aWdhdGlvbkNvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSBhY3RpdmVTZWN0aW9uID0gc2lnbmFsPHN0cmluZz4oJycpO1xyXG5cclxuICBpc01vYmlsZTogYm9vbGVhbiA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNNb2JpbGUgPSB3aW5kb3cuaW5uZXJXaWR0aCA8IDc2ODtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxyXG4gIG9uV2luZG93U2Nyb2xsKCk6IHZvaWQge1xyXG4gICAgdGhpcy53aW5kb3dTY3JvbGwoKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgc2V0IG5hdmlnYXRpb25TZWN0aW9ucyh2YWx1ZTogU2VjdGlvbk5hdmlnYXRpb25EYXRhW10pIHtcclxuICAgIGlmICghdmFsdWU/Lmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ08gU2VjdGlvbk5hdmlnYXRpb25Db21wb25lbnQgcmVxdWVyIHBlbG8gbWVub3MgdW1hIHNlw6fDo28uJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlY3Rpb25zLnNldCh2YWx1ZSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZVNlY3Rpb24oKSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZVNlY3Rpb24uc2V0KHZhbHVlWzBdLmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IG5hdmlnYXRpb25Db25maWcodmFsdWU6IFNlY3Rpb25OYXZpZ2F0aW9uQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmZpZy5zZXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBhcmlhTGFiZWwgPSAnTmF2ZWdhw6fDo28gZGEgcMOhZ2luYSc7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNlY3Rpb25OYXZpZ2F0aW9uRGF0YT4oKTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZScpIHN0eWxlQmluZGluZyA9IHtcclxuICAgICctLWNvbG9yLWJhc2UnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCdwcmltYXJ5LWJhc2UnKSxcclxuICAgICctLWNvbG9yLXRleHQnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldENvbG9yKCduZXV0cmFsLWJhc2UnKSxcclxuICAgICctLWNvbG9yLWFjdGl2ZS10ZXh0JzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1wdXJld2hpdGUnKSxcclxuICAgICctLWZvbnQtc2l6ZSc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Rm9udFNpemUoKSxcclxuICAgICctLWZvbnQtd2VpZ2h0LWFjdGl2ZSc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Rm9udFdlaWdodHMoKVsnbWVkaXVtJ10sXHJcbiAgfTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbmF2aWdhdGlvbk1lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBuYXZpZ2F0aW9uTWVudSE6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHtcclxuICAgICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zKCk7XHJcbiAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggJiYgIXRoaXMuYWN0aXZlU2VjdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVTZWN0aW9uLnNldChzZWN0aW9uc1swXS5pZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnMoKTtcclxuICAgIGlmICghc2VjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignTyBTZWN0aW9uTmF2aWdhdGlvbkNvbXBvbmVudCByZXF1ZXIgcGVsbyBtZW5vcyB1bWEgc2XDp8Ojby4nKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlU2VjdGlvbigpKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlU2VjdGlvbi5zZXQoc2VjdGlvbnNbMF0uaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3aW5kb3dTY3JvbGwoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuYXZIZWlnaHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLnJkc2l0ZS1zZWN0aW9uLW5hdmlnYXRpb24nKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDA7XHJcbiAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5wYWdlLWhlYWRlcicpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMDtcclxuICAgIGxldCBhY3RpdmVJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zZWN0aW9ucygpLmZvckVhY2goKHNlY3Rpb24sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IG1lbnVUb3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgIyR7c2VjdGlvbi5pZH1gKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDA7XHJcbiAgICAgIGlmIChtZW51VG9wKSB7XHJcbiAgICAgICAgY29uc3QgY2FsYyA9IHdpbmRvdy5zY3JvbGxZIC0gbWVudVRvcCArIG5hdkhlaWdodCArIHBhZ2VIZWFkZXJIZWlnaHQ7XHJcbiAgICAgICAgaWYgKGNhbGMgPj0gMCkge1xyXG4gICAgICAgICAgYWN0aXZlSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlU2VjdGlvbi5zZXQodGhpcy5zZWN0aW9ucygpW2FjdGl2ZUluZGV4XS5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPG5hdiBjbGFzcz1cInJkc2l0ZS1zZWN0aW9uLW5hdmlnYXRpb25cIiBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiIFtzdHlsZS50b3AucHhdPVwiY29uZmlnKCk/Lm9mZnNldFRvcCB8fCAwXCI+XHJcbiAgPHVsICNuYXZpZ2F0aW9uTWVudSBjbGFzcz1cInJkc2l0ZS1zZWN0aW9uLW5hdmlnYXRpb24tbWVudVwiIHJvbGU9XCJtZW51YmFyXCI+XHJcbiAgICBAZm9yIChzZWN0aW9uIG9mIHNlY3Rpb25zKCk7IHRyYWNrIHNlY3Rpb24uaWQpIHtcclxuICAgICAgQGlmIChzZWN0aW9uLnRpdGxlKSB7XHJcbiAgICAgICAgPGxpIHJvbGU9XCJub25lXCI+XHJcbiAgICAgICAgICA8YVxyXG4gICAgICAgICAgICB0YXJnZXQ9XCJfc2VsZlwiXHJcbiAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXHJcbiAgICAgICAgICAgIFtocmVmXT1cIicjJyArIHNlY3Rpb24uaWRcIlxyXG4gICAgICAgICAgICByZHNpdGVsaW5rXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhY3RpdmVTZWN0aW9uKCkgPT09IHNlY3Rpb24uaWQgPyAncGFnZScgOiBudWxsXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTmF2ZWdhciBwYXJhICcgKyBzZWN0aW9uLnRpdGxlXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGFjdGl2ZVNlY3Rpb24oKSA9PT0gc2VjdGlvbi5pZCB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgc2VjdGlvbi50aXRsZSB9fVxyXG4gICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICA8L3VsPlxyXG48L25hdj5cclxuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpdGUtZnJvbnQtZW5kLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvc2VjdGlvbi1uYXZpZ2F0aW9uL3NlY3Rpb24tbmF2aWdhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9jb21wb25lbnRzL3NlY3Rpb24tbmF2aWdhdGlvbi9zZWN0aW9uLW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sRUFDTixTQUFTLEVBRVQsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxZQUFZLEVBQ1osWUFBWSxHQUdiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7QUFXbkUsTUFBTSxPQUFPLDBCQUEwQjtJQWdCckMsY0FBYztRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDMUMsQ0FBQztJQUdELGNBQWM7UUFDWixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQ0ksa0JBQWtCLENBQUMsS0FBOEI7UUFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FB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QUFsQyxZQUFZO3VCQUFDLFVBQVU7Z0JBR3hCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlO2dCQU03QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZTtnQkFNekIsa0JBQWtCO3NCQURyQixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFhckIsZ0JBQWdCO3NCQURuQixLQUFLO2dCQU1OLFNBQVM7c0JBRFIsS0FBSztnQkFJTixhQUFhO3NCQURaLE1BQU07Z0JBR2UsWUFBWTtzQkFBakMsV0FBVzt1QkFBQyxPQUFPO2dCQVEyQixjQUFjO3NCQUE1RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgc2lnbmFsLFxyXG4gIGVmZmVjdCxcclxuICBPbkluaXQsXHJcbiAgaW5qZWN0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgT25EZXN0cm95LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBTZWN0aW9uTmF2aWdhdGlvbkRhdGEsIFNlY3Rpb25OYXZpZ2F0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NlY3Rpb24tbmF2aWdhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEN1cmFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VyYS9jdXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZHNpdGVMaW5rRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVib3VuY2VUaW1lLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICduYXZbcmRzaXRlLXNlY3Rpb24tbmF2aWdhdGlvbl0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmRzaXRlTGlua0RpcmVjdGl2ZV0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWN0aW9uLW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlY3Rpb24tbmF2aWdhdGlvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VjdGlvbk5hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdXJhU2VydmljZSA9IGluamVjdChDdXJhU2VydmljZSk7XHJcblxyXG4gIHJlYWRvbmx5IHNlY3Rpb25zID0gc2lnbmFsPFNlY3Rpb25OYXZpZ2F0aW9uRGF0YVtdPihbXSk7XHJcbiAgcmVhZG9ubHkgY29uZmlnID0gc2lnbmFsPFNlY3Rpb25OYXZpZ2F0aW9uQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5IGFjdGl2ZVNlY3Rpb24gPSBzaWduYWw8c3RyaW5nPignJyk7XHJcblxyXG4gIGlzTW9iaWxlOiBib29sZWFuID0gd2luZG93LmlubmVyV2lkdGggPCA3Njg7XHJcblxyXG4gIHNjcm9sbFRvTWVudUFuY2hvclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgc2Nyb2xsVG9NZW51QW5jaG9yU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyRWwnKSBjb250YWluZXJFbCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2FuY2hvckVsJykgYW5jaG9yc0VsITogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEFuY2hvckVsZW1lbnQ+PjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcbiAgb25XaW5kb3dSZXNpemUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA3Njg7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcclxuICBvbldpbmRvd1Njcm9sbCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2luZG93U2Nyb2xsKCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG4gIHNldCBuYXZpZ2F0aW9uU2VjdGlvbnModmFsdWU6IFNlY3Rpb25OYXZpZ2F0aW9uRGF0YVtdKSB7XHJcbiAgICBpZiAoIXZhbHVlPy5sZW5ndGgpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPIFNlY3Rpb25OYXZpZ2F0aW9uQ29tcG9uZW50IHJlcXVlciBwZWxvIG1lbm9zIHVtYSBzZcOnw6NvLicpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWN0aW9ucy5zZXQodmFsdWUpO1xyXG5cclxuICAgIGlmICghdGhpcy5hY3RpdmVTZWN0aW9uKCkpIHtcclxuICAgICAgdGhpcy5hY3RpdmVTZWN0aW9uLnNldCh2YWx1ZVswXS5pZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBuYXZpZ2F0aW9uQ29uZmlnKHZhbHVlOiBTZWN0aW9uTmF2aWdhdGlvbkNvbmZpZykge1xyXG4gICAgdGhpcy5jb25maWcuc2V0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgYXJpYUxhYmVsID0gJ05hdmVnYcOnw6NvIGRhIHDDoWdpbmEnO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTZWN0aW9uTmF2aWdhdGlvbkRhdGE+KCk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUnKSBzdHlsZUJpbmRpbmcgPSB7XHJcbiAgICAnLS1jb2xvci1iYXNlJzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcigncHJpbWFyeS1iYXNlJyksXHJcbiAgICAnLS1jb2xvci10ZXh0JzogdGhpcy5jdXJhU2VydmljZS5nZXRDb2xvcignbmV1dHJhbC1iYXNlJyksXHJcbiAgICAnLS1jb2xvci1hY3RpdmUtdGV4dCc6IHRoaXMuY3VyYVNlcnZpY2UuZ2V0Q29sb3IoJ25ldXRyYWwtcHVyZXdoaXRlJyksXHJcbiAgICAnLS1mb250LXNpemUnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldEZvbnRTaXplKCksXHJcbiAgICAnLS1mb250LXdlaWdodC1hY3RpdmUnOiB0aGlzLmN1cmFTZXJ2aWNlLmdldEZvbnRXZWlnaHRzKClbJ21lZGl1bSddLFxyXG4gIH07XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ25hdmlnYXRpb25NZW51JywgeyBzdGF0aWM6IHRydWUgfSkgbmF2aWdhdGlvbk1lbnUhOiBFbGVtZW50UmVmPEhUTUxVTGlzdEVsZW1lbnQ+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5zZWN0aW9ucygpO1xyXG4gICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoICYmICF0aGlzLmFjdGl2ZVNlY3Rpb24oKSkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlU2VjdGlvbi5zZXQoc2VjdGlvbnNbMF0uaWQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zKCk7XHJcbiAgICBpZiAoIXNlY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ08gU2VjdGlvbk5hdmlnYXRpb25Db21wb25lbnQgcmVxdWVyIHBlbG8gbWVub3MgdW1hIHNlw6fDo28uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZVNlY3Rpb24oKSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZVNlY3Rpb24uc2V0KHNlY3Rpb25zWzBdLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2FkbyBwYXJhIGV2aXRhciBtdWx0aXBsb3MgY2FsY3Vsb3MgZGVzbmVjZXNzw6FyaW9zIGVucXVhbnRvIHNjcm9sbGFcclxuICAgIGNvbnN0IFRJTUVfVE9fQVZPSURfVU5FQ0VTU0FSWV9DQUxDVUxBVElPTlMgPSA1MDtcclxuICAgIHRoaXMuc2Nyb2xsVG9NZW51QW5jaG9yU3Vic2NyaXB0aW9uID0gdGhpcy5zY3JvbGxUb01lbnVBbmNob3JTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKFRJTUVfVE9fQVZPSURfVU5FQ0VTU0FSWV9DQUxDVUxBVElPTlMpKS5zdWJzY3JpYmUoKGFuY2hvcklkKSA9PiB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9NZW51QW5jaG9yKGFuY2hvcklkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3aW5kb3dTY3JvbGwoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuYXZIZWlnaHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLnJkc2l0ZS1zZWN0aW9uLW5hdmlnYXRpb24nKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDA7XHJcbiAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5wYWdlLWhlYWRlcicpPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMDtcclxuICAgIGxldCBzZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnNlY3Rpb25zKCk/LmZvckVhY2goKHNlY3Rpb24sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IG1lbnVUb3AgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgIyR7c2VjdGlvbi5pZH1gKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIHx8IDA7XHJcbiAgICAgIGlmIChtZW51VG9wKSB7XHJcbiAgICAgICAgY29uc3QgY2FsYyA9IHdpbmRvdy5zY3JvbGxZIC0gbWVudVRvcCArIG5hdkhlaWdodCArIHBhZ2VIZWFkZXJIZWlnaHQ7XHJcbiAgICAgICAgaWYgKGNhbGMgPj0gMCkge1xyXG4gICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VjdGlvbnMoKT8uW3NlbGVjdGVkSW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU2VjdGlvbi5zZXQodGhpcy5zZWN0aW9ucygpPy5bc2VsZWN0ZWRJbmRleF0/LmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNlY3Rpb25zKCk/LltzZWxlY3RlZEluZGV4XSkge1xyXG4gICAgICB0aGlzLnNjcm9sbFRvTWVudUFuY2hvclN1YmplY3QubmV4dCh0aGlzLnNlY3Rpb25zKCk/LltzZWxlY3RlZEluZGV4XT8uaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9NZW51QW5jaG9yKGFuY2hvcklkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuYW5jaG9yc0VsLmZpbmQoKGFuY2hvcikgPT4gYW5jaG9yLm5hdGl2ZUVsZW1lbnQuaWQgPT0gYGFuY2hvci0ke2FuY2hvcklkfWApO1xyXG4gICAgaWYgKCFhbmNob3IpIHJldHVybjtcclxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbVRoZUNlbnRlck9mVGhlQW5jaG9yID0gKGFuY2hvci5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgKyBhbmNob3IubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgYW5jaG9yPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJPZkNvbnRhaW5lckVsID0gdGhpcy5jb250YWluZXJFbD8ubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCAvIDI7XHJcbiAgICBjb25zdCBsZWZ0ID0gZGlzdGFuY2VGcm9tVGhlQ2VudGVyT2ZUaGVBbmNob3IgLSBjZW50ZXJPZkNvbnRhaW5lckVsO1xyXG4gICAgdGhpcy5jb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcclxuICAgICAgbGVmdDogbGVmdCxcclxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9NZW51QW5jaG9yU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bmF2IGNsYXNzPVwicmRzaXRlLXNlY3Rpb24tbmF2aWdhdGlvblwiIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCIgW3N0eWxlLnRvcC5weF09XCJjb25maWcoKT8ub2Zmc2V0VG9wIHx8IDBcIj5cclxuICA8dWwgI2NvbnRhaW5lckVsIGNsYXNzPVwicmRzaXRlLXNlY3Rpb24tbmF2aWdhdGlvbi1tZW51XCIgcm9sZT1cIm1lbnViYXJcIj5cclxuICAgIEBmb3IgKHNlY3Rpb24gb2Ygc2VjdGlvbnMoKTsgdHJhY2sgc2VjdGlvbi5pZCkge1xyXG4gICAgICBAaWYgKHNlY3Rpb24udGl0bGUpIHtcclxuICAgICAgICA8bGkgcm9sZT1cIm5vbmVcIj5cclxuICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICNhbmNob3JFbFxyXG4gICAgICAgICAgICBpZD1cImFuY2hvci17eyBzZWN0aW9uLmlkIH19XCJcclxuICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgICAgICAgW2hyZWZdPVwiJyMnICsgc2VjdGlvbi5pZFwiXHJcbiAgICAgICAgICAgIHJkc2l0ZWxpbmtcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImFjdGl2ZVNlY3Rpb24oKSA9PT0gc2VjdGlvbi5pZCA/ICdwYWdlJyA6IG51bGxcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidOYXZlZ2FyIHBhcmEgJyArIHNlY3Rpb24udGl0bGVcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogYWN0aXZlU2VjdGlvbigpID09PSBzZWN0aW9uLmlkIH1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBzZWN0aW9uLnRpdGxlIH19XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIDwvdWw+XHJcbjwvbmF2PlxyXG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Inject, PLATFORM_ID, Optional, makeStateKey, signal, EventEmitter, Component, Input, Output, Directive, HostListener, CUSTOM_ELEMENTS_SCHEMA, ViewChild, HostBinding, effect, inject, Pipe } from '@angular/core';
2
+ import { InjectionToken, Injectable, Inject, PLATFORM_ID, Optional, makeStateKey, signal, EventEmitter, Component, Input, Output, Directive, HostListener, CUSTOM_ELEMENTS_SCHEMA, ViewChild, HostBinding, effect, inject, ViewChildren, Pipe } from '@angular/core';
3
3
  import algoliasearch from 'algoliasearch';
4
4
  import { from, fromEvent, startWith, timeout, catchError, of, Observable, debounceTime, BehaviorSubject } from 'rxjs';
5
5
  import * as i2 from '@angular/common';
@@ -19319,6 +19319,8 @@ class SectionNavigationComponent {
19319
19319
  this.config = signal(undefined);
19320
19320
  this.activeSection = signal('');
19321
19321
  this.isMobile = window.innerWidth < 768;
19322
+ this.scrollToMenuAnchorSubscription = null;
19323
+ this.scrollToMenuAnchorSubject = new BehaviorSubject('');
19322
19324
  this.ariaLabel = 'Navegação da página';
19323
19325
  this.sectionChange = new EventEmitter();
19324
19326
  this.styleBinding = {
@@ -19343,29 +19345,60 @@ class SectionNavigationComponent {
19343
19345
  if (!this.activeSection()) {
19344
19346
  this.activeSection.set(sections[0].id);
19345
19347
  }
19348
+ // Usado para evitar multiplos calculos desnecessários enquanto scrolla
19349
+ const TIME_TO_AVOID_UNECESSARY_CALCULATIONS = 50;
19350
+ this.scrollToMenuAnchorSubscription = this.scrollToMenuAnchorSubject.pipe(debounceTime(TIME_TO_AVOID_UNECESSARY_CALCULATIONS)).subscribe((anchorId) => {
19351
+ this.scrollToMenuAnchor(anchorId);
19352
+ });
19346
19353
  }
19347
19354
  windowScroll() {
19348
19355
  const navHeight = document.querySelector('.rdsite-section-navigation')?.getBoundingClientRect().top || 0;
19349
19356
  const pageHeaderHeight = document.querySelector('.page-header')?.getBoundingClientRect().top || 0;
19350
- let activeIndex = -1;
19351
- this.sections().forEach((section, index) => {
19357
+ let selectedIndex = -1;
19358
+ this.sections()?.forEach((section, index) => {
19352
19359
  const menuTop = document.querySelector(`#${section.id}`)?.getBoundingClientRect().top || 0;
19353
19360
  if (menuTop) {
19354
19361
  const calc = window.scrollY - menuTop + navHeight + pageHeaderHeight;
19355
19362
  if (calc >= 0) {
19356
- activeIndex = index;
19357
- this.activeSection.set(this.sections()[activeIndex].id);
19363
+ selectedIndex = index;
19364
+ if (this.sections()?.[selectedIndex]) {
19365
+ this.activeSection.set(this.sections()?.[selectedIndex]?.id);
19366
+ }
19358
19367
  }
19359
19368
  }
19360
19369
  });
19370
+ if (this.sections()?.[selectedIndex]) {
19371
+ this.scrollToMenuAnchorSubject.next(this.sections()?.[selectedIndex]?.id);
19372
+ }
19373
+ }
19374
+ scrollToMenuAnchor(anchorId) {
19375
+ const anchor = this.anchorsEl.find((anchor) => anchor.nativeElement.id == `anchor-${anchorId}`);
19376
+ if (!anchor)
19377
+ return;
19378
+ const distanceFromTheCenterOfTheAnchor = (anchor.nativeElement.offsetLeft + anchor.nativeElement.offsetLeft + anchor?.nativeElement.offsetWidth) / 2;
19379
+ const centerOfContainerEl = this.containerEl?.nativeElement.clientWidth / 2;
19380
+ const left = distanceFromTheCenterOfTheAnchor - centerOfContainerEl;
19381
+ this.containerEl.nativeElement.scrollTo({
19382
+ left: left,
19383
+ behavior: 'smooth',
19384
+ });
19385
+ }
19386
+ ngOnDestroy() {
19387
+ this.scrollToMenuAnchorSubscription?.unsubscribe();
19361
19388
  }
19362
19389
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SectionNavigationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19363
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SectionNavigationComponent, isStandalone: true, selector: "nav[rdsite-section-navigation]", inputs: { navigationSections: "navigationSections", navigationConfig: "navigationConfig", ariaLabel: "ariaLabel" }, outputs: { sectionChange: "sectionChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:scroll": "onWindowScroll()" }, properties: { "style": "this.styleBinding" } }, viewQueries: [{ propertyName: "navigationMenu", first: true, predicate: ["navigationMenu"], descendants: true, static: true }], ngImport: i0, template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #navigationMenu class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n target=\"_self\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RdsiteLinkDirective, selector: "[rdsitelink]", inputs: ["anchorAdjustment", "anchorExtraAdjustment", "phonemodal"] }] }); }
19390
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SectionNavigationComponent, isStandalone: true, selector: "nav[rdsite-section-navigation]", inputs: { navigationSections: "navigationSections", navigationConfig: "navigationConfig", ariaLabel: "ariaLabel" }, outputs: { sectionChange: "sectionChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:scroll": "onWindowScroll()" }, properties: { "style": "this.styleBinding" } }, viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerEl"], descendants: true }, { propertyName: "navigationMenu", first: true, predicate: ["navigationMenu"], descendants: true, static: true }, { propertyName: "anchorsEl", predicate: ["anchorEl"], descendants: true }], ngImport: i0, template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #containerEl class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n #anchorEl\r\n id=\"anchor-{{ section.id }}\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RdsiteLinkDirective, selector: "[rdsitelink]", inputs: ["anchorAdjustment", "anchorExtraAdjustment", "phonemodal"] }] }); }
19364
19391
  }
19365
19392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SectionNavigationComponent, decorators: [{
19366
19393
  type: Component,
19367
- args: [{ selector: 'nav[rdsite-section-navigation]', standalone: true, imports: [CommonModule, RdsiteLinkDirective], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #navigationMenu class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n target=\"_self\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"] }]
19368
- }], ctorParameters: () => [], propDecorators: { onWindowResize: [{
19394
+ args: [{ selector: 'nav[rdsite-section-navigation]', standalone: true, imports: [CommonModule, RdsiteLinkDirective], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<nav class=\"rdsite-section-navigation\" [attr.aria-label]=\"ariaLabel\" [style.top.px]=\"config()?.offsetTop || 0\">\r\n <ul #containerEl class=\"rdsite-section-navigation-menu\" role=\"menubar\">\r\n @for (section of sections(); track section.id) {\r\n @if (section.title) {\r\n <li role=\"none\">\r\n <a\r\n #anchorEl\r\n id=\"anchor-{{ section.id }}\"\r\n role=\"menuitem\"\r\n [href]=\"'#' + section.id\"\r\n rdsitelink\r\n [attr.aria-current]=\"activeSection() === section.id ? 'page' : null\"\r\n [attr.aria-label]=\"'Navegar para ' + section.title\"\r\n [ngClass]=\"{ active: activeSection() === section.id }\"\r\n >\r\n {{ section.title }}\r\n </a>\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n", styles: [".rdsite-section-navigation{width:100%;position:sticky;left:0;z-index:1000;background-color:#fff;border-bottom:1px solid #b7b7b7;box-shadow:0 4px 8px #26262629;padding-top:10px}.rdsite-section-navigation-menu{box-sizing:border-box;width:90%;position:relative;max-width:1366px;margin-left:auto;margin-right:auto;display:flex}.rdsite-section-navigation-menu.full-container{width:100%;max-width:100%}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu{overflow-x:auto;white-space:nowrap}}.rdsite-section-navigation-menu li>a{text-decoration:none;padding:12px 8px;font-size:var(--font-size);font-weight:var(--font-weight-active);color:var(--color-text);display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:158px}@media only screen and (max-width: 1366px){.rdsite-section-navigation-menu li>a{max-width:135px}}.rdsite-section-navigation-menu li>a.active{border-radius:4px 4px 0 0!important;background-color:var(--color-base);color:var(--color-active-text)}\n"] }]
19395
+ }], ctorParameters: () => [], propDecorators: { containerEl: [{
19396
+ type: ViewChild,
19397
+ args: ['containerEl']
19398
+ }], anchorsEl: [{
19399
+ type: ViewChildren,
19400
+ args: ['anchorEl']
19401
+ }], onWindowResize: [{
19369
19402
  type: HostListener,
19370
19403
  args: ['window:resize']
19371
19404
  }], onWindowScroll: [{