angular-select-dropdown
Version:
A highly customizable and flexible dropdown select component for Angular applications. Ideal for creating dynamic select menus with search, filtering.
266 lines (258 loc) • 24.3 kB
JavaScript
import * as i0 from '@angular/core';
import { EventEmitter, Directive, Input, Output, HostListener, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, HostBinding, Injectable, NgModule } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import * as i1 from '@angular/common';
import { CommonModule } from '@angular/common';
class ClickOutsideDirective {
constructor(elementRef) {
this.elementRef = elementRef;
this.excludeElements = [];
this.clickOutside = new EventEmitter();
}
onClick(event) {
const target = event.target;
if (!this.elementRef.nativeElement.contains(target) && !this.isExcludedElement(target, this.excludeElements)) {
this.clickOutside.emit();
}
}
isExcludedElement(target, excludeElements) {
return excludeElements.some(selectorOrClass => {
if (selectorOrClass.startsWith('.')) {
const className = selectorOrClass.slice(1);
return target.classList.contains(className) || this.isInsideExcludedElement(target, `.${className}`);
}
else {
const excludedElements = this.elementRef.nativeElement.ownerDocument.querySelectorAll(selectorOrClass);
return Array.from(excludedElements).some(el => el.contains(target) || el === target);
}
});
}
isInsideExcludedElement(target, selector) {
const excludedElements = Array.from(this.elementRef.nativeElement.ownerDocument.querySelectorAll(selector));
return excludedElements.some(excludedElement => excludedElement.contains(target));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: { excludeElements: "excludeElements" }, outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:mousedown": "onClick($event)" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ClickOutsideDirective, decorators: [{
type: Directive,
args: [{
selector: '[clickOutside]'
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { excludeElements: [{
type: Input
}], clickOutside: [{
type: Output
}], onClick: [{
type: HostListener,
args: ['document:mousedown', ['$event']]
}] } });
class AngularSelectDropdownComponent {
/**
* List of items to populate the dropdown.
* This setter updates the internal store of items and triggers an update.
* @param items The array of items to be displayed in the dropdown.
*/
set items(items) {
this._items = items;
this.updateItems(items);
}
get items() {
return this._items;
}
constructor(cdRef) {
this.cdRef = cdRef;
/**
* Handler function to extract the label for each item.
* @param item The item from the list.
* @returns The label (name or value) of the item.
*/
this.labelHandler = (item) => item['name'] || item;
/**
* Defines the key used to sort the dropdown items.
* @param sortKeyName The key used to sort the items, default is 'value'.
* @default 'value'
*/
this.sortKeyName = 'value';
/**
* Determines whether the dropdown allows clearing the selection.
* @param isClearable If true, the dropdown will show a clear button.
* @default false
*/
this.isClearable = false;
/**
* Determines whether the dropdown is disabled.
* @param disabled If true, the dropdown is disabled and cannot be interacted with.
* @default false
*/
this.disabled = false;
/**
* Determines whether the dropdown menu should close when the selected item is cleared.
* @param closeMenuOnClear If true, the dropdown will close when the selection is cleared.
* @default true
*/
this.closeMenuOnClear = true;
/**
* Placeholder text displayed when no item is selected.
* @param placeholder The placeholder text.
* @default ''
*/
this.placeholder = '';
/**
* Message displayed when no items match the search query.
* @param notFoundMessage The message to display when no items are found.
* @default 'Nothing found'
*/
this.notFoundMessage = 'Nothing found';
/**
* Event emitted when an item is selected.
* @param selectItem The selected item is emitted as an event.
*/
this.selectItem = new EventEmitter();
this.hostClasses = 'angular-select-dropdown';
this._items = [];
this.data = '';
this.isDropdownOpen = false;
this.itemsStore = [];
this.selectedItem = {
value: null,
name: ''
};
this.onTouched = () => { };
this.onChange = () => { };
}
ngOnDestroy() {
this.isDropdownOpen = false;
}
registerOnChange(onChange) {
this.onChange = onChange;
}
registerOnTouched(onTouched) {
this.onTouched = onTouched;
}
writeValue(obj) {
this.data = obj;
this.updateItems(this.items);
}
updateData(data) {
this.onChange(data);
this.onTouched();
}
updateItems(items) {
if (items && items.length) {
this.itemsStore = items.map((item) => ({
value: item[this.sortKeyName] ?? this.labelHandler(item),
name: this.labelHandler(item),
disabled: !!item?.['disabled']
}));
}
else {
this.itemsStore = [];
}
this.updateSelectedItem();
this.cdRef.markForCheck();
}
updateSelectedItem(item) {
const selectedItem = this.itemsStore.find(item => item?.value == this.data);
this.selectedItem = {
value: item?.value ?? (selectedItem?.value ?? null),
name: item?.name ?? (selectedItem?.name ?? '')
};
}
trackByValue(index, item) {
return item.value;
}
closeDropdownMenu() {
this.isDropdownOpen = false;
}
onClickRemove(event) {
event.stopImmediatePropagation();
if (this.selectedItem.value && this.selectedItem.name) {
this.updateSelectedItem();
this.updateData(null);
this.selectItem.emit();
if (this.closeMenuOnClear) {
this.closeDropdownMenu();
}
}
}
onSelectItem(item) {
this.updateData(item.value);
this.updateSelectedItem(item);
this.closeDropdownMenu();
this.selectItem.emit(item.value);
}
onSelectClick() {
this.isDropdownOpen = !this.isDropdownOpen;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AngularSelectDropdownComponent, selector: "angular-select-dropdown", inputs: { labelHandler: "labelHandler", sortKeyName: "sortKeyName", items: "items", isClearable: "isClearable", disabled: "disabled", closeMenuOnClear: "closeMenuOnClear", placeholder: "placeholder", notFoundMessage: "notFoundMessage" }, outputs: { selectItem: "selectItem" }, host: { properties: { "class": "this.hostClasses" } }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => AngularSelectDropdownComponent),
multi: true
}
], ngImport: i0, template: "<div\n class=\"angular-select-dropdown-wrapper\"\n [excludeElements]=\"['.angular-select-dropdown-menu']\"\n [class.angular-select-dropdown-wrapper_disabled]=\"disabled\"\n (clickOutside)=\"closeDropdownMenu()\"\n (click)=\"onSelectClick()\"\n>\n <div\n class=\"angular-select-dropdown__text\"\n [class.angular-select-dropdown__text_placeholder]=\"!selectedItem.name && placeholder\"\n [title]=\"selectedItem.name\"\n >\n {{selectedItem.name || placeholder}}\n </div>\n\n <div class=\"angular-select-dropdown-actions\">\n <div\n *ngIf=\"isClearable\"\n class=\"angular-select-dropdown-actions__close\"\n (click)=\"onClickRemove($event)\"\n ></div>\n <div\n class=\"angular-select-dropdown-actions__arrow\"\n [class.angular-select-dropdown-actions__arrow_rotate]=\"isDropdownOpen\"\n ></div>\n </div>\n</div>\n\n<div\n *ngIf=\"isDropdownOpen\"\n class=\"angular-select-dropdown-menu\"\n>\n <div class=\"angular-select-dropdown-menu__wrapper\">\n <div\n *ngIf=\"itemsStore.length; else itemsListEmpty\"\n class=\"angular-select-dropdown-menu__items\"\n >\n <div\n *ngFor=\"let item of itemsStore; let i = index; trackBy: trackByValue\"\n class=\"angular-select-dropdown-menu__item\"\n [class.angular-select-dropdown-menu__item_active]=\"item.value === selectedItem.value\"\n [title]=\"item.name\"\n (click)=\"onSelectItem(item)\"\n >\n {{item.name}}\n </div>\n </div>\n\n <ng-template #itemsListEmpty>\n <div\n class=\"angular-select-dropdown-menu__not-found\"\n >\n {{notFoundMessage}}\n </div>\n </ng-template>\n </div>\n</div>\n", styles: [":host,.angular-select-dropdown{display:block;position:relative;width:100%}.angular-select-dropdown-wrapper{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:10px 10px 10px 15px;border:1px solid rgba(0,0,0,.1019607843);border-radius:.625rem}.angular-select-dropdown-wrapper:hover .angular-select-dropdown-actions__arrow{background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M7 10L12 15%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M12 15L17 10%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-wrapper_disabled{pointer-events:none;opacity:.5}.angular-select-dropdown__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#1b1f3b;font-family:inherit;width:100%}.angular-select-dropdown__text_placeholder{color:#1b1f3ba6}.angular-select-dropdown-actions{display:flex;align-items:center}.angular-select-dropdown-actions__close,.angular-select-dropdown-actions__arrow{width:20px;height:20px;background-repeat:no-repeat}.angular-select-dropdown-actions__close{background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M8 8L16 16%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M16 8L8 16%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-actions__close:hover{background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M8 8L16 16%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M16 8L8 16%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-actions__arrow{transition:.4s;background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M7 10L12 15%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M12 15L17 10%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-actions__arrow_rotate{transform:rotate(180deg)}.angular-select-dropdown-menu{position:absolute;width:100%;left:0;top:45px;border:1px solid rgba(0,0,0,.1019607843);border-radius:.625rem}.angular-select-dropdown-menu__wrapper{padding:4px}.angular-select-dropdown-menu__items{padding:1px;max-height:200px;overflow-y:auto;overflow-x:hidden;box-sizing:border-box}.angular-select-dropdown-menu__items::-webkit-scrollbar{width:4px}.angular-select-dropdown-menu__items::-webkit-scrollbar-thumb{background:#888;border-radius:.625rem;cursor:pointer}.angular-select-dropdown-menu__items::-webkit-scrollbar-thumb:hover{background:#555}.angular-select-dropdown-menu__item{padding:10px;cursor:pointer;border-radius:.625rem;margin-bottom:2px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-family:inherit;color:#1b1f3b}.angular-select-dropdown-menu__item_active,.angular-select-dropdown-menu__item:hover{background-color:#0000000a}.angular-select-dropdown-menu__item:last-child{margin-bottom:0}.angular-select-dropdown-menu__not-found{padding:10px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-family:inherit;color:#1b1f3b66}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: ["excludeElements"], outputs: ["clickOutside"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownComponent, decorators: [{
type: Component,
args: [{ selector: 'angular-select-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => AngularSelectDropdownComponent),
multi: true
}
], template: "<div\n class=\"angular-select-dropdown-wrapper\"\n [excludeElements]=\"['.angular-select-dropdown-menu']\"\n [class.angular-select-dropdown-wrapper_disabled]=\"disabled\"\n (clickOutside)=\"closeDropdownMenu()\"\n (click)=\"onSelectClick()\"\n>\n <div\n class=\"angular-select-dropdown__text\"\n [class.angular-select-dropdown__text_placeholder]=\"!selectedItem.name && placeholder\"\n [title]=\"selectedItem.name\"\n >\n {{selectedItem.name || placeholder}}\n </div>\n\n <div class=\"angular-select-dropdown-actions\">\n <div\n *ngIf=\"isClearable\"\n class=\"angular-select-dropdown-actions__close\"\n (click)=\"onClickRemove($event)\"\n ></div>\n <div\n class=\"angular-select-dropdown-actions__arrow\"\n [class.angular-select-dropdown-actions__arrow_rotate]=\"isDropdownOpen\"\n ></div>\n </div>\n</div>\n\n<div\n *ngIf=\"isDropdownOpen\"\n class=\"angular-select-dropdown-menu\"\n>\n <div class=\"angular-select-dropdown-menu__wrapper\">\n <div\n *ngIf=\"itemsStore.length; else itemsListEmpty\"\n class=\"angular-select-dropdown-menu__items\"\n >\n <div\n *ngFor=\"let item of itemsStore; let i = index; trackBy: trackByValue\"\n class=\"angular-select-dropdown-menu__item\"\n [class.angular-select-dropdown-menu__item_active]=\"item.value === selectedItem.value\"\n [title]=\"item.name\"\n (click)=\"onSelectItem(item)\"\n >\n {{item.name}}\n </div>\n </div>\n\n <ng-template #itemsListEmpty>\n <div\n class=\"angular-select-dropdown-menu__not-found\"\n >\n {{notFoundMessage}}\n </div>\n </ng-template>\n </div>\n</div>\n", styles: [":host,.angular-select-dropdown{display:block;position:relative;width:100%}.angular-select-dropdown-wrapper{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:10px 10px 10px 15px;border:1px solid rgba(0,0,0,.1019607843);border-radius:.625rem}.angular-select-dropdown-wrapper:hover .angular-select-dropdown-actions__arrow{background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M7 10L12 15%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M12 15L17 10%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-wrapper_disabled{pointer-events:none;opacity:.5}.angular-select-dropdown__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#1b1f3b;font-family:inherit;width:100%}.angular-select-dropdown__text_placeholder{color:#1b1f3ba6}.angular-select-dropdown-actions{display:flex;align-items:center}.angular-select-dropdown-actions__close,.angular-select-dropdown-actions__arrow{width:20px;height:20px;background-repeat:no-repeat}.angular-select-dropdown-actions__close{background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M8 8L16 16%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M16 8L8 16%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-actions__close:hover{background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M8 8L16 16%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M16 8L8 16%22 stroke%3D%22%23333%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-actions__arrow{transition:.4s;background-image:url(\"data:image/svg+xml,%3Csvg viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Cpath d%3D%22M7 10L12 15%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3Cpath d%3D%22M12 15L17 10%22 stroke%3D%22%23808080%22 stroke-width%3D%222%22 stroke-linecap%3D%22round%22 stroke-linejoin%3D%22round%22 %3E%3C%2Fpath%3E %3C%2Fg%3E%3C%2Fsvg%3E\")}.angular-select-dropdown-actions__arrow_rotate{transform:rotate(180deg)}.angular-select-dropdown-menu{position:absolute;width:100%;left:0;top:45px;border:1px solid rgba(0,0,0,.1019607843);border-radius:.625rem}.angular-select-dropdown-menu__wrapper{padding:4px}.angular-select-dropdown-menu__items{padding:1px;max-height:200px;overflow-y:auto;overflow-x:hidden;box-sizing:border-box}.angular-select-dropdown-menu__items::-webkit-scrollbar{width:4px}.angular-select-dropdown-menu__items::-webkit-scrollbar-thumb{background:#888;border-radius:.625rem;cursor:pointer}.angular-select-dropdown-menu__items::-webkit-scrollbar-thumb:hover{background:#555}.angular-select-dropdown-menu__item{padding:10px;cursor:pointer;border-radius:.625rem;margin-bottom:2px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-family:inherit;color:#1b1f3b}.angular-select-dropdown-menu__item_active,.angular-select-dropdown-menu__item:hover{background-color:#0000000a}.angular-select-dropdown-menu__item:last-child{margin-bottom:0}.angular-select-dropdown-menu__not-found{padding:10px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-family:inherit;color:#1b1f3b66}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { labelHandler: [{
type: Input
}], sortKeyName: [{
type: Input
}], items: [{
type: Input
}], isClearable: [{
type: Input
}], disabled: [{
type: Input
}], closeMenuOnClear: [{
type: Input
}], placeholder: [{
type: Input
}], notFoundMessage: [{
type: Input
}], selectItem: [{
type: Output
}], hostClasses: [{
type: HostBinding,
args: ['class']
}] } });
class AngularSelectDropdownService {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}] });
class AngularSelectDropdownModule {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownModule, declarations: [AngularSelectDropdownComponent, ClickOutsideDirective], imports: [CommonModule], exports: [AngularSelectDropdownComponent] }); }
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownModule, imports: [CommonModule] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AngularSelectDropdownModule, decorators: [{
type: NgModule,
args: [{
declarations: [AngularSelectDropdownComponent, ClickOutsideDirective],
imports: [CommonModule],
exports: [AngularSelectDropdownComponent]
}]
}] });
/*
* Public API Surface of angular-select-dropdown
*/
/**
* Generated bundle index. Do not edit.
*/
export { AngularSelectDropdownComponent, AngularSelectDropdownModule, AngularSelectDropdownService };
//# sourceMappingURL=angular-select-dropdown.mjs.map