@memberjunction/ng-ui-components 5.38.0 → 5.39.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 (39) hide show
  1. package/dist/lib/applied-filters/applied-filters.component.d.ts +55 -0
  2. package/dist/lib/applied-filters/applied-filters.component.d.ts.map +1 -0
  3. package/dist/lib/applied-filters/applied-filters.component.js +128 -0
  4. package/dist/lib/applied-filters/applied-filters.component.js.map +1 -0
  5. package/dist/lib/filter-panel/filter-panel.component.d.ts +14 -0
  6. package/dist/lib/filter-panel/filter-panel.component.d.ts.map +1 -1
  7. package/dist/lib/filter-panel/filter-panel.component.js +30 -5
  8. package/dist/lib/filter-panel/filter-panel.component.js.map +1 -1
  9. package/dist/lib/filter-popover/filter-popover.component.d.ts +14 -2
  10. package/dist/lib/filter-popover/filter-popover.component.d.ts.map +1 -1
  11. package/dist/lib/filter-popover/filter-popover.component.js +153 -52
  12. package/dist/lib/filter-popover/filter-popover.component.js.map +1 -1
  13. package/dist/lib/left-nav/left-nav-content.component.d.ts.map +1 -1
  14. package/dist/lib/left-nav/left-nav-content.component.js +3 -3
  15. package/dist/lib/left-nav/left-nav-content.component.js.map +1 -1
  16. package/dist/lib/left-nav/left-nav.component.d.ts +36 -9
  17. package/dist/lib/left-nav/left-nav.component.d.ts.map +1 -1
  18. package/dist/lib/left-nav/left-nav.component.js +253 -117
  19. package/dist/lib/left-nav/left-nav.component.js.map +1 -1
  20. package/dist/lib/page-body/page-body.component.d.ts.map +1 -1
  21. package/dist/lib/page-body/page-body.component.js +3 -3
  22. package/dist/lib/page-body/page-body.component.js.map +1 -1
  23. package/dist/lib/page-header/page-header.component.js +2 -2
  24. package/dist/lib/page-header/page-header.scss +51 -4
  25. package/dist/lib/page-header-interior/page-header-interior.component.d.ts.map +1 -1
  26. package/dist/lib/page-header-interior/page-header-interior.component.js +3 -3
  27. package/dist/lib/page-header-interior/page-header-interior.component.js.map +1 -1
  28. package/dist/lib/refresh-button/refresh-button.component.d.ts.map +1 -1
  29. package/dist/lib/refresh-button/refresh-button.component.js +13 -10
  30. package/dist/lib/refresh-button/refresh-button.component.js.map +1 -1
  31. package/dist/lib/slide-panel/slide-panel.component.d.ts +64 -0
  32. package/dist/lib/slide-panel/slide-panel.component.d.ts.map +1 -0
  33. package/dist/lib/slide-panel/slide-panel.component.js +256 -0
  34. package/dist/lib/slide-panel/slide-panel.component.js.map +1 -0
  35. package/dist/public-api.d.ts +1 -0
  36. package/dist/public-api.d.ts.map +1 -1
  37. package/dist/public-api.js +1 -0
  38. package/dist/public-api.js.map +1 -1
  39. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/common";
@@ -8,163 +8,169 @@ const _c2 = (a0, a1) => ({ item: a0, depth: 0, hasExpandable: a1 });
8
8
  const _c3 = a0 => ({ item: a0 });
9
9
  const _c4 = (a0, a1, a2) => ({ item: a0, depth: a1, hasExpandable: a2 });
10
10
  const _forTrack0 = ($index, $item) => $item.id;
11
- function MJLeftNavComponent_For_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
12
- i0.ɵɵelementStart(0, "div", 3);
11
+ function MJLeftNavComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
12
+ i0.ɵɵelement(0, "i", 12);
13
+ } if (rf & 2) {
14
+ const ctx_r1 = i0.ɵɵnextContext();
15
+ i0.ɵɵclassMap(ctx_r1.ActiveTriggerItem.icon);
16
+ } }
17
+ function MJLeftNavComponent_For_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
18
+ i0.ɵɵelementStart(0, "div", 13);
13
19
  i0.ɵɵtext(1);
14
20
  i0.ɵɵelementEnd();
15
21
  } if (rf & 2) {
16
- const section_r1 = i0.ɵɵnextContext().$implicit;
22
+ const section_r3 = i0.ɵɵnextContext().$implicit;
17
23
  i0.ɵɵadvance();
18
- i0.ɵɵtextInterpolate(section_r1.label);
24
+ i0.ɵɵtextInterpolate(section_r3.label);
19
25
  } }
20
- function MJLeftNavComponent_For_3_For_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
26
+ function MJLeftNavComponent_For_14_For_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
21
27
  i0.ɵɵelementContainer(0);
22
28
  } }
23
- function MJLeftNavComponent_For_3_For_2_Template(rf, ctx) { if (rf & 1) {
24
- i0.ɵɵtemplate(0, MJLeftNavComponent_For_3_For_2_ng_container_0_Template, 1, 0, "ng-container", 4);
29
+ function MJLeftNavComponent_For_14_For_2_Template(rf, ctx) { if (rf & 1) {
30
+ i0.ɵɵtemplate(0, MJLeftNavComponent_For_14_For_2_ng_container_0_Template, 1, 0, "ng-container", 14);
25
31
  } if (rf & 2) {
26
- const item_r2 = ctx.$implicit;
27
- const section_r1 = i0.ɵɵnextContext().$implicit;
28
- const ctx_r2 = i0.ɵɵnextContext();
29
- const itemTpl_r4 = i0.ɵɵreference(6);
30
- i0.ɵɵproperty("ngTemplateOutlet", itemTpl_r4)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c2, item_r2, ctx_r2.HasExpandableItems(section_r1.items)));
32
+ const item_r4 = ctx.$implicit;
33
+ const section_r3 = i0.ɵɵnextContext().$implicit;
34
+ const ctx_r1 = i0.ɵɵnextContext();
35
+ const itemTpl_r5 = i0.ɵɵreference(17);
36
+ i0.ɵɵproperty("ngTemplateOutlet", itemTpl_r5)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c2, item_r4, ctx_r1.HasExpandableItems(section_r3.items)));
31
37
  } }
32
- function MJLeftNavComponent_For_3_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵconditionalCreate(0, MJLeftNavComponent_For_3_Conditional_0_Template, 2, 1, "div", 3);
34
- i0.ɵɵrepeaterCreate(1, MJLeftNavComponent_For_3_For_2_Template, 1, 5, "ng-container", null, _forTrack0);
38
+ function MJLeftNavComponent_For_14_Template(rf, ctx) { if (rf & 1) {
39
+ i0.ɵɵconditionalCreate(0, MJLeftNavComponent_For_14_Conditional_0_Template, 2, 1, "div", 13);
40
+ i0.ɵɵrepeaterCreate(1, MJLeftNavComponent_For_14_For_2_Template, 1, 5, "ng-container", null, _forTrack0);
35
41
  } if (rf & 2) {
36
- const section_r1 = ctx.$implicit;
37
- i0.ɵɵconditional(section_r1.label ? 0 : -1);
42
+ const section_r3 = ctx.$implicit;
43
+ i0.ɵɵconditional(section_r3.label ? 0 : -1);
38
44
  i0.ɵɵadvance();
39
- i0.ɵɵrepeater(section_r1.items);
45
+ i0.ɵɵrepeater(section_r3.items);
40
46
  } }
