{"version":3,"file":"yuuvis-client-framework-tree.mjs","sources":["../../../../../libs/yuuvis/client-framework/tree/src/lib/tree.service.ts","../../../../../libs/yuuvis/client-framework/tree/src/lib/tree-node/tree-node.component.ts","../../../../../libs/yuuvis/client-framework/tree/src/lib/tree-node/tree-node.component.html","../../../../../libs/yuuvis/client-framework/tree/src/lib/tree.component.ts","../../../../../libs/yuuvis/client-framework/tree/src/lib/tree.component.html","../../../../../libs/yuuvis/client-framework/tree/src/yuuvis-client-framework-tree.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { Tree, TreeNode } from './tree.interface';\n\n@Injectable()\nexport class TreeService {\n  private _tree?: Tree;\n  private _selection: TreeNode[] = [];\n  private _selectionSource = new ReplaySubject<TreeNode[]>();\n  selection$: Observable<TreeNode[]> = this._selectionSource.asObservable();\n\n  private _nodeClickSource = new Subject<TreeNode>();\n  nodeClick$: Observable<TreeNode> = this._nodeClickSource.asObservable();\n\n  private _nodeFocusSource = new ReplaySubject<string | null | undefined>();\n  nodeFocus$: Observable<string | null | undefined> = this._nodeFocusSource.asObservable();\n\n  multiselect = false;\n\n  setTree(tree: Tree) {\n    this._tree = tree;\n  }\n\n  focusNode(id: string | null | undefined) {\n    this._nodeFocusSource.next(id);\n  }\n\n  toggleNode(id: string | null) {\n    if (id) {\n      const node = this._getNodeById(id);\n      if (node) node.expanded = !node.expanded;\n    }\n  }\n\n  selectNodeByID(id: string, ctrlKey = false) {\n    const node = this._getNodeById(id);\n    if (node) this.selectNode(node, ctrlKey);\n  }\n\n  /**\n   * Select a tree node. If the node has already been selected it'll be\n   * removed from the selection. Otherwise it will be added. By default selection\n   * will only contain a single node. If `multiselect` is set to true and CTRL is\n   * pressed the current collection will be extended.\n   * @param node The tree node to be added/removed\n   * @param ctrlKey Whether or not the CTRL key has been pressed\n   * @returns The updated list of selected tree nodes\n   */\n  selectNode(node: TreeNode, ctrlKey = false): void {\n    if (node.selectable) {\n      if (!this.multiselect || !ctrlKey) {\n        this._selection = [node];\n      } else {\n        const ids = this._selection.map((n) => n.id);\n        if (ids.includes(node.id)) this._selection = this._selection.filter((n) => n.id !== node.id);\n        else this._selection.push(node);\n      }\n      this._selectionSource.next(this._selection);\n    }\n    this._nodeClickSource.next(node);\n  }\n\n  setSelection(nodeIds: string[]) {\n    this._resolveSelectedNodes(nodeIds);\n    this._selectionSource.next(this._selection);\n  }\n\n  private _getNodeById(id: string): TreeNode | undefined {\n    return this._tree ? this._getChildNodeById(id, this._tree.nodes) : undefined;\n  }\n  private _getChildNodeById(id: string, nodes: TreeNode[]): TreeNode | undefined {\n    let match: TreeNode | undefined;\n    nodes.forEach((n) => {\n      if (n.id === id) match = n;\n      if (!match && n.children) match = this._getChildNodeById(id, n.children);\n    });\n    return match;\n  }\n\n  private _resolveSelectedNodes(nodeIDs: string[]): void {\n    this._selection = [];\n    if (!this._tree) return;\n    this._resolveChildren(nodeIDs, this._tree.nodes);\n  }\n\n  private _resolveChildren(nodeIDs: string[], nodes: TreeNode[]): void {\n    nodes.forEach((n) => {\n      if (nodeIDs.includes(n.id)) this._selection.push(n);\n      if (n.children?.length) this._resolveChildren(nodeIDs, n.children);\n    });\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnDestroy, OnInit, effect, inject, input } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { YuvIconComponent } from '@yuuvis/client-framework/icons';\nimport { Subscription } from 'rxjs';\nimport { TreeNode } from '../tree.interface';\nimport { TreeService } from '../tree.service';\n\n@Component({\n  selector: 'yuv-tree-node',\n  standalone: true,\n  imports: [CommonModule, YuvIconComponent, MatTooltipModule],\n  templateUrl: './tree-node.component.html',\n  styleUrl: './tree-node.component.scss',\n  host: {\n    role: 'treeitem',\n    '[class.focused]': 'focused',\n    '[attr.aria-selected]': 'selected',\n    '[attr.aria-expanded]': 'expanded'\n  }\n})\nexport class TreeNodeComponent implements OnInit, OnDestroy {\n  private treeService = inject(TreeService);\n\n  node = input.required<TreeNode>();\n  toggleIcon = input<string>(\n    '<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"18px\" viewBox=\"0 -960 960 960\" width=\"18px\"><path d=\"M522-480 333-669l51-51 240 240-240 240-51-51 189-189Z\"/></svg>'\n  );\n  focused = false;\n  selected = false;\n  expanded = false;\n\n  private _selectedNodes: string[] = [];\n  private _subs: Subscription[] = [];\n\n  treeSelectEffect = effect(() => {\n    this._setSelection();\n    this.expanded = !!this.node().expanded;\n  });\n\n  select(evt: MouseEvent | KeyboardEvent) {\n    this.treeService.selectNode(this.node(), evt.ctrlKey);\n  }\n\n  toggleExpanded() {\n    this.node().expanded = !this.node().expanded;\n    this.expanded = !!this.node().expanded;\n  }\n\n  private _setSelection() {\n    if (!this.node()) return;\n    this.selected = this._selectedNodes.includes(this.node().id);\n  }\n\n  ngOnInit(): void {\n    this._subs.push(\n      this.treeService.selection$.subscribe((selection: TreeNode[]) => {\n        this._selectedNodes = selection.map((n) => n.id);\n        this._setSelection();\n      })\n    );\n    this._subs.push(\n      this.treeService.nodeFocus$.subscribe((id: string | null | undefined) => {\n        this.focused = this.node().id === id;\n      })\n    );\n  }\n\n  ngOnDestroy(): void {\n    this._subs.forEach((s) => s.unsubscribe());\n  }\n}\n","@if (node().children?.length) {\n  <!-- toggle children button-->\n  <!-- TODO: title should be i18n -->\n  <button class=\"toggle\" (click)=\"toggleExpanded()\">\n    <yuv-icon [svg]=\"toggleIcon()\"></yuv-icon>\n  </button>\n}\n<div class=\"node-label\" [attr.node-id]=\"node().id\" [ngClass]=\"{ selectable: node().selectable }\" (click)=\"select($event)\">\n  @if (node().icon) {\n    <yuv-icon class=\"node-icon\" [svg]=\"node().icon!\"></yuv-icon>\n  }\n  <div class=\"label\">{{ node().label }}</div>\n</div>\n\n@if (node().expanded) {\n  <div class=\"children\">\n    @for (childNode of node().children; track $index) {\n      <yuv-tree-node tabindex=\"0\" [toggleIcon]=\"toggleIcon()\" [node]=\"childNode\"></yuv-tree-node>\n    }\n  </div>\n}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  HostAttributeToken,\n  Input,\n  OnDestroy,\n  effect,\n  inject,\n  input,\n  output\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TreeNodeComponent } from './tree-node/tree-node.component';\nimport { Tree, TreeNode } from './tree.interface';\nimport { TreeService } from './tree.service';\n\n/**\n * Component rendering a tree.\n */\n@Component({\n  selector: 'yuv-tree',\n  standalone: true,\n  imports: [TreeNodeComponent],\n  providers: [TreeService],\n  templateUrl: './tree.component.html',\n  styleUrl: './tree.component.scss',\n  host: {\n    class: 'yuv-tree',\n    role: 'tree',\n    '[class.selectable]': 'selectable',\n    '[attr.tabindex]': 'tabindex',\n    '(keydown)': 'onKeydown($event)'\n  }\n})\nexport class TreeComponent implements AfterViewInit, OnDestroy {\n  private treeService = inject(TreeService);\n  private elRef = inject(ElementRef);\n\n  private items?: NodeListOf<HTMLElement>;\n\n  private _observer = new MutationObserver(() => {\n    this._getVisibleNodes();\n  });\n\n  /**\n   * The tree to be rendered\n   */\n  tree = input.required<Tree>();\n\n  /**\n   * Whether or not multiple nodes should be selectable. Only works when selection is enableed by\n   * setting 'selectable' attribute:\n   *\n   * ```html\n   * <yuv-tree selectable [multiselect]=\"true\"></yuv-tree\n   * ```\n   */\n  multiselect = input<boolean>(false);\n\n  /**\n   * Host attribute to enable persistent selection of nodes.\n   */\n  selectable: string | null = inject(new HostAttributeToken('selectable'), { optional: true });\n\n  private __focusedIndex = -1;\n  private set _focusedIndex(idx: number) {\n    this.__focusedIndex = idx;\n    this.treeService.focusNode(this.items?.item(idx).getAttribute('node-id'));\n  }\n  get _focusedIndex() {\n    return this.__focusedIndex;\n  }\n\n  /**\n   * IDs of nodes that should be set 'selected'.\n   */\n  @Input() set selectedNodes(nodeIds: string[]) {\n    this.treeService.setSelection(nodeIds);\n  }\n\n  /**\n   * Emitted when selection changes\n   */\n  selectionChange = output<TreeNode[]>();\n\n  readonly tabindex = '0';\n\n  onKeydown(event: KeyboardEvent) {\n    switch (event.code) {\n      case 'ArrowDown': {\n        if ((this.items && this._focusedIndex === this.items.length - 1) || this.__focusedIndex === -1) {\n          this._focusedIndex = 0;\n        } else this._focusedIndex++;\n        break;\n      }\n      case 'ArrowUp': {\n        if (this.items && (this._focusedIndex === 0 || this.__focusedIndex === -1)) {\n          this._focusedIndex = this.items.length - 1;\n        } else this._focusedIndex--;\n        break;\n      }\n      case 'ArrowRight': {\n        this._toggle();\n        break;\n      }\n      case 'ArrowLeft': {\n        this._toggle();\n        break;\n      }\n      case 'Space': {\n        this._selectFocusedNode(event.ctrlKey);\n        break;\n      }\n      case 'Enter': {\n        this._selectFocusedNode(event.ctrlKey);\n        break;\n      }\n    }\n  }\n  setTreeEffect = effect(() => {\n    this.treeService.setTree(this.tree());\n    // if (this.tree()) this.selectedNodes = [];\n  });\n  setTreeMultiselectEffect = effect(() => (this.treeService.multiselect = this.multiselect()));\n\n  constructor() {\n    this.treeService.nodeClick$.pipe(takeUntilDestroyed()).subscribe((node) => {\n      const idx = Array.from(this.items || []).findIndex((i) => i.getAttribute('node-id') === node.id);\n      if (idx !== -1) this._focusedIndex = idx;\n    });\n    this.treeService.selection$.pipe(takeUntilDestroyed()).subscribe((selection) => {\n      this.selectionChange.emit(selection);\n    });\n  }\n\n  private _toggle() {\n    this.treeService.toggleNode(this._getFocusedNodeId());\n  }\n\n  private _selectFocusedNode(ctrlKey = false) {\n    const fid = this._getFocusedNodeId();\n    if (fid) this.treeService.selectNodeByID(fid, ctrlKey);\n  }\n\n  private _getFocusedNodeId(): string | null {\n    if (this.__focusedIndex !== -1) {\n      return Array.from(this.items || [])[this.__focusedIndex].getAttribute('node-id');\n    }\n    return null;\n  }\n\n  private _getVisibleNodes() {\n    this.items = (this.elRef.nativeElement as HTMLElement).querySelectorAll<HTMLElement>('.node-label');\n  }\n\n  ngAfterViewInit(): void {\n    this._getVisibleNodes();\n    this._observer.observe(this.elRef.nativeElement, {\n      childList: true,\n      subtree: true\n    });\n  }\n\n  ngOnDestroy(): void {\n    this._observer.disconnect();\n  }\n}\n","@for (node of tree().nodes; track node.id) {\n  <yuv-tree-node tabindex=\"0\" [node]=\"node\"></yuv-tree-node>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}