@memberjunction/ng-ui-components 6.1.0-edge.5 → 6.1.0-edge.7
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.
- package/dist/lib/alert/alert.component.d.ts.map +1 -1
- package/dist/lib/alert/alert.component.js +1 -1
- package/dist/lib/applied-filters/applied-filters.component.js +1 -1
- package/dist/lib/bottom-sheet/bottom-sheet.component.js +1 -1
- package/dist/lib/combobox/combobox.component.d.ts +32 -1
- package/dist/lib/combobox/combobox.component.d.ts.map +1 -1
- package/dist/lib/combobox/combobox.component.js +73 -28
- package/dist/lib/combobox/combobox.component.js.map +1 -1
- package/dist/lib/confirm-dialog/confirm-dialog.component.d.ts.map +1 -1
- package/dist/lib/datepicker/datepicker.component.d.ts +25 -1
- package/dist/lib/datepicker/datepicker.component.d.ts.map +1 -1
- package/dist/lib/datepicker/datepicker.component.js +59 -28
- package/dist/lib/datepicker/datepicker.component.js.map +1 -1
- package/dist/lib/dialog/dialog.component.js +1 -1
- package/dist/lib/dialog/dialog.component.js.map +1 -1
- package/dist/lib/dialog/dialog.service.d.ts.map +1 -1
- package/dist/lib/dialog/dialog.service.js +18 -19
- package/dist/lib/dialog/dialog.service.js.map +1 -1
- package/dist/lib/dropdown/dropdown.component.d.ts +36 -1
- package/dist/lib/dropdown/dropdown.component.d.ts.map +1 -1
- package/dist/lib/dropdown/dropdown.component.js +91 -40
- package/dist/lib/dropdown/dropdown.component.js.map +1 -1
- package/dist/lib/empty-state/empty-state.component.js +1 -1
- package/dist/lib/filter-popover/filter-popover.component.js +27 -28
- package/dist/lib/filter-popover/filter-popover.component.js.map +1 -1
- package/dist/lib/left-nav/left-nav-content.component.js +1 -1
- package/dist/lib/left-nav/left-nav.component.js +72 -73
- package/dist/lib/left-nav/left-nav.component.js.map +1 -1
- package/dist/lib/numeric-input/numeric-input.component.d.ts +22 -1
- package/dist/lib/numeric-input/numeric-input.component.d.ts.map +1 -1
- package/dist/lib/numeric-input/numeric-input.component.js +30 -3
- package/dist/lib/numeric-input/numeric-input.component.js.map +1 -1
- package/dist/lib/page-body/page-body.component.js +1 -1
- package/dist/lib/page-body-interior/page-body-interior.component.js +1 -1
- package/dist/lib/page-header/page-header.component.js +1 -1
- package/dist/lib/page-header-interior/page-header-interior.component.js +1 -1
- package/dist/lib/page-search/page-search.component.js +1 -1
- package/dist/lib/refresh-button/refresh-button.component.js +1 -1
- package/dist/lib/slide-panel/slide-panel.component.js +1 -1
- package/dist/lib/stat-badge/stat-badge.component.js +1 -1
- package/dist/lib/switch/switch.component.d.ts +22 -1
- package/dist/lib/switch/switch.component.d.ts.map +1 -1
- package/dist/lib/switch/switch.component.js +30 -3
- package/dist/lib/switch/switch.component.js.map +1 -1
- package/dist/lib/tab-nav/tab-nav.component.js +1 -1
- package/dist/lib/view-toggle/view-toggle.component.js +1 -1
- package/dist/lib/window/window.component.js +1 -1
- package/dist/lib/window/window.component.js.map +1 -1
- package/dist/lib/workspace-tabs/workspace-card.component.js +1 -1
- package/dist/lib/workspace-tabs/workspace-tab-strip.component.js +1 -1
- package/package.json +8 -8
|
@@ -10,15 +10,15 @@ function MJFilterPopoverComponent_Conditional_5_Template(rf, ctx) { if (rf & 1)
|
|
|
10
10
|
i0.ɵɵtext(1);
|
|
11
11
|
i0.ɵɵelementEnd();
|
|
12
12
|
} if (rf & 2) {
|
|
13
|
-
const
|
|
14
|
-
i0.ɵɵattribute("aria-label",
|
|
13
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
14
|
+
i0.ɵɵattribute("aria-label", ctx_r0.ActiveCount + " active filters");
|
|
15
15
|
i0.ɵɵadvance();
|
|
16
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
16
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.ActiveCount, " ");
|
|
17
17
|
} }
|
|
18
18
|
function MJFilterPopoverComponent_ng_template_7_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
-
const
|
|
19
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
20
20
|
i0.ɵɵelementStart(0, "button", 11);
|
|
21
|
-
i0.ɵɵlistener("click", function MJFilterPopoverComponent_ng_template_7_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(
|
|
21
|
+
i0.ɵɵlistener("click", function MJFilterPopoverComponent_ng_template_7_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.ClearAll()); });
|
|
22
22
|
i0.ɵɵtext(1, " Clear all ");
|
|
23
23
|
i0.ɵɵelementEnd();
|
|
24
24
|
} }
|
|
@@ -32,37 +32,37 @@ function MJFilterPopoverComponent_ng_template_7_Template(rf, ctx) { if (rf & 1)
|
|
|
32
32
|
i0.ɵɵprojection(5);
|
|
33
33
|
i0.ɵɵelementEnd();
|
|
34
34
|
} if (rf & 2) {
|
|
35
|
-
const
|
|
35
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
36
36
|
i0.ɵɵadvance(2);
|
|
37
|
-
i0.ɵɵtextInterpolate(
|
|
37
|
+
i0.ɵɵtextInterpolate(ctx_r0.Label);
|
|
38
38
|
i0.ɵɵadvance();
|
|
39
|
-
i0.ɵɵconditional(
|
|
39
|
+
i0.ɵɵconditional(ctx_r0.ActiveCount > 0 && ctx_r0.ShowClearAll ? 3 : -1);
|
|
40
40
|
} }
|
|
41
41
|
function MJFilterPopoverComponent_Conditional_9_Conditional_0_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
42
42
|
i0.ɵɵelementContainer(0);
|
|
43
43
|
} }
|
|
44
44
|
function MJFilterPopoverComponent_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
-
const
|
|
45
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
46
46
|
i0.ɵɵelementStart(0, "div", 12);
|
|
47
|
-
i0.ɵɵlistener("click", function MJFilterPopoverComponent_Conditional_9_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(
|
|
47
|
+
i0.ɵɵlistener("click", function MJFilterPopoverComponent_Conditional_9_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.Close()); });
|
|
48
48
|
i0.ɵɵelementEnd();
|
|
49
49
|
i0.ɵɵelementStart(1, "div", 13);
|
|
50
50
|
i0.ɵɵelement(2, "div", 14);
|
|
51
51
|
i0.ɵɵtemplate(3, MJFilterPopoverComponent_Conditional_9_Conditional_0_ng_container_3_Template, 1, 0, "ng-container", 15);
|
|
52
52
|
i0.ɵɵelementEnd();
|
|
53
53
|
} if (rf & 2) {
|
|
54
|
-
const
|
|
55
|
-
const
|
|
54
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
55
|
+
const panelBody_r4 = i0.ɵɵreference(8);
|
|
56
56
|
i0.ɵɵadvance();
|
|
57
|
-
i0.ɵɵattribute("aria-label",
|
|
57
|
+
i0.ɵɵattribute("aria-label", ctx_r0.Label);
|
|
58
58
|
i0.ɵɵadvance(2);
|
|
59
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
59
|
+
i0.ɵɵproperty("ngTemplateOutlet", panelBody_r4);
|
|
60
60
|
} }
|
|
61
61
|
function MJFilterPopoverComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
62
62
|
i0.ɵɵconditionalCreate(0, MJFilterPopoverComponent_Conditional_9_Conditional_0_Template, 4, 2);
|
|
63
63
|
} if (rf & 2) {
|
|
64
|
-
const
|
|
65
|
-
i0.ɵɵconditional(
|
|
64
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
65
|
+
i0.ɵɵconditional(ctx_r0.IsOpen ? 0 : -1);
|
|
66
66
|
} }
|
|
67
67
|
function MJFilterPopoverComponent_Conditional_10_ng_template_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
68
68
|
i0.ɵɵelementContainer(0);
|
|
@@ -72,20 +72,20 @@ function MJFilterPopoverComponent_Conditional_10_ng_template_0_Template(rf, ctx)
|
|
|
72
72
|
i0.ɵɵtemplate(1, MJFilterPopoverComponent_Conditional_10_ng_template_0_ng_container_1_Template, 1, 0, "ng-container", 15);
|
|
73
73
|
i0.ɵɵelementEnd();
|
|
74
74
|
} if (rf & 2) {
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
i0.ɵɵattribute("aria-label",
|
|
75
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
76
|
+
const panelBody_r4 = i0.ɵɵreference(8);
|
|
77
|
+
i0.ɵɵattribute("aria-label", ctx_r0.Label);
|
|
78
78
|
i0.ɵɵadvance();
|
|
79
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
79
|
+
i0.ɵɵproperty("ngTemplateOutlet", panelBody_r4);
|
|
80
80
|
} }
|
|
81
81
|
function MJFilterPopoverComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
-
const
|
|
82
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
83
83
|
i0.ɵɵtemplate(0, MJFilterPopoverComponent_Conditional_10_ng_template_0_Template, 2, 2, "ng-template", 16);
|
|
84
|
-
i0.ɵɵlistener("backdropClick", function MJFilterPopoverComponent_Conditional_10_Template_ng_template_backdropClick_0_listener() { i0.ɵɵrestoreView(
|
|
84
|
+
i0.ɵɵlistener("backdropClick", function MJFilterPopoverComponent_Conditional_10_Template_ng_template_backdropClick_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Close()); })("detach", function MJFilterPopoverComponent_Conditional_10_Template_ng_template_detach_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.Close()); });
|
|
85
85
|
} if (rf & 2) {
|
|
86
|
-
const
|
|
87
|
-
const
|
|
88
|
-
i0.ɵɵproperty("cdkConnectedOverlayOrigin",
|
|
86
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
87
|
+
const overlayOrigin_r6 = i0.ɵɵreference(1);
|
|
88
|
+
i0.ɵɵproperty("cdkConnectedOverlayOrigin", overlayOrigin_r6)("cdkConnectedOverlayOpen", ctx_r0.IsOpen)("cdkConnectedOverlayPositions", ctx_r0.Positions)("cdkConnectedOverlayHasBackdrop", true);
|
|
89
89
|
} }
|
|
90
90
|
/**
|
|
91
91
|
* mj-filter-popover — Compact "Filters" trigger button that opens a popover
|
|
@@ -162,10 +162,9 @@ export class MJFilterPopoverComponent {
|
|
|
162
162
|
}
|
|
163
163
|
static ɵfac = function MJFilterPopoverComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MJFilterPopoverComponent)(); };
|
|
164
164
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJFilterPopoverComponent, selectors: [["mj-filter-popover"]], inputs: { Label: "Label", Icon: "Icon", ActiveCount: "ActiveCount", ShowClearAll: "ShowClearAll" }, outputs: { ClearAllRequested: "ClearAllRequested" }, ngContentSelectors: _c0, decls: 11, vars: 11, consts: [["overlayOrigin", "cdkOverlayOrigin"], ["panelBody", ""], ["type", "button", "cdkOverlayOrigin", "", 1, "mj-filter-popover-trigger", 3, "click"], [1, "mj-filter-popover-label"], [1, "mj-filter-popover-badge"], [1, "fa-solid", "fa-chevron-down", "mj-filter-popover-chevron"], ["cdkConnectedOverlay", "", "cdkConnectedOverlayBackdropClass", "mj-filter-popover-backdrop", 3, "cdkConnectedOverlayOrigin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayPositions", "cdkConnectedOverlayHasBackdrop"], [1, "mj-filter-popover-header"], [1, "mj-filter-popover-title"], ["type", "button", 1, "mj-filter-popover-clear"], [1, "mj-filter-popover-content"], ["type", "button", 1, "mj-filter-popover-clear", 3, "click"], ["aria-hidden", "true", 1, "mj-filter-popover-scrim", 3, "click"], ["role", "dialog", 1, "mj-filter-popover-sheet"], ["aria-hidden", "true", 1, "mj-filter-popover-grab"], [4, "ngTemplateOutlet"], ["cdkConnectedOverlay", "", "cdkConnectedOverlayBackdropClass", "mj-filter-popover-backdrop", 3, "backdropClick", "detach", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayPositions", "cdkConnectedOverlayHasBackdrop"], ["role", "dialog", 1, "mj-filter-popover-panel"]], template: function MJFilterPopoverComponent_Template(rf, ctx) { if (rf & 1) {
|
|
165
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
166
165
|
i0.ɵɵprojectionDef();
|
|
167
166
|
i0.ɵɵelementStart(0, "button", 2, 0);
|
|
168
|
-
i0.ɵɵlistener("click", function MJFilterPopoverComponent_Template_button_click_0_listener() {
|
|
167
|
+
i0.ɵɵlistener("click", function MJFilterPopoverComponent_Template_button_click_0_listener() { return ctx.Toggle(); });
|
|
169
168
|
i0.ɵɵelement(2, "i");
|
|
170
169
|
i0.ɵɵelementStart(3, "span", 3);
|
|
171
170
|
i0.ɵɵtext(4);
|
|
@@ -188,7 +187,7 @@ export class MJFilterPopoverComponent {
|
|
|
188
187
|
i0.ɵɵclassProp("mj-filter-popover-chevron--open", ctx.IsOpen);
|
|
189
188
|
i0.ɵɵadvance(3);
|
|
190
189
|
i0.ɵɵconditional(ctx.IsMobile ? 9 : 10);
|
|
191
|
-
} }, dependencies: [CommonModule, i1.NgTemplateOutlet, OverlayModule, i2.CdkConnectedOverlay, i2.CdkOverlayOrigin], styles: ["[_nghost-%COMP%] {\n display: inline-flex;\n }\n\n \n\n\n
|
|
190
|
+
} }, dependencies: [CommonModule, i1.NgTemplateOutlet, OverlayModule, i2.CdkConnectedOverlay, i2.CdkOverlayOrigin], styles: ["[_nghost-%COMP%] {\n display: inline-flex;\n }\n\n \n\n\n .mj-filter-popover-trigger[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n min-height: 32px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 0.8125rem;\n font-weight: var(--mj-font-semibold);\n line-height: 1.5;\n cursor: pointer;\n transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;\n white-space: nowrap;\n }\n\n .mj-filter-popover-trigger[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-active);\n border-color: var(--mj-border-strong);\n }\n\n .mj-filter-popover-trigger--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n color: var(--mj-brand-primary);\n }\n\n .mj-filter-popover-trigger--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n }\n\n .mj-filter-popover-trigger[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]:first-child {\n font-size: var(--mj-text-xs);\n color: var(--mj-brand-primary);\n }\n\n .mj-filter-popover-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 var(--mj-space-1-5);\n border-radius: 10px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 11px;\n font-weight: 700;\n line-height: 1;\n }\n\n .mj-filter-popover-chevron[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.2s ease;\n color: var(--mj-text-muted);\n }\n\n .mj-filter-popover-chevron--open[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n\n .mj-filter-popover-panel[_ngcontent-%COMP%] {\n min-width: 320px;\n max-width: 480px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md);\n margin-top: var(--mj-space-1-5);\n overflow: hidden;\n }\n\n .mj-filter-popover-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--mj-space-3) var(--mj-space-4) 0;\n }\n\n .mj-filter-popover-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .mj-filter-popover-clear[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n cursor: pointer;\n padding: var(--mj-space-1) var(--mj-space-2);\n border-radius: var(--mj-radius-sm);\n }\n\n .mj-filter-popover-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .mj-filter-popover-content[_ngcontent-%COMP%] {\n padding: var(--mj-space-3) var(--mj-space-4) var(--mj-space-4);\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2-5);\n }\n\n \n\n\n\n .mj-filter-popover-scrim[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 9998;\n animation: _ngcontent-%COMP%_mj-fp-fade 0.2s ease;\n }\n .mj-filter-popover-sheet[_ngcontent-%COMP%] {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-top-left-radius: 16px;\n border-top-right-radius: 16px;\n box-shadow: var(--mj-shadow-lg);\n animation: _ngcontent-%COMP%_mj-fp-slide-up 0.24s ease;\n }\n .mj-filter-popover-grab[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 36px;\n height: 4px;\n border-radius: 2px;\n background: var(--mj-border-strong);\n margin: 10px auto 2px;\n }\n .mj-filter-popover-sheet[_ngcontent-%COMP%] .mj-filter-popover-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n }\n .mj-filter-popover-sheet[_ngcontent-%COMP%] .mj-filter-popover-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n padding-bottom: var(--mj-space-6);\n }\n @keyframes _ngcontent-%COMP%_mj-fp-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes _ngcontent-%COMP%_mj-fp-slide-up {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n @media (prefers-reduced-motion: reduce) {\n .mj-filter-popover-scrim[_ngcontent-%COMP%], \n .mj-filter-popover-sheet[_ngcontent-%COMP%] {\n animation: none;\n }\n }\n\n \n\n\n @media (max-width: 700px) {\n .mj-filter-popover-label[_ngcontent-%COMP%], \n .mj-filter-popover-chevron[_ngcontent-%COMP%] {\n display: none;\n }\n .mj-filter-popover-trigger[_ngcontent-%COMP%] {\n padding: 6px 10px;\n gap: 4px;\n }\n }"] });
|
|
192
191
|
}
|
|
193
192
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJFilterPopoverComponent, [{
|
|
194
193
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-popover.component.js","sourceRoot":"","sources":["../../../src/lib/filter-popover/filter-popover.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, NgZone, OnDestroy, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OverlayModule, ConnectedPosition } from '@angular/cdk/overlay';\n\n/**\n * mj-filter-popover — Compact \"Filters\" trigger button that opens a popover\n * containing arbitrary filter UI. Use this in a dashboard's page-header to\n * keep the header chrome consistent regardless of filter density.\n *\n * Pass the popover content via `<ng-content>`. Drive the active-count badge\n * via the `ActiveCount` input.\n *\n * Example:\n * ```html\n * <mj-filter-popover [ActiveCount]=\"activeFilters.length\">\n * <div class=\"my-filter-grid\">\n * <mj-dropdown ...></mj-dropdown>\n * <mj-dropdown ...></mj-dropdown>\n * </div>\n * </mj-filter-popover>\n * ```\n */\n@Component({\n selector: 'mj-filter-popover',\n standalone: true,\n imports: [CommonModule, OverlayModule],\n template: `\n <button\n type=\"button\"\n class=\"mj-filter-popover-trigger\"\n [class.mj-filter-popover-trigger--active]=\"IsOpen || ActiveCount > 0\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n [attr.aria-expanded]=\"IsOpen\"\n [attr.aria-haspopup]=\"true\"\n (click)=\"Toggle()\">\n <i [class]=\"Icon\"></i>\n <span class=\"mj-filter-popover-label\">{{ Label }}</span>\n @if (ActiveCount > 0) {\n <span class=\"mj-filter-popover-badge\" [attr.aria-label]=\"ActiveCount + ' active filters'\">\n {{ ActiveCount }}\n </span>\n }\n <i class=\"fa-solid fa-chevron-down mj-filter-popover-chevron\" [class.mj-filter-popover-chevron--open]=\"IsOpen\"></i>\n </button>\n\n <!-- The panel body (header + projected filter UI) is declared ONCE here and\n stamped into whichever wrapper is active (anchored overlay on desktop,\n docked sheet on mobile). A single <ng-content> avoids the duplicate-slot\n bug where projected content lands in only one of two branches. -->\n <ng-template #panelBody>\n <div class=\"mj-filter-popover-header\">\n <span class=\"mj-filter-popover-title\">{{ Label }}</span>\n @if (ActiveCount > 0 && ShowClearAll) {\n <button type=\"button\" class=\"mj-filter-popover-clear\" (click)=\"ClearAll()\">\n Clear all\n </button>\n }\n </div>\n <div class=\"mj-filter-popover-content\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n\n @if (IsMobile) {\n <!-- Mobile: the popover docks as a bottom sheet — mirrors how mj-left-nav\n becomes a drawer at this width. -->\n @if (IsOpen) {\n <div class=\"mj-filter-popover-scrim\" (click)=\"Close()\" aria-hidden=\"true\"></div>\n <div class=\"mj-filter-popover-sheet\" role=\"dialog\" [attr.aria-label]=\"Label\">\n <div class=\"mj-filter-popover-grab\" aria-hidden=\"true\"></div>\n <ng-container *ngTemplateOutlet=\"panelBody\"></ng-container>\n </div>\n }\n } @else {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"IsOpen\"\n [cdkConnectedOverlayPositions]=\"Positions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"mj-filter-popover-backdrop\"\n (backdropClick)=\"Close()\"\n (detach)=\"Close()\">\n <div class=\"mj-filter-popover-panel\" role=\"dialog\" [attr.aria-label]=\"Label\">\n <ng-container *ngTemplateOutlet=\"panelBody\"></ng-container>\n </div>\n </ng-template>\n }\n `,\n styles: [`\n :host {\n display: inline-flex;\n }\n\n /* Trigger button — visually aligned with mjButton size=\"sm\" variant=\"secondary\"\n (same height, padding, font-size, font-weight, background) so it sits\n cleanly next to Refresh/Export/+Add in chrome and filter-card rows. */\n .mj-filter-popover-trigger {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n min-height: 32px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 0.8125rem;\n font-weight: var(--mj-font-semibold);\n line-height: 1.5;\n cursor: pointer;\n transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;\n white-space: nowrap;\n }\n\n .mj-filter-popover-trigger:hover {\n background: var(--mj-bg-surface-active);\n border-color: var(--mj-border-strong);\n }\n\n .mj-filter-popover-trigger--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n color: var(--mj-brand-primary);\n }\n\n .mj-filter-popover-trigger--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n }\n\n .mj-filter-popover-trigger > i:first-child {\n font-size: var(--mj-text-xs);\n color: var(--mj-brand-primary);\n }\n\n .mj-filter-popover-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 var(--mj-space-1-5);\n border-radius: 10px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 11px;\n font-weight: 700;\n line-height: 1;\n }\n\n .mj-filter-popover-chevron {\n font-size: 10px;\n transition: transform 0.2s ease;\n color: var(--mj-text-muted);\n }\n\n .mj-filter-popover-chevron--open {\n transform: rotate(180deg);\n }\n\n .mj-filter-popover-panel {\n min-width: 320px;\n max-width: 480px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md);\n margin-top: var(--mj-space-1-5);\n overflow: hidden;\n }\n\n .mj-filter-popover-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--mj-space-3) var(--mj-space-4) 0;\n }\n\n .mj-filter-popover-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .mj-filter-popover-clear {\n background: transparent;\n border: none;\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n cursor: pointer;\n padding: var(--mj-space-1) var(--mj-space-2);\n border-radius: var(--mj-radius-sm);\n }\n\n .mj-filter-popover-clear:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .mj-filter-popover-content {\n padding: var(--mj-space-3) var(--mj-space-4) var(--mj-space-4);\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2-5);\n }\n\n /* ── Mobile bottom sheet (≤700px) ─────────────────────────────────────\n The trigger button stays inline; tapping it docks the panel body as a\n sheet at the bottom of the viewport over a scrim — same body, different\n wrapper. Mirrors the mj-left-nav drawer treatment. */\n .mj-filter-popover-scrim {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 9998;\n animation: mj-fp-fade 0.2s ease;\n }\n .mj-filter-popover-sheet {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-top-left-radius: 16px;\n border-top-right-radius: 16px;\n box-shadow: var(--mj-shadow-lg);\n animation: mj-fp-slide-up 0.24s ease;\n }\n .mj-filter-popover-grab {\n flex-shrink: 0;\n width: 36px;\n height: 4px;\n border-radius: 2px;\n background: var(--mj-border-strong);\n margin: 10px auto 2px;\n }\n .mj-filter-popover-sheet .mj-filter-popover-header {\n flex-shrink: 0;\n }\n .mj-filter-popover-sheet .mj-filter-popover-content {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n padding-bottom: var(--mj-space-6);\n }\n @keyframes mj-fp-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes mj-fp-slide-up {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n @media (prefers-reduced-motion: reduce) {\n .mj-filter-popover-scrim,\n .mj-filter-popover-sheet {\n animation: none;\n }\n }\n\n /* On mobile the trigger collapses to icon-only (the count badge still\n conveys active state) so the control bar — search · Filter · view —\n stays on one line. */\n @media (max-width: 700px) {\n .mj-filter-popover-label,\n .mj-filter-popover-chevron {\n display: none;\n }\n .mj-filter-popover-trigger {\n padding: 6px 10px;\n gap: 4px;\n }\n }\n `]\n})\nexport class MJFilterPopoverComponent implements OnDestroy {\n @Input() Label: string = 'Filters';\n @Input() Icon: string = 'fa-solid fa-filter';\n @Input() ActiveCount: number = 0;\n @Input() ShowClearAll: boolean = false;\n\n public IsOpen: boolean = false;\n\n /**\n * True when the viewport is narrow enough that the popover should dock as a\n * bottom sheet instead of an anchored overlay. Driven by matchMedia so it\n * tracks live resize without Angular change-detection plumbing.\n */\n public IsMobile: boolean = false;\n\n private readonly zone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n private readonly mediaQuery: MediaQueryList | null =\n typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia('(max-width: 700px)')\n : null;\n\n // matchMedia 'change' fires OUTSIDE Angular's zone, so the flip must be\n // re-entered into the zone — otherwise the IsMobile change lands mid-CD and\n // the @if(IsMobile) branch swap throws ExpressionChangedAfterItHasBeenChecked\n // when crossing the breakpoint. Also close across the switch so a sheet/overlay\n // opened in one mode doesn't linger in the other.\n private readonly onMediaChange = (e: MediaQueryListEvent): void => {\n this.zone.run(() => {\n this.IsMobile = e.matches;\n this.IsOpen = false;\n this.cdr.markForCheck();\n });\n };\n\n constructor() {\n if (this.mediaQuery) {\n this.IsMobile = this.mediaQuery.matches;\n this.mediaQuery.addEventListener('change', this.onMediaChange);\n }\n }\n\n ngOnDestroy(): void {\n this.mediaQuery?.removeEventListener('change', this.onMediaChange);\n }\n\n // Note: NO offsetY here — CDK applies offsetY as `transform: translateY(...)` on the\n // overlay pane, which creates a containing block for `position: fixed` descendants.\n // Tree dropdowns (and any other component using position: fixed) would then mis-position.\n // The 6px spacing below the trigger is applied via margin-top on .mj-filter-popover-panel.\n public readonly Positions: ConnectedPosition[] = [\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' }\n ];\n\n public Toggle(): void { this.IsOpen = !this.IsOpen; }\n public Open(): void { this.IsOpen = true; }\n public Close(): void { this.IsOpen = false; }\n\n /** Emitted when the user clicks the \"Clear all\" link inside the popover header. */\n @Output() public ClearAllRequested = new EventEmitter<void>();\n\n public ClearAll(): void {\n this.ClearAllRequested.emit();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"filter-popover.component.js","sourceRoot":"","sources":["../../../src/lib/filter-popover/filter-popover.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectorRef, Component, EventEmitter, Input, NgZone, OnDestroy, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { OverlayModule, ConnectedPosition } from '@angular/cdk/overlay';\n\n/**\n * mj-filter-popover — Compact \"Filters\" trigger button that opens a popover\n * containing arbitrary filter UI. Use this in a dashboard's page-header to\n * keep the header chrome consistent regardless of filter density.\n *\n * Pass the popover content via `<ng-content>`. Drive the active-count badge\n * via the `ActiveCount` input.\n *\n * Example:\n * ```html\n * <mj-filter-popover [ActiveCount]=\"activeFilters.length\">\n * <div class=\"my-filter-grid\">\n * <mj-dropdown ...></mj-dropdown>\n * <mj-dropdown ...></mj-dropdown>\n * </div>\n * </mj-filter-popover>\n * ```\n */\n@Component({\n selector: 'mj-filter-popover',\n standalone: true,\n imports: [CommonModule, OverlayModule],\n template: `\n <button\n type=\"button\"\n class=\"mj-filter-popover-trigger\"\n [class.mj-filter-popover-trigger--active]=\"IsOpen || ActiveCount > 0\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n [attr.aria-expanded]=\"IsOpen\"\n [attr.aria-haspopup]=\"true\"\n (click)=\"Toggle()\">\n <i [class]=\"Icon\"></i>\n <span class=\"mj-filter-popover-label\">{{ Label }}</span>\n @if (ActiveCount > 0) {\n <span class=\"mj-filter-popover-badge\" [attr.aria-label]=\"ActiveCount + ' active filters'\">\n {{ ActiveCount }}\n </span>\n }\n <i class=\"fa-solid fa-chevron-down mj-filter-popover-chevron\" [class.mj-filter-popover-chevron--open]=\"IsOpen\"></i>\n </button>\n\n <!-- The panel body (header + projected filter UI) is declared ONCE here and\n stamped into whichever wrapper is active (anchored overlay on desktop,\n docked sheet on mobile). A single <ng-content> avoids the duplicate-slot\n bug where projected content lands in only one of two branches. -->\n <ng-template #panelBody>\n <div class=\"mj-filter-popover-header\">\n <span class=\"mj-filter-popover-title\">{{ Label }}</span>\n @if (ActiveCount > 0 && ShowClearAll) {\n <button type=\"button\" class=\"mj-filter-popover-clear\" (click)=\"ClearAll()\">\n Clear all\n </button>\n }\n </div>\n <div class=\"mj-filter-popover-content\">\n <ng-content></ng-content>\n </div>\n </ng-template>\n\n @if (IsMobile) {\n <!-- Mobile: the popover docks as a bottom sheet — mirrors how mj-left-nav\n becomes a drawer at this width. -->\n @if (IsOpen) {\n <div class=\"mj-filter-popover-scrim\" (click)=\"Close()\" aria-hidden=\"true\"></div>\n <div class=\"mj-filter-popover-sheet\" role=\"dialog\" [attr.aria-label]=\"Label\">\n <div class=\"mj-filter-popover-grab\" aria-hidden=\"true\"></div>\n <ng-container *ngTemplateOutlet=\"panelBody\"></ng-container>\n </div>\n }\n } @else {\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"IsOpen\"\n [cdkConnectedOverlayPositions]=\"Positions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"mj-filter-popover-backdrop\"\n (backdropClick)=\"Close()\"\n (detach)=\"Close()\">\n <div class=\"mj-filter-popover-panel\" role=\"dialog\" [attr.aria-label]=\"Label\">\n <ng-container *ngTemplateOutlet=\"panelBody\"></ng-container>\n </div>\n </ng-template>\n }\n `,\n styles: [`\n :host {\n display: inline-flex;\n }\n\n /* Trigger button — visually aligned with mjButton size=\"sm\" variant=\"secondary\"\n (same height, padding, font-size, font-weight, background) so it sits\n cleanly next to Refresh/Export/+Add in chrome and filter-card rows. */\n .mj-filter-popover-trigger {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n min-height: 32px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n color: var(--mj-text-primary);\n font-family: inherit;\n font-size: 0.8125rem;\n font-weight: var(--mj-font-semibold);\n line-height: 1.5;\n cursor: pointer;\n transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;\n white-space: nowrap;\n }\n\n .mj-filter-popover-trigger:hover {\n background: var(--mj-bg-surface-active);\n border-color: var(--mj-border-strong);\n }\n\n .mj-filter-popover-trigger--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, var(--mj-border-default));\n color: var(--mj-brand-primary);\n }\n\n .mj-filter-popover-trigger--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, var(--mj-bg-surface));\n }\n\n .mj-filter-popover-trigger > i:first-child {\n font-size: var(--mj-text-xs);\n color: var(--mj-brand-primary);\n }\n\n .mj-filter-popover-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 var(--mj-space-1-5);\n border-radius: 10px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 11px;\n font-weight: 700;\n line-height: 1;\n }\n\n .mj-filter-popover-chevron {\n font-size: 10px;\n transition: transform 0.2s ease;\n color: var(--mj-text-muted);\n }\n\n .mj-filter-popover-chevron--open {\n transform: rotate(180deg);\n }\n\n .mj-filter-popover-panel {\n min-width: 320px;\n max-width: 480px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n box-shadow: var(--mj-shadow-md);\n margin-top: var(--mj-space-1-5);\n overflow: hidden;\n }\n\n .mj-filter-popover-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--mj-space-3) var(--mj-space-4) 0;\n }\n\n .mj-filter-popover-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n }\n\n .mj-filter-popover-clear {\n background: transparent;\n border: none;\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n cursor: pointer;\n padding: var(--mj-space-1) var(--mj-space-2);\n border-radius: var(--mj-radius-sm);\n }\n\n .mj-filter-popover-clear:hover {\n background: var(--mj-bg-surface-hover);\n }\n\n .mj-filter-popover-content {\n padding: var(--mj-space-3) var(--mj-space-4) var(--mj-space-4);\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2-5);\n }\n\n /* ── Mobile bottom sheet (≤700px) ─────────────────────────────────────\n The trigger button stays inline; tapping it docks the panel body as a\n sheet at the bottom of the viewport over a scrim — same body, different\n wrapper. Mirrors the mj-left-nav drawer treatment. */\n .mj-filter-popover-scrim {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 9998;\n animation: mj-fp-fade 0.2s ease;\n }\n .mj-filter-popover-sheet {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-top-left-radius: 16px;\n border-top-right-radius: 16px;\n box-shadow: var(--mj-shadow-lg);\n animation: mj-fp-slide-up 0.24s ease;\n }\n .mj-filter-popover-grab {\n flex-shrink: 0;\n width: 36px;\n height: 4px;\n border-radius: 2px;\n background: var(--mj-border-strong);\n margin: 10px auto 2px;\n }\n .mj-filter-popover-sheet .mj-filter-popover-header {\n flex-shrink: 0;\n }\n .mj-filter-popover-sheet .mj-filter-popover-content {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n padding-bottom: var(--mj-space-6);\n }\n @keyframes mj-fp-fade {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes mj-fp-slide-up {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n @media (prefers-reduced-motion: reduce) {\n .mj-filter-popover-scrim,\n .mj-filter-popover-sheet {\n animation: none;\n }\n }\n\n /* On mobile the trigger collapses to icon-only (the count badge still\n conveys active state) so the control bar — search · Filter · view —\n stays on one line. */\n @media (max-width: 700px) {\n .mj-filter-popover-label,\n .mj-filter-popover-chevron {\n display: none;\n }\n .mj-filter-popover-trigger {\n padding: 6px 10px;\n gap: 4px;\n }\n }\n `]\n})\nexport class MJFilterPopoverComponent implements OnDestroy {\n @Input() Label: string = 'Filters';\n @Input() Icon: string = 'fa-solid fa-filter';\n @Input() ActiveCount: number = 0;\n @Input() ShowClearAll: boolean = false;\n\n public IsOpen: boolean = false;\n\n /**\n * True when the viewport is narrow enough that the popover should dock as a\n * bottom sheet instead of an anchored overlay. Driven by matchMedia so it\n * tracks live resize without Angular change-detection plumbing.\n */\n public IsMobile: boolean = false;\n\n private readonly zone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n private readonly mediaQuery: MediaQueryList | null =\n typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia('(max-width: 700px)')\n : null;\n\n // matchMedia 'change' fires OUTSIDE Angular's zone, so the flip must be\n // re-entered into the zone — otherwise the IsMobile change lands mid-CD and\n // the @if(IsMobile) branch swap throws ExpressionChangedAfterItHasBeenChecked\n // when crossing the breakpoint. Also close across the switch so a sheet/overlay\n // opened in one mode doesn't linger in the other.\n private readonly onMediaChange = (e: MediaQueryListEvent): void => {\n this.zone.run(() => {\n this.IsMobile = e.matches;\n this.IsOpen = false;\n this.cdr.markForCheck();\n });\n };\n\n constructor() {\n if (this.mediaQuery) {\n this.IsMobile = this.mediaQuery.matches;\n this.mediaQuery.addEventListener('change', this.onMediaChange);\n }\n }\n\n ngOnDestroy(): void {\n this.mediaQuery?.removeEventListener('change', this.onMediaChange);\n }\n\n // Note: NO offsetY here — CDK applies offsetY as `transform: translateY(...)` on the\n // overlay pane, which creates a containing block for `position: fixed` descendants.\n // Tree dropdowns (and any other component using position: fixed) would then mis-position.\n // The 6px spacing below the trigger is applied via margin-top on .mj-filter-popover-panel.\n public readonly Positions: ConnectedPosition[] = [\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' }\n ];\n\n public Toggle(): void { this.IsOpen = !this.IsOpen; }\n public Open(): void { this.IsOpen = true; }\n public Close(): void { this.IsOpen = false; }\n\n /** Emitted when the user clicks the \"Clear all\" link inside the popover header. */\n @Output() public ClearAllRequested = new EventEmitter<void>();\n\n public ClearAll(): void {\n this.ClearAllRequested.emit();\n }\n}\n"]}
|
|
@@ -86,7 +86,7 @@ export class MJLeftNavContentComponent {
|
|
|
86
86
|
i0.ɵɵprojection(2);
|
|
87
87
|
} if (rf & 2) {
|
|
88
88
|
i0.ɵɵconditional(ctx.Error ? 0 : ctx.Loading ? 1 : -1);
|
|
89
|
-
} }, dependencies: [CommonModule], styles: ["[_nghost-%COMP%] {\n flex: 1;\n min-width: 0;\n \n\n\n\n\n
|
|
89
|
+
} }, dependencies: [CommonModule], styles: ["[_nghost-%COMP%] {\n flex: 1;\n min-width: 0;\n \n\n\n\n\n min-height: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n }\n\n \n\n\n\n\n\n\n\n\n\n\n [_nghost-%COMP%] > *:not(.mj-left-nav-content__error):not(.mj-left-nav-content__loading):not(mj-page-header-interior):not(mj-page-body-interior) {\n flex: 1 1 auto;\n min-height: 0;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n \n\n .mj-left-nav-content--busy[_nghost-%COMP%] > *:not(.mj-left-nav-content__error):not(.mj-left-nav-content__loading) {\n display: none;\n }\n\n .mj-left-nav-content__error[_ngcontent-%COMP%], \n .mj-left-nav-content__loading[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n }\n\n .mj-left-nav-content__error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n }\n\n .mj-left-nav-content__error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .mj-left-nav-content__loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-brand-primary);\n }"] });
|
|
90
90
|
}
|
|
91
91
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJLeftNavContentComponent, [{
|
|
92
92
|
type: Component,
|
|
@@ -11,32 +11,32 @@ const _forTrack0 = ($index, $item) => $item.id;
|
|
|
11
11
|
function MJLeftNavComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
12
12
|
i0.ɵɵelement(0, "i", 12);
|
|
13
13
|
} if (rf & 2) {
|
|
14
|
-
const
|
|
15
|
-
i0.ɵɵclassMap(
|
|
14
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
15
|
+
i0.ɵɵclassMap(ctx_r0.ActiveTriggerItem.icon);
|
|
16
16
|
} }
|
|
17
17
|
function MJLeftNavComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
-
const
|
|
18
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
19
19
|
i0.ɵɵelementStart(0, "button", 13);
|
|
20
|
-
i0.ɵɵlistener("click", function MJLeftNavComponent_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(
|
|
20
|
+
i0.ɵɵlistener("click", function MJLeftNavComponent_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.ToggleCollapsed()); });
|
|
21
21
|
i0.ɵɵelement(1, "i", 14);
|
|
22
22
|
i0.ɵɵelementEnd();
|
|
23
23
|
i0.ɵɵelement(2, "div", 15);
|
|
24
24
|
} if (rf & 2) {
|
|
25
|
-
const
|
|
26
|
-
i0.ɵɵstyleProp("margin-left",
|
|
27
|
-
i0.ɵɵproperty("title",
|
|
28
|
-
i0.ɵɵattribute("aria-label",
|
|
25
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
26
|
+
i0.ɵɵstyleProp("margin-left", ctx_r0.CollapseToggleMarginPx, "px");
|
|
27
|
+
i0.ɵɵproperty("title", ctx_r0.Collapsed ? "Expand navigation" : "Collapse navigation");
|
|
28
|
+
i0.ɵɵattribute("aria-label", ctx_r0.Collapsed ? "Expand navigation" : "Collapse navigation")("aria-expanded", !ctx_r0.Collapsed)("aria-controls", ctx_r0.NavRegionId);
|
|
29
29
|
i0.ɵɵadvance();
|
|
30
|
-
i0.ɵɵclassProp("fa-angles-right",
|
|
30
|
+
i0.ɵɵclassProp("fa-angles-right", ctx_r0.Collapsed)("fa-angles-left", !ctx_r0.Collapsed);
|
|
31
31
|
} }
|
|
32
32
|
function MJLeftNavComponent_For_15_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
33
33
|
i0.ɵɵelementStart(0, "div", 16);
|
|
34
34
|
i0.ɵɵtext(1);
|
|
35
35
|
i0.ɵɵelementEnd();
|
|
36
36
|
} if (rf & 2) {
|
|
37
|
-
const
|
|
37
|
+
const section_r3 = i0.ɵɵnextContext().$implicit;
|
|
38
38
|
i0.ɵɵadvance();
|
|
39
|
-
i0.ɵɵtextInterpolate(
|
|
39
|
+
i0.ɵɵtextInterpolate(section_r3.label);
|
|
40
40
|
} }
|
|
41
41
|
function MJLeftNavComponent_For_15_For_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
42
42
|
i0.ɵɵelementContainer(0);
|
|
@@ -44,33 +44,33 @@ function MJLeftNavComponent_For_15_For_2_ng_container_0_Template(rf, ctx) { if (
|
|
|
44
44
|
function MJLeftNavComponent_For_15_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
45
45
|
i0.ɵɵtemplate(0, MJLeftNavComponent_For_15_For_2_ng_container_0_Template, 1, 0, "ng-container", 17);
|
|
46
46
|
} if (rf & 2) {
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
const
|
|
51
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
47
|
+
const item_r4 = ctx.$implicit;
|
|
48
|
+
const section_r3 = i0.ɵɵnextContext().$implicit;
|
|
49
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
50
|
+
const itemTpl_r5 = i0.ɵɵreference(18);
|
|
51
|
+
i0.ɵɵproperty("ngTemplateOutlet", itemTpl_r5)("ngTemplateOutletContext", i0.ɵɵpureFunction2(2, _c2, item_r4, ctx_r0.ShowTreeStructure && ctx_r0.HasExpandableItems(section_r3.items)));
|
|
52
52
|
} }
|
|
53
53
|
function MJLeftNavComponent_For_15_Template(rf, ctx) { if (rf & 1) {
|
|
54
54
|
i0.ɵɵconditionalCreate(0, MJLeftNavComponent_For_15_Conditional_0_Template, 2, 1, "div", 16);
|
|
55
55
|
i0.ɵɵrepeaterCreate(1, MJLeftNavComponent_For_15_For_2_Template, 1, 5, "ng-container", null, _forTrack0);
|
|
56
56
|
} if (rf & 2) {
|
|
57
|
-
const
|
|
58
|
-
i0.ɵɵconditional(
|
|
57
|
+
const section_r3 = ctx.$implicit;
|
|
58
|
+
i0.ɵɵconditional(section_r3.label ? 0 : -1);
|
|
59
59
|
i0.ɵɵadvance();
|
|
60
|
-
i0.ɵɵrepeater(
|
|
60
|
+
i0.ɵɵrepeater(section_r3.items);
|
|
61
61
|
} }
|
|
62
62
|
function MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
63
|
-
const
|
|
63
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
64
64
|
i0.ɵɵelementStart(0, "button", 21);
|
|
65
|
-
i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_1_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(
|
|
65
|
+
i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_1_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const item_r7 = i0.ɵɵnextContext(2).item; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnItemToggle($event, item_r7)); });
|
|
66
66
|
i0.ɵɵelement(1, "i", 22);
|
|
67
67
|
i0.ɵɵelementEnd();
|
|
68
68
|
} if (rf & 2) {
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
i0.ɵɵattribute("aria-label",
|
|
69
|
+
const item_r7 = i0.ɵɵnextContext(2).item;
|
|
70
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
71
|
+
i0.ɵɵattribute("aria-label", ctx_r0.IsExpanded(item_r7.id) ? "Collapse" : "Expand")("aria-expanded", ctx_r0.IsExpanded(item_r7.id));
|
|
72
72
|
i0.ɵɵadvance();
|
|
73
|
-
i0.ɵɵclassProp("fa-chevron-down",
|
|
73
|
+
i0.ɵɵclassProp("fa-chevron-down", ctx_r0.IsExpanded(item_r7.id))("fa-chevron-right", !ctx_r0.IsExpanded(item_r7.id));
|
|
74
74
|
} }
|
|
75
75
|
function MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
76
76
|
i0.ɵɵelement(0, "span", 20);
|
|
@@ -84,19 +84,19 @@ function MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_4_For_1_ng_
|
|
|
84
84
|
function MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_4_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
85
85
|
i0.ɵɵtemplate(0, MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_4_For_1_ng_container_0_Template, 1, 0, "ng-container", 17);
|
|
86
86
|
} if (rf & 2) {
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
const
|
|
90
|
-
const
|
|
87
|
+
const child_r8 = ctx.$implicit;
|
|
88
|
+
const ctx_r8 = i0.ɵɵnextContext(3);
|
|
89
|
+
const depth_r10 = ctx_r8.depth;
|
|
90
|
+
const hasExpandable_r11 = ctx_r8.hasExpandable;
|
|
91
91
|
i0.ɵɵnextContext();
|
|
92
|
-
const
|
|
93
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
92
|
+
const itemTpl_r5 = i0.ɵɵreference(18);
|
|
93
|
+
i0.ɵɵproperty("ngTemplateOutlet", itemTpl_r5)("ngTemplateOutletContext", i0.ɵɵpureFunction3(2, _c4, child_r8, depth_r10 + 1, hasExpandable_r11));
|
|
94
94
|
} }
|
|
95
95
|
function MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
96
96
|
i0.ɵɵrepeaterCreate(0, MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_4_For_1_Template, 1, 6, "ng-container", null, _forTrack0);
|
|
97
97
|
} if (rf & 2) {
|
|
98
|
-
const
|
|
99
|
-
i0.ɵɵrepeater(
|
|
98
|
+
const item_r7 = i0.ɵɵnextContext(2).item;
|
|
99
|
+
i0.ɵɵrepeater(item_r7.children);
|
|
100
100
|
} }
|
|
101
101
|
function MJLeftNavComponent_ng_template_17_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
102
102
|
i0.ɵɵelementStart(0, "div", 18);
|
|
@@ -105,18 +105,18 @@ function MJLeftNavComponent_ng_template_17_Conditional_0_Template(rf, ctx) { if
|
|
|
105
105
|
i0.ɵɵelementEnd();
|
|
106
106
|
i0.ɵɵconditionalCreate(4, MJLeftNavComponent_ng_template_17_Conditional_0_Conditional_4_Template, 2, 0);
|
|
107
107
|
} if (rf & 2) {
|
|
108
|
-
const
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
const
|
|
113
|
-
i0.ɵɵstyleProp("padding-left",
|
|
108
|
+
const ctx_r8 = i0.ɵɵnextContext();
|
|
109
|
+
const item_r7 = ctx_r8.item;
|
|
110
|
+
const depth_r10 = ctx_r8.depth;
|
|
111
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
112
|
+
const itemBtn_r12 = i0.ɵɵreference(20);
|
|
113
|
+
i0.ɵɵstyleProp("padding-left", depth_r10 * 14, "px");
|
|
114
114
|
i0.ɵɵadvance();
|
|
115
|
-
i0.ɵɵconditional(
|
|
115
|
+
i0.ɵɵconditional(item_r7.children.length > 0 ? 1 : 2);
|
|
116
116
|
i0.ɵɵadvance(2);
|
|
117
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
117
|
+
i0.ɵɵproperty("ngTemplateOutlet", itemBtn_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(6, _c3, item_r7));
|
|
118
118
|
i0.ɵɵadvance();
|
|
119
|
-
i0.ɵɵconditional(
|
|
119
|
+
i0.ɵɵconditional(item_r7.children.length > 0 && ctx_r0.IsExpanded(item_r7.id) ? 4 : -1);
|
|
120
120
|
} }
|
|
121
121
|
function MJLeftNavComponent_ng_template_17_Conditional_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
122
122
|
i0.ɵɵelementContainer(0);
|
|
@@ -124,56 +124,56 @@ function MJLeftNavComponent_ng_template_17_Conditional_1_ng_container_0_Template
|
|
|
124
124
|
function MJLeftNavComponent_ng_template_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
125
125
|
i0.ɵɵtemplate(0, MJLeftNavComponent_ng_template_17_Conditional_1_ng_container_0_Template, 1, 0, "ng-container", 17);
|
|
126
126
|
} if (rf & 2) {
|
|
127
|
-
const
|
|
127
|
+
const item_r7 = i0.ɵɵnextContext().item;
|
|
128
128
|
i0.ɵɵnextContext();
|
|
129
|
-
const
|
|
130
|
-
i0.ɵɵproperty("ngTemplateOutlet",
|
|
129
|
+
const itemBtn_r12 = i0.ɵɵreference(20);
|
|
130
|
+
i0.ɵɵproperty("ngTemplateOutlet", itemBtn_r12)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c3, item_r7));
|
|
131
131
|
} }
|
|
132
132
|
function MJLeftNavComponent_ng_template_17_Template(rf, ctx) { if (rf & 1) {
|
|
133
133
|
i0.ɵɵconditionalCreate(0, MJLeftNavComponent_ng_template_17_Conditional_0_Template, 5, 8)(1, MJLeftNavComponent_ng_template_17_Conditional_1_Template, 1, 4, "ng-container");
|
|
134
134
|
} if (rf & 2) {
|
|
135
|
-
const
|
|
136
|
-
const
|
|
137
|
-
i0.ɵɵconditional(
|
|
135
|
+
const item_r7 = ctx.item;
|
|
136
|
+
const hasExpandable_r11 = ctx.hasExpandable;
|
|
137
|
+
i0.ɵɵconditional(item_r7.children !== undefined && hasExpandable_r11 ? 0 : 1);
|
|
138
138
|
} }
|
|
139
139
|
function MJLeftNavComponent_ng_template_19_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
140
140
|
i0.ɵɵelement(0, "i", 30);
|
|
141
141
|
} if (rf & 2) {
|
|
142
|
-
const
|
|
143
|
-
i0.ɵɵclassMap(
|
|
142
|
+
const item_r14 = i0.ɵɵnextContext().item;
|
|
143
|
+
i0.ɵɵclassMap(item_r14.icon);
|
|
144
144
|
} }
|
|
145
145
|
function MJLeftNavComponent_ng_template_19_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
146
146
|
i0.ɵɵelementStart(0, "span", 25);
|
|
147
147
|
i0.ɵɵtext(1);
|
|
148
148
|
i0.ɵɵelementEnd();
|
|
149
149
|
} if (rf & 2) {
|
|
150
|
-
const
|
|
151
|
-
const
|
|
150
|
+
const item_r14 = i0.ɵɵnextContext().item;
|
|
151
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
152
152
|
i0.ɵɵadvance();
|
|
153
|
-
i0.ɵɵtextInterpolate(
|
|
153
|
+
i0.ɵɵtextInterpolate(ctx_r0.ItemInitial(item_r14));
|
|
154
154
|
} }
|
|
155
155
|
function MJLeftNavComponent_ng_template_19_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
156
156
|
i0.ɵɵelementStart(0, "span", 28);
|
|
157
157
|
i0.ɵɵtext(1);
|
|
158
158
|
i0.ɵɵelementEnd();
|
|
159
159
|
} if (rf & 2) {
|
|
160
|
-
const
|
|
160
|
+
const item_r14 = i0.ɵɵnextContext().item;
|
|
161
161
|
i0.ɵɵadvance();
|
|
162
|
-
i0.ɵɵtextInterpolate(
|
|
162
|
+
i0.ɵɵtextInterpolate(item_r14.description);
|
|
163
163
|
} }
|
|
164
164
|
function MJLeftNavComponent_ng_template_19_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
165
165
|
i0.ɵɵelementStart(0, "span", 29);
|
|
166
166
|
i0.ɵɵtext(1);
|
|
167
167
|
i0.ɵɵelementEnd();
|
|
168
168
|
} if (rf & 2) {
|
|
169
|
-
const
|
|
169
|
+
const item_r14 = i0.ɵɵnextContext().item;
|
|
170
170
|
i0.ɵɵadvance();
|
|
171
|
-
i0.ɵɵtextInterpolate(
|
|
171
|
+
i0.ɵɵtextInterpolate(item_r14.badge);
|
|
172
172
|
} }
|
|
173
173
|
function MJLeftNavComponent_ng_template_19_Template(rf, ctx) { if (rf & 1) {
|
|
174
|
-
const
|
|
174
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
175
175
|
i0.ɵɵelementStart(0, "button", 23);
|
|
176
|
-
i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_19_Template_button_click_0_listener() { const
|
|
176
|
+
i0.ɵɵlistener("click", function MJLeftNavComponent_ng_template_19_Template_button_click_0_listener() { const item_r14 = i0.ɵɵrestoreView(_r13).item; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnItemClick(item_r14)); });
|
|
177
177
|
i0.ɵɵconditionalCreate(1, MJLeftNavComponent_ng_template_19_Conditional_1_Template, 1, 2, "i", 24)(2, MJLeftNavComponent_ng_template_19_Conditional_2_Template, 2, 1, "span", 25);
|
|
178
178
|
i0.ɵɵelementStart(3, "span", 26)(4, "span", 27);
|
|
179
179
|
i0.ɵɵtext(5);
|
|
@@ -183,19 +183,19 @@ function MJLeftNavComponent_ng_template_19_Template(rf, ctx) { if (rf & 1) {
|
|
|
183
183
|
i0.ɵɵconditionalCreate(7, MJLeftNavComponent_ng_template_19_Conditional_7_Template, 2, 1, "span", 29);
|
|
184
184
|
i0.ɵɵelementEnd();
|
|
185
185
|
} if (rf & 2) {
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
i0.ɵɵclassProp("mj-left-nav__item--active",
|
|
189
|
-
i0.ɵɵproperty("disabled",
|
|
190
|
-
i0.ɵɵattribute("aria-current",
|
|
186
|
+
const item_r14 = ctx.item;
|
|
187
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
188
|
+
i0.ɵɵclassProp("mj-left-nav__item--active", ctx_r0.IsItemActive(item_r14))("mj-left-nav__item--disabled", item_r14.disabled);
|
|
189
|
+
i0.ɵɵproperty("disabled", item_r14.disabled);
|
|
190
|
+
i0.ɵɵattribute("aria-current", ctx_r0.AriaCurrentFor(item_r14))("title", ctx_r0.EffectiveIconOnly ? ctx_r0.ItemTooltip(item_r14) : null)("aria-label", ctx_r0.EffectiveIconOnly ? ctx_r0.ItemTooltip(item_r14) : null);
|
|
191
191
|
i0.ɵɵadvance();
|
|
192
|
-
i0.ɵɵconditional(
|
|
192
|
+
i0.ɵɵconditional(item_r14.icon ? 1 : ctx_r0.EffectiveIconOnly ? 2 : -1);
|
|
193
193
|
i0.ɵɵadvance(4);
|
|
194
|
-
i0.ɵɵtextInterpolate(
|
|
194
|
+
i0.ɵɵtextInterpolate(item_r14.label);
|
|
195
195
|
i0.ɵɵadvance();
|
|
196
|
-
i0.ɵɵconditional(
|
|
196
|
+
i0.ɵɵconditional(item_r14.description ? 6 : -1);
|
|
197
197
|
i0.ɵɵadvance();
|
|
198
|
-
i0.ɵɵconditional(
|
|
198
|
+
i0.ɵɵconditional(item_r14.badge != null ? 7 : -1);
|
|
199
199
|
} }
|
|
200
200
|
/** Source of per-instance DOM ids — see {@link MJLeftNavComponent.NavRegionId}. */
|
|
201
201
|
let navRegionSeq = 0;
|
|
@@ -558,10 +558,9 @@ export class MJLeftNavComponent {
|
|
|
558
558
|
} if (rf & 2) {
|
|
559
559
|
i0.ɵɵclassProp("mj-left-nav-host--collapsed", ctx.isCollapsedHost)("mj-left-nav-host--open", ctx.isMobileNavOpen);
|
|
560
560
|
} }, inputs: { Sections: "Sections", ActiveId: "ActiveId", Width: "Width", IconOnly: "IconOnly", Collapsible: "Collapsible", Collapsed: "Collapsed", CollapsedWidth: "CollapsedWidth", MobileTitle: "MobileTitle", ExpandedIds: "ExpandedIds" }, outputs: { CollapsedChange: "CollapsedChange", ItemClicked: "ItemClicked", ItemToggled: "ItemToggled" }, ngContentSelectors: _c1, decls: 21, vars: 9, 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", 3, "id"], [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"], ["type", "button", 1, "mj-left-nav__collapse-toggle", 3, "click", "title"], ["aria-hidden", "true", 1, "fa-solid", "mj-left-nav__collapse-icon"], ["aria-hidden", "true", 1, "mj-left-nav__collapse-divider"], [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"], ["aria-hidden", "true", 1, "mj-left-nav__initial"], [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) {
|
|
561
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
562
561
|
i0.ɵɵprojectionDef(_c0);
|
|
563
562
|
i0.ɵɵelementStart(0, "button", 2);
|
|
564
|
-
i0.ɵɵlistener("click", function MJLeftNavComponent_Template_button_click_0_listener() {
|
|
563
|
+
i0.ɵɵlistener("click", function MJLeftNavComponent_Template_button_click_0_listener() { return ctx.OpenMobileNav(); });
|
|
565
564
|
i0.ɵɵconditionalCreate(1, MJLeftNavComponent_Conditional_1_Template, 1, 2, "i", 3);
|
|
566
565
|
i0.ɵɵelementStart(2, "span", 4);
|
|
567
566
|
i0.ɵɵtext(3);
|
|
@@ -569,7 +568,7 @@ export class MJLeftNavComponent {
|
|
|
569
568
|
i0.ɵɵelement(4, "i", 5);
|
|
570
569
|
i0.ɵɵelementEnd();
|
|
571
570
|
i0.ɵɵelementStart(5, "div", 6);
|
|
572
|
-
i0.ɵɵlistener("click", function MJLeftNavComponent_Template_div_click_5_listener() {
|
|
571
|
+
i0.ɵɵlistener("click", function MJLeftNavComponent_Template_div_click_5_listener() { return ctx.CloseMobileNav(); });
|
|
573
572
|
i0.ɵɵelementEnd();
|
|
574
573
|
i0.ɵɵelementStart(6, "aside", 7);
|
|
575
574
|
i0.ɵɵconditionalCreate(7, MJLeftNavComponent_Conditional_7_Template, 3, 10);
|
|
@@ -577,7 +576,7 @@ export class MJLeftNavComponent {
|
|
|
577
576
|
i0.ɵɵtext(10);
|
|
578
577
|
i0.ɵɵelementEnd();
|
|
579
578
|
i0.ɵɵelementStart(11, "button", 10);
|
|
580
|
-
i0.ɵɵlistener("click", function MJLeftNavComponent_Template_button_click_11_listener() {
|
|
579
|
+
i0.ɵɵlistener("click", function MJLeftNavComponent_Template_button_click_11_listener() { return ctx.CloseMobileNav(); });
|
|
581
580
|
i0.ɵɵelement(12, "i", 11);
|
|
582
581
|
i0.ɵɵelementEnd()();
|
|
583
582
|
i0.ɵɵprojection(13);
|
|
@@ -601,7 +600,7 @@ export class MJLeftNavComponent {
|
|
|
601
600
|
i0.ɵɵtextInterpolate(ctx.MobileTitle);
|
|
602
601
|
i0.ɵɵadvance(4);
|
|
603
602
|
i0.ɵɵrepeater(ctx.Sections);
|
|
604
|
-
} }, 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 \n\n\n\n .mj-left-nav__initial[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 12px;\n font-weight: 600;\n line-height: 1.2;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n text-transform: uppercase;\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 .mj-left-nav__collapse-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n padding: 8px 10px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n cursor: pointer;\n box-sizing: border-box;\n transition: background-color 0.12s ease, color 0.12s ease;\n margin-bottom: 2px;\n }\n\n .mj-left-nav__collapse-toggle[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__collapse-toggle[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: -2px;\n }\n\n \n\n\n\n .mj-left-nav__collapse-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 12px;\n flex-shrink: 0;\n }\n\n .mj-left-nav__collapse-divider[_ngcontent-%COMP%] {\n height: 1px;\n margin: 4px 0;\n background: var(--mj-border-default);\n }\n\n @media (max-width: 700px) {\n .mj-left-nav__collapse-toggle[_ngcontent-%COMP%], \n .mj-left-nav__collapse-divider[_ngcontent-%COMP%] {\n display: none;\n }\n }\n\n @media (min-width: 701px) {\n \n\n\n\n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__text[_ngcontent-%COMP%] {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n\n \n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__item[_ngcontent-%COMP%] {\n justify-content: center;\n gap: 0;\n margin-inline: auto;\n position: relative;\n }\n\n \n\n\n\n\n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__section-label[_ngcontent-%COMP%] {\n position: relative;\n color: transparent;\n overflow: hidden;\n }\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__section-label[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 20px;\n height: 1px;\n background: var(--mj-border-default);\n }\n\n \n\n\n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__badge[_ngcontent-%COMP%] {\n margin-left: 0;\n align-self: auto;\n position: absolute;\n left: calc(50% + 4px);\n top: 4px;\n min-width: 15px;\n height: 15px;\n padding: 0 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n line-height: 1;\n white-space: nowrap;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n \n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav[_ngcontent-%COMP%] {\n overflow-x: hidden;\n }\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 }"] });
|
|
603
|
+
} }, 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 \n\n\n .mj-left-nav__initial[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 12px;\n font-weight: 600;\n line-height: 1.2;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n text-transform: uppercase;\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 .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 .mj-left-nav__collapse-toggle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: fit-content;\n padding: 8px 10px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: var(--mj-text-muted);\n font-family: inherit;\n cursor: pointer;\n box-sizing: border-box;\n transition: background-color 0.12s ease, color 0.12s ease;\n margin-bottom: 2px;\n }\n\n .mj-left-nav__collapse-toggle[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n }\n\n .mj-left-nav__collapse-toggle[_ngcontent-%COMP%]:focus-visible {\n outline: 2px solid var(--mj-border-focus);\n outline-offset: -2px;\n }\n\n \n\n\n .mj-left-nav__collapse-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 12px;\n flex-shrink: 0;\n }\n\n .mj-left-nav__collapse-divider[_ngcontent-%COMP%] {\n height: 1px;\n margin: 4px 0;\n background: var(--mj-border-default);\n }\n\n @media (max-width: 700px) {\n .mj-left-nav__collapse-toggle[_ngcontent-%COMP%], \n .mj-left-nav__collapse-divider[_ngcontent-%COMP%] {\n display: none;\n }\n }\n\n @media (min-width: 701px) {\n \n\n\n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__text[_ngcontent-%COMP%] {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n }\n\n \n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__item[_ngcontent-%COMP%] {\n justify-content: center;\n gap: 0;\n margin-inline: auto;\n position: relative;\n }\n\n \n\n\n\n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__section-label[_ngcontent-%COMP%] {\n position: relative;\n color: transparent;\n overflow: hidden;\n }\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__section-label[_ngcontent-%COMP%]::after {\n content: '';\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 20px;\n height: 1px;\n background: var(--mj-border-default);\n }\n\n \n\n\n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav__badge[_ngcontent-%COMP%] {\n margin-left: 0;\n align-self: auto;\n position: absolute;\n left: calc(50% + 4px);\n top: 4px;\n min-width: 15px;\n height: 15px;\n padding: 0 4px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 9px;\n line-height: 1;\n white-space: nowrap;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n }\n\n \n .mj-left-nav-host--collapsed[_nghost-%COMP%] .mj-left-nav[_ngcontent-%COMP%] {\n overflow-x: hidden;\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 [_nghost-%COMP%] {\n width: 100% !important;\n }\n\n \n\n .mj-left-nav__description[_ngcontent-%COMP%] {\n display: none;\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 .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 .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 .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 }"] });
|
|
605
604
|
}
|
|
606
605
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJLeftNavComponent, [{
|
|
607
606
|
type: Component,
|