41
- function MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
42
- const _r5 = i0.ɵɵgetCurrentView();
43
- i0.ɵɵelementStart(0, "button", 8);
44
- i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_1_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const item_r6 = i0.ɵɵnextContext(2).item; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnItemToggle($event, item_r6)); });
45
- i0.ɵɵelement(1, "i", 9);
47
+ function MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
48
+ const _r6 = i0.ɵɵgetCurrentView();
49
+ i0.ɵɵelementStart(0, "button", 18);
50
+ i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_1_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const item_r7 = i0.ɵɵnextContext(2).item; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnItemToggle($event, item_r7)); });
51
+ i0.ɵɵelement(1, "i", 19);
46
52
  i0.ɵɵelementEnd();
47
53
  } if (rf & 2) {
48
- const item_r6 = i0.ɵɵnextContext(2).item;
49
- const ctx_r2 = i0.ɵɵnextContext();
50
- i0.ɵɵattribute("aria-label", ctx_r2.IsExpanded(item_r6.id) ? "Collapse" : "Expand")("aria-expanded", ctx_r2.IsExpanded(item_r6.id));
54
+ const item_r7 = i0.ɵɵnextContext(2).item;
55
+ const ctx_r1 = i0.ɵɵnextContext();
56
+ i0.ɵɵattribute("aria-label", ctx_r1.IsExpanded(item_r7.id) ? "Collapse" : "Expand")("aria-expanded", ctx_r1.IsExpanded(item_r7.id));
51
57
  i0.ɵɵadvance();
52
- i0.ɵɵclassProp("fa-chevron-down", ctx_r2.IsExpanded(item_r6.id))("fa-chevron-right", !ctx_r2.IsExpanded(item_r6.id));
58
+ i0.ɵɵclassProp("fa-chevron-down", ctx_r1.IsExpanded(item_r7.id))("fa-chevron-right", !ctx_r1.IsExpanded(item_r7.id));
53
59
  } }
54
- function MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
55
- i0.ɵɵelement(0, "span", 7);
60
+ function MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
61
+ i0.ɵɵelement(0, "span", 17);
56
62
  } }
57
- function MJLeftNavComponent_ng_template_5_Conditional_0_ng_container_3_Template(rf, ctx) { if (rf & 1) {
63
+ function MJLeftNavComponent_ng_template_16_Conditional_0_ng_container_3_Template(rf, ctx) { if (rf & 1) {
58
64
  i0.ɵɵelementContainer(0);
59
65
  } }
60
- function MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_4_For_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
66
+ function MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_4_For_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
61
67
  i0.ɵɵelementContainer(0);
62
68
  } }
63
- function MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_4_For_1_Template(rf, ctx) { if (rf & 1) {
64
- i0.ɵɵtemplate(0, MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_4_For_1_ng_container_0_Template, 1, 0, "ng-container", 4);
69
+ function MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_4_For_1_Template(rf, ctx) { if (rf & 1) {
70
+ i0.ɵɵtemplate(0, MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_4_For_1_ng_container_0_Template, 1, 0, "ng-container", 14);
65
71
  } if (rf & 2) {
66
- const child_r7 = ctx.$implicit;
67
- const ctx_r7 = i0.ɵɵnextContext(3);
68
- const depth_r9 = ctx_r7.depth;
69
- const hasExpandable_r10 = ctx_r7.hasExpandable;
72
+ const child_r8 = ctx.$implicit;
73
+ const ctx_r8 = i0.ɵɵnextContext(3);
74
+ const depth_r10 = ctx_r8.depth;
75
+ const hasExpandable_r11 = ctx_r8.hasExpandable;
70
76
  i0.ɵɵnextContext();
71
- const itemTpl_r4 = i0.ɵɵreference(6);
72
- i0.ɵɵproperty("ngTemplateOutlet", itemTpl_r4)("ngTemplateOutletContext", i0.ɵɵpureFunction3(2, _c4, child_r7, depth_r9 + 1, hasExpandable_r10));
77
+ const itemTpl_r5 = i0.ɵɵreference(17);
78
+ i0.ɵɵproperty("ngTemplateOutlet", itemTpl_r5)("ngTemplateOutletContext", i0.ɵɵpureFunction3(2, _c4, child_r8, depth_r10 + 1, hasExpandable_r11));
73
79
  } }
74
- function MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵrepeaterCreate(0, MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_4_For_1_Template, 1, 6, "ng-container", null, _forTrack0);
80
+ function MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
81
+ i0.ɵɵrepeaterCreate(0, MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_4_For_1_Template, 1, 6, "ng-container", null, _forTrack0);
76
82
  } if (rf & 2) {
77
- const item_r6 = i0.ɵɵnextContext(2).item;
78
- i0.ɵɵrepeater(item_r6.children);
83
+ const item_r7 = i0.ɵɵnextContext(2).item;
84
+ i0.ɵɵrepeater(item_r7.children);
79
85
  } }
80
- function MJLeftNavComponent_ng_template_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
81
- i0.ɵɵelementStart(0, "div", 5);
82
- i0.ɵɵconditionalCreate(1, MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_1_Template, 2, 6, "button", 6)(2, MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_2_Template, 1, 0, "span", 7);
83
- i0.ɵɵtemplate(3, MJLeftNavComponent_ng_template_5_Conditional_0_ng_container_3_Template, 1, 0, "ng-container", 4);
86
+ function MJLeftNavComponent_ng_template_16_Conditional_0_Template(rf, ctx) { if (rf & 1) {
87
+ i0.ɵɵelementStart(0, "div", 15);
88
+ i0.ɵɵconditionalCreate(1, MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_1_Template, 2, 6, "button", 16)(2, MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_2_Template, 1, 0, "span", 17);
89
+ i0.ɵɵtemplate(3, MJLeftNavComponent_ng_template_16_Conditional_0_ng_container_3_Template, 1, 0, "ng-container", 14);
84
90
  i0.ɵɵelementEnd();
85
- i0.ɵɵconditionalCreate(4, MJLeftNavComponent_ng_template_5_Conditional_0_Conditional_4_Template, 2, 0);
91
+ i0.ɵɵconditionalCreate(4, MJLeftNavComponent_ng_template_16_Conditional_0_Conditional_4_Template, 2, 0);
86
92
  } if (rf & 2) {
87
- const ctx_r7 = i0.ɵɵnextContext();
88
- const item_r6 = ctx_r7.item;
89
- const depth_r9 = ctx_r7.depth;
90
- const ctx_r2 = i0.ɵɵnextContext();
91
- const itemBtn_r11 = i0.ɵɵreference(8);
92
- i0.ɵɵstyleProp("padding-left", depth_r9 * 14, "px");
93
+ const ctx_r8 = i0.ɵɵnextContext();
94
+ const item_r7 = ctx_r8.item;
95
+ const depth_r10 = ctx_r8.depth;
96
+ const ctx_r1 = i0.ɵɵnextContext();
97
+ const itemBtn_r12 = i0.ɵɵreference(19);
98
+ i0.ɵɵstyleProp("padding-left", depth_r10 * 14, "px");
93
99
  i0.ɵɵadvance();
94
- i0.ɵɵconditional(item_r6.children.length > 0 ? 1 : 2);
100
+ i0.ɵɵconditional(item_r7.children.length > 0 ? 1 : 2);
95
101
  i0.ɵɵadvance(2);
96
- i0.ɵɵproperty("ngTemplateOutlet", itemBtn_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction1(6, _c3, item_r6));
102
+ i0.ɵɵproperty("ngTemplateOutlet", itemBtn_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(6, _c3, item_r7));
97
103
  i0.ɵɵadvance();
98
- i0.ɵɵconditional(item_r6.children.length > 0 && ctx_r2.IsExpanded(item_r6.id) ? 4 : -1);
104
+ i0.ɵɵconditional(item_r7.children.length > 0 && ctx_r1.IsExpanded(item_r7.id) ? 4 : -1);
99
105
  } }
