{"version":3,"file":"toolbox-multi-select.mjs","sources":["../../../projects/toolbox/select/components/multi-select.component.ts","../../../projects/toolbox/select/components/multi-select.component.html","../../../projects/toolbox/select/toolbox-multi-select.ts"],"sourcesContent":["import {\r\n  Component,\r\n  ElementRef,\r\n  HostListener,\r\n  inject,\r\n  input, linkedSignal,\r\n  output, signal\r\n} from \"@angular/core\";\r\nimport { TbxMultiSelectItem } from \"./multi-select.model\";\r\n\r\n@Component( {\r\n  selector: \"tbx-multi-select\",\r\n  templateUrl: \"multi-select.component.html\"\r\n} )\r\nexport class TbxMultiSelectComponent {\r\n  public readonly items = input<TbxMultiSelectItem[]>( [] );\r\n  public readonly placeholder = input( \"Select items...\" );\r\n\r\n  selectedChange = output<TbxMultiSelectItem[]>();\r\n\r\n  protected isDropdownVisible = signal( false );\r\n  protected filteredItems = linkedSignal<TbxMultiSelectItem[]>( () => this.items() );\r\n\r\n  private readonly elementRef = inject( ElementRef );\r\n\r\n  @HostListener( \"document:click\", [\"$event\"] )\r\n  public onDocumentClick( event: MouseEvent ): void {\r\n    if( !this.elementRef.nativeElement.contains( event.target ) ) {\r\n      this.isDropdownVisible.set( false );\r\n\r\n    }\r\n  }\r\n\r\n  protected filterItems( event: Event ): void {\r\n    const searchItem = ( event.target as HTMLInputElement ).value.toLocaleLowerCase();\r\n    this.filteredItems.set(\r\n      this.items().filter( item => item.title.toLowerCase().includes( searchItem ) ) );\r\n  }\r\n\r\n  protected toggleItem( item: TbxMultiSelectItem, event: MouseEvent ) {\r\n    event.stopPropagation();\r\n    item.selected = !item.selected;\r\n    this.selectedChange.emit( this.items().filter( i => i.selected ) );\r\n  }\r\n\r\n  protected removeItem( item: TbxMultiSelectItem, event: MouseEvent ) {\r\n    event.stopPropagation();\r\n    item.selected = false;\r\n    this.selectedChange.emit( this.items().filter( i => i.selected ) );\r\n  }\r\n\r\n  protected showDropdown() {\r\n    this.isDropdownVisible.set( true );\r\n  }\r\n}\r\n","<div class=\"multi-select-dropdown\">\r\n  <div class=\"input-container\">\r\n    @for (item of items(); track item.title) {\r\n      @if (item.selected) {\r\n        <div class=\"selected-item\">\r\n          @if (item.imageUrl) {\r\n            <img [src]=\"item.imageUrl\" [alt]=\"item.title\">\r\n          }\r\n          {{ item.title }}\r\n          <button class=\"btn-remove\" (click)=\"removeItem(item, $event)\">\r\n            &times;\r\n          </button>\r\n        </div>\r\n      }\r\n    }\r\n\r\n    <input\r\n      type=\"text\"\r\n      class=\"\"\r\n      (focus)=\"showDropdown()\"\r\n      (input)=\"filterItems($event)\"\r\n      [placeholder]=\"isDropdownVisible() ? '' : placeholder()\">\r\n  </div>\r\n\r\n  @if (isDropdownVisible()) {\r\n    <div class=\"dropdown-list\">\r\n      @for (item of filteredItems(); track item.title) {\r\n        <div class=\"dropdown-item\" (click)=\"toggleItem(item, $event)\">\r\n          <span class=\"checkbox\" [class.checked]=\"item.selected\">\r\n            @if (item.selected) {\r\n              <span class=\"checkmark\">✓</span>\r\n            }\r\n          </span>\r\n          <span>{{ item.title }}</span>\r\n          @if (item.description) {\r\n            <span class=\"description\">{{ item.description }}</span>\r\n          }\r\n        </div>\r\n      }\r\n    </div>\r\n  }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAca,uBAAuB,CAAA;AAJpC,IAAA,WAAA,GAAA;AAKkB,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAwB,EAAE,iDAAE;AACzC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAE,iBAAiB,uDAAE;QAExD,IAAA,CAAA,cAAc,GAAG,MAAM,EAAwB;AAErC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAE,KAAK,6DAAE;QACnC,IAAA,CAAA,aAAa,GAAG,YAAY,CAAwB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAE;AAEjE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAE,UAAU,CAAE;AA+BnD;AA5BQ,IAAA,eAAe,CAAE,KAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAE,KAAK,CAAC,MAAM,CAAE,EAAG;AAC5D,YAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAE,KAAK,CAAE;;;AAK7B,IAAA,WAAW,CAAE,KAAY,EAAA;QACjC,MAAM,UAAU,GAAK,KAAK,CAAC,MAA4B,CAAC,KAAK,CAAC,iBAAiB,EAAE;AACjF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAE,UAAU,CAAE,CAAE,CAAE;;IAG1E,UAAU,CAAE,IAAwB,EAAE,KAAiB,EAAA;QAC/D,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;QAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAE,CAAE;;IAG1D,UAAU,CAAE,IAAwB,EAAE,KAAiB,EAAA;QAC/D,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAE,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAE,CAAE;;IAG1D,YAAY,GAAA;AACpB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAE,IAAI,CAAE;;8GAtCzB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,+cCdpC,i2CA0CA,EAAA,CAAA,CAAA;;2FD5Ba,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,i2CAAA,EAAA;8BAerB,eAAe,EAAA,CAAA;sBADrB,YAAY;uBAAE,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AEzB7C;;AAEG;;;;"}