@updevs/components 1.0.0-alpha.10 → 1.0.0-alpha.12

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.
Files changed (73) hide show
  1. package/badge/badge-config.model.d.ts +1 -1
  2. package/badge/badge.component.d.ts +1 -1
  3. package/badge/badge.config.d.ts +1 -1
  4. package/button/button.component.d.ts +3 -3
  5. package/card/card.component.d.ts +2 -2
  6. package/dropdown/dropdown.component.d.ts +2 -2
  7. package/dropdown/models/dropdown-item.d.ts +2 -1
  8. package/esm2022/badge/badge-config.model.mjs +1 -1
  9. package/esm2022/badge/badge.component.mjs +1 -1
  10. package/esm2022/badge/badge.config.mjs +1 -1
  11. package/esm2022/button/button.component.mjs +1 -1
  12. package/esm2022/card/card.component.mjs +1 -1
  13. package/esm2022/dropdown/dropdown.component.mjs +2 -2
  14. package/esm2022/dropdown/models/dropdown-item.mjs +1 -1
  15. package/esm2022/layout/abstractions/base-page.component.mjs +2 -2
  16. package/esm2022/layout/assets/i18n/en.json +7 -0
  17. package/esm2022/layout/assets/i18n/pt.json +7 -0
  18. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.mjs +4 -18
  19. package/esm2022/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.mjs +9 -5
  20. package/esm2022/layout/models/login-page-config.model.mjs +1 -1
  21. package/esm2022/layout/models/login-page.config.mjs +1 -1
  22. package/esm2022/layout/pages/auth-flow/logged-out/logged-out.component.mjs +1 -1
  23. package/esm2022/layout/pages/auth-flow/login/login.component.mjs +14 -7
  24. package/esm2022/layout/pages/auth-flow/oauth-callback/oauth-callback.component.mjs +1 -1
  25. package/esm2022/layout/partials/header/header.component.mjs +101 -49
  26. package/esm2022/layout/partials/page-header/page-header.component.mjs +8 -8
  27. package/esm2022/layout/upd-layout.module.mjs +8 -4
  28. package/esm2022/list/models/list-item.mjs +1 -1
  29. package/esm2022/list/models/list-item.model.mjs +1 -1
  30. package/esm2022/modal/components/modal-container/modal-container.component.mjs +1 -1
  31. package/esm2022/modal/models/modal-config.model.mjs +1 -1
  32. package/esm2022/modal/models/modal-ref.mjs +1 -1
  33. package/esm2022/modal/models/modal.config.mjs +1 -1
  34. package/esm2022/modal/services/modal-alert.service.mjs +1 -1
  35. package/esm2022/table/abstractions/base-column.model.mjs +1 -1
  36. package/esm2022/table/components/search-section/search-section.component.mjs +1 -1
  37. package/esm2022/table/models/columns/boolean-column.model.mjs +1 -1
  38. package/esm2022/table/models/columns/text-column.model.mjs +1 -1
  39. package/esm2022/table/services/storages/saved-views.storage.mjs +11 -18
  40. package/esm2022/table/table.component.mjs +6 -6
  41. package/fesm2022/updevs-components-badge.mjs.map +1 -1
  42. package/fesm2022/updevs-components-button.mjs.map +1 -1
  43. package/fesm2022/updevs-components-card.mjs.map +1 -1
  44. package/fesm2022/updevs-components-dropdown.mjs +1 -1
  45. package/fesm2022/updevs-components-dropdown.mjs.map +1 -1
  46. package/fesm2022/updevs-components-layout.mjs +150 -86
  47. package/fesm2022/updevs-components-layout.mjs.map +1 -1
  48. package/fesm2022/updevs-components-list.mjs.map +1 -1
  49. package/fesm2022/updevs-components-modal.mjs.map +1 -1
  50. package/fesm2022/updevs-components-table.mjs +14 -21
  51. package/fesm2022/updevs-components-table.mjs.map +1 -1
  52. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.component.d.ts +1 -7
  53. package/layout/layouts/vertical-sidebar-layout/vertical-sidebar-layout.module.d.ts +2 -1
  54. package/layout/models/login-page-config.model.d.ts +10 -1
  55. package/layout/models/login-page.config.d.ts +10 -1
  56. package/layout/pages/auth-flow/login/login.component.d.ts +3 -0
  57. package/layout/partials/header/header.component.d.ts +38 -21
  58. package/layout/partials/page-header/page-header.component.d.ts +2 -2
  59. package/layout/upd-layout.module.d.ts +2 -1
  60. package/list/models/list-item.d.ts +1 -1
  61. package/list/models/list-item.model.d.ts +1 -1
  62. package/modal/components/modal-container/modal-container.component.d.ts +2 -2
  63. package/modal/models/modal-config.model.d.ts +2 -2
  64. package/modal/models/modal-ref.d.ts +1 -1
  65. package/modal/models/modal.config.d.ts +2 -2
  66. package/modal/services/modal-alert.service.d.ts +2 -2
  67. package/package.json +19 -19
  68. package/table/abstractions/base-column.model.d.ts +2 -2
  69. package/table/components/search-section/search-section.component.d.ts +2 -2
  70. package/table/models/columns/boolean-column.model.d.ts +1 -1
  71. package/table/models/columns/text-column.model.d.ts +1 -1
  72. package/table/services/storages/saved-views.storage.d.ts +2 -5
  73. package/table/table.component.d.ts +2 -2
@@ -1,77 +1,129 @@
1
- import { Component, ViewEncapsulation, Input, HostBinding, inject } from '@angular/core';
2
- import { UpdCoreLayoutConfigService, BaseComponent, LayoutService } from '@updevs/sdk/layout';
1
+ import { Component, ViewEncapsulation, HostBinding, inject, computed, signal, viewChild, ElementRef } from '@angular/core';
2
+ import { TextService } from '@updevs/sdk';
3
+ import { BaseComponent, LayoutService, PreferencesStorage, UpdCoreLayoutConfigService } from '@updevs/sdk/layout';
3
4
  import { TranslocoService } from '@jsverse/transloco';
5
+ import { NotificationsService } from '@updevs/sdk/notifications';
6
+ import { SecurityStorage } from '@updevs/sdk/security';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "@updevs/icons";
6
9
  import * as i2 from "@updevs/components/link";
10
+ import * as i3 from "@updevs/components/dropdown";
11
+ import * as i4 from "@jsverse/transloco";
7
12
  export class HeaderComponent extends BaseComponent {
8
13
  constructor() {
9
14
  super(...arguments);
10
- this.wrapperClasses = '';
11
- this.style = 'light';
12
- this.showSearchBar = true;
13
- this.nextThemeIcon = 'moon';
14
- this.nextThemeColor = 'black';
15
- this.currentNotificationsIcon = 'bell';
16
- this.hasNewNotifications = false;
17
- this.showNotifications = false;
18
- this.showLanguageSwitcher = true; // TODO: add on config.
19
- this.showUserMenu = false;
20
- this.baseWrapperClasses = 'navbar navbar-expand-md d-none d-lg-flex d-print-none';
15
+ this.languageSwitcherRef = viewChild('languageSwitcherBtn', { read: ElementRef });
16
+ this.notificationsRef = viewChild('notificationsBtn', { read: ElementRef });
17
+ this.loggedUserRef = viewChild('loggedUserBtn', { read: ElementRef });
18
+ this.isLanguageSwitcherDropdownOpen = false;
19
+ this.isNotificationsDropdownOpen = false;
20
+ this.isLoggedUserDropdownOpen = false;
21
+ this.style = signal('light');
22
+ this.nextThemeIcon = computed(() => this.currentPreferences()?.isDarkTheme ? 'sun' : 'moon-stars');
23
+ this.currentNotificationsIcon = computed(() => this.hasNewNotifications() ? 'bell-ringing' : 'bell');
24
+ this.hasNewNotifications = computed(() => this.currentNotifications().some(n => !n.dateRead));
25
+ this.languagesOptions = computed(() => {
26
+ const allLanguagesOptions = [];
27
+ const availableLanguages = (this.coreLayoutConfigService.config.availableLanguages || {});
28
+ Object.keys(availableLanguages).forEach(key => {
29
+ allLanguagesOptions.push({
30
+ id: key,
31
+ type: 'default',
32
+ text: availableLanguages[key],
33
+ isActive: this.currentLanguageKey() === key
34
+ });
35
+ });
36
+ return allLanguagesOptions;
37
+ });
38
+ this.loggedUserOptions = computed(() => {
39
+ const userActions = [];
40
+ this.coreLayoutConfigService.config.loggedUserMenuActions.forEach(act => userActions.push({
41
+ id: act.id(),
42
+ text: act.text(),
43
+ type: 'default',
44
+ icon: act.iconModel?.()
45
+ }));
46
+ return userActions;
47
+ });
48
+ this.userInfo = computed(() => this.securityStorage.getUserInfo());
49
+ this.userIdentification = computed(() => !!this.userInfo() ? this.coreLayoutConfigService.config.getUserName(this.userInfo()) : '');
50
+ this.userDescription = computed(() => !!this.coreLayoutConfigService.config.getUserDescription
51
+ ? this.coreLayoutConfigService.config.getUserDescription(this.userInfo())
52
+ : '');
53
+ this.shouldBlinkIfNewNotifications = computed(() => !!this.coreLayoutConfigService.config.shouldBlinkIfNewNotifications);
54
+ this.latestNotifications = computed(() => {
55
+ const unreadNotifications = this.currentNotifications()
56
+ .filter(n => !n.dateRead)
57
+ .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())
58
+ .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);
59
+ const readNotifications = this.currentNotifications()
60
+ .filter(n => !!n.dateRead)
61
+ .sort((a, b) => new Date(b.dateReceived).getTime() - new Date(a.dateReceived).getTime())
62
+ .slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);
63
+ return [
64
+ ...unreadNotifications,
65
+ ...readNotifications
66
+ ].slice(0, this.coreLayoutConfigService.config.numberOfLastNotificationsDisplayed);
67
+ });
68
+ this.textService = inject(TextService);
69
+ this.securityStorage = inject(SecurityStorage);
21
70
  this.coreLayoutConfigService = inject(UpdCoreLayoutConfigService);