100
- function MJLeftNavComponent_ng_template_5_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
106
+ function MJLeftNavComponent_ng_template_16_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
101
107
  i0.ɵɵelementContainer(0);
102
108
  } }
103
- function MJLeftNavComponent_ng_template_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
104
- i0.ɵɵtemplate(0, MJLeftNavComponent_ng_template_5_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 4);
109
+ function MJLeftNavComponent_ng_template_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
110
+ i0.ɵɵtemplate(0, MJLeftNavComponent_ng_template_16_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 14);
105
111
  } if (rf & 2) {
106
- const item_r6 = i0.ɵɵnextContext().item;
112
+ const item_r7 = i0.ɵɵnextContext().item;
107
113
  i0.ɵɵnextContext();
108
- const itemBtn_r11 = i0.ɵɵreference(8);
109
- i0.ɵɵproperty("ngTemplateOutlet", itemBtn_r11)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c3, item_r6));
114
+ const itemBtn_r12 = i0.ɵɵreference(19);
115
+ i0.ɵɵproperty("ngTemplateOutlet", itemBtn_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c3, item_r7));
110
116
  } }
111
- function MJLeftNavComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {
112
- i0.ɵɵconditionalCreate(0, MJLeftNavComponent_ng_template_5_Conditional_0_Template, 5, 8)(1, MJLeftNavComponent_ng_template_5_Conditional_1_Template, 1, 4, "ng-container");
117
+ function MJLeftNavComponent_ng_template_16_Template(rf, ctx) { if (rf & 1) {
118
+ i0.ɵɵconditionalCreate(0, MJLeftNavComponent_ng_template_16_Conditional_0_Template, 5, 8)(1, MJLeftNavComponent_ng_template_16_Conditional_1_Template, 1, 4, "ng-container");
113
119
  } if (rf & 2) {
114
- const item_r6 = ctx.item;
115
- const hasExpandable_r10 = ctx.hasExpandable;
116
- i0.ɵɵconditional(item_r6.children !== undefined && hasExpandable_r10 ? 0 : 1);
120
+ const item_r7 = ctx.item;
121
+ const hasExpandable_r11 = ctx.hasExpandable;
122
+ i0.ɵɵconditional(item_r7.children !== undefined && hasExpandable_r11 ? 0 : 1);
117
123
  } }
118
- function MJLeftNavComponent_ng_template_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
119
- i0.ɵɵelement(0, "i", 16);
124
+ function MJLeftNavComponent_ng_template_18_Conditional_1_Template(rf, ctx) { if (rf & 1) {
125
+ i0.ɵɵelement(0, "i", 26);
120
126
  } if (rf & 2) {
121
- const item_r13 = i0.ɵɵnextContext().item;
122
- i0.ɵɵclassMap(item_r13.icon);
127
+ const item_r14 = i0.ɵɵnextContext().item;
128
+ i0.ɵɵclassMap(item_r14.icon);
123
129
  } }
124
- function MJLeftNavComponent_ng_template_7_Conditional_5_Template(rf, ctx) { if (rf & 1) {
125
- i0.ɵɵelementStart(0, "span", 14);
130
+ function MJLeftNavComponent_ng_template_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
131
+ i0.ɵɵelementStart(0, "span", 24);
126
132
  i0.ɵɵtext(1);
127
133
  i0.ɵɵelementEnd();
128
134
  } if (rf & 2) {
129
- const item_r13 = i0.ɵɵnextContext().item;
135
+ const item_r14 = i0.ɵɵnextContext().item;
130
136
  i0.ɵɵadvance();
131
- i0.ɵɵtextInterpolate(item_r13.description);
137
+ i0.ɵɵtextInterpolate(item_r14.description);
132
138
  } }
133
- function MJLeftNavComponent_ng_template_7_Conditional_6_Template(rf, ctx) { if (rf & 1) {
134
- i0.ɵɵelementStart(0, "span", 15);
139
+ function MJLeftNavComponent_ng_template_18_Conditional_6_Template(rf, ctx) { if (rf & 1) {
140
+ i0.ɵɵelementStart(0, "span", 25);
135
141
  i0.ɵɵtext(1);
136
142
  i0.ɵɵelementEnd();
137
143
  } if (rf & 2) {
138
- const item_r13 = i0.ɵɵnextContext().item;
144
+ const item_r14 = i0.ɵɵnextContext().item;
139
145
  i0.ɵɵadvance();
140
- i0.ɵɵtextInterpolate(item_r13.badge);
146
+ i0.ɵɵtextInterpolate(item_r14.badge);
141
147
  } }
142
- function MJLeftNavComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {
143
- const _r12 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "button", 10);
145
- i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_7_Template_button_click_0_listener() { const item_r13 = i0.ɵɵrestoreView(_r12).item; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnItemClick(item_r13)); });
146
- i0.ɵɵconditionalCreate(1, MJLeftNavComponent_ng_template_7_Conditional_1_Template, 1, 2, "i", 11);
147
- i0.ɵɵelementStart(2, "span", 12)(3, "span", 13);
148
+ function MJLeftNavComponent_ng_template_18_Template(rf, ctx) { if (rf & 1) {
149
+ const _r13 = i0.ɵɵgetCurrentView();
150
+ i0.ɵɵelementStart(0, "button", 20);
151
+ i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_18_Template_button_click_0_listener() { const item_r14 = i0.ɵɵrestoreView(_r13).item; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnItemClick(item_r14)); });
152
+ i0.ɵɵconditionalCreate(1, MJLeftNavComponent_ng_template_18_Conditional_1_Template, 1, 2, "i", 21);
153
+ i0.ɵɵelementStart(2, "span", 22)(3, "span", 23);
148
154
  i0.ɵɵtext(4);
149
155
  i0.ɵɵelementEnd();
150
- i0.ɵɵconditionalCreate(5, MJLeftNavComponent_ng_template_7_Conditional_5_Template, 2, 1, "span", 14);
156
+ i0.ɵɵconditionalCreate(5, MJLeftNavComponent_ng_template_18_Conditional_5_Template, 2, 1, "span", 24);
151
157
  i0.ɵɵelementEnd();
152
- i0.ɵɵconditionalCreate(6, MJLeftNavComponent_ng_template_7_Conditional_6_Template, 2, 1, "span", 15);
158
+ i0.ɵɵconditionalCreate(6, MJLeftNavComponent_ng_template_18_Conditional_6_Template, 2, 1, "span", 25);
153
159
  i0.ɵɵelementEnd();
154
160
  } if (rf & 2) {
155
- const item_r13 = ctx.item;
156
- const ctx_r2 = i0.ɵɵnextContext();
157
- i0.ɵɵclassProp("mj-left-nav__item--active", item_r13.id === ctx_r2.ActiveId)("mj-left-nav__item--disabled", item_r13.disabled);
158
- i0.ɵɵproperty("disabled", item_r13.disabled);
159
- i0.ɵɵattribute("aria-current", item_r13.id === ctx_r2.ActiveId ? "page" : null);
161
+ const item_r14 = ctx.item;
162
+ const ctx_r1 = i0.ɵɵnextContext();
163
+ i0.ɵɵclassProp("mj-left-nav__item--active", item_r14.id === ctx_r1.ActiveId)("mj-left-nav__item--disabled", item_r14.disabled);
164
+ i0.ɵɵproperty("disabled", item_r14.disabled);
165
+ i0.ɵɵattribute("aria-current", item_r14.id === ctx_r1.ActiveId ? "page" : null);
160
166
  i0.ɵɵadvance();
161
- i0.ɵɵconditional(item_r13.icon ? 1 : -1);
167
+ i0.ɵɵconditional(item_r14.icon ? 1 : -1);
162
168
  i0.ɵɵadvance(3);
163
- i0.ɵɵtextInterpolate(item_r13.label);
169
+ i0.ɵɵtextInterpolate(item_r14.label);
164
170
  i0.ɵɵadvance();
165
- i0.ɵɵconditional(item_r13.description ? 5 : -1);
171
+ i0.ɵɵconditional(item_r14.description ? 5 : -1);
166
172
  i0.ɵɵadvance();
167
- i0.ɵɵconditional(item_r13.badge != null ? 6 : -1);
173
+ i0.ɵɵconditional(item_r14.badge != null ? 6 : -1);
168
174
  } }
