@updevs/components 1.0.0-alpha.40 → 1.0.0-alpha.42

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 (99) hide show
  1. package/assets/styles/_core.scss +9 -0
  2. package/assets/styles/_debug.scss +49 -0
  3. package/assets/styles/_props.scss +91 -0
  4. package/assets/styles/_utilities-marketing.scss +209 -0
  5. package/assets/styles/_utilities.scss +127 -92
  6. package/assets/styles/_variables-dark.scss +8 -6
  7. package/assets/styles/_variables.scss +326 -257
  8. package/assets/styles/helpers/_index.scss +143 -0
  9. package/assets/styles/layout/_core.scss +3 -2
  10. package/assets/styles/layout/_dark.scss +40 -35
  11. package/assets/styles/layout/_footer.scss +1 -1
  12. package/assets/styles/layout/_navbar.scss +31 -19
  13. package/assets/styles/layout/_page.scss +6 -5
  14. package/assets/styles/layout/_root.scss +26 -34
  15. package/assets/styles/marketing/_browser.scss +67 -0
  16. package/assets/styles/marketing/_core.scss +8 -0
  17. package/assets/styles/marketing/_filters.scss +0 -0
  18. package/assets/styles/marketing/_hero.scss +70 -0
  19. package/assets/styles/marketing/_pricing.scss +111 -0
  20. package/assets/styles/marketing/_sections.scss +124 -0
  21. package/assets/styles/marketing/_shape.scss +31 -0
  22. package/assets/styles/mixins/_functions.scss +53 -0
  23. package/assets/styles/mixins/_mixins.scss +9 -9
  24. package/assets/styles/ui/_accordion.scss +165 -11
  25. package/assets/styles/ui/_alerts.scss +80 -38
  26. package/assets/styles/ui/_avatars.scss +36 -9
  27. package/assets/styles/ui/_badges.scss +47 -13
  28. package/assets/styles/ui/_button-group.scss +1 -1
  29. package/assets/styles/ui/_buttons.scss +33 -37
  30. package/assets/styles/ui/_calendars.scss +2 -2
  31. package/assets/styles/ui/_cards.scss +9 -0
  32. package/assets/styles/ui/_carousel.scss +1 -1
  33. package/assets/styles/ui/_charts.scss +1 -1
  34. package/assets/styles/ui/_chat.scss +38 -0
  35. package/assets/styles/ui/_close.scss +54 -1
  36. package/assets/styles/ui/_datagrid.scss +1 -1
  37. package/assets/styles/ui/_dropdowns.scss +3 -0
  38. package/assets/styles/ui/_empty.scss +0 -5
  39. package/assets/styles/ui/_flags.scss +2 -2
  40. package/assets/styles/ui/_forms.scss +33 -7
  41. package/assets/styles/ui/_grid.scss +1 -1
  42. package/assets/styles/ui/_icons.scss +1 -1
  43. package/assets/styles/ui/_images.scss +4 -0
  44. package/assets/styles/ui/_lists.scss +12 -16
  45. package/assets/styles/ui/_loaders.scss +1 -1
  46. package/assets/styles/ui/_markdown.scss +15 -4
  47. package/assets/styles/ui/_modals.scss +2 -2
  48. package/assets/styles/ui/_nav.scss +17 -3
  49. package/assets/styles/ui/_offcanvas.scss +2 -2
  50. package/assets/styles/ui/_pagination.scss +2 -0
  51. package/assets/styles/ui/_payments.scss +1 -1
  52. package/assets/styles/ui/_placeholder.scss +1 -1
  53. package/assets/styles/ui/_progress.scss +1 -1
  54. package/assets/styles/ui/_ribbons.scss +1 -0
  55. package/assets/styles/ui/_segmented.scss +101 -0
  56. package/assets/styles/ui/_signature.scss +15 -0
  57. package/assets/styles/ui/_social.scss +52 -0
  58. package/assets/styles/ui/_status.scss +1 -1
  59. package/assets/styles/ui/_steps.scss +5 -1
  60. package/assets/styles/ui/_switch-icon.scss +1 -1
  61. package/assets/styles/ui/_tables.scss +27 -1
  62. package/assets/styles/ui/_tags.scss +1 -1
  63. package/assets/styles/ui/_timeline.scss +1 -1
  64. package/assets/styles/ui/_toasts.scss +0 -1
  65. package/assets/styles/ui/_tracking.scss +1 -1
  66. package/assets/styles/ui/_type.scss +169 -8
  67. package/assets/styles/ui/forms/_form-check.scss +1 -1
  68. package/assets/styles/ui/forms/_form-colorinput.scss +1 -1
  69. package/assets/styles/ui/forms/_form-custom.scss +1 -1
  70. package/assets/styles/ui/forms/_form-imagecheck.scss +6 -5
  71. package/assets/styles/ui/forms/_form-selectgroup.scss +2 -2
  72. package/assets/styles/ui/typo/_hr.scss +4 -2
  73. package/assets/styles/utils/_colors.scss +72 -11
  74. package/assets/styles/utils/_opacity.scss +1 -1
  75. package/assets/styles/utils/_scroll.scss +0 -2
  76. package/assets/styles/utils/_sizing.scss +1 -1
  77. package/assets/styles/utils/_text.scss +1 -2
  78. package/assets/styles/vendor/_apexcharts.scss +52 -0
  79. package/assets/styles/vendor/_coloris.scss +72 -0
  80. package/assets/styles/vendor/_dropzone.scss +27 -0
  81. package/assets/styles/vendor/_fslightbox.scss +13 -0
  82. package/assets/styles/vendor/_jsvectormap.scss +47 -0
  83. package/assets/styles/vendor/_litepicker.scss +69 -0
  84. package/assets/styles/vendor/_nouislider.scss +49 -0
  85. package/assets/styles/vendor/_plyr.scss +3 -0
  86. package/assets/styles/vendor/_stars-rating.scss +22 -0
  87. package/assets/styles/vendor/_tom-select.scss +81 -0
  88. package/assets/styles/vendor/_turbo.scss +3 -0
  89. package/assets/styles/vendor/_typed.scss +4 -0
  90. package/assets/styles/vendor/_wysiwyg.scss +46 -0
  91. package/esm2022/form-controls/checkbox/checkbox.component.mjs +5 -2
  92. package/esm2022/layout/partials/sidebar/sidebar.component.mjs +102 -30
  93. package/fesm2022/updevs-components-form-controls-checkbox.mjs +4 -1
  94. package/fesm2022/updevs-components-form-controls-checkbox.mjs.map +1 -1
  95. package/fesm2022/updevs-components-layout.mjs +101 -29
  96. package/fesm2022/updevs-components-layout.mjs.map +1 -1
  97. package/form-controls/checkbox/checkbox.component.d.ts +1 -1
  98. package/layout/partials/sidebar/sidebar.component.d.ts +5 -0
  99. package/package.json +31 -31
@@ -16,14 +16,17 @@ export class SidebarComponent extends BaseComponent {
16
16
  this.menuItems = [];
17
17
  this.textService = inject(TextService);
18
18
  this.currentRoute = '';
19
+ this.menuItemsBackup = [];
19
20
  this.router = inject(Router);
20
21
  this.menuService = inject(MenuService);
21
22
  }
22
23
  ngOnInit() {
23
24
  this.currentRoute = this.router.url;
24
25
  this.menuItems = this.menuService.generateMenu();
26
+ this.menuItemsBackup = [...this.menuItems];
25
27
  const menuRefreshSub = this.menuService.refreshSubject.subscribe(() => {
26
28
  this.menuItems = [...this.menuService.generateMenu()];
29
+ this.menuItemsBackup = [...this.menuItems];
27
30
  this.updateActiveRoute();
28
31
  });
29
32
  const routerSub = this.router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(event => {
@@ -40,17 +43,19 @@ export class SidebarComponent extends BaseComponent {
40
43
  }
41
44
  return;
42
45
  }
43
- this.resetMenuState(this.menuItems);
44
- item.isActive = true;
45
- this.updateParents(item);
46
+ let newMenuItems = this.resetMenuState(this.menuItems);
47
+ newMenuItems = this.setItemActive(newMenuItems, item, this.hasChildren(item) ? !item.isActive : true);
48
+ newMenuItems = this.updateParents(newMenuItems, item);
49
+ this.menuItems = newMenuItems;
46
50
  if (!!item.clickFunction) {
47
51
  item.clickFunction();
48
52
  return;
49
53
  }
50
- if ((item.children?.length || 0) > 0) {
54
+ if (this.hasChildren(item)) {
51
55
  return;
52
56
  }
53
- this.router.navigate(item.getFullPath()).then();
57
+ const fullPath = this.findItemById(this.menuItemsBackup, item.id).getFullPath();
58
+ this.router.navigate(fullPath).then();
54
59
  }
55
60
  hasChildren(item) {
56
61
  return (item.children?.length || 0) > 0;
@@ -69,50 +74,117 @@ export class SidebarComponent extends BaseComponent {
69
74
  if (item.fullPath === fullPath) {
70
75
  return item;
71
76
  }
72
- else if (item.children.length > 0) {
73
- let result;
74
- for (let i = 0; !result && i < item.children.length; i++) {
75
- result = this.findActiveNode(item.children[i], fullPath);
77
+ for (const child of item.children) {
78
+ const found = this.findActiveNode(child, fullPath);
79
+ if (found) {
80
+ return found;
76
81
  }
77
- return result;
78
82
  }
79
83
  return undefined;
80
84
  }
81
85
  updateActiveRoute() {
82
- this.resetMenuState(this.menuItems);
83
- let item;
84
- for (const mi of this.menuItems) {
85
- item = this.findActiveNode(mi, this.currentRoute);
86
- if (!!item) {
86
+ let newMenuItems = this.resetMenuState(this.menuItems);
87
+ const activePath = this.getActivePath(newMenuItems);
88
+ newMenuItems = this.setActivePath(newMenuItems, activePath);
89
+ this.menuItems = newMenuItems;
90
+ }
91
+ setActivePath(items, path) {
92
+ if (path.length === 0) {
93
+ return items;
94
+ }
95
+ return items.map(item => {
96
+ const pathItem = path.find(p => p.id === item.id);
97
+ if (!pathItem) {
98
+ return item;
99
+ }
100
+ const newItem = { ...item, isActive: true };
101
+ if (newItem.children?.length) {
102
+ newItem.children = this.setActivePath(newItem.children, path.filter(p => p.parent?.id === newItem.id));
103
+ newItem.children.forEach(child => child.parent = newItem);
104
+ }
105
+ return newItem;
106
+ });
107
+ }
108
+ getActivePath(items) {
109
+ let activeItem;
110
+ // Find the deepest active item.
111
+ for (const item of items) {
112
+ activeItem = this.findActiveNode(item, this.currentRoute);
113
+ if (activeItem) {
87
114
  break;
88
115
  }
89
116
  }
90
- while (!!item) {
91
- item.isActive = true;
92
- item = item.parent;
117
+ // Collect parent hierarchy.
118
+ const path = [];
119
+ while (activeItem) {
120
+ path.unshift(activeItem);
121
+ activeItem = activeItem.parent;
93
122
  }
123
+ return path;
94
124
  }
95
125
  resetMenuState(items) {
96
- items.forEach(i => {
97
- i.isActive = false;
98
- if (i.children.length > 0) {
99
- this.resetMenuState(i.children);
126
+ return items.map(item => {
127
+ const newItem = { ...item, isActive: false };
128
+ if (newItem.children?.length) {
129
+ newItem.children = this.resetMenuState(newItem.children);
130
+ newItem.children.forEach(child => child.parent = newItem);
131
+ }
132
+ return newItem;
133
+ });
134
+ }
135
+ setItemActive(items, target, isActive) {
136
+ return items.map(item => {
137
+ if (item.id === target.id) {
138
+ const newItem = { ...item, isActive };
139
+ if (newItem.children?.length) {
140
+ newItem.children = this.setItemActive(newItem.children, target, isActive);
141
+ newItem.children.forEach(child => child.parent = newItem);
142
+ }
143
+ return newItem;
144
+ }
145
+ if (item.children?.length) {
146
+ const newChildren = this.setItemActive(item.children, target, isActive);
147
+ const newItem = { ...item, children: newChildren };
148
+ newChildren.forEach(child => child.parent = newItem);
149
+ return newItem;
100
150
  }
151
+ return item;
101
152
  });
102
153
  }
103
- updateParents(menuItem) {
104
- let item = menuItem;
105
- while (!!item) {
106
- item.isActive = true;
107
- item = item.parent;
154
+ updateParents(items, childItem) {
155
+ let parent = childItem.parent;
156
+ let updatedItems = [...items];
157
+ while (parent) {
158
+ updatedItems = updatedItems.map(item => {
159
+ if (item.id === parent.id) {
160
+ return { ...parent, isActive: true };
161
+ }
162
+ return item;
163
+ });
164
+ parent = parent.parent;
165
+ }
166
+ return updatedItems;
167
+ }
168
+ findItemById(items, targetId) {
169
+ for (const item of items) {
170
+ if (item.id === targetId) {
171
+ return item;
172
+ }
173
+ if (item.children?.length) {
174
+ const child = this.findItemById(item.children, targetId);
175
+ if (!!child) {
176
+ return child;
177
+ }
178
+ }
108
179
  }
180
+ return undefined;
109
181
  }
110
182
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
111
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
112
184
  }
113
185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, decorators: [{
114
186
  type: Component,
115
- args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
187
+ args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
116
188
  }], propDecorators: { wrapperClasses: [{
117
189
  type: HostBinding,
118
190
  args: ['class']
@@ -120,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
120
192
  type: HostBinding,
121
193
  args: ['attr.data-bs-theme']
122
194
  }] } });
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGF5b3V0L3NyYy9wYXJ0aWFscy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFROUIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGFBQWE7SUFObkQ7O1FBTzBCLG1CQUFjLEdBQUcseUNBQXlDLENBQUM7UUFDOUMsVUFBSyxHQUFHLE1BQU0sQ0FBQztRQUVsRCxjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuQyxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNULFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FvSHREO0lBbEhHLFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFN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UUFDMUMsSUFBSSxJQUFJLEdBQWlDLFFBQVEsQ0FBQztRQUVsRCxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDOzhHQTVIUSxnQkFBZ0I7a0dBQWhCLGdCQUFnQix3S0NkN0IsdW5IQXdFQTs7MkZEMURhLGdCQUFnQjtrQkFONUIsU0FBUzsrQkFDSSxhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUk7OEJBR2YsY0FBYztzQkFBbkMsV0FBVzt1QkFBQyxPQUFPO2dCQUNlLEtBQUs7c0JBQXZDLFdBQVc7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgVmlld0VuY2Fwc3VsYXRpb24sIE9uSW5pdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25TdGFydCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUZXh0U2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrJztcbmltcG9ydCB7IE9wdGlvbmFsVHlwZSB9IGZyb20gJ0B1cGRldnMvc2RrL3R5cGVzJztcbmltcG9ydCB7IFJvdXRlRGF0YU1vZGVsLCBNZW51U2VydmljZSB9IGZyb20gJ0B1cGRldnMvc2RrL3JvdXRlcyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHVwZGV2cy9zZGsvbGF5b3V0JztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VwZC1zaWRlYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2lkZWJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2lkZWJhci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU2lkZWJhckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKSB3cmFwcGVyQ2xhc3NlcyA9ICduYXZiYXIgbmF2YmFyLXZlcnRpY2FsIG5hdmJhci1leHBhbmQtbGcnO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWJzLXRoZW1lJykgdGhlbWUgPSAnZGFyayc7XG5cbiAgICBtZW51SXRlbXM6IFJvdXRlRGF0YU1vZGVsW10gPSBbXTtcbiAgICByZWFkb25seSB0ZXh0U2VydmljZSA9IGluamVjdChUZXh0U2VydmljZSk7XG5cbiAgICBwcml2YXRlIGN1cnJlbnRSb3V0ZSA9ICcnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZSA9IGluamVjdChNZW51U2VydmljZSk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gdGhpcy5tZW51U2VydmljZS5nZW5lcmF0ZU1lbnUoKTtcbiAgICAgICAgY29uc3QgbWVudVJlZnJlc2hTdWIgPSB0aGlzLm1lbnVTZXJ2aWNlLnJlZnJlc2hTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IFsuLi50aGlzLm1lbnVTZXJ2aWNlLmdlbmVyYXRlTWVudSgpXTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlUm91dGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJvdXRlclN1YiA9IHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KVxuICAgICAgICApLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3V0ZSA9ICg8TmF2aWdhdGlvblN0YXJ0PmV2ZW50KS51cmw7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVJvdXRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQWN0aXZlUm91dGUoKTtcbiAgICAgICAgdGhpcy5hZGRTdWJzY3JpcHRpb25zKHJvdXRlclN1YiwgbWVudVJlZnJlc2hTdWIpO1xuICAgIH1cblxuICAgIG9uTWVudUl0ZW1DbGljayhpdGVtOiBSb3V0ZURhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoaXRlbS5pc0xvY2tlZCkge1xuICAgICAgICAgICAgaWYgKCEhaXRlbS5sb2NrZWRDbGlja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5sb2NrZWRDbGlja0Z1bmN0aW9uKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXRNZW51U3RhdGUodGhpcy5tZW51SXRlbXMpO1xuXG4gICAgICAgIGl0ZW0uaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUGFyZW50cyhpdGVtKTtcblxuICAgICAgICBpZiAoISFpdGVtLmNsaWNrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGl0ZW0uY2xpY2tGdW5jdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChpdGVtLmNoaWxkcmVuPy5sZW5ndGggfHwgMCkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShpdGVtLmdldEZ1bGxQYXRoKCkpLnRoZW4oKTtcbiAgICB9XG5cbiAgICBoYXNDaGlsZHJlbihpdGVtOiBSb3V0ZURhdGFNb2RlbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCB8fCAwKSA+IDA7XG4gICAgfVxuXG4gICAgYXNNZW51SXRlbShpdGVtOiBhbnkpOiBSb3V0ZURhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiBpdGVtIGFzIFJvdXRlRGF0YU1vZGVsO1xuICAgIH1cblxuICAgIGdldEl0ZW1DbGFzc2VzKGl0ZW06IFJvdXRlRGF0YU1vZGVsLCBhY3RpdmVDbGFzczogc3RyaW5nLCAuLi5jbGFzc2VzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLmNsYXNzZXMsXG4gICAgICAgICAgICBpdGVtLmlzQWN0aXZlID8gYWN0aXZlQ2xhc3MgOiAnJyxcbiAgICAgICAgICAgIGl0ZW0uaXNMb2NrZWQgPyAnZGlzYWJsZWQnIDogJydcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRBY3RpdmVOb2RlKGl0ZW06IFJvdXRlRGF0YU1vZGVsLCBmdWxsUGF0aDogc3RyaW5nKTogT3B0aW9uYWxUeXBlPFJvdXRlRGF0YU1vZGVsPiB7XG4gICAgICAgIGlmIChpdGVtLmZ1bGxQYXRoID09PSBmdWxsUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgIXJlc3VsdCAmJiBpIDwgaXRlbS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmluZEFjdGl2ZU5vZGUoaXRlbS5jaGlsZHJlbltpXSwgZnVsbFBhdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUFjdGl2ZVJvdXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2V0TWVudVN0YXRlKHRoaXMubWVudUl0ZW1zKTtcblxuICAgICAgICBsZXQgaXRlbTogT3B0aW9uYWxUeXBlPFJvdXRlRGF0YU1vZGVsPjtcblxuICAgICAgICBmb3IgKGNvbnN0IG1pIG9mIHRoaXMubWVudUl0ZW1zKSB7XG4gICAgICAgICAgICBpdGVtID0gdGhpcy5maW5kQWN0aXZlTm9kZShtaSwgdGhpcy5jdXJyZW50Um91dGUpO1xuXG4gICAgICAgICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoISFpdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRNZW51U3RhdGUoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgaXRlbXMuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgIGkuaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGkuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRNZW51U3RhdGUoaS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUGFyZW50cyhtZW51SXRlbTogUm91dGVEYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbGV0IGl0ZW06IE9wdGlvbmFsVHlwZTxSb3V0ZURhdGFNb2RlbD4gPSBtZW51SXRlbTtcblxuICAgICAgICB3aGlsZSAoISFpdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGl0ZW0gPSBpdGVtLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXItaWNvblwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8aDEgY2xhc3M9XCJuYXZiYXItYnJhbmQgbmF2YmFyLWJyYW5kLWF1dG9kYXJrXCI+XG4gICAgICAgIDxhIGhyZWY9XCIuXCI+XG4gICAgICAgICAgICA8aW1nIHdpZHRoPVwiMTEwXCIgaGVpZ2h0PVwiMzJcIiBjbGFzcz1cIm5hdmJhci1icmFuZC1pbWFnZSB1cGQtYnJhbmQtbG9nb1wiIC8+XG4gICAgICAgIDwvYT5cbiAgICA8L2gxPlxuICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZSBuYXZiYXItY29sbGFwc2VcIj5cbiAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBwdC1sZy0zXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIG1lbnVJdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgW2NsYXNzLmRyb3Bkb3duXT1cImhhc0NoaWxkcmVuKGl0ZW0pXCIgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLmlzQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2l0ZW1UcGwgbGV0LWl0ZW09XCJtZW51SXRlbVwiPlxuICAgIDx1cGQtbGluayBbaXNOYXZpZ2F0aW9uXT1cInRydWVcIiAoY2xpY2tlZCk9XCJvbk1lbnVJdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhpdGVtLCAnc2hvdycsIGhhc0NoaWxkcmVuKGl0ZW0pID8gJ2Ryb3Bkb3duLXRvZ2dsZSc6JycpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdXBkLWxpbms+XG4gICAgQGlmIChoYXNDaGlsZHJlbihpdGVtKSkge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkcmVuVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xpbmtDb250ZW50IGxldC1pdGVtPVwibWVudUl0ZW1cIj5cbiAgICBAaWYgKCEhaXRlbS5pY29uKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibmF2LWxpbmstaWNvbiBkLW1kLW5vbmUgZC1sZy1pbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgIDx1cGQtaWNvbiBbbW9kZWxdPVwiaXRlbS5pY29uXCI+PC91cGQtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgIH1cbiAgICA8c3BhbiBjbGFzcz1cIm5hdi1saW5rLXRpdGxlXCI+e3sgdGV4dFNlcnZpY2UuZ2V0VGV4dChpdGVtLnRpdGxlKSB9fTwvc3Bhbj5cbiAgICBAaWYgKGl0ZW0uaXNMb2NrZWQpIHtcbiAgICAgICAgPHVwZC1pY29uIGNsYXNzPVwibXMtYXV0b1wiIFttb2RlbF09XCJ7dGFibGVySWNvbjogJ2xvY2snfVwiPjwvdXBkLWljb24+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaGlsZHJlblRwbCBsZXQtaXRlbT1cIm1lbnVJdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBbY2xhc3Muc2hvd109XCJpdGVtLmlzQWN0aXZlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51LWNvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGFzTWVudUl0ZW0oaXRlbSkuY2hpbGRyZW47IHRyYWNrIGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWhhc0NoaWxkcmVuKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1saW5rIChjbGlja2VkKT1cIm9uTWVudUl0ZW1DbGljayhjaGlsZClcIiBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhjaGlsZCwgJ2FjdGl2ZScsICdkcm9wZG93bi1pdGVtJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpbmtDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogY2hpbGR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwZC1saW5rIChjbGlja2VkKT1cIm9uTWVudUl0ZW1DbGljayhjaGlsZClcIiBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhjaGlsZCwgJ2FjdGl2ZScsICdkcm9wZG93bi1pdGVtJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGNoaWxkfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBbY2xhc3Muc2hvd109XCJjaGlsZC5pc0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChncmFuZGNoaWxkIG9mIGNoaWxkLmNoaWxkcmVuOyB0cmFjayBncmFuZGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgKGNsaWNrZWQpPVwib25NZW51SXRlbUNsaWNrKGdyYW5kY2hpbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tQ2xhc3Nlc109XCJnZXRJdGVtQ2xhc3NlcyhncmFuZGNoaWxkLCAnYWN0aXZlJywgJ2Ryb3Bkb3duLWl0ZW0nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBncmFuZGNoaWxkfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbGF5b3V0L3NyYy9wYXJ0aWFscy9zaWRlYmFyL3NpZGViYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2xheW91dC9zcmMvcGFydGlhbHMvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFrQixXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFROUIsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGFBQWE7SUFObkQ7O1FBTzBCLG1CQUFjLEdBQUcseUNBQXlDLENBQUM7UUFDOUMsVUFBSyxHQUFHLE1BQU0sQ0FBQztRQUVsRCxjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVuQyxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixvQkFBZSxHQUFxQixFQUFFLENBQUM7UUFFOUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztLQXFOdEQ7SUFuTkcsUUFBUTtRQUNKLElBQUks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Q0FBQztJQUVPLFlBQVksQ0FBQyxLQUF1QixFQUFFLFFBQWE7UUFDdkQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFekQsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7OEdBL05RLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLHdLQ2Q3Qiw2bkhBd0VBOzsyRkQxRGEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNJLGFBQWEsaUJBR1IsaUJBQWlCLENBQUMsSUFBSTs4QkFHZixjQUFjO3NCQUFuQyxXQUFXO3VCQUFDLE9BQU87Z0JBQ2UsS0FBSztzQkFBdkMsV0FBVzt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBWaWV3RW5jYXBzdWxhdGlvbiwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvblN0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRleHRTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsnO1xuaW1wb3J0IHsgUm91dGVEYXRhTW9kZWwsIE1lbnVTZXJ2aWNlIH0gZnJvbSAnQHVwZGV2cy9zZGsvcm91dGVzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdAdXBkZXZzL3Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgT3B0aW9uYWxUeXBlIH0gZnJvbSAnQHVwZGV2cy9zZGsvdHlwZXMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXBkLXNpZGViYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTaWRlYmFyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHdyYXBwZXJDbGFzc2VzID0gJ25hdmJhciBuYXZiYXItdmVydGljYWwgbmF2YmFyLWV4cGFuZC1sZyc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtYnMtdGhlbWUnKSB0aGVtZSA9ICdkYXJrJztcblxuICAgIG1lbnVJdGVtczogUm91dGVEYXRhTW9kZWxbXSA9IFtdO1xuICAgIHJlYWRvbmx5IHRleHRTZXJ2aWNlID0gaW5qZWN0KFRleHRTZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgY3VycmVudFJvdXRlID0gJyc7XG4gICAgcHJpdmF0ZSBtZW51SXRlbXNCYWNrdXA6IFJvdXRlRGF0YU1vZGVsW10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZW51U2VydmljZSA9IGluamVjdChNZW51U2VydmljZSk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zID0gdGhpcy5tZW51U2VydmljZS5nZW5lcmF0ZU1lbnUoKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXNCYWNrdXAgPSBbLi4udGhpcy5tZW51SXRlbXNdO1xuICAgICAgICBjb25zdCBtZW51UmVmcmVzaFN1YiA9IHRoaXMubWVudVNlcnZpY2UucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zID0gWy4uLnRoaXMubWVudVNlcnZpY2UuZ2VuZXJhdGVNZW51KCldO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXNCYWNrdXAgPSBbLi4udGhpcy5tZW51SXRlbXNdO1xuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVJvdXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByb3V0ZXJTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydClcbiAgICAgICAgKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Um91dGUgPSAoPE5hdmlnYXRpb25TdGFydD5ldmVudCkudXJsO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVSb3V0ZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVJvdXRlKCk7XG4gICAgICAgIHRoaXMuYWRkU3Vic2NyaXB0aW9ucyhyb3V0ZXJTdWIsIG1lbnVSZWZyZXNoU3ViKTtcbiAgICB9XG5cbiAgICBvbk1lbnVJdGVtQ2xpY2soaXRlbTogUm91dGVEYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW0uaXNMb2NrZWQpIHtcbiAgICAgICAgICAgIGlmICghIWl0ZW0ubG9ja2VkQ2xpY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubG9ja2VkQ2xpY2tGdW5jdGlvbigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbmV3TWVudUl0ZW1zID0gdGhpcy5yZXNldE1lbnVTdGF0ZSh0aGlzLm1lbnVJdGVtcyk7XG4gICAgICAgIG5ld01lbnVJdGVtcyA9IHRoaXMuc2V0SXRlbUFjdGl2ZShuZXdNZW51SXRlbXMsIGl0ZW0sIHRoaXMuaGFzQ2hpbGRyZW4oaXRlbSkgPyAhaXRlbS5pc0FjdGl2ZSA6IHRydWUpO1xuICAgICAgICBuZXdNZW51SXRlbXMgPSB0aGlzLnVwZGF0ZVBhcmVudHMobmV3TWVudUl0ZW1zLCBpdGVtKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXMgPSBuZXdNZW51SXRlbXM7XG5cbiAgICAgICAgaWYgKCEhaXRlbS5jbGlja0Z1bmN0aW9uKSB7XG4gICAgICAgICAgICBpdGVtLmNsaWNrRnVuY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuKGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHRoaXMuZmluZEl0ZW1CeUlkKHRoaXMubWVudUl0ZW1zQmFja3VwLCBpdGVtLmlkKSEuZ2V0RnVsbFBhdGgoKTtcblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShmdWxsUGF0aCkudGhlbigpO1xuICAgIH1cblxuICAgIGhhc0NoaWxkcmVuKGl0ZW06IFJvdXRlRGF0YU1vZGVsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoIHx8IDApID4gMDtcbiAgICB9XG5cbiAgICBhc01lbnVJdGVtKGl0ZW06IGFueSk6IFJvdXRlRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gYXMgUm91dGVEYXRhTW9kZWw7XG4gICAgfVxuXG4gICAgZ2V0SXRlbUNsYXNzZXMoaXRlbTogUm91dGVEYXRhTW9kZWwsIGFjdGl2ZUNsYXNzOiBzdHJpbmcsIC4uLmNsYXNzZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uY2xhc3NlcyxcbiAgICAgICAgICAgIGl0ZW0uaXNBY3RpdmUgPyBhY3RpdmVDbGFzcyA6ICcnLFxuICAgICAgICAgICAgaXRlbS5pc0xvY2tlZCA/ICdkaXNhYmxlZCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEFjdGl2ZU5vZGUoaXRlbTogUm91dGVEYXRhTW9kZWwsIGZ1bGxQYXRoOiBzdHJpbmcpOiBPcHRpb25hbFR5cGU8Um91dGVEYXRhTW9kZWw+IHtcbiAgICAgICAgaWYgKGl0ZW0uZnVsbFBhdGggPT09IGZ1bGxQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRBY3RpdmVOb2RlKGNoaWxkLCBmdWxsUGF0aCk7XG5cbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVBY3RpdmVSb3V0ZSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld01lbnVJdGVtcyA9IHRoaXMucmVzZXRNZW51U3RhdGUodGhpcy5tZW51SXRlbXMpO1xuICAgICAgICBjb25zdCBhY3RpdmVQYXRoID0gdGhpcy5nZXRBY3RpdmVQYXRoKG5ld01lbnVJdGVtcyk7XG4gICAgICAgIG5ld01lbnVJdGVtcyA9IHRoaXMuc2V0QWN0aXZlUGF0aChuZXdNZW51SXRlbXMsIGFjdGl2ZVBhdGgpO1xuICAgICAgICB0aGlzLm1lbnVJdGVtcyA9IG5ld01lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEFjdGl2ZVBhdGgoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHBhdGg6IFJvdXRlRGF0YU1vZGVsW10pOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aEl0ZW0gPSBwYXRoLmZpbmQocCA9PiBwLmlkID09PSBpdGVtLmlkKTtcblxuICAgICAgICAgICAgaWYgKCFwYXRoSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtID0geyAuLi5pdGVtLCBpc0FjdGl2ZTogdHJ1ZSB9IGFzIFJvdXRlRGF0YU1vZGVsO1xuXG4gICAgICAgICAgICBpZiAobmV3SXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbiA9IHRoaXMuc2V0QWN0aXZlUGF0aChcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICAgICAgcGF0aC5maWx0ZXIocCA9PiBwLnBhcmVudD8uaWQgPT09IG5ld0l0ZW0uaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQucGFyZW50ID0gbmV3SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZVBhdGgoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10pOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgbGV0IGFjdGl2ZUl0ZW06IE9wdGlvbmFsVHlwZTxSb3V0ZURhdGFNb2RlbD47XG5cbiAgICAgICAgLy8gRmluZCB0aGUgZGVlcGVzdCBhY3RpdmUgaXRlbS5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBhY3RpdmVJdGVtID0gdGhpcy5maW5kQWN0aXZlTm9kZShpdGVtLCB0aGlzLmN1cnJlbnRSb3V0ZSk7XG5cbiAgICAgICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb2xsZWN0IHBhcmVudCBoaWVyYXJjaHkuXG4gICAgICAgIGNvbnN0IHBhdGg6IFJvdXRlRGF0YU1vZGVsW10gPSBbXTtcblxuICAgICAgICB3aGlsZSAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgcGF0aC51bnNoaWZ0KGFjdGl2ZUl0ZW0pO1xuICAgICAgICAgICAgYWN0aXZlSXRlbSA9IGFjdGl2ZUl0ZW0ucGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE1lbnVTdGF0ZShpdGVtczogUm91dGVEYXRhTW9kZWxbXSk6IFJvdXRlRGF0YU1vZGVsW10ge1xuICAgICAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgaXNBY3RpdmU6IGZhbHNlIH0gYXMgUm91dGVEYXRhTW9kZWw7XG5cbiAgICAgICAgICAgIGlmIChuZXdJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuID0gdGhpcy5yZXNldE1lbnVTdGF0ZShuZXdJdGVtLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBuZXdJdGVtLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQucGFyZW50ID0gbmV3SXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEl0ZW1BY3RpdmUoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHRhcmdldDogUm91dGVEYXRhTW9kZWwsIGlzQWN0aXZlOiBib29sZWFuKTogUm91dGVEYXRhTW9kZWxbXSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGFyZ2V0LmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgaXNBY3RpdmUgfSBhcyBSb3V0ZURhdGFNb2RlbDtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbiA9IHRoaXMuc2V0SXRlbUFjdGl2ZShuZXdJdGVtLmNoaWxkcmVuLCB0YXJnZXQsIGlzQWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3SXRlbS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnBhcmVudCA9IG5ld0l0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hpbGRyZW4gPSB0aGlzLnNldEl0ZW1BY3RpdmUoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0LCBpc0FjdGl2ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSwgY2hpbGRyZW46IG5ld0NoaWxkcmVuIH0gYXMgUm91dGVEYXRhTW9kZWw7XG5cbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnBhcmVudCA9IG5ld0l0ZW0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBhcmVudHMoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIGNoaWxkSXRlbTogUm91dGVEYXRhTW9kZWwpOiBSb3V0ZURhdGFNb2RlbFtdIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGNoaWxkSXRlbS5wYXJlbnQ7XG4gICAgICAgIGxldCB1cGRhdGVkSXRlbXMgPSBbLi4uaXRlbXNdO1xuXG4gICAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRJdGVtcyA9IHVwZGF0ZWRJdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHBhcmVudCEuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucGFyZW50ISwgaXNBY3RpdmU6IHRydWUgfSBhcyBSb3V0ZURhdGFNb2RlbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkSXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kSXRlbUJ5SWQoaXRlbXM6IFJvdXRlRGF0YU1vZGVsW10sIHRhcmdldElkOiBhbnkpOiBPcHRpb25hbFR5cGU8Um91dGVEYXRhTW9kZWw+IHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGFyZ2V0SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5maW5kSXRlbUJ5SWQoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0SWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCEhY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJuYXZiYXItdG9nZ2xlclwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxoMSBjbGFzcz1cIm5hdmJhci1icmFuZCBuYXZiYXItYnJhbmQtYXV0b2RhcmtcIj5cbiAgICAgICAgPGEgaHJlZj1cIi5cIj5cbiAgICAgICAgICAgIDxpbWcgd2lkdGg9XCIxMTBcIiBoZWlnaHQ9XCIzMlwiIGNsYXNzPVwibmF2YmFyLWJyYW5kLWltYWdlIHVwZC1icmFuZC1sb2dvXCIgLz5cbiAgICAgICAgPC9hPlxuICAgIDwvaDE+XG4gICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlIG5hdmJhci1jb2xsYXBzZVwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJuYXZiYXItbmF2IHB0LWxnLTNcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgbWVudUl0ZW1zOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiBbY2xhc3MuZHJvcGRvd25dPVwiaGFzQ2hpbGRyZW4oaXRlbSlcIiBbY2xhc3MuYWN0aXZlXT1cIml0ZW0uaXNBY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVHBsXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVRwbCBsZXQtaXRlbT1cIm1lbnVJdGVtXCI+XG4gICAgPHVwZC1saW5rIFtpc05hdmlnYXRpb25dPVwidHJ1ZVwiIChjbGlja2VkKT1cIm9uTWVudUl0ZW1DbGljayhpdGVtKVwiXG4gICAgICAgIFtjdXN0b21DbGFzc2VzXT1cImdldEl0ZW1DbGFzc2VzKGl0ZW0sICdzaG93JywgaGFzQ2hpbGRyZW4oaXRlbSkgPyAnZHJvcGRvd24tdG9nZ2xlJzonJylcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGl0ZW19XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC91cGQtbGluaz5cbiAgICBAaWYgKGhhc0NoaWxkcmVuKGl0ZW0pKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpbGRyZW5UcGxcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBpdGVtfVwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGlua0NvbnRlbnQgbGV0LWl0ZW09XCJtZW51SXRlbVwiPlxuICAgIEBpZiAoISFpdGVtLmljb24pIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXYtbGluay1pY29uIGQtbWQtbm9uZSBkLWxnLWlubGluZS1ibG9ja1wiPlxuICAgICAgICAgICAgPHVwZC1pY29uIFttb2RlbF09XCJpdGVtLmljb25cIj48L3VwZC1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgfVxuICAgIDxzcGFuIGNsYXNzPVwibmF2LWxpbmstdGl0bGVcIj57eyB0ZXh0U2VydmljZS5nZXRUZXh0KGl0ZW0udGl0bGUpIH19PC9zcGFuPlxuICAgIEBpZiAoaXRlbS5pc0xvY2tlZCkge1xuICAgICAgICA8dXBkLWljb24gY2xhc3M9XCJtcy1hdXRvXCIgW21vZGVsXT1cInt0YWJsZXJJY29uOiAnbG9jayd9XCI+PC91cGQtaWNvbj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NoaWxkcmVuVHBsIGxldC1pdGVtPVwibWVudUl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIFtjbGFzcy5zaG93XT1cIml0ZW0uaXNBY3RpdmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUtY29sdW1uc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgYXNNZW51SXRlbShpdGVtKS5jaGlsZHJlbjsgdHJhY2sgY2hpbGQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmICghaGFzQ2hpbGRyZW4oY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgKGNsaWNrZWQpPVwib25NZW51SXRlbUNsaWNrKGNoaWxkKVwiIFtjdXN0b21DbGFzc2VzXT1cImdldEl0ZW1DbGFzc2VzKGNoaWxkLCAnYWN0aXZlJywgJ2Ryb3Bkb3duLWl0ZW0nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21lbnVJdGVtOiBjaGlsZH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdXBkLWxpbms+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BlbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXBkLWxpbmsgKGNsaWNrZWQpPVwib25NZW51SXRlbUNsaWNrKGNoaWxkKVwiIFtjdXN0b21DbGFzc2VzXT1cImdldEl0ZW1DbGFzc2VzKGNoaWxkLCAnYWN0aXZlJywgJ2Ryb3Bkb3duLWl0ZW0nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpbmtDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInttZW51SXRlbTogY2hpbGR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91cGQtbGluaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIFtjbGFzcy5zaG93XT1cImNoaWxkLmlzQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGdyYW5kY2hpbGQgb2YgY2hpbGQuY2hpbGRyZW47IHRyYWNrIGdyYW5kY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cGQtbGluayAoY2xpY2tlZCk9XCJvbk1lbnVJdGVtQ2xpY2soZ3JhbmRjaGlsZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21DbGFzc2VzXT1cImdldEl0ZW1DbGFzc2VzKGdyYW5kY2hpbGQsICdhY3RpdmUnLCAnZHJvcGRvd24taXRlbScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWVudUl0ZW06IGdyYW5kY2hpbGR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VwZC1saW5rPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -28,7 +28,10 @@ class CheckboxComponent extends BaseControl {
28
28
  return [...lClasses, ...(this.customClasses() || '').split(' ')];
29
29
  });
30
30
  effect(() => {
31
- this.checkboxInput.nativeElement.indeterminate = !!this.isIndeterminate();
31
+ this.isIndeterminate();
32
+ if (!!this.checkboxInput) {
33
+ this.checkboxInput.nativeElement.indeterminate = !!this.isIndeterminate();
34
+ }
32
35
  });
33
36
  }
34
37
  onSelectChange(event) {
@@ -1 +1 @@
1
- {"version":3,"file":"updevs-components-form-controls-checkbox.mjs","sources":["../../../../libs/components/form-controls/checkbox/src/checkbox.component.ts","../../../../libs/components/form-controls/checkbox/src/checkbox.component.html","../../../../libs/components/form-controls/checkbox/src/upd-checkbox.module.ts","../../../../libs/components/form-controls/checkbox/src/updevs-components-form-controls-checkbox.ts"],"sourcesContent":["import {\n Component,\n Input,\n ViewEncapsulation,\n HostBinding,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n effect,\n input,\n model,\n computed\n} from '@angular/core';\nimport { BaseControl } from '@updevs/components/form-controls/abstractions';\n\n@Component({\n selector: 'upd-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class CheckboxComponent extends BaseControl {\n @HostBinding('class') @Input() wrapperClasses = '';\n @ViewChild('checkboxInput', { read: ElementRef }) checkboxInput!: ElementRef;\n\n @Output() readonly changed = new EventEmitter<boolean>();\n\n value = input<any>();\n customClasses = input<string>();\n isChecked = model<boolean>(false);\n isInline = input<boolean>(false);\n isSwitch = input<boolean>(false);\n isIndeterminate = model<boolean>(false);\n classes = computed(() => {\n const lClasses: string[] = ['form-check-input'];\n\n if (!!this.validationStatus()) {\n const statusCls = `is-${this.validationStatus()}`;\n lClasses.push(statusCls);\n }\n\n return [...lClasses, ...(this.customClasses() || '').split(' ')];\n });\n\n constructor() {\n super();\n\n effect(() => {\n this.checkboxInput.nativeElement.indeterminate = !!this.isIndeterminate();\n });\n }\n\n onSelectChange(event: Event): void {\n this.isIndeterminate.set(false);\n this.changed.emit((event.target as HTMLInputElement).checked);\n }\n}\n","<label class=\"form-check\" [class.form-check-inline]=\"isInline()\" [class.form-switch]=\"isSwitch()\" [ngClass]=\"customClasses()\">\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n</label>\n\n<ng-template #contentTpl>\n <input #checkboxInput type=\"checkbox\" [disabled]=\"isDisabled()\" [ngClass]=\"classes()\" [value]=\"value()\" [attr.name]=\"name()\"\n [attr.readonly]=\"isDisabled() ? '' : undefined\" [(ngModel)]=\"isChecked\" (change)=\"onSelectChange($event)\">\n\n @if (!!labelText) {\n <span class=\"form-check-label\">{{ labelText }}</span>\n }\n\n @if (!!descriptionText) {\n <span class=\"form-check-description\">{{ descriptionText }}</span>\n }\n\n @if (validationStatus() === 'invalid' && !!validationStatusTexts) {\n <div class=\"invalid-feedback\">{{ validationStatusTexts }}</div>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UpdPopoverModule } from '@updevs/components/popover';\n\nimport { CheckboxComponent } from './checkbox.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n UpdPopoverModule\n ],\n declarations: [\n CheckboxComponent\n ],\n exports: [\n CheckboxComponent\n ]\n})\nexport class UpdCheckboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updevs-components-form-controls-checkbox.mjs","sources":["../../../../libs/components/form-controls/checkbox/src/checkbox.component.ts","../../../../libs/components/form-controls/checkbox/src/checkbox.component.html","../../../../libs/components/form-controls/checkbox/src/upd-checkbox.module.ts","../../../../libs/components/form-controls/checkbox/src/updevs-components-form-controls-checkbox.ts"],"sourcesContent":["import {\n Component,\n Input,\n ViewEncapsulation,\n HostBinding,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n effect,\n input,\n model,\n computed\n} from '@angular/core';\nimport { BaseControl } from '@updevs/components/form-controls/abstractions';\n\n@Component({\n selector: 'upd-checkbox',\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class CheckboxComponent extends BaseControl {\n @HostBinding('class') @Input() wrapperClasses = '';\n @ViewChild('checkboxInput', { read: ElementRef }) checkboxInput?: ElementRef;\n\n @Output() readonly changed = new EventEmitter<boolean>();\n\n value = input<any>();\n customClasses = input<string>();\n isChecked = model<boolean>(false);\n isInline = input<boolean>(false);\n isSwitch = input<boolean>(false);\n isIndeterminate = model<boolean>(false);\n classes = computed(() => {\n const lClasses: string[] = ['form-check-input'];\n\n if (!!this.validationStatus()) {\n const statusCls = `is-${this.validationStatus()}`;\n lClasses.push(statusCls);\n }\n\n return [...lClasses, ...(this.customClasses() || '').split(' ')];\n });\n\n constructor() {\n super();\n\n effect(() => {\n this.isIndeterminate();\n\n if (!!this.checkboxInput) {\n this.checkboxInput.nativeElement.indeterminate = !!this.isIndeterminate();\n }\n });\n }\n\n onSelectChange(event: Event): void {\n this.isIndeterminate.set(false);\n this.changed.emit((event.target as HTMLInputElement).checked);\n }\n}\n","<label class=\"form-check\" [class.form-check-inline]=\"isInline()\" [class.form-switch]=\"isSwitch()\" [ngClass]=\"customClasses()\">\n @if (!!hintText || !!hintTemplate()) {\n <div class=\"row g-2\">\n <div class=\"col-auto\">\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n </div>\n <div class=\"col-auto align-self-center\">\n <span class=\"form-help\" [updPopover]=\"hintText\" [updPopoverTemplate]=\"hintTemplate()\"\n [updPopoverActAsTooltip]=\"hintAsTooltip()\">\n ?\n </span>\n </div>\n </div>\n } @else {\n <ng-template [ngTemplateOutlet]=\"contentTpl\"></ng-template>\n }\n</label>\n\n<ng-template #contentTpl>\n <input #checkboxInput type=\"checkbox\" [disabled]=\"isDisabled()\" [ngClass]=\"classes()\" [value]=\"value()\" [attr.name]=\"name()\"\n [attr.readonly]=\"isDisabled() ? '' : undefined\" [(ngModel)]=\"isChecked\" (change)=\"onSelectChange($event)\">\n\n @if (!!labelText) {\n <span class=\"form-check-label\">{{ labelText }}</span>\n }\n\n @if (!!descriptionText) {\n <span class=\"form-check-description\">{{ descriptionText }}</span>\n }\n\n @if (validationStatus() === 'invalid' && !!validationStatusTexts) {\n <div class=\"invalid-feedback\">{{ validationStatusTexts }}</div>\n }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { UpdPopoverModule } from '@updevs/components/popover';\n\nimport { CheckboxComponent } from './checkbox.component';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n UpdPopoverModule\n ],\n declarations: [\n CheckboxComponent\n ],\n exports: [\n CheckboxComponent\n ]\n})\nexport class UpdCheckboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -511,14 +511,17 @@ class SidebarComponent extends BaseComponent {
511
511
  this.menuItems = [];
512
512
  this.textService = inject(TextService);
513
513
  this.currentRoute = '';
514
+ this.menuItemsBackup = [];
514
515
  this.router = inject(Router);
515
516
  this.menuService = inject(MenuService);
516
517
  }
517
518
  ngOnInit() {
518
519
  this.currentRoute = this.router.url;
519
520
  this.menuItems = this.menuService.generateMenu();
521
+ this.menuItemsBackup = [...this.menuItems];
520
522
  const menuRefreshSub = this.menuService.refreshSubject.subscribe(() => {
521
523
  this.menuItems = [...this.menuService.generateMenu()];
524
+ this.menuItemsBackup = [...this.menuItems];
522
525
  this.updateActiveRoute();
523
526
  });
524
527
  const routerSub = this.router.events.pipe(filter(event => event instanceof NavigationStart)).subscribe(event => {
@@ -535,17 +538,19 @@ class SidebarComponent extends BaseComponent {
535
538
  }
536
539
  return;
537
540
  }
538
- this.resetMenuState(this.menuItems);
539
- item.isActive = true;
540
- this.updateParents(item);
541
+ let newMenuItems = this.resetMenuState(this.menuItems);
542
+ newMenuItems = this.setItemActive(newMenuItems, item, this.hasChildren(item) ? !item.isActive : true);
543
+ newMenuItems = this.updateParents(newMenuItems, item);
544
+ this.menuItems = newMenuItems;
541
545
  if (!!item.clickFunction) {
542
546
  item.clickFunction();
543
547
  return;
544
548
  }
545
- if ((item.children?.length || 0) > 0) {
549
+ if (this.hasChildren(item)) {
546
550
  return;
547
551
  }
548
- this.router.navigate(item.getFullPath()).then();
552
+ const fullPath = this.findItemById(this.menuItemsBackup, item.id).getFullPath();
553
+ this.router.navigate(fullPath).then();
549
554
  }
550
555
  hasChildren(item) {
551
556
  return (item.children?.length || 0) > 0;
@@ -564,50 +569,117 @@ class SidebarComponent extends BaseComponent {
564
569
  if (item.fullPath === fullPath) {
565
570
  return item;
566
571
  }
567
- else if (item.children.length > 0) {
568
- let result;
569
- for (let i = 0; !result && i < item.children.length; i++) {
570
- result = this.findActiveNode(item.children[i], fullPath);
572
+ for (const child of item.children) {
573
+ const found = this.findActiveNode(child, fullPath);
574
+ if (found) {
575
+ return found;
571
576
  }
572
- return result;
573
577
  }
574
578
  return undefined;
575
579
  }
576
580
  updateActiveRoute() {
577
- this.resetMenuState(this.menuItems);
578
- let item;
579
- for (const mi of this.menuItems) {
580
- item = this.findActiveNode(mi, this.currentRoute);
581
- if (!!item) {
581
+ let newMenuItems = this.resetMenuState(this.menuItems);
582
+ const activePath = this.getActivePath(newMenuItems);
583
+ newMenuItems = this.setActivePath(newMenuItems, activePath);
584
+ this.menuItems = newMenuItems;
585
+ }
586
+ setActivePath(items, path) {
587
+ if (path.length === 0) {
588
+ return items;
589
+ }
590
+ return items.map(item => {
591
+ const pathItem = path.find(p => p.id === item.id);
592
+ if (!pathItem) {
593
+ return item;
594
+ }
595
+ const newItem = { ...item, isActive: true };
596
+ if (newItem.children?.length) {
597
+ newItem.children = this.setActivePath(newItem.children, path.filter(p => p.parent?.id === newItem.id));
598
+ newItem.children.forEach(child => child.parent = newItem);
599
+ }
600
+ return newItem;
601
+ });
602
+ }
603
+ getActivePath(items) {
604
+ let activeItem;
605
+ // Find the deepest active item.
606
+ for (const item of items) {
607
+ activeItem = this.findActiveNode(item, this.currentRoute);
608
+ if (activeItem) {
582
609
  break;
583
610
  }
584
611
  }
585
- while (!!item) {
586
- item.isActive = true;
587
- item = item.parent;
612
+ // Collect parent hierarchy.
613
+ const path = [];
614
+ while (activeItem) {
615
+ path.unshift(activeItem);
616
+ activeItem = activeItem.parent;
588
617
  }
618
+ return path;
589
619
  }
590
620
  resetMenuState(items) {
591
- items.forEach(i => {
592
- i.isActive = false;
593
- if (i.children.length > 0) {
594
- this.resetMenuState(i.children);
621
+ return items.map(item => {
622
+ const newItem = { ...item, isActive: false };
623
+ if (newItem.children?.length) {
624
+ newItem.children = this.resetMenuState(newItem.children);
625
+ newItem.children.forEach(child => child.parent = newItem);
626
+ }
627
+ return newItem;
628
+ });
629
+ }
630
+ setItemActive(items, target, isActive) {
631
+ return items.map(item => {
632
+ if (item.id === target.id) {
633
+ const newItem = { ...item, isActive };
634
+ if (newItem.children?.length) {
635
+ newItem.children = this.setItemActive(newItem.children, target, isActive);
636
+ newItem.children.forEach(child => child.parent = newItem);
637
+ }
638
+ return newItem;
595
639
  }
640
+ if (item.children?.length) {
641
+ const newChildren = this.setItemActive(item.children, target, isActive);
642
+ const newItem = { ...item, children: newChildren };
643
+ newChildren.forEach(child => child.parent = newItem);
644
+ return newItem;
645
+ }
646
+ return item;
596
647
  });
597
648
  }
598
- updateParents(menuItem) {
599
- let item = menuItem;
600
- while (!!item) {
601
- item.isActive = true;
602
- item = item.parent;
649
+ updateParents(items, childItem) {
650
+ let parent = childItem.parent;
651
+ let updatedItems = [...items];
652
+ while (parent) {
653
+ updatedItems = updatedItems.map(item => {
654
+ if (item.id === parent.id) {
655
+ return { ...parent, isActive: true };
656
+ }
657
+ return item;
658
+ });
659
+ parent = parent.parent;
660
+ }
661
+ return updatedItems;
662
+ }
663
+ findItemById(items, targetId) {
664
+ for (const item of items) {
665
+ if (item.id === targetId) {
666
+ return item;
667
+ }
668
+ if (item.children?.length) {
669
+ const child = this.findItemById(item.children, targetId);
670
+ if (!!child) {
671
+ return child;
672
+ }
673
+ }
603
674
  }
675
+ return undefined;
604
676
  }
605
677
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
678
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: SidebarComponent, selector: "upd-sidebar", host: { properties: { "class": "this.wrapperClasses", "attr.data-bs-theme": "this.theme" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1$2.IconComponent, selector: "upd-icon", inputs: ["model", "wrapperClasses", "color", "colorClass", "removeDefaultClasses", "customClasses", "tablerIcon", "tablerIconWeight", "tablerIconType", "tablerIconSize", "heroIcon", "heroIconSize", "heroIconType"] }, { kind: "component", type: i3.LinkComponent, selector: "upd-link", inputs: ["href", "target", "customClasses", "isNavigation"], outputs: ["clicked"] }], encapsulation: i0.ViewEncapsulation.None }); }
607
679
  }
608
680
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: SidebarComponent, decorators: [{
609
681
  type: Component,
610
- args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
682
+ args: [{ selector: 'upd-sidebar', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid\">\n <button class=\"navbar-toggler\" type=\"button\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <h1 class=\"navbar-brand navbar-brand-autodark\">\n <a href=\".\">\n <img width=\"110\" height=\"32\" class=\"navbar-brand-image upd-brand-logo\" />\n </a>\n </h1>\n <div class=\"collapse navbar-collapse\">\n <ul class=\"navbar-nav pt-lg-3\">\n @for (item of menuItems; track item.id) {\n <li class=\"nav-item\" [class.dropdown]=\"hasChildren(item)\" [class.active]=\"item.isActive\">\n <ng-container [ngTemplateOutlet]=\"itemTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </li>\n }\n </ul>\n </div>\n</div>\n\n<ng-template #itemTpl let-item=\"menuItem\">\n <upd-link [isNavigation]=\"true\" (clicked)=\"onMenuItemClick(item)\"\n [customClasses]=\"getItemClasses(item, 'show', hasChildren(item) ? 'dropdown-toggle':'')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n </upd-link>\n @if (hasChildren(item)) {\n <ng-container [ngTemplateOutlet]=\"childrenTpl\" [ngTemplateOutletContext]=\"{menuItem: item}\"></ng-container>\n }\n</ng-template>\n\n<ng-template #linkContent let-item=\"menuItem\">\n @if (!!item.icon) {\n <span class=\"nav-link-icon d-md-none d-lg-inline-block\">\n <upd-icon [model]=\"item.icon\"></upd-icon>\n </span>\n }\n <span class=\"nav-link-title\">{{ textService.getText(item.title) }}</span>\n @if (item.isLocked) {\n <upd-icon class=\"ms-auto\" [model]=\"{tablerIcon: 'lock'}\"></upd-icon>\n }\n</ng-template>\n\n<ng-template #childrenTpl let-item=\"menuItem\">\n <div class=\"dropdown-menu\" [class.show]=\"item.isActive\">\n <div class=\"dropdown-menu-columns\">\n <div class=\"dropdown-menu-column\">\n @for (child of asMenuItem(item).children; track child.id) {\n @if (!hasChildren(child)) {\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n } @else {\n <div class=\"dropend\">\n <upd-link (clicked)=\"onMenuItemClick(child)\" [customClasses]=\"getItemClasses(child, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: child}\"></ng-container>\n </upd-link>\n <div class=\"dropdown-menu\" [class.show]=\"child.isActive\">\n @for (grandchild of child.children; track grandchild) {\n <upd-link (clicked)=\"onMenuItemClick(grandchild)\"\n [customClasses]=\"getItemClasses(grandchild, 'active', 'dropdown-item')\">\n <ng-container [ngTemplateOutlet]=\"linkContent\" [ngTemplateOutletContext]=\"{menuItem: grandchild}\">\n </ng-container>\n </upd-link>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n</ng-template>\n" }]
611
683
  }], propDecorators: { wrapperClasses: [{
612
684
  type: HostBinding,
613
685
  args: ['class']