{"version":3,"file":"ngx-menubar.mjs","sources":["../../../projects/ngx-menubar/src/lib/cyx-menubar.component.ts","../../../projects/ngx-menubar/src/lib/cyx-menubar.component.html","../../../projects/ngx-menubar/src/public-api.ts","../../../projects/ngx-menubar/src/ngx-menubar.ts"],"sourcesContent":["import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {CommonModule} from \"@angular/common\";\nimport {DomSanitizer, SafeHtml} from \"@angular/platform-browser\";\nimport {BehaviorSubject, debounceTime, distinctUntilChanged, map} from \"rxjs\";\n\n/**\n * Menubar menu item type.\n */\nexport interface IMenuItem {\n  id: number | string;\n  title: string;\n  icon?: string;\n  children?: IMenuItem[];\n  data?: { [key: string]: any }\n}\n\n/**\n * Global menu item Search configuration type.\n */\nexport interface SearchConfig {\n  placeHolder?: string;\n  predicate?: (keyword: string, item: IMenuItem) => boolean;\n}\n\n/**\n * Simple basic menubar with step-into view display menu items(not tree view display).\n * @usageNotes\n * ```html\n * <style>\n *   .container {\n *      width: 350px;\n *      height: 500px;\n *      box-shadow: 1px 2px 8px rgba(0, 0, 0, .45);\n *   }\n * </style>\n *\n * <div class=\"container\">\n *  <cyx-menubar #menubar [datasource]=\"navs\"></cyx-menubar>\n * </div>\n * ```\n * @see IMenuItem\n */\n@Component({\n  standalone: true,\n  selector: 'cyx-menubar',\n  templateUrl: 'cyx-menubar.component.html',\n  imports: [\n    CommonModule\n  ],\n  styleUrls: ['cyx-menubar.component.scss',\n    'cyx-menubar.light.component.scss',\n    'cyx-menubar.dark.component.scss']\n})\nexport class CyxMenubarComponent implements OnInit, OnChanges {\n  /**\n   * Default Top menu title.\n   */\n  @Input() title: string = 'Menu';\n  /**\n   * Menu items.\n   */\n  @Input() datasource: IMenuItem[] = [];\n  /**\n   * Theme color, 'dark' or 'light'.\n   */\n  @Input() color: string = 'dark';\n  /**\n   * Show bottom doc panel.\n   */\n  @Input() showDocPanel: boolean = false;\n  /**\n   * Show menu icon.\n   */\n  @Input() showMenuIcon: boolean = true;\n  /**\n   * Parse icon which from menu item data field {@link IMenuItem#icon}, e.g.\n   * ```javascript\n   *  // menu item data.\n   *  {id: 1, title: '...', icon: 'deployed_code'}\n   *\n   *  // font icon.\n   *  icon => `<span class=\"material-symbols-sharp\">${icon}</span>`\n   *\n   *  // svg icon.\n   *  icon => `<svg viewBox=\"...\">...</svg>`\n   * ```\n   * @param icon icon name.\n   */\n  @Input() iconParser: (icon: string) => string = (icon: string) => icon;\n  /**\n   * Global menu item search configuration.\n   */\n  @Input() searchConfig: SearchConfig = {\n    placeHolder: 'search',\n    predicate: (keyword, item) => item.title.toLowerCase().includes(keyword.toLowerCase())\n  }\n  /**\n   * Active item id.\n   */\n  @Input() active?: number | string;\n  /**\n   * Menu item click event.\n   */\n  @Output() itemClick: EventEmitter<IMenuItem> = new EventEmitter<IMenuItem>();\n\n  protected indices: number[] = [];\n  protected currentTitle?: string | null = null;\n  protected currentChildren: IMenuItem[] = [];\n  protected flattenItems: IMenuItem[] = [];\n\n  /**\n   * Selected item.\n   */\n  selectedItem: IMenuItem | null = null;\n\n  private searchPredicate!: (keyword: string, item: IMenuItem) => boolean;\n\n  private _displayItems: IMenuItem[] = [];\n  protected get displayItems() {\n    return this._displayItems;\n  }\n\n  /**\n   * Is menu top level.\n   */\n  get isTopMenu(): boolean {\n    return this.indices.length === 0;\n  }\n\n  protected readonly searchTerms = new BehaviorSubject<string>('');\n\n  constructor(private sanitizer: DomSanitizer) {\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['datasource']) {\n      this.doFlatDatasource(this.datasource);\n    }\n    if (changes['active'] && this.active) {\n      this.doActiveItemById(this.active);\n    }\n  }\n\n  ngOnInit(): void {\n    this.doFlatDatasource(this.datasource);\n    if (this.active) {\n      this.doActiveItemById(this.active);\n    } else {\n      this.currentChildren = this.datasource;\n      this._displayItems = this.currentChildren;\n    }\n    this.searchPredicate = this.searchConfig.predicate || (() => true);\n\n    this.searchTerms.pipe(\n      debounceTime(300),\n      distinctUntilChanged(),\n      map(term => term.trim())\n    ).subscribe(term => {\n      if (term) {\n        this._displayItems = this.flattenItems.filter(item => this.searchPredicate(term, item));\n        return;\n      }\n      this._displayItems = this.currentChildren;\n    });\n  }\n\n  protected doActiveItemById(id: number | string) {\n    const activeItem = this.flattenItems.find(i => i.id === id);\n    if (activeItem) {\n      this.currentChildren = [activeItem];\n      this._displayItems = this.currentChildren;\n    }\n  }\n\n  private doFlatDatasource(datasource: IMenuItem[]) {\n    const flatting = (items: IMenuItem[]): IMenuItem[] => {\n      return items.reduce((acc: IMenuItem[], curr) => {\n        if (curr.children && curr.children.length > 0) {\n          acc.push({\n            id: curr.id,\n            title: curr.title,\n            icon: curr.icon,\n            data: curr.data,\n            children: curr.children,\n          });\n          return acc.concat(flatting(curr.children));\n        }\n        acc.push(curr);\n        return acc;\n      }, []);\n    }\n    this.flattenItems = flatting(datasource);\n  }\n\n  protected iconHTML(icon: string): SafeHtml {\n    const iconHTMLString = this.iconParser(icon);\n    return this.sanitizer.bypassSecurityTrustHtml(iconHTMLString);\n  }\n\n  protected clickItem(item: IMenuItem, index: number) {\n    this.selectedItem = item;\n    if (item.children && item.children.length > 0) {\n      this.indices.push(index);\n      this.currentTitle = item.title;\n      this.currentChildren = item.children;\n      this._displayItems = this.currentChildren;\n    }\n    this.itemClick.emit(item);\n  }\n\n  protected backward() {\n    this.indices.pop();\n    if (this.isTopMenu) {\n      this.currentTitle = null;\n      this.currentChildren = this.datasource;\n      this._displayItems = this.currentChildren;\n      return;\n    }\n    let prevItem: IMenuItem | null = null;\n    let prevItems: IMenuItem[] = this.datasource;\n    for (const index of this.indices) {\n      prevItem = prevItems[index];\n      prevItems = prevItem.children || [];\n    }\n    this.currentTitle = prevItem?.title;\n    this.currentChildren = prevItems;\n    this._displayItems = this.currentChildren;\n  }\n\n  protected trackById(_: number, item: IMenuItem) {\n    return item.id;\n  }\n\n  protected searchItems(value: string) {\n    this.searchTerms.next(value);\n  }\n}\n","<div class=\"menubar\" [ngClass]=\"color\">\n  <header>\n    <div class=\"backrow\" (click)=\"backward()\">\n      <svg viewBox=\"0 0 542.187 461.8\" class=\"icon\" *ngIf=\"isTopMenu && showMenuIcon\">\n        <g>\n          <path\n            d=\"M184.508 112.461V1.656h357.677v110.805H184.508M184.508 287.127V176.329h357.679v110.798H184.508M184.508 461.8V351h357.681v110.8H184.508M116.022 58.001c0 32.044-25.974 58.011-58.012 58.011C25.973 116.012 0 90.045 0 58.002 0 25.961 25.973-.005 58.01-.005c32.038 0 58.012 25.967 58.012 58.005M116.022 224.827c0 32.037-25.974 58.01-58.012 58.01-32.037 0-58.01-25.973-58.01-58.01 0-32.036 25.973-58.011 58.01-58.011 32.038 0 58.012 25.975 58.012 58.01M116.022 403.357c0 32.038-25.974 58.011-58.012 58.011-32.037 0-58.01-25.973-58.01-58.01 0-32.04 25.973-58.01 58.01-58.01 32.038 0 58.012 25.97 58.012 58.01\"></path>\n        </g>\n      </svg>\n      <svg viewBox=\"0 0 14.2 21\" class=\"icon\" *ngIf=\"!isTopMenu\">\n        <path d=\"M10.5 21l3.7-3.7-6.8-6.8 6.8-6.8L10.5 0 0 10.5z\"></path>\n      </svg>\n      <h1 class=\"label\" [class.no-icon-title]=\"!showMenuIcon && isTopMenu\">\n        <ng-container *ngIf=\"currentTitle else defaultMenu\">{{ currentTitle }}</ng-container>\n        <ng-template #defaultMenu>\n          {{ title }}\n        </ng-template>\n      </h1>\n    </div>\n  </header>\n\n  <header class=\"search\">\n    <input type=\"text\" #searchBox [placeholder]=\"searchConfig.placeHolder || ''\"\n           [value]=\"searchTerms.getValue()\"\n           (input)=\"searchItems(searchBox.value)\"\n           (keydown.enter)=\"searchItems(searchBox.value)\">\n\n    <svg *ngIf=\"searchBox.value else queryIcon\" viewBox=\"0 0 18 18\" class=\"icon small\"\n         (click)=\"searchBox.value = '';searchBox.focus();searchTerms.next('');\">\n      <path\n        d=\"M12.2 9l5.6-5.6c.2-.2.2-.6 0-.8L15.4.2c-.2-.2-.6-.2-.8 0L9 5.8 3.4.2c-.2-.2-.6-.2-.8 0L.2 2.5c-.2.2-.2.6 0 .8L5.8 9 .2 14.6c-.2.2-.2.6 0 .8l2.4 2.4c.2.2.6.2.8 0L9 12.2l5.6 5.6c.2.2.6.2.8 0l2.4-2.4c.2-.2.2-.6 0-.8L12.2 9z\"></path>\n    </svg>\n    <ng-template #queryIcon>\n      <svg viewBox=\"0 0 594.573 594.107\" class=\"icon small\" (click)=\"searchBox.focus()\">\n        <path\n          d=\"M234.513 411.179c-96.785-.622-175.027-79.878-174.416-176.67.62-96.172 79.352-174.416 175.5-174.421l1.174.003c46.889.294 90.857 18.832 123.8 52.198 32.94 33.367 50.918 77.57 50.616 124.468-.296 46.687-18.703 90.524-51.823 123.42-33.112 32.894-77.04 51.003-123.69 51.003zm351.942 89.513l-3.588-3.585.008-.003-143.352-143.363c19.917-34.312 31.488-74.086 31.76-116.601C472.117 106.987 367.296.816 237.152-.003c-.525-.002-1.035-.002-1.557-.002C106.18 0 .838 104.516.005 234.125-.82 364.271 104.003 470.44 234.133 471.271c.519.002 1.022.005 1.54.005 43.258 0 83.795-11.72 118.664-32.1l143.226 143.241.013-.012 3.581 3.58c10.834 10.832 28.391 10.823 39.219 0l46.079-46.072c10.822-10.822 10.829-28.39 0-39.22\"></path>\n      </svg>\n    </ng-template>\n  </header>\n\n  <ul class=\"list\">\n    <li *ngFor=\"let item of displayItems;index as i;trackBy:trackById\" (click)=\"clickItem(item,i)\"\n        [class.selected]=\"item === selectedItem\">\n      <div class=\"title\">\n        <ng-container *ngIf=\"item.icon else defaultItemIcon\">\n          <div class=\"icon\" [innerHTML]=\"iconHTML(item.icon)\"></div>\n        </ng-container>\n        <ng-template #defaultItemIcon>\n          <svg class=\"icon\" viewBox=\"0 -960 960 960\">\n            <path\n              d=\"M480.276-96Q401-96 331-126q-70-30-122.5-82.5T126-330.958q-30-69.959-30-149.5Q96-560 126-629.5t82.5-122Q261-804 330.958-834q69.959-30 149.5-30Q560-864 629.5-834t122 82.5Q804-699 834-629.276q30 69.725 30 149Q864-401 834-331q-30 70-82.5 122.5T629.276-126q-69.725 30-149 30Z\"/>\n          </svg>\n        </ng-template>\n        <span class=\"label\">{{ item.title }}</span>\n      </div>\n      <svg class=\"small icon\" viewBox=\"0 0 14.2 21\"\n           *ngIf=\"(item.children && item.children.length > 0)\">\n        <path d=\"M14.2 10.5L3.7 0 0 3.7l6.8 6.8L0 17.3 3.7 21z\"></path>\n      </svg>\n    </li>\n  </ul>\n\n  <div class=\"doc\" *ngIf=\"showDocPanel\">\n    <ng-content></ng-content>\n  </div>\n</div>\n","/*\n * Public API Surface of ngx-menubar\n */\n\nexport * from './lib/cyx-menubar.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}