UNPKG

@ngx-smart/ngx-smart-sidebar

Version:

A customizable, collapsible, responsive, feature-rich sidebar component for Angular apps.

1 lines 17.8 kB
{"version":3,"file":"ngx-smart-ngx-smart-sidebar.mjs","sources":["../../../projects/sidebar/src/lib/sidebar.service.ts","../../../projects/sidebar/src/lib/sidebar.component.ts","../../../projects/sidebar/src/public-api.ts","../../../projects/sidebar/src/ngx-smart-ngx-smart-sidebar.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\nexport interface SidebarState {\n isCollapsed: boolean;\n position: 'left' | 'right';\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SidebarService {\n private sidebarStates: { [key: string]: BehaviorSubject<SidebarState> } = {};\n\n getSidebarState(id: string): Observable<SidebarState> {\n if (!this.sidebarStates[id]) {\n this.sidebarStates[id] = new BehaviorSubject<SidebarState>({\n isCollapsed: false,\n position: 'left',\n });\n }\n return this.sidebarStates[id].asObservable();\n }\n\n setSidebarState(id: string, state: Partial<SidebarState>): void {\n if (!this.sidebarStates[id]) {\n this.sidebarStates[id] = new BehaviorSubject<SidebarState>({\n isCollapsed: false,\n position: 'left',\n });\n }\n const currentState = this.sidebarStates[id].value;\n this.sidebarStates[id].next({ ...currentState, ...state });\n }\n\n toggleSidebar(id: string): void {\n const currentState = this.sidebarStates[id]?.value;\n if (currentState) {\n this.sidebarStates[id].next({\n ...currentState,\n isCollapsed: !currentState.isCollapsed,\n });\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n HostListener,\n ElementRef,\n} from '@angular/core';\nimport { NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { SidebarService } from './sidebar.service';\n\nexport type SidebarPosition = 'left' | 'right';\nexport type SidebarWidth = 'small' | 'medium' | 'large';\n\nexport interface SidebarLabel {\n label: string;\n path?: string;\n children?: SidebarLabel[];\n isExpanded?: boolean;\n}\n\nexport interface SidebarSection {\n header: string;\n labels: SidebarLabel[];\n}\n\n@Component({\n selector: 'lib-sidebar',\n standalone: true,\n imports: [CommonModule, RouterModule],\n template: ` <nav\n class=\"sidebar\"\n [ngClass]=\"[\n position === 'left' ? 'left' : 'right',\n width === 'small' ? 'small' : width === 'medium' ? 'medium' : 'large',\n isCollapsed ? 'collapsed' : ''\n ]\"\n [ngStyle]=\"{\n 'background-color': sidebarBackgroundColor\n ? sidebarBackgroundColor\n : 'transparent'\n }\"\n >\n <ng-content\n class=\"sidebar-content-wrapper\"\n select=\"[sidebarHeaderContent]\"\n ></ng-content>\n <header *ngIf=\"title || collapsible\" class=\"sidebar-header\">\n <h3 *ngIf=\"title\">{{ title }}</h3>\n <button\n *ngIf=\"collapsible\"\n class=\"toggle-btn\"\n (click)=\"toggleSidebarState()\"\n >\n {{ isCollapsed ? '☰' : '✕' }}\n </button>\n </header>\n\n <ul class=\"sidebar-menu\" *ngIf=\"items?.length\">\n <ng-container *ngFor=\"let item of items; let i = index\">\n <div class=\"labels-list\">\n <li class=\"section-header\">\n {{ item.header }}\n </li>\n\n <li\n *ngFor=\"let label of item.labels; let j = index\"\n class=\"menu-item\"\n [class.active]=\"activeItemPath === label.path\"\n [class.has-children]=\"label.children\"\n >\n <a\n (click)=\"onItemClick(label, $event)\"\n [routerLink]=\"label.path || null\"\n [ngStyle]=\"{\n 'background-color':\n hoverItemIndex === i && hoverLabelIndex === j\n ? backgroundHighlightColor\n : 'transparent'\n }\"\n (mouseenter)=\"hoverItemIndex = i; hoverLabelIndex = j\"\n (mouseleave)=\"hoverItemIndex = null; hoverLabelIndex = null\"\n >\n <span\n *ngIf=\"label.children?.length\"\n class=\"caret\"\n [class.rotated]=\"label.isExpanded !== false\"\n >\n {{ label.isExpanded !== false ? '⌄' : '›' }}\n </span>\n <span>{{ label.label }}</span>\n </a>\n <ul\n *ngIf=\"label.children && label.isExpanded !== false\"\n class=\"submenu\"\n role=\"menu\"\n >\n <li\n *ngFor=\"let child of label.children; let k = index\"\n [class.active]=\"activeItemPath === child.path\"\n class=\"submenu-item\"\n >\n <a\n [routerLink]=\"child.path\"\n (click)=\"sidebarItemSelected.emit(child)\"\n [ngStyle]=\"{\n 'background-color':\n hoverItemIndex === i &&\n hoverLabelIndex === j &&\n hoverChildIndex === k\n ? backgroundHighlightColor\n : 'transparent'\n }\"\n (mouseenter)=\"\n hoverItemIndex = i; hoverLabelIndex = j; hoverChildIndex = k\n \"\n (mouseleave)=\"hoverChildIndex = null\"\n >\n {{ child.label }}\n </a>\n </li>\n </ul>\n </li>\n </div>\n </ng-container>\n </ul>\n <ng-content\n class=\"sidebar-content-wrapper\"\n select=\"[sidebarFooterContent]\"\n ></ng-content>\n </nav>`,\n styles: `:host {\n display: block;\n}\n\n.sidebar {\n transition: width 0.3s ease, transform 0.3s ease;\n height: 100vh;\n overflow-y: auto;\n position: fixed;\n top: 0;\n background-color: #fff;\n z-index: 1000;\n padding: 30px 12px;\n word-break: break-word;\n\n &.collapsed {\n width: 40px !important;\n\n .sidebar-header {\n justify-content: center;\n padding: 12px 0;\n\n h3 {\n display: none;\n }\n }\n\n .sidebar-header h3,\n .menu-item span,\n .submenu,\n .caret,\n .section-header {\n display: none;\n }\n }\n\n &.left {\n left: 0;\n }\n\n &.right {\n right: 0;\n }\n\n &.small {\n width: 150px;\n }\n\n &.medium {\n width: 250px;\n }\n\n &.large {\n width: 300px;\n }\n}\n\n.sidebar-content-wrapper {\n display: flex;\n align-items: center;\n padding: 16px 0;\n font-size: 14px;\n color: #132644;\n font-weight: 600;\n}\n\n.sidebar-header {\n display: flex;\n justify-content: space-between;\n padding-bottom: 12px;\n margin-bottom: 12px;\n border-bottom: 1px solid #e0e0e0;\n\n h3 {\n margin: 0;\n font-size: 16px;\n color: #333;\n font-weight: 600;\n }\n\n .toggle-btn {\n background: none;\n border: none;\n font-size: 16px;\n cursor: pointer;\n color: #666;\n display: block !important;\n }\n}\n\n.sidebar-menu {\n list-style: none;\n padding: 0;\n margin: 0;\n\n .labels-list {\n margin-bottom: 20px;\n }\n\n .section-header {\n margin-bottom: 4px;\n font-size: 14px;\n color: #132644;\n font-weight: 700;\n text-transform: uppercase;\n display: flex;\n align-items: center;\n }\n\n .has-children {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n\n .menu-item {\n &.active {\n a {\n color: #007bff;\n font-weight: 700;\n }\n }\n\n a {\n display: flex;\n align-items: center;\n padding: 10px;\n text-decoration: none;\n font-size: 12px;\n font-weight: 600;\n color: #132644;\n transition: background-color 0.2s;\n\n .caret {\n margin-right: 10px;\n font-size: 12px;\n font-weight: 500;\n color: #757575;\n transition: transform 0.3s ease;\n\n span {\n font-size: 16px;\n font-weight: 600;\n }\n }\n }\n }\n\n .submenu {\n padding: 0;\n list-style: none;\n margin: 0 0 16px 16px;\n border-left: 2px solid #e0e0e0;\n\n .submenu-item {\n margin: 0px;\n\n &.active {\n a {\n color: #007bff;\n font-weight: 700;\n }\n }\n\n a {\n padding: 8px 0 8px 20px;\n display: block;\n color: #5e6e87;\n font-size: 12px;\n font-weight: 700;\n transition: all 0.3s ease;\n }\n }\n }\n}\n`,\n})\nexport class SidebarComponent {\n @Input() position: SidebarPosition = 'left';\n @Input() width: SidebarWidth = 'medium';\n @Input() title: string = '';\n @Input() backgroundHighlightColor: string = '#e9ecef';\n @Input() items: SidebarSection[] = [];\n @Input() activeItemPath: string = '';\n @Input() sidebarId: string = '';\n @Input() collapsible: boolean = true;\n @Input() hideSidebarOnPathChange: boolean = false;\n @Input() closeOnClickOutside: boolean = false;\n @Input() sidebarBackgroundColor: string = '#ffffff';\n\n @Output() sidebarItemSelected = new EventEmitter<SidebarLabel>();\n @Output() toggleSidebar = new EventEmitter<boolean>();\n\n isCollapsed = false;\n hoverItemIndex: number | null = null; // corresponds to i\n hoverLabelIndex: number | null = null; // corresponds to j\n hoverChildIndex: number | null = null; // corresponds to k\n\n private stateSubscription?: Subscription;\n\n constructor(\n private sidebarService: SidebarService,\n private router: Router,\n private elementRef: ElementRef\n ) {}\n\n ngOnInit(): void {\n this.sidebarService.setSidebarState(this.sidebarId, {\n isCollapsed: this.isCollapsed,\n position: this.position,\n });\n\n this.items?.forEach((section) => {\n section.labels?.forEach((label) => {\n if (label.children) {\n label.isExpanded = true;\n }\n });\n });\n\n this.stateSubscription = this.sidebarService\n .getSidebarState(this.sidebarId)\n .subscribe((state) => {\n this.isCollapsed = state.isCollapsed;\n this.position = state.position;\n });\n\n if (this.hideSidebarOnPathChange) {\n this.stateSubscription.add(\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.sidebarService.setSidebarState(this.sidebarId, {\n isCollapsed: true,\n });\n }\n })\n );\n }\n }\n\n ngOnDestroy(): void {\n this.stateSubscription?.unsubscribe();\n }\n\n @HostListener('document:click', ['$event'])\n onClickOutside(event: MouseEvent) {\n if (!this.closeOnClickOutside || this.isCollapsed) {\n return;\n }\n\n const clickedInside = this.elementRef.nativeElement.contains(event.target);\n if (!clickedInside) {\n this.sidebarService.setSidebarState(this.sidebarId, {\n isCollapsed: true,\n });\n }\n }\n\n toggleSidebarState(): void {\n if (!this.collapsible) return;\n this.sidebarService.toggleSidebar(this.sidebarId);\n this.toggleSidebar.emit(this.isCollapsed);\n }\n\n onItemClick(item: SidebarLabel, event: Event): void {\n if (item.children) {\n item.isExpanded = !item.isExpanded;\n event.preventDefault();\n } else if (item.path) {\n this.sidebarItemSelected.emit(item);\n }\n }\n}\n","/*\n * Public API Surface of sidebar\n */\n\nexport * from './lib/sidebar.service';\nexport * from './lib/sidebar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SidebarService"],"mappings":"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"}