UNPKG

angular-sidebar-menu

Version:

The sources for this package are in the [Angular Sidebar Menu](https://github.com/mledour/angular-sidebar-menu) repo. Please file issues and pull requests against that repo.

478 lines (460 loc) 27.5 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/common'), require('@angular/router'), require('@angular/animations')) : typeof define === 'function' && define.amd ? define('angular-sidebar-menu', ['exports', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/common', '@angular/router', '@angular/animations'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['angular-sidebar-menu'] = {}, global.ng.core, global.rxjs, global.rxjs.operators, global.ng.common, global.ng.router, global.ng.animations)); }(this, (function (exports, core, rxjs, operators, common, router, animations) { 'use strict'; (function (Modes) { Modes["EXPANDED"] = "expanded"; Modes["EXPANDABLE"] = "expandable"; Modes["MINI"] = "mini"; })(exports.Modes || (exports.Modes = {})); var AnchorService = /** @class */ (function () { function AnchorService() { } return AnchorService; }()); AnchorService.decorators = [ { type: core.Injectable } ]; var NodeService = /** @class */ (function () { function NodeService() { this.openedNode = new rxjs.Subject(); } return NodeService; }()); NodeService.decorators = [ { type: core.Injectable } ]; var RoleService = /** @class */ (function () { function RoleService() { this.role$ = new rxjs.BehaviorSubject(undefined); this.unAuthorizedVisibility$ = new rxjs.BehaviorSubject('hidden'); } Object.defineProperty(RoleService.prototype, "role", { set: function (role) { this.role$.next(role); }, enumerable: false, configurable: true }); Object.defineProperty(RoleService.prototype, "unAuthorizedVisibility", { set: function (visibility) { this.unAuthorizedVisibility$.next(visibility); }, enumerable: false, configurable: true }); RoleService.prototype.showItem$ = function (roles) { return this.itemVisibilityBase$(roles).pipe(operators.map(function (values) { return values.isAuthorized || (!values.isAuthorized && values.unAuthorizedVisibility !== 'hidden'); })); }; RoleService.prototype.disableItem$ = function (roles) { return this.itemVisibilityBase$(roles).pipe(operators.map(function (values) { return !values.isAuthorized && values.unAuthorizedVisibility === 'disabled'; })); }; RoleService.prototype.itemVisibilityBase$ = function (roles) { var _this = this; return rxjs.combineLatest([ this.role$.pipe(operators.map(function (role) { return _this.isAuthorized(role, roles); })), this.unAuthorizedVisibility$, ]).pipe(operators.map(function (value) { return ({ isAuthorized: value[0], unAuthorizedVisibility: value[1] }); })); }; RoleService.prototype.isRole = function (role) { return typeof role === 'string' || typeof role === 'number'; }; RoleService.prototype.isAuthorized = function (userRole, itemRoles) { if (!this.isRole(userRole) || !itemRoles || itemRoles.length === 0) { return true; } return itemRoles.includes(userRole); }; return RoleService; }()); RoleService.decorators = [ { type: core.Injectable } ]; var SearchService = /** @class */ (function () { function SearchService() { this._search = new rxjs.Subject(); this.search$ = this._search.asObservable(); } Object.defineProperty(SearchService.prototype, "search", { set: function (value) { this._search.next(value); }, enumerable: false, configurable: true }); SearchService.prototype.filter = function (search, label) { if (!search || !label) { return false; } return !label.toLowerCase().includes(search.toLowerCase()); }; return SearchService; }()); SearchService.decorators = [ { type: core.Injectable } ]; var trackByItem = function (index, item) { return item.id || index; }; var SidebarMenuComponent = /** @class */ (function () { function SidebarMenuComponent(anchorService, nodeService, searchService, roleService) { this.anchorService = anchorService; this.nodeService = nodeService; this.searchService = searchService; this.roleService = roleService; this.mode = exports.Modes.EXPANDED; this.modes = exports.Modes; this.disableAnimations = true; this.trackByItem = trackByItem; } Object.defineProperty(SidebarMenuComponent.prototype, "_menu", { set: function (menu) { var _this = this; this.disableAnimations = true; this.menu = menu; setTimeout(function () { _this.disableAnimations = false; }); }, enumerable: false, configurable: true }); Object.defineProperty(SidebarMenuComponent.prototype, "iconClasses", { set: function (cssClasses) { this.anchorService.iconClasses = cssClasses; }, enumerable: false, configurable: true }); Object.defineProperty(SidebarMenuComponent.prototype, "toggleIconClasses", { set: function (cssClasses) { this.nodeService.toggleIconClasses = cssClasses; }, enumerable: false, configurable: true }); Object.defineProperty(SidebarMenuComponent.prototype, "role", { set: function (role) { this.roleService.role = role; }, enumerable: false, configurable: true }); Object.defineProperty(SidebarMenuComponent.prototype, "unAuthorizedVisibility", { set: function (visibility) { this.roleService.unAuthorizedVisibility = visibility; }, enumerable: false, configurable: true }); Object.defineProperty(SidebarMenuComponent.prototype, "search", { set: function (value) { this.searchService.search = value; }, enumerable: false, configurable: true }); return SidebarMenuComponent; }()); SidebarMenuComponent.decorators = [ { type: core.Component, args: [{ selector: 'asm-angular-sidebar-menu', providers: [NodeService, AnchorService, RoleService, SearchService], changeDetection: core.ChangeDetectionStrategy.OnPush, template: " <div class=\"asm-menu\" [ngClass]=\"'asm-menu--mode-' + mode\" [@.disabled]=\"disableAnimations\">\n <ng-content></ng-content>\n <ul class=\"asm-menu__node\">\n <ng-container *ngFor=\"let item of menu; trackBy: trackByItem\">\n <li\n asm-menu-item\n class=\"asm-menu-item asm-menu-item--root\"\n *ngIf=\"roleService.showItem$(item.roles) | async\"\n [menuItem]=\"item\"\n [level]=\"0\"\n ></li>\n </ng-container>\n </ul>\n </div>", styles: [":host{display:block;overflow:hidden}:host:hover{overflow:visible}:host ::ng-deep .asm-menu-item,:host ::ng-deep ul{margin:0;padding:0}:host ::ng-deep li{line-height:0}:host ::ng-deep .asm-menu-anchor__label,:host ::ng-deep .asm-menu-item__header,:host ::ng-deep .asm-menu-node__label{white-space:nowrap}:host ::ng-deep .asm-menu-node__label{display:none}:host ::ng-deep .asm-menu-node:not(.asm-menu-node--open)>.ng-trigger-openClose,:host ::ng-deep .asm-menu-node>.ng-trigger-openClose.ng-animating{overflow:hidden}:host ::ng-deep .asm-menu-item--filtered{display:none}:host ::ng-deep .asm-menu,:host ::ng-deep .asm-menu-node ul{list-style:none}:host ::ng-deep .asm-menu-anchor a{-webkit-user-select:none;align-items:center;cursor:pointer;display:flex;position:relative;text-decoration:none;user-select:none}:host ::ng-deep .asm-menu-item__header{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .asm-menu-node .asm-menu-item__header{margin-left:-6px}:host ::ng-deep .asm-menu-anchor__icon{width:20px}:host ::ng-deep .asm-menu-anchor__pull.asm-badges,:host ::ng-deep .asm-menu-anchor__pull.asm-toggle{position:absolute;right:10px}:host ::ng-deep .asm-menu-anchor__pull.asm-badges .asm-badges__badge,:host ::ng-deep .asm-menu-anchor__pull.asm-badges .asm-toggle__icon,:host ::ng-deep .asm-menu-anchor__pull.asm-toggle .asm-badges__badge,:host ::ng-deep .asm-menu-anchor__pull.asm-toggle .asm-toggle__icon{float:right;margin-left:4px;text-align:center;white-space:nowrap}:host ::ng-deep .asm-menu-anchor__pull.asm-badges .asm-toggle__icon,:host ::ng-deep .asm-menu-anchor__pull.asm-toggle .asm-toggle__icon{margin:0 4px 0 8px}:host ::ng-deep .asm-menu--mode-expandable:not(:hover),:host ::ng-deep .asm-menu--mode-mini{width:50px}:host ::ng-deep .asm-menu--mode-expandable:not(:hover)>ul>.asm-menu-item>.asm-menu-anchor .asm-menu-anchor__label,:host ::ng-deep .asm-menu--mode-expandable:not(:hover)>ul>.asm-menu-item>.asm-menu-anchor .asm-menu-anchor__pull,:host ::ng-deep .asm-menu--mode-expandable:not(:hover)>ul>.asm-menu-item>.asm-menu-item__header,:host ::ng-deep .asm-menu--mode-expandable:not(:hover)>ul>.asm-menu-item>.asm-menu-node>.asm-menu-anchor .asm-menu-anchor__label,:host ::ng-deep .asm-menu--mode-expandable:not(:hover)>ul>.asm-menu-item>.asm-menu-node>.asm-menu-anchor .asm-menu-anchor__pull,:host ::ng-deep .asm-menu--mode-expandable:not(:hover)>ul>.asm-menu-item>.asm-menu-node>ul,:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item>.asm-menu-anchor .asm-menu-anchor__label,:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item>.asm-menu-anchor .asm-menu-anchor__pull,:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item>.asm-menu-item__header,:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item>.asm-menu-node>.asm-menu-anchor .asm-menu-anchor__label,:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item>.asm-menu-node>.asm-menu-anchor .asm-menu-anchor__pull,:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item>.asm-menu-node>ul{display:none}:host ::ng-deep .asm-menu--mode-mini .asm-menu-node__label{display:block}:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item{position:relative}:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item:hover>.asm-menu-anchor .asm-menu-anchor__label,:host ::ng-deep .asm-menu--mode-mini>ul>.asm-menu-item:hover>.asm-menu-node>ul{display:block!important;height:auto!important;left:100%;position:absolute;top:0;z-index:999}"] },] } ]; SidebarMenuComponent.ctorParameters = function () { return [ { type: AnchorService }, { type: NodeService }, { type: SearchService }, { type: RoleService } ]; }; SidebarMenuComponent.propDecorators = { _menu: [{ type: core.Input, args: ['menu',] }], iconClasses: [{ type: core.Input }], toggleIconClasses: [{ type: core.Input }], role: [{ type: core.Input }], unAuthorizedVisibility: [{ type: core.Input }], search: [{ type: core.Input }], mode: [{ type: core.Input }] }; var TRANSITION_DURATION = 300; var openCloseAnimation = animations.trigger('openClose', [ animations.state('true', animations.style({ height: animations.AUTO_STYLE })), animations.state('false', animations.style({ height: 0 })), animations.transition('false <=> true', animations.animate(TRANSITION_DURATION + "ms ease-in")), ]); var rotateAnimation = animations.trigger('rotate', [ animations.state('true', animations.style({ transform: 'rotate(-90deg)' })), animations.transition('false <=> true', animations.animate(TRANSITION_DURATION + "ms ease-out")), ]); var ItemComponent = /** @class */ (function () { function ItemComponent(router, roleService, searchService, changeDetectorRef) { this.router = router; this.roleService = roleService; this.searchService = searchService; this.changeDetectorRef = changeDetectorRef; this.isRootNode = true; this.disable = false; this.onDestroy$ = new rxjs.Subject(); this.isActive = new rxjs.BehaviorSubject(false); this.isFiltered = new rxjs.BehaviorSubject(false); this.isActive$ = this.isActive.asObservable().pipe(operators.distinctUntilChanged(), operators.takeUntil(this.onDestroy$)); this.isFiltered$ = this.isFiltered.asObservable().pipe(operators.distinctUntilChanged(), operators.takeUntil(this.onDestroy$)); this.isItemFiltered = false; this.isItemDisabled = false; } Object.defineProperty(ItemComponent.prototype, "filtered", { get: function () { return this.isItemFiltered; }, enumerable: false, configurable: true }); Object.defineProperty(ItemComponent.prototype, "disabled", { get: function () { return this.isItemDisabled || this.disable; }, enumerable: false, configurable: true }); ItemComponent.prototype.ngOnInit = function () { this.routerItemActiveSubscription(); this.emitItemActive(); this.menuSearchSubscription(); this.disabledItemSubscription(); }; ItemComponent.prototype.ngOnDestroy = function () { this.onDestroy$.next(); this.onDestroy$.complete(); }; ItemComponent.prototype.onNodeActive = function (event) { this.isActive.next(event); }; ItemComponent.prototype.onNodeFiltered = function (event) { this.isItemFiltered = event; this.isFiltered.next(event); }; ItemComponent.prototype.routerItemActiveSubscription = function () { var _this = this; this.router.events .pipe(operators.filter(function (e) { return e instanceof router.NavigationEnd; }), operators.takeUntil(this.onDestroy$)) .subscribe(function (e) { _this.emitItemActive(); }); }; ItemComponent.prototype.menuSearchSubscription = function () { var _this = this; if (!this.menuItem.children) { this.searchService.search$.pipe(operators.takeUntil(this.onDestroy$)).subscribe(function (search) { _this.isItemFiltered = _this.searchService.filter(search, _this.menuItem.label || _this.menuItem.header); _this.isFiltered.next(_this.isItemFiltered); _this.changeDetectorRef.markForCheck(); }); } }; ItemComponent.prototype.disabledItemSubscription = function () { var _this = this; this.roleService .disableItem$(this.menuItem.roles) .pipe(operators.takeUntil(this.onDestroy$)) .subscribe(function (disabled) { return (_this.isItemDisabled = disabled); }); }; ItemComponent.prototype.emitItemActive = function () { if (this.menuItem.route) { this.isActive.next(this.isActiveRoute(this.menuItem.route)); } }; ItemComponent.prototype.isActiveRoute = function (route) { return this.router.isActive(route, this.isItemLinkExact()); }; ItemComponent.prototype.isItemLinkExact = function () { return this.menuItem.linkActiveExact === undefined ? true : this.menuItem.linkActiveExact; }; return ItemComponent; }()); ItemComponent.decorators = [ { type: core.Component, args: [{ // tslint:disable-next-line:component-selector selector: 'li[asm-menu-item][menuItem]', animations: [rotateAnimation], changeDetection: core.ChangeDetectionStrategy.OnPush, template: "\n <ng-container [ngSwitch]=\"true\">\n <span *ngSwitchCase=\"!!menuItem.header\" class=\"asm-menu-item__header\">{{ menuItem.header }}</span>\n <asm-menu-anchor\n *ngSwitchCase=\"!menuItem.children && !menuItem.header\"\n class=\"asm-menu-anchor\"\n [menuItem]=\"menuItem\"\n [disable]=\"disable || isItemDisabled\"\n ></asm-menu-anchor>\n <ng-container *ngSwitchCase=\"!!menuItem.children\">\n <asm-menu-anchor\n class=\"asm-menu-anchor\"\n [ngClass]=\"{ 'asm-menu-anchor--open': node.isOpen }\"\n [menuItem]=\"menuItem\"\n (clickAnchor)=\"node.onNodeToggleClick()\"\n [isActive]=\"node.isActiveChild\"\n ><i toggleIcon [@rotate]=\"node.isOpen\" [class]=\"node.nodeService.toggleIconClasses\"></i\n ></asm-menu-anchor>\n <asm-menu-node\n #node\n class=\"asm-menu-node\"\n [menuItem]=\"menuItem\"\n [level]=\"level\"\n [disable]=\"disable || isItemDisabled\"\n (isActive)=\"onNodeActive($event)\"\n (isFiltered)=\"onNodeFiltered($event)\"\n ></asm-menu-node>\n </ng-container>\n </ng-container>\n " },] } ]; ItemComponent.ctorParameters = function () { return [ { type: router.Router }, { type: RoleService }, { type: SearchService }, { type: core.ChangeDetectorRef } ]; }; ItemComponent.propDecorators = { menuItem: [{ type: core.Input }], isRootNode: [{ type: core.Input }], level: [{ type: core.Input }], disable: [{ type: core.Input }], filtered: [{ type: core.HostBinding, args: ['class.asm-menu-item--filtered',] }], disabled: [{ type: core.HostBinding, args: ['class.asm-menu-item--disabled',] }] }; var NodeComponent = /** @class */ (function () { function NodeComponent(nodeService, roleService, changeDetectorRef) { this.nodeService = nodeService; this.roleService = roleService; this.changeDetectorRef = changeDetectorRef; this.disable = false; this.isActive = new core.EventEmitter(); this.isFiltered = new core.EventEmitter(); this.isOpen = false; this.isActiveChild = false; this.trackByItem = trackByItem; this.onDestroy$ = new rxjs.Subject(); } Object.defineProperty(NodeComponent.prototype, "open", { get: function () { return this.isOpen; }, enumerable: false, configurable: true }); NodeComponent.prototype.ngAfterViewInit = function () { this.openedNodeSubscription(); this.activeItemsSubscription(); this.filterItemsSubscription(); }; NodeComponent.prototype.ngOnDestroy = function () { this.onDestroy$.next(); this.onDestroy$.complete(); }; NodeComponent.prototype.onNodeToggleClick = function () { this.isOpen = !this.isOpen; this.nodeService.openedNode.next({ nodeComponent: this, nodeLevel: this.level }); this.changeDetectorRef.markForCheck(); }; NodeComponent.prototype.activeItemsSubscription = function () { var _this = this; var isChildrenItemsActive = this.menuItemComponents.map(function (item) { return item.isActive$; }); if (isChildrenItemsActive && isChildrenItemsActive.length) { rxjs.combineLatest(isChildrenItemsActive) .pipe(operators.takeUntil(this.onDestroy$)) .subscribe(function (itemsActiveState) { _this.isOpen = _this.isActiveChild = itemsActiveState.includes(true); _this.isActive.emit(_this.isOpen); }); } }; NodeComponent.prototype.filterItemsSubscription = function () { var _this = this; var isChildrenItemsFiltered = this.menuItemComponents.map(function (item) { return item.isFiltered$; }); if (isChildrenItemsFiltered && isChildrenItemsFiltered.length) { rxjs.combineLatest(isChildrenItemsFiltered) .pipe(operators.takeUntil(this.onDestroy$)) .subscribe(function (itemsFilteredState) { var isItemsFiltered = itemsFilteredState.includes(false) === false; _this.isFiltered.emit(isItemsFiltered); }); } }; NodeComponent.prototype.openedNodeSubscription = function () { var _this = this; this.nodeService.openedNode .pipe(operators.filter(function () { return !!_this.isOpen; }), operators.filter(function (node) { return node.nodeComponent !== _this; }), operators.takeUntil(this.onDestroy$)) .subscribe(function (node) { if (node.nodeLevel <= _this.level) { _this.isOpen = false; _this.changeDetectorRef.markForCheck(); } }); }; return NodeComponent; }()); NodeComponent.decorators = [ { type: core.Component, args: [{ selector: 'asm-menu-node', animations: [openCloseAnimation], changeDetection: core.ChangeDetectionStrategy.OnPush, template: "<ul [@openClose]=\"isOpen\">\n <li *ngIf=\"level === 0\" class=\"asm-menu-item\">\n <span class=\"asm-menu-node__label\">{{ menuItem.label }}</span>\n </li>\n <ng-container *ngFor=\"let childItem of menuItem.children; trackBy: trackByItem\">\n <li\n asm-menu-item\n class=\"asm-menu-item\"\n *ngIf=\"roleService.showItem$(childItem.roles) | async\"\n [menuItem]=\"childItem\"\n [level]=\"level + 1\"\n [disable]=\"disable\"\n ></li>\n </ng-container>\n </ul>" },] } ]; NodeComponent.ctorParameters = function () { return [ { type: NodeService }, { type: RoleService }, { type: core.ChangeDetectorRef } ]; }; NodeComponent.propDecorators = { menuItem: [{ type: core.Input }], level: [{ type: core.Input }], disable: [{ type: core.Input }], isActive: [{ type: core.Output }], isFiltered: [{ type: core.Output }], open: [{ type: core.HostBinding, args: ['class.asm-menu-node--open',] }], menuItemComponents: [{ type: core.ViewChildren, args: [ItemComponent,] }] }; var AnchorComponent = /** @class */ (function () { function AnchorComponent(anchorService) { this.anchorService = anchorService; this.disable = false; this.clickAnchor = new core.EventEmitter(); } Object.defineProperty(AnchorComponent.prototype, "active", { get: function () { var _a; return this.isActive || (!!((_a = this.routerLinActive) === null || _a === void 0 ? void 0 : _a.isActive) && !this.disable); }, enumerable: false, configurable: true }); return AnchorComponent; }()); AnchorComponent.decorators = [ { type: core.Component, args: [{ selector: 'asm-menu-anchor', changeDetection: core.ChangeDetectionStrategy.OnPush, template: "<ng-container [ngSwitch]=\"true\">\n <a *ngSwitchCase=\"!!menuItem.children\" (click)=\"clickAnchor.emit()\">\n <ng-container *ngTemplateOutlet=\"innerItem\"></ng-container>\n </a>\n <a\n *ngSwitchCase=\"!!menuItem.route || menuItem.route === ''\"\n [routerLink]=\"disable ? undefined : menuItem.route\"\n routerLinkActive\n #rla=\"routerLinkActive\"\n [routerLinkActiveOptions]=\"{ exact: menuItem.linkActiveExact === undefined ? true : menuItem.linkActiveExact }\"\n >\n <ng-container *ngTemplateOutlet=\"innerItem\"></ng-container>\n </a>\n <a *ngSwitchCase=\"!!menuItem.url\" [href]=\"menuItem.url\" [target]=\"menuItem.target\">\n <ng-container *ngTemplateOutlet=\"innerItem\"></ng-container>\n </a>\n </ng-container>\n\n <ng-template #innerItem>\n <i\n *ngIf=\"menuItem.iconClasses || anchorService.iconClasses\"\n [class]=\"menuItem.iconClasses || anchorService.iconClasses\"\n class=\"asm-menu-anchor__icon\"\n ></i>\n <span class=\"asm-menu-anchor__label\">{{ menuItem.label }}</span>\n <span\n *ngIf=\"menuItem.badges || menuItem.children\"\n class=\"asm-menu-anchor__pull\"\n [ngClass]=\"{ 'asm-badges': menuItem.badges, 'asm-toggle': menuItem.children }\"\n >\n <span *ngFor=\"let badge of menuItem.badges\" [class]=\"badge.classes\" class=\"asm-badges__badge\">{{\n badge.label\n }}</span>\n <span class=\"asm-toggle__icon\"><ng-content select=\"[toggleIcon]\"></ng-content></span>\n </span>\n </ng-template>" },] } ]; AnchorComponent.ctorParameters = function () { return [ { type: AnchorService } ]; }; AnchorComponent.propDecorators = { menuItem: [{ type: core.Input }], isActive: [{ type: core.Input }], disable: [{ type: core.Input }], clickAnchor: [{ type: core.Output }], active: [{ type: core.HostBinding, args: ['class.asm-menu-anchor--active',] }], routerLinActive: [{ type: core.ViewChild, args: ['rla',] }] }; var SidebarMenuModule = /** @class */ (function () { function SidebarMenuModule() { } return SidebarMenuModule; }()); SidebarMenuModule.decorators = [ { type: core.NgModule, args: [{ declarations: [SidebarMenuComponent, ItemComponent, NodeComponent, AnchorComponent], imports: [router.RouterModule, common.CommonModule], exports: [SidebarMenuComponent], },] } ]; /* * Public API Surface of angular-sidebar-menu */ /** * Generated bundle index. Do not edit. */ exports.SidebarMenuComponent = SidebarMenuComponent; exports.SidebarMenuModule = SidebarMenuModule; exports.ɵa = NodeService; exports.ɵb = AnchorService; exports.ɵc = RoleService; exports.ɵd = SearchService; exports.ɵe = ItemComponent; exports.ɵf = openCloseAnimation; exports.ɵg = rotateAnimation; exports.ɵh = NodeComponent; exports.ɵi = AnchorComponent; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=angular-sidebar-menu.umd.js.map