{"version":3,"file":"tstdl-angular-tree-view.mjs","sources":["../../../../projects/tstdl/angular/tree-view/source/tree-view.component.ts","../../../../projects/tstdl/angular/tree-view/source/tree-view.component.html","../../../../projects/tstdl/angular/tree-view/tstdl-angular-tree-view.ts"],"sourcesContent":["import { booleanAttribute, ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { IconComponent, type IconName } from '@tstdl/angular/icon';\n\nexport type TreeViewItem<T = unknown> = {\n  label: string,\n  icon?: IconName,\n  value: T,\n  active?: boolean,\n  link?: Partial<Pick<RouterLink, 'routerLink' | 'queryParams' | 'queryParamsHandling' | 'fragment' | 'relativeTo'>>,\n  children: TreeViewItem[],\n};\n\n@Component({\n  selector: 'tsl-tree-view',\n  imports: [IconComponent, RouterLink],\n  templateUrl: './tree-view.component.html',\n  styleUrl: './tree-view.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  host: {\n    class: 'tsl-tw',\n    '[class.space-y-8]': 'gapOnFirstLevel()',\n  },\n})\nexport class TreeViewComponent<T> {\n  readonly items = input<TreeViewItem<T>[]>();\n  readonly selectedItem = input<TreeViewItem<T> | undefined | null>(null);\n  readonly gapOnFirstLevel = input<boolean, boolean | `${boolean}`>(true, { transform: booleanAttribute });\n\n  readonly itemSelected = output<TreeViewItem<T>>();\n}\n","@for (item of items(); track item.value) {\n  <div>\n    <a\n      class=\"tree-view-item tree-view-item-small my-0.5\"\n      [class.tree-view-item-active]=\"item.active || item == selectedItem()\"\n      [routerLink]=\"item.link?.routerLink\"\n      [queryParams]=\"item.link?.queryParams\"\n      [fragment]=\"item.link?.fragment\"\n      [relativeTo]=\"item.link?.relativeTo\"\n      tabindex=\"0\"\n      (keyup.enter)=\"itemSelected.emit(item)\"\n      (keyup.space)=\"itemSelected.emit(item)\"\n      (keydown.space)=\"$event.preventDefault()\"\n      (click)=\"itemSelected.emit(item)\">\n      @if (item.icon; as icon) {\n        <tsl-icon [icon]=\"icon\" size=\"xl\"></tsl-icon>\n      }\n\n      <span class=\"text-[0.9rem]\">{{ item.label }}</span>\n    </a>\n\n    @if (item.children.length > 0) {\n      <tsl-tree-view [items]=\"item.children\" [selectedItem]=\"selectedItem()\" gapOnFirstLevel=\"false\" (itemSelected)=\"itemSelected.emit($any($event))\"></tsl-tree-view>\n    }\n  </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAyBa,iBAAiB,CAAA;AAZ9B,IAAA,WAAA,GAAA;QAaW,IAAA,CAAA,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAqB;AAClC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAqC,IAAI,mFAAC;QAC9D,IAAA,CAAA,eAAe,GAAG,KAAK,CAAkC,IAAI,uFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;QAE/F,IAAA,CAAA,YAAY,GAAG,MAAM,EAAmB;AAClD,IAAA;8GANY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,unBCzB9B,k/BA0BA,EAAA,MAAA,EAAA,CAAA,w+BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDa,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAVlB,aAAa,+EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAUxB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAZ7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB,CAAC,aAAa,EAAE,UAAU,CAAC,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,mBAAmB,EAAE,mBAAmB;AACzC,qBAAA,EAAA,QAAA,EAAA,k/BAAA,EAAA,MAAA,EAAA,CAAA,w+BAAA,CAAA,EAAA;;;AEvBH;;AAEG;;;;"}