22
71
  this.layoutService = inject(LayoutService);
23
72
  this.translocoService = inject(TranslocoService);
73
+ this.preferencesStorage = inject(PreferencesStorage);
74
+ this.notificationsService = inject(NotificationsService);
75
+ this.currentPreferences = this.preferencesStorage.getPreferences();
76
+ this.currentNotifications = this.notificationsService.notifications;
77
+ this.currentLanguageKey = signal('');
78
+ this.wrapperClasses = computed(() => `navbar navbar-expand-md d-none d-lg-flex d-print-none navbar-${this.style()}`);
79
+ // eslint-disable-next-line @typescript-eslint/member-ordering
80
+ this.config = computed(() => this.layoutService.mainHeaderConfig());
81
+ }
82
+ get classes() {
83
+ return this.wrapperClasses();
24
84
  }
25
85
  ngOnInit() {
26
- this.updateWrapperClasses();
27
- if (this.coreLayoutConfigService.config.showNotificationsButton) {
28
- this.setupNotifications();
29
- }
30
- if (this.coreLayoutConfigService.config.showUserMenu) {
31
- this.showUserMenu = true;
86
+ if (!!this.currentPreferences()?.isDarkTheme) {
87
+ this.layoutService.setDarkMode();
32
88
  }
33
- }
34
- ngOnChanges(changes) {
35
- if (!!changes['style'].currentValue) {
36
- this.updateWrapperClasses();
89
+ if (!!this.currentPreferences()?.currentLanguageCode) {
90
+ const code = this.currentPreferences().currentLanguageCode;
91
+ this.currentLanguageKey.set(code);
92
+ this.translocoService.setActiveLang(code);
37
93
  }
38
94
  }
39
95
  switchTheme() {
40
- const isDarkMode = this.nextThemeIcon === 'moon';
41
- this.nextThemeIcon = isDarkMode ? 'sun' : 'moon';
42
- this.nextThemeColor = isDarkMode ? 'white' : 'black';
43
- this.layoutService.toggleDarkMode(isDarkMode);
96
+ this.layoutService.toggleDarkMode();
44
97
  }
45
- // TODO: implement.
46
- switchLanguage() {
47
- const currentLang = this.translocoService.getActiveLang();
48
- this.translocoService.setActiveLang(currentLang === 'en' ? 'pt' : 'en');
98
+ switchLanguage(item) {
99
+ this.currentLanguageKey.set(item.id);
100
+ this.translocoService.setActiveLang(item.id);
101
+ this.preferencesStorage.savePreferences({ ...this.currentPreferences(), currentLanguageCode: item.id });
102
+ this.isLanguageSwitcherDropdownOpen = false;
49
103
  }
50
- openNotifications() {
51
- this.updateNotificationsIcon();
52
- }
53
- setupNotifications() {
54
- this.showNotifications = true;
104
+ selectLoggedUserMenuItem(item) {
105
+ const btn = this.coreLayoutConfigService.config.loggedUserMenuActions.find(b => b.id() === item.id);
106
+ if (!!btn?.clickFunction) {
107
+ btn.clickFunction({ data: this.userInfo() });
108
+ }
55
109
  }
56
- updateNotificationsIcon() {
57
- this.currentNotificationsIcon = this.currentNotificationsIcon === 'bell' ? 'bell-ringing' : 'bell';
58
- this.hasNewNotifications = !this.hasNewNotifications;
110
+ readNotification(notification) {
111
+ if (!notification.dateRead) {
112
+ this.notificationsService.markAsRead(notification.id);
113
+ }
114
+ this.notificationsService.clickOnNotification(notification);
59
115
  }
60
- updateWrapperClasses() {
61
- this.wrapperClasses = `${this.baseWrapperClasses} navbar-${this.style}`;
116
+ removeNotification(notification) {
117
+ this.notificationsService.removeNotifications(notification.id);
62
118
  }
63
119
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
64
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HeaderComponent, selector: "upd-header", inputs: { style: "style", showSearchBar: "showSearchBar" }, host: { properties: { "class": "this.wrapperClasses" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon\"></upd-icon>\n </upd-link>\n </div>\n @if (showLanguageSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchLanguage()\">\n <upd-icon tablerIcon=\"flag\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (showNotifications) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"openNotifications()\">\n <upd-icon [tablerIcon]=\"currentNotificationsIcon\"></upd-icon>\n @if (hasNewNotifications) {\n <span class=\"badge bg-red\"></span>\n }\n </upd-link>\n <div class=\"dropdown-menu dropdown-menu-arrow dropdown-menu-end dropdown-menu-card\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">Last updates</h3>\n </div>\n <div class=\"list-group list-group-flush list-group-hoverable\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-red d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 1</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Change deprecated html tags to text decoration classes (#29604)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 2</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n justify-content:between \u21D2 justify-content:space-between (#29734)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions show\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-yellow\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 3</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Update change-version.js (#29736)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-green d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 4</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Regenerate package-lock.json (#29730)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n @if (showUserMenu) {\n <div class=\"nav-item dropdown\">\n <a href=\"#\" class=\"nav-link d-flex lh-1 text-reset p-0\" data-bs-toggle=\"dropdown\"\n aria-label=\"Open user menu\">\n <!--<span class=\"avatar avatar-sm\" style=\"background-image: url(./static/avatars/000m.jpg)\"></span>-->\n <span class=\"avatar avatar-sm\"></span>\n <div class=\"d-none d-xl-block ps-2\">\n <div>Eros Stein</div>\n <div class=\"mt-1 small text-muted\">Administrator</div>\n </div>\n </a>\n <div class=\"dropdown-menu dropdown-menu-end dropdown-menu-arrow\">\n <a href=\"#\" class=\"dropdown-item\">Status</a>\n <a href=\"./profile.html\" class=\"dropdown-item\">Profile</a>\n <a href=\"#\" class=\"dropdown-item\">Feedback</a>\n <div class=\"dropdown-divider\"></div>\n <a href=\"./settings.html\" class=\"dropdown-item\">Settings</a>\n <a href=\"./sign-in.html\" class=\"dropdown-item\">Logout</a>\n </div>\n </div>\n }\n </div>\n @if (showSearchBar) {\n <div class=\"collapse navbar-collapse\">\n <div>\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"Search\u2026\">\n </div>\n </form>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i2.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
120
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: HeaderComponent, selector: "upd-header", host: { properties: { "class": "this.classes" } }, viewQueries: [{ propertyName: "languageSwitcherRef", first: true, predicate: ["languageSwitcherBtn"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "notificationsRef", first: true, predicate: ["notificationsBtn"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "loggedUserRef", first: true, predicate: ["loggedUserBtn"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n @if (!!config().showThemeSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon()\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (!!config().showLanguageSwitcher && languagesOptions().length > 0) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLanguageSwitcherDropdownOpen=true\"\n #languageSwitcherBtn>\n <upd-icon tablerIcon=\"language\"></upd-icon>\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLanguageSwitcherDropdownOpen\"\n [dropdownReference]=\"languageSwitcherRef()\" [items]=\"languagesOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isLanguageSwitcherDropdownOpen = $event\" (selectedItem)=\"switchLanguage($event)\">\n </upd-dropdown>\n </div>\n }\n @if (!!config().showNotifications) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isNotificationsDropdownOpen = true\"\n #notificationsBtn>\n <upd-icon [tablerIcon]=\"currentNotificationsIcon()\"></upd-icon>\n @if (hasNewNotifications()) {\n <span class=\"badge bg-red\" [class.badge-blink]=\"shouldBlinkIfNewNotifications()\"></span>\n }\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1 dropdown-menu-card\" [isOpen]=\"isNotificationsDropdownOpen\"\n [dropdownReference]=\"notificationsRef()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isNotificationsDropdownOpen = $event\" [minWidth]=\"400\" arrowType=\"right\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">{{ 'UpDevs.NotificationCenter.Title' | transloco }}</h3>\n </div>\n @for (notification of latestNotifications(); track notification) {\n <div class=\"list-group list-group-flush list-group-hoverable\" (click)=\"readNotification(notification)\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\">\n @if (!!notification.dateRead) {\n <span class=\"status-dot d-block\"></span>\n } @else {\n <span class=\"status-dot status-dot-animated bg-primary d-block\"></span>\n }\n </div>\n <div class=\"col text-truncate\">\n <a href=\"javascript:void(0)\" class=\"text-body d-block\"\n [class.fw-bold]=\"!notification.dateRead\">\n {{ textService.getText(notification.title) }}\n </a>\n @if (!!notification.description) {\n <div class=\"d-block text-secondary text-truncate mt-n1\">\n {{ textService.getText(notification.description) }}\n </div>\n }\n </div>\n <div class=\"col-auto\">\n <upd-link [customClasses]=\"['list-group-item-actions']\"\n (clicked)=\"removeNotification(notification)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-link>\n </div>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ 'UpDevs.NotificationCenter.NoNotifications' | transloco }}</h1>\n </div>\n }\n </div>\n </upd-dropdown>\n </div>\n }\n </div>\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n }\n\n <div class=\"d-none d-xl-block ps-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n }\n </div>\n @if (!!config().showSearchBar) {\n <div class=\"collapse navbar-collapse\">\n <div class=\"me-2\" [class.w-100]=\"config().shouldUseFullSearchBar\">\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"{{'UpDevs.Header.Search' | transloco}}...\">\n </div>\n </form>\n </div>\n </div>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i2.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }, { kind: "component", type: i3.DropdownComponent, selector: "upd-dropdown", inputs: ["items", "header", "isOpen", "shouldCloseOnOutsideClick", "arrowType", "wrapperClasses", "elementsExcludedFromOutsideClick", "minHeight", "maxHeight", "minWidth", "maxWidth", "dropdownReference", "dropdownReferencePosition", "textOverflowStrategy"], outputs: ["isOpenChange", "selectedItem", "checkboxChanged"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
65
121
  }
66
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: HeaderComponent, decorators: [{
67
123
  type: Component,
68
- args: [{ selector: 'upd-header', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon\"></upd-icon>\n </upd-link>\n </div>\n @if (showLanguageSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchLanguage()\">\n <upd-icon tablerIcon=\"flag\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (showNotifications) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"openNotifications()\">\n <upd-icon [tablerIcon]=\"currentNotificationsIcon\"></upd-icon>\n @if (hasNewNotifications) {\n <span class=\"badge bg-red\"></span>\n }\n </upd-link>\n <div class=\"dropdown-menu dropdown-menu-arrow dropdown-menu-end dropdown-menu-card\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">Last updates</h3>\n </div>\n <div class=\"list-group list-group-flush list-group-hoverable\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-red d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 1</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Change deprecated html tags to text decoration classes (#29604)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 2</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n justify-content:between \u21D2 justify-content:space-between (#29734)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions show\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-yellow\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span class=\"status-dot d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 3</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Update change-version.js (#29736)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\"><span\n class=\"status-dot status-dot-animated bg-green d-block\"></span></div>\n <div class=\"col text-truncate\">\n <a href=\"#\" class=\"text-body d-block\">Example 4</a>\n <div class=\"d-block text-muted text-truncate mt-n1\">\n Regenerate package-lock.json (#29730)\n </div>\n </div>\n <div class=\"col-auto\">\n <a href=\"#\" class=\"list-group-item-actions\">\n <!-- Download SVG icon from http://tabler-icons.io/i/star -->\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"icon text-muted\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" stroke-width=\"2\"\n stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\">\n <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n <path\n d=\"M12 17.75l-6.172 3.245l1.179 -6.873l-5 -4.867l6.9 -1l3.086 -6.253l3.086 6.253l6.9 1l-5 4.867l1.179 6.873z\"/>\n </svg>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n @if (showUserMenu) {\n <div class=\"nav-item dropdown\">\n <a href=\"#\" class=\"nav-link d-flex lh-1 text-reset p-0\" data-bs-toggle=\"dropdown\"\n aria-label=\"Open user menu\">\n <!--<span class=\"avatar avatar-sm\" style=\"background-image: url(./static/avatars/000m.jpg)\"></span>-->\n <span class=\"avatar avatar-sm\"></span>\n <div class=\"d-none d-xl-block ps-2\">\n <div>Eros Stein</div>\n <div class=\"mt-1 small text-muted\">Administrator</div>\n </div>\n </a>\n <div class=\"dropdown-menu dropdown-menu-end dropdown-menu-arrow\">\n <a href=\"#\" class=\"dropdown-item\">Status</a>\n <a href=\"./profile.html\" class=\"dropdown-item\">Profile</a>\n <a href=\"#\" class=\"dropdown-item\">Feedback</a>\n <div class=\"dropdown-divider\"></div>\n <a href=\"./settings.html\" class=\"dropdown-item\">Settings</a>\n <a href=\"./sign-in.html\" class=\"dropdown-item\">Logout</a>\n </div>\n </div>\n }\n </div>\n @if (showSearchBar) {\n <div class=\"collapse navbar-collapse\">\n <div>\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"Search\u2026\">\n </div>\n </form>\n </div>\n </div>\n }\n</div>\n" }]
69
- }], propDecorators: { wrapperClasses: [{
124
+ args: [{ selector: 'upd-header', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-xl\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-nav flex-row order-md-last\">\n <div class=\"d-none d-md-flex me-3\">\n @if (!!config().showThemeSwitcher) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"switchTheme()\">\n <upd-icon [tablerIcon]=\"nextThemeIcon()\"></upd-icon>\n </upd-link>\n </div>\n }\n @if (!!config().showLanguageSwitcher && languagesOptions().length > 0) {\n <div class=\"nav-item\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLanguageSwitcherDropdownOpen=true\"\n #languageSwitcherBtn>\n <upd-icon tablerIcon=\"language\"></upd-icon>\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLanguageSwitcherDropdownOpen\"\n [dropdownReference]=\"languageSwitcherRef()\" [items]=\"languagesOptions()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isLanguageSwitcherDropdownOpen = $event\" (selectedItem)=\"switchLanguage($event)\">\n </upd-dropdown>\n </div>\n }\n @if (!!config().showNotifications) {\n <div class=\"nav-item dropdown d-none d-md-flex\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isNotificationsDropdownOpen = true\"\n #notificationsBtn>\n <upd-icon [tablerIcon]=\"currentNotificationsIcon()\"></upd-icon>\n @if (hasNewNotifications()) {\n <span class=\"badge bg-red\" [class.badge-blink]=\"shouldBlinkIfNewNotifications()\"></span>\n }\n </upd-link>\n <upd-dropdown wrapperClasses=\"mt-1 dropdown-menu-card\" [isOpen]=\"isNotificationsDropdownOpen\"\n [dropdownReference]=\"notificationsRef()\" [shouldCloseOnOutsideClick]=\"true\"\n (isOpenChange)=\"isNotificationsDropdownOpen = $event\" [minWidth]=\"400\" arrowType=\"right\">\n <div class=\"card\">\n <div class=\"card-header\">\n <h3 class=\"card-title\">{{ 'UpDevs.NotificationCenter.Title' | transloco }}</h3>\n </div>\n @for (notification of latestNotifications(); track notification) {\n <div class=\"list-group list-group-flush list-group-hoverable\" (click)=\"readNotification(notification)\">\n <div class=\"list-group-item\">\n <div class=\"row align-items-center\">\n <div class=\"col-auto\">\n @if (!!notification.dateRead) {\n <span class=\"status-dot d-block\"></span>\n } @else {\n <span class=\"status-dot status-dot-animated bg-primary d-block\"></span>\n }\n </div>\n <div class=\"col text-truncate\">\n <a href=\"javascript:void(0)\" class=\"text-body d-block\"\n [class.fw-bold]=\"!notification.dateRead\">\n {{ textService.getText(notification.title) }}\n </a>\n @if (!!notification.description) {\n <div class=\"d-block text-secondary text-truncate mt-n1\">\n {{ textService.getText(notification.description) }}\n </div>\n }\n </div>\n <div class=\"col-auto\">\n <upd-link [customClasses]=\"['list-group-item-actions']\"\n (clicked)=\"removeNotification(notification)\">\n <upd-icon tablerIcon=\"x\"></upd-icon>\n </upd-link>\n </div>\n </div>\n </div>\n </div>\n } @empty {\n <div class=\"empty\">\n <h1 class=\"text-body-tertiary\">{{ 'UpDevs.NotificationCenter.NoNotifications' | transloco }}</h1>\n </div>\n }\n </div>\n </upd-dropdown>\n </div>\n }\n </div>\n @if (!!config().showUserMenu && !!userInfo()) {\n <div class=\"nav-item dropdown\">\n <upd-link [isNavigation]=\"true\" [customClasses]=\"['px-0']\" (clicked)=\"isLoggedUserDropdownOpen = true\" #loggedUserBtn>\n @if (!!userInfo()!.avatar) {\n <span class=\"avatar avatar-sm\" style=\"background-image: url({{userInfo()?.avatar}})\"></span>\n }\n\n <div class=\"d-none d-xl-block ps-2\">\n <div>{{ userIdentification() }}</div>\n @if (!!userDescription()) {\n <div class=\"mt-1 small text-muted\">{{ userDescription() }}</div>\n }\n </div>\n </upd-link>\n @if (loggedUserOptions().length > 0) {\n <upd-dropdown wrapperClasses=\"mt-1\" [isOpen]=\"isLoggedUserDropdownOpen\" [dropdownReference]=\"loggedUserRef()\"\n [items]=\"loggedUserOptions()\" [shouldCloseOnOutsideClick]=\"true\" (selectedItem)=\"selectLoggedUserMenuItem($event)\"\n (isOpenChange)=\"isLoggedUserDropdownOpen = $event\" arrowType=\"right\">\n </upd-dropdown>\n }\n </div>\n }\n </div>\n @if (!!config().showSearchBar) {\n <div class=\"collapse navbar-collapse\">\n <div class=\"me-2\" [class.w-100]=\"config().shouldUseFullSearchBar\">\n <form autocomplete=\"off\" novalidate>\n <div class=\"input-icon\">\n <span class=\"input-icon-addon\">\n <upd-icon tablerIcon=\"search\"></upd-icon>\n </span>\n <input type=\"text\" value=\"\" class=\"form-control\" placeholder=\"{{'UpDevs.Header.Search' | transloco}}...\">\n </div>\n </form>\n </div>\n </div>\n }\n</div>\n" }]
125
+ }], propDecorators: { classes: [{
70
126
  type: HostBinding,
71
127
  args: ['class']
72
- }], style: [{
73
- type: Input
74
- }], showSearchBar: [{
75
- type: Input
76
128
  }] } });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQW9DLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBVXRELE1BQU0sT0FBTyxlQUFnQixTQUFRLGFBQWE7SUFObEQ7O1FBTzBCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRWpDLFVBQUssR0FBb0IsT0FBTyxDQUFDO1FBQ2pDLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTlCLGtCQUFhLEdBQW9CLE1BQU0sQ0FBQztRQUN4QyxtQkFBYyxHQUFHLE9BQU8sQ0FBQztRQUN6Qiw2QkFBd0IsR0FBb0IsTUFBTSxDQUFDO1FBQ25ELHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIseUJBQW9CLEdBQUcsSUFBSSxDQUFDLENBQUMsdUJBQXVCO1FBQ3BELGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRWIsdUJBQWtCLEdBQUcsdURBQXVELENBQUM7UUFFcEUsNEJBQXVCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDN0Qsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FrRGhFO0lBaERHLFFBQVE7UUFDSixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQztRQUNqRCxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBRXJELElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsY0FBYztRQUNWLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNuRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDekQsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixXQUFXLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1RSxDQUFDOzhHQW5FUSxlQUFlO2tHQUFmLGVBQWUsb05DYjVCLHV0WEE2S0E7OzJGRGhLYSxlQUFlO2tCQU4zQixTQUFTOytCQUNJLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSTs4QkFHZixjQUFjO3NCQUFuQyxXQUFXO3VCQUFDLE9BQU87Z0JBRVgsS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBJbnB1dCwgSG9zdEJpbmRpbmcsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVwZENvcmVMYXlvdXRDb25maWdTZXJ2aWNlLCBCYXNlQ29tcG9uZW50LCBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsvbGF5b3V0JztcbmltcG9ydCB7IFRhYmxlckljb25zVHlwZSB9IGZyb20gJ0B1cGRldnMvaWNvbnMnO1xuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XG5cbmltcG9ydCB7IEhlYWRlclN0eWxlVHlwZSB9IGZyb20gJy4vaGVhZGVyLXN0eWxlLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2hlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgd3JhcHBlckNsYXNzZXMgPSAnJztcblxuICAgIEBJbnB1dCgpIHN0eWxlOiBIZWFkZXJTdHlsZVR5cGUgPSAnbGlnaHQnO1xuICAgIEBJbnB1dCgpIHNob3dTZWFyY2hCYXIgPSB0cnVlO1xuXG4gICAgbmV4dFRoZW1lSWNvbjogVGFibGVySWNvbnNUeXBlID0gJ21vb24nO1xuICAgIG5leHRUaGVtZUNvbG9yID0gJ2JsYWNrJztcbiAgICBjdXJyZW50Tm90aWZpY2F0aW9uc0ljb246IFRhYmxlckljb25zVHlwZSA9ICdiZWxsJztcbiAgICBoYXNOZXdOb3RpZmljYXRpb25zID0gZmFsc2U7XG4gICAgc2hvd05vdGlmaWNhdGlvbnMgPSBmYWxzZTtcbiAgICBzaG93TGFuZ3VhZ2VTd2l0Y2hlciA9IHRydWU7IC8vIFRPRE86IGFkZCBvbiBjb25maWcuXG4gICAgc2hvd1VzZXJNZW51ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGJhc2VXcmFwcGVyQ2xhc3NlcyA9ICduYXZiYXIgbmF2YmFyLWV4cGFuZC1tZCBkLW5vbmUgZC1sZy1mbGV4IGQtcHJpbnQtbm9uZSc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvcmVMYXlvdXRDb25maWdTZXJ2aWNlID0gaW5qZWN0KFVwZENvcmVMYXlvdXRDb25maWdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheW91dFNlcnZpY2UgPSBpbmplY3QoTGF5b3V0U2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xvY29TZXJ2aWNlID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlV3JhcHBlckNsYXNzZXMoKTtcblxuICAgICAgICBpZiAodGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcuc2hvd05vdGlmaWNhdGlvbnNCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBOb3RpZmljYXRpb25zKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcuc2hvd1VzZXJNZW51KSB7XG4gICAgICAgICAgICB0aGlzLnNob3dVc2VyTWVudSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghIWNoYW5nZXNbJ3N0eWxlJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdyYXBwZXJDbGFzc2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2hUaGVtZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNEYXJrTW9kZSA9IHRoaXMubmV4dFRoZW1lSWNvbiA9PT0gJ21vb24nO1xuICAgICAgICB0aGlzLm5leHRUaGVtZUljb24gPSBpc0RhcmtNb2RlID8gJ3N1bicgOiAnbW9vbic7XG4gICAgICAgIHRoaXMubmV4dFRoZW1lQ29sb3IgPSBpc0RhcmtNb2RlID8gJ3doaXRlJyA6ICdibGFjayc7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKGlzRGFya01vZGUpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGltcGxlbWVudC5cbiAgICBzd2l0Y2hMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UuZ2V0QWN0aXZlTGFuZygpO1xuICAgICAgICB0aGlzLnRyYW5zbG9jb1NlcnZpY2Uuc2V0QWN0aXZlTGFuZyhjdXJyZW50TGFuZyA9PT0gJ2VuJyA/ICdwdCcgOiAnZW4nKTtcbiAgICB9XG5cbiAgICBvcGVuTm90aWZpY2F0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVOb3RpZmljYXRpb25zSWNvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBOb3RpZmljYXRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dOb3RpZmljYXRpb25zID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU5vdGlmaWNhdGlvbnNJY29uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnROb3RpZmljYXRpb25zSWNvbiA9IHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnNJY29uID09PSAnYmVsbCcgPyAnYmVsbC1yaW5naW5nJyA6ICdiZWxsJztcbiAgICAgICAgdGhpcy5oYXNOZXdOb3RpZmljYXRpb25zID0gIXRoaXMuaGFzTmV3Tm90aWZpY2F0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVdyYXBwZXJDbGFzc2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLndyYXBwZXJDbGFzc2VzID0gYCR7dGhpcy5iYXNlV3JhcHBlckNsYXNzZXN9IG5hdmJhci0ke3RoaXMuc3R5bGV9YDtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLXhsXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cIm5hdmJhci1uYXYgZmxleC1yb3cgb3JkZXItbWQtbGFzdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQtbWQtZmxleCBtZS0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJzd2l0Y2hUaGVtZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiBbdGFibGVySWNvbl09XCJuZXh0VGhlbWVJY29uXCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKHNob3dMYW5ndWFnZVN3aXRjaGVyKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtbGluayBbaXNOYXZpZ2F0aW9uXT1cInRydWVcIiBbY3VzdG9tQ2xhc3Nlc109XCJbJ3B4LTAnXVwiIChjbGlja2VkKT1cInN3aXRjaExhbmd1YWdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiB0YWJsZXJJY29uPVwiZmxhZ1wiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNob3dOb3RpZmljYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1pdGVtIGRyb3Bkb3duIGQtbm9uZSBkLW1kLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVwZC1saW5rIFtpc05hdmlnYXRpb25dPVwidHJ1ZVwiIFtjdXN0b21DbGFzc2VzXT1cIlsncHgtMCddXCIgKGNsaWNrZWQpPVwib3Blbk5vdGlmaWNhdGlvbnMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1pY29uIFt0YWJsZXJJY29uXT1cImN1cnJlbnROb3RpZmljYXRpb25zSWNvblwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc05ld05vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXJlZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1hcnJvdyBkcm9wZG93bi1tZW51LWVuZCBkcm9wZG93bi1tZW51LWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGVcIj5MYXN0IHVwZGF0ZXM8L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2ggbGlzdC1ncm91cC1ob3ZlcmFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cy1kb3Qgc3RhdHVzLWRvdC1hbmltYXRlZCBiZy1yZWQgZC1ibG9ja1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInRleHQtYm9keSBkLWJsb2NrXCI+RXhhbXBsZSAxPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgbXQtbjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZSBkZXByZWNhdGVkIGh0bWwgdGFncyB0byB0ZXh0IGRlY29yYXRpb24gY2xhc3NlcyAoIzI5NjA0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERvd25sb2FkIFNWRyBpY29uIGZyb20gaHR0cDovL3RhYmxlci1pY29ucy5pby9pL3N0YXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gdGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDE3Ljc1bC02LjE3MiAzLjI0NWwxLjE3OSAtNi44NzNsLTUgLTQuODY3bDYuOSAtMWwzLjA4NiAtNi4yNTNsMy4wODYgNi4yNTNsNi45IDFsLTUgNC44NjdsMS4xNzkgNi44NzN6XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj48c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZC1ibG9ja1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInRleHQtYm9keSBkLWJsb2NrXCI+RXhhbXBsZSAyPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgbXQtbjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDpiZXR3ZWVuIOKHkiBqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiAoIzI5NzM0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25zIHNob3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRG93bmxvYWQgU1ZHIGljb24gZnJvbSBodHRwOi8vdGFibGVyLWljb25zLmlvL2kvc3RhciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaWNvbiB0ZXh0LXllbGxvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDE3Ljc1bC02LjE3MiAzLjI0NWwxLjE3OSAtNi44NzNsLTUgLTQuODY3bDYuOSAtMWwzLjA4NiAtNi4yNTNsMy4wODYgNi4yNTNsNi45IDFsLTUgNC44NjdsMS4xNzkgNi44NzN6XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj48c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZC1ibG9ja1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInRleHQtYm9keSBkLWJsb2NrXCI+RXhhbXBsZSAzPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGUgbXQtbjFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBjaGFuZ2UtdmVyc2lvbi5qcyAoIzI5NzM2KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERvd25sb2FkIFNWRyBpY29uIGZyb20gaHR0cDovL3RhYmxlci1pY29ucy5pby9pL3N0YXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gdGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDE3Ljc1bC02LjE3MiAzLjI0NWwxLjE3OSAtNi44NzNsLTUgLTQuODY3bDYuOSAtMWwzLjA4NiAtNi4yNTNsMy4wODYgNi4yNTNsNi45IDFsLTUgNC44NjdsMS4xNzkgNi44NzN6XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cy1kb3Qgc3RhdHVzLWRvdC1hbmltYXRlZCBiZy1ncmVlbiBkLWJsb2NrXCI+PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwidGV4dC1ib2R5IGQtYmxvY2tcIj5FeGFtcGxlIDQ8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWJsb2NrIHRleHQtbXV0ZWQgdGV4dC10cnVuY2F0ZSBtdC1uMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnZW5lcmF0ZSBwYWNrYWdlLWxvY2suanNvbiAoIzI5NzMwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERvd25sb2FkIFNWRyBpY29uIGZyb20gaHR0cDovL3RhYmxlci1pY29ucy5pby9pL3N0YXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gdGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDE3Ljc1bC02LjE3MiAzLjI0NWwxLjE3OSAtNi44NzNsLTUgLTQuODY3bDYuOSAtMWwzLjA4NiAtNi4yNTNsMy4wODYgNi4yNTNsNi45IDFsLTUgNC44NjdsMS4xNzkgNi44NzN6XCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoc2hvd1VzZXJNZW51KSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwibmF2LWxpbmsgZC1mbGV4IGxoLTEgdGV4dC1yZXNldCBwLTBcIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk9wZW4gdXNlciBtZW51XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS08c3BhbiBjbGFzcz1cImF2YXRhciBhdmF0YXItc21cIiBzdHlsZT1cImJhY2tncm91bmQtaW1hZ2U6IHVybCguL3N0YXRpYy9hdmF0YXJzLzAwMG0uanBnKVwiPjwvc3Bhbj4tLT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdmF0YXIgYXZhdGFyLXNtXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ub25lIGQteGwtYmxvY2sgcHMtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5Fcm9zIFN0ZWluPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMSBzbWFsbCB0ZXh0LW11dGVkXCI+QWRtaW5pc3RyYXRvcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1lbmQgZHJvcGRvd24tbWVudS1hcnJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlN0YXR1czwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIi4vcHJvZmlsZS5odG1sXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCI+UHJvZmlsZTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5GZWVkYmFjazwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIi4vc2V0dGluZ3MuaHRtbFwiIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiPlNldHRpbmdzPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiLi9zaWduLWluLmh0bWxcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIj5Mb2dvdXQ8L2E+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoc2hvd1NlYXJjaEJhcikge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG5vdmFsaWRhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWljb24tYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWljb24gdGFibGVySWNvbj1cInNlYXJjaFwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2YWx1ZT1cIlwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2jigKZcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuIl19
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9sYXlvdXQvc3JjL3BhcnRpYWxzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixXQUFXLEVBRVgsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFxQixvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBVXZELE1BQU0sT0FBTyxlQUFnQixTQUFRLGFBQWE7SUFObEQ7O1FBV0ksd0JBQW1CLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDN0UscUJBQWdCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkUsa0JBQWEsR0FBRyxTQUFTLENBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFF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SUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQStCO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsWUFBK0I7UUFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDOzhHQWhJUSxlQUFlO2tHQUFmLGVBQWUsNE1BS3VDLFVBQVUsK0hBQ2hCLFVBQVUseUhBQ2hCLFVBQVUsb0VDbENqRSwyNU9Bd0hBOzsyRkQ3RmEsZUFBZTtrQkFOM0IsU0FBUzsrQkFDSSxZQUFZLGlCQUdQLGlCQUFpQixDQUFDLElBQUk7OEJBR1gsT0FBTztzQkFBaEMsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgT25Jbml0LFxuICAgIGluamVjdCxcbiAgICBjb21wdXRlZCxcbiAgICBzaWduYWwsXG4gICAgdmlld0NoaWxkLFxuICAgIEVsZW1lbnRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWJsZXJJY29uc1R5cGUgfSBmcm9tICdAdXBkZXZzL2ljb25zJztcbmltcG9ydCB7IFRleHRTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgTGF5b3V0U2VydmljZSwgUHJlZmVyZW5jZXNTdG9yYWdlLCBVcGRDb3JlTGF5b3V0Q29uZmlnU2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5pbXBvcnQgeyBEcm9wZG93bkl0ZW0gfSBmcm9tICdAdXBkZXZzL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25Nb2RlbCwgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tICdAdXBkZXZzL3Nkay9ub3RpZmljYXRpb25zJztcbmltcG9ydCB7IFNlY3VyaXR5U3RvcmFnZSB9IGZyb20gJ0B1cGRldnMvc2RrL3NlY3VyaXR5JztcblxuaW1wb3J0IHsgSGVhZGVyU3R5bGVUeXBlIH0gZnJvbSAnLi9oZWFkZXItc3R5bGUudHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBkLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IGNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlckNsYXNzZXMoKTtcbiAgICB9XG5cbiAgICBsYW5ndWFnZVN3aXRjaGVyUmVmID0gdmlld0NoaWxkKCdsYW5ndWFnZVN3aXRjaGVyQnRuJywgeyByZWFkOiBFbGVtZW50UmVmIH0pO1xuICAgIG5vdGlmaWNhdGlvbnNSZWYgPSB2aWV3Q2hpbGQoJ25vdGlmaWNhdGlvbnNCdG4nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSk7XG4gICAgbG9nZ2VkVXNlclJlZiA9IHZpZXdDaGlsZCgnbG9nZ2VkVXNlckJ0bicsIHsgcmVhZDogRWxlbWVudFJlZiB9KTtcblxuICAgIGlzTGFuZ3VhZ2VTd2l0Y2hlckRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgIGlzTm90aWZpY2F0aW9uc0Ryb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgIGlzTG9nZ2VkVXNlckRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgc3R5bGUgPSBzaWduYWw8SGVhZGVyU3R5bGVUeXBlPignbGlnaHQnKTtcbiAgICByZWFkb25seSBuZXh0VGhlbWVJY29uID0gY29tcHV0ZWQ8VGFibGVySWNvbnNUeXBlPigoKSA9PiB0aGlzLmN1cnJlbnRQcmVmZXJlbmNlcygpPy5pc0RhcmtUaGVtZSA/ICdzdW4nIDogJ21vb24tc3RhcnMnKTtcbiAgICByZWFkb25seSBjdXJyZW50Tm90aWZpY2F0aW9uc0ljb24gPSBjb21wdXRlZDxUYWJsZXJJY29uc1R5cGU+KCgpID0+IHRoaXMuaGFzTmV3Tm90aWZpY2F0aW9ucygpID8gJ2JlbGwtcmluZ2luZycgOiAnYmVsbCcpO1xuICAgIHJlYWRvbmx5IGhhc05ld05vdGlmaWNhdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmN1cnJlbnROb3RpZmljYXRpb25zKCkuc29tZShuID0+ICFuLmRhdGVSZWFkKSk7XG4gICAgcmVhZG9ubHkgbGFuZ3VhZ2VzT3B0aW9ucyA9IGNvbXB1dGVkPERyb3Bkb3duSXRlbVtdPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbExhbmd1YWdlc09wdGlvbnM6IERyb3Bkb3duSXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9ICh0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5hdmFpbGFibGVMYW5ndWFnZXMgfHwge30pO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGF2YWlsYWJsZUxhbmd1YWdlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgYWxsTGFuZ3VhZ2VzT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDoga2V5LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICB0ZXh0OiBhdmFpbGFibGVMYW5ndWFnZXNba2V5XSxcbiAgICAgICAgICAgICAgICBpc0FjdGl2ZTogdGhpcy5jdXJyZW50TGFuZ3VhZ2VLZXkoKSA9PT0ga2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFsbExhbmd1YWdlc09wdGlvbnM7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgbG9nZ2VkVXNlck9wdGlvbnMgPSBjb21wdXRlZDxEcm9wZG93bkl0ZW1bXT4oKCkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyQWN0aW9uczogRHJvcGRvd25JdGVtW10gPSBbXTtcblxuICAgICAgICB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5sb2dnZWRVc2VyTWVudUFjdGlvbnMuZm9yRWFjaChhY3QgPT4gdXNlckFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICBpZDogYWN0LmlkISgpLFxuICAgICAgICAgICAgdGV4dDogYWN0LnRleHQhKCksXG4gICAgICAgICAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICBpY29uOiBhY3QuaWNvbk1vZGVsPy4oKVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgcmV0dXJuIHVzZXJBY3Rpb25zO1xuICAgIH0pO1xuICAgIHJlYWRvbmx5IHVzZXJJbmZvID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWN1cml0eVN0b3JhZ2UuZ2V0VXNlckluZm8oKSk7XG4gICAgcmVhZG9ubHkgdXNlcklkZW50aWZpY2F0aW9uID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgISF0aGlzLnVzZXJJbmZvKCkgPyB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5nZXRVc2VyTmFtZSh0aGlzLnVzZXJJbmZvKCkhKSA6ICcnXG4gICAgKTtcbiAgICByZWFkb25seSB1c2VyRGVzY3JpcHRpb24gPSBjb21wdXRlZCgoKSA9PlxuICAgICAgICAhIXRoaXMuY29yZUxheW91dENvbmZpZ1NlcnZpY2UuY29uZmlnLmdldFVzZXJEZXNjcmlwdGlvblxuICAgICAgICAgICAgPyB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5nZXRVc2VyRGVzY3JpcHRpb24odGhpcy51c2VySW5mbygpISlcbiAgICAgICAgICAgIDogJydcbiAgICApO1xuICAgIHJlYWRvbmx5IHNob3VsZEJsaW5rSWZOZXdOb3RpZmljYXRpb25zID0gY29tcHV0ZWQoKCkgPT4gISF0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5zaG91bGRCbGlua0lmTmV3Tm90aWZpY2F0aW9ucyk7XG4gICAgcmVhZG9ubHkgbGF0ZXN0Tm90aWZpY2F0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgdW5yZWFkTm90aWZpY2F0aW9ucyA9IHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnMoKVxuICAgICAgICAgICAgLmZpbHRlcihuID0+ICFuLmRhdGVSZWFkKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGIuZGF0ZVJlY2VpdmVkKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmRhdGVSZWNlaXZlZCkuZ2V0VGltZSgpKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHRoaXMuY29yZUxheW91dENvbmZpZ1NlcnZpY2UuY29uZmlnLm51bWJlck9mTGFzdE5vdGlmaWNhdGlvbnNEaXNwbGF5ZWQpO1xuICAgICAgICBjb25zdCByZWFkTm90aWZpY2F0aW9ucyA9IHRoaXMuY3VycmVudE5vdGlmaWNhdGlvbnMoKVxuICAgICAgICAgICAgLmZpbHRlcihuID0+ICEhbi5kYXRlUmVhZClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShiLmRhdGVSZWNlaXZlZCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5kYXRlUmVjZWl2ZWQpLmdldFRpbWUoKSlcbiAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5udW1iZXJPZkxhc3ROb3RpZmljYXRpb25zRGlzcGxheWVkKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4udW5yZWFkTm90aWZpY2F0aW9ucyxcbiAgICAgICAgICAgIC4uLnJlYWROb3RpZmljYXRpb25zXG4gICAgICAgIF0uc2xpY2UoMCwgdGhpcy5jb3JlTGF5b3V0Q29uZmlnU2VydmljZS5jb25maWcubnVtYmVyT2ZMYXN0Tm90aWZpY2F0aW9uc0Rpc3BsYXllZCk7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgdGV4dFNlcnZpY2UgPSBpbmplY3QoVGV4dFNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWN1cml0eVN0b3JhZ2UgPSBpbmplY3QoU2VjdXJpdHlTdG9yYWdlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvcmVMYXlvdXRDb25maWdTZXJ2aWNlID0gaW5qZWN0KFVwZENvcmVMYXlvdXRDb25maWdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxheW91dFNlcnZpY2UgPSBpbmplY3QoTGF5b3V0U2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xvY29TZXJ2aWNlID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJlZmVyZW5jZXNTdG9yYWdlID0gaW5qZWN0KFByZWZlcmVuY2VzU3RvcmFnZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25zU2VydmljZSA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50UHJlZmVyZW5jZXMgPSB0aGlzLnByZWZlcmVuY2VzU3RvcmFnZS5nZXRQcmVmZXJlbmNlcygpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLm5vdGlmaWNhdGlvbnM7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXJyZW50TGFuZ3VhZ2VLZXkgPSBzaWduYWwoJycpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd3JhcHBlckNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiBgbmF2YmFyIG5hdmJhci1leHBhbmQtbWQgZC1ub25lIGQtbGctZmxleCBkLXByaW50LW5vbmUgbmF2YmFyLSR7dGhpcy5zdHlsZSgpfWApO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgICByZWFkb25seSBjb25maWcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmxheW91dFNlcnZpY2UubWFpbkhlYWRlckNvbmZpZygpKTtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoISF0aGlzLmN1cnJlbnRQcmVmZXJlbmNlcygpPy5pc0RhcmtUaGVtZSkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLnNldERhcmtNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISF0aGlzLmN1cnJlbnRQcmVmZXJlbmNlcygpPy5jdXJyZW50TGFuZ3VhZ2VDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5jdXJyZW50UHJlZmVyZW5jZXMoKSEuY3VycmVudExhbmd1YWdlQ29kZSE7XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlS2V5LnNldChjb2RlKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsb2NvU2VydmljZS5zZXRBY3RpdmVMYW5nKGNvZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoVGhlbWUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS50b2dnbGVEYXJrTW9kZSgpO1xuICAgIH1cblxuICAgIHN3aXRjaExhbmd1YWdlKGl0ZW06IERyb3Bkb3duSXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZUtleS5zZXQoaXRlbS5pZCk7XG4gICAgICAgIHRoaXMudHJhbnNsb2NvU2VydmljZS5zZXRBY3RpdmVMYW5nKGl0ZW0uaWQpO1xuICAgICAgICB0aGlzLnByZWZlcmVuY2VzU3RvcmFnZS5zYXZlUHJlZmVyZW5jZXMoeyAuLi50aGlzLmN1cnJlbnRQcmVmZXJlbmNlcygpLCBjdXJyZW50TGFuZ3VhZ2VDb2RlOiBpdGVtLmlkIH0pO1xuXG4gICAgICAgIHRoaXMuaXNMYW5ndWFnZVN3aXRjaGVyRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VsZWN0TG9nZ2VkVXNlck1lbnVJdGVtKGl0ZW06IERyb3Bkb3duSXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBidG4gPSB0aGlzLmNvcmVMYXlvdXRDb25maWdTZXJ2aWNlLmNvbmZpZy5sb2dnZWRVc2VyTWVudUFjdGlvbnMuZmluZChiID0+IGIuaWQhKCkgPT09IGl0ZW0uaWQpO1xuXG4gICAgICAgIGlmICghIWJ0bj8uY2xpY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgYnRuLmNsaWNrRnVuY3Rpb24hKHsgZGF0YTogdGhpcy51c2VySW5mbygpIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVhZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmICghbm90aWZpY2F0aW9uLmRhdGVSZWFkKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLm1hcmtBc1JlYWQobm90aWZpY2F0aW9uLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuY2xpY2tPbk5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xuICAgIH1cblxuICAgIHJlbW92ZU5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UucmVtb3ZlTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb24uaWQpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXIteGxcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXItaWNvblwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwibmF2YmFyLW5hdiBmbGV4LXJvdyBvcmRlci1tZC1sYXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLW5vbmUgZC1tZC1mbGV4IG1lLTNcIj5cbiAgICAgICAgICAgIEBpZiAoISFjb25maWcoKS5zaG93VGhlbWVTd2l0Y2hlcikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJzd2l0Y2hUaGVtZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWljb24gW3RhYmxlckljb25dPVwibmV4dFRoZW1lSWNvbigpXCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoISFjb25maWcoKS5zaG93TGFuZ3VhZ2VTd2l0Y2hlciAmJiBsYW5ndWFnZXNPcHRpb25zKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJpc0xhbmd1YWdlU3dpdGNoZXJEcm9wZG93bk9wZW49dHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgI2xhbmd1YWdlU3dpdGNoZXJCdG4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWljb24gdGFibGVySWNvbj1cImxhbmd1YWdlXCI+PC91cGQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgPHVwZC1kcm9wZG93biB3cmFwcGVyQ2xhc3Nlcz1cIm10LTFcIiBbaXNPcGVuXT1cImlzTGFuZ3VhZ2VTd2l0Y2hlckRyb3Bkb3duT3BlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25SZWZlcmVuY2VdPVwibGFuZ3VhZ2VTd2l0Y2hlclJlZigpXCIgW2l0ZW1zXT1cImxhbmd1YWdlc09wdGlvbnMoKVwiIFtzaG91bGRDbG9zZU9uT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJpc0xhbmd1YWdlU3dpdGNoZXJEcm9wZG93bk9wZW4gPSAkZXZlbnRcIiAoc2VsZWN0ZWRJdGVtKT1cInN3aXRjaExhbmd1YWdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91cGQtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCEhY29uZmlnKCkuc2hvd05vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd24gZC1ub25lIGQtbWQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJpc05vdGlmaWNhdGlvbnNEcm9wZG93bk9wZW4gPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAjbm90aWZpY2F0aW9uc0J0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiBbdGFibGVySWNvbl09XCJjdXJyZW50Tm90aWZpY2F0aW9uc0ljb24oKVwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc05ld05vdGlmaWNhdGlvbnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctcmVkXCIgW2NsYXNzLmJhZGdlLWJsaW5rXT1cInNob3VsZEJsaW5rSWZOZXdOb3RpZmljYXRpb25zKClcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtZHJvcGRvd24gd3JhcHBlckNsYXNzZXM9XCJtdC0xIGRyb3Bkb3duLW1lbnUtY2FyZFwiIFtpc09wZW5dPVwiaXNOb3RpZmljYXRpb25zRHJvcGRvd25PcGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wZG93blJlZmVyZW5jZV09XCJub3RpZmljYXRpb25zUmVmKClcIiBbc2hvdWxkQ2xvc2VPbk91dHNpZGVDbGlja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNOb3RpZmljYXRpb25zRHJvcGRvd25PcGVuID0gJGV2ZW50XCIgW21pbldpZHRoXT1cIjQwMFwiIGFycm93VHlwZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+e3sgJ1VwRGV2cy5Ob3RpZmljYXRpb25DZW50ZXIuVGl0bGUnIHwgdHJhbnNsb2NvIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChub3RpZmljYXRpb24gb2YgbGF0ZXN0Tm90aWZpY2F0aW9ucygpOyB0cmFjayBub3RpZmljYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaCBsaXN0LWdyb3VwLWhvdmVyYWJsZVwiIChjbGljayk9XCJyZWFkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFub3RpZmljYXRpb24uZGF0ZVJlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXR1cy1kb3QgZC1ibG9ja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RhdHVzLWRvdCBzdGF0dXMtZG90LWFuaW1hdGVkIGJnLXByaW1hcnkgZC1ibG9ja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwidGV4dC1ib2R5IGQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mdy1ib2xkXT1cIiFub3RpZmljYXRpb24uZGF0ZVJlYWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0U2VydmljZS5nZXRUZXh0KG5vdGlmaWNhdGlvbi50aXRsZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFub3RpZmljYXRpb24uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB0ZXh0LXNlY29uZGFyeSB0ZXh0LXRydW5jYXRlIG10LW4xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHRTZXJ2aWNlLmdldFRleHQobm90aWZpY2F0aW9uLmRlc2NyaXB0aW9uKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2N1c3RvbUNsYXNzZXNdPVwiWydsaXN0LWdyb3VwLWl0ZW0tYWN0aW9ucyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtaWNvbiB0YWJsZXJJY29uPVwieFwiPjwvdXBkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwidGV4dC1ib2R5LXRlcnRpYXJ5XCI+e3sgJ1VwRGV2cy5Ob3RpZmljYXRpb25DZW50ZXIuTm9Ob3RpZmljYXRpb25zJyB8IHRyYW5zbG9jbyB9fTwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3VwZC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoISFjb25maWcoKS5zaG93VXNlck1lbnUgJiYgISF1c2VySW5mbygpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWl0ZW0gZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICA8dXBkLWxpbmsgW2lzTmF2aWdhdGlvbl09XCJ0cnVlXCIgW2N1c3RvbUNsYXNzZXNdPVwiWydweC0wJ11cIiAoY2xpY2tlZCk9XCJpc0xvZ2dlZFVzZXJEcm9wZG93bk9wZW4gPSB0cnVlXCIgI2xvZ2dlZFVzZXJCdG4+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoISF1c2VySW5mbygpIS5hdmF0YXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyIGF2YXRhci1zbVwiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKHt7dXNlckluZm8oKT8uYXZhdGFyfX0pXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtbm9uZSBkLXhsLWJsb2NrIHBzLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgdXNlcklkZW50aWZpY2F0aW9uKCkgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISF1c2VyRGVzY3JpcHRpb24oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xIHNtYWxsIHRleHQtbXV0ZWRcIj57eyB1c2VyRGVzY3JpcHRpb24oKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgIEBpZiAobG9nZ2VkVXNlck9wdGlvbnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIDx1cGQtZHJvcGRvd24gd3JhcHBlckNsYXNzZXM9XCJtdC0xXCIgW2lzT3Blbl09XCJpc0xvZ2dlZFVzZXJEcm9wZG93bk9wZW5cIiBbZHJvcGRvd25SZWZlcmVuY2VdPVwibG9nZ2VkVXNlclJlZigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJsb2dnZWRVc2VyT3B0aW9ucygpXCIgW3Nob3VsZENsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiIChzZWxlY3RlZEl0ZW0pPVwic2VsZWN0TG9nZ2VkVXNlck1lbnVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzT3BlbkNoYW5nZSk9XCJpc0xvZ2dlZFVzZXJEcm9wZG93bk9wZW4gPSAkZXZlbnRcIiBhcnJvd1R5cGU9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VwZC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZiAoISFjb25maWcoKS5zaG93U2VhcmNoQmFyKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCIgW2NsYXNzLnctMTAwXT1cImNvbmZpZygpLnNob3VsZFVzZUZ1bGxTZWFyY2hCYXJcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBub3ZhbGlkYXRlPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1pY29uLWFkZG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1pY29uIHRhYmxlckljb249XCJzZWFyY2hcIj48L3VwZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwie3snVXBEZXZzLkhlYWRlci5TZWFyY2gnIHwgdHJhbnNsb2NvfX0uLi5cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuIl19
@@ -1,15 +1,15 @@
1
- import { Component, Input } from '@angular/core';
2
- import { PageHeaderModel } from '@updevs/sdk/layout';
1
+ import { Component, input } from '@angular/core';
3
2
  import * as i0 from "@angular/core";
4
3
  import * as i1 from "@updevs/components/button";
5
4
  export class PageHeaderComponent {
5
+ constructor() {
6
+ this.model = input.required();
7
+ }
6
8
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: PageHeaderComponent, selector: "upd-page-header", inputs: { model: "model" }, ngImport: i0, template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model.titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model.title }}\n </h2>\n </div>\n @if (model.actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model.actionButtons; track btn) {\n <upd-button [model]=\"btn!\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }] }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: PageHeaderComponent, selector: "upd-page-header", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model().titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model().title }}\n </h2>\n </div>\n @if (model().actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model().actionButtons; track btn) {\n <upd-button [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "upd-button", inputs: ["model", "text", "brandColorStyle", "customClasses", "isOutline", "isGhost", "isSquare", "isPill", "isIcon", "isLoading", "isList", "isFloating", "isAction", "isNavigationLink", "isLink", "shouldIgnoreBtnClass", "iconModel", "iconPosition", "isDisabled", "isActive", "badgeConfig", "colorStyle", "size", "title"], outputs: ["clicked"] }] }); }
8
10
  }
9
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PageHeaderComponent, decorators: [{
10
12
  type: Component,
11
- args: [{ selector: 'upd-page-header', template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model.titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model.title }}\n </h2>\n </div>\n @if (model.actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model.actionButtons; track btn) {\n <upd-button [model]=\"btn!\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
12
- }], propDecorators: { model: [{
13
- type: Input
14
- }] } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFPckQsTUFBTSxPQUFPLG1CQUFtQjs4R0FBbkIsbUJBQW1CO2tHQUFuQixtQkFBbUIsbUZDUmhDLHUwQkF1QkE7OzJGRGZhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDSSxpQkFBaUI7OEJBS2xCLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhZ2VIZWFkZXJNb2RlbCB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBkLXBhZ2UtaGVhZGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFnZS1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3BhZ2UtaGVhZGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUGFnZUhlYWRlckNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgbW9kZWwhOiBQYWdlSGVhZGVyTW9kZWw7XG59XG4iLCI8ZGl2IGNsYXNzPVwicGFnZS1oZWFkZXIgZC1wcmludC1ub25lXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci14bFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS1wcmV0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtb2RlbC50aXRsZUhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInBhZ2UtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9kZWwudGl0bGUgfX1cbiAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKG1vZGVsLmFjdGlvbkJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBtcy1hdXRvIGQtcHJpbnQtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGJ0biBvZiBtb2RlbC5hY3Rpb25CdXR0b25zOyB0cmFjayBidG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWJ1dHRvbiBbbW9kZWxdPVwiYnRuIVwiPjwvdXBkLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
13
+ args: [{ selector: 'upd-page-header', template: "<div class=\"page-header d-print-none\">\n <div class=\"container-xl\">\n <div class=\"row g-2 align-items-center\">\n <div class=\"col\">\n <div class=\"page-pretitle\">\n {{ model().titleHeader }}\n </div>\n <h2 class=\"page-title\">\n {{ model().title }}\n </h2>\n </div>\n @if (model().actionButtons.length > 0) {\n <div class=\"col-auto ms-auto d-print-none\">\n <div class=\"btn-list\">\n @for (btn of model().actionButtons; track btn) {\n <upd-button [model]=\"btn\"></upd-button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n</div>\n" }]
14
+ }] });
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBTUksVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW1CLENBQUM7S0FDN0M7OEdBRlksbUJBQW1CO2tHQUFuQixtQkFBbUIsMExDUmhDLDgwQkF1QkE7OzJGRGZhLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDSSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYWdlSGVhZGVyTW9kZWwgfSBmcm9tICdAdXBkZXZzL3Nkay9sYXlvdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1wYWdlLWhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wYWdlLWhlYWRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2VIZWFkZXJDb21wb25lbnQge1xuICAgIG1vZGVsID0gaW5wdXQucmVxdWlyZWQ8UGFnZUhlYWRlck1vZGVsPigpO1xufVxuIiwiPGRpdiBjbGFzcz1cInBhZ2UtaGVhZGVyIGQtcHJpbnQtbm9uZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIteGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtcHJldGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9kZWwoKS50aXRsZUhlYWRlciB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInBhZ2UtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbW9kZWwoKS50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAobW9kZWwoKS5hY3Rpb25CdXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gbXMtYXV0byBkLXByaW50LW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChidG4gb2YgbW9kZWwoKS5hY3Rpb25CdXR0b25zOyB0cmFjayBidG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWJ1dHRvbiBbbW9kZWxdPVwiYnRuXCI+PC91cGQtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { UpdCoreLayoutModule } from '@updevs/sdk/layout';
4
+ import { UpdNotificationsModule } from '@updevs/sdk/notifications';
4
5
  import { LayoutConstants } from './tools/layout.constants';
5
6
  import { UpdLayoutConfigService } from './services/upd-layout-config.service';
6
7
  import * as i0 from "@angular/core";
@@ -22,22 +23,25 @@ export class UpdLayoutModule {
22
23
  }
23
24
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
24
25
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.0", ngImport: i0, type: UpdLayoutModule, imports: [CommonModule,
25
- UpdCoreLayoutModule] }); }
26
+ UpdCoreLayoutModule,
27
+ UpdNotificationsModule] }); }
26
28
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdLayoutModule, providers: [
27
29
  UpdLayoutConfigService
28
30
  ], imports: [CommonModule,
29
- UpdCoreLayoutModule] }); }
31
+ UpdCoreLayoutModule,
32
+ UpdNotificationsModule] }); }
30
33
  }
