{"version":3,"file":"koalarx-ui-menu.mjs","sources":["../../../projects/menu/src/lib/menu.component.ts","../../../projects/menu/src/lib/menu.component.html","../../../projects/menu/src/lib/koala.menu.service.ts","../../../projects/menu/src/lib/koala.menu.module.ts","../../../projects/menu/src/koalarx-ui-menu.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { KoalaMenuModuleInterface } from './koala.menu-module.interface';\nimport { NavigationEnd, Router, Scroll } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\nimport { koala } from '@koalarx/utils';\nimport { map, switchMap } from 'rxjs/operators';\nimport { delay } from '@koalarx/utils/operators/delay';\nimport { KoalaMenuToolInterface } from './koala.menu-tool.interface';\nimport { KoalaIconType } from '@koalarx/ui/icon';\n\nexport type MenuStateType = 'open' | 'close';\nexport const menuStateSubject = new BehaviorSubject<MenuStateType | null>(null);\n\n@Component({\n  selector: 'koala-menu',\n  templateUrl: 'menu.component.html',\n  styleUrls: ['menu.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuComponent implements OnInit {\n  @Input() titleMenu?: string;\n  @Input() optionsSubject?: BehaviorSubject<KoalaMenuModuleInterface[]>;\n\n  constructor(private router: Router) {}\n\n  ngOnInit() {\n    if (this.optionsSubject) {\n      this.optionsSubject.pipe(map((options) => this.defineMenuOptions(options))).subscribe();\n      this.router.events\n        .pipe(\n          switchMap(\n            (event) =>\n              new Promise(async (resolve) => {\n                while (this.optionsSubject?.getValue()?.length === 0) {\n                  await delay(300);\n                }\n\n                resolve(event);\n              }),\n          ),\n        )\n        .pipe(\n          map((event) => {\n            const options = this.cloneOptions();\n            this.optionsSubject?.next(\n              options.map((option) => {\n                option.active = false;\n                return option;\n              }),\n            );\n\n            return event;\n          }),\n        )\n        .subscribe((event) => {\n          switch (true) {\n            case event instanceof Scroll:\n            case event instanceof NavigationEnd:\n              const options = this.cloneOptions();\n              if (options?.length > 0) {\n                this.optionsSubject?.next(this.defineMenuOptions(options, true));\n              }\n          }\n        });\n    }\n  }\n\n  public toogle(module: KoalaMenuModuleInterface) {\n    if (this.optionsSubject) {\n      const options = JSON.parse(JSON.stringify(this.optionsSubject.getValue())) as KoalaMenuModuleInterface[];\n      this.optionsSubject.next(\n        koala(options)\n          .array<KoalaMenuModuleInterface>()\n          .map((item) => {\n            item.animateOpen = false;\n            item.animateClose = false;\n            if (item.name === module.name) {\n              item.expanded = !module.expanded;\n              item.animateOpen = item.expanded;\n              item.animateClose = !item.expanded;\n            } else {\n              item.expanded = false;\n            }\n            return item;\n          })\n          .getValue(),\n      );\n    }\n  }\n\n  public getKoalaIcon(config: KoalaMenuModuleInterface | KoalaMenuToolInterface) {\n    return config.icon as KoalaIconType;\n  }\n\n  private defineMenuOptions(options: KoalaMenuModuleInterface[], routerChange = false) {\n    options.map((module) => {\n      if (routerChange) {\n        module.animateOpen = false;\n        module.animateClose = false;\n        module.active = module.tools\n          ? this.router.url === module.routerLink ||\n            !!module.tools.find((tool) => this.router.url.indexOf(tool.routerLink) >= 0)\n          : this.router.url === module.routerLink;\n        module.expanded = module.active;\n      }\n\n      return module;\n    });\n    return options;\n  }\n\n  private cloneOptions() {\n    return JSON.parse(JSON.stringify(this.optionsSubject?.getValue())) as KoalaMenuModuleInterface[];\n  }\n}\n","<nav>\n  <h2 *ngIf=\"titleMenu\" class=\"title\">{{titleMenu}}</h2>\n  <ul *ngIf=\"(optionsSubject | async) as options\" class=\"list-menu\" [ngClass]=\"{'without-title': !titleMenu}\">\n    <li\n      #moduleItem\n\t    *ngFor=\"let module of options\"\n\t    [ngClass]=\"{\n\t      animateOpen: module.animateOpen,\n\t      animateClose: module.animateClose,\n        expanded: module.expanded,\n        active: module.active\n      }\">\n      <a *ngIf=\"!!module.routerLink else moduleWithoutLink\" [routerLink]=\"module.routerLink\" (click)=\"toogle(module)\" class=\"module\">\n        <mat-icon *ngIf=\"module.icon && !module.koalaIcon\">{{module.icon}}</mat-icon>\n        <koala-icon *ngIf=\"module.icon && module.koalaIcon\" [icon]=\"getKoalaIcon(module)\"></koala-icon>\n        <h3>{{module.name}}</h3>\n        <mat-icon\n\t        *ngIf=\"module.tools?.length ?? 0 > 0\"\n\t        class=\"state-module\">{{module.expanded || module.active ? 'keyboard_arrow_down' : 'keyboard_arrow_right'}}</mat-icon>\n      </a>\n      <ng-template #moduleWithoutLink>\n        <div (click)=\"toogle(module)\" class=\"module\">\n          <mat-icon *ngIf=\"module.icon && !module.koalaIcon\">{{module.icon}}</mat-icon>\n          <koala-icon *ngIf=\"module.icon && module.koalaIcon\" [icon]=\"getKoalaIcon(module)\" [size]=\"18\"></koala-icon>\n          <h3>{{module.name}}</h3>\n          <mat-icon\n\t          *ngIf=\"module.tools?.length ?? 0 > 0\"\n\t          class=\"state-module\">{{module.expanded || module.active ? 'keyboard_arrow_down' : 'keyboard_arrow_right'}}</mat-icon>\n        </div>\n      </ng-template>\n      <ul *ngIf=\"module.tools?.length ?? 0 > 0\">\n        <li *ngFor=\"let tool of module.tools\">\n\t\t      <a [routerLink]=\"tool.routerLink\" routerLinkActive=\"active\">\n\t          <mat-icon *ngIf=\"tool.icon && !tool.koalaIcon\">{{tool.icon}}</mat-icon>\n            <koala-icon *ngIf=\"tool.icon && tool.koalaIcon\" [icon]=\"getKoalaIcon(tool)\" [size]=\"18\"></koala-icon>\n\t          <h4>{{tool.name}}</h4>\n\t\t      </a>\n        </li>\n      </ul>\n    </li>\n  </ul>\n</nav>\n","import { Injectable } from '@angular/core';\nimport { menuStateSubject, MenuStateType } from './menu.component';\n\n@Injectable({providedIn: \"any\"})\nexport class KoalaMenuService {\n\n\tpublic getMenuState(): MenuStateType | null {\n\t\treturn menuStateSubject.getValue();\n\t}\n\n\tpublic open() {\n\t\tmenuStateSubject.next('open');\n\t}\n\n\tpublic close() {\n\t\tmenuStateSubject.next('close');\n\t}\n\n\tpublic clearConfig() {\n\t\tmenuStateSubject.next(null);\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { MenuComponent } from './menu.component';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterModule } from '@angular/router';\nimport { KoalaIconModule } from \"@koalarx/ui/icon\";\n\n@NgModule({\n  declarations: [\n    MenuComponent\n  ],\n  imports: [\n    CommonModule,\n    RouterModule,\n    MatIconModule,\n    KoalaIconModule\n  ],\n  exports: [\n    MenuComponent\n  ]\n})\nexport class KoalaMenuModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}