@theseam/ui-common 0.3.11 → 0.3.12-beta.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.
- package/breadcrumbs/_breadcrumbs-theme.scss +3 -3
- package/breadcrumbs/breadcrumbs/breadcrumbs.component.scss +10 -10
- package/bundles/theseam-ui-common-framework.umd.js +899 -47
- package/bundles/theseam-ui-common-framework.umd.js.map +1 -1
- package/bundles/theseam-ui-common-layout.umd.js +14 -5
- package/bundles/theseam-ui-common-layout.umd.js.map +1 -1
- package/bundles/theseam-ui-common-menu.umd.js +4 -0
- package/bundles/theseam-ui-common-menu.umd.js.map +1 -1
- package/esm2015/framework/base-layout/base-layout.component.js +12 -4
- package/esm2015/framework/base-layout/base-layout.module.js +4 -1
- package/esm2015/framework/base-layout/directives/base-layout-nav-toggle.directive.js +17 -3
- package/esm2015/framework/base-layout/directives/base-layout-side-bar-header.directive.js +15 -0
- package/esm2015/framework/nav/horizontal-nav/horizontal-nav.component.js +68 -0
- package/esm2015/framework/nav/index.js +6 -0
- package/esm2015/framework/nav/nav-item/nav-item.component.js +169 -0
- package/esm2015/framework/nav/nav-utils.js +105 -0
- package/esm2015/framework/nav/nav.models.js +2 -0
- package/esm2015/framework/nav/nav.module.js +42 -0
- package/esm2015/framework/nav/nav.service.js +175 -0
- package/esm2015/framework/public-api.js +2 -1
- package/esm2015/framework/side-nav/side-nav-item/side-nav-item.component.js +11 -5
- package/esm2015/framework/side-nav/side-nav-toggle/side-nav-toggle.component.js +5 -5
- package/esm2015/framework/side-nav/side-nav.component.js +67 -18
- package/esm2015/framework/side-nav/side-nav.service.js +1 -1
- package/esm2015/framework/theseam-ui-common-framework.js +13 -9
- package/esm2015/framework/top-bar/top-bar-compact-menu-btn-detail.directive.js +15 -0
- package/esm2015/framework/top-bar/top-bar-item.directive.js +9 -2
- package/esm2015/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.js +4 -3
- package/esm2015/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.js +15 -0
- package/esm2015/framework/top-bar/top-bar.component.js +44 -7
- package/esm2015/framework/top-bar/top-bar.module.js +9 -3
- package/esm2015/layout/layout.service.js +12 -2
- package/esm2015/menu/menu-toggle.directive.js +6 -2
- package/fesm2015/theseam-ui-common-framework.js +730 -41
- package/fesm2015/theseam-ui-common-framework.js.map +1 -1
- package/fesm2015/theseam-ui-common-layout.js +11 -2
- package/fesm2015/theseam-ui-common-layout.js.map +1 -1
- package/fesm2015/theseam-ui-common-menu.js +5 -1
- package/fesm2015/theseam-ui-common-menu.js.map +1 -1
- package/framework/base-layout/base-layout.component.d.ts +3 -1
- package/framework/base-layout/base-layout.component.scss +18 -10
- package/framework/base-layout/directives/base-layout-nav-toggle.directive.d.ts +7 -2
- package/framework/base-layout/directives/base-layout-side-bar-header.directive.d.ts +6 -0
- package/framework/base-layout/styles/_variables.scss +21 -0
- package/framework/nav/horizontal-nav/horizontal-nav.component.d.ts +31 -0
- package/framework/nav/index.d.ts +5 -0
- package/framework/nav/nav-item/nav-item.component.d.ts +67 -0
- package/framework/nav/nav-utils.d.ts +19 -0
- package/framework/nav/nav.models.d.ts +76 -0
- package/framework/nav/nav.module.d.ts +2 -0
- package/framework/nav/nav.service.d.ts +21 -0
- package/framework/public-api.d.ts +1 -0
- package/framework/side-nav/side-nav-item/side-nav-item.component.d.ts +2 -0
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +7 -5
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +4 -2
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +3 -6
- package/framework/side-nav/side-nav.component.d.ts +13 -1
- package/framework/side-nav/side-nav.component.scss +0 -1
- package/framework/side-nav/styles/_themes/light/_variables.scss +24 -14
- package/framework/side-nav/styles/_themes/primary/_variables.scss +8 -0
- package/framework/theseam-ui-common-framework.d.ts +12 -8
- package/framework/theseam-ui-common-framework.metadata.json +1 -1
- package/framework/top-bar/_top-bar-theme.scss +5 -5
- package/framework/top-bar/top-bar-compact-menu-btn-detail.directive.d.ts +5 -0
- package/framework/top-bar/top-bar-item.directive.d.ts +3 -0
- package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +4 -1
- package/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.d.ts +5 -0
- package/framework/top-bar/top-bar.component.d.ts +25 -3
- package/framework/top-bar/top-bar.component.scss +7 -2
- package/layout/layout.service.d.ts +9 -1
- package/layout/theseam-ui-common-layout.metadata.json +1 -1
- package/menu/menu-toggle.directive.d.ts +2 -1
- package/menu/theseam-ui-common-menu.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, ElementRef, InjectionToken, Optional, Inject, HostBinding, Input, HostListener, forwardRef, isDevMode, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewContainerRef, ContentChild, TemplateRef, NgModule, ViewChild, Injectable, EventEmitter,
|
|
2
|
+
import { Directive, ElementRef, InjectionToken, ChangeDetectorRef, Optional, Inject, HostBinding, Input, HostListener, forwardRef, isDevMode, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewContainerRef, ContentChild, TemplateRef, NgModule, ViewChild, Injectable, EventEmitter, ViewChildren, Output, ComponentFactoryResolver, SkipSelf, Host, Self, ContentChildren } from '@angular/core';
|
|
3
|
+
import { tap, startWith, switchMap, map, shareReplay, mapTo, take, auditTime, debounceTime, takeUntil, distinctUntilChanged, finalize, filter } from 'rxjs/operators';
|
|
3
4
|
import { TemplatePortal, PortalModule, ComponentPortal, BasePortalOutlet } from '@angular/cdk/portal';
|
|
4
5
|
import { BehaviorSubject, isObservable, from, Subject, of, combineLatest, defer, Observable } from 'rxjs';
|
|
5
|
-
import { faAngleDoubleRight, faAngleDoubleLeft, faLock, faUnlock,
|
|
6
|
+
import { faAngleDoubleRight, faAngleDoubleLeft, faLock, faUnlock, faBars, faAngleLeft, faAngleDown } from '@fortawesome/free-solid-svg-icons';
|
|
6
7
|
import { TheSeamLayoutService, TheSeamLayoutModule } from '@theseam/ui-common/layout';
|
|
7
8
|
import { CommonModule } from '@angular/common';
|
|
8
9
|
import { TheSeamButtonsModule } from '@theseam/ui-common/buttons';
|
|
9
10
|
import { TheSeamIconModule } from '@theseam/ui-common/icon';
|
|
10
11
|
import { TheSeamScrollbarModule } from '@theseam/ui-common/scrollbar';
|
|
11
|
-
import { startWith, switchMap, map, shareReplay, tap, mapTo, take, auditTime, debounceTime, takeUntil, distinctUntilChanged, finalize, filter } from 'rxjs/operators';
|
|
12
12
|
import { __decorate } from 'tslib';
|
|
13
13
|
import { coerceNumberProperty, coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
14
14
|
import { moveItemInArray, transferArrayItem, CdkDrag, DragDropModule } from '@angular/cdk/drag-drop';
|
|
@@ -16,7 +16,7 @@ import { InputBoolean, InputNumber, mixinDisabled } from '@theseam/ui-common/cor
|
|
|
16
16
|
import { THESEAM_WIDGET_ACCESSOR } from '@theseam/ui-common/widget';
|
|
17
17
|
import * as i1 from '@theseam/ui-common/dynamic-component-loader';
|
|
18
18
|
import { TheSeamDynamicComponentLoader } from '@theseam/ui-common/dynamic-component-loader';
|
|
19
|
-
import { hasProperty, notNullOrUndefined, observeControlValue, observeControlStatus } from '@theseam/ui-common/utils';
|
|
19
|
+
import { hasProperty, notNullOrUndefined, observeControlValue, observeControlStatus, isNullOrUndefined } from '@theseam/ui-common/utils';
|
|
20
20
|
import { TheSeamSharedModule } from '@theseam/ui-common/shared';
|
|
21
21
|
import { trigger, transition, group, query, animateChild, state, style, animate, keyframes } from '@angular/animations';
|
|
22
22
|
import { NavigationEnd, Router, RouterModule, NavigationStart, ActivatedRoute } from '@angular/router';
|
|
@@ -78,10 +78,13 @@ const THESEAM_BASE_LAYOUT_REF = new InjectionToken('seamBaseLayoutRef');
|
|
|
78
78
|
* Can be used to toggle the expand state of the registered nav.
|
|
79
79
|
*/
|
|
80
80
|
class BaseLayoutNavToggleDirective {
|
|
81
|
-
constructor(_baseLayout) {
|
|
81
|
+
constructor(_cdr, _baseLayout) {
|
|
82
|
+
this._cdr = _cdr;
|
|
82
83
|
this.type = 'button';
|
|
83
84
|
/** Screenreader label for the button. */
|
|
84
85
|
this.ariaLabel = 'Navigation toggle';
|
|
86
|
+
this._toggleClass = true;
|
|
87
|
+
this._expandedClass = false;
|
|
85
88
|
this.baseLayout = _baseLayout;
|
|
86
89
|
}
|
|
87
90
|
get _attrType() { return this.type; }
|
|
@@ -91,6 +94,13 @@ class BaseLayoutNavToggleDirective {
|
|
|
91
94
|
this.baseLayout.registeredNav.toggle();
|
|
92
95
|
}
|
|
93
96
|
}
|
|
97
|
+
ngOnInit() {
|
|
98
|
+
var _a, _b;
|
|
99
|
+
(_b = (_a = this.baseLayout) === null || _a === void 0 ? void 0 : _a.registeredNav) === null || _b === void 0 ? void 0 : _b.expanded$.pipe(tap(exp => {
|
|
100
|
+
this._expandedClass = exp;
|
|
101
|
+
this._cdr.markForCheck();
|
|
102
|
+
})).subscribe();
|
|
103
|
+
}
|
|
94
104
|
}
|
|
95
105
|
BaseLayoutNavToggleDirective.decorators = [
|
|
96
106
|
{ type: Directive, args: [{
|
|
@@ -99,6 +109,7 @@ BaseLayoutNavToggleDirective.decorators = [
|
|
|
99
109
|
},] }
|
|
100
110
|
];
|
|
101
111
|
BaseLayoutNavToggleDirective.ctorParameters = () => [
|
|
112
|
+
{ type: ChangeDetectorRef },
|
|
102
113
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [THESEAM_BASE_LAYOUT_REF,] }] }
|
|
103
114
|
];
|
|
104
115
|
BaseLayoutNavToggleDirective.propDecorators = {
|
|
@@ -106,6 +117,8 @@ BaseLayoutNavToggleDirective.propDecorators = {
|
|
|
106
117
|
type: [{ type: Input }],
|
|
107
118
|
_attrAriaLabel: [{ type: HostBinding, args: ['attr.aria-label',] }],
|
|
108
119
|
ariaLabel: [{ type: Input, args: ['aria-label',] }],
|
|
120
|
+
_toggleClass: [{ type: HostBinding, args: ['class.base-layout-nav-toggle',] }],
|
|
121
|
+
_expandedClass: [{ type: HostBinding, args: ['class.base-layout-nav-toggle--expanded',] }],
|
|
109
122
|
_onClick: [{ type: HostListener, args: ['click',] }]
|
|
110
123
|
};
|
|
111
124
|
|
|
@@ -150,6 +163,7 @@ class TheSeamBaseLayoutComponent {
|
|
|
150
163
|
this.faAngleDoubleRight = faAngleDoubleRight;
|
|
151
164
|
this.faAngleDoubleLeft = faAngleDoubleLeft;
|
|
152
165
|
this.overlayNav = false;
|
|
166
|
+
this.showSidebar = true;
|
|
153
167
|
this._hasSideBar = new BehaviorSubject(false);
|
|
154
168
|
this._registeredNav = new BehaviorSubject(undefined);
|
|
155
169
|
this.registeredNav$ = this._registeredNav.asObservable();
|
|
@@ -161,12 +175,17 @@ class TheSeamBaseLayoutComponent {
|
|
|
161
175
|
get registeredNav() { return this._registeredNav.value; }
|
|
162
176
|
get registeredActions() { return this._registeredActions.value; }
|
|
163
177
|
ngOnInit() {
|
|
178
|
+
if (this.mobileBreakpoint) {
|
|
179
|
+
this._layout.setMobileBreakpoint(this.mobileBreakpoint);
|
|
180
|
+
}
|
|
164
181
|
if (this._topBarTpl) {
|
|
165
182
|
this._topBarPortal = new TemplatePortal(this._topBarTpl, this._viewContainerRef);
|
|
166
183
|
}
|
|
167
184
|
if (this._sideBarTpl) {
|
|
168
185
|
this._sideBarPortal = new TemplatePortal(this._sideBarTpl, this._viewContainerRef);
|
|
169
|
-
this.
|
|
186
|
+
if (this.showSidebar) {
|
|
187
|
+
this._hasSideBar.next(true);
|
|
188
|
+
}
|
|
170
189
|
}
|
|
171
190
|
if (this._contentTpl) {
|
|
172
191
|
this._contentPortal = new TemplatePortal(this._contentTpl, this._viewContainerRef);
|
|
@@ -223,11 +242,11 @@ class TheSeamBaseLayoutComponent {
|
|
|
223
242
|
TheSeamBaseLayoutComponent.decorators = [
|
|
224
243
|
{ type: Component, args: [{
|
|
225
244
|
selector: 'seam-base-layout',
|
|
226
|
-
template: "<div class=\"base-layout-side-bar-nav-content-mobile\" *ngIf=\"isMobile$ | async\">\n <ng-template [cdkPortalOutlet]=\"_sideBarPortal\"></ng-template>\n</div>\n\n<div class=\"base-layout-top-bar-container\">\n <ng-template [cdkPortalOutlet]=\"_topBarPortal\"></ng-template>\n</div>\n<div class=\"base-layout-main-container\">\n <div *ngIf=\"hasSideBar$ | async\"\n class=\"base-layout-side-bar-container\">\n <div class=\"base-layout-side-bar-nav-content\" *ngIf=\"!(isMobile$ | async)\">\n <ng-template [cdkPortalOutlet]=\"_sideBarPortal\"></ng-template>\n </div>\n </div>\n <div class=\"base-layout-content-container\">\n <div class=\"base-layout-content-container-header
|
|
245
|
+
template: "<div class=\"base-layout-side-bar-nav-content-mobile\" *ngIf=\"isMobile$ | async\">\n <ng-template [cdkPortalOutlet]=\"_sideBarPortal\"></ng-template>\n</div>\n\n<div class=\"base-layout-top-bar-container\">\n <ng-template [cdkPortalOutlet]=\"_topBarPortal\"></ng-template>\n</div>\n<div class=\"base-layout-main-container\">\n <div *ngIf=\"hasSideBar$ | async\"\n class=\"base-layout-side-bar-container\">\n <div class=\"base-layout-side-bar-nav-content\" *ngIf=\"!(isMobile$ | async)\">\n <ng-template [cdkPortalOutlet]=\"_sideBarPortal\"></ng-template>\n </div>\n </div>\n <div class=\"base-layout-content-container\">\n <div class=\"base-layout-content-container-header d-flex flex-row\">\n <div class=\"base-layout-content-container-header-left flex-grow-1\">\n <ng-template [cdkPortalOutlet]=\"_contentHeaderPortal\"></ng-template>\n </div>\n <div class=\"base-layout-content-container-header-right d-flex\">\n <ng-container *ngFor=\"let action of registeredActions$ | async; first as isFirst\">\n <div class=\"base-layout-registered-action\">\n <ng-container [ngTemplateOutlet]=\"$any(action)?.template\"></ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"base-layout-content-container-inner\" seamOverlayScrollbar>\n <ng-template [cdkPortalOutlet]=\"_contentPortal\"></ng-template>\n </div>\n <div class=\"base-layout-content-container-footer\">\n <ng-template [cdkPortalOutlet]=\"_contentFooterPortal\"></ng-template>\n </div>\n </div>\n</div>\n",
|
|
227
246
|
providers: [THE_SEAM_BASE_LAYOUT],
|
|
228
247
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
229
248
|
encapsulation: ViewEncapsulation.None,
|
|
230
|
-
styles: ["seam-base-layout{display:flex;flex-direction:column;height:100%;width:100%}seam-base-layout .base-layout-side-bar-nav-content-mobile{position:absolute;top:0;bottom:0;left:0;
|
|
249
|
+
styles: ["seam-base-layout{display:flex;flex-direction:column;height:100%;width:100%}seam-base-layout .base-layout-side-bar-nav-content-mobile{position:absolute;top:0;bottom:0;left:0;z-index:999}seam-base-layout .base-layout-side-bar-container{flex:0 0 auto;display:flex;flex-direction:column;border-top:none;border-right:1px solid #dee2e6;border-bottom:none;border-left:none}seam-base-layout .base-layout-side-bar-container .base-layout-side-bar-nav-content{flex:1 1 0}seam-base-layout .base-layout-main-container{flex:1 1 100%;display:flex;flex-direction:row;transform:translateZ(0)}seam-base-layout .base-layout-top-bar-container{flex:0 0 auto;border-top:none;border-right:none;border-bottom:1px solid #dee2e6;border-left:none}seam-base-layout .base-layout-content-container{flex:1 1 auto;display:flex;flex-direction:column}seam-base-layout .base-layout-content-container .base-layout-content-container-header{flex:0 0 auto;background:none;margin:.25rem;padding:0;border-radius:0;overflow:hidden}seam-base-layout .base-layout-content-container .base-layout-content-container-header-left{background:none;padding:0;margin:0;border-radius:0}seam-base-layout .base-layout-content-container .base-layout-content-container-header-right{background:none;padding:0;margin:0;border-radius:0}seam-base-layout .base-layout-content-container .base-layout-content-container-inner{flex:1 1 auto}seam-base-layout .base-layout-content-container .base-layout-content-container-footer{flex:0 0 auto}seam-base-layout .btn-baselayout-action{margin:0 0 0 .25rem;color:#212529;background-color:#e9ecef;border-color:#e9ecef;padding:.5rem 1rem;font-size:1rem;line-height:1.5;border-radius:.25rem;border:none;color:#6c757d}seam-base-layout .btn-baselayout-action:hover{color:#212529;background-color:#d3d9df;border-color:#cbd3da}seam-base-layout .btn-baselayout-action:focus,seam-base-layout .btn-baselayout-action.focus{color:#212529;background-color:#d3d9df;border-color:#cbd3da;box-shadow:0 0 0 .2rem #cbced180}seam-base-layout .btn-baselayout-action.disabled,seam-base-layout .btn-baselayout-action:disabled{color:#212529;background-color:#e9ecef;border-color:#e9ecef}seam-base-layout .btn-baselayout-action:not(:disabled):not(.disabled):active,seam-base-layout .btn-baselayout-action:not(:disabled):not(.disabled).active,.show>seam-base-layout .btn-baselayout-action.dropdown-toggle{color:#212529;background-color:#d3d9df;border-color:#c4ccd4}seam-base-layout .btn-baselayout-action:not(:disabled):not(.disabled):active:focus,seam-base-layout .btn-baselayout-action:not(:disabled):not(.disabled).active:focus,.show>seam-base-layout .btn-baselayout-action.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #cbced180}seam-base-layout .btn-baselayout-action:hover{color:#6c757d}seam-base-layout .btn-baselayout-action:focus,seam-base-layout .btn-baselayout-action.focus{color:#6c757d}\n"]
|
|
231
250
|
},] }
|
|
232
251
|
];
|
|
233
252
|
TheSeamBaseLayoutComponent.ctorParameters = () => [
|
|
@@ -236,6 +255,8 @@ TheSeamBaseLayoutComponent.ctorParameters = () => [
|
|
|
236
255
|
];
|
|
237
256
|
TheSeamBaseLayoutComponent.propDecorators = {
|
|
238
257
|
overlayNav: [{ type: Input }],
|
|
258
|
+
mobileBreakpoint: [{ type: Input }],
|
|
259
|
+
showSidebar: [{ type: Input }],
|
|
239
260
|
_topBarTpl: [{ type: ContentChild, args: [BaseLayoutTopBarDirective, { static: true, read: TemplateRef },] }],
|
|
240
261
|
_sideBarTpl: [{ type: ContentChild, args: [BaseLayoutSideBarDirective, { static: true, read: TemplateRef },] }],
|
|
241
262
|
_contentTpl: [{ type: ContentChild, args: [BaseLayoutContentDirective, { static: true, read: TemplateRef },] }],
|
|
@@ -257,6 +278,20 @@ BaseLayoutSideBarFooterDirective.ctorParameters = () => [
|
|
|
257
278
|
{ type: ElementRef }
|
|
258
279
|
];
|
|
259
280
|
|
|
281
|
+
class BaseLayoutSideBarHeaderDirective {
|
|
282
|
+
constructor(_elementRef) {
|
|
283
|
+
this._elementRef = _elementRef;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
BaseLayoutSideBarHeaderDirective.decorators = [
|
|
287
|
+
{ type: Directive, args: [{
|
|
288
|
+
selector: '[seamBaseLayoutSideBarHeader]'
|
|
289
|
+
},] }
|
|
290
|
+
];
|
|
291
|
+
BaseLayoutSideBarHeaderDirective.ctorParameters = () => [
|
|
292
|
+
{ type: ElementRef }
|
|
293
|
+
];
|
|
294
|
+
|
|
260
295
|
class TheSeamBaseLayoutModule {
|
|
261
296
|
}
|
|
262
297
|
TheSeamBaseLayoutModule.decorators = [
|
|
@@ -266,6 +301,7 @@ TheSeamBaseLayoutModule.decorators = [
|
|
|
266
301
|
BaseLayoutContentDirective,
|
|
267
302
|
BaseLayoutSideBarDirective,
|
|
268
303
|
BaseLayoutSideBarFooterDirective,
|
|
304
|
+
BaseLayoutSideBarHeaderDirective,
|
|
269
305
|
BaseLayoutTopBarDirective,
|
|
270
306
|
BaseLayoutNavToggleDirective,
|
|
271
307
|
BaseLayoutContentHeaderDirective,
|
|
@@ -283,6 +319,7 @@ TheSeamBaseLayoutModule.decorators = [
|
|
|
283
319
|
BaseLayoutContentDirective,
|
|
284
320
|
BaseLayoutSideBarDirective,
|
|
285
321
|
BaseLayoutSideBarFooterDirective,
|
|
322
|
+
BaseLayoutSideBarHeaderDirective,
|
|
286
323
|
BaseLayoutTopBarDirective,
|
|
287
324
|
BaseLayoutNavToggleDirective,
|
|
288
325
|
BaseLayoutContentHeaderDirective,
|
|
@@ -1268,14 +1305,20 @@ class SideNavComponent {
|
|
|
1268
1305
|
this._sideNav = _sideNav;
|
|
1269
1306
|
this._baseLayoutRef = _baseLayoutRef;
|
|
1270
1307
|
this._ngUnsubscribe = new Subject();
|
|
1308
|
+
this.faBars = faBars;
|
|
1271
1309
|
// @HostBinding('@sideNavExpand') _sideNavExpand = EXPANDED_STATE
|
|
1272
1310
|
// _sideNavExpand = EXPANDED_STATE
|
|
1273
1311
|
// @HostBinding('@sideNavAnim') _sideNavExpand = EXPANDED_STATE
|
|
1274
1312
|
this._sideNavExpand = 'initial';
|
|
1275
1313
|
this.hasHeaderToggle = true;
|
|
1314
|
+
this.toggleIcon = faBars;
|
|
1276
1315
|
this._items = new BehaviorSubject([]);
|
|
1316
|
+
this.indentSize = 10;
|
|
1277
1317
|
this._expanded = new BehaviorSubject(true);
|
|
1278
1318
|
this.expanded$ = this._expanded.asObservable();
|
|
1319
|
+
this.expandOrigin = 'left';
|
|
1320
|
+
this.expandHeight = '100%';
|
|
1321
|
+
this.expandWidth = 'calc(100vw - 50px)';
|
|
1279
1322
|
this._overlay = new BehaviorSubject(false);
|
|
1280
1323
|
this.overlay$ = this._overlay.asObservable();
|
|
1281
1324
|
this.toggleExpand = new EventEmitter();
|
|
@@ -1291,7 +1334,7 @@ class SideNavComponent {
|
|
|
1291
1334
|
get expanded() { return this._expanded.value; }
|
|
1292
1335
|
set expanded(value) {
|
|
1293
1336
|
const expanded = coerceBooleanProperty(value);
|
|
1294
|
-
|
|
1337
|
+
const emit = expanded !== this.expanded;
|
|
1295
1338
|
this._expanded.next(expanded);
|
|
1296
1339
|
if (emit) {
|
|
1297
1340
|
this.toggleExpand.emit(coerceBooleanProperty(value));
|
|
@@ -1309,6 +1352,9 @@ class SideNavComponent {
|
|
|
1309
1352
|
this.sideNavExpandedState$
|
|
1310
1353
|
.pipe(takeUntil(this._ngUnsubscribe))
|
|
1311
1354
|
.subscribe(v => this._sideNavExpand = v);
|
|
1355
|
+
if (this._sideBarHeaderTpl) {
|
|
1356
|
+
this._sideBarHeaderPortal = new TemplatePortal(this._sideBarHeaderTpl, this._viewContainerRef);
|
|
1357
|
+
}
|
|
1312
1358
|
if (this._sideBarFooterTpl) {
|
|
1313
1359
|
this._sideBarFooterPortal = new TemplatePortal(this._sideBarFooterTpl, this._viewContainerRef);
|
|
1314
1360
|
}
|
|
@@ -1339,11 +1385,28 @@ class SideNavComponent {
|
|
|
1339
1385
|
this._backdropHidden.next(true);
|
|
1340
1386
|
}
|
|
1341
1387
|
}
|
|
1388
|
+
get expandOriginTransform() {
|
|
1389
|
+
switch (this.expandOrigin) {
|
|
1390
|
+
case 'right':
|
|
1391
|
+
return this._sideNavExpand === EXPANDED_OVERLAY_STATE ? 'translateX(100vw) translateX(-100%)' :
|
|
1392
|
+
this._sideNavExpand === COLLAPSED_OVERLAY_STATE ? 'translateX(100vw)' : null;
|
|
1393
|
+
case 'top':
|
|
1394
|
+
return this._sideNavExpand === EXPANDED_OVERLAY_STATE ? 'translateY(0)' :
|
|
1395
|
+
this._sideNavExpand === COLLAPSED_OVERLAY_STATE ? 'translateY(-100%)' : null;
|
|
1396
|
+
case 'bottom':
|
|
1397
|
+
return this._sideNavExpand === EXPANDED_OVERLAY_STATE ? 'translateY(100vh) translateY(-100%)' :
|
|
1398
|
+
this._sideNavExpand === COLLAPSED_OVERLAY_STATE ? 'translateY(100vh)' : null;
|
|
1399
|
+
case 'left':
|
|
1400
|
+
default:
|
|
1401
|
+
return this._sideNavExpand === EXPANDED_OVERLAY_STATE ? 'translateX(0)' :
|
|
1402
|
+
this._sideNavExpand === COLLAPSED_OVERLAY_STATE ? 'translateX(-100%)' : null;
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1342
1405
|
}
|
|
1343
1406
|
SideNavComponent.decorators = [
|
|
1344
1407
|
{ type: Component, args: [{
|
|
1345
1408
|
selector: 'seam-side-nav',
|
|
1346
|
-
template: "<div class=\"side-nav-backdrop\" *ngIf=\"isMobile$ | async\"\n [@sideNavBackdrop]=\"_sideNavExpand\"\n [class.side-nav-backdrop-hidden]=\"_backdropHidden | async\"></div>\n\n<div
|
|
1409
|
+
template: "<div class=\"side-nav-backdrop\" *ngIf=\"isMobile$ | async\"\n [@sideNavBackdrop]=\"_sideNavExpand\"\n [class.side-nav-backdrop-hidden]=\"_backdropHidden | async\"\n (click)=\"collapse()\"></div>\n\n<div\n class=\"side-nav-inner-wrapper\"\n [@sideNavExpand]=\"{\n value: _sideNavExpand,\n params: {\n origin: expandOriginTransform,\n height: expandHeight,\n width: expandWidth\n }\n }\"\n (@sideNavExpand.start)=\"animateStart()\"\n (@sideNavExpand.done)=\"animateEnd()\">\n <nav class=\"nav side-nav-content\">\n <seam-side-nav-toggle *ngIf=\"hasHeaderToggle\"\n [toggleIcon]=\"toggleIcon\"\n [toggleTpl]=\"toggleTpl\"\n [expanded]=\"expanded$ | async\"\n (toggleExpand)=\"toggle()\">\n <ng-template [cdkPortalOutlet]=\"_sideBarHeaderPortal\"></ng-template>\n </seam-side-nav-toggle>\n <div class=\"side-nav-items-container\" seamOverlayScrollbar>\n <div class=\"side-nav--group side-nav--group--level-0\">\n <seam-side-nav-item *ngFor=\"let item of items$ | async\"\n [compact]=\"!(expanded$ | async)\"\n [itemType]=\"$any(item)?.itemType\"\n [icon]=\"$any(item)?.icon\"\n [label]=\"$any(item)?.label\"\n [link]=\"$any(item)?.link\"\n [badgeText]=\"$any(item)?.badge?.text\"\n [badgeTheme]=\"$any(item)?.badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(item)?.badge?.srContent\"\n [badgeTooltip]=\"$any(item)?.badge?.tooltip\"\n [queryParams]=\"$any(item)?.queryParams\"\n [children]=\"$any(item)?.children\"\n [active]=\"$any(item).__state?.active\"\n [expanded]=\"$any(item).__state?.expanded\"\n [hideEmptyIcon]=\"hideEmptyIcon\"\n [indentSize]=\"indentSize\">\n </seam-side-nav-item>\n </div>\n </div>\n <ng-template [cdkPortalOutlet]=\"_sideBarFooterPortal\"></ng-template>\n </nav>\n</div>\n",
|
|
1347
1410
|
providers: [
|
|
1348
1411
|
TheSeamSideNavService
|
|
1349
1412
|
],
|
|
@@ -1370,32 +1433,42 @@ SideNavComponent.decorators = [
|
|
|
1370
1433
|
transition(sideNavExpandStateChangeFn, animate('0.2s ease-in-out')),
|
|
1371
1434
|
]),
|
|
1372
1435
|
trigger('sideNavExpand', [
|
|
1373
|
-
// TODO: Make width configurable.
|
|
1436
|
+
// TODO: Make width configurable for non-overlay state.
|
|
1374
1437
|
state(EXPANDED_STATE$1, style({ width: '260px' })),
|
|
1375
1438
|
state(COLLAPSED_STATE$1, style({ width: '50px', 'overflow-x': 'hidden' })),
|
|
1376
1439
|
state(EXPANDED_OVERLAY_STATE, style({
|
|
1377
1440
|
position: 'absolute',
|
|
1378
1441
|
top: 0,
|
|
1379
|
-
height: '100%',
|
|
1380
1442
|
bottom: 0,
|
|
1381
1443
|
left: 0,
|
|
1382
|
-
|
|
1444
|
+
height: '{{ height }}',
|
|
1445
|
+
width: '{{ width }}',
|
|
1446
|
+
transform: '{{ origin }}',
|
|
1383
1447
|
zIndex: '9999',
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1448
|
+
}), {
|
|
1449
|
+
params: {
|
|
1450
|
+
origin: 'translateX(100%)',
|
|
1451
|
+
height: '100%',
|
|
1452
|
+
width: 'calc(100vw - 50px)',
|
|
1453
|
+
}
|
|
1454
|
+
}),
|
|
1387
1455
|
state(COLLAPSED_OVERLAY_STATE, style({
|
|
1388
1456
|
position: 'absolute',
|
|
1389
1457
|
top: 0,
|
|
1390
|
-
height: '100%',
|
|
1391
1458
|
bottom: 0,
|
|
1392
1459
|
left: 0,
|
|
1393
|
-
|
|
1460
|
+
height: '{{ height }}',
|
|
1461
|
+
width: '{{ width }}',
|
|
1462
|
+
transform: '{{ origin }}',
|
|
1463
|
+
'overflow-x': 'hidden',
|
|
1394
1464
|
zIndex: '9999',
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1465
|
+
}), {
|
|
1466
|
+
params: {
|
|
1467
|
+
origin: 'translateX(0)',
|
|
1468
|
+
height: '100%',
|
|
1469
|
+
width: 'calc(100vw - 50px)',
|
|
1470
|
+
}
|
|
1471
|
+
}),
|
|
1399
1472
|
// transition(`${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`, animate('0.2s ease-in-out')),
|
|
1400
1473
|
transition(sideNavExpandStateChangeFn, animate('0.2s ease-in-out')),
|
|
1401
1474
|
// transition(`${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`, [
|
|
@@ -1424,15 +1497,26 @@ SideNavComponent.ctorParameters = () => [
|
|
|
1424
1497
|
SideNavComponent.propDecorators = {
|
|
1425
1498
|
_sideNavExpand: [{ type: HostBinding, args: ['@sideNavAnim',] }],
|
|
1426
1499
|
hasHeaderToggle: [{ type: Input }],
|
|
1500
|
+
toggleIcon: [{ type: Input }],
|
|
1501
|
+
toggleTpl: [{ type: Input }],
|
|
1427
1502
|
items: [{ type: Input }],
|
|
1503
|
+
hideEmptyIcon: [{ type: Input }],
|
|
1504
|
+
indentSize: [{ type: Input }],
|
|
1428
1505
|
expanded: [{ type: Input }],
|
|
1506
|
+
expandOrigin: [{ type: Input }],
|
|
1507
|
+
expandHeight: [{ type: Input }],
|
|
1508
|
+
expandWidth: [{ type: Input }],
|
|
1429
1509
|
overlay: [{ type: Input }],
|
|
1430
1510
|
toggleExpand: [{ type: Output }],
|
|
1511
|
+
_sideBarHeaderTpl: [{ type: ContentChild, args: [BaseLayoutSideBarHeaderDirective, { static: true, read: TemplateRef },] }],
|
|
1431
1512
|
_sideBarFooterTpl: [{ type: ContentChild, args: [BaseLayoutSideBarFooterDirective, { static: true, read: TemplateRef },] }]
|
|
1432
1513
|
};
|
|
1433
1514
|
__decorate([
|
|
1434
1515
|
InputBoolean()
|
|
1435
|
-
], SideNavComponent.prototype, "hasHeaderToggle", void 0);
|
|
1516
|
+
], SideNavComponent.prototype, "hasHeaderToggle", void 0);
|
|
1517
|
+
__decorate([
|
|
1518
|
+
InputNumber(10)
|
|
1519
|
+
], SideNavComponent.prototype, "indentSize", void 0);
|
|
1436
1520
|
|
|
1437
1521
|
const EXPANDED_STATE = 'expanded';
|
|
1438
1522
|
const COLLAPSED_STATE = 'collapsed';
|
|
@@ -1472,13 +1556,14 @@ class SideNavItemComponent {
|
|
|
1472
1556
|
this._badgeTooltip = {
|
|
1473
1557
|
tooltip: value,
|
|
1474
1558
|
placement: 'auto',
|
|
1475
|
-
disabled: false
|
|
1559
|
+
disabled: false,
|
|
1560
|
+
container: 'body'
|
|
1476
1561
|
};
|
|
1477
1562
|
}
|
|
1478
1563
|
else {
|
|
1479
1564
|
this._badgeTooltip = Object.assign(Object.assign({}, value), { placement: value.placement || 'auto', disabled: typeof (value === null || value === void 0 ? void 0 : value.disabled) === 'boolean'
|
|
1480
1565
|
? value.disabled
|
|
1481
|
-
: typeof value.tooltip === 'string' ? false : true });
|
|
1566
|
+
: typeof value.tooltip === 'string' ? false : true, container: value.container || 'body' });
|
|
1482
1567
|
}
|
|
1483
1568
|
}
|
|
1484
1569
|
else {
|
|
@@ -1503,11 +1588,14 @@ class SideNavItemComponent {
|
|
|
1503
1588
|
this._sideNav.collapse();
|
|
1504
1589
|
}
|
|
1505
1590
|
}
|
|
1591
|
+
get showIconBlock() {
|
|
1592
|
+
return notNullOrUndefined(this.icon) || this.hideEmptyIcon !== true;
|
|
1593
|
+
}
|
|
1506
1594
|
}
|
|
1507
1595
|
SideNavItemComponent.decorators = [
|
|
1508
1596
|
{ type: Component, args: [{
|
|
1509
1597
|
selector: 'seam-side-nav-item',
|
|
1510
|
-
template: "<div class=\"d-flex flex-row\">\n <ng-container *ngIf=\"itemType === 'basic'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeBasic\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'link'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeLink\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'divider'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeDivider\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'title'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeTitle\"></ng-template>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"hasChildren\">\n <div class=\"side-nav--group side-nav--group--level-{{ hierLevel + 1 }}\"\n [@childGroupAnim]=\"childGroupAnimState$ | async\">\n <seam-side-nav-item *ngFor=\"let child of children\"\n [hierLevel]=\"compact ? 0 : (hierLevel + 1)\"\n [compact]=\"compact\"\n [itemType]=\"$any(child).itemType\"\n [icon]=\"$any(child).icon\"\n [label]=\"$any(child).label\"\n [link]=\"$any(child).link\"\n [badgeText]=\"$any(child).badge?.text\"\n [badgeTheme]=\"$any(child).badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(child).badge?.srContent\"\n [badgeTooltip]=\"$any(child)?.badge?.tooltip\"\n [queryParams]=\"$any(child).queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [children]=\"$any(child)?.children\"\n [active]=\"$any(child).__state
|
|
1598
|
+
template: "<div class=\"d-flex flex-row side-nav-item-wrapper\">\n <ng-container *ngIf=\"itemType === 'basic'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeBasic\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'link'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeLink\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'divider'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeDivider\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'title'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeTitle\"></ng-template>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"hasChildren\">\n <div class=\"side-nav--group side-nav--group--level-{{ hierLevel + 1 }}\"\n [@childGroupAnim]=\"childGroupAnimState$ | async\">\n <seam-side-nav-item *ngFor=\"let child of children\"\n [hierLevel]=\"compact ? 0 : (hierLevel + 1)\"\n [compact]=\"compact\"\n [itemType]=\"$any(child).itemType\"\n [icon]=\"$any(child).icon\"\n [label]=\"$any(child).label\"\n [link]=\"$any(child).link\"\n [badgeText]=\"$any(child).badge?.text\"\n [badgeTheme]=\"$any(child).badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(child).badge?.srContent\"\n [badgeTooltip]=\"$any(child)?.badge?.tooltip\"\n [queryParams]=\"$any(child).queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [children]=\"$any(child)?.children\"\n [active]=\"$any(child).__state?.active\"\n [expanded]=\"$any(child).__state?.expanded\"\n [hideEmptyIcon]=\"hideEmptyIcon\"\n [indentSize]=\"indentSize\">\n </seam-side-nav-item>\n </div>\n</ng-container>\n\n<ng-template #itemTypeBasic>\n <button class=\"side-nav-item btn side-nav-btn p-0 d-flex flex-row align-items-stretch rounded-0 text-decoration-none text-nowrap w-100\"\n cdkMonitorElementFocus\n (click)=\"toggleChildren()\"\n [attr.aria-expanded]=\"expanded\">\n <div class=\"nav-link d-flex flex-row align-items-center w-100\" [class.nav-link__compact]=\"compact\">\n <div [style.padding-left.px]=\"hierLevel * indentSize\"></div>\n <div class=\"side-nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon *ngIf=\"icon\" [icon]=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" side-nav-item-label style=\"margin-left: 11px;\">\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" side-nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n\n <div *ngIf=\"hasChildren && !compact\"\n class=\"btn side-nav-btn side-nav-item--toggle-btn-container rounded-0\">\n <seam-icon\n class=\"side-nav-item--toggle-btn\"\n [class.side-nav-item--toggle-btn-expanded]=\"expanded\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n </div>\n </button>\n</ng-template>\n\n<ng-template #itemTypeLink>\n <a *ngIf=\"link; else noLink\" class=\"side-nav-item nav-link d-flex flex-row text-nowrap w-100 align-items-center\"\n [class.nav-link__compact]=\"compact\"\n [routerLink]=\"link\"\n [queryParams]=\"queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n (click)=\"_linkClicked()\">\n <div [style.padding-left.px]=\"hierLevel * indentSize\"></div>\n <div class=\"side-nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon *ngIf=\"icon\" [icon]=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" style=\"margin-left: 11px;\" side-nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" side-nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </a>\n\n <ng-template #noLink>\n <a class=\"side-nav-item nav-link d-flex flex-row text-nowrap w-100 align-items-center\" [class.nav-link__compact]=\"compact\">\n <div [style.padding-left.px]=\"hierLevel * indentSize\"></div>\n <div class=\"side-nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon *ngIf=\"icon\" [icon]=\"icon\"></seam-icon>\n </div>\n <span *ngIf=\"!compact\" style=\"margin-left: 11px;\" side-nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" side-nav-item-label>{{ label }}</span>\n </a>\n </ng-template>\n\n <button *ngIf=\"hasChildren && !compact\"\n type=\"button\"\n class=\"btn side-nav-btn side-nav-item--toggle-btn-container rounded-0\"\n (click)=\"toggleChildren()\"\n [attr.aria-expanded]=\"expanded\"\n cdkMonitorElementFocus>\n <seam-icon\n class=\"side-nav-item--toggle-btn\"\n [class.side-nav-item--toggle-btn-expanded]=\"expanded\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n <span class=\"sr-only\">Group Toggle</span>\n </button>\n</ng-template>\n\n<ng-template #itemTypeDivider>\n <div class=\"px-2 w-100\">\n <hr class=\"side-nav-item--divider\" />\n </div>\n</ng-template>\n\n<ng-template #itemTypeTitle>\n <ng-container *ngIf=\"!compact\">\n <span class=\"side-nav-item--title pt-1\" side-nav-item-label>{{ label }}</span>\n </ng-container>\n</ng-template>\n\n<ng-template #itemBadge>\n <ng-container *ngIf=\"badgeText\">\n <div class=\"badge-spacer flex-grow-1\" *ngIf=\"!compact\"></div>\n <div class=\"side-nav-item--badge\"\n [class.side-nav-item--badge-no-icon]=\"!icon\"\n [ngbTooltip]=\"$any(badgeTooltip)?.tooltip\"\n [tooltipClass]=\"$any(badgeTooltip)?.class\"\n [placement]=\"$any(badgeTooltip)?.placement\"\n [container]=\"$any(badgeTooltip)?.container\"\n [disableTooltip]=\"!badgeTooltip || !!$any(badgeTooltip)?.disabled\">\n <span class=\"badge badge-pill badge-{{ badgeTheme }}\">\n <ng-container *ngIf=\"!compact || !icon\">\n {{ badgeText }}\n </ng-container>\n <span *ngIf=\"badgeSrContent\">{{ badgeSrContent }}</span>\n </span>\n </div>\n </ng-container>\n</ng-template>\n",
|
|
1511
1599
|
exportAs: 'seamSideNavItem',
|
|
1512
1600
|
animations: [
|
|
1513
1601
|
trigger('childGroupAnim', [
|
|
@@ -1540,7 +1628,7 @@ SideNavItemComponent.decorators = [
|
|
|
1540
1628
|
],
|
|
1541
1629
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1542
1630
|
encapsulation: ViewEncapsulation.None,
|
|
1543
|
-
styles: ["seam-side-nav-item{display:block;transition:.25s ease-in-out background-color}seam-side-nav-item.seam-side-nav-item--active{background-color:#2a6395}seam-side-nav-item.seam-side-nav-item--active .active,seam-side-nav-item.seam-side-nav-item--active:active,seam-side-nav-item.seam-side-nav-item--active .side-nav-item.active:hover{background-color:#2a6395}seam-side-nav-item.seam-side-nav-item--active .side-nav-item:hover{background-color:#2f71a9}seam-side-nav-item.seam-side-nav-item--active .nav-link{color:#fff}seam-side-nav-item .badge{vertical-align:middle}seam-side-nav-item:not(.side-nav-item--icon) .side-nav-item--badge{pointer-events:all;margin-left:5px;margin-right:3px}seam-side-nav-item .side-nav-item--icon{position:relative;width:24px;max-width:24px;min-width:24px;height:24px;max-height:24px;min-height:24px;text-align:center}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge{top:-4px;right:-4px;position:absolute}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge .badge:empty{display:block;width:8px;height:8px;padding:0}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge.side-nav-item--badge-no-icon{top:0px;right:0px}seam-side-nav-item .side-nav-item{min-height:45px;transition:.25s ease-in-out background-color}seam-side-nav-item .side-nav-item:hover{background-color:#2f71a9}seam-side-nav-item .side-nav-item.active{pointer-events:none;cursor:default}seam-side-nav-item a.side-nav-item:not([href]):not([tabindex]){color:#ccc}seam-side-nav-item a.side-nav-item:not([href]):not([tabindex]):hover{background-color:transparent}seam-side-nav-item .nav-link{color:#fff;padding-right:2px}seam-side-nav-item .nav-link__compact{padding-right:0;padding-left:12px}seam-side-nav-item .nav-link:last-child{padding-right:8px}seam-side-nav-item .side-nav-btn{font-weight:400;color:#fff;text-decoration:none}seam-side-nav-item .side-nav-btn:hover{color:#
|
|
1631
|
+
styles: ["seam-side-nav-item{display:block;transition:.25s ease-in-out background-color}seam-side-nav-item.seam-side-nav-item--active{background-color:#2a6395}seam-side-nav-item.seam-side-nav-item--active .active,seam-side-nav-item.seam-side-nav-item--active:active,seam-side-nav-item.seam-side-nav-item--active .side-nav-item.active:hover{background-color:#2a6395}seam-side-nav-item.seam-side-nav-item--active .side-nav-item:hover{background-color:#2f71a9}seam-side-nav-item.seam-side-nav-item--active .nav-link{color:#fff}seam-side-nav-item.seam-side-nav-item--active .side-nav-btn{color:#fff}seam-side-nav-item .badge{vertical-align:middle}seam-side-nav-item:not(.side-nav-item--icon) .side-nav-item--badge{pointer-events:all;margin-left:5px;margin-right:3px}seam-side-nav-item .side-nav-item--icon{position:relative;width:24px;max-width:24px;min-width:24px;height:24px;max-height:24px;min-height:24px;text-align:center}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge{top:-4px;right:-4px;position:absolute}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge .badge:empty{display:block;width:8px;height:8px;padding:0}seam-side-nav-item .side-nav-item--icon .side-nav-item--badge.side-nav-item--badge-no-icon{top:0px;right:0px}seam-side-nav-item .side-nav-item{min-height:45px;transition:.25s ease-in-out background-color}seam-side-nav-item .side-nav-item:hover{background-color:#2f71a9}seam-side-nav-item .side-nav-item.active{pointer-events:none;cursor:default}seam-side-nav-item a.side-nav-item:not([href]):not([tabindex]){color:#ccc}seam-side-nav-item a.side-nav-item:not([href]):not([tabindex]):hover{background-color:transparent}seam-side-nav-item .nav-link{color:#fff;padding-right:2px}seam-side-nav-item .nav-link__compact{padding-right:0;padding-left:12px}seam-side-nav-item .nav-link:last-child{padding-right:8px}seam-side-nav-item .side-nav-btn{font-weight:400;color:#fff;text-decoration:none}seam-side-nav-item .side-nav-btn:hover{color:#fff;text-decoration:underline}seam-side-nav-item .side-nav-btn:focus,seam-side-nav-item .side-nav-btn.focus{text-decoration:underline;box-shadow:none}seam-side-nav-item .side-nav-btn:disabled,seam-side-nav-item .side-nav-btn.disabled{color:#ccc;pointer-events:none}seam-side-nav-item .cdk-keyboard-focused{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}seam-side-nav-item .side-nav-item--toggle-btn-container{transition:.25s ease-in-out background-color;padding:.5rem 1rem}seam-side-nav-item button.side-nav-item--toggle-btn-container:hover{background-color:#2f71a9}seam-side-nav-item .side-nav-item--toggle-btn .svg-inline--fa{transition:.1s ease-in-out transform}seam-side-nav-item .side-nav-item--toggle-btn.side-nav-item--toggle-btn-expanded .svg-inline--fa{transform:rotate(-90deg)}seam-side-nav-item .side-nav--group{will-change:height;overflow:hidden}seam-side-nav-item .side-nav--group--level-1{background-color:#3276b1}seam-side-nav-item .side-nav--group--level-2{background-color:#2e6ea5}seam-side-nav-item .side-nav--group--level-3{background-color:#2b6699}seam-side-nav-item .side-nav--group--level-4{background-color:#285e8d}seam-side-nav-item .side-nav--group--level-5{background-color:#245681}seam-side-nav-item .side-nav--group--level-6{background-color:#214e75}seam-side-nav-item .side-nav--group--level-7{background-color:#1e4669}seam-side-nav-item .side-nav--group--level-8{background-color:#1a3e5d}seam-side-nav-item .side-nav--group--level-9{background-color:#173651}seam-side-nav-item .side-nav-item--divider{display:block;border-top:1px solid #2a6395;width:100%}seam-side-nav-item .side-nav-item--title{color:#fff;font-size:24px;padding-left:10px}seam-side-nav-item .sr-only{top:0;left:0}\n"]
|
|
1544
1632
|
},] }
|
|
1545
1633
|
];
|
|
1546
1634
|
SideNavItemComponent.ctorParameters = () => [
|
|
@@ -1550,6 +1638,7 @@ SideNavItemComponent.ctorParameters = () => [
|
|
|
1550
1638
|
SideNavItemComponent.propDecorators = {
|
|
1551
1639
|
itemType: [{ type: Input }],
|
|
1552
1640
|
icon: [{ type: Input }],
|
|
1641
|
+
hideEmptyIcon: [{ type: Input }],
|
|
1553
1642
|
label: [{ type: Input }],
|
|
1554
1643
|
active: [{ type: Input }],
|
|
1555
1644
|
link: [{ type: Input }],
|
|
@@ -1578,7 +1667,6 @@ __decorate([
|
|
|
1578
1667
|
|
|
1579
1668
|
class SideNavToggleComponent {
|
|
1580
1669
|
constructor() {
|
|
1581
|
-
this.faBars = faBars;
|
|
1582
1670
|
this.expanded = false;
|
|
1583
1671
|
this.toggleExpand = new EventEmitter();
|
|
1584
1672
|
}
|
|
@@ -1590,18 +1678,20 @@ class SideNavToggleComponent {
|
|
|
1590
1678
|
SideNavToggleComponent.decorators = [
|
|
1591
1679
|
{ type: Component, args: [{
|
|
1592
1680
|
selector: 'seam-side-nav-toggle',
|
|
1593
|
-
template: "<div class=\"side-nav-toggle--content\" *ngIf=\"expanded\">\n
|
|
1681
|
+
template: "<div class=\"side-nav-toggle--content\">\n <ng-container *ngIf=\"expanded\">\n <ng-content></ng-content>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"toggleTpl; else iconBtn\">\n <button\n class=\"side-nav-toggle--btn mx-1\"\n (click)=\"toggle()\">\n <span class=\"sr-only\">Toggle sidebar</span>\n <ng-container *ngTemplateOutlet=\"toggleTpl\"></ng-container>\n </button>\n</ng-container>\n\n<ng-template #iconBtn>\n <button seamIconBtn [icon]=\"toggleIcon\"\n iconType=\"borderless-styled-square\"\n btnSize=\"sm\"\n class=\"side-nav-toggle--btn mx-1\"\n (click)=\"toggle()\">\n <span class=\"sr-only\">Toggle sidebar</span>\n </button>\n</ng-template>\n",
|
|
1594
1682
|
host: {
|
|
1595
1683
|
'[class.side-nav-toggle--compact]': '!expanded'
|
|
1596
1684
|
},
|
|
1597
1685
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1598
1686
|
encapsulation: ViewEncapsulation.None,
|
|
1599
|
-
styles: ["seam-side-nav-toggle{display:flex;flex-direction:row;flex-shrink:0;position:relative;height:45px;width:100%}seam-side-nav-toggle .side-nav-toggle--content{flex:1 1 0}seam-side-nav-toggle .side-nav-toggle--btn{
|
|
1687
|
+
styles: ["seam-side-nav-toggle{display:flex;flex-direction:row;flex-shrink:0;align-items:center;background:#357ebd;position:relative;height:45px;width:100%}seam-side-nav-toggle .side-nav-toggle--content{flex:1 1 0}seam-side-nav-toggle .side-nav-toggle--btn{color:#fff}seam-side-nav-toggle .side-nav-toggle--btn seam-icon{padding:5px}\n"]
|
|
1600
1688
|
},] }
|
|
1601
1689
|
];
|
|
1602
1690
|
SideNavToggleComponent.ctorParameters = () => [];
|
|
1603
1691
|
SideNavToggleComponent.propDecorators = {
|
|
1604
1692
|
expanded: [{ type: Input }],
|
|
1693
|
+
toggleIcon: [{ type: Input }],
|
|
1694
|
+
toggleTpl: [{ type: Input }],
|
|
1605
1695
|
toggleExpand: [{ type: Output }]
|
|
1606
1696
|
};
|
|
1607
1697
|
__decorate([
|
|
@@ -1655,7 +1745,7 @@ TopBarMenuButtonComponent.decorators = [
|
|
|
1655
1745
|
{ type: Component, args: [{
|
|
1656
1746
|
// tslint:disable-next-line:component-selector
|
|
1657
1747
|
selector: 'button[seamTopBarMenuButton]',
|
|
1658
|
-
template: "<div class=\"d-flex flex-row\" *ngIf=\"!compact; else compactTpl\">\n <div class=\"text-left flex-grow-1 text-truncate\">\n <ng-template [ngTemplateOutlet]=\"$any(detailTpl)\"></ng-template>\n </div>\n <!-- Arrow Button -->\n <div class=\"pl-2 d-flex flex-column\">\n <div class=\"flex-grow-1\"></div>\n <seam-icon class=\"d-block\" [icon]=\"faAngleDown\"></seam-icon>\n <div class=\"flex-grow-1\"></div>\n </div>\n</div>\n<ng-template #compactTpl>\n <seam-icon [icon]=\"profileIcon\" iconType=\"borderless-styled-square\"></seam-icon>\n</ng-template>\n",
|
|
1748
|
+
template: "<div class=\"d-flex flex-row\" *ngIf=\"!compact; else compactTpl\">\n <div class=\"text-left flex-grow-1 text-truncate\">\n <ng-template [ngTemplateOutlet]=\"$any(detailTpl)\"></ng-template>\n </div>\n <!-- Arrow Button -->\n <div class=\"pl-2 d-flex flex-column\">\n <div class=\"flex-grow-1\"></div>\n <seam-icon class=\"d-block\" [icon]=\"faAngleDown\"></seam-icon>\n <div class=\"flex-grow-1\"></div>\n </div>\n</div>\n<ng-template #compactTpl>\n <ng-container *ngIf=\"compactDetailTpl; else iconTpl\">\n <ng-template [ngTemplateOutlet]=\"$any(compactDetailTpl)\"></ng-template>\n </ng-container>\n <ng-template #iconTpl>\n <seam-icon [icon]=\"profileIcon\" iconType=\"borderless-styled-square\"></seam-icon>\n </ng-template>\n</ng-template>\n",
|
|
1659
1749
|
encapsulation: ViewEncapsulation.None,
|
|
1660
1750
|
exportAs: 'seamButton',
|
|
1661
1751
|
// tslint:disable-next-line:use-input-property-decorator
|
|
@@ -1663,7 +1753,7 @@ TopBarMenuButtonComponent.decorators = [
|
|
|
1663
1753
|
// tslint:disable-next-line:use-host-property-decorator
|
|
1664
1754
|
host: {
|
|
1665
1755
|
'attr.type': 'button',
|
|
1666
|
-
'class': 'btn border text-decoration-none py-0',
|
|
1756
|
+
'class': 'btn border text-decoration-none py-0 top-bar-menu-button',
|
|
1667
1757
|
'[attr.aria-disabled]': 'disabled.toString()',
|
|
1668
1758
|
'[attr.disabled]': 'disabled || null',
|
|
1669
1759
|
},
|
|
@@ -1673,6 +1763,7 @@ TopBarMenuButtonComponent.decorators = [
|
|
|
1673
1763
|
];
|
|
1674
1764
|
TopBarMenuButtonComponent.propDecorators = {
|
|
1675
1765
|
detailTpl: [{ type: Input }],
|
|
1766
|
+
compactDetailTpl: [{ type: Input }],
|
|
1676
1767
|
compact: [{ type: Input }],
|
|
1677
1768
|
profileIcon: [{ type: Input }],
|
|
1678
1769
|
_hasCompactClass: [{ type: HostBinding, args: ['class.top-bar-menu-button--compact',] }],
|
|
@@ -1706,6 +1797,10 @@ TopBarTitleComponent.propDecorators = {
|
|
|
1706
1797
|
class TopBarItemDirective {
|
|
1707
1798
|
constructor(template) {
|
|
1708
1799
|
this.template = template;
|
|
1800
|
+
this.position = 'right';
|
|
1801
|
+
}
|
|
1802
|
+
set seamTopBarItem(value) {
|
|
1803
|
+
this.position = value;
|
|
1709
1804
|
}
|
|
1710
1805
|
}
|
|
1711
1806
|
TopBarItemDirective.decorators = [
|
|
@@ -1715,7 +1810,10 @@ TopBarItemDirective.decorators = [
|
|
|
1715
1810
|
];
|
|
1716
1811
|
TopBarItemDirective.ctorParameters = () => [
|
|
1717
1812
|
{ type: TemplateRef }
|
|
1718
|
-
];
|
|
1813
|
+
];
|
|
1814
|
+
TopBarItemDirective.propDecorators = {
|
|
1815
|
+
seamTopBarItem: [{ type: Input }]
|
|
1816
|
+
};
|
|
1719
1817
|
|
|
1720
1818
|
class TopBarMenuBtnDetailDirective {
|
|
1721
1819
|
constructor(template) {
|
|
@@ -1745,6 +1843,34 @@ TopBarMenuDirective.ctorParameters = () => [
|
|
|
1745
1843
|
{ type: MenuComponent, decorators: [{ type: Self }] }
|
|
1746
1844
|
];
|
|
1747
1845
|
|
|
1846
|
+
class TopBarCompactMenuBtnDetailDirective {
|
|
1847
|
+
constructor(template) {
|
|
1848
|
+
this.template = template;
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
TopBarCompactMenuBtnDetailDirective.decorators = [
|
|
1852
|
+
{ type: Directive, args: [{
|
|
1853
|
+
selector: '[seamTopBarCompactMenuBtnDetail]'
|
|
1854
|
+
},] }
|
|
1855
|
+
];
|
|
1856
|
+
TopBarCompactMenuBtnDetailDirective.ctorParameters = () => [
|
|
1857
|
+
{ type: TemplateRef }
|
|
1858
|
+
];
|
|
1859
|
+
|
|
1860
|
+
class TopBarNavToggleBtnDetailDirective {
|
|
1861
|
+
constructor(template) {
|
|
1862
|
+
this.template = template;
|
|
1863
|
+
}
|
|
1864
|
+
}
|
|
1865
|
+
TopBarNavToggleBtnDetailDirective.decorators = [
|
|
1866
|
+
{ type: Directive, args: [{
|
|
1867
|
+
selector: '[seamTopBarNavToggleBtnDetail]'
|
|
1868
|
+
},] }
|
|
1869
|
+
];
|
|
1870
|
+
TopBarNavToggleBtnDetailDirective.ctorParameters = () => [
|
|
1871
|
+
{ type: TemplateRef }
|
|
1872
|
+
];
|
|
1873
|
+
|
|
1748
1874
|
/**
|
|
1749
1875
|
* Top bar of an app.
|
|
1750
1876
|
*
|
|
@@ -1769,8 +1895,26 @@ class TheSeamTopBarComponent {
|
|
|
1769
1895
|
this.logoRoute = '/';
|
|
1770
1896
|
/** Determines if the title should be displayed. */
|
|
1771
1897
|
this.hasTitle = false;
|
|
1898
|
+
/** Determines if the top bar button should be displayed. */
|
|
1899
|
+
this.hasTopBarMenuButton = true;
|
|
1772
1900
|
/** Icon to display on mobile to activate profile dropdown. Defaults to faUserCircle. */
|
|
1773
1901
|
this.profileIcon = faUserCircle;
|
|
1902
|
+
/** Icon to display for mobile nav toggle. Defaults to faBars. */
|
|
1903
|
+
this.toggleIcon = faBars;
|
|
1904
|
+
/** Display nav toggle on either left or right side of top bar. Defaults to left. */
|
|
1905
|
+
this.navToggleAlign = 'left';
|
|
1906
|
+
/** @ignore */
|
|
1907
|
+
this._leftItems = new BehaviorSubject([]);
|
|
1908
|
+
/** Additional templates to display on left side of top bar */
|
|
1909
|
+
this.leftItems$ = this._leftItems.asObservable();
|
|
1910
|
+
/** @ignore */
|
|
1911
|
+
this._centerItems = new BehaviorSubject([]);
|
|
1912
|
+
/** Additional templates to display in center of top bar */
|
|
1913
|
+
this.centerItems$ = this._centerItems.asObservable();
|
|
1914
|
+
/** @ignore */
|
|
1915
|
+
this._rightItems = new BehaviorSubject([]);
|
|
1916
|
+
/** Additional templates to display on right side of top bar */
|
|
1917
|
+
this.rightItems$ = this._rightItems.asObservable();
|
|
1774
1918
|
this.isMobile$ = this._layout.isMobile$;
|
|
1775
1919
|
}
|
|
1776
1920
|
/** @ignore */
|
|
@@ -1783,18 +1927,27 @@ class TheSeamTopBarComponent {
|
|
|
1783
1927
|
/** @ignore */
|
|
1784
1928
|
ngAfterContentInit() {
|
|
1785
1929
|
if (this._topBarItems) {
|
|
1786
|
-
this.
|
|
1930
|
+
this._topBarItems.changes.pipe(startWith(undefined), takeUntil(this._ngUnsubscribe), map(() => {
|
|
1931
|
+
var _a;
|
|
1932
|
+
const items = ((_a = this._topBarItems) === null || _a === void 0 ? void 0 : _a.toArray()) || [];
|
|
1933
|
+
const left = items.filter(i => i.position === 'left');
|
|
1934
|
+
const right = items.filter(i => i.position === 'right');
|
|
1935
|
+
const center = items.filter(i => i.position === 'center');
|
|
1936
|
+
this._leftItems.next(left);
|
|
1937
|
+
this._rightItems.next(right);
|
|
1938
|
+
this._centerItems.next(center);
|
|
1939
|
+
}), shareReplay({ bufferSize: 1, refCount: true })).subscribe();
|
|
1787
1940
|
}
|
|
1788
1941
|
}
|
|
1789
1942
|
}
|
|
1790
1943
|
TheSeamTopBarComponent.decorators = [
|
|
1791
1944
|
{ type: Component, args: [{
|
|
1792
1945
|
selector: 'seam-top-bar',
|
|
1793
|
-
template: "
|
|
1946
|
+
template: "<div class=\"top-bar--left d-flex\">\n <!-- Nav Toggle -->\n <ng-container *ngIf=\"navToggleAlign === 'left'\">\n <ng-container *ngTemplateOutlet=\"navToggle\"></ng-container>\n </ng-container>\n\n <!-- Logo -->\n <div class=\"top-bar--logo d-flex flex-column justify-content-center\" *ngIf=\"logoHref; else useLogoRoute\"\n [class.top-bar--logo-mobile]=\"isMobile$ | async\">\n <a [href]=\"logoHref\" [target]=\"logoHrefTarget\">\n <ng-container *ngTemplateOutlet=\"logoTpl\"></ng-container>\n </a>\n </div>\n\n <ng-template #useLogoRoute>\n <div class=\"top-bar--logo d-flex flex-column justify-content-center\" [routerLink]=\"logoRoute\"\n [class.top-bar--logo-mobile]=\"isMobile$ | async\">\n <ng-container *ngTemplateOutlet=\"logoTpl\"></ng-container>\n </div>\n </ng-template>\n\n <ng-template #logoTpl>\n <div>\n <img *ngIf=\"logo\" [src]=\"logo\" [src.lt-md]=\"logoSm ? logoSm : logo\" alt=\"Logo\">\n </div>\n </ng-template>\n\n <!-- Title -->\n <div class=\"d-flex flex-column\" *ngIf=\"hasTitle\">\n <seam-top-bar-title\n [titleText]=\"titleText\"\n [subTitleText]=\"subTitleText\"\n [class.ml-2]=\"isMobile$ | async\">\n </seam-top-bar-title>\n </div>\n\n <!-- Items -->\n <div class=\"top-bar-items top-bar-items--left mr-2\">\n <ng-container *ngFor=\"let item of leftItems$ | async\">\n <ng-template [ngTemplateOutlet]=\"item.template\"></ng-template>\n </ng-container>\n </div>\n</div>\n\n<div class=\"top-bar--center\">\n <!-- Items -->\n <div class=\"top-bar-items top-bar-items--center mr-2\">\n <ng-container *ngFor=\"let item of centerItems$ | async\">\n <ng-template [ngTemplateOutlet]=\"item.template\"></ng-template>\n </ng-container>\n </div>\n</div>\n\n<div class=\"top-bar--right d-flex\">\n <!-- Items -->\n <div class=\"top-bar-items top-bar-items--right mr-2\">\n <ng-container *ngFor=\"let item of rightItems$ | async\">\n <ng-template [ngTemplateOutlet]=\"item.template\"></ng-template>\n </ng-container>\n </div>\n\n <!-- Menu -->\n <button\n *ngIf=\"hasTopBarMenuButton\"\n seamTopBarMenuButton\n [seamMenuToggle]=\"_topBarMenu?.menu\"\n [detailTpl]=\"_topBarMenuBtnDetailTpl?.template\"\n [compactDetailTpl]=\"_topBarCompactMenuBtnDetailTpl?.template\"\n [compact]=\"isMobile$ | async\"\n [profileIcon]=\"profileIcon\">\n </button>\n\n <ng-container *ngIf=\"navToggleAlign === 'right'\">\n <ng-container *ngTemplateOutlet=\"navToggle\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #navToggle>\n <div class=\"d-flex flex-column justify-content-center pr-2\" *ngIf=\"isMobile$ | async\">\n <ng-container *ngIf=\"_topBarNavToggleBtnDetailTpl; else iconBtn\">\n <button seamButton seamBaseLayoutNavToggle>\n <ng-template [ngTemplateOutlet]=\"_topBarNavToggleBtnDetailTpl?.template\"></ng-template>\n </button>\n </ng-container>\n <ng-template #iconBtn>\n <button seamBaseLayoutNavToggle seamIconBtn [icon]=\"toggleIcon\" iconType=\"borderless-styled-square\"></button>\n </ng-template>\n </div>\n</ng-template>\n\n",
|
|
1794
1947
|
encapsulation: ViewEncapsulation.None,
|
|
1795
1948
|
exportAs: 'seamTopBar',
|
|
1796
1949
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
1797
|
-
styles: ["seam-top-bar{display:flex;flex:1 1 100%;flex-direction:row;background:white;margin:0;padding:8px;border-radius:0;box-shadow:none}.top-bar--logo{flex:0 0 auto;overflow:hidden;cursor:pointer}.top-bar--logo img{height:auto;max-height:60px;width:auto;max-width:200px}.top-bar--logo.top-bar--logo-mobile img{height:auto;max-height:40px;width:auto;max-width:150px}.top-bar-
|
|
1950
|
+
styles: ["seam-top-bar{display:flex;flex:1 1 100%;flex-direction:row;background:white;margin:0;padding:8px;border-radius:0;box-shadow:none}.top-bar--logo{flex:0 0 auto;overflow:hidden;cursor:pointer}.top-bar--logo img{height:auto;max-height:60px;width:auto;max-width:200px}.top-bar--logo.top-bar--logo-mobile img{height:auto;max-height:40px;width:auto;max-width:150px}.top-bar--left{flex-grow:1}.top-bar-items{display:flex;align-items:center}\n"]
|
|
1798
1951
|
},] }
|
|
1799
1952
|
];
|
|
1800
1953
|
TheSeamTopBarComponent.ctorParameters = () => [
|
|
@@ -1804,6 +1957,8 @@ TheSeamTopBarComponent.propDecorators = {
|
|
|
1804
1957
|
_topBarMenu: [{ type: ContentChild, args: [TopBarMenuDirective, { static: true },] }],
|
|
1805
1958
|
_topBarItems: [{ type: ContentChildren, args: [TopBarItemDirective,] }],
|
|
1806
1959
|
_topBarMenuBtnDetailTpl: [{ type: ContentChild, args: [TopBarMenuBtnDetailDirective,] }],
|
|
1960
|
+
_topBarCompactMenuBtnDetailTpl: [{ type: ContentChild, args: [TopBarCompactMenuBtnDetailDirective,] }],
|
|
1961
|
+
_topBarNavToggleBtnDetailTpl: [{ type: ContentChild, args: [TopBarNavToggleBtnDetailDirective,] }],
|
|
1807
1962
|
logo: [{ type: Input }],
|
|
1808
1963
|
logoSm: [{ type: Input }],
|
|
1809
1964
|
logoHref: [{ type: Input }],
|
|
@@ -1812,11 +1967,17 @@ TheSeamTopBarComponent.propDecorators = {
|
|
|
1812
1967
|
hasTitle: [{ type: Input }],
|
|
1813
1968
|
titleText: [{ type: Input }],
|
|
1814
1969
|
subTitleText: [{ type: Input }],
|
|
1815
|
-
|
|
1970
|
+
hasTopBarMenuButton: [{ type: Input }],
|
|
1971
|
+
profileIcon: [{ type: Input }],
|
|
1972
|
+
toggleIcon: [{ type: Input }],
|
|
1973
|
+
navToggleAlign: [{ type: Input }]
|
|
1816
1974
|
};
|
|
1817
1975
|
__decorate([
|
|
1818
1976
|
InputBoolean()
|
|
1819
|
-
], TheSeamTopBarComponent.prototype, "hasTitle", void 0);
|
|
1977
|
+
], TheSeamTopBarComponent.prototype, "hasTitle", void 0);
|
|
1978
|
+
__decorate([
|
|
1979
|
+
InputBoolean()
|
|
1980
|
+
], TheSeamTopBarComponent.prototype, "hasTopBarMenuButton", void 0);
|
|
1820
1981
|
|
|
1821
1982
|
class TheSeamTopBarModule {
|
|
1822
1983
|
}
|
|
@@ -1828,7 +1989,9 @@ TheSeamTopBarModule.decorators = [
|
|
|
1828
1989
|
TopBarMenuButtonComponent,
|
|
1829
1990
|
TopBarMenuDirective,
|
|
1830
1991
|
TopBarItemDirective,
|
|
1831
|
-
TopBarMenuBtnDetailDirective
|
|
1992
|
+
TopBarMenuBtnDetailDirective,
|
|
1993
|
+
TopBarCompactMenuBtnDetailDirective,
|
|
1994
|
+
TopBarNavToggleBtnDetailDirective
|
|
1832
1995
|
],
|
|
1833
1996
|
imports: [
|
|
1834
1997
|
CommonModule,
|
|
@@ -1845,7 +2008,9 @@ TheSeamTopBarModule.decorators = [
|
|
|
1845
2008
|
TopBarMenuDirective,
|
|
1846
2009
|
TheSeamMenuModule,
|
|
1847
2010
|
TopBarItemDirective,
|
|
1848
|
-
TopBarMenuBtnDetailDirective
|
|
2011
|
+
TopBarMenuBtnDetailDirective,
|
|
2012
|
+
TopBarCompactMenuBtnDetailDirective,
|
|
2013
|
+
TopBarNavToggleBtnDetailDirective
|
|
1849
2014
|
]
|
|
1850
2015
|
},] }
|
|
1851
2016
|
];
|
|
@@ -2677,9 +2842,533 @@ TheSeamSchemaFormModule.decorators = [
|
|
|
2677
2842
|
},] }
|
|
2678
2843
|
];
|
|
2679
2844
|
|
|
2845
|
+
function isHorizontalNavItemType(item, type) {
|
|
2846
|
+
return item.itemType === type;
|
|
2847
|
+
}
|
|
2848
|
+
function isHorizontalNavItemActive(item) {
|
|
2849
|
+
var _a, _b;
|
|
2850
|
+
return (_b = (_a = item.__state) === null || _a === void 0 ? void 0 : _a.active) !== null && _b !== void 0 ? _b : false;
|
|
2851
|
+
}
|
|
2852
|
+
function isHorizontalNavItemExpanded(item) {
|
|
2853
|
+
var _a, _b;
|
|
2854
|
+
return (_b = (_a = item.__state) === null || _a === void 0 ? void 0 : _a.expanded) !== null && _b !== void 0 ? _b : false;
|
|
2855
|
+
}
|
|
2856
|
+
function horizontalNavItemHasChildren(item) {
|
|
2857
|
+
return horizontalNavItemCanHaveChildren(item) && hasProperty(item, 'children') && item.children.length > 0;
|
|
2858
|
+
}
|
|
2859
|
+
function horizontalNavItemCanHaveChildren(item) {
|
|
2860
|
+
return isHorizontalNavItemType(item, 'basic') || isHorizontalNavItemType(item, 'link');
|
|
2861
|
+
}
|
|
2862
|
+
function horizontalNavItemHasActiveChild(item) {
|
|
2863
|
+
if (!horizontalNavItemHasChildren(item)) {
|
|
2864
|
+
return false;
|
|
2865
|
+
}
|
|
2866
|
+
for (const child of item.children) {
|
|
2867
|
+
if (getHorizontalNavItemStateProp(child, 'active') || horizontalNavItemHasActiveChild(child)) {
|
|
2868
|
+
return true;
|
|
2869
|
+
}
|
|
2870
|
+
}
|
|
2871
|
+
return false;
|
|
2872
|
+
}
|
|
2873
|
+
function horizontalNavItemHasExpandedChild(item) {
|
|
2874
|
+
if (!horizontalNavItemHasChildren(item)) {
|
|
2875
|
+
return false;
|
|
2876
|
+
}
|
|
2877
|
+
for (const child of item.children) {
|
|
2878
|
+
if (getHorizontalNavItemStateProp(child, 'expanded')) {
|
|
2879
|
+
return true;
|
|
2880
|
+
}
|
|
2881
|
+
}
|
|
2882
|
+
return false;
|
|
2883
|
+
}
|
|
2884
|
+
function horizontalNavItemCanBeActive(item) {
|
|
2885
|
+
return isHorizontalNavItemType(item, 'basic') || isHorizontalNavItemType(item, 'link');
|
|
2886
|
+
}
|
|
2887
|
+
function horizontalNavItemCanExpand(item) {
|
|
2888
|
+
return horizontalNavItemCanHaveChildren(item);
|
|
2889
|
+
}
|
|
2890
|
+
function findHorizontalNavLinkItems(items) {
|
|
2891
|
+
const linkItems = [];
|
|
2892
|
+
const _fn = (_items) => {
|
|
2893
|
+
for (const item of _items) {
|
|
2894
|
+
if (isHorizontalNavItemType(item, 'link')) {
|
|
2895
|
+
linkItems.push(item);
|
|
2896
|
+
}
|
|
2897
|
+
if (horizontalNavItemCanHaveChildren(item) && hasProperty(item, 'children')) {
|
|
2898
|
+
_fn(item.children);
|
|
2899
|
+
}
|
|
2900
|
+
}
|
|
2901
|
+
};
|
|
2902
|
+
_fn(items);
|
|
2903
|
+
return linkItems;
|
|
2904
|
+
}
|
|
2905
|
+
function setHorizontalNavItemStateProp(item, prop, value) {
|
|
2906
|
+
if (hasProperty(item, '__state')) {
|
|
2907
|
+
item.__state[prop] = value;
|
|
2908
|
+
}
|
|
2909
|
+
}
|
|
2910
|
+
function getHorizontalNavItemStateProp(item, prop) {
|
|
2911
|
+
return setDefaultHorizontalNavItemState(item).__state[prop];
|
|
2912
|
+
}
|
|
2913
|
+
function setDefaultHorizontalNavItemState(item) {
|
|
2914
|
+
if (hasProperty(item, '__state')) {
|
|
2915
|
+
return item;
|
|
2916
|
+
}
|
|
2917
|
+
item.__state = {
|
|
2918
|
+
active: false,
|
|
2919
|
+
expanded: false
|
|
2920
|
+
};
|
|
2921
|
+
// TODO: See if there is a nice way to fix the typing for this.
|
|
2922
|
+
return item;
|
|
2923
|
+
}
|
|
2924
|
+
function areSameHorizontalNavItem(item1, item2) {
|
|
2925
|
+
if (isNullOrUndefined(item1) || isNullOrUndefined(item2)) {
|
|
2926
|
+
return false;
|
|
2927
|
+
}
|
|
2928
|
+
if (item1.itemType !== item2.itemType) {
|
|
2929
|
+
return false;
|
|
2930
|
+
}
|
|
2931
|
+
if (isHorizontalNavItemType(item1, 'title') && isHorizontalNavItemType(item2, 'title')) {
|
|
2932
|
+
return item1.label === item2.label;
|
|
2933
|
+
}
|
|
2934
|
+
else if (isHorizontalNavItemType(item1, 'divider') && isHorizontalNavItemType(item2, 'divider')) {
|
|
2935
|
+
return item1.label === item2.label;
|
|
2936
|
+
}
|
|
2937
|
+
else if (isHorizontalNavItemType(item1, 'basic') && isHorizontalNavItemType(item2, 'basic')) {
|
|
2938
|
+
return item1.label === item2.label;
|
|
2939
|
+
}
|
|
2940
|
+
else if (isHorizontalNavItemType(item1, 'link') && isHorizontalNavItemType(item2, 'link')) {
|
|
2941
|
+
return item1.label === item2.label && item1.link === item2.link;
|
|
2942
|
+
}
|
|
2943
|
+
else if (isHorizontalNavItemType(item1, 'button') && isHorizontalNavItemType(item2, 'button')) {
|
|
2944
|
+
return item1.onClick === item2.onClick;
|
|
2945
|
+
}
|
|
2946
|
+
return false;
|
|
2947
|
+
}
|
|
2948
|
+
|
|
2949
|
+
class NavItemComponent {
|
|
2950
|
+
constructor() {
|
|
2951
|
+
this._ngUnsubscribe = new Subject();
|
|
2952
|
+
this.faAngleLeft = faAngleLeft;
|
|
2953
|
+
this.active = false;
|
|
2954
|
+
this._link = new BehaviorSubject(undefined);
|
|
2955
|
+
this.link$ = this._link.asObservable();
|
|
2956
|
+
this.hierLevel = 0;
|
|
2957
|
+
this.indentSize = 10;
|
|
2958
|
+
this._expanded = new BehaviorSubject(false);
|
|
2959
|
+
this.expanded$ = this._expanded.asObservable();
|
|
2960
|
+
this._compact = new BehaviorSubject(false);
|
|
2961
|
+
this.compact$ = this._compact.asObservable();
|
|
2962
|
+
this.badgeTheme = 'danger';
|
|
2963
|
+
this.childAction = 'menu';
|
|
2964
|
+
this.expandAction = 'toggle';
|
|
2965
|
+
this.navItemExpanded = new EventEmitter();
|
|
2966
|
+
}
|
|
2967
|
+
set link(value) { this._link.next(value); }
|
|
2968
|
+
get link() { return this._link.value; }
|
|
2969
|
+
set expanded(value) {
|
|
2970
|
+
this._expanded.next(coerceBooleanProperty(value));
|
|
2971
|
+
}
|
|
2972
|
+
get expanded() { return this._expanded.value; }
|
|
2973
|
+
set compact(value) { this._compact.next(coerceBooleanProperty(value)); }
|
|
2974
|
+
get compact() { return this._compact.value; }
|
|
2975
|
+
get badgeTooltip() { return this._badgeTooltip; }
|
|
2976
|
+
set badgeTooltip(value) {
|
|
2977
|
+
if (value !== null && value !== undefined) {
|
|
2978
|
+
if (typeof value === 'string') {
|
|
2979
|
+
this._badgeTooltip = {
|
|
2980
|
+
tooltip: value,
|
|
2981
|
+
placement: 'auto',
|
|
2982
|
+
disabled: false
|
|
2983
|
+
};
|
|
2984
|
+
}
|
|
2985
|
+
else {
|
|
2986
|
+
this._badgeTooltip = Object.assign(Object.assign({}, value), { placement: value.placement || 'auto', disabled: typeof (value === null || value === void 0 ? void 0 : value.disabled) === 'boolean'
|
|
2987
|
+
? value.disabled
|
|
2988
|
+
: typeof value.tooltip === 'string' ? false : true });
|
|
2989
|
+
}
|
|
2990
|
+
}
|
|
2991
|
+
else {
|
|
2992
|
+
this._badgeTooltip = undefined;
|
|
2993
|
+
}
|
|
2994
|
+
}
|
|
2995
|
+
get _isActiveCssClass() { return this.active; }
|
|
2996
|
+
get _isChildActiveCssClass() { return this.hasActiveChild; }
|
|
2997
|
+
get _isExpandedCssClass() { return this.expanded; }
|
|
2998
|
+
get _attrDataHierLevel() { return this.hierLevel; }
|
|
2999
|
+
ngOnDestroy() {
|
|
3000
|
+
this._ngUnsubscribe.next();
|
|
3001
|
+
this._ngUnsubscribe.complete();
|
|
3002
|
+
}
|
|
3003
|
+
get hasChildren() {
|
|
3004
|
+
return Array.isArray(this.children) && this.children.length > 0;
|
|
3005
|
+
}
|
|
3006
|
+
get hasActiveChild() {
|
|
3007
|
+
if (notNullOrUndefined(this.item)) {
|
|
3008
|
+
return horizontalNavItemHasActiveChild(this.item);
|
|
3009
|
+
}
|
|
3010
|
+
return false;
|
|
3011
|
+
}
|
|
3012
|
+
get hasMenuToggle() {
|
|
3013
|
+
return this.hasChildren && this.childAction === 'menu';
|
|
3014
|
+
}
|
|
3015
|
+
get menuTpl() {
|
|
3016
|
+
return this.hasMenuToggle ? this._menu : undefined;
|
|
3017
|
+
}
|
|
3018
|
+
get hasExpandingChildren() {
|
|
3019
|
+
return this.hasChildren && this.childAction === 'expand';
|
|
3020
|
+
}
|
|
3021
|
+
_toggleChildren(event) {
|
|
3022
|
+
let ex = !this.expanded;
|
|
3023
|
+
if (this.expandAction === 'expandOnly') {
|
|
3024
|
+
ex = true;
|
|
3025
|
+
}
|
|
3026
|
+
this.expanded = ex;
|
|
3027
|
+
this.navItemExpanded.emit(this.expanded);
|
|
3028
|
+
// Prevents seam-menu from closing out when toggling child expand
|
|
3029
|
+
event.stopPropagation();
|
|
3030
|
+
}
|
|
3031
|
+
// Updates expanded state when user exits seam-menu
|
|
3032
|
+
_menuEvent(menuExpanded) {
|
|
3033
|
+
if (menuExpanded === false) {
|
|
3034
|
+
this.expanded = false;
|
|
3035
|
+
// TODO: figure out why closing seam-menu with expanded submenu messes up animation
|
|
3036
|
+
if (this._navItems && this._navItems.length) {
|
|
3037
|
+
this._navItems.forEach(navItem => {
|
|
3038
|
+
navItem.expanded = false;
|
|
3039
|
+
});
|
|
3040
|
+
}
|
|
3041
|
+
}
|
|
3042
|
+
}
|
|
3043
|
+
get showIconBlock() {
|
|
3044
|
+
return notNullOrUndefined(this.icon) || this.hideEmptyIcon !== true;
|
|
3045
|
+
}
|
|
3046
|
+
}
|
|
3047
|
+
NavItemComponent.decorators = [
|
|
3048
|
+
{ type: Component, args: [{
|
|
3049
|
+
selector: 'seam-nav-item',
|
|
3050
|
+
template: "<div class=\"d-flex flex-row h-100\">\n <ng-container *ngIf=\"itemType === 'basic'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeBasic\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'link'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeLink\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'divider'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeDivider\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"itemType === 'title'\">\n <ng-template [ngTemplateOutlet]=\"itemTypeTitle\"></ng-template>\n </ng-container>\n</div>\n\n<ng-container *ngIf=\"hasExpandingChildren\">\n <div class=\"nav--group nav--group--level-{{ hierLevel + 1 }}\"\n *ngIf=\"expanded$ | async\" @childGroupAnim>\n <ng-container *ngTemplateOutlet=\"navChildren\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #itemTypeBasic>\n <button class=\"nav-item btn nav-btn p-0 d-flex align-items-stretch flex-row text-decoration-none w-100\"\n cdkMonitorElementFocus\n (click)=\"_toggleChildren($event)\"\n [seamMenuToggle]=\"menuTpl\"\n (menuToggle)=\"_menuEvent($event)\"\n [attr.aria-expanded]=\"expanded$ | async\">\n <div class=\"nav-link d-flex flex-row align-items-center w-100\" [class.nav-link__compact]=\"compact\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n\n <div *ngIf=\"hasChildren && !compact\"\n class=\"btn nav-btn nav-item--toggle-btn-container d-flex align-items-center\">\n <seam-icon\n class=\"nav-item--toggle-btn\"\n [class.nav-item--toggle-btn-expanded]=\"expanded$ | async\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n </div>\n </button>\n</ng-template>\n\n<ng-template #itemTypeLink>\n <a *ngIf=\"link; else noLink\" class=\"nav-item nav-link d-flex flex-row w-100 align-items-center\"\n [class.nav-link__compact]=\"compact\"\n [routerLink]=\"link\"\n [queryParams]=\"queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n <ng-container *ngIf=\"compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n <ng-container *ngIf=\"!compact\">\n <ng-template [ngTemplateOutlet]=\"itemBadge\"></ng-template>\n </ng-container>\n </a>\n\n <ng-template #noLink>\n <a class=\"nav-item nav-link d-flex flex-row w-100 align-items-center\" [class.nav-link__compact]=\"compact\">\n <div class=\"nav-item--icon\" *ngIf=\"showIconBlock\">\n <seam-icon [icon]=\"icon\" *ngIf=\"icon\"></seam-icon>\n </div>\n <span *ngIf=\"!compact\" nav-item-label>\n {{ label }}\n </span>\n <span *ngIf=\"compact\" class=\"sr-only\" nav-item-label>{{ label }}</span>\n </a>\n </ng-template>\n\n <button *ngIf=\"hasChildren && !compact\"\n type=\"button\"\n class=\"btn nav-btn nav-item--toggle-btn-container\"\n (click)=\"_toggleChildren($event)\"\n [seamMenuToggle]=\"menuTpl\"\n (menuToggle)=\"_menuEvent($event)\"\n [attr.aria-expanded]=\"expanded$ | async\"\n cdkMonitorElementFocus>\n <seam-icon\n class=\"nav-item--toggle-btn\"\n [class.nav-item--toggle-btn-expanded]=\"expanded$ | async\"\n [icon]=\"faAngleLeft\"\n type>\n </seam-icon>\n <span class=\"sr-only\">Group Toggle</span>\n </button>\n</ng-template>\n\n<ng-template #itemTypeDivider>\n <div class=\"px-2 w-100\">\n <hr class=\"nav-item--divider\" />\n </div>\n</ng-template>\n\n<ng-template #itemTypeTitle>\n <ng-container *ngIf=\"!compact\">\n <span class=\"nav-item--title pt-1\" nav-item-label>{{ label }}</span>\n </ng-container>\n</ng-template>\n\n<ng-template #itemBadge>\n <ng-container *ngIf=\"badgeText\">\n <div class=\"badge-spacer flex-grow-1\" *ngIf=\"!compact\"></div>\n <div class=\"nav-item--badge\"\n [class.nav-item--badge-no-icon]=\"!icon\"\n [ngbTooltip]=\"$any(badgeTooltip)?.tooltip\"\n [tooltipClass]=\"$any(badgeTooltip)?.class\"\n [placement]=\"$any(badgeTooltip)?.placement\"\n [container]=\"$any(badgeTooltip)?.container\"\n [disableTooltip]=\"!badgeTooltip || !!$any(badgeTooltip)?.disabled\">\n <span class=\"badge badge-pill badge-{{ badgeTheme }}\">\n <ng-container *ngIf=\"!compact || !icon\">\n {{ badgeText }}\n </ng-container>\n <span *ngIf=\"badgeSrContent\">{{ badgeSrContent }}</span>\n </span>\n </div>\n </ng-container>\n</ng-template>\n\n<seam-menu #menu *ngIf=\"hasMenuToggle\">\n <ng-container *ngTemplateOutlet=\"navChildren\"></ng-container>\n</seam-menu>\n\n<ng-template #navChildren>\n <seam-nav-item *ngFor=\"let child of children\"\n [item]=\"child\"\n [hierLevel]=\"compact ? 0 : (hierLevel + 1)\"\n [compact]=\"compact\"\n [itemType]=\"$any(child).itemType\"\n [icon]=\"$any(child).icon\"\n [label]=\"$any(child).label\"\n [link]=\"$any(child).link\"\n [badgeText]=\"$any(child).badge?.text\"\n [badgeTheme]=\"$any(child).badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(child).badge?.srContent\"\n [badgeTooltip]=\"$any(child)?.badge?.tooltip\"\n [queryParams]=\"$any(child).queryParams\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: true }\"\n [children]=\"$any(child)?.children\"\n [active]=\"$any(child).__state?.active\"\n [expanded]=\"$any(child).__state?.expanded\"\n childAction=\"expand\"\n [hideEmptyIcon]=\"hideEmptyIcon\">\n </seam-nav-item>\n</ng-template>\n\n",
|
|
3051
|
+
exportAs: 'seamNavItem',
|
|
3052
|
+
animations: [
|
|
3053
|
+
trigger('childGroupAnim', [
|
|
3054
|
+
transition(':enter', [
|
|
3055
|
+
style({ height: 0 }),
|
|
3056
|
+
animate('0.2s ease-in-out', style({ height: '*' }))
|
|
3057
|
+
]),
|
|
3058
|
+
transition(':leave', [
|
|
3059
|
+
style({ height: '*' }),
|
|
3060
|
+
animate('0.2s ease-in-out', style({ height: 0 }))
|
|
3061
|
+
])
|
|
3062
|
+
])
|
|
3063
|
+
],
|
|
3064
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3065
|
+
encapsulation: ViewEncapsulation.None,
|
|
3066
|
+
styles: ["seam-nav-item{display:block;transition:.25s ease-in-out background-color;text-align:inherit;border-radius:0;overflow:hidden;background:transparent;margin:0}seam-nav-item.seam-nav-item--expanded{background-color:transparent}seam-nav-item.seam-nav-item--expanded .nav-link{color:#000}seam-nav-item.seam-nav-item--child-active{background-color:#dae0e5}seam-nav-item.seam-nav-item--child-active .nav-link{color:#000}seam-nav-item.seam-nav-item--active{background-color:#dae0e5}seam-nav-item.seam-nav-item--active .active,seam-nav-item.seam-nav-item--active:active,seam-nav-item.seam-nav-item--active .nav-item.active:hover{background-color:#dae0e5}seam-nav-item.seam-nav-item--active .nav-item:hover{background-color:#e9ecef}seam-nav-item.seam-nav-item--active .nav-link{color:#000}seam-nav-item .badge{vertical-align:middle}seam-nav-item:not(.nav-item--icon) .nav-item--badge{pointer-events:all;margin-left:5px;margin-right:3px}seam-nav-item .nav-item--icon{position:relative;width:24px;max-width:24px;min-width:24px;height:24px;max-height:24px;min-height:24px;text-align:center;margin-right:.5rem}seam-nav-item .nav-item--icon .nav-item--badge{top:-4px;right:-4px;position:absolute}seam-nav-item .nav-item--icon .nav-item--badge .badge:empty{display:block;width:8px;height:8px;padding:0}seam-nav-item .nav-item--icon .nav-item--badge.nav-item--badge-no-icon{top:0px;right:0px}seam-nav-item .nav-item{transition:.25s ease-in-out background-color}seam-nav-item .nav-item:hover{background-color:#e9ecef}seam-nav-item .nav-item.active{pointer-events:none;cursor:default}seam-nav-item a.nav-item:not([href]):not([tabindex]){color:#000}seam-nav-item a.nav-item:not([href]):not([tabindex]):hover{background-color:transparent}seam-nav-item .nav-link{color:#000}seam-nav-item .nav-btn{font-weight:400;color:#000;text-decoration:none;border-radius:0;border:0 solid #dee2e6}seam-nav-item .nav-btn:hover{color:#000;text-decoration:underline}seam-nav-item .nav-btn:focus,seam-nav-item .nav-btn.focus{text-decoration:underline;box-shadow:none}seam-nav-item .nav-btn:disabled,seam-nav-item .nav-btn.disabled{color:#000;pointer-events:none}seam-nav-item .cdk-keyboard-focused{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}seam-nav-item .nav-item--toggle-btn-container{transition:.25s ease-in-out background-color;padding:0 .5rem}seam-nav-item button.nav-item--toggle-btn-container:hover{background-color:#e9ecef}seam-nav-item .nav-item--toggle-btn .svg-inline--fa{transition:.1s ease-in-out transform;transform:none}seam-nav-item .nav-item--toggle-btn.nav-item--toggle-btn-expanded .svg-inline--fa{transform:rotate(-90deg)}seam-nav-item .nav--group{will-change:height;overflow:hidden}seam-nav-item .nav--group--level-1{background-color:#eff1f4}seam-nav-item .nav--group--level-2{background-color:#e6eaed}seam-nav-item .nav--group--level-3{background-color:#dde2e7}seam-nav-item .nav--group--level-4{background-color:#d4dae1}seam-nav-item .nav--group--level-5{background-color:#cbd3da}seam-nav-item .nav--group--level-6{background-color:#c2cbd4}seam-nav-item .nav--group--level-7{background-color:#bac3cd}seam-nav-item .nav--group--level-8{background-color:#b1bcc7}seam-nav-item .nav--group--level-9{background-color:#a8b4c1}seam-nav-item .nav-item--divider{display:block;border-top:1px solid #dae0e5;width:100%}seam-nav-item .nav-item--title{color:#000;font-size:24px;padding-left:10px}seam-nav-item .sr-only{top:0;left:0}\n"]
|
|
3067
|
+
},] }
|
|
3068
|
+
];
|
|
3069
|
+
NavItemComponent.ctorParameters = () => [];
|
|
3070
|
+
NavItemComponent.propDecorators = {
|
|
3071
|
+
item: [{ type: Input }],
|
|
3072
|
+
itemType: [{ type: Input }],
|
|
3073
|
+
icon: [{ type: Input }],
|
|
3074
|
+
hideEmptyIcon: [{ type: Input }],
|
|
3075
|
+
label: [{ type: Input }],
|
|
3076
|
+
active: [{ type: Input }],
|
|
3077
|
+
link: [{ type: Input }],
|
|
3078
|
+
queryParams: [{ type: Input }],
|
|
3079
|
+
children: [{ type: Input }],
|
|
3080
|
+
hierLevel: [{ type: Input }],
|
|
3081
|
+
indentSize: [{ type: Input }],
|
|
3082
|
+
expanded: [{ type: Input }],
|
|
3083
|
+
compact: [{ type: Input }],
|
|
3084
|
+
badgeText: [{ type: Input }],
|
|
3085
|
+
badgeTheme: [{ type: Input }],
|
|
3086
|
+
badgeSrContent: [{ type: Input }],
|
|
3087
|
+
badgeTooltip: [{ type: Input }],
|
|
3088
|
+
childAction: [{ type: Input }],
|
|
3089
|
+
expandAction: [{ type: Input }],
|
|
3090
|
+
navItemExpanded: [{ type: Output }],
|
|
3091
|
+
_isActiveCssClass: [{ type: HostBinding, args: ['class.seam-nav-item--active',] }],
|
|
3092
|
+
_isChildActiveCssClass: [{ type: HostBinding, args: ['class.seam-nav-item--child-active',] }],
|
|
3093
|
+
_isExpandedCssClass: [{ type: HostBinding, args: ['class.seam-nav-item--expanded',] }],
|
|
3094
|
+
_attrDataHierLevel: [{ type: HostBinding, args: ['attr.data-hier-level',] }],
|
|
3095
|
+
_menu: [{ type: ViewChild, args: [MenuComponent,] }],
|
|
3096
|
+
_navItems: [{ type: ViewChildren, args: [NavItemComponent,] }]
|
|
3097
|
+
};
|
|
3098
|
+
__decorate([
|
|
3099
|
+
InputBoolean()
|
|
3100
|
+
], NavItemComponent.prototype, "active", void 0);
|
|
3101
|
+
__decorate([
|
|
3102
|
+
InputNumber(0)
|
|
3103
|
+
], NavItemComponent.prototype, "hierLevel", void 0);
|
|
3104
|
+
__decorate([
|
|
3105
|
+
InputNumber(10)
|
|
3106
|
+
], NavItemComponent.prototype, "indentSize", void 0);
|
|
3107
|
+
|
|
3108
|
+
class TheSeamNavService {
|
|
3109
|
+
constructor(_router) {
|
|
3110
|
+
this._router = _router;
|
|
3111
|
+
this._updatingCount = new BehaviorSubject(0);
|
|
3112
|
+
this.itemChanged = new Subject();
|
|
3113
|
+
this.loading$ = this._updatingCount.pipe(map(count => count > 0), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: true }));
|
|
3114
|
+
}
|
|
3115
|
+
createItemsObservable(items) {
|
|
3116
|
+
return defer(() => {
|
|
3117
|
+
this.updateItemsStates(items);
|
|
3118
|
+
return new Observable((subscriber) => {
|
|
3119
|
+
const stateChangeSub = this.itemChanged.pipe(switchMap(change => {
|
|
3120
|
+
return this.loading$.pipe(filter(loading => !loading));
|
|
3121
|
+
})).subscribe(() => {
|
|
3122
|
+
subscriber.next(items);
|
|
3123
|
+
});
|
|
3124
|
+
try {
|
|
3125
|
+
this.updateItemsStates(items);
|
|
3126
|
+
}
|
|
3127
|
+
catch (err) {
|
|
3128
|
+
subscriber.error(err);
|
|
3129
|
+
}
|
|
3130
|
+
const routeChangeSub = this._router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe(() => {
|
|
3131
|
+
try {
|
|
3132
|
+
this.updateItemsStates(items);
|
|
3133
|
+
}
|
|
3134
|
+
catch (err) {
|
|
3135
|
+
subscriber.error(err);
|
|
3136
|
+
}
|
|
3137
|
+
});
|
|
3138
|
+
return () => {
|
|
3139
|
+
stateChangeSub.unsubscribe();
|
|
3140
|
+
routeChangeSub.unsubscribe();
|
|
3141
|
+
};
|
|
3142
|
+
}).pipe(startWith(items));
|
|
3143
|
+
});
|
|
3144
|
+
}
|
|
3145
|
+
_incUpdatingCount() {
|
|
3146
|
+
this._updatingCount.next(this._updatingCount.value + 1);
|
|
3147
|
+
}
|
|
3148
|
+
_decrUpdatingCount() {
|
|
3149
|
+
this._updatingCount.next(this._updatingCount.value - 1);
|
|
3150
|
+
}
|
|
3151
|
+
updateItemsStates(items) {
|
|
3152
|
+
this._incUpdatingCount();
|
|
3153
|
+
try {
|
|
3154
|
+
for (const item of items) {
|
|
3155
|
+
if (horizontalNavItemHasChildren(item)) {
|
|
3156
|
+
this.updateItemsStates(item.children);
|
|
3157
|
+
}
|
|
3158
|
+
this.updateItemState(item);
|
|
3159
|
+
}
|
|
3160
|
+
this._decrUpdatingCount();
|
|
3161
|
+
}
|
|
3162
|
+
catch (err) {
|
|
3163
|
+
this._decrUpdatingCount();
|
|
3164
|
+
throw err;
|
|
3165
|
+
}
|
|
3166
|
+
}
|
|
3167
|
+
updateItemState(item) {
|
|
3168
|
+
this._incUpdatingCount();
|
|
3169
|
+
try {
|
|
3170
|
+
setDefaultHorizontalNavItemState(item);
|
|
3171
|
+
if (isHorizontalNavItemType(item, 'link')) {
|
|
3172
|
+
const url = this._getUrl(item);
|
|
3173
|
+
if (notNullOrUndefined(url)) {
|
|
3174
|
+
const opts = this._getMatchOptions(item);
|
|
3175
|
+
this.setItemStateProp(item, 'active', this._router.isActive(url, opts));
|
|
3176
|
+
}
|
|
3177
|
+
}
|
|
3178
|
+
// TODO: Implement this in a more optimized way. Unless our apps start
|
|
3179
|
+
// having large navs constantly updating their state, this shouldn't
|
|
3180
|
+
// have much impact on performance.
|
|
3181
|
+
this._updateItemExpandedState(item);
|
|
3182
|
+
this._decrUpdatingCount();
|
|
3183
|
+
}
|
|
3184
|
+
catch (err) {
|
|
3185
|
+
this._decrUpdatingCount();
|
|
3186
|
+
throw err;
|
|
3187
|
+
}
|
|
3188
|
+
}
|
|
3189
|
+
_updateItemsExpandedState(items) {
|
|
3190
|
+
for (const item of items) {
|
|
3191
|
+
if (horizontalNavItemHasChildren(item)) {
|
|
3192
|
+
this._updateItemsExpandedState(item.children);
|
|
3193
|
+
}
|
|
3194
|
+
this._updateItemExpandedState(item);
|
|
3195
|
+
}
|
|
3196
|
+
}
|
|
3197
|
+
_updateItemExpandedState(item) {
|
|
3198
|
+
if (!horizontalNavItemCanExpand(item)) {
|
|
3199
|
+
if (getHorizontalNavItemStateProp(item, 'expanded')) {
|
|
3200
|
+
this.setItemStateProp(item, 'expanded', false);
|
|
3201
|
+
}
|
|
3202
|
+
return;
|
|
3203
|
+
}
|
|
3204
|
+
if (horizontalNavItemHasChildren(item)) {
|
|
3205
|
+
this._updateItemsExpandedState(item.children);
|
|
3206
|
+
}
|
|
3207
|
+
if (horizontalNavItemHasActiveChild(item) || horizontalNavItemHasExpandedChild(item)) {
|
|
3208
|
+
if (!getHorizontalNavItemStateProp(item, 'expanded')) {
|
|
3209
|
+
this.setItemStateProp(item, 'expanded', true);
|
|
3210
|
+
}
|
|
3211
|
+
}
|
|
3212
|
+
else {
|
|
3213
|
+
if (getHorizontalNavItemStateProp(item, 'expanded')) {
|
|
3214
|
+
this.setItemStateProp(item, 'expanded', false);
|
|
3215
|
+
}
|
|
3216
|
+
}
|
|
3217
|
+
}
|
|
3218
|
+
_getNavExtras(item) {
|
|
3219
|
+
const navigationExtras = {};
|
|
3220
|
+
if (hasProperty(item, 'queryParams')) {
|
|
3221
|
+
navigationExtras.queryParams = item.queryParams;
|
|
3222
|
+
}
|
|
3223
|
+
if (hasProperty(item, 'fragment')) {
|
|
3224
|
+
navigationExtras.fragment = item.fragment;
|
|
3225
|
+
}
|
|
3226
|
+
if (hasProperty(item, 'queryParamsHandling')) {
|
|
3227
|
+
navigationExtras.queryParamsHandling = item.queryParamsHandling;
|
|
3228
|
+
}
|
|
3229
|
+
if (hasProperty(item, 'preserveFragment')) {
|
|
3230
|
+
navigationExtras.preserveFragment = item.preserveFragment;
|
|
3231
|
+
}
|
|
3232
|
+
return navigationExtras;
|
|
3233
|
+
}
|
|
3234
|
+
_getUrl(item) {
|
|
3235
|
+
const link = item.link;
|
|
3236
|
+
if (typeof link === 'string') {
|
|
3237
|
+
return this._router.createUrlTree([link], this._getNavExtras(item)).toString();
|
|
3238
|
+
}
|
|
3239
|
+
else if (Array.isArray(link)) {
|
|
3240
|
+
return this._router.createUrlTree(link, this._getNavExtras(item)).toString();
|
|
3241
|
+
}
|
|
3242
|
+
return null;
|
|
3243
|
+
}
|
|
3244
|
+
_getMatchOptions(item) {
|
|
3245
|
+
const defaultMatchOpts = {
|
|
3246
|
+
paths: 'subset',
|
|
3247
|
+
queryParams: 'subset',
|
|
3248
|
+
fragment: 'ignored',
|
|
3249
|
+
matrixParams: 'ignored'
|
|
3250
|
+
};
|
|
3251
|
+
if (hasProperty(item, 'matchOptions')) {
|
|
3252
|
+
return Object.assign(Object.assign({}, defaultMatchOpts), item.matchOptions);
|
|
3253
|
+
}
|
|
3254
|
+
return defaultMatchOpts;
|
|
3255
|
+
}
|
|
3256
|
+
setItemStateProp(item, prop, value) {
|
|
3257
|
+
const currentValue = getHorizontalNavItemStateProp(item, prop);
|
|
3258
|
+
if (currentValue !== value) {
|
|
3259
|
+
setHorizontalNavItemStateProp(item, prop, value);
|
|
3260
|
+
const changed = {
|
|
3261
|
+
item,
|
|
3262
|
+
prop,
|
|
3263
|
+
prevValue: currentValue,
|
|
3264
|
+
newValue: value
|
|
3265
|
+
};
|
|
3266
|
+
this.itemChanged.next(changed);
|
|
3267
|
+
}
|
|
3268
|
+
}
|
|
3269
|
+
}
|
|
3270
|
+
TheSeamNavService.decorators = [
|
|
3271
|
+
{ type: Injectable }
|
|
3272
|
+
];
|
|
3273
|
+
TheSeamNavService.ctorParameters = () => [
|
|
3274
|
+
{ type: Router }
|
|
3275
|
+
];
|
|
3276
|
+
|
|
3277
|
+
class HorizontalNavComponent {
|
|
3278
|
+
constructor() {
|
|
3279
|
+
this._ngUnsubscribe = new Subject();
|
|
3280
|
+
this._items = new BehaviorSubject([]);
|
|
3281
|
+
this.hideEmptyIcon = true;
|
|
3282
|
+
this.hierLevel = 0;
|
|
3283
|
+
this.childAction = 'menu';
|
|
3284
|
+
this.expandAction = 'toggle';
|
|
3285
|
+
this._focusedNavItem = new BehaviorSubject(undefined);
|
|
3286
|
+
this.focusedNavItem$ = this._focusedNavItem.asObservable();
|
|
3287
|
+
this.navItemExpanded = new EventEmitter();
|
|
3288
|
+
this.items$ = this._items.asObservable();
|
|
3289
|
+
}
|
|
3290
|
+
get items() { return this._items.value; }
|
|
3291
|
+
set items(value) {
|
|
3292
|
+
this._items.next(value);
|
|
3293
|
+
}
|
|
3294
|
+
/**
|
|
3295
|
+
* The 'focused' nav item refers to the item in
|
|
3296
|
+
* the list that was most recently expanded or activated.
|
|
3297
|
+
* // TODO: make all this better
|
|
3298
|
+
*/
|
|
3299
|
+
get focusedNavItem() {
|
|
3300
|
+
return this._focusedNavItem.value;
|
|
3301
|
+
}
|
|
3302
|
+
set focusedNavItem(value) {
|
|
3303
|
+
this._focusedNavItem.next(value);
|
|
3304
|
+
}
|
|
3305
|
+
ngOnInit() { }
|
|
3306
|
+
ngOnDestroy() {
|
|
3307
|
+
this._ngUnsubscribe.next();
|
|
3308
|
+
this._ngUnsubscribe.complete();
|
|
3309
|
+
}
|
|
3310
|
+
_navItemExpanded(item, expanded) {
|
|
3311
|
+
this.navItemExpanded.emit({ navItem: item, expanded });
|
|
3312
|
+
}
|
|
3313
|
+
_navItemIsFocused(item) {
|
|
3314
|
+
return this.focusedNavItem$.pipe(map(focusedNavItem => areSameHorizontalNavItem(focusedNavItem, item)));
|
|
3315
|
+
}
|
|
3316
|
+
}
|
|
3317
|
+
HorizontalNavComponent.decorators = [
|
|
3318
|
+
{ type: Component, args: [{
|
|
3319
|
+
selector: 'seam-horizontal-nav',
|
|
3320
|
+
template: "<div class=\"nav-inner-wrapper\" class=\"nav-inner-wrapper-{{hierLevel}}\">\n <div class=\"nav-items-row\">\n <seam-nav-item *ngFor=\"let item of items$ | async\"\n class=\"flex-shrink-0\"\n [item]=\"item\"\n [itemType]=\"$any(item)?.itemType\"\n [icon]=\"$any(item)?.icon\"\n [label]=\"$any(item)?.label\"\n [link]=\"$any(item)?.link\"\n [badgeText]=\"$any(item)?.badge?.text\"\n [badgeTheme]=\"$any(item)?.badge?.theme || 'danger'\"\n [badgeSrContent]=\"$any(item)?.badge?.srContent\"\n [badgeTooltip]=\"$any(item)?.badge?.tooltip\"\n [queryParams]=\"$any(item)?.queryParams\"\n [children]=\"$any(item)?.children\"\n [active]=\"$any(item).__state?.active\"\n [expanded]=\"$any(item).__state?.expanded\"\n [hierLevel]=\"hierLevel\"\n [childAction]=\"childAction\"\n [expandAction]=\"expandAction\"\n (navItemExpanded)=\"_navItemExpanded(item, $event)\"\n [class.seam-nav-item--focused]=\"_navItemIsFocused(item) | async\"\n [hideEmptyIcon]=\"hideEmptyIcon\">\n </seam-nav-item>\n </div>\n</div>\n",
|
|
3321
|
+
providers: [
|
|
3322
|
+
TheSeamNavService
|
|
3323
|
+
],
|
|
3324
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3325
|
+
encapsulation: ViewEncapsulation.None,
|
|
3326
|
+
styles: ["seam-horizontal-nav,.seam-horizontal-nav{display:block;height:100%;position:relative;z-index:2}seam-horizontal-nav .nav-inner-wrapper,.seam-horizontal-nav .nav-inner-wrapper{background:none;height:100%}seam-horizontal-nav .nav-backdrop,.seam-horizontal-nav .nav-backdrop{background:rgba(52,58,64,.6);width:100vw;height:100vh}seam-horizontal-nav .nav-backdrop.nav-backdrop-hidden,.seam-horizontal-nav .nav-backdrop.nav-backdrop-hidden{display:none;width:0;height:0;padding:0;margin:0}seam-horizontal-nav .nav-content,.seam-horizontal-nav .nav-content{display:flex;flex-direction:column;height:100%;flex-wrap:nowrap}seam-horizontal-nav .nav-items-container,.seam-horizontal-nav .nav-items-container{display:flex;flex-direction:column;width:100%;flex:1 1 100%}seam-horizontal-nav .nav-items-row,.seam-horizontal-nav .nav-items-row{height:100%;display:flex;padding:.25rem .5rem}\n"]
|
|
3327
|
+
},] }
|
|
3328
|
+
];
|
|
3329
|
+
HorizontalNavComponent.ctorParameters = () => [];
|
|
3330
|
+
HorizontalNavComponent.propDecorators = {
|
|
3331
|
+
items: [{ type: Input }],
|
|
3332
|
+
hideEmptyIcon: [{ type: Input }],
|
|
3333
|
+
hierLevel: [{ type: Input }],
|
|
3334
|
+
childAction: [{ type: Input }],
|
|
3335
|
+
expandAction: [{ type: Input }],
|
|
3336
|
+
focusedNavItem: [{ type: Input }],
|
|
3337
|
+
navItemExpanded: [{ type: Output }]
|
|
3338
|
+
};
|
|
3339
|
+
|
|
3340
|
+
class TheSeamNavModule {
|
|
3341
|
+
}
|
|
3342
|
+
TheSeamNavModule.decorators = [
|
|
3343
|
+
{ type: NgModule, args: [{
|
|
3344
|
+
declarations: [
|
|
3345
|
+
NavItemComponent,
|
|
3346
|
+
HorizontalNavComponent,
|
|
3347
|
+
],
|
|
3348
|
+
imports: [
|
|
3349
|
+
CommonModule,
|
|
3350
|
+
RouterModule,
|
|
3351
|
+
TheSeamIconModule,
|
|
3352
|
+
A11yModule,
|
|
3353
|
+
TheSeamScrollbarModule,
|
|
3354
|
+
TheSeamLayoutModule,
|
|
3355
|
+
NgbTooltipModule,
|
|
3356
|
+
PortalModule,
|
|
3357
|
+
TheSeamMenuModule
|
|
3358
|
+
],
|
|
3359
|
+
exports: [
|
|
3360
|
+
NavItemComponent,
|
|
3361
|
+
HorizontalNavComponent,
|
|
3362
|
+
],
|
|
3363
|
+
providers: [
|
|
3364
|
+
TheSeamNavService,
|
|
3365
|
+
]
|
|
3366
|
+
},] }
|
|
3367
|
+
];
|
|
3368
|
+
|
|
2680
3369
|
/**
|
|
2681
3370
|
* Generated bundle index. Do not edit.
|
|
2682
3371
|
*/
|
|
2683
3372
|
|
|
2684
|
-
export { BaseLayoutContentDirective, BaseLayoutContentFooterDirective, BaseLayoutContentHeaderDirective, BaseLayoutNavToggleDirective, BaseLayoutSideBarDirective, BaseLayoutTopBarDirective, DashboardComponent, DashboardWidgetContainerComponent, DashboardWidgetPortalOutletDirective, DashboardWidgetTemplateContainerComponent, DashboardWidgetsComponent, DashboardWidgetsPreferencesService, DashboardWidgetsService, HierarchyLevelResolver, HierarchyRouterOutletComponent, SideNavComponent, SideNavItemComponent, SideNavToggleComponent, THESEAM_BASE_LAYOUT_REF, THESEAM_DASHBOARD_WIDGETS_PREFERENCES_ACCESSOR, THE_SEAM_BASE_LAYOUT, TheSeamBaseLayoutComponent, TheSeamBaseLayoutModule, TheSeamDashboardModule, TheSeamDynamicRouterModule, TheSeamFramework, TheSeamSchemaFormFrameworkComponent, TheSeamSchemaFormModule, TheSeamSideNavModule, TheSeamTopBarComponent, TheSeamTopBarModule, TopBarItemDirective, TopBarMenuBtnDetailDirective, TopBarMenuButtonComponent, TopBarMenuDirective, TopBarTitleComponent, canBeActive, canExpand, canHaveChildren, fader, findLinkItems, getItemStateProp, hasActiveChild, hasChildren, hasExpandedChild, isExpanded, isNavItemActive, isNavItemType, routeChanges, setDefaultState, setItemStateProp, sideNavExpandStateChangeFn, sideToSide, slider, stepper, transformer, BaseLayoutSideBarFooterDirective as ɵa,
|
|
3373
|
+
export { BaseLayoutContentDirective, BaseLayoutContentFooterDirective, BaseLayoutContentHeaderDirective, BaseLayoutNavToggleDirective, BaseLayoutSideBarDirective, BaseLayoutTopBarDirective, DashboardComponent, DashboardWidgetContainerComponent, DashboardWidgetPortalOutletDirective, DashboardWidgetTemplateContainerComponent, DashboardWidgetsComponent, DashboardWidgetsPreferencesService, DashboardWidgetsService, HierarchyLevelResolver, HierarchyRouterOutletComponent, HorizontalNavComponent, NavItemComponent, SideNavComponent, SideNavItemComponent, SideNavToggleComponent, THESEAM_BASE_LAYOUT_REF, THESEAM_DASHBOARD_WIDGETS_PREFERENCES_ACCESSOR, THE_SEAM_BASE_LAYOUT, TheSeamBaseLayoutComponent, TheSeamBaseLayoutModule, TheSeamDashboardModule, TheSeamDynamicRouterModule, TheSeamFramework, TheSeamNavModule, TheSeamSchemaFormFrameworkComponent, TheSeamSchemaFormModule, TheSeamSideNavModule, TheSeamTopBarComponent, TheSeamTopBarModule, TopBarItemDirective, TopBarMenuBtnDetailDirective, TopBarMenuButtonComponent, TopBarMenuDirective, TopBarTitleComponent, areSameHorizontalNavItem, canBeActive, canExpand, canHaveChildren, fader, findHorizontalNavLinkItems, findLinkItems, getHorizontalNavItemStateProp, getItemStateProp, hasActiveChild, hasChildren, hasExpandedChild, horizontalNavItemCanBeActive, horizontalNavItemCanExpand, horizontalNavItemCanHaveChildren, horizontalNavItemHasActiveChild, horizontalNavItemHasChildren, horizontalNavItemHasExpandedChild, isExpanded, isHorizontalNavItemActive, isHorizontalNavItemExpanded, isHorizontalNavItemType, isNavItemActive, isNavItemType, routeChanges, setDefaultHorizontalNavItemState, setDefaultState, setHorizontalNavItemStateProp, setItemStateProp, sideNavExpandStateChangeFn, sideToSide, slider, stepper, transformer, BaseLayoutSideBarFooterDirective as ɵa, BaseLayoutSideBarHeaderDirective as ɵb, TheSeamSideNavService as ɵc, TopBarCompactMenuBtnDetailDirective as ɵd, TopBarNavToggleBtnDetailDirective as ɵe, TheSeamSchemaFormControlsModule as ɵf, TheSeamSchemaFormCheckboxComponent as ɵg, TheSeamSchemaFormSubmitComponent as ɵh, TheSeamSchemaFormSelectComponent as ɵi, TheSeamSchemaFormInputComponent as ɵj, TheSeamSchemaFormNumberComponent as ɵk, TheSeamSchemaFormSubmitSplitComponent as ɵl, TheSeamNavService as ɵm };
|
|
2685
3374
|
//# sourceMappingURL=theseam-ui-common-framework.js.map
|