31
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: UpdLayoutModule, decorators: [{
32
35
  type: NgModule,
33
36
  args: [{
34
37
  imports: [
35
38
  CommonModule,
36
- UpdCoreLayoutModule
39
+ UpdCoreLayoutModule,
40
+ UpdNotificationsModule
37
41
  ],
38
42
  providers: [
39
43
  UpdLayoutConfigService
40
44
  ]
41
45
  }]
42
46
  }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkLWxheW91dC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGF5b3V0L3NyYy91cGQtbGF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQUU5RTs7R0FFRztBQVVILE1BQU0sT0FBTyxlQUFlO0lBQ3hCOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBdUI7UUFDbEMsT0FBTztZQUNILFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFNBQVMsRUFBRTtnQkFDUCxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUM5RTtTQUNKLENBQUM7SUFDTixDQUFDOzhHQVpRLGVBQWU7K0dBQWYsZUFBZSxZQVBwQixZQUFZO1lBQ1osbUJBQW1COytHQU1kLGVBQWUsYUFKYjtZQUNQLHNCQUFzQjtTQUN6QixZQUxHLFlBQVk7WUFDWixtQkFBbUI7OzJGQU1kLGVBQWU7a0JBVDNCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUN0QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Asc0JBQXNCO3FCQUN6QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXBkQ29yZUxheW91dE1vZHVsZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5cbmltcG9ydCB7IFVwZExheW91dENvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3VwZC1sYXlvdXQuY29uZmlnJztcbmltcG9ydCB7IExheW91dENvbnN0YW50cyB9IGZyb20gJy4vdG9vbHMvbGF5b3V0LmNvbnN0YW50cyc7XG5pbXBvcnQgeyBVcGRMYXlvdXRDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91cGQtbGF5b3V0LWNvbmZpZy5zZXJ2aWNlJztcblxuLyoqXG4gKiBMYXlvdXQgbW9kdWxlLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBVcGRDb3JlTGF5b3V0TW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgVXBkTGF5b3V0Q29uZmlnU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVXBkTGF5b3V0TW9kdWxlIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIHRoZSBsYXlvdXQgbW9kdWxlIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIChTZWU6ICN1cGRzZWVbcDphYnN0cmFjdGlvbnMsIGk6VXBkQ29yZUxheW91dENvbmZpZ10pLlxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JSb290KGNvbmZpZzogVXBkTGF5b3V0Q29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxVcGRMYXlvdXRNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBVcGRMYXlvdXRNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IExheW91dENvbnN0YW50cy5kZWZhdWx0T3B0aW9uc0luamVjdGlvblRva2VuLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkLWxheW91dC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGF5b3V0L3NyYy91cGQtbGF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQUU5RTs7R0FFRztBQVdILE1BQU0sT0FBTyxlQUFlO0lBQ3hCOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBdUI7UUFDbEMsT0FBTztZQUNILFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFNBQVMsRUFBRTtnQkFDUCxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTthQUM5RTtTQUNKLENBQUM7SUFDTixDQUFDOzhHQVpRLGVBQWU7K0dBQWYsZUFBZSxZQVJwQixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLHNCQUFzQjsrR0FNakIsZUFBZSxhQUpiO1lBQ1Asc0JBQXNCO1NBQ3pCLFlBTkcsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixzQkFBc0I7OzJGQU1qQixlQUFlO2tCQVYzQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3FCQUN6QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1Asc0JBQXNCO3FCQUN6QjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXBkQ29yZUxheW91dE1vZHVsZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5pbXBvcnQgeyBVcGROb3RpZmljYXRpb25zTW9kdWxlIH0gZnJvbSAnQHVwZGV2cy9zZGsvbm90aWZpY2F0aW9ucyc7XG5cbmltcG9ydCB7IFVwZExheW91dENvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3VwZC1sYXlvdXQuY29uZmlnJztcbmltcG9ydCB7IExheW91dENvbnN0YW50cyB9IGZyb20gJy4vdG9vbHMvbGF5b3V0LmNvbnN0YW50cyc7XG5pbXBvcnQgeyBVcGRMYXlvdXRDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91cGQtbGF5b3V0LWNvbmZpZy5zZXJ2aWNlJztcblxuLyoqXG4gKiBMYXlvdXQgbW9kdWxlLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBVcGRDb3JlTGF5b3V0TW9kdWxlLFxuICAgICAgICBVcGROb3RpZmljYXRpb25zTW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgVXBkTGF5b3V0Q29uZmlnU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVXBkTGF5b3V0TW9kdWxlIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHVwIHRoZSBsYXlvdXQgbW9kdWxlIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIChTZWU6ICN1cGRzZWVbcDphYnN0cmFjdGlvbnMsIGk6VXBkQ29yZUxheW91dENvbmZpZ10pLlxuICAgICAqL1xuICAgIHN0YXRpYyBmb3JSb290KGNvbmZpZzogVXBkTGF5b3V0Q29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxVcGRMYXlvdXRNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBVcGRMYXlvdXRNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IExheW91dENvbnN0YW50cy5kZWZhdWx0T3B0aW9uc0luamVjdGlvblRva2VuLCB1c2VWYWx1ZTogY29uZmlnIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3Qvc3JjL21vZGVscy9saXN0LWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEljb25Nb2RlbCB9IGZyb20gJ0B1cGRldnMvaWNvbnMnO1xuaW1wb3J0IHsgQmdDb2xvclN0eWxlVHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5cbmltcG9ydCB7IEJhZGdlUG9zaXRpb25UeXBlIH0gZnJvbSAnLi9iYWRnZS1wb3NpdGlvbi50eXBlJztcblxuZXhwb3J0IGludGVyZmFjZSBMaXN0SXRlbSB7XG4gICAgaWQ/OiBhbnk7XG4gICAgdGV4dD86IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBpY29uPzogSWNvbk1vZGVsO1xuICAgIGlzQ2hlY2tlZD86IGJvb2xlYW47XG4gICAgaXNTd2l0Y2g/OiBib29sZWFuO1xuICAgIGhhc0NoZWNrYm94PzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkPzogYm9vbGVhbjtcbiAgICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gICAgbGVmdEJveFRleHQ/OiBzdHJpbmc7XG4gICAgbGVmdEJveEltYWdlPzogc3RyaW5nO1xuICAgIGJhZGdlQ29sb3I/OiBCZ0NvbG9yU3R5bGVUeXBlO1xuICAgIGJhZGdlVGV4dD86IHN0cmluZztcbiAgICBiYWRnZVBvc2l0aW9uPzogQmFkZ2VQb3NpdGlvblR5cGU7XG4gICAgY2hpbGRyZW4/OiBMaXN0SXRlbVtdO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3Qvc3JjL21vZGVscy9saXN0LWl0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEljb25Nb2RlbCB9IGZyb20gJ0B1cGRldnMvaWNvbnMnO1xuaW1wb3J0IHsgQmdDb2xvclN0eWxlVHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL3R5cGVzJztcblxuaW1wb3J0IHsgQmFkZ2VQb3NpdGlvblR5cGUgfSBmcm9tICcuL2JhZGdlLXBvc2l0aW9uLnR5cGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RJdGVtIHtcbiAgICBpZD86IGFueTtcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGljb24/OiBJY29uTW9kZWw7XG4gICAgaXNDaGVja2VkPzogYm9vbGVhbjtcbiAgICBpc1N3aXRjaD86IGJvb2xlYW47XG4gICAgaGFzQ2hlY2tib3g/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgICBsZWZ0Qm94VGV4dD86IHN0cmluZztcbiAgICBsZWZ0Qm94SW1hZ2U/OiBzdHJpbmc7XG4gICAgYmFkZ2VDb2xvcj86IEJnQ29sb3JTdHlsZVR5cGU7XG4gICAgYmFkZ2VUZXh0Pzogc3RyaW5nO1xuICAgIGJhZGdlUG9zaXRpb24/OiBCYWRnZVBvc2l0aW9uVHlwZTtcbiAgICBjaGlsZHJlbj86IExpc3RJdGVtW107XG59XG4iXX0=
@@ -12,4 +12,4 @@ export class ListItemModel {
12
12
  Object.assign(this, init);
13
13
  }
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3Qvc3JjL21vZGVscy9saXN0LWl0ZW0ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFPLGFBQWE7SUFnQnRCLElBQUksVUFBVTtRQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdEgsQ0FBQztJQUNELElBQUksWUFBWTtRQUNaLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyx1QkFBdUIsQ0FBQztJQUMvRSxDQUFDO0lBRUQsWUFBWSxJQUFlO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEljb25Nb2RlbCB9IGZyb20gJ0B1cGRldnMvaWNvbnMnO1xuaW1wb3J0IHsgQmdDb2xvclN0eWxlVHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL2xheW91dCc7XG5cbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi9saXN0LWl0ZW0nO1xuaW1wb3J0IHsgQmFkZ2VQb3NpdGlvblR5cGUgfSBmcm9tICcuL2JhZGdlLXBvc2l0aW9uLnR5cGUnO1xuXG5leHBvcnQgY2xhc3MgTGlzdEl0ZW1Nb2RlbCBpbXBsZW1lbnRzIExpc3RJdGVtIHtcbiAgICBpZD86IGFueTtcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGljb24/OiBJY29uTW9kZWw7XG4gICAgaXNDaGVja2VkPzogYm9vbGVhbjtcbiAgICBpc1N3aXRjaD86IGJvb2xlYW47XG4gICAgaGFzQ2hlY2tib3g/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgICBsZWZ0Qm94VGV4dD86IHN0cmluZztcbiAgICBsZWZ0Qm94SW1hZ2U/OiBzdHJpbmc7XG4gICAgYmFkZ2VDb2xvcj86IEJnQ29sb3JTdHlsZVR5cGU7XG4gICAgYmFkZ2VUZXh0Pzogc3RyaW5nO1xuICAgIGJhZGdlUG9zaXRpb24/OiBCYWRnZVBvc2l0aW9uVHlwZTtcbiAgICBjaGlsZHJlbj86IExpc3RJdGVtTW9kZWxbXTtcbiAgICBnZXQgaGFzTGVmdEJveCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5sZWZ0Qm94SW1hZ2UgfHwgISF0aGlzLmxlZnRCb3hUZXh0IHx8ICEhdGhpcy5iYWRnZUNvbG9yIHx8IHRoaXMuaGFzQ2hlY2tib3ggPT09IHRydWUgfHwgISF0aGlzLmljb247XG4gICAgfVxuICAgIGdldCBoYXNMZWZ0QmFkZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuYmFkZ2VDb2xvciAmJiB0aGlzLmJhZGdlUG9zaXRpb24gPT09ICdsZWZ0JztcbiAgICB9XG4gICAgZ2V0IGhhc0JvdHRvbVJpZ2h0QmFkZ2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuYmFkZ2VDb2xvciAmJiB0aGlzLmJhZGdlUG9zaXRpb24gPT09ICdsZWZ0LWJveC1ib3R0b20tcmlnaHQnO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluaXQ/OiBMaXN0SXRlbSkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xuICAgIH1cbn1cbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xpc3Qvc3JjL21vZGVscy9saXN0LWl0ZW0ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFPLGFBQWE7SUFnQnRCLElBQUksVUFBVTtRQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdEgsQ0FBQztJQUNELElBQUksWUFBWTtRQUNaLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyx1QkFBdUIsQ0FBQztJQUMvRSxDQUFDO0lBRUQsWUFBWSxJQUFlO1FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEljb25Nb2RlbCB9IGZyb20gJ0B1cGRldnMvaWNvbnMnO1xuaW1wb3J0IHsgQmdDb2xvclN0eWxlVHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL3R5cGVzJztcblxuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuL2xpc3QtaXRlbSc7XG5pbXBvcnQgeyBCYWRnZVBvc2l0aW9uVHlwZSB9IGZyb20gJy4vYmFkZ2UtcG9zaXRpb24udHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBMaXN0SXRlbU1vZGVsIGltcGxlbWVudHMgTGlzdEl0ZW0ge1xuICAgIGlkPzogYW55O1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgaWNvbj86IEljb25Nb2RlbDtcbiAgICBpc0NoZWNrZWQ/OiBib29sZWFuO1xuICAgIGlzU3dpdGNoPzogYm9vbGVhbjtcbiAgICBoYXNDaGVja2JveD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZD86IGJvb2xlYW47XG4gICAgaXNBY3RpdmU/OiBib29sZWFuO1xuICAgIGxlZnRCb3hUZXh0Pzogc3RyaW5nO1xuICAgIGxlZnRCb3hJbWFnZT86IHN0cmluZztcbiAgICBiYWRnZUNvbG9yPzogQmdDb2xvclN0eWxlVHlwZTtcbiAgICBiYWRnZVRleHQ/OiBzdHJpbmc7XG4gICAgYmFkZ2VQb3NpdGlvbj86IEJhZGdlUG9zaXRpb25UeXBlO1xuICAgIGNoaWxkcmVuPzogTGlzdEl0ZW1Nb2RlbFtdO1xuICAgIGdldCBoYXNMZWZ0Qm94KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxlZnRCb3hJbWFnZSB8fCAhIXRoaXMubGVmdEJveFRleHQgfHwgISF0aGlzLmJhZGdlQ29sb3IgfHwgdGhpcy5oYXNDaGVja2JveCA9PT0gdHJ1ZSB8fCAhIXRoaXMuaWNvbjtcbiAgICB9XG4gICAgZ2V0IGhhc0xlZnRCYWRnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5iYWRnZUNvbG9yICYmIHRoaXMuYmFkZ2VQb3NpdGlvbiA9PT0gJ2xlZnQnO1xuICAgIH1cbiAgICBnZXQgaGFzQm90dG9tUmlnaHRCYWRnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5iYWRnZUNvbG9yICYmIHRoaXMuYmFkZ2VQb3NpdGlvbiA9PT0gJ2xlZnQtYm94LWJvdHRvbS1yaWdodCc7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5pdD86IExpc3RJdGVtKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgaW5pdCk7XG4gICAgfVxufVxuIl19