{"version":3,"file":"tableau-ui-angular-menu-button.mjs","sources":["../../../projects/component-library/menu-button/src/menu-button.component.ts","../../../projects/component-library/menu-button/src/pipes/entries.pipe.ts","../../../projects/component-library/menu-button/src/menu-button-group.component.ts","../../../projects/component-library/menu-button/src/tableau-ui-menu-button.module.ts","../../../projects/component-library/menu-button/src/tableau-ui-angular-menu-button.ts"],"sourcesContent":["import type { ElementRef, InputSignal, OnDestroy, TemplateRef, WritableSignal } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, contentChildren, effect, input, output, signal, viewChild } from '@angular/core';\n\nimport { generateRandomString } from 'tableau-ui-angular/utils';\n\n@Component({\n  selector: 'tab-menu-button',\n  standalone: false,\n  template: `\n    <ng-template #template>\n      <div\n        class=\"menu-button\"\n        role=\"button\"\n        type=\"button\"\n        tabindex=\"-1\"\n        [ngClass]=\"$color()\"\n        [class.loading]=\"$loading()\"\n        [class.highlight]=\"$highlight()\"\n        [attr.disabled]=\"$disabled() || $loading() ? true : false\"\n        [id]=\"id\"\n        (mouseenter)=\"onMouseEnter()\"\n        (mouseleave)=\"onMouseLeave()\"\n        (mousedown)=\"onMouseDown($event)\"\n        (click)=\"onClick($event)\"\n      >\n        @if ($loading()) {\n          <span class=\"loader-wrapper\">\n            <img\n              alt=\"Wait indicator\"\n              class=\"f79w7hb\"\n              src=\"data:image/svg+xml,%0A%3Csvg%20viewBox%3D%220%200%2050%2050%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Cstyle%3E%0A%20%20%20%20%23tail%20%7B%20fill%3A%20url(%23fade)%20%7D%0A%20%20%20%20%23head%20%7B%20fill%3A%20rgb(97%2C%20101%2C%20112)%20%7D%0A%20%20%20%20stop%20%7B%20stop-color%3A%20rgb(97%2C%20101%2C%20112)%20%7D%0A%20%20%3C%2Fstyle%3E%0A%20%20%3ClinearGradient%20id%3D%22fade%22%20x2%3D%2250%22%20y1%3D%2225%22%20y2%3D%2225%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%0A%20%20%20%20%3Cstop%20offset%3D%220%22%20stop-opacity%3D%220%22%2F%3E%0A%20%20%20%20%3Cstop%20offset%3D%22.15%22%20stop-opacity%3D%22.04%22%2F%3E%0A%20%20%20%20%3Cstop%20offset%3D%22.3%22%20stop-opacity%3D%22.16%22%2F%3E%0A%20%20%20%20%3Cstop%20offset%3D%22.45%22%20stop-opacity%3D%22.36%22%2F%3E%0A%20%20%20%20%3Cstop%20offset%3D%22.61%22%20stop-opacity%3D%22.64%22%2F%3E%0A%20%20%20%20%3Cstop%20offset%3D%22.76%22%2F%3E%0A%20%20%3C%2FlinearGradient%3E%0A%20%20%3Cpath%20id%3D%22head%22%20d%3D%22M0%2025a25%2025%200%201%200%2050%200h-3.9a21.1%2021.1%200%201%201-42.2%200%22%20%2F%3E%0A%20%20%3Cpath%20id%3D%22tail%22%20d%3D%22M50%2025a25%2025%200%200%200-50%200h3.9a21.1%2021.1%200%201%201%2042.2%200%22%20%2F%3E%0A%3C%2Fsvg%3E\"\n            />\n          </span>\n        }\n        <div class=\"button-content\"><ng-content /></div>\n        @if ($children().length > 0) {\n          <tab-icon class=\"expand\" value=\"keyboard_arrow_right\" />\n        }\n      </div>\n    </ng-template>\n  `,\n  styleUrl: './menu-button.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MenuButtonComponent implements OnDestroy {\n  readonly id: string;\n  protected readonly contentElement = viewChild<ElementRef>('buttonElement');\n  readonly $disabled = input(false, {\n    alias: 'disabled',\n  });\n  readonly $loading = input(false, {\n    alias: 'loading',\n  });\n  readonly $color = input<'error' | 'plain' | 'primary' | 'secondary'>('secondary', {\n    alias: 'color',\n  });\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  readonly $hoverToOpenSubMenuMs: InputSignal<number | undefined> = input<number | undefined>(undefined, {\n    alias: 'hoverToOpenSubMenuMs',\n  });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  readonly $actualHoverMs: WritableSignal<number | undefined> = signal<number | undefined>(undefined);\n  readonly updateChildrenHover = effect(() => {\n    const hoverMs = this.$actualHoverMs();\n    const children = this.$children();\n    for (const child of children) {\n      if (child.$hoverToOpenSubMenuMs() !== undefined) {\n        child.$actualHoverMs.set(child.$hoverToOpenSubMenuMs());\n      } else {\n        child.$actualHoverMs.set(hoverMs);\n      }\n    }\n  });\n  // children = contentChildren(MenuButtonComponent);\n\n  readonly $highlight = signal(false);\n  highlightEffect = effect(() => {\n    this.highlightChange.emit(this.$highlight());\n  });\n  readonly highlightChange = output<boolean>();\n\n  readonly $children = contentChildren(MenuButtonComponent);\n  readonly mouseoverChange = output<boolean>();\n  readonly $template = viewChild.required<TemplateRef<null>>('template');\n\n  readonly openSubMenu = output<Event>();\n\n  // eslint-disable-next-line @angular-eslint/no-output-native\n  readonly click = output<Event>();\n  constructor() {\n    this.id = generateRandomString();\n  }\n\n  hoverInterval: ReturnType<typeof setTimeout> | undefined = undefined;\n  hoverstart = Date.now();\n  onMouseEnter() {\n    if (!this.$disabled()) {\n      this.mouseoverChange.emit(true);\n      const hoverMs = this.$actualHoverMs();\n      if (hoverMs !== undefined && this.$children().length > 0) {\n        this.hoverstart = Date.now();\n        this.hoverInterval = setInterval(() => {\n          if (Date.now() - this.hoverstart > hoverMs) {\n            this.openSubMenu.emit(new Event('mouseenter'));\n            if (this.hoverInterval) {\n              clearInterval(this.hoverInterval);\n            }\n          }\n        }, 50);\n      }\n    }\n  }\n  onMouseLeave() {\n    if (this.hoverInterval) {\n      clearInterval(this.hoverInterval);\n    }\n    this.$highlight.set(false);\n  }\n\n  ngOnDestroy(): void {\n    if (this.hoverInterval) {\n      clearInterval(this.hoverInterval);\n    }\n  }\n\n  onMouseDown(e: Event) {\n    e.preventDefault();\n    e.stopPropagation();\n  }\n\n  onClick(e: Event) {\n    if (this.$disabled()) {\n      return;\n    }\n    if (this.$children().length > 0) {\n      this.openSubMenu.emit(e);\n      e.preventDefault();\n      e.stopPropagation();\n    } else {\n      console.log('MenuButtonComponent clicked');\n      this.click.emit(e);\n    }\n  }\n\n  // @HostListener('click', ['$event'])\n  // onClick(e: Event) {\n  //     if (!this.disabled() && this.childMenu() !== undefined) {\n  //         this.childMenu()?.open();\n  //         e.preventDefault();\n  //         e.stopPropagation();\n  //     }\n  // }\n}\n","import type { PipeTransform } from '@angular/core';\nimport { Pipe } from '@angular/core';\n\n@Pipe({\n  name: 'entries',\n  standalone: false,\n})\nexport class EntriesPipe implements PipeTransform {\n  transform<T>(arr: readonly T[]) {\n    return [...arr.entries()];\n  }\n}\n","import type { AfterViewInit, InputSignal, OnDestroy, OutputRefSubscription, WritableSignal } from '@angular/core';\nimport { ChangeDetectionStrategy, Component, contentChildren, effect, ElementRef, HostListener, inject, input, output, signal } from '@angular/core';\nimport { MenuButtonComponent } from './menu-button.component';\nimport { generateRandomString } from 'tableau-ui-angular/utils';\nimport { ButtonMenuDirective } from 'tableau-ui-angular/menu';\n\n@Component({\n  selector: 'tab-menu-button-group',\n  standalone: false,\n  template: `\n    @for (entry of $menuGroupStack() | entries; track entry[1].id) {\n      <!-- eslint-disable @angular-eslint/template/prefer-template-literal -->\n      <div\n        class=\"menu-group\"\n        resizeWatcher\n        [id]=\"entry[1].id\"\n        [style.position]=\"entry[1].$position()\"\n        [style.top]=\"entry[1].$top() + 'px'\"\n        [style.left]=\"entry[1].$left() + 'px'\"\n        [style.minWidth]=\"entry[1].$minWidth()\"\n        (resized)=\"entry[1].element = $event.currentElement.nativeElement; updateSizes()\"\n      >\n        @for (btnEntry of entry[1].buttons | entries; track btnEntry[0]) {\n          <ng-container *ngTemplateOutlet=\"btnEntry[1].$template()\" />\n        }\n      </div>\n    }\n  `,\n  styles: [\n    `\n      :host {\n        outline: none !important;\n        position: relative;\n        display: block;\n        width: 100%;\n        user-select: none;\n      }\n    `,\n    `\n      .menu-group {\n        background: var(--twc-color-base);\n        border-color: var(--twc-color-border-light);\n        border-radius: var(--twc-menu-border-radius);\n        border-style: solid;\n        border-width: 1px;\n        box-shadow: var(--twc-dialog-box-shadow);\n        outline: none;\n\n        color: var(--twc-color-text);\n        line-height: normal;\n        overflow-y: auto;\n        overflow-x: hidden;\n        user-select: none;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    tabindex: '0',\n    '[style.minHeight]': '$height() + \"px\"',\n    '[style.minWidth]': '$width() + \"px\"',\n  },\n})\nexport class MenuButtonGroupComponent implements OnDestroy, AfterViewInit {\n  readonly nativeElement = inject<ElementRef<HTMLElement>>(ElementRef);\n  readonly menu = inject(ButtonMenuDirective, { optional: true });\n\n  // nullable Signal type needs to be set explicitly -> ng-packagr strips nullability\n  readonly $hoverToOpenSubMenuMs: InputSignal<number | undefined> = input<number | undefined>(500, {\n    alias: 'hoverToOpenSubMenuMs',\n  });\n  readonly buttonClicked = output<{\n    button: MenuButtonComponent;\n    event: Event;\n  }>();\n\n  protected readonly $children = contentChildren(MenuButtonComponent);\n  private previousChildrenIds: string[] = [];\n  readonly childrenEffect = effect(() => {\n    const children = this.$children();\n    const ids = children.map(c => c.id);\n    const addedIds = ids.filter(id => !this.previousChildrenIds.includes(id));\n    const removedIds = this.previousChildrenIds.filter(id => !ids.includes(id));\n    if (!addedIds.length && !removedIds.length) {\n      return;\n    }\n    this.previousChildrenIds = ids;\n\n    const hoverMs = this.$hoverToOpenSubMenuMs();\n    for (const child of children) {\n      if (child.$hoverToOpenSubMenuMs() !== undefined) {\n        child.$actualHoverMs.set(child.$hoverToOpenSubMenuMs());\n      } else {\n        child.$actualHoverMs.set(hoverMs);\n      }\n    }\n    this.init();\n  });\n  readonly $menuGroupStack = signal<IMenuGroup[]>([], {\n    equal: () => false,\n  });\n\n  private readonly $height = signal<number>(0);\n  private readonly $width = signal<number>(0);\n\n  private viewInitialized = false;\n  private readonly subs: OutputRefSubscription[] = [];\n  ngAfterViewInit(): void {\n    this.viewInitialized = true;\n    this.init();\n    this.nativeElement.nativeElement.focus();\n    this.subs.push(\n      this.buttonClicked.subscribe(() => {\n        this.menu?.close();\n      }),\n    );\n  }\n  init() {\n    if (!this.viewInitialized) {\n      return;\n    }\n    this.destroyGroupsUntil();\n    void this.addMenuGroup();\n    if (this.menu) {\n      this.menu.opened.subscribe(() => {\n        this.updateSizes();\n      });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroyGroupsUntil();\n    this.subs.forEach(sub => {\n      sub.unsubscribe();\n    });\n  }\n\n  addMenuGroup(parentButton?: MenuButtonComponent) {\n    const children = parentButton?.$children() ?? this.$children();\n    if (children.length === 0) {\n      return undefined;\n    }\n    // if first item\n    const group: IMenuGroup = {\n      id: generateRandomString(),\n      // position is fixed and off screen\n      // this is used to calculate actual size of the menu group\n      $top: signal(-10000),\n      $left: signal(-10000),\n      $minWidth: signal('auto'),\n      element: null,\n      $position: signal<'absolute' | 'fixed'>('fixed'),\n      buttons: children,\n      mouseoverSubscriptions: children.map(c =>\n        c.mouseoverChange.subscribe(mouseOver => {\n          for (const child of children) {\n            child.$highlight.set(false);\n          }\n          if (mouseOver) {\n            this.nativeElement.nativeElement.focus();\n            c.$highlight.set(true);\n          }\n        }),\n      ),\n      openSubMenuSubscriptions: children\n        .filter(e => e.$children().length > 0)\n        .map(c =>\n          c.openSubMenu.subscribe(() => {\n            if (this.$menuGroupStack().some(s => s.parentButton?.id === c.id)) {\n              return;\n            }\n            const g = this.addMenuGroup(c);\n            const firstButton = g?.buttons.find(b => !b.$disabled());\n            if (firstButton) {\n              firstButton.$highlight.set(true);\n            }\n          }),\n        ),\n      clickSubscriptions: children.map(c =>\n        c.click.subscribe(e => {\n          const stack = this.$menuGroupStack();\n          if (stack.length > 0) {\n            const firstGroup = stack[0];\n            this.destroyGroupsUntil(firstGroup.id);\n          }\n          this.buttonClicked.emit({\n            button: c,\n            event: e,\n          });\n        }),\n      ),\n      highlightSubscriptions: children.map(c =>\n        c.highlightChange.subscribe(highlight => {\n          if (highlight) {\n            // if highlight changed in this group, make sure it's the last group in the list\n            this.destroyGroupsUntil(group.id);\n          }\n        }),\n      ),\n      parentButton: parentButton?.id !== undefined ? document.getElementById(parentButton.id) : null,\n    };\n    this.$menuGroupStack.update(groups => {\n      const newGroups = [...groups, group];\n      return newGroups;\n    });\n\n    // wait for our new group to render (max 10 seconds)\n\n    this.updateSizes();\n    return group;\n  }\n\n  updateSizes() {\n    const groups = this.$menuGroupStack();\n    const currentRect = this.nativeElement.nativeElement.getBoundingClientRect();\n\n    let minTop = 0;\n    let minLeft = 0;\n    let maxTop = 0;\n    let maxLeft = 0;\n\n    for (const group of groups) {\n      if (!group.element) {\n        continue;\n      }\n      const rect = group.element.getBoundingClientRect();\n      const elWidth = rect.width;\n      const elHeight = rect.height;\n      let top: number;\n      let left: number;\n      let minWidth: string = 'auto';\n\n      if (!group.parentButton) {\n        top = 0;\n        left = 0;\n        group.$position.set('absolute');\n        minTop = Math.min(minTop, 0);\n        minLeft = Math.min(minLeft, 0);\n        maxTop = Math.max(maxTop, elHeight);\n        maxLeft = Math.max(maxLeft, elWidth);\n\n        if (this.menu?.$minWidth() === 'parentWidth') {\n          const parent = this.menu?.$parentControl()?.nativeElement;\n          if (parent) {\n            minWidth = `calc(${parent.getBoundingClientRect().width}px - 2px)`;\n          }\n        }\n      } else {\n        const parentRect = group.parentButton.getBoundingClientRect();\n        top = parentRect.top - currentRect.top;\n        minTop = Math.min(minTop, top);\n        left = parentRect.right;\n        if (left + rect.width > window.innerWidth) {\n          left = parentRect.left - rect.width;\n        }\n        left = left - currentRect.left;\n        minLeft = Math.min(minLeft, left);\n        maxTop = Math.max(maxTop, top + elHeight);\n        maxLeft = Math.max(maxLeft, left + elWidth);\n        group.$position.set('absolute');\n      }\n      group.$top.set(top);\n      group.$left.set(left);\n      group.$minWidth.set(minWidth);\n    }\n    this.$height.set(maxTop - minTop);\n    this.$width.set(maxLeft - minLeft);\n  }\n\n  destroyGroupsUntil(id?: string) {\n    const groups = this.$menuGroupStack();\n\n    const curIndex = groups.findIndex(g => g.id === id);\n\n    const removed = groups.splice(curIndex + 1);\n    for (const group of removed) {\n      group.mouseoverSubscriptions.forEach(s => {\n        s.unsubscribe();\n      });\n      group.openSubMenuSubscriptions.forEach(s => {\n        s.unsubscribe();\n      });\n      group.highlightSubscriptions.forEach(s => {\n        s.unsubscribe();\n      });\n      group.clickSubscriptions.forEach(s => {\n        s.unsubscribe();\n      });\n      group.buttons.forEach(b => {\n        b.$highlight.set(false);\n      });\n      // group.element?.remove();\n    }\n    // this will also remove from DOM\n    this.$menuGroupStack.set(groups);\n    this.updateSizes();\n  }\n  @HostListener('focusin')\n  onFocusIn() {\n    // clear everything except the first group in the stack\n    const groupStack = this.$menuGroupStack().slice(0, 1);\n    // highlight the first button in the group\n    const firstButton = groupStack[0].buttons.find(b => !b.$disabled());\n    if (firstButton) {\n      firstButton.$highlight.set(true);\n    }\n  }\n\n  @HostListener('focusout')\n  onFocusOut() {\n    // clear everything except the first group in the stack\n    const groupStack = this.$menuGroupStack();\n    if (groupStack.length > 0) {\n      const rootId = groupStack[0].id;\n      this.destroyGroupsUntil(rootId);\n      for (const b of groupStack[0].buttons) {\n        b.$highlight.set(false);\n      }\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  onKeyDown(event: KeyboardEvent) {\n    if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n      // we only handle navitation on top of the stack\n      const stack = this.$menuGroupStack();\n      const buttons = stack[stack.length - 1]?.buttons;\n\n      let currentIndex = -1;\n      currentIndex = buttons.findIndex(child => child.$highlight());\n      let nextIndex: number;\n      if (event.key === 'ArrowDown') {\n        if (currentIndex === -1) {\n          // find the first non disabled option\n          nextIndex = buttons.findIndex(e => !e.$disabled());\n        } else {\n          // find the next option that is not disabled\n          nextIndex = buttons.findIndex((o, i) => i > currentIndex && !o.$disabled());\n          // if no option is found, find the next option that is not disabled before the current item\n          if (nextIndex === -1) {\n            nextIndex = buttons.findIndex((o, i) => i < currentIndex && !o.$disabled());\n          }\n        }\n      } else if (event.key === 'ArrowUp') {\n        if (currentIndex === -1) {\n          // find the last non disabled option\n          nextIndex = buttons\n            .slice()\n            .reverse()\n            .findIndex(o => !o.$disabled());\n          if (nextIndex !== -1) {\n            nextIndex = buttons.length - nextIndex - 1;\n          }\n        } else {\n          const flippedCurrentIndex = buttons.length - currentIndex - 1;\n          // find the next option that is not disabled\n          nextIndex = [...buttons].reverse().findIndex((o, i) => i > flippedCurrentIndex && !o.$disabled());\n          // if no option is found, find the next option that is not disabled before the current item\n          if (nextIndex === -1) {\n            nextIndex = [...buttons].reverse().findIndex((o, i) => i < flippedCurrentIndex && !o.$disabled());\n          }\n          if (nextIndex !== -1) {\n            nextIndex = buttons.length - nextIndex - 1;\n          }\n        }\n      } else {\n        nextIndex = -1;\n      }\n\n      for (const [i, b] of buttons.entries()) {\n        b.$highlight.set(i === nextIndex);\n      }\n    }\n    if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowRight') {\n      const highlightedButton = this.$menuGroupStack()[this.$menuGroupStack().length - 1]?.buttons?.find(b => b.$highlight());\n      if (!highlightedButton || highlightedButton.$disabled()) {\n        return;\n      }\n      if (highlightedButton.$children().length > 0) {\n        highlightedButton.onClick(event);\n      } else if (event.key === 'Enter' || event.key === ' ') {\n        highlightedButton.onClick(event);\n      }\n    }\n    if (event.key === 'ArrowLeft') {\n      if (this.$menuGroupStack().length > 1) {\n        const parentGroupId = this.$menuGroupStack()[this.$menuGroupStack().length - 2].id;\n        this.destroyGroupsUntil(parentGroupId);\n      }\n    }\n  }\n}\n\ninterface IMenuGroup {\n  id: string;\n  $top: WritableSignal<number>;\n  $left: WritableSignal<number>;\n  $position: WritableSignal<'absolute' | 'fixed'>;\n  $minWidth: WritableSignal<string>;\n  parentButton: HTMLElement | null;\n  buttons: readonly MenuButtonComponent[];\n  element: Element | null;\n  mouseoverSubscriptions: OutputRefSubscription[];\n  openSubMenuSubscriptions: OutputRefSubscription[];\n  clickSubscriptions: OutputRefSubscription[];\n  highlightSubscriptions: OutputRefSubscription[];\n}\n","import { NgModule } from '@angular/core';\nimport { MenuButtonComponent } from './menu-button.component';\nimport { MenuButtonGroupComponent } from './menu-button-group.component';\nimport { EntriesPipe } from './pipes/entries.pipe';\nimport { CommonModule } from '@angular/common';\nimport { TableauUiIconModule } from 'tableau-ui-angular/icon';\nimport { TableauUiUtilsModule } from 'tableau-ui-angular/utils';\n\n@NgModule({\n  imports: [CommonModule, TableauUiIconModule, TableauUiUtilsModule],\n  declarations: [MenuButtonComponent, MenuButtonGroupComponent, EntriesPipe],\n  exports: [MenuButtonComponent, MenuButtonGroupComponent],\n})\nexport class TableauUiMenuButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3.EntriesPipe"],"mappings":"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"}