@coreui/angular 2.14.0 → 2.15.0

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 (104) hide show
  1. package/README.md +13 -6
  2. package/esm2020/coreui-angular.mjs +4 -4
  3. package/esm2020/lib/aside/app-aside.component.mjs +59 -58
  4. package/esm2020/lib/aside/app-aside.module.mjs +20 -28
  5. package/esm2020/lib/aside/index.mjs +2 -2
  6. package/esm2020/lib/aside/public_api.mjs +3 -3
  7. package/esm2020/lib/breadcrumb/app-breadcrumb.component.mjs +63 -62
  8. package/esm2020/lib/breadcrumb/app-breadcrumb.module.mjs +28 -31
  9. package/esm2020/lib/breadcrumb/app-breadcrumb.service.mjs +46 -46
  10. package/esm2020/lib/breadcrumb/cui-breadcrumb.component.mjs +37 -38
  11. package/esm2020/lib/breadcrumb/index.mjs +2 -2
  12. package/esm2020/lib/breadcrumb/public_api.mjs +4 -4
  13. package/esm2020/lib/footer/app-footer.component.mjs +41 -40
  14. package/esm2020/lib/footer/app-footer.module.mjs +16 -18
  15. package/esm2020/lib/footer/index.mjs +2 -2
  16. package/esm2020/lib/footer/public_api.mjs +3 -3
  17. package/esm2020/lib/header/app-header.component.mjs +96 -97
  18. package/esm2020/lib/header/app-header.module.mjs +20 -32
  19. package/esm2020/lib/header/index.mjs +2 -2
  20. package/esm2020/lib/header/public_api.mjs +3 -3
  21. package/esm2020/lib/shared/classes.mjs +15 -15
  22. package/esm2020/lib/shared/index.mjs +2 -2
  23. package/esm2020/lib/shared/layout/layout.directive.mjs +240 -233
  24. package/esm2020/lib/shared/layout/layout.module.mjs +50 -54
  25. package/esm2020/lib/shared/public_api.mjs +5 -5
  26. package/esm2020/lib/shared/replace.mjs +12 -12
  27. package/esm2020/lib/shared/toggle-classes.mjs +46 -46
  28. package/esm2020/lib/sidebar/app-sidebar-footer.component.mjs +21 -20
  29. package/esm2020/lib/sidebar/app-sidebar-form.component.mjs +21 -20
  30. package/esm2020/lib/sidebar/app-sidebar-header.component.mjs +21 -20
  31. package/esm2020/lib/sidebar/app-sidebar-minimizer.component.mjs +36 -35
  32. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-badge.pipe.mjs +23 -22
  33. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-divider.component.mjs +18 -18
  34. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-icon.pipe.mjs +22 -21
  35. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-item-class.pipe.mjs +32 -31
  36. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-items.component.mjs +193 -173
  37. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-label.component.mjs +44 -44
  38. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.component.mjs +97 -97
  39. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.pipe.mjs +22 -21
  40. package/esm2020/lib/sidebar/app-sidebar-nav/app-sidebar-nav-title.component.mjs +68 -67
  41. package/esm2020/lib/sidebar/app-sidebar-nav.component.mjs +33 -33
  42. package/esm2020/lib/sidebar/app-sidebar-nav.directive.mjs +47 -42
  43. package/esm2020/lib/sidebar/app-sidebar-nav.mjs +2 -2
  44. package/esm2020/lib/sidebar/app-sidebar-nav.service.mjs +53 -53
  45. package/esm2020/lib/sidebar/app-sidebar.component.mjs +113 -112
  46. package/esm2020/lib/sidebar/app-sidebar.module.mjs +126 -117
  47. package/esm2020/lib/sidebar/app-sidebar.service.mjs +21 -21
  48. package/esm2020/lib/sidebar/index.mjs +2 -2
  49. package/esm2020/lib/sidebar/public_api.mjs +16 -16
  50. package/esm2020/public-api.mjs +10 -10
  51. package/fesm2015/coreui-angular.mjs +1621 -1585
  52. package/fesm2015/coreui-angular.mjs.map +1 -1
  53. package/fesm2020/coreui-angular.mjs +1596 -1560
  54. package/fesm2020/coreui-angular.mjs.map +1 -1
  55. package/index.d.ts +5 -5
  56. package/lib/aside/app-aside.component.d.ts +19 -19
  57. package/lib/aside/app-aside.module.d.ts +7 -9
  58. package/lib/aside/index.d.ts +1 -1
  59. package/lib/aside/public_api.d.ts +2 -2
  60. package/lib/breadcrumb/app-breadcrumb.component.d.ts +19 -19
  61. package/lib/breadcrumb/app-breadcrumb.module.d.ts +10 -12
  62. package/lib/breadcrumb/app-breadcrumb.service.d.ts +12 -12
  63. package/lib/breadcrumb/cui-breadcrumb.component.d.ts +18 -18
  64. package/lib/breadcrumb/index.d.ts +1 -1
  65. package/lib/breadcrumb/public_api.d.ts +3 -3
  66. package/lib/footer/app-footer.component.d.ts +15 -15
  67. package/lib/footer/app-footer.module.d.ts +7 -8
  68. package/lib/footer/index.d.ts +1 -1
  69. package/lib/footer/public_api.d.ts +2 -2
  70. package/lib/header/app-header.component.d.ts +34 -34
  71. package/lib/header/app-header.module.d.ts +7 -10
  72. package/lib/header/index.d.ts +1 -1
  73. package/lib/header/public_api.d.ts +2 -2
  74. package/lib/shared/classes.d.ts +2 -2
  75. package/lib/shared/index.d.ts +1 -1
  76. package/lib/shared/layout/layout.directive.d.ts +78 -78
  77. package/lib/shared/layout/layout.module.d.ts +7 -8
  78. package/lib/shared/public_api.d.ts +4 -4
  79. package/lib/shared/replace.d.ts +1 -1
  80. package/lib/shared/toggle-classes.d.ts +12 -12
  81. package/lib/sidebar/app-sidebar-footer.component.d.ts +7 -7
  82. package/lib/sidebar/app-sidebar-form.component.d.ts +7 -7
  83. package/lib/sidebar/app-sidebar-header.component.d.ts +7 -7
  84. package/lib/sidebar/app-sidebar-minimizer.component.d.ts +11 -11
  85. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-badge.pipe.d.ts +7 -7
  86. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-divider.component.d.ts +8 -10
  87. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-icon.pipe.d.ts +7 -7
  88. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-item-class.pipe.d.ts +10 -10
  89. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-items.component.d.ts +27 -25
  90. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-label.component.d.ts +19 -19
  91. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.component.d.ts +34 -36
  92. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-link.pipe.d.ts +7 -7
  93. package/lib/sidebar/app-sidebar-nav/app-sidebar-nav-title.component.d.ts +16 -16
  94. package/lib/sidebar/app-sidebar-nav.component.d.ts +15 -15
  95. package/lib/sidebar/app-sidebar-nav.d.ts +50 -50
  96. package/lib/sidebar/app-sidebar-nav.directive.d.ts +20 -19
  97. package/lib/sidebar/app-sidebar-nav.service.d.ts +21 -21
  98. package/lib/sidebar/app-sidebar.component.d.ts +33 -33
  99. package/lib/sidebar/app-sidebar.module.d.ts +24 -25
  100. package/lib/sidebar/app-sidebar.service.d.ts +12 -12
  101. package/lib/sidebar/index.d.ts +1 -1
  102. package/lib/sidebar/public_api.d.ts +9 -9
  103. package/package.json +5 -5
  104. package/public-api.d.ts +5 -5
@@ -1,233 +1,240 @@
1
- import { Directive, HostListener, Inject, Input } from '@angular/core';
2
- import { DOCUMENT } from '@angular/common';
3
- import { asideMenuCssClasses, sidebarCssClasses } from '../classes';
4
- import { ClassToggler } from '../toggle-classes';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../toggle-classes";
7
- /**
8
- * Allows the sidebar to be toggled via click.
9
- */
10
- export class SidebarToggleDirective {
11
- constructor(classToggler) {
12
- this.classToggler = classToggler;
13
- this.breakpoint = false;
14
- }
15
- ngOnInit() {
16
- this.bp = this.breakpoint;
17
- }
18
- toggleOpen($event) {
19
- $event.preventDefault();
20
- const cssClass = this.bp ? `sidebar-${this.bp}-show` : sidebarCssClasses[0];
21
- this.classToggler.toggleClasses(cssClass, sidebarCssClasses);
22
- }
23
- }
24
- SidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: SidebarToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
25
- SidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.5", type: SidebarToggleDirective, selector: "[appSidebarToggler]", inputs: { breakpoint: ["appSidebarToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: SidebarToggleDirective, decorators: [{
27
- type: Directive,
28
- args: [{
29
- selector: '[appSidebarToggler]',
30
- providers: [ClassToggler]
31
- }]
32
- }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
33
- type: Input,
34
- args: ['appSidebarToggler']
35
- }], toggleOpen: [{
36
- type: HostListener,
37
- args: ['click', ['$event']]
38
- }] } });
39
- export class SidebarMinimizeDirective {
40
- constructor(document, renderer) {
41
- this.document = document;
42
- this.renderer = renderer;
43
- }
44
- toggleOpen($event) {
45
- $event.preventDefault();
46
- const body = this.document.body;
47
- body.classList.contains('sidebar-minimized') ?
48
- this.renderer.removeClass(body, 'sidebar-minimized') :
49
- this.renderer.addClass(body, 'sidebar-minimized');
50
- }
51
- }
52
- SidebarMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: SidebarMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
53
- SidebarMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.5", type: SidebarMinimizeDirective, selector: "[appSidebarMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: SidebarMinimizeDirective, decorators: [{
55
- type: Directive,
56
- args: [{
57
- selector: '[appSidebarMinimizer]'
58
- }]
59
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
60
- type: Inject,
61
- args: [DOCUMENT]
62
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
63
- type: HostListener,
64
- args: ['click', ['$event']]
65
- }] } });
66
- export class MobileSidebarToggleDirective {
67
- constructor(document, renderer) {
68
- this.document = document;
69
- this.renderer = renderer;
70
- }
71
- toggleOpen($event) {
72
- $event.preventDefault();
73
- const body = this.document.body;
74
- body.classList.contains('sidebar-show') ?
75
- this.renderer.removeClass(body, 'sidebar-show') :
76
- this.renderer.addClass(body, 'sidebar-show');
77
- }
78
- }
79
- MobileSidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: MobileSidebarToggleDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
80
- MobileSidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.5", type: MobileSidebarToggleDirective, selector: "[appMobileSidebarToggler]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
81
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: MobileSidebarToggleDirective, decorators: [{
82
- type: Directive,
83
- args: [{
84
- selector: '[appMobileSidebarToggler]'
85
- }]
86
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
87
- type: Inject,
88
- args: [DOCUMENT]
89
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
90
- type: HostListener,
91
- args: ['click', ['$event']]
92
- }] } });
93
- /**
94
- * Allows the off-canvas sidebar to be closed via click.
95
- */
96
- export class SidebarOffCanvasCloseDirective {
97
- constructor(document, renderer) {
98
- this.document = document;
99
- this.renderer = renderer;
100
- }
101
- toggleOpen($event) {
102
- $event.preventDefault();
103
- const body = this.document.body;
104
- if (body.classList.contains('sidebar-off-canvas')) {
105
- body.classList.contains('sidebar-show') ?
106
- this.renderer.removeClass(body, 'sidebar-show') :
107
- this.renderer.addClass(body, 'sidebar-show');
108
- }
109
- }
110
- }
111
- SidebarOffCanvasCloseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: SidebarOffCanvasCloseDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
112
- SidebarOffCanvasCloseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.5", type: SidebarOffCanvasCloseDirective, selector: "[appSidebarClose]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: SidebarOffCanvasCloseDirective, decorators: [{
114
- type: Directive,
115
- args: [{
116
- selector: '[appSidebarClose]'
117
- }]
118
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
119
- type: Inject,
120
- args: [DOCUMENT]
121
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
122
- type: HostListener,
123
- args: ['click', ['$event']]
124
- }] } });
125
- export class BrandMinimizeDirective {
126
- constructor(document, renderer) {
127
- this.document = document;
128
- this.renderer = renderer;
129
- }
130
- toggleOpen($event) {
131
- $event.preventDefault();
132
- const body = this.document.body;
133
- body.classList.contains('brand-minimized') ?
134
- this.renderer.removeClass(body, 'brand-minimized') :
135
- this.renderer.addClass(body, 'brand-minimized');
136
- }
137
- }
138
- BrandMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: BrandMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
139
- BrandMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.5", type: BrandMinimizeDirective, selector: "[appBrandMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: BrandMinimizeDirective, decorators: [{
141
- type: Directive,
142
- args: [{
143
- selector: '[appBrandMinimizer]'
144
- }]
145
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
146
- type: Inject,
147
- args: [DOCUMENT]
148
- }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
149
- type: HostListener,
150
- args: ['click', ['$event']]
151
- }] } });
152
- /**
153
- * Allows the aside to be toggled via click.
154
- */
155
- export class AsideToggleDirective {
156
- constructor(classToggler) {
157
- this.classToggler = classToggler;
158
- this.breakpoint = false;
159
- }
160
- ngOnInit() {
161
- this.bp = this.breakpoint;
162
- }
163
- toggleOpen($event) {
164
- $event.preventDefault();
165
- const cssClass = this.bp ? `aside-menu-${this.bp}-show` : asideMenuCssClasses[0];
166
- this.classToggler.toggleClasses(cssClass, asideMenuCssClasses);
167
- }
168
- }
169
- AsideToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: AsideToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
170
- AsideToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.5", type: AsideToggleDirective, selector: "[appAsideMenuToggler]", inputs: { breakpoint: ["appAsideMenuToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: AsideToggleDirective, decorators: [{
172
- type: Directive,
173
- args: [{
174
- selector: '[appAsideMenuToggler]',
175
- providers: [ClassToggler]
176
- }]
177
- }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
178
- type: Input,
179
- args: ['appAsideMenuToggler']
180
- }], toggleOpen: [{
181
- type: HostListener,
182
- args: ['click', ['$event']]
183
- }] } });
184
- export class HtmlAttributesDirective {
185
- constructor(renderer, el) {
186
- this.renderer = renderer;
187
- this.el = el;
188
- this.appHtmlAttr = {};
189
- }
190
- ngOnInit() {
191
- const attribs = this.appHtmlAttr;
192
- for (const attr in attribs) {
193
- if (attr === 'style' && typeof (attribs[attr]) === 'object') {
194
- this.setStyle(attribs[attr]);
195
- }
196
- else if (attr === 'class') {
197
- this.addClass(attribs[attr]);
198
- }
199
- else {
200
- this.setAttrib(attr, attribs[attr]);
201
- }
202
- }
203
- }
204
- setStyle(styles) {
205
- for (const style in styles) {
206
- if (style) {
207
- this.renderer.setStyle(this.el.nativeElement, style, styles[style]);
208
- }
209
- }
210
- }
211
- addClass(classes) {
212
- const classArray = (Array.isArray(classes) ? classes : classes.split(' '));
213
- classArray.filter((element) => element.length > 0).forEach(element => {
214
- this.renderer.addClass(this.el.nativeElement, element);
215
- });
216
- }
217
- setAttrib(key, value) {
218
- value !== null ?
219
- this.renderer.setAttribute(this.el.nativeElement, key, value) :
220
- this.renderer.removeAttribute(this.el.nativeElement, key);
221
- }
222
- }
223
- HtmlAttributesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: HtmlAttributesDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
224
- HtmlAttributesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.5", type: HtmlAttributesDirective, selector: "[appHtmlAttr]", inputs: { appHtmlAttr: "appHtmlAttr" }, ngImport: i0 });
225
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: HtmlAttributesDirective, decorators: [{
226
- type: Directive,
227
- args: [{
228
- selector: '[appHtmlAttr]'
229
- }]
230
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { appHtmlAttr: [{
231
- type: Input
232
- }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvc2hhcmVkL2xheW91dC9sYXlvdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFFakQ7O0dBRUc7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBR2pDLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRmxCLGVBQVUsR0FBcUIsS0FBSyxDQUFDO0lBRWhCLENBQUM7SUFDbEQsUUFBUTtRQUNOLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVc7UUFDcEIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUMvRCxDQUFDOzttSEFaVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixtS0FGdEIsQ0FBQyxZQUFZLENBQUM7MkZBRWQsc0JBQXNCO2tCQUpsQyxTQUFTO21CQUFD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LENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCxDQUFDOztvSEF4Q1UsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFIbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtpQkFDMUI7eUhBRVUsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IGFzaWRlTWVudUNzc0NsYXNzZXMsIHNpZGViYXJDc3NDbGFzc2VzIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XHJcbmltcG9ydCB7IENsYXNzVG9nZ2xlciB9IGZyb20gJy4uL3RvZ2dsZS1jbGFzc2VzJztcclxuXHJcbi8qKlxyXG4gKiBBbGxvd3MgdGhlIHNpZGViYXIgdG8gYmUgdG9nZ2xlZCB2aWEgY2xpY2suXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1thcHBTaWRlYmFyVG9nZ2xlcl0nLFxyXG4gIHByb3ZpZGVyczogW0NsYXNzVG9nZ2xlcl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNpZGViYXJUb2dnbGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgnYXBwU2lkZWJhclRvZ2dsZXInKSBicmVha3BvaW50OiBzdHJpbmcgfCBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJwITogc3RyaW5nIHwgYm9vbGVhbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsYXNzVG9nZ2xlcjogQ2xhc3NUb2dnbGVyKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgY3NzQ2xhc3MgPSB0aGlzLmJwID8gYHNpZGViYXItJHt0aGlzLmJwfS1zaG93YCA6IHNpZGViYXJDc3NDbGFzc2VzWzBdO1xyXG4gICAgdGhpcy5jbGFzc1RvZ2dsZXIudG9nZ2xlQ2xhc3Nlcyhjc3NDbGFzcywgc2lkZWJhckNzc0NsYXNzZXMpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwU2lkZWJhck1pbmltaXplcl0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyTWluaW1pemVEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkgeyB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICB0b2dnbGVPcGVuKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmRvY3VtZW50LmJvZHk7XHJcbiAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1taW5pbWl6ZWQnKSA/XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ3NpZGViYXItbWluaW1pemVkJykgOlxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvZHksICdzaWRlYmFyLW1pbmltaXplZCcpO1xyXG4gIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwTW9iaWxlU2lkZWJhclRvZ2dsZXJdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTW9iaWxlU2lkZWJhclRvZ2dsZURpcmVjdGl2ZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnksXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgKSB7IH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgYm9keSA9IHRoaXMuZG9jdW1lbnQuYm9keTtcclxuICAgIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzaWRlYmFyLXNob3cnKSA/XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ3NpZGViYXItc2hvdycpIDpcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhib2R5LCAnc2lkZWJhci1zaG93Jyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQWxsb3dzIHRoZSBvZmYtY2FudmFzIHNpZGViYXIgdG8gYmUgY2xvc2VkIHZpYSBjbGljay5cclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcFNpZGViYXJDbG9zZV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaWRlYmFyT2ZmQ2FudmFzQ2xvc2VEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkgeyB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICB0b2dnbGVPcGVuKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBjb25zdCBib2R5ID0gdGhpcy5kb2N1bWVudC5ib2R5O1xyXG4gICAgaWYgKGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzaWRlYmFyLW9mZi1jYW52YXMnKSkge1xyXG4gICAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1zaG93JykgP1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ3NpZGViYXItc2hvdycpIDpcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvZHksICdzaWRlYmFyLXNob3cnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcEJyYW5kTWluaW1pemVyXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyYW5kTWluaW1pemVEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICkgeyB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICB0b2dnbGVPcGVuKCRldmVudDogYW55KSB7XHJcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmRvY3VtZW50LmJvZHk7XHJcbiAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnYnJhbmQtbWluaW1pemVkJykgP1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvZHksICdicmFuZC1taW5pbWl6ZWQnKSA6XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYm9keSwgJ2JyYW5kLW1pbmltaXplZCcpO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBBbGxvd3MgdGhlIGFzaWRlIHRvIGJlIHRvZ2dsZWQgdmlhIGNsaWNrLlxyXG4gKi9cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYXBwQXNpZGVNZW51VG9nZ2xlcl0nLFxyXG4gIHByb3ZpZGVyczogW0NsYXNzVG9nZ2xlcl1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFzaWRlVG9nZ2xlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoJ2FwcEFzaWRlTWVudVRvZ2dsZXInKSBicmVha3BvaW50OiBzdHJpbmcgfCBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGJwITogc3RyaW5nIHwgYm9vbGVhbjtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsYXNzVG9nZ2xlcjogQ2xhc3NUb2dnbGVyKSB7fVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcclxuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY29uc3QgY3NzQ2xhc3MgPSB0aGlzLmJwID8gYGFzaWRlLW1lbnUtJHt0aGlzLmJwfS1zaG93YCA6IGFzaWRlTWVudUNzc0NsYXNzZXNbMF07XHJcbiAgICB0aGlzLmNsYXNzVG9nZ2xlci50b2dnbGVDbGFzc2VzKGNzc0NsYXNzLCBhc2lkZU1lbnVDc3NDbGFzc2VzKTtcclxuICB9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcEh0bWxBdHRyXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEh0bWxBdHRyaWJ1dGVzRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBhcHBIdG1sQXR0cj86IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc3QgYXR0cmlicyA9IHRoaXMuYXBwSHRtbEF0dHI7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gYXR0cmlicykge1xyXG4gICAgICBpZiAoYXR0ciA9PT0gJ3N0eWxlJyAmJiB0eXBlb2YoYXR0cmlic1thdHRyXSkgPT09ICdvYmplY3QnICkge1xyXG4gICAgICAgIHRoaXMuc2V0U3R5bGUoYXR0cmlic1thdHRyXSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoYXR0ciA9PT0gJ2NsYXNzJykge1xyXG4gICAgICAgIHRoaXMuYWRkQ2xhc3MoYXR0cmlic1thdHRyXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRBdHRyaWIoYXR0ciwgYXR0cmlic1thdHRyXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3R5bGUoc3R5bGVzOiBhbnkpIHtcclxuICAgIGZvciAoY29uc3Qgc3R5bGUgaW4gc3R5bGVzKSB7XHJcbiAgICAgIGlmIChzdHlsZSkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBzdHlsZSwgc3R5bGVzW3N0eWxlXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ2xhc3MoY2xhc3Nlczogc3RyaW5nIHwgYW55W10pIHtcclxuICAgIGNvbnN0IGNsYXNzQXJyYXkgPSAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSA/IGNsYXNzZXMgOiBjbGFzc2VzLnNwbGl0KCcgJykpO1xyXG4gICAgY2xhc3NBcnJheS5maWx0ZXIoKGVsZW1lbnQpID0+IGVsZW1lbnQubGVuZ3RoID4gMCkuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGVsZW1lbnQgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRBdHRyaWIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICB2YWx1ZSAhPT0gbnVsbCA/XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwga2V5LCB2YWx1ZSApIDpcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBrZXkpO1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { Directive, HostListener, Inject, Input } from '@angular/core';
2
+ import { DOCUMENT } from '@angular/common';
3
+ import { asideMenuCssClasses, sidebarCssClasses } from '../classes';
4
+ import { ClassToggler } from '../toggle-classes';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../toggle-classes";
7
+ /**
8
+ * Allows the sidebar to be toggled via click.
9
+ */
10
+ export class SidebarToggleDirective {
11
+ constructor(classToggler) {
12
+ this.classToggler = classToggler;
13
+ this.breakpoint = false;
14
+ }
15
+ ngOnInit() {
16
+ this.bp = this.breakpoint;
17
+ }
18
+ toggleOpen($event) {
19
+ $event.preventDefault();
20
+ const cssClass = this.bp ? `sidebar-${this.bp}-show` : sidebarCssClasses[0];
21
+ this.classToggler.toggleClasses(cssClass, sidebarCssClasses);
22
+ }
23
+ }
24
+ SidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SidebarToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
25
+ SidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: SidebarToggleDirective, isStandalone: true, selector: "[appSidebarToggler]", inputs: { breakpoint: ["appSidebarToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SidebarToggleDirective, decorators: [{
27
+ type: Directive,
28
+ args: [{
29
+ selector: '[appSidebarToggler]',
30
+ providers: [ClassToggler],
31
+ standalone: true
32
+ }]
33
+ }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
34
+ type: Input,
35
+ args: ['appSidebarToggler']
36
+ }], toggleOpen: [{
37
+ type: HostListener,
38
+ args: ['click', ['$event']]
39
+ }] } });
40
+ export class SidebarMinimizeDirective {
41
+ constructor(document, renderer) {
42
+ this.document = document;
43
+ this.renderer = renderer;
44
+ }
45
+ toggleOpen($event) {
46
+ $event.preventDefault();
47
+ const body = this.document.body;
48
+ body.classList.contains('sidebar-minimized') ?
49
+ this.renderer.removeClass(body, 'sidebar-minimized') :
50
+ this.renderer.addClass(body, 'sidebar-minimized');
51
+ }
52
+ }
53
+ SidebarMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SidebarMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
54
+ SidebarMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: SidebarMinimizeDirective, isStandalone: true, selector: "[appSidebarMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SidebarMinimizeDirective, decorators: [{
56
+ type: Directive,
57
+ args: [{
58
+ selector: '[appSidebarMinimizer]',
59
+ standalone: true
60
+ }]
61
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
62
+ type: Inject,
63
+ args: [DOCUMENT]
64
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
65
+ type: HostListener,
66
+ args: ['click', ['$event']]
67
+ }] } });
68
+ export class MobileSidebarToggleDirective {
69
+ constructor(document, renderer) {
70
+ this.document = document;
71
+ this.renderer = renderer;
72
+ }
73
+ toggleOpen($event) {
74
+ $event.preventDefault();
75
+ const body = this.document.body;
76
+ body.classList.contains('sidebar-show') ?
77
+ this.renderer.removeClass(body, 'sidebar-show') :
78
+ this.renderer.addClass(body, 'sidebar-show');
79
+ }
80
+ }
81
+ MobileSidebarToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MobileSidebarToggleDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
82
+ MobileSidebarToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: MobileSidebarToggleDirective, isStandalone: true, selector: "[appMobileSidebarToggler]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MobileSidebarToggleDirective, decorators: [{
84
+ type: Directive,
85
+ args: [{
86
+ selector: '[appMobileSidebarToggler]',
87
+ standalone: true
88
+ }]
89
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
90
+ type: Inject,
91
+ args: [DOCUMENT]
92
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
93
+ type: HostListener,
94
+ args: ['click', ['$event']]
95
+ }] } });
96
+ /**
97
+ * Allows the off-canvas sidebar to be closed via click.
98
+ */
99
+ export class SidebarOffCanvasCloseDirective {
100
+ constructor(document, renderer) {
101
+ this.document = document;
102
+ this.renderer = renderer;
103
+ }
104
+ toggleOpen($event) {
105
+ $event.preventDefault();
106
+ const body = this.document.body;
107
+ if (body.classList.contains('sidebar-off-canvas')) {
108
+ body.classList.contains('sidebar-show') ?
109
+ this.renderer.removeClass(body, 'sidebar-show') :
110
+ this.renderer.addClass(body, 'sidebar-show');
111
+ }
112
+ }
113
+ }
114
+ SidebarOffCanvasCloseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SidebarOffCanvasCloseDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
115
+ SidebarOffCanvasCloseDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: SidebarOffCanvasCloseDirective, isStandalone: true, selector: "[appSidebarClose]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: SidebarOffCanvasCloseDirective, decorators: [{
117
+ type: Directive,
118
+ args: [{
119
+ selector: '[appSidebarClose]',
120
+ standalone: true
121
+ }]
122
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
123
+ type: Inject,
124
+ args: [DOCUMENT]
125
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
126
+ type: HostListener,
127
+ args: ['click', ['$event']]
128
+ }] } });
129
+ export class BrandMinimizeDirective {
130
+ constructor(document, renderer) {
131
+ this.document = document;
132
+ this.renderer = renderer;
133
+ }
134
+ toggleOpen($event) {
135
+ $event.preventDefault();
136
+ const body = this.document.body;
137
+ body.classList.contains('brand-minimized') ?
138
+ this.renderer.removeClass(body, 'brand-minimized') :
139
+ this.renderer.addClass(body, 'brand-minimized');
140
+ }
141
+ }
142
+ BrandMinimizeDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: BrandMinimizeDirective, deps: [{ token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
143
+ BrandMinimizeDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: BrandMinimizeDirective, isStandalone: true, selector: "[appBrandMinimizer]", host: { listeners: { "click": "toggleOpen($event)" } }, ngImport: i0 });
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: BrandMinimizeDirective, decorators: [{
145
+ type: Directive,
146
+ args: [{
147
+ selector: '[appBrandMinimizer]',
148
+ standalone: true
149
+ }]
150
+ }], ctorParameters: function () { return [{ type: Document, decorators: [{
151
+ type: Inject,
152
+ args: [DOCUMENT]
153
+ }] }, { type: i0.Renderer2 }]; }, propDecorators: { toggleOpen: [{
154
+ type: HostListener,
155
+ args: ['click', ['$event']]
156
+ }] } });
157
+ /**
158
+ * Allows the aside to be toggled via click.
159
+ */
160
+ export class AsideToggleDirective {
161
+ constructor(classToggler) {
162
+ this.classToggler = classToggler;
163
+ this.breakpoint = false;
164
+ }
165
+ ngOnInit() {
166
+ this.bp = this.breakpoint;
167
+ }
168
+ toggleOpen($event) {
169
+ $event.preventDefault();
170
+ const cssClass = this.bp ? `aside-menu-${this.bp}-show` : asideMenuCssClasses[0];
171
+ this.classToggler.toggleClasses(cssClass, asideMenuCssClasses);
172
+ }
173
+ }
174
+ AsideToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: AsideToggleDirective, deps: [{ token: i1.ClassToggler }], target: i0.ɵɵFactoryTarget.Directive });
175
+ AsideToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: AsideToggleDirective, isStandalone: true, selector: "[appAsideMenuToggler]", inputs: { breakpoint: ["appAsideMenuToggler", "breakpoint"] }, host: { listeners: { "click": "toggleOpen($event)" } }, providers: [ClassToggler], ngImport: i0 });
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: AsideToggleDirective, decorators: [{
177
+ type: Directive,
178
+ args: [{
179
+ selector: '[appAsideMenuToggler]',
180
+ providers: [ClassToggler],
181
+ standalone: true
182
+ }]
183
+ }], ctorParameters: function () { return [{ type: i1.ClassToggler }]; }, propDecorators: { breakpoint: [{
184
+ type: Input,
185
+ args: ['appAsideMenuToggler']
186
+ }], toggleOpen: [{
187
+ type: HostListener,
188
+ args: ['click', ['$event']]
189
+ }] } });
190
+ export class HtmlAttributesDirective {
191
+ constructor(renderer, el) {
192
+ this.renderer = renderer;
193
+ this.el = el;
194
+ this.appHtmlAttr = {};
195
+ }
196
+ ngOnInit() {
197
+ const attribs = this.appHtmlAttr;
198
+ for (const attr in attribs) {
199
+ if (attr === 'style' && typeof (attribs[attr]) === 'object') {
200
+ this.setStyle(attribs[attr]);
201
+ }
202
+ else if (attr === 'class') {
203
+ this.addClass(attribs[attr]);
204
+ }
205
+ else {
206
+ this.setAttrib(attr, attribs[attr]);
207
+ }
208
+ }
209
+ }
210
+ setStyle(styles) {
211
+ for (const style in styles) {
212
+ if (style) {
213
+ this.renderer.setStyle(this.el.nativeElement, style, styles[style]);
214
+ }
215
+ }
216
+ }
217
+ addClass(classes) {
218
+ const classArray = (Array.isArray(classes) ? classes : classes.split(' '));
219
+ classArray.filter((element) => element.length > 0).forEach(element => {
220
+ this.renderer.addClass(this.el.nativeElement, element);
221
+ });
222
+ }
223
+ setAttrib(key, value) {
224
+ value !== null ?
225
+ this.renderer.setAttribute(this.el.nativeElement, key, value) :
226
+ this.renderer.removeAttribute(this.el.nativeElement, key);
227
+ }
228
+ }
229
+ HtmlAttributesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: HtmlAttributesDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
230
+ HtmlAttributesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: HtmlAttributesDirective, isStandalone: true, selector: "[appHtmlAttr]", inputs: { appHtmlAttr: "appHtmlAttr" }, ngImport: i0 });
231
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: HtmlAttributesDirective, decorators: [{
232
+ type: Directive,
233
+ args: [{
234
+ selector: '[appHtmlAttr]',
235
+ standalone: true
236
+ }]
237
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { appHtmlAttr: [{
238
+ type: Input
239
+ }] } });
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvc2hhcmVkL2xheW91dC9sYXlvdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFFakQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8sc0JBQXNCO0lBR2pDLFlBQW9CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRmxCLGVBQVUsR0FBcUIsS0FBSyxDQUFDO0lBRWYsQ0FBQztJQUNuRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBVztRQUNwQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9ELENBQUM7O21IQVpVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHVMQUh0QixDQUFDLFlBQVksQ0FBQzsyRkFHZCxzQkFBc0I7a0JBTGxDLFNBQVM7bUJBQUM7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QUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sU0FBUyxDQUFDLEdBQVcsRUFBRSxLQUFvQjtRQUNqRCxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RCxDQUFDOztvSEF4Q1UsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFKbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3lIQUVVLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgYXNpZGVNZW51Q3NzQ2xhc3Nlcywgc2lkZWJhckNzc0NsYXNzZXMgfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IENsYXNzVG9nZ2xlciB9IGZyb20gJy4uL3RvZ2dsZS1jbGFzc2VzJztcblxuLyoqXG4gKiBBbGxvd3MgdGhlIHNpZGViYXIgdG8gYmUgdG9nZ2xlZCB2aWEgY2xpY2suXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBTaWRlYmFyVG9nZ2xlcl0nLFxuICBwcm92aWRlcnM6IFtDbGFzc1RvZ2dsZXJdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNpZGViYXJUb2dnbGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2FwcFNpZGViYXJUb2dnbGVyJykgYnJlYWtwb2ludDogc3RyaW5nIHwgYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYnAhOiBzdHJpbmcgfCBib29sZWFuO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsYXNzVG9nZ2xlcjogQ2xhc3NUb2dnbGVyKSB7IH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IHRoaXMuYnAgPyBgc2lkZWJhci0ke3RoaXMuYnB9LXNob3dgIDogc2lkZWJhckNzc0NsYXNzZXNbMF07XG4gICAgdGhpcy5jbGFzc1RvZ2dsZXIudG9nZ2xlQ2xhc3Nlcyhjc3NDbGFzcywgc2lkZWJhckNzc0NsYXNzZXMpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBTaWRlYmFyTWluaW1pemVyXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgU2lkZWJhck1pbmltaXplRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICApIHsgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgdG9nZ2xlT3BlbigkZXZlbnQ6IGFueSkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmRvY3VtZW50LmJvZHk7XG4gICAgYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3NpZGViYXItbWluaW1pemVkJykgP1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhib2R5LCAnc2lkZWJhci1taW5pbWl6ZWQnKSA6XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGJvZHksICdzaWRlYmFyLW1pbmltaXplZCcpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thcHBNb2JpbGVTaWRlYmFyVG9nZ2xlcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIE1vYmlsZVNpZGViYXJUb2dnbGVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICkgeyB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICB0b2dnbGVPcGVuKCRldmVudDogYW55KSB7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgYm9keSA9IHRoaXMuZG9jdW1lbnQuYm9keTtcbiAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1zaG93JykgP1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhib2R5LCAnc2lkZWJhci1zaG93JykgOlxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhib2R5LCAnc2lkZWJhci1zaG93Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbGxvd3MgdGhlIG9mZi1jYW52YXMgc2lkZWJhciB0byBiZSBjbG9zZWQgdmlhIGNsaWNrLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwU2lkZWJhckNsb3NlXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgU2lkZWJhck9mZkNhbnZhc0Nsb3NlRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICApIHsgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgdG9nZ2xlT3BlbigkZXZlbnQ6IGFueSkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgYm9keSA9IHRoaXMuZG9jdW1lbnQuYm9keTtcbiAgICBpZiAoYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3NpZGViYXItb2ZmLWNhbnZhcycpKSB7XG4gICAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygnc2lkZWJhci1zaG93JykgP1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGJvZHksICdzaWRlYmFyLXNob3cnKSA6XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYm9keSwgJ3NpZGViYXItc2hvdycpO1xuICAgIH1cbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwQnJhbmRNaW5pbWl6ZXJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBCcmFuZE1pbmltaXplRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICApIHsgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgdG9nZ2xlT3BlbigkZXZlbnQ6IGFueSkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLmRvY3VtZW50LmJvZHk7XG4gICAgYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ2JyYW5kLW1pbmltaXplZCcpID9cbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoYm9keSwgJ2JyYW5kLW1pbmltaXplZCcpIDpcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYm9keSwgJ2JyYW5kLW1pbmltaXplZCcpO1xuICB9XG59XG5cblxuLyoqXG4gKiBBbGxvd3MgdGhlIGFzaWRlIHRvIGJlIHRvZ2dsZWQgdmlhIGNsaWNrLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwQXNpZGVNZW51VG9nZ2xlcl0nLFxuICBwcm92aWRlcnM6IFtDbGFzc1RvZ2dsZXJdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEFzaWRlVG9nZ2xlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCdhcHBBc2lkZU1lbnVUb2dnbGVyJykgYnJlYWtwb2ludDogc3RyaW5nIHwgYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYnAhOiBzdHJpbmcgfCBib29sZWFuO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsYXNzVG9nZ2xlcjogQ2xhc3NUb2dnbGVyKSB7IH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5icCA9IHRoaXMuYnJlYWtwb2ludDtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHRvZ2dsZU9wZW4oJGV2ZW50OiBhbnkpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjc3NDbGFzcyA9IHRoaXMuYnAgPyBgYXNpZGUtbWVudS0ke3RoaXMuYnB9LXNob3dgIDogYXNpZGVNZW51Q3NzQ2xhc3Nlc1swXTtcbiAgICB0aGlzLmNsYXNzVG9nZ2xlci50b2dnbGVDbGFzc2VzKGNzc0NsYXNzLCBhc2lkZU1lbnVDc3NDbGFzc2VzKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwSHRtbEF0dHJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBIdG1sQXR0cmlidXRlc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGFwcEh0bWxBdHRyPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgYXR0cmlicyA9IHRoaXMuYXBwSHRtbEF0dHI7XG4gICAgZm9yIChjb25zdCBhdHRyIGluIGF0dHJpYnMpIHtcbiAgICAgIGlmIChhdHRyID09PSAnc3R5bGUnICYmIHR5cGVvZiAoYXR0cmlic1thdHRyXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRoaXMuc2V0U3R5bGUoYXR0cmlic1thdHRyXSk7XG4gICAgICB9IGVsc2UgaWYgKGF0dHIgPT09ICdjbGFzcycpIHtcbiAgICAgICAgdGhpcy5hZGRDbGFzcyhhdHRyaWJzW2F0dHJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmliKGF0dHIsIGF0dHJpYnNbYXR0cl0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGUoc3R5bGVzOiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IHN0eWxlIGluIHN0eWxlcykge1xuICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBzdHlsZSwgc3R5bGVzW3N0eWxlXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRDbGFzcyhjbGFzc2VzOiBzdHJpbmcgfCBhbnlbXSkge1xuICAgIGNvbnN0IGNsYXNzQXJyYXkgPSAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSA/IGNsYXNzZXMgOiBjbGFzc2VzLnNwbGl0KCcgJykpO1xuICAgIGNsYXNzQXJyYXkuZmlsdGVyKChlbGVtZW50KSA9PiBlbGVtZW50Lmxlbmd0aCA+IDApLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEF0dHJpYihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICB2YWx1ZSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGtleSwgdmFsdWUpIDpcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwga2V5KTtcbiAgfVxufVxuIl19