ngx-multi-selector
Version:
A small plugin which generates multi-selector control, it supports web api loading. Only supported angular 5.
690 lines (677 loc) • 32.5 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms'), require('rxjs'), require('rxjs/operators'), require('@angular/common')) :
typeof define === 'function' && define.amd ? define('ngx-multi-selector', ['exports', '@angular/core', '@angular/forms', 'rxjs', 'rxjs/operators', '@angular/common'], factory) :
(global = global || self, factory(global['ngx-multi-selector'] = {}, global.ng.core, global.ng.forms, global.rxjs, global.rxjs.operators, global.ng.common));
}(this, function (exports, core, forms, rxjs, operators, common) { 'use strict';
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function __metadata(metadataKey, metadataValue) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
}
function __spread() {
for (var ar = [], i = 0; i < arguments.length; i++)
ar = ar.concat(__read(arguments[i]));
return ar;
}
var NgxMultiSelectorComponent = /** @class */ (function () {
//#endregion
//#region Constructor
/*
* Initiate components with injectors (as available)
* */
function NgxMultiSelectorComponent() {
var _this = this;
//#region Properties
/*
* Delay time between 2 item search requests.
* */
this._defaultItemsInterval = 150;
/*
* Character which is used for separating selected items.
* Default: ,
* */
this._separationCharacter = ',';
/*
* Maximum items that can be displayed in context menu.
* */
this._maximumContextItems = 0;
/*
* How many items can be selected.
* */
this._maximumSelectableItems = 0;
/*
* How much time should component raise another one about its changes.
* */
this._loadItemsInterval = this._defaultItemsInterval;
this._selectedItems = [];
this.items = [];
// By default, items amount is limited to 10.
this._maximumSelectableItems = 10;
this._updateAvailableItemsSubject = new rxjs.ReplaySubject(1);
this._updateAvailableItemsSubscription = this._updateAvailableItemsSubject
.pipe(operators.debounce(function (command) {
if (command.shouldIgnoreInterval) {
return rxjs.EMPTY;
}
return rxjs.timer(_this._loadItemsInterval);
}), operators.map(function (command) {
// Format keyword.
var keyword = _this._keyword;
if (keyword && keyword.length) {
keyword = keyword.trim();
}
return {
keyword: keyword,
command: command
};
}), operators.distinctUntilChanged(function (previous, next) {
// Get current command.
var nextCommand = next.command;
if (!nextCommand.shouldIgnoreDuplicate) {
// Values are equal, it will not emit the current value
return previous.keyword === next.keyword;
}
// Values are different, so it will emit
return false;
}), operators.switchMap(function (model) {
return _this.loadAvailableItemsAsync(model.keyword);
}))
.subscribe(function (availableItems) {
_this._availableItems = __spread(availableItems);
});
}
NgxMultiSelectorComponent_1 = NgxMultiSelectorComponent;
Object.defineProperty(NgxMultiSelectorComponent.prototype, "keyword", {
//#endregion
//#region Accessors
/*
* Keyword is used for searching for items.
* */
get: function () {
return this._keyword;
},
/*
* Keyword is used for searching for items.
* */
set: function (value) {
this._keyword = value;
// Initialize control update command.
var command = {
shouldIgnoreDuplicate: false,
shouldIgnoreInterval: false
};
this._updateAvailableItemsSubject
.next(command);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "separationCharacter", {
/*
* Character which is used for dividing searched items.
* */
set: function (value) {
if (!value || !value.length) {
this._separationCharacter = ',';
return;
}
this._separationCharacter = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "selectedItems", {
/*
* Items which have been selected.
* */
get: function () {
return this._selectedItems;
},
/*
* Get selected items.
* */
set: function (values) {
if (!values || values.length < 0) {
this._selectedItems = [];
return;
}
this._selectedItems = values;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "interval", {
/*
* How much time should component raise another one about its changes.
* */
set: function (value) {
if (value < this._defaultItemsInterval) {
this._loadItemsInterval = this._defaultItemsInterval;
return;
}
this._loadItemsInterval = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "items", {
/*
* Get available items for displaying in drop-down list.
* */
get: function () {
return this._availableItems;
},
/*
* List of item which should be displayed on drop-down menu.
* */
set: function (values) {
if (this.loadAvailableItemsAsyncHandler && this._updateAvailableItemsSubject) {
this._updateAvailableItemsSubject.next(null);
return;
}
if (!values || !values.length || !(values instanceof Array)) {
this._originalItems = [];
this._availableItems = [];
return;
}
this._originalItems = values;
this._availableItems = values;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "maximumContextItem", {
/*
* Get the maximum items that can be displayed in context menu.
* */
get: function () {
return this._maximumContextItems;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "maximumContextItems", {
/*
* How many items should be shown to be selected.
* */
set: function (maximumItems) {
if (maximumItems < 0) {
maximumItems = 0;
}
this._maximumContextItems = maximumItems;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "maximumSelectableItems", {
/*
* Get maximum selectable items.
* */
get: function () {
return this._maximumSelectableItems;
},
/*
* Update the maximum selectable items.
* */
set: function (value) {
if (value < 0 || isNaN(value)) {
this._maximumSelectableItems = 0;
return;
}
this._maximumSelectableItems = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "key", {
/*
* @deprecated
* Please consider using key-property instead.
* Key which is for recognizing whether item is in the chosen list or not.
* */
set: function (value) {
this._key = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "keyProperty", {
/*
* Please consider using key-property instead.
* Key which is for recognizing whether item is in the chosen list or not.
* */
set: function (value) {
this._key = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "displayProperty", {
/*
* Which property should be used as display.
* Null is about using object as display.
* */
set: function (value) {
this._displayProperty = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NgxMultiSelectorComponent.prototype, "valueProperty", {
/*
* Which property should be used as selected value.
* Null is about using object as selected value.
* */
set: function (value) {
this._valueProperty = value;
},
enumerable: true,
configurable: true
});
//#endregion
//#region Methods
NgxMultiSelectorComponent.prototype.ngOnDestroy = function () {
if (this._updateAvailableItemsSubscription && !this._updateAvailableItemsSubscription.closed) {
this._updateAvailableItemsSubscription.unsubscribe();
}
};
/*
* Check whether item has been chosen or not.
* */
NgxMultiSelectorComponent.prototype.hasItemSelected = function (item) {
return this.loadSelectedItemIndex(item) != -1;
};
/*
* Find chosen item index in array.
* */
NgxMultiSelectorComponent.prototype.loadSelectedItemIndex = function (item) {
var _this = this;
// Items list is empty.
if (this._selectedItems == null || this._selectedItems.length < 1) {
return -1;
}
// Get item index.
var itemIndex = this._selectedItems.findIndex(function (selectedItem) { return _this.loadItemUniqueValue(selectedItem) === _this.loadItemUniqueValue(item); });
return itemIndex;
};
/*
* Get title which is used for being displayed on search box.
* */
NgxMultiSelectorComponent.prototype.loadSelectedItemsTitle = function () {
var _this = this;
if (this.selectedItems == null || this.selectedItems.length < 1) {
return '';
}
// Find separation character.
var separationCharacter = this._separationCharacter;
if (!separationCharacter) {
separationCharacter = ',';
}
return this.selectedItems
.map(function (selectedItem) { return _this.loadItemDisplay(selectedItem); })
.join(separationCharacter)
.slice(0, 255);
};
/*
* Clear chosen items list.
* */
NgxMultiSelectorComponent.prototype.deleteSelectedItems = function (shouldRaiseOnChangeCallback) {
// Initiate new array.
this.selectedItems = new Array();
if (shouldRaiseOnChangeCallback) {
this.ngOnChangeCallback(this.selectedItems);
}
};
/*
* Find selected value and delete it.
* */
NgxMultiSelectorComponent.prototype.deleteSelectedValue = function (value) {
var _this = this;
// Get index of value.
if (!this.selectedItems || !this.selectedItems.length) {
return;
}
var itemIndex = this.selectedItems.findIndex(function (selectedItem) { return _this.loadItemValue(selectedItem) == value; });
if (itemIndex < 0) {
return;
}
// Remove item from list.
var selectedValues = __spread(this.selectedItems);
selectedValues.splice(itemIndex, 1);
if (!selectedValues || !selectedValues.length) {
this.selectedItems = null;
this.ngOnChangeCallback(null);
}
else {
this.selectedItems = selectedValues;
this.ngOnChangeCallback(this.selectedItems.map(function (selectedItem) { return _this.loadItemValue(selectedItem); }));
}
};
/*
* Select an item in list.
* */
NgxMultiSelectorComponent.prototype.clickSelectItem = function (item) {
var _this = this;
// Enlist of selected items.
var selectedItems;
if (!this.selectedItems) {
selectedItems = [];
}
else {
selectedItems = __spread(this.selectedItems);
}
// Get item in the selected value.
var itemIndex = this.loadSelectedItemIndex(item);
// Item hasn't been chosen.
if (itemIndex == null || itemIndex < 0) {
// Maximum selected item exceeded.
if (this.maximumSelectableItems != null && (this.maximumSelectableItems > 0 && selectedItems.length >= this.maximumSelectableItems)) {
return;
}
// Get item value.
selectedItems.push(item);
this.selectedItems = selectedItems;
this.ngOnChangeCallback(selectedItems.map(function (selectedItem) { return _this.loadItemValue(selectedItem); }));
return;
}
selectedItems.splice(itemIndex, 1);
if (!selectedItems || !selectedItems.length) {
this.selectedItems = null;
this.ngOnChangeCallback(this.selectedItems);
}
else {
this.selectedItems = selectedItems;
this.ngOnChangeCallback(this.selectedItems);
}
};
/*
* Close drop-down menu.
* */
NgxMultiSelectorComponent.prototype.close = function () {
// Drop-down menu is invalid.
if (this.multiSelectorDropDown == null) {
return;
}
// Find drop-down native element.
var nativeElement = this.multiSelectorDropDown.nativeElement;
if (nativeElement == null) {
return;
}
// Remove class .open from classes list.
nativeElement.classList.remove('open');
};
/*
* Open drop-down menu.
* */
NgxMultiSelectorComponent.prototype.open = function () {
// Component has been disabled.
if (this.disabled) {
return;
}
// Drop-down menu is invalid.
if (this.multiSelectorDropDown == null) {
return;
}
// Find drop-down native element.
var nativeElement = this.multiSelectorDropDown.nativeElement;
if (nativeElement == null) {
return;
}
// Remove class .open from classes list.
this.multiSelectorDropDown.nativeElement.classList.add('open');
};
/*
* Callback which is fired when component receives information from external source.
* */
NgxMultiSelectorComponent.prototype.writeValue = function (selectedValues) {
// No value has been selected.
if (!selectedValues || !selectedValues.length) {
this.selectedItems = null;
return;
}
this.selectedItems = selectedValues;
};
/*
* Callback which is fired when on-change register has been initiated.
* */
NgxMultiSelectorComponent.prototype.registerOnChange = function (fn) {
this.ngOnChangeCallback = fn;
};
/*
* Callback which is fired when on-touch register has been initiated.
* */
NgxMultiSelectorComponent.prototype.registerOnTouched = function (fn) {
this.ngOnTouchedCallback = fn;
};
/*
* Set item to be disabled | enabled.
* */
NgxMultiSelectorComponent.prototype.setDisabledState = function (isDisabled) {
this.disabled = isDisabled;
};
/*
* Load available items asynchronously.
* This function will be used in offline mode.
* */
NgxMultiSelectorComponent.prototype.loadAvailableItemsAsync = function (keyword) {
var _this = this;
// Make the keyword to be upper cased.
var upperCasedKeyword = (keyword == null) ? null : keyword.toUpperCase();
// Get the handler.
var loadAvailableItemsAsyncHandler = this.loadAvailableItemsAsyncHandler;
// No handler is defined for remote data loading.
if (!loadAvailableItemsAsyncHandler) {
// Load available items locally.
return rxjs.of(__spread(this._originalItems))
.pipe(operators.map(function (items) {
if (!items || !items.length) {
return [];
}
return items
.filter(function (item) {
// Get the display property.
var itemDisplay = _this.loadItemDisplay(item);
if (!upperCasedKeyword) {
return items;
}
return itemDisplay.toString().toUpperCase().indexOf(upperCasedKeyword) !== -1;
});
}));
}
// Load available items remotely.
return this.loadAvailableItemsAsyncHandler(keyword);
};
/*
* Load item display.
* */
NgxMultiSelectorComponent.prototype.loadItemDisplay = function (item) {
// Get the display property.
var displayProperty = this._displayProperty;
if (!displayProperty || !displayProperty.length) {
return item.toString();
}
return item[displayProperty];
};
/*
* Load item value.
* */
NgxMultiSelectorComponent.prototype.loadItemValue = function (item) {
// Get defined key.
var valueProperty = this._valueProperty;
if (!valueProperty || !valueProperty.length) {
return item;
}
return item[valueProperty];
};
/*
* Base on key to get item unique value.
* */
NgxMultiSelectorComponent.prototype.loadItemUniqueValue = function (item) {
if (!item) {
return item;
}
// Get key.
var key = this._key;
if (!key || key.length < 1) {
return item;
}
return item[key];
};
NgxMultiSelectorComponent.prototype.ngOnInit = function () {
if (!this.loadAvailableItemsAsyncHandler) {
return;
}
if (!this._updateAvailableItemsSubject) {
return;
}
var updateControlCommand = {
shouldIgnoreDuplicate: true,
shouldIgnoreInterval: true
};
return this._updateAvailableItemsSubject.next(updateControlCommand);
};
var NgxMultiSelectorComponent_1;
__decorate([
core.Input('load-available-items-handler'),
__metadata("design:type", Function)
], NgxMultiSelectorComponent.prototype, "loadAvailableItemsAsyncHandler", void 0);
__decorate([
core.ViewChild('multiSelectorDropdownMenu', { static: false }),
__metadata("design:type", core.ElementRef)
], NgxMultiSelectorComponent.prototype, "multiSelectorDropDown", void 0);
__decorate([
core.Input('is-clear-button-available'),
__metadata("design:type", Boolean)
], NgxMultiSelectorComponent.prototype, "shouldClearButtonAvailable", void 0);
__decorate([
core.Input('is-search-box-available'),
__metadata("design:type", Boolean)
], NgxMultiSelectorComponent.prototype, "shouldSearchBoxAvailable", void 0);
__decorate([
core.Input('placeholder-search-drop-down'),
__metadata("design:type", String)
], NgxMultiSelectorComponent.prototype, "placeholderSearchDropDown", void 0);
__decorate([
core.Input('placeholder-title-drop-down'),
__metadata("design:type", String)
], NgxMultiSelectorComponent.prototype, "placeholderTitleDropDown", void 0);
__decorate([
core.Input('disabled'),
__metadata("design:type", Boolean)
], NgxMultiSelectorComponent.prototype, "disabled", void 0);
__decorate([
core.Input('item-template'),
__metadata("design:type", core.TemplateRef)
], NgxMultiSelectorComponent.prototype, "itemTemplate", void 0);
__decorate([
core.Input('separation-character'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], NgxMultiSelectorComponent.prototype, "separationCharacter", null);
__decorate([
core.Input('interval'),
__metadata("design:type", Number),
__metadata("design:paramtypes", [Number])
], NgxMultiSelectorComponent.prototype, "interval", null);
__decorate([
core.Input('items'),
__metadata("design:type", Array),
__metadata("design:paramtypes", [Array])
], NgxMultiSelectorComponent.prototype, "items", null);
__decorate([
core.Input('limit-item-amount'),
__metadata("design:type", Number),
__metadata("design:paramtypes", [Number])
], NgxMultiSelectorComponent.prototype, "maximumContextItems", null);
__decorate([
core.Input('limit-item-selection'),
__metadata("design:type", Number),
__metadata("design:paramtypes", [Number])
], NgxMultiSelectorComponent.prototype, "maximumSelectableItems", null);
__decorate([
core.Input('key'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], NgxMultiSelectorComponent.prototype, "key", null);
__decorate([
core.Input('key-property'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], NgxMultiSelectorComponent.prototype, "keyProperty", null);
__decorate([
core.Input('display-property'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], NgxMultiSelectorComponent.prototype, "displayProperty", null);
__decorate([
core.Input('value-property'),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], NgxMultiSelectorComponent.prototype, "valueProperty", null);
NgxMultiSelectorComponent = NgxMultiSelectorComponent_1 = __decorate([
core.Component({
selector: 'ngx-multi-selector',
exportAs: 'ngx-multi-selector',
template: "<div class=\"dropdown\">\r\n\r\n <!--Text input-->\r\n <div #multiSelectorDropdownMenu\r\n class=\"input-group ngx-multi-selector\">\r\n <div class=\"dropdown-toggle\"\r\n [attr.data-toggle]=\"disabled ? '': 'dropdown'\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\"\r\n [attr.disabled]=\"disabled\">\r\n <input class=\"form-control ngx-multi-selector-title-box\"\r\n [class.disabled]=\"disabled\"\r\n [placeholder]=\"!placeholderTitleDropDown ? '' : placeholderTitleDropDown\"\r\n readonly=\"readonly\"\r\n [value]=\"loadSelectedItemsTitle()\">\r\n </div>\r\n <span class=\"input-group-addon\"\r\n *ngIf=\"shouldClearButtonAvailable\"\r\n [class.disabled]=\"disabled\"\r\n (click)=\"deleteSelectedItems()\">\r\n <span class=\"glyphicon glyphicon-remove\"></span>\r\n </span>\r\n\r\n <!--Dropdown-->\r\n <span class=\"input-group-addon dropdown-toggle\"\r\n [attr.data-toggle]=\"disabled ? '': 'dropdown'\"\r\n [class.disabled]=\"disabled\"\r\n aria-haspopup=\"true\"\r\n aria-expanded=\"false\">\r\n <span class=\"caret\"></span>\r\n </span>\r\n\r\n <!--Dropdown menu-->\r\n <ul class=\"dropdown-menu\"\r\n (click)=\"$event.stopPropagation();\">\r\n <li *ngIf=\"shouldSearchBoxAvailable\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control\"\r\n [(ngModel)]=\"keyword\"\r\n [placeholder]=\"!placeholderSearchDropDown ? '' : placeholderSearchDropDown\">\r\n <span class=\"input-group-addon\">\r\n <span class=\"glyphicon glyphicon-search\"></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n\r\n <ng-template ngFor\r\n let-item\r\n let-i=\"index\"\r\n [ngForOf]=\"items\">\r\n\r\n <ng-container *ngIf=\"maximumContextItem < 1 || (maximumContextItem > 0 && i < maximumContextItem)\">\r\n <!--Item template-->\r\n <ng-template [ngTemplateOutlet]=\"itemTemplate || defaultItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item:item, index:i, selected: hasItemSelected(item), instance: this}\">\r\n </ng-template>\r\n </ng-container>\r\n\r\n </ng-template>\r\n </ul>\r\n </div>\r\n</div>\r\n\r\n<!--Default item template-->\r\n<ng-template #defaultItemTemplate\r\n let-item=\"item\"\r\n let-i=\"index\"\r\n let-selected=\"selected\"\r\n let-instance=\"instance\">\r\n\r\n <li [class.active]=\"hasItemSelected(item)\"\r\n (click)=\"instance.clickSelectItem(item)\">\r\n <a href=\"javascript:void(0);\">\r\n <span class=\"glyphicon glyphicon-check\"\r\n *ngIf=\"selected\"></span>\r\n {{loadItemDisplay(item)}}\r\n </a>\r\n </li>\r\n</ng-template>\r\n",
providers: [
{
provide: forms.NG_VALUE_ACCESSOR,
useExisting: core.forwardRef(function () { return NgxMultiSelectorComponent_1; }),
multi: true
}
],
styles: [".ngx-multi-selector .dropdown-menu{width:100%}.ngx-multi-selector input.ngx-multi-selector-title-box{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-color:#fff!important;cursor:default}.ngx-multi-selector .input-group-addon.disabled,.ngx-multi-selector .input-group-addon:disabled,.ngx-multi-selector input.ngx-multi-selector-title-box.disabled,.ngx-multi-selector input.ngx-multi-selector-title-box:disabled{background-color:#eee!important;cursor:not-allowed;pointer-events:none}"]
}),
__metadata("design:paramtypes", [])
], NgxMultiSelectorComponent);
return NgxMultiSelectorComponent;
}());
var NgxMultiSelectorModule = /** @class */ (function () {
function NgxMultiSelectorModule() {
}
NgxMultiSelectorModule = __decorate([
core.NgModule({
imports: [common.CommonModule, forms.FormsModule],
declarations: [NgxMultiSelectorComponent],
exports: [NgxMultiSelectorComponent]
})
], NgxMultiSelectorModule);
return NgxMultiSelectorModule;
}());
exports.NgxMultiSelectorComponent = NgxMultiSelectorComponent;
exports.NgxMultiSelectorModule = NgxMultiSelectorModule;
Object.defineProperty(exports, '__esModule', { value: true });
}));
//# sourceMappingURL=ngx-multi-selector.umd.js.map