{"version":3,"file":"verben-ng-ui-src-lib-components-drop-down.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/drop-down/DropdownLoadEvent.ts","../../../projects/verben-ng-ui/src/lib/components/drop-down/drop-down-item/drop-down-item.component.ts","../../../projects/verben-ng-ui/src/lib/components/drop-down/drop-down-item/drop-down-item.component.html","../../../projects/verben-ng-ui/src/lib/components/drop-down/drop-down.component.ts","../../../projects/verben-ng-ui/src/lib/components/drop-down/drop-down.component.html","../../../projects/verben-ng-ui/src/lib/components/drop-down/drop-down.module.ts","../../../projects/verben-ng-ui/src/lib/components/drop-down/verben-ng-ui-src-lib-components-drop-down.ts"],"sourcesContent":["export class DropdownLoadEvent {\n  private _loadTimes: number;\n\n  get loadTimes(): number {\n    return this._loadTimes;\n  }\n\n  constructor() {\n    this._loadTimes = 0;\n  }\n\n  increaseLoadTime() {\n    this._loadTimes += 1;\n  }\n\n  reset() {\n    this._loadTimes = 0;\n  }\n}\n","import {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  Input,\n  OnInit,\n  QueryList,\n  SimpleChanges,\n  TemplateRef,\n} from '@angular/core';\nimport { TemplateDirective } from 'verben-ng-ui/src/lib/components/shared';\nimport { CommonModule } from '@angular/common';\nimport { isEqual } from 'lodash';\nimport { FormsModule } from '@angular/forms';\n// import { SvgModule } from 'verben-ng-ui/src/public-api';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { DropdownMenuItemWrapper } from '../DropdownMenuItem';\n\n@Component({\n  selector: 'drop-down-item',\n  standalone: true,\n  imports: [CommonModule, FormsModule, SvgModule],\n  templateUrl: './drop-down-item.component.html',\n  styleUrl: './drop-down-item.component.css',\n})\nexport class DropDownItemComponent implements OnInit {\n  @Input() itemTemplate: TemplateRef<any> | null = null; // Allow null for custom item template\n  @Input() groupTemplate: TemplateRef<any> | null = null;\n\n  @Input() activeItem?: any;\n  @Input() activeItems?: any;\n  @Input() selectKey: string | null = null;\n  @Input() optionValue?: string;\n  @Input() optionLabel?: string;\n  @Input() optionSubLabel?: string;\n  @Input() loadMoreCaption?: string;\n  @Input() multiselect: boolean = false;\n  @Input() options: any[] = [];\n  @Input() group: boolean = false;\n  @Input() onExpand?: (\n    item: DropdownMenuItemWrapper,\n    siblings: DropdownMenuItemWrapper[]\n  ) => Promise<void>;\n  @Input() onLoadMore?: (item: DropdownMenuItemWrapper) => Promise<void>;\n  @Input() onSelect?: (value: any, event: Event) => void;\n\n  constructor() {}\n  ngOnInit(): void {}\n\n  isEqual(value: any, other: any): boolean {\n    return this.selectKey\n      ? isEqual((value && value[this.selectKey]) || null, other[this.selectKey])\n      : isEqual(value, other);\n  }\n\n  isSelected(value: any[], other: any): boolean {\n    for (let val of value) {\n      const equalityCheck = this.selectKey\n        ? isEqual(val[this.selectKey], other[this.selectKey])\n        : isEqual(val, other);\n      if (equalityCheck) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  getValue(item: any): any {\n    if (!this.optionValue) {\n      return this.group ? item.value : item;\n    }\n    return this.group ? item.value[this.optionValue] : item[this.optionValue];\n  }\n\n  getOptionLabel(item: any): any {\n    if (this.group) {\n      return item.label;\n    }\n    if (!this.optionLabel) {\n      return item;\n    }\n    return typeof item === 'string' ? item : item[this.optionLabel];\n  }\n\n  getOptionSubLabel(item: any): any {\n    if (this.group) {\n      return item.subLabel;\n    }\n    if (!this.optionSubLabel) {\n      return item;\n    }\n    return typeof item === 'string' ? item : item[this.optionSubLabel];\n  }\n}\n","<!-- If group mode is false, display a flat list -->\n<ng-container *ngIf=\"!group\">\n  <div class=\"option-items-container flex flex-col\">\n    <ng-container *ngFor=\"let item of options\">\n      <ng-container *ngIf=\"itemTemplate; else defaultItem\">\n        <div\n          *ngIf=\"!multiselect\"\n          [ngClass]=\"{\n            'active-item': isEqual(this.activeItem, this.getValue(item))\n          }\"\n          (click)=\"onSelect && onSelect(item, $event)\"\n          class=\"item-wrapper\"\n        >\n          <ng-container\n            *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"\n          ></ng-container>\n        </div>\n        <div\n          *ngIf=\"multiselect\"\n          [ngClass]=\"{\n            'multi-select-active-item': isSelected(\n              this.activeItems,\n              this.getValue(item)\n            )\n          }\"\n          (click)=\"onSelect && onSelect(item, $event)\"\n          class=\"item-wrapper multi-select flex\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"isSelected(this.activeItems, this.getValue(item))\"\n            class=\"custom-checkbox\"\n          />\n          <ng-container\n            *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"\n          ></ng-container>\n        </div>\n      </ng-container>\n\n      <ng-template #defaultItem>\n        <div\n          *ngIf=\"!multiselect\"\n          [ngClass]=\"{\n            'active-item': isEqual(this.activeItem, this.getValue(item))\n          }\"\n          (click)=\"onSelect && onSelect(item, $event)\"\n          class=\"default-item item-wrapper flex flex-col\"\n        >\n          <div\n            [ngClass]=\"{ 'has-sub-label': optionSubLabel }\"\n            class=\"item-label\"\n          >\n            {{ this.getOptionLabel(item) }}\n          </div>\n          <div\n            *ngIf=\"optionSubLabel || (group && item.subLabel)\"\n            class=\"item-sub-label\"\n          >\n            {{ this.getOptionSubLabel(item) }}\n          </div>\n        </div>\n        <div\n          *ngIf=\"multiselect\"\n          [ngClass]=\"{\n            'multi-select-active-item': isSelected(\n              this.activeItems,\n              this.getValue(item)\n            )\n          }\"\n          (click)=\"onSelect && onSelect(item, $event)\"\n          class=\"default-item item-wrapper multi-select flex\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"isSelected(this.activeItems, this.getValue(item))\"\n            class=\"custom-checkbox\"\n          />\n          <div class=\"flex flex-col\">\n            <div\n              [ngClass]=\"{ 'has-sub-label': optionSubLabel }\"\n              class=\"item-label\"\n            >\n              {{ this.getOptionLabel(item) }}\n            </div>\n            <div\n              *ngIf=\"optionSubLabel || (group && item.subLabel)\"\n              class=\"item-sub-label\"\n            >\n              {{ this.getOptionSubLabel(item) }}\n            </div>\n          </div>\n        </div>\n      </ng-template>\n    </ng-container>\n  </div>\n</ng-container>\n\n<!-- If group mode is true, display groups and sub-groups recursively -->\n<ng-container *ngIf=\"group\">\n  <div class=\"option-items-container flex flex-col\">\n    <ng-container *ngFor=\"let item of options\">\n      <!-- Display as group header if the item has children -->\n      <div *ngIf=\"!item.items\">\n        <ng-container *ngIf=\"itemTemplate; else defaultItem\">\n          <div\n            *ngIf=\"!multiselect\"\n            [ngClass]=\"{\n              'active-item': isEqual(this.activeItem, this.getValue(item))\n            }\"\n            (click)=\"onSelect && onSelect(item, $event)\"\n            class=\"item-wrapper\"\n          >\n            <ng-container\n              *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"\n            ></ng-container>\n          </div>\n          <div\n            *ngIf=\"multiselect\"\n            [ngClass]=\"{\n              'multi-select-active-item': isSelected(\n                this.activeItems,\n                this.getValue(item)\n              )\n            }\"\n            (click)=\"onSelect && onSelect(item, $event)\"\n            class=\"item-wrapper multi-select flex\"\n          >\n            <input\n              type=\"checkbox\"\n              [checked]=\"isSelected(this.activeItems, this.getValue(item))\"\n              class=\"custom-checkbox\"\n            />\n            <ng-container\n              *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"\n            ></ng-container>\n          </div>\n        </ng-container>\n\n        <ng-template #defaultItem>\n          <div\n            *ngIf=\"!multiselect\"\n            [ngClass]=\"{\n              'active-item': isEqual(this.activeItem, this.getValue(item))\n            }\"\n            (click)=\"onSelect && onSelect(item, $event)\"\n            class=\"default-item item-wrapper flex flex-col\"\n          >\n            <div\n              [ngClass]=\"{ 'has-sub-label': item.subLabel }\"\n              class=\"item-label\"\n            >\n              {{ item.label }}\n            </div>\n            <div *ngIf=\"item.subLabel\" class=\"item-sub-label\">\n              {{ item.subLabel }}\n            </div>\n          </div>\n          <div\n            *ngIf=\"multiselect\"\n            [ngClass]=\"{\n              'multi-select-active-item': isSelected(\n                this.activeItems,\n                this.getValue(item)\n              )\n            }\"\n            (click)=\"onSelect && onSelect(item, $event)\"\n            class=\"default-item item-wrapper multi-select flex\"\n          >\n            <input\n              type=\"checkbox\"\n              [checked]=\"isSelected(this.activeItems, this.getValue(item))\"\n              class=\"custom-checkbox\"\n            />\n            <div class=\"flex flex-col\">\n              <div\n                [ngClass]=\"{ 'has-sub-label': item.subLabel }\"\n                class=\"item-label\"\n              >\n                {{ item.label }}\n              </div>\n              <div *ngIf=\"item.subLabel\" class=\"item-sub-label\">\n                {{ item.subLabel }}\n              </div>\n            </div>\n          </div>\n        </ng-template>\n      </div>\n\n      <!-- Display as normal item if it doesn't have children -->\n      <div class=\"flex flex-col\" *ngIf=\"item.items\">\n        <ng-container *ngIf=\"groupTemplate; else defaultGroup\">\n          <div\n            class=\"group-wrapper\"\n            (click)=\"onExpand && onExpand(item, options)\"\n          >\n            <ng-container\n              *ngTemplateOutlet=\"groupTemplate; context: { $implicit: item }\"\n            ></ng-container>\n          </div>\n        </ng-container>\n\n        <ng-template #defaultGroup>\n          <div\n            (click)=\"onExpand && onExpand(item, options)\"\n            class=\"default-group group-wrapper flex\"\n          >\n            <span *ngIf=\"!item.expanded\">\n              <verben-svg\n                icon=\"plus\"\n                fill=\"#5d6674\"\n                [width]=\"15\"\n                [height]=\"15\"\n              ></verben-svg>\n              <!-- <svg class=\"plus-minus-icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\">\n                <path\n                  d=\"M5.33214 6.66578H5.26102C3.95858 6.66578 2.65614 6.6663 1.35371 6.66544C1.06528 6.66527 0.850553 6.53571 0.728192 6.27369C0.525115 5.83859 0.844383 5.33734 1.32491 5.33322C1.64624 5.33031 1.96756 5.33271 2.28889 5.33271C3.28285 5.33271 4.27682 5.33271 5.27079 5.33271H5.33214V5.27633C5.33214 3.96674 5.33214 2.65714 5.33214 1.34755C5.33214 1.03086 5.53162 0.767472 5.82998 0.688643C6.25515 0.576225 6.66577 0.896512 6.66645 1.34327C6.66748 1.96311 6.66679 2.58294 6.66679 3.20278C6.66679 3.89254 6.66679 4.58229 6.66679 5.27222V5.33305H6.7242C8.0323 5.33305 9.34056 5.33305 10.6487 5.33305C10.933 5.33305 11.1737 5.48848 11.2788 5.73902C11.4659 6.18527 11.1431 6.66475 10.6533 6.66595C10.1549 6.66698 9.6564 6.66612 9.15805 6.66612C8.34968 6.66612 7.54148 6.66612 6.73311 6.66612H6.66679V6.72713C6.66679 8.03535 6.66679 9.34357 6.66679 10.6516C6.66679 10.9808 6.45343 11.2475 6.13485 11.3177C5.75989 11.4003 5.38252 11.1309 5.33899 10.749C5.33471 10.7107 5.33231 10.6722 5.33231 10.6336C5.33197 9.33123 5.33197 8.02867 5.33197 6.72627V6.66612L5.33214 6.66578Z\"\n                  fill=\"currentColor\" />\n              </svg> -->\n            </span>\n            <span *ngIf=\"item.expanded\">\n              <verben-svg\n                icon=\"minus\"\n                fill=\"#5d6674\"\n                [width]=\"15\"\n                [height]=\"2\"\n              ></verben-svg>\n              <!-- <svg class=\"plus-minus-icon\" width=\"10\" height=\"2\" viewBox=\"0 0 10 2\" fill=\"none\"\n                xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M0.333984 0.332031H9.66732V1.66536H0.333984V0.332031Z\" fill=\"currentColor\" />\n              </svg> -->\n            </span>\n            <div class=\"default-item flex flex-col\">\n              <div\n                [ngClass]=\"{ 'has-sub-label': item.subLabel }\"\n                class=\"item-label\"\n              >\n                {{ item.label }}\n              </div>\n              <div *ngIf=\"item.subLabel\" class=\"item-sub-label\">\n                {{ item.subLabel }}\n              </div>\n            </div>\n          </div>\n        </ng-template>\n        <!-- Recursive rendering of sub-items (groups or individual items) -->\n        <ng-container *ngIf=\"item.expanded\">\n          <div class=\"group-wrapper-items flex flex-col\">\n            <drop-down-item\n              [itemTemplate]=\"itemTemplate\"\n              [groupTemplate]=\"groupTemplate\"\n              [activeItem]=\"activeItem\"\n              [activeItems]=\"activeItems\"\n              [selectKey]=\"selectKey\"\n              [multiselect]=\"multiselect\"\n              [optionValue]=\"optionValue\"\n              [optionLabel]=\"optionLabel\"\n              [optionSubLabel]=\"optionSubLabel\"\n              [loadMoreCaption]=\"loadMoreCaption\"\n              [options]=\"item.items\"\n              [group]=\"group\"\n              [onExpand]=\"onExpand\"\n              [onLoadMore]=\"onLoadMore\"\n              [onSelect]=\"onSelect\"\n            ></drop-down-item>\n            <div *ngIf=\"item.lazyLoad\" class=\"see-more-container flex\">\n              <span\n                class=\"see-more-caption\"\n                (click)=\"onLoadMore && onLoadMore(item)\"\n                >{{ loadMoreCaption }}</span\n              >\n            </div>\n            <div *ngIf=\"item.isLoading\" class=\"loading-overlay\">\n              <div class=\"loader\"></div>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n    </ng-container>\n  </div>\n</ng-container>\n","import {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  OnInit,\n  Optional,\n  Output,\n  QueryList,\n  Self,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { DropdownMenuItem, DropdownMenuItemWrapper } from './DropdownMenuItem';\nimport { DropdownLoadEvent } from './DropdownLoadEvent';\nimport { TemplateDirective } from 'verben-ng-ui/src/lib/components/shared';\nimport { DropdownChangeEvent } from './DropdownChangeEvent';\nimport { DropDownItemComponent } from './drop-down-item/drop-down-item.component';\nimport { isEqual, cloneDeep } from 'lodash';\nimport { debounceTime, Subject } from 'rxjs';\nimport { SharedModule } from 'verben-ng-ui/src/lib/components/shared';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\n\n@Component({\n  selector: 'verben-drop-down',\n  standalone: true,\n  imports: [\n    CommonModule,\n    DropDownItemComponent,\n    SharedModule,\n    FormsModule,\n    SvgModule,\n    TooltipModule,\n  ],\n  templateUrl: './drop-down.component.html',\n  styleUrl: './drop-down.component.css',\n})\nexport class DropDownComponent\n  implements ControlValueAccessor, OnInit, AfterContentInit\n{\n  // INTERNAL\n  private _options: any[] = []; // Internal variable for options\n\n  private ignoreSet = false;\n  // INPUTS\n  @Input()\n  set options(value: any[]) {\n    if (this.group) {\n      if (this.isDropdownMenuItemWrapperArray(value)) {\n        this._options = value;\n      } else {\n        this._options = this.convertToExpandable(value); // Set the internal options variable\n      }\n    } else {\n      this._options = value;\n    }\n    if (!this.ignoreSet) {\n      this.firstSearch = false;\n    } else {\n      this.ignoreSet = false;\n    }\n  }\n\n  get options(): any[] {\n    return this._options; // Return the internal options variable\n  }\n\n  @Input() width: string = '12rem';\n  @Input() overlayWidth: number | null = null;\n  @Input() showHorizontalLine: boolean = true;\n  @Input() horizontalLineColor: string = 'rgba(255, 230, 129, 1)';\n  @Input() optionLabel?: string;\n  @Input() optionSubLabel?: string;\n  @Input() optionValue?: string;\n  @Input() placeholder?: string;\n  @Input() invalidMessage?: string;\n  @Input() errorPosition: string = '';\n  @Input() loadMoreCaption: string = 'See more';\n  @Input() display: 'default' | 'chip' = 'chip';\n  @Input() showClear: boolean = false;\n  @Input() lazyLoad: boolean = false;\n  @Input() selectKey: string | null = null;\n  @Input() styleClass: string = '';\n  @Input() group: boolean = false;\n  @Input() multiselect: boolean = false;\n  @Input() filter: boolean = false;\n  @Input() avoidDuplication: boolean = false;\n  @Input() filterBy?: string;\n  @Input() debounceTime: number = 500;\n  @Input() minChar: number = 0;\n  @Input() disabled: boolean = false;\n  @Input() required: boolean = false;\n  @Input() load?: (context: DropdownLoadEvent) => Promise<any[]>;\n  @Input() asyncLabel?: (context: any) => Promise<string | null>;\n  @Input() search?: (data: any, context: DropdownLoadEvent) => Promise<any[]>;\n\n  // OUTPUTS\n  @Output() optionsChange: EventEmitter<any[]> = new EventEmitter();\n  @Output() onChange: EventEmitter<DropdownChangeEvent> = new EventEmitter();\n  @Output() onClick: EventEmitter<Event> = new EventEmitter();\n  @Output() onClear: EventEmitter<Event> = new EventEmitter();\n\n  onItemChange: (value: any) => void = () => {};\n  onTouched: () => void = () => {};\n  isInvalid: boolean = false;\n  firstSearch: boolean = false;\n\n  //TEMPLATING\n  @ViewChild('dropdownContainer', { static: true })\n  dropdownContainer!: ElementRef;\n  @ViewChild('dropdownExpansion', { static: false })\n  dropdownExpansion!: ElementRef;\n  @ContentChildren(TemplateDirective) templates!: QueryList<TemplateDirective>;\n\n  @HostBinding('class.focused') isFocused = false;\n  isInputFocused = false;\n\n  selectedItemTemplate: TemplateRef<any> | null = null;\n  itemTemplate: TemplateRef<any> | null = null; // Allow null for custom item template\n  groupTemplate: TemplateRef<any> | null = null;\n\n  //VARIABLES\n  isExpanded: boolean = false;\n  loadTimes: DropdownLoadEvent = new DropdownLoadEvent();\n  initialIncrement: boolean = false;\n  selectedOption: any;\n  selectedOptions: any[] = [];\n  selectedOptionLabel: any;\n  selectedOptionLabels: any[] = [];\n  isLoading: boolean = false;\n  optionsCopy: any[] = [];\n  loadTimesCopy: DropdownLoadEvent = new DropdownLoadEvent();\n  selectedContexts: any[] = [];\n  searchHistory: string[] = [];\n  searchTerm$ = new Subject<string>();\n  searchContext: string = '';\n  allowSelectAll: boolean = false;\n  selectedAll: boolean = false;\n\n  constructor(@Optional() @Self() private ngControl: NgControl) {\n    if (this.ngControl) {\n      this.ngControl.valueAccessor = this; // Assign this component as the value accessor\n      this.ngControl?.statusChanges?.subscribe((status) => {\n        this.isInvalid = this.ngControl.touched\n          ? status === 'INVALID' && this.ngControl.touched\n          : false;\n      });\n    }\n  }\n  ngOnInit(): void {\n    if (this.multiselect) {\n      if (!this.lazyLoad) {\n        if (!this.group) {\n          this.allowSelectAll = true;\n        } else {\n          let isAllowed = true;\n          for (let item of this.options) {\n            if (item.lazyLoad) {\n              isAllowed = false;\n              break;\n            }\n          }\n          this.allowSelectAll = isAllowed;\n        }\n      }\n    }\n    if (this.filter) {\n      this.optionsCopy = cloneDeep(this._options);\n      this.searchTerm$\n        .pipe(debounceTime(this.debounceTime)) // Adjust debounce time here (in ms)\n        .subscribe(async (searchTerm) => {\n          if (searchTerm.length < this.minChar) {\n            return;\n          }\n          if (this.selectedContexts.length > 0) {\n            const item = this.selectedContexts[\n              this.selectedContexts.length - 1\n            ] as DropdownMenuItemWrapper;\n            if (item.search && item.loadTimes) {\n              item.loadTimes.reset();\n              item.isLoading = true;\n              const result = await item.search(searchTerm, item.loadTimes);\n              item.isLoading = false;\n              if (this.searchContext.length > 0) {\n                item.loadTimes.increaseLoadTime();\n                item.items = this.convertToExpandable(result);\n                this.group\n                  ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n                  : this.optionsChange.emit(this.options);\n              }\n            }\n          } else {\n            if (this.search && this.loadTimes) {\n              this.isLoading = true;\n              this.loadTimes.reset();\n              const result = await this.search(searchTerm, this.loadTimes);\n              this.isLoading = false;\n              if (this.searchContext.length > 0) {\n                this._options = this.convertToExpandable(result);\n                this.ignoreSet = true;\n                this.group\n                  ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n                  : this.optionsChange.emit(this.options);\n              }\n            }\n          }\n        });\n    }\n  }\n  ngAfterContentInit(): void {\n    this.templates.forEach((templateDirective) => {\n      if (templateDirective.vTemplate === 'selected') {\n        this.selectedItemTemplate = templateDirective.template;\n      }\n      if (templateDirective.vTemplate === 'item') {\n        this.itemTemplate = templateDirective.template;\n      }\n      if (templateDirective.vTemplate === 'group') {\n        this.groupTemplate = templateDirective.template;\n      }\n    });\n  }\n\n  @HostListener('focus') onFocus() {\n    this.isFocused = true;\n  }\n\n  @HostListener('blur') onBlur() {\n    this.isFocused = false;\n  }\n\n  onSearchFocus() {\n    this.isInputFocused = true;\n  }\n\n  onSearchBlur() {\n    this.isInputFocused = false;\n  }\n\n  onInputFocus() {\n    this.isInputFocused = true;\n  }\n\n  onInputBlur() {\n    this.isInputFocused = false;\n  }\n\n  updateOptionsCopy() {\n    this.optionsCopy = cloneDeep(this._options);\n  }\n\n  onSearch(event: any) {\n    if (this.disabled) {\n      return;\n    }\n    const searchTerm = event.target.value;\n    if (this.selectedContexts.length > 0) {\n      const item = this.selectedContexts[\n        this.selectedContexts.length - 1\n      ] as DropdownMenuItemWrapper;\n      if (searchTerm.trim().length == 0) {\n        item.items = cloneDeep(item.copy);\n        item.loadTimes = cloneDeep(item.loadTimesCopy);\n        this.group\n          ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n          : this.optionsChange.emit(this.options);\n        return;\n      }\n      if (item.lazyLoad) {\n        this.searchTerm$.next(searchTerm);\n      } else {\n        if (item.filterBy) {\n          if (!item.items) {\n            return;\n          }\n          item.items = item.items.filter(\n            (x) =>\n              typeof x.value[item.filterBy!] == 'string' &&\n              new RegExp(searchTerm, 'i').test(x.value[item.filterBy!]),\n          );\n          this.group\n            ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n            : this.optionsChange.emit(this.options);\n        } else {\n          if (!item.items) {\n            return;\n          }\n          item.items = item.copy.filter(\n            (x) =>\n              typeof x.value == 'string' &&\n              new RegExp(searchTerm, 'i').test(x.value),\n          );\n          this.group\n            ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n            : this.optionsChange.emit(this.options);\n        }\n      }\n    } else {\n      if (this.firstSearch == false) {\n        this.optionsCopy = cloneDeep(this._options);\n        this.firstSearch = true;\n      }\n      if (searchTerm.trim().length == 0) {\n        this._options = cloneDeep(this.optionsCopy);\n        this.loadTimes = cloneDeep(this.loadTimesCopy);\n        this.group\n          ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n          : this.optionsChange.emit(this.options);\n        this.firstSearch = false;\n        return;\n      }\n      if (this.lazyLoad) {\n        this.searchTerm$.next(searchTerm);\n      } else {\n        if (this.filterBy) {\n          this._options = this.optionsCopy.filter(\n            (x) =>\n              typeof x[this.filterBy!] == 'string' &&\n              new RegExp(searchTerm, 'i').test(x[this.filterBy!]),\n          );\n          this.group\n            ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n            : this.optionsChange.emit(this.options);\n        } else {\n          this._options = this.optionsCopy.filter(\n            (x) => typeof x == 'string' && new RegExp(searchTerm, 'i').test(x),\n          );\n          this.group\n            ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n            : this.optionsChange.emit(this.options);\n        }\n      }\n    }\n  }\n\n  onDropdownClick(event: Event) {\n    if (this.disabled) {\n      return;\n    }\n    this.toggleDropdown();\n    this.onClick.emit(event);\n  }\n\n  toggleDropdown() {\n    this.isExpanded = !this.isExpanded;\n  }\n\n  hasSibling(siblings: DropdownMenuItemWrapper[]): number | null {\n    for (let i = 0; i < siblings.length; i++) {\n      const index = this.selectedContexts.indexOf(siblings[i]);\n      if (index > -1) {\n        return index;\n      }\n    }\n    return null;\n  }\n\n  async expandMenu(\n    item: DropdownMenuItemWrapper,\n    siblings: DropdownMenuItemWrapper[],\n  ) {\n    if (item.items) {\n      if (this.filter) {\n        for (let it of siblings.filter((x) => x !== item)) {\n          if (it.expanded) {\n            it.expanded = false;\n            it.loadTimes && it.loadTimes.reset();\n          }\n        }\n      }\n      item.expanded = !item.expanded;\n      if (item.expanded) {\n        if (this.filter) {\n          const siblingCheck = this.hasSibling(siblings);\n          if (this.selectedContexts.length > 0 && siblingCheck !== null) {\n            const contextsLength = this.selectedContexts.length;\n            this.selectedContexts.splice(\n              siblingCheck,\n              contextsLength - siblingCheck,\n            );\n          }\n          this.selectedContexts.push(item);\n          if (siblingCheck == null) {\n            this.searchHistory.push(this.searchContext);\n          }\n          this.searchContext = '';\n        }\n        if (item.lazyLoad && item.loadMore && item.loadTimes) {\n          item.isLoading = true;\n          var result = await item.loadMore(item.loadTimes);\n          item.isLoading = false;\n          if (result.length > 0) {\n            item.loadTimes.increaseLoadTime();\n          }\n          item.items = this.convertToExpandable(result);\n          if (this.filter) {\n            item.copy = cloneDeep(item.items);\n            item.loadTimesCopy = cloneDeep(item.loadTimes);\n          }\n          this.group\n            ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n            : this.optionsChange.emit(this.options);\n        }\n      } else {\n        if (this.filter) {\n          const index = this.selectedContexts.indexOf(item);\n          const contextsLength = this.selectedContexts.length;\n          if (index > -1) {\n            this.selectedContexts.splice(index, contextsLength - index);\n          }\n        }\n        if (item.loadTimes) {\n          item.loadTimes.reset();\n          if (this.filter) {\n            item.loadTimesCopy = cloneDeep(item.loadTimes);\n          }\n        }\n        if (this.filter) {\n          if (this.searchHistory.length > 0) {\n            this.searchContext =\n              this.searchHistory[this.searchHistory.length - 1];\n            this.searchHistory.splice(this.searchHistory.length - 1, 1);\n          }\n        }\n      }\n    }\n  }\n\n  async loadMoreMenuItems(item: DropdownMenuItemWrapper) {\n    if (item.loadMore && item.loadTimes && item.items) {\n      const searchContext = this.searchContext.trim();\n      item.isLoading = true;\n      var result =\n        searchContext.length > 0 && item.search\n          ? await item.search(searchContext, item.loadTimes)\n          : await item.loadMore(item.loadTimes);\n      item.isLoading = false;\n      if (result.length > 0) {\n        item.loadTimes.increaseLoadTime();\n      }\n      const converted = this.convertToExpandable(result);\n      for (let res of converted) {\n        item.items.push(res);\n      }\n      if (this.filter) {\n        if (searchContext.length == 0 || !item.search) {\n          item.copy = cloneDeep(item.items);\n          item.loadTimesCopy = cloneDeep(item.loadTimes);\n        }\n      }\n      this.group\n        ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n        : this.optionsChange.emit(this.options);\n    }\n  }\n\n  async loadMore() {\n    if (this.load) {\n      if (this.options.length > 0 && !this.initialIncrement) {\n        this.loadTimes.increaseLoadTime();\n        if (this.filter) {\n          this.loadTimesCopy = cloneDeep(this.loadTimes);\n        }\n        this.initialIncrement = true;\n      }\n      const searchContext = this.searchContext.trim();\n      this.isLoading = true;\n      var result =\n        searchContext.length > 0 && this.search\n          ? await this.search(searchContext, this.loadTimes)\n          : await this.load(this.loadTimes);\n      this.isLoading = false;\n      if (this.group) {\n        result = this.convertToExpandable(result);\n      }\n      if (result.length > 0) {\n        this.loadTimes.increaseLoadTime();\n      }\n      for (let item of result) {\n        this._options.push(item);\n      }\n      if (this.filter) {\n        if (searchContext.length == 0 || !this.search) {\n          this.optionsCopy = cloneDeep(this.options);\n          this.loadTimesCopy = cloneDeep(this.loadTimes);\n        }\n      }\n      this.group\n        ? this.optionsChange.emit(this.options as DropdownMenuItem[])\n        : this.optionsChange.emit(this.options);\n    }\n  }\n\n  convertToExpandable(items: DropdownMenuItem[]): DropdownMenuItemWrapper[] {\n    const wrapper: DropdownMenuItemWrapper[] = [];\n    for (let item of items) {\n      const convertedItem: DropdownMenuItemWrapper = {\n        ...item,\n        isLoading: false,\n        expanded: false,\n        loadTimes: item.items ? new DropdownLoadEvent() : undefined,\n        loadTimesCopy: item.items ? new DropdownLoadEvent() : undefined,\n        items: item.items ? this.convertToExpandable(item.items) : undefined,\n        copy: item.items ? cloneDeep(this.convertToExpandable(item.items)) : [],\n      };\n      wrapper.push(convertedItem);\n    }\n    return wrapper;\n  }\n\n  onSelectAll(event: Event) {\n    if (this.selectedAll) {\n      this.selectedOptions = [];\n      this.selectedOptionLabels = [];\n      this.onItemChange([]);\n      this.onTouched();\n      this.onChange.emit({\n        originalEvent: event,\n        value: [],\n        dataSet: this.options,\n      });\n      if (this.required) {\n        this.isInvalid = true;\n      }\n      return;\n    }\n    if (!this.group) {\n      this.selectedOptions = [];\n      this.selectedOptionLabels = [];\n      for (let option of this.options) {\n        const index = this.checkMultiselectValue(option);\n        if (index == null) {\n          this.selectedOptions.push(this.getValue(option));\n          this.selectedOptionLabels.push(this.getOptionLabel(option));\n        }\n      }\n    } else {\n      this.selectedOptions = [];\n      this.selectedOptionLabels = [];\n      for (let option of this.options) {\n        for (let item of option.items) {\n          const index = this.checkMultiselectValue(item);\n          if (index == null) {\n            this.selectedOptions.push(this.getValue(item));\n            this.selectedOptionLabels.push(this.getOptionLabel(item));\n          }\n        }\n      }\n    }\n    this.onItemChange(this.selectedOptions);\n    this.onTouched();\n    this.onChange.emit({\n      originalEvent: event,\n      value: this.selectedOptions,\n      dataSet: this.options,\n    });\n  }\n\n  clearSelection(event: Event) {\n    if (!this.multiselect) {\n      this.selectedOption = null;\n      this.selectedOptionLabel = null;\n      this.onItemChange(null);\n      this.onTouched();\n      this.onChange.emit({\n        originalEvent: event,\n        value: null,\n        dataSet: this.options,\n      });\n    } else {\n      this.selectedOptions = [];\n      this.selectedOptionLabels = [];\n      this.onItemChange([]);\n      this.onTouched();\n      this.onChange.emit({\n        originalEvent: event,\n        value: [],\n        dataSet: this.options,\n      });\n    }\n    if (this.required) {\n      this.isInvalid = true;\n    }\n    this.selectedAll = false;\n    this.onClear.emit(event);\n  }\n\n  onSelect(value: any, event: Event) {\n    if (!this.multiselect) {\n      this.selectedOption = this.getValue(value);\n      this.selectedOptionLabel = this.getOptionLabel(value);\n      this.onItemChange(this.getValue(value));\n      this.onTouched();\n      this.onChange.emit({\n        originalEvent: event,\n        value: this.getValue(value),\n        dataSet: this.options,\n      });\n      this.toggleDropdown();\n    } else {\n      const exists = this.checkMultiselectValue(value);\n      if (exists == null) {\n        const newSelectedOptions = [\n          ...this.selectedOptions,\n          this.getValue(value),\n        ];\n        const newSelectedOptionLabels = [\n          ...this.selectedOptionLabels,\n          this.getOptionLabel(value),\n        ];\n        this.selectedOptions = newSelectedOptions;\n        this.selectedOptionLabels = newSelectedOptionLabels;\n        this.onItemChange(this.selectedOptions);\n        this.onTouched();\n        this.onChange.emit({\n          originalEvent: event,\n          value: this.selectedOptions,\n          dataSet: this.options,\n        });\n      } else {\n        this.selectedAll = false;\n        const newSelectedOptions = [...this.selectedOptions];\n        newSelectedOptions.splice(exists, 1);\n        const newSelectedOptionLabels = [...this.selectedOptionLabels];\n        newSelectedOptionLabels.splice(exists, 1);\n        this.selectedOptions = newSelectedOptions;\n        this.selectedOptionLabels = newSelectedOptionLabels;\n        this.onItemChange(this.selectedOptions);\n        this.onTouched();\n        this.onChange.emit({\n          originalEvent: event,\n          value: this.selectedOptions,\n          dataSet: this.options,\n        });\n      }\n    }\n  }\n\n  onMultiselectItemClosed(index: number, event: Event) {\n    const newSelectedOptions = [...this.selectedOptions];\n    newSelectedOptions.splice(index, 1);\n    const newSelectedOptionLabels = [...this.selectedOptionLabels];\n    newSelectedOptionLabels.splice(index, 1);\n    this.selectedOptions = newSelectedOptions;\n    this.selectedOptionLabels = newSelectedOptionLabels;\n    this.onItemChange(this.selectedOptions);\n    this.onTouched();\n    this.onChange.emit({\n      originalEvent: event,\n      value: this.selectedOptions,\n      dataSet: this.options,\n    });\n  }\n\n  checkMultiselectValue(value: any): number | null {\n    for (let i = 0; i < this.selectedOptions.length; i++) {\n      if (isEqual(this.selectedOptions[i], this.getValue(value))) {\n        return i;\n      }\n    }\n    return null;\n  }\n\n  async writeValue(obj: any): Promise<void> {\n    if (!this.multiselect) {\n      if (obj == null || obj == undefined) {\n        this.selectedOption = obj;\n        this.selectedOptionLabel = obj;\n        return;\n      }\n      this.selectedOption = null;\n      this.selectedOptionLabel = null;\n      if (!this.group && !this.lazyLoad) {\n        for (let option of this.options) {\n          const equalityCheck = this.selectKey\n            ? isEqual(\n                this.getValue(option)[this.selectKey],\n                (obj && obj[this.selectKey]) || null,\n              )\n            : isEqual(this.getValue(option), obj);\n          if (equalityCheck) {\n            this.selectedOption = this.getValue(option);\n            this.selectedOptionLabel = this.asyncLabel\n              ? await this.asyncLabel(option)\n              : this.getOptionLabel(option);\n            break;\n          }\n        }\n        this.onTouched();\n        this.onChange.emit({\n          value: this.selectedOption,\n          dataSet: this.options,\n        });\n        return;\n      }\n      this.selectedOption = obj;\n      if (this.asyncLabel) {\n        this.selectedOptionLabel = await this.asyncLabel(obj);\n      } else {\n        const item = this.options.find((option) =>\n          this.selectKey\n            ? isEqual(\n                this.getValue(option)[this.selectKey],\n                (obj && obj[this.selectKey]) || null,\n              )\n            : isEqual(this.getValue(option), obj),\n        );\n        if (item) {\n          this.selectedOptionLabel = this.getOptionLabel(item);\n        } else {\n          this.selectedOptionLabel = obj;\n        }\n      }\n      // this.selectedOptionLabel = this.asyncLabel\n      //   ? await this.asyncLabel(obj)\n      //   : this.getOptionLabel(obj);\n      this.onTouched();\n      this.onChange.emit({ value: this.selectedOption, dataSet: this.options });\n    } else {\n      if (!Array.isArray(obj)) {\n        this.selectedOptions = [];\n        this.selectedOptionLabels = [];\n        return;\n      }\n      this.selectedOptions = [];\n      this.selectedOptionLabels = [];\n      if (!this.group && !this.lazyLoad) {\n        for (let option of this.options) {\n          for (let object of obj) {\n            const equalityCheck = this.selectKey\n              ? isEqual(\n                  this.getValue(option)[this.selectKey],\n                  object[this.selectKey],\n                )\n              : isEqual(this.getValue(option), object);\n            if (equalityCheck) {\n              this.selectedOptions.push(this.getValue(option));\n              this.selectedOptionLabels.push(\n                this.asyncLabel\n                  ? await this.asyncLabel(object)\n                  : this.getOptionLabel(option),\n              );\n              break;\n            }\n          }\n        }\n        this.onTouched();\n        this.onChange.emit({\n          value: this.selectedOptions,\n          dataSet: this.options,\n        });\n        return;\n      }\n      this.selectedOptions = obj;\n      for (let object of obj) {\n        this.selectedOptionLabels.push(\n          this.asyncLabel\n            ? await this.asyncLabel(object)\n            : this.getOptionLabel(object),\n        );\n      }\n      this.onTouched();\n      this.onChange.emit({\n        value: this.selectedOptions,\n        dataSet: this.options,\n      });\n    }\n  }\n\n  getOptionFromValue(value: any): any {\n    if (!this.optionValue) {\n      return this.group ? value.value : value;\n    }\n    const index = this.group\n      ? this.options.findIndex(\n          (x) =>\n            x.value[this.optionValue!] && x.value[this.optionValue!] == value,\n        )\n      : this.options.findIndex(\n          (x) => x[this.optionValue!] && x[this.optionValue!] == value,\n        );\n    if (index < 0) {\n      return this.group ? value.value : value;\n    }\n    return this.options[index];\n  }\n\n  registerOnChange(fn: any): void {\n    this.onItemChange = fn;\n  }\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n  setDisabledState?(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  getValue(item: any): any {\n    if (!this.optionValue) {\n      return this.group ? item.value : item;\n    }\n    return this.group ? item.value[this.optionValue] : item[this.optionValue];\n  }\n  getOptionLabel(item: any): any {\n    if (this.group) {\n      return item.label;\n    }\n    if (!this.optionLabel) {\n      return item;\n    }\n    return typeof item === 'string' ? item : item[this.optionLabel];\n  }\n\n  private isDropdownMenuItemWrapperArray(value: any[]): boolean {\n    return (\n      Array.isArray(value) &&\n      value.every((item) => this.isDropdownMenuItemWrapper(item))\n    );\n  }\n\n  // Type guard function to check if an object is of type DropdownMenuItem\n  private isDropdownMenuItemWrapper(item: any): boolean {\n    return 'expanded' in item;\n  }\n\n  @HostListener('document:click', ['$event'])\n  onClickOutside(event: Event) {\n    if (!this.isExpanded) {\n      return;\n    }\n    if (\n      !this.dropdownContainer.nativeElement.contains(event.target) &&\n      this.isExpanded &&\n      this.dropdownExpansion &&\n      !this.dropdownExpansion.nativeElement.contains(event.target)\n    ) {\n      this.isExpanded = false;\n    }\n  }\n}\n","<div\n  #dropdownContainer\n  [ngClass]=\"styleClass\"\n  [style.width]=\"width\"\n  class=\"drop-down\"\n>\n  <div\n    [ngClass]=\"{\n      'right-error': errorPosition == 'right',\n      'left-error': errorPosition == 'left',\n      'top-error': errorPosition == 'top',\n    }\"\n    class=\"drop-down-input-wrapper\"\n  >\n    <div\n      (click)=\"onDropdownClick($event)\"\n      cdkOverlayOrigin\n      #trigger=\"cdkOverlayOrigin\"\n      [class.focused]=\"isFocused\"\n      [ngClass]=\"{ 'ng-invalid': isInvalid, disabled: disabled }\"\n      (focus)=\"onFocus()\"\n      (blur)=\"onBlur()\"\n      tabindex=\"0\"\n      class=\"drop-down-input verben-input flex\"\n    >\n      <div class=\"drop-down-main-content\">\n        <ng-container\n          *ngIf=\"\n            (selectedItemTemplate && selectedOption) ||\n              (selectedItemTemplate && selectedOptions.length > 0);\n            else defaultItem\n          \"\n        >\n          <div *ngIf=\"!multiselect\">\n            <ng-container\n              *ngTemplateOutlet=\"\n                selectedItemTemplate;\n                context: { $implicit: selectedOption }\n              \"\n            ></ng-container>\n          </div>\n          <div *ngIf=\"multiselect\">\n            <ng-container\n              *ngTemplateOutlet=\"\n                selectedItemTemplate;\n                context: { $implicit: selectedOptions }\n              \"\n            ></ng-container>\n          </div>\n        </ng-container>\n\n        <ng-template #defaultItem>\n          <div *ngIf=\"!multiselect\" class=\"default-item flex\">\n            <div\n              class=\"dropdown-label place-holder\"\n              *ngIf=\"!this.selectedOption\"\n            >\n              {{ placeholder }}\n            </div>\n            <div *ngIf=\"this.selectedOption\" class=\"item-label dropdown-label\">\n              {{ this.selectedOptionLabel }}\n            </div>\n          </div>\n          <div *ngIf=\"multiselect\" class=\"default-item multi-select flex\">\n            <div\n              class=\"dropdown-label place-holder\"\n              *ngIf=\"this.selectedOptions.length == 0\"\n            >\n              {{ placeholder }}\n            </div>\n            <verben-tooltip\n              customClass=\"custom-tooltip-width\"\n              border=\"1px solid #334155\"\n              backgroundColor=\"white\"\n              [tooltipContent]=\"multiselectTooltip\"\n            >\n              <div\n                *ngIf=\"this.selectedOptions.length > 0\"\n                class=\"item-label dropdown-label\"\n              >\n                <div\n                  *ngIf=\"display == 'chip'\"\n                  class=\"multiselect-items-container-two chip\"\n                >\n                  <span\n                    *ngFor=\"let item of selectedOptionLabels; index as i\"\n                    class=\"multiselect-item-chip multi-select flex\"\n                  >\n                    <span>{{ item }}</span>\n                    <verben-svg\n                      (click)=\"\n                        onMultiselectItemClosed(i, $event);\n                        $event.stopPropagation()\n                      \"\n                      icon=\"close-circle-full\"\n                      [width]=\"15\"\n                      [height]=\"15\"\n                    ></verben-svg>\n                    <!-- <svg (click)=\"onMultiselectItemClosed(i, $event); $event.stopPropagation();\" width=\"10\" height=\"10\"\n                      viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path\n                        d=\"M5.00065 9.33333C7.30184 9.33333 9.16732 7.46785 9.16732 5.16667C9.16732 2.86548 7.30184 1 5.00065 1C2.69946 1 0.833984 2.86548 0.833984 5.16667C0.833984 7.46785 2.69946 9.33333 5.00065 9.33333Z\"\n                        stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                      <path d=\"M6.25 3.91797L3.75 6.41797\" stroke=\"currentColor\" stroke-linecap=\"round\"\n                        stroke-linejoin=\"round\" />\n                      <path d=\"M3.75 3.91797L6.25 6.41797\" stroke=\"currentColor\" stroke-linecap=\"round\"\n                        stroke-linejoin=\"round\" />\n                    </svg> -->\n                  </span>\n                </div>\n                <div\n                  *ngIf=\"display != 'chip'\"\n                  class=\"multiselect-items-container-two normal\"\n                >\n                  <span\n                    *ngFor=\"let item of selectedOptionLabels; index as i\"\n                    class=\"multiselect-item\"\n                  >\n                    {{\n                      i !== selectedOptionLabels.length - 1 ? item + \", \" : item\n                    }}\n                  </span>\n                </div>\n              </div>\n            </verben-tooltip>\n            <ng-template #multiselectTooltip>\n              <div class=\"multi-select-full-view\">\n                <div\n                  *ngIf=\"this.selectedOptions.length > 0\"\n                  class=\"item-label dropdown-label\"\n                >\n                  <div\n                    *ngIf=\"display == 'chip'\"\n                    class=\"multiselect-items-container-two-tooltip chip\"\n                  >\n                    <span\n                      *ngFor=\"let item of selectedOptionLabels; index as i\"\n                      class=\"multiselect-item-chip multi-select flex\"\n                    >\n                      <span>{{ item }}</span>\n                      <verben-svg\n                        (click)=\"\n                          onMultiselectItemClosed(i, $event);\n                          $event.stopPropagation()\n                        \"\n                        icon=\"close-circle-full\"\n                        [width]=\"15\"\n                        [height]=\"15\"\n                      ></verben-svg>\n                      <!-- <svg (click)=\"onMultiselectItemClosed(i, $event); $event.stopPropagation();\" width=\"10\" height=\"10\"\n                        viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path\n                          d=\"M5.00065 9.33333C7.30184 9.33333 9.16732 7.46785 9.16732 5.16667C9.16732 2.86548 7.30184 1 5.00065 1C2.69946 1 0.833984 2.86548 0.833984 5.16667C0.833984 7.46785 2.69946 9.33333 5.00065 9.33333Z\"\n                          stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        <path d=\"M6.25 3.91797L3.75 6.41797\" stroke=\"currentColor\" stroke-linecap=\"round\"\n                          stroke-linejoin=\"round\" />\n                        <path d=\"M3.75 3.91797L6.25 6.41797\" stroke=\"currentColor\" stroke-linecap=\"round\"\n                          stroke-linejoin=\"round\" />\n                      </svg> -->\n                    </span>\n                  </div>\n                  <div\n                    *ngIf=\"display != 'chip'\"\n                    class=\"multiselect-items-container-two-tooltip-normal\"\n                  >\n                    <span\n                      *ngFor=\"let item of selectedOptionLabels; index as i\"\n                      class=\"multiselect-item\"\n                    >\n                      {{\n                        i !== selectedOptionLabels.length - 1\n                          ? item + \", \"\n                          : item\n                      }}\n                    </span>\n                  </div>\n                </div>\n              </div>\n            </ng-template>\n          </div>\n        </ng-template>\n      </div>\n      <span\n        *ngIf=\"\n          (showClear && this.selectedOption && !multiselect) ||\n          (showClear && this.selectedOptions.length > 0 && multiselect)\n        \"\n        (click)=\"this.clearSelection($event); $event.stopPropagation()\"\n        class=\"drop-down-icon-item drop-down-clear-button\"\n      >\n        <verben-svg\n          icon=\"close-no-circle\"\n          stroke=\"#94a3b8\"\n          [width]=\"13\"\n          [height]=\"13\"\n        ></verben-svg>\n        <!-- <svg width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M0.84375 0.84375L8.15625 8.15625\" stroke=\"currentColor\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n          <path d=\"M0.84375 8.15625L8.15625 0.84375\" stroke=\"currentColor\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg> -->\n      </span>\n      <span class=\"drop-down-icon-item drop-down-expand-button\">\n        <verben-svg\n          icon=\"chevron-down\"\n          fill=\"#94a3b8\"\n          [width]=\"15\"\n          [height]=\"8\"\n        ></verben-svg>\n        <!-- <svg width=\"12\" height=\"7\" viewBox=\"0 0 12 7\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path\n            d=\"M6.00507 4.88027C6.20205 4.62775 6.30683 4.4622 6.44095 4.32704C7.74334 3.01731 9.05202 1.71387 10.3576 0.406242C10.5713 0.192495 10.7882 0.00913367 11.1193 0.0101814C11.4692 0.0112292 11.7228 0.15792 11.8884 0.456537C12.057 0.760394 12.0309 1.06111 11.8349 1.34296C11.7658 1.4425 11.6767 1.52737 11.5908 1.61433C9.98873 3.21639 8.37305 4.80483 6.793 6.42784C6.29111 6.94335 5.68759 6.92344 5.21399 6.43832C3.63184 4.8174 2.01826 3.22687 0.414109 1.62691C0.116539 1.32934 -0.116067 1.0192 0.0620561 0.565507C0.271612 0.031139 0.883519 -0.167941 1.35502 0.157919C1.49647 0.255363 1.61592 0.387385 1.73955 0.509975C3.02204 1.79036 4.30452 3.07075 5.58386 4.35533C5.70645 4.47792 5.80284 4.62671 6.00611 4.88132L6.00507 4.88027Z\"\n            fill=\"currentColor\" />\n        </svg> -->\n      </span>\n    </div>\n    <div\n      *ngIf=\"this.isInvalid && this.invalidMessage\"\n      class=\"verben-error-message error-message\"\n    >\n      {{ invalidMessage }}\n    </div>\n  </div>\n  <ng-template\n    cdkConnectedOverlay\n    [cdkConnectedOverlayWidth]=\"\n      overlayWidth ? overlayWidth : dropdownContainer.offsetWidth\n    \"\n    [cdkConnectedOverlayLockPosition]=\"false\"\n    [cdkConnectedOverlayOrigin]=\"trigger\"\n    [cdkConnectedOverlayPositions]=\"[\n      {\n        originX: 'start',\n        originY: 'bottom',\n        overlayX: 'start',\n        overlayY: 'top',\n      },\n      {\n        originX: 'start',\n        originY: 'top',\n        overlayX: 'start',\n        overlayY: 'bottom',\n      },\n    ]\"\n    [cdkConnectedOverlayOpen]=\"isExpanded\"\n    (detach)=\"isExpanded = false\"\n  >\n    <div #dropdownExpansion class=\"drop-down-menu-item-wrapper\">\n      <div *ngIf=\"multiselect && this.selectedOptions.length > 0\">\n        <div\n          *ngIf=\"display == 'chip'\"\n          class=\"multiselect-items-container chip flex\"\n        >\n          <span\n            *ngFor=\"let item of selectedOptionLabels; index as i\"\n            class=\"multiselect-item-chip flex\"\n          >\n            <span>{{ item }}</span>\n            <verben-svg\n              (click)=\"onMultiselectItemClosed(i, $event)\"\n              icon=\"close-circle-full\"\n              [width]=\"15\"\n              [height]=\"15\"\n            ></verben-svg>\n            <!-- <svg (click)=\"onMultiselectItemClosed(i, $event)\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\">\n              <path\n                d=\"M5.00065 9.33333C7.30184 9.33333 9.16732 7.46785 9.16732 5.16667C9.16732 2.86548 7.30184 1 5.00065 1C2.69946 1 0.833984 2.86548 0.833984 5.16667C0.833984 7.46785 2.69946 9.33333 5.00065 9.33333Z\"\n                stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              <path d=\"M6.25 3.91797L3.75 6.41797\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              <path d=\"M3.75 3.91797L6.25 6.41797\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg> -->\n          </span>\n        </div>\n        <div\n          *ngIf=\"display != 'chip'\"\n          class=\"multiselect-items-container normal\"\n        >\n          <span\n            *ngFor=\"let item of selectedOptionLabels; index as i\"\n            class=\"multiselect-item\"\n          >\n            {{ i !== selectedOptionLabels.length - 1 ? item + \", \" : item }}\n          </span>\n        </div>\n      </div>\n      <div *ngIf=\"allowSelectAll || filter\" class=\"actions-section flex\">\n        <input\n          *ngIf=\"allowSelectAll\"\n          (click)=\"onSelectAll($event)\"\n          type=\"checkbox\"\n          [(ngModel)]=\"selectedAll\"\n          class=\"custom-checkbox\"\n        />\n        <span class=\"select-all-caption\" *ngIf=\"allowSelectAll && !filter\"\n          >Select All</span\n        >\n        <div\n          *ngIf=\"filter\"\n          [ngClass]=\"{ focused: isInputFocused }\"\n          tabindex=\"0\"\n          (focus)=\"onSearchFocus()\"\n          (blur)=\"onSearchBlur()\"\n          class=\"search-section flex\"\n        >\n          <span class=\"search-icon flex\">\n            <verben-svg\n              icon=\"search\"\n              stroke=\"#64748b\"\n              [width]=\"15\"\n              [height]=\"15\"\n            ></verben-svg>\n            <!-- <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n              <circle cx=\"9\" cy=\"9\" r=\"8\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"></circle>\n              <line x1=\"14\" y1=\"14\" x2=\"19\" y2=\"19\" stroke=\"currentColor\" stroke-width=\"2\"></line>\n            </svg> -->\n          </span>\n          <span\n            *ngIf=\"this.selectedContexts[this.selectedContexts.length - 1]\"\n            class=\"search-context\"\n          >\n            {{\n              this.getOptionLabel(\n                this.selectedContexts[this.selectedContexts.length - 1]\n              )\n            }}\n          </span>\n          <div class=\"search-input-container\">\n            <input\n              (input)=\"onSearch($event)\"\n              [(ngModel)]=\"searchContext\"\n              (focus)=\"onInputFocus()\"\n              (blur)=\"onInputBlur()\"\n              placeholder=\"Search...\"\n              class=\"search-input\"\n            />\n          </div>\n        </div>\n      </div>\n      <div *ngIf=\"showHorizontalLine\" class=\"colored-underline-section\">\n        <hr\n          [style.background-color]=\"horizontalLineColor\"\n          class=\"colored-underline\"\n        />\n      </div>\n      <div class=\"drop-down-menu-item\">\n        <drop-down-item\n          [itemTemplate]=\"itemTemplate\"\n          [groupTemplate]=\"groupTemplate\"\n          [activeItem]=\"selectedOption\"\n          [activeItems]=\"selectedOptions\"\n          [multiselect]=\"multiselect\"\n          [optionValue]=\"optionValue\"\n          [optionLabel]=\"optionLabel\"\n          [optionSubLabel]=\"optionSubLabel\"\n          [selectKey]=\"selectKey\"\n          [loadMoreCaption]=\"loadMoreCaption\"\n          [options]=\"options\"\n          [group]=\"group\"\n          [onExpand]=\"expandMenu.bind(this)\"\n          [onLoadMore]=\"loadMoreMenuItems.bind(this)\"\n          [onSelect]=\"onSelect.bind(this)\"\n        ></drop-down-item>\n        <div *ngIf=\"lazyLoad\">\n          <div class=\"see-more-container flex justify-end\">\n            <span class=\"see-more-caption\" (click)=\"loadMore()\">{{\n              loadMoreCaption\n            }}</span>\n          </div>\n        </div>\n        <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n          <div class=\"loader\"></div>\n        </div>\n      </div>\n    </div>\n  </ng-template>\n</div>\n","import { forwardRef, NgModule } from '@angular/core';\nimport { DropDownComponent } from './drop-down.component';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DropDownItemComponent } from './drop-down-item/drop-down-item.component';\nimport { SharedModule } from 'verben-ng-ui/src/lib/components/shared';\n\n@NgModule({\n  declarations: [],\n  imports: [DropDownComponent, DropDownItemComponent, SharedModule],\n  exports: [DropDownComponent],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DropDownComponent),\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DropDownComponent),\n      multi: true,\n    },\n  ],\n})\nexport class DropDownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}