169
175
  /**
170
176
  * `<mj-left-nav>` — Canonical left rail for MJ Explorer dashboards that have
@@ -180,9 +186,10 @@ function MJLeftNavComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {
180
186
  * - Items with a count badge (APIKeys pattern)
181
187
  * - Sections with uppercase headers (Communication / Credentials pattern)
182
188
  * - Optional `[header]` and `[footer]` content slots (KH Config logo header, etc.)
183
- * - Responsive collapse-to-row at narrow viewports (consumer controls parent's
184
- * flex-direction switch; the rail's own styles handle item wrapping + the
185
- * description-hide behavior)
189
+ * - Responsive mobile drawer (≤700px): the rail hides off-canvas and a compact
190
+ * section switcher takes its place; tapping it slides the full rail in over a
191
+ * scrim. The rail keeps its full content (trees, slots, descriptions, badges)
192
+ * inside the drawer — no flattening. Set `[MobileTitle]` for the drawer label.
186
193
  *
187
194
  * ## Example
188
195
  *
@@ -206,10 +213,11 @@ function MJLeftNavComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {
206
213
  * </mj-left-nav>
207
214
  * ```
208
215
  *
209
- * Responsive collapse — the rail's own CSS handles narrow-viewport item
210
- * wrapping. The consumer is responsible for switching the parent's
211
- * flex-direction from row → column at the same breakpoint, e.g. via
212
- * `<mj-page-body>` Direction="row" with a `@media` override in the shell's CSS.
216
+ * Responsive — at ≤700px the rail becomes an off-canvas drawer (see the feature
217
+ * list above). The consumer should still switch the parent's flex-direction from
218
+ * row → column at the same breakpoint (e.g. `<mj-page-body>` Direction="row" with
219
+ * a `@media` override) so the in-flow section switcher stacks above the content
220
+ * pane rather than competing with it for horizontal space.
213
221
  */
214
222
  export class MJLeftNavComponent {
215
223
  /**
@@ -224,9 +232,16 @@ export class MJLeftNavComponent {
224
232
  ActiveId = null;
225
233
  /**
226
234
  * Width of the rail in pixels. Defaults to 240. Set to a smaller value
227
- * (e.g., 200) for denser shells.
235
+ * (e.g., 200) for denser shells. Only applies to the desktop rail — on mobile
236
+ * the rail becomes a fixed-width off-canvas drawer.
228
237
  */
229
238
  Width = 240;
239
+ /**
240
+ * Label shown on the mobile drawer header and used as the switcher fallback
241
+ * label when no item is active. Defaults to `'Menu'`. Set to something
242
+ * domain-specific (e.g. `'Sections'`, `'Test Suites'`) for clearer context.
243
+ */
244
+ MobileTitle = 'Menu';
230
245
  /**
231
246
  * Ids of currently-expanded tree items. Items whose id appears here render
232
247
  * with a down-chevron and their `children` are visible; items not in this
@@ -245,15 +260,61 @@ export class MJLeftNavComponent {
245
260
  * the item's id in / out of `ExpandedIds`. Does NOT also fire `ItemClicked`.
246
261
  */
247
262
  ItemToggled = new EventEmitter();
263
+ /**
264
+ * Whether the mobile off-canvas drawer is open. Component-owned, transient UI
265
+ * state — no effect above the 700px breakpoint where the rail is always inline.
266
+ */
267
+ MobileNavOpen = false;
268
+ /** Reflects {@link MobileNavOpen} onto the host so CSS can drive the drawer. */
269
+ get isMobileNavOpen() {
270
+ return this.MobileNavOpen;
271
+ }
272
+ OpenMobileNav() {
273
+ this.MobileNavOpen = true;
274
+ }
275
+ CloseMobileNav() {
276
+ this.MobileNavOpen = false;
277
+ }
278
+ /** Escape closes the mobile drawer. No-op when it's already closed. */
279
+ onEscape() {
280
+ if (this.MobileNavOpen) {
281
+ this.MobileNavOpen = false;
282
+ }
283
+ }
248
284
  OnItemClick(item) {
249
285
  if (item.disabled)
250
286
  return;
287
+ // Selecting a leaf dismisses the mobile drawer; harmless on desktop.
288
+ this.MobileNavOpen = false;
251
289
  this.ItemClicked.emit(item);
252
290
  }
253
291
  OnItemToggle(event, item) {
254
292
  event.stopPropagation();
293
+ // Expanding/collapsing a tree branch keeps the drawer open.
255
294
  this.ItemToggled.emit(item);
256
295
  }
296
+ /**
297
+ * The item matching {@link ActiveId} (searched recursively through trees),
298
+ * used to label the mobile section switcher with the current section's icon
299
+ * and label. Returns `undefined` when nothing is active.
300
+ */
301
+ get ActiveTriggerItem() {
302
+ if (!this.ActiveId)
303
+ return undefined;
304
+ return this.findItemById(this.Sections.flatMap((s) => s.items), this.ActiveId);
305
+ }
306
+ findItemById(items, id) {
307
+ for (const item of items) {
308
+ if (item.id === id)
309
+ return item;
310
+ if (item.children?.length) {
311
+ const found = this.findItemById(item.children, id);
312
+ if (found)
313
+ return found;
314
+ }
315
+ }
316
+ return undefined;
317
+ }
257
318
  IsExpanded(id) {
258
319
  return this.ExpandedIds.indexOf(id) >= 0;
259
320
  }
@@ -274,24 +335,91 @@ export class MJLeftNavComponent {
274
335
  return false;
275
336
  }
276
337
  static ɵfac = function MJLeftNavComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MJLeftNavComponent)(); };
277
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJLeftNavComponent, selectors: [["mj-left-nav"]], inputs: { Sections: "Sections", ActiveId: "ActiveId", Width: "Width", ExpandedIds: "ExpandedIds" }, outputs: { ItemClicked: "ItemClicked", ItemToggled: "ItemToggled" }, ngContentSelectors: _c1, decls: 9, vars: 2, consts: [["itemTpl", ""], ["itemBtn", ""], ["role", "navigation", 1, "mj-left-nav"], [1, "mj-left-nav__section-label"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "mj-left-nav__row"], ["type", "button", 1, "mj-left-nav__chevron"], ["aria-hidden", "true", 1, "mj-left-nav__chevron-placeholder"], ["type", "button", 1, "mj-left-nav__chevron", 3, "click"], ["aria-hidden", "true", 1, "fa-solid"], ["type", "button", 1, "mj-left-nav__item", 3, "click", "disabled"], ["aria-hidden", "true", 1, "mj-left-nav__icon", 3, "class"], [1, "mj-left-nav__text"], [1, "mj-left-nav__label"], [1, "mj-left-nav__description"], [1, "mj-left-nav__badge"], ["aria-hidden", "true", 1, "mj-left-nav__icon"]], template: function MJLeftNavComponent_Template(rf, ctx) { if (rf & 1) {
338
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJLeftNavComponent, selectors: [["mj-left-nav"]], hostVars: 2, hostBindings: function MJLeftNavComponent_HostBindings(rf, ctx) { if (rf & 1) {
339
+ i0.ɵɵlistener("keydown.escape", function MJLeftNavComponent_keydown_escape_HostBindingHandler() { return ctx.onEscape(); }, i0.ɵɵresolveDocument);
340
+ } if (rf & 2) {
341
+ i0.ɵɵclassProp("mj-left-nav-host--open", ctx.isMobileNavOpen);
342
+ } }, inputs: { Sections: "Sections", ActiveId: "ActiveId", Width: "Width", MobileTitle: "MobileTitle", ExpandedIds: "ExpandedIds" }, outputs: { ItemClicked: "ItemClicked", ItemToggled: "ItemToggled" }, ngContentSelectors: _c1, decls: 20, vars: 7, consts: [["itemTpl", ""], ["itemBtn", ""], ["type", "button", "aria-haspopup", "dialog", 1, "mj-left-nav__switcher", 3, "click"], ["aria-hidden", "true", 1, "mj-left-nav__switcher-icon", 3, "class"], [1, "mj-left-nav__switcher-label"], ["aria-hidden", "true", 1, "fa-solid", "fa-bars-staggered", "mj-left-nav__switcher-hint"], ["aria-hidden", "true", 1, "mj-left-nav__scrim", 3, "click"], ["role", "navigation", 1, "mj-left-nav"], [1, "mj-left-nav__drawer-header"], [1, "mj-left-nav__drawer-title"], ["type", "button", "aria-label", "Close menu", 1, "mj-left-nav__drawer-close", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-xmark"], ["aria-hidden", "true", 1, "mj-left-nav__switcher-icon"], [1, "mj-left-nav__section-label"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "mj-left-nav__row"], ["type", "button", 1, "mj-left-nav__chevron"], ["aria-hidden", "true", 1, "mj-left-nav__chevron-placeholder"], ["type", "button", 1, "mj-left-nav__chevron", 3, "click"], ["aria-hidden", "true", 1, "fa-solid"], ["type", "button", 1, "mj-left-nav__item", 3, "click", "disabled"], ["aria-hidden", "true", 1, "mj-left-nav__icon", 3, "class"], [1, "mj-left-nav__text"], [1, "mj-left-nav__label"], [1, "mj-left-nav__description"], [1, "mj-left-nav__badge"], ["aria-hidden", "true", 1, "mj-left-nav__icon"]], template: function MJLeftNavComponent_Template(rf, ctx) { if (rf & 1) {
343
+ const _r1 = i0.ɵɵgetCurrentView();
278
344
  i0.ɵɵprojectionDef(_c0);
279
- i0.ɵɵelementStart(0, "aside", 2);
280
- i0.ɵɵprojection(1);
281
- i0.ɵɵrepeaterCreate(2, MJLeftNavComponent_For_3_Template, 3, 1, null, null, i0.ɵɵrepeaterTrackByIndex);
282
- i0.ɵɵprojection(4, 1);
345
+ i0.ɵɵelementStart(0, "button", 2);
346
+ i0.ɵɵlistener("click", function MJLeftNavComponent_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.OpenMobileNav()); });
347
+ i0.ɵɵconditionalCreate(1, MJLeftNavComponent_Conditional_1_Template, 1, 2, "i", 3);
348
+ i0.ɵɵelementStart(2, "span", 4);
349
+ i0.ɵɵtext(3);
350
+ i0.ɵɵelementEnd();
351
+ i0.ɵɵelement(4, "i", 5);
352
+ i0.ɵɵelementEnd();
353
+ i0.ɵɵelementStart(5, "div", 6);
354
+ i0.ɵɵlistener("click", function MJLeftNavComponent_Template_div_click_5_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.CloseMobileNav()); });
355
+ i0.ɵɵelementEnd();
356
+ i0.ɵɵelementStart(6, "aside", 7)(7, "div", 8)(8, "span", 9);
357
+ i0.ɵɵtext(9);
358
+ i0.ɵɵelementEnd();
359
+ i0.ɵɵelementStart(10, "button", 10);
360
+ i0.ɵɵlistener("click", function MJLeftNavComponent_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.CloseMobileNav()); });
361
+ i0.ɵɵelement(11, "i", 11);
362
+ i0.ɵɵelementEnd()();
363
+ i0.ɵɵprojection(12);
364
+ i0.ɵɵrepeaterCreate(13, MJLeftNavComponent_For_14_Template, 3, 1, null, null, i0.ɵɵrepeaterTrackByIndex);
365
+ i0.ɵɵprojection(15, 1);
283
366
  i0.ɵɵelementEnd();
284
- i0.ɵɵtemplate(5, MJLeftNavComponent_ng_template_5_Template, 2, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(7, MJLeftNavComponent_ng_template_7_Template, 7, 10, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
367
+ i0.ɵɵtemplate(16, MJLeftNavComponent_ng_template_16_Template, 2, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(18, MJLeftNavComponent_ng_template_18_Template, 7, 10, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
285
368
  } if (rf & 2) {
286
- i0.ɵɵstyleProp("width", ctx.Width, "px");
369
+ i0.ɵɵattribute("aria-expanded", ctx.MobileNavOpen);
370
+ i0.ɵɵadvance();
371
+ i0.ɵɵconditional((ctx.ActiveTriggerItem == null ? null : ctx.ActiveTriggerItem.icon) ? 1 : -1);
287
372
  i0.ɵɵadvance(2);
373
+ i0.ɵɵtextInterpolate((ctx.ActiveTriggerItem == null ? null : ctx.ActiveTriggerItem.label) || ctx.MobileTitle);
374
+ i0.ɵɵadvance(3);
375
+ i0.ɵɵstyleProp("width", ctx.Width, "px");
376
+ i0.ɵɵattribute("aria-modal", ctx.MobileNavOpen ? true : null);
377
+ i0.ɵɵadvance(3);
378
+ i0.ɵɵtextInterpolate(ctx.MobileTitle);
379
+ i0.ɵɵadvance(4);
288
380
  i0.ɵɵrepeater(ctx.Sections);
289
- } }, dependencies: [CommonModule, i1.NgTemplateOutlet], styles: ["[_nghost-%COMP%] {\n display: block;\n flex-shrink: 0;\n }\n\n .mj-left-nav[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n padding: 8px;\n box-sizing: border-box;\n }\n\n .mj-left-nav__section-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n padding: 12px 12px 6px;\n }\n\n .mj-left-nav__section-label[_ngcontent-%COMP%]:first-child {\n padding-top: 6px;\n }\n\n .mj-left-nav__item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n width: 100%;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.12s ease, color 0.12s ease;\n margin-bottom: 2px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n text-align: left;\n }\n\n .mj-left-nav__item[_ngcontent-%COMP%]:hover:not(.mj-left-nav__item--disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n }\n\n .mj-left-nav__item--disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .mj-left-nav__icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n }\n\n .mj-left-nav__text[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .mj-left-nav__label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n }\n\n .mj-left-nav__description[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%] .mj-left-nav__description[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n }\n\n .mj-left-nav__badge[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n align-self: center;\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%] .mj-left-nav__badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n }\n\n \n\n\n\n\n\n\n .mj-left-nav__row[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 2px;\n }\n\n .mj-left-nav__row[_ngcontent-%COMP%] .mj-left-nav__item[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n\n .mj-left-nav__chevron[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 20px;\n height: 32px;\n align-self: center;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 10px;\n padding: 0;\n transition: background-color 0.12s ease, color 0.12s ease;\n font-family: inherit;\n }\n\n .mj-left-nav__chevron[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__chevron-placeholder[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 20px;\n display: inline-block;\n }\n\n \n\n\n\n\n @media (max-width: 700px) {\n [_nghost-%COMP%] {\n width: 100% !important;\n }\n .mj-left-nav[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .mj-left-nav__item[_ngcontent-%COMP%] {\n flex: 1 1 calc(50% - 8px);\n margin-bottom: 0;\n }\n .mj-left-nav__description[_ngcontent-%COMP%] {\n display: none;\n }\n .mj-left-nav__section-label[_ngcontent-%COMP%] {\n flex-basis: 100%;\n }\n \n\n\n .mj-left-nav__row[_ngcontent-%COMP%] {\n flex-basis: 100%;\n padding-left: 0 !important;\n }\n }"] });
381
+ } }, dependencies: [CommonModule, i1.NgTemplateOutlet], styles: ["[_nghost-%COMP%] {\n display: block;\n flex-shrink: 0;\n }\n\n .mj-left-nav[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n padding: 8px;\n box-sizing: border-box;\n }\n\n .mj-left-nav__section-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n padding: 12px 12px 6px;\n }\n\n .mj-left-nav__section-label[_ngcontent-%COMP%]:first-child {\n padding-top: 6px;\n }\n\n .mj-left-nav__item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n width: 100%;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.12s ease, color 0.12s ease;\n margin-bottom: 2px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n text-align: left;\n }\n\n .mj-left-nav__item[_ngcontent-%COMP%]:hover:not(.mj-left-nav__item--disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n }\n\n .mj-left-nav__item--disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .mj-left-nav__icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n }\n\n .mj-left-nav__text[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .mj-left-nav__label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n }\n\n .mj-left-nav__description[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%] .mj-left-nav__description[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n }\n\n .mj-left-nav__badge[_ngcontent-%COMP%] {\n margin-left: auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n align-self: center;\n }\n\n .mj-left-nav__item--active[_ngcontent-%COMP%] .mj-left-nav__badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n }\n\n \n\n\n\n\n\n\n .mj-left-nav__row[_ngcontent-%COMP%] {\n display: flex;\n align-items: stretch;\n gap: 2px;\n }\n\n .mj-left-nav__row[_ngcontent-%COMP%] .mj-left-nav__item[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n\n .mj-left-nav__chevron[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 20px;\n height: 32px;\n align-self: center;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 10px;\n padding: 0;\n transition: background-color 0.12s ease, color 0.12s ease;\n font-family: inherit;\n }\n\n .mj-left-nav__chevron[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__chevron-placeholder[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 20px;\n display: inline-block;\n }\n\n \n\n\n\n\n\n\n\n\n\n .mj-left-nav__switcher[_ngcontent-%COMP%], \n .mj-left-nav__scrim[_ngcontent-%COMP%], \n .mj-left-nav__drawer-header[_ngcontent-%COMP%] {\n display: none;\n }\n\n @media (max-width: 700px) {\n \n\n [_nghost-%COMP%] {\n width: 100% !important;\n }\n\n \n\n\n .mj-left-nav__description[_ngcontent-%COMP%] {\n display: none;\n }\n\n \n\n .mj-left-nav__switcher[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 11px 14px;\n border: none;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 14px;\n font-weight: 600;\n text-align: left;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n .mj-left-nav__switcher[_ngcontent-%COMP%]:active {\n background: var(--mj-bg-surface-active);\n }\n .mj-left-nav__switcher-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 14px;\n flex-shrink: 0;\n color: var(--mj-brand-primary);\n }\n .mj-left-nav__switcher-label[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .mj-left-nav__switcher-hint[_ngcontent-%COMP%] {\n flex-shrink: 0;\n font-size: 15px;\n color: var(--mj-text-muted);\n }\n\n \n\n .mj-left-nav__scrim[_ngcontent-%COMP%] {\n display: block;\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.24s ease;\n z-index: 9998;\n }\n .mj-left-nav-host--open[_nghost-%COMP%] .mj-left-nav__scrim[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n }\n\n \n\n .mj-left-nav[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n width: min(320px, 84vw) !important;\n height: 100%;\n max-height: none;\n border-right: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-lg);\n transform: translateX(-100%);\n transition: transform 0.24s ease;\n z-index: 9999;\n padding-top: 0;\n }\n .mj-left-nav-host--open[_nghost-%COMP%] .mj-left-nav[_ngcontent-%COMP%] {\n transform: translateX(0);\n }\n\n \n\n .mj-left-nav__drawer-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n position: sticky;\n top: 0;\n z-index: 1;\n padding: 14px 12px 10px;\n margin: 0 -8px 4px;\n padding-left: 16px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n .mj-left-nav__drawer-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n }\n .mj-left-nav__drawer-close[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 16px;\n font-family: inherit;\n }\n .mj-left-nav__drawer-close[_ngcontent-%COMP%]:active {\n background: var(--mj-bg-surface-active);\n }\n }\n\n @media (max-width: 700px) and (prefers-reduced-motion: reduce) {\n .mj-left-nav[_ngcontent-%COMP%], \n .mj-left-nav__scrim[_ngcontent-%COMP%] {\n transition: none;\n }\n }"] });
290
382
  }
291
383
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJLeftNavComponent, [{
292
384
  type: Component,
293
385
  args: [{ selector: 'mj-left-nav', standalone: true, imports: [CommonModule], template: `
294
- <aside class="mj-left-nav" [style.width.px]="Width" role="navigation">
386
+ <!-- Mobile-only section switcher (hidden ≥701px via CSS). Shows the active
387
+ section and opens the full rail as an off-canvas drawer on tap. The rail
388
+ itself is too rich (trees, header/footer slots, descriptions, badges) to
389
+ flatten into a dropdown or tab strip, so we surface it as-is in a drawer. -->
390
+ <button
391
+ type="button"
392
+ class="mj-left-nav__switcher"
393
+ [attr.aria-expanded]="MobileNavOpen"
394
+ aria-haspopup="dialog"
395
+ (click)="OpenMobileNav()">
396
+ @if (ActiveTriggerItem?.icon) {
397
+ <i class="mj-left-nav__switcher-icon" [class]="ActiveTriggerItem!.icon" aria-hidden="true"></i>
398
+ }
399
+ <span class="mj-left-nav__switcher-label">{{ ActiveTriggerItem?.label || MobileTitle }}</span>
400
+ <i class="fa-solid fa-bars-staggered mj-left-nav__switcher-hint" aria-hidden="true"></i>
401
+ </button>
402
+
403
+ <!-- Scrim behind the mobile drawer (hidden ≥701px / when closed via CSS). -->
404
+ <div class="mj-left-nav__scrim" (click)="CloseMobileNav()" aria-hidden="true"></div>
405
+
406
+ <aside
407
+ class="mj-left-nav"
408
+ [style.width.px]="Width"
409
+ role="navigation"
410
+ [attr.aria-modal]="MobileNavOpen ? true : null">
411
+ <!-- Drawer header — only visible on mobile when the rail is a drawer. -->
412
+ <div class="mj-left-nav__drawer-header">
413
+ <span class="mj-left-nav__drawer-title">{{ MobileTitle }}</span>
414
+ <button
415
+ type="button"
416
+ class="mj-left-nav__drawer-close"
417
+ aria-label="Close menu"
418
+ (click)="CloseMobileNav()">
419
+ <i class="fa-solid fa-xmark" aria-hidden="true"></i>
420
+ </button>
421
+ </div>
422
+
295
423
  <ng-content select="[header]"></ng-content>
296
424
 
297
425
  @for (section of Sections; track $index) {
@@ -381,19 +509,27 @@ export class MJLeftNavComponent {
381
509
  }
382
510
  </button>
383
511
  </ng-template>
384
- `, styles: ["\n :host {\n display: block;\n flex-shrink: 0;\n }\n\n .mj-left-nav {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n padding: 8px;\n box-sizing: border-box;\n }\n\n .mj-left-nav__section-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n padding: 12px 12px 6px;\n }\n\n .mj-left-nav__section-label:first-child {\n padding-top: 6px;\n }\n\n .mj-left-nav__item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n width: 100%;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.12s ease, color 0.12s ease;\n margin-bottom: 2px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n text-align: left;\n }\n\n .mj-left-nav__item:hover:not(.mj-left-nav__item--disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n }\n\n .mj-left-nav__item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n }\n\n .mj-left-nav__item--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .mj-left-nav__icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n }\n\n .mj-left-nav__text {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .mj-left-nav__label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n }\n\n .mj-left-nav__description {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n }\n\n .mj-left-nav__item--active .mj-left-nav__description {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n }\n\n .mj-left-nav__badge {\n margin-left: auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n align-self: center;\n }\n\n .mj-left-nav__item--active .mj-left-nav__badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n }\n\n /* \u2500\u2500 Tree rendering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Used when MJLeftNavItem.children is defined (even as an empty array).\n The row wraps a chevron/placeholder + the item button so they sit on\n one line, and depth-based padding-left is applied to the row (not the\n item) so the chevron aligns with the depth column. */\n\n .mj-left-nav__row {\n display: flex;\n align-items: stretch;\n gap: 2px;\n }\n\n .mj-left-nav__row .mj-left-nav__item {\n flex: 1;\n min-width: 0;\n }\n\n .mj-left-nav__chevron {\n flex-shrink: 0;\n width: 20px;\n height: 32px;\n align-self: center;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 10px;\n padding: 0;\n transition: background-color 0.12s ease, color 0.12s ease;\n font-family: inherit;\n }\n\n .mj-left-nav__chevron:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__chevron-placeholder {\n flex-shrink: 0;\n width: 20px;\n display: inline-block;\n }\n\n /* Responsive collapse: at narrow viewports the rail becomes a top bar of\n wrapping items. The consumer is still responsible for switching the\n parent's flex-direction from row \u2192 column (see <mj-page-body> Direction\n + the shell's @media override). */\n @media (max-width: 700px) {\n :host {\n width: 100% !important;\n }\n .mj-left-nav {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .mj-left-nav__item {\n flex: 1 1 calc(50% - 8px);\n margin-bottom: 0;\n }\n .mj-left-nav__description {\n display: none;\n }\n .mj-left-nav__section-label {\n flex-basis: 100%;\n }\n /* Tree rows take a full line even in the wrap layout \u2014 chevron + item\n should stay paired rather than flow as separate flex children. */\n .mj-left-nav__row {\n flex-basis: 100%;\n padding-left: 0 !important;\n }\n }\n "] }]
512
+ `, styles: ["\n :host {\n display: block;\n flex-shrink: 0;\n }\n\n .mj-left-nav {\n height: 100%;\n background: var(--mj-bg-surface);\n border-right: 1px solid var(--mj-border-default);\n overflow-y: auto;\n padding: 8px;\n box-sizing: border-box;\n }\n\n .mj-left-nav__section-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n padding: 12px 12px 6px;\n }\n\n .mj-left-nav__section-label:first-child {\n padding-top: 6px;\n }\n\n .mj-left-nav__item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n width: 100%;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.12s ease, color 0.12s ease;\n margin-bottom: 2px;\n font-family: inherit;\n color: var(--mj-text-secondary);\n text-align: left;\n }\n\n .mj-left-nav__item:hover:not(.mj-left-nav__item--disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n }\n\n .mj-left-nav__item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n }\n\n .mj-left-nav__item--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .mj-left-nav__icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n }\n\n .mj-left-nav__text {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n }\n\n .mj-left-nav__label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n }\n\n .mj-left-nav__description {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n }\n\n .mj-left-nav__item--active .mj-left-nav__description {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n }\n\n .mj-left-nav__badge {\n margin-left: auto;\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n align-self: center;\n }\n\n .mj-left-nav__item--active .mj-left-nav__badge {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, transparent);\n color: var(--mj-brand-primary);\n }\n\n /* \u2500\u2500 Tree rendering \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Used when MJLeftNavItem.children is defined (even as an empty array).\n The row wraps a chevron/placeholder + the item button so they sit on\n one line, and depth-based padding-left is applied to the row (not the\n item) so the chevron aligns with the depth column. */\n\n .mj-left-nav__row {\n display: flex;\n align-items: stretch;\n gap: 2px;\n }\n\n .mj-left-nav__row .mj-left-nav__item {\n flex: 1;\n min-width: 0;\n }\n\n .mj-left-nav__chevron {\n flex-shrink: 0;\n width: 20px;\n height: 32px;\n align-self: center;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n color: var(--mj-text-muted);\n font-size: 10px;\n padding: 0;\n transition: background-color 0.12s ease, color 0.12s ease;\n font-family: inherit;\n }\n\n .mj-left-nav__chevron:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__chevron-placeholder {\n flex-shrink: 0;\n width: 20px;\n display: inline-block;\n }\n\n /* \u2500\u2500 Mobile drawer pattern (\u2264700px) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Desktop shows the rail inline. On mobile the rail would otherwise eat the\n top of the screen, so we hide it off-canvas and surface a compact section\n switcher in its place. Tapping the switcher slides the full rail in from\n the left over a scrim \u2014 preserving trees, header/footer slots and badges\n (item descriptions hide in the drawer for a tighter list).\n\n The switcher / scrim / drawer-header are display:none above the\n breakpoint; the rail keeps its desktop layout there. */\n .mj-left-nav__switcher,\n .mj-left-nav__scrim,\n .mj-left-nav__drawer-header {\n display: none;\n }\n\n @media (max-width: 700px) {\n /* Host collapses to the switcher's footprint; the rail goes out of flow. */\n :host {\n width: 100% !important;\n }\n\n /* Hide item descriptions in the drawer \u2014 the label + icon are enough on a\n narrow sheet; the secondary line just adds clutter. */\n .mj-left-nav__description {\n display: none;\n }\n\n /* Section switcher \u2014 reads as a picker for the current section. */\n .mj-left-nav__switcher {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 11px 14px;\n border: none;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 14px;\n font-weight: 600;\n text-align: left;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n }\n .mj-left-nav__switcher:active {\n background: var(--mj-bg-surface-active);\n }\n .mj-left-nav__switcher-icon {\n width: 18px;\n text-align: center;\n font-size: 14px;\n flex-shrink: 0;\n color: var(--mj-brand-primary);\n }\n .mj-left-nav__switcher-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .mj-left-nav__switcher-hint {\n flex-shrink: 0;\n font-size: 15px;\n color: var(--mj-text-muted);\n }\n\n /* Scrim \u2014 fades in with the drawer. */\n .mj-left-nav__scrim {\n display: block;\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.24s ease;\n z-index: 9998;\n }\n :host(.mj-left-nav-host--open) .mj-left-nav__scrim {\n opacity: 1;\n pointer-events: auto;\n }\n\n /* Rail becomes a left off-canvas drawer. */\n .mj-left-nav {\n position: fixed;\n top: 0;\n left: 0;\n bottom: 0;\n width: min(320px, 84vw) !important;\n height: 100%;\n max-height: none;\n border-right: 1px solid var(--mj-border-default);\n box-shadow: var(--mj-shadow-lg);\n transform: translateX(-100%);\n transition: transform 0.24s ease;\n z-index: 9999;\n padding-top: 0;\n }\n :host(.mj-left-nav-host--open) .mj-left-nav {\n transform: translateX(0);\n }\n\n /* Drawer header \u2014 sticky title + close button. */\n .mj-left-nav__drawer-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n position: sticky;\n top: 0;\n z-index: 1;\n padding: 14px 12px 10px;\n margin: 0 -8px 4px;\n padding-left: 16px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-subtle);\n }\n .mj-left-nav__drawer-title {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted);\n }\n .mj-left-nav__drawer-close {\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n border-radius: 8px;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 16px;\n font-family: inherit;\n }\n .mj-left-nav__drawer-close:active {\n background: var(--mj-bg-surface-active);\n }\n }\n\n @media (max-width: 700px) and (prefers-reduced-motion: reduce) {\n .mj-left-nav,\n .mj-left-nav__scrim {\n transition: none;\n }\n }\n "] }]
385
513
  }], null, { Sections: [{
386
514
  type: Input
387
515
  }], ActiveId: [{
388
516
  type: Input
389
517
  }], Width: [{
390
518
  type: Input
519
+ }], MobileTitle: [{
520
+ type: Input
391
521
  }], ExpandedIds: [{
392
522
  type: Input
393
523
  }], ItemClicked: [{
394
524
  type: Output
395
525
  }], ItemToggled: [{
396
526
  type: Output
527
+ }], isMobileNavOpen: [{
528
+ type: HostBinding,
529
+ args: ['class.mj-left-nav-host--open']
530
+ }], onEscape: [{
531
+ type: HostListener,
532
+ args: ['document:keydown.escape']
397
533
  }] }); })();
398
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJLeftNavComponent, { className: "MJLeftNavComponent", filePath: "lib/left-nav/left-nav.component.ts", lineNumber: 383 }); })();
534
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJLeftNavComponent, { className: "MJLeftNavComponent", filePath: "lib/left-nav/left-nav.component.ts", lineNumber: 538 }); })();
399
535
  //# sourceMappingURL=left-nav.component.js.map