@anglr/select 13.1.0-beta.20250428112445 → 13.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/changelog.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 13.1.0 (2025-04-28)
4
+
5
+ ### Features
6
+
7
+ - updated `NgSelectOptions` interface
8
+ - **new properties**
9
+ - `containerElement` string that defines element in which should be absolute popup rendered, if not specified, body is used, used only if absolute is set to true, otherwise it has no effect
10
+ - updated `NgSelectComponent` component
11
+ - now allows to render absolute popup in container element
12
+
3
13
  ## Version 13.0.0 (2025-01-27)
4
14
 
5
15
  ### Features
@@ -1,5 +1,5 @@
1
1
  import { Component, ChangeDetectionStrategy, Input, Inject, ChangeDetectorRef, Optional, Type, ContentChildren, QueryList, EventEmitter, forwardRef, resolveForwardRef, ElementRef, Attribute, TemplateRef, ContentChild, ComponentFactoryResolver, ApplicationRef, Injector } from '@angular/core';
2
- import { nameof, isBoolean, isPresent, isString } from '@jscrpt/common';
2
+ import { nameof, isBoolean, isPresent, isString, renderToBody } from '@jscrpt/common';
3
3
  import { extend } from '@jscrpt/common/extend';
4
4
  import { BehaviorSubject } from 'rxjs';
5
5
  import { NG_SELECT_OPTIONS, KEYBOARD_HANDLER_TYPE, NORMAL_STATE_TYPE, POPUP_TYPE, POSITIONER_TYPE, READONLY_STATE_TYPE, VALUE_HANDLER_TYPE, LIVE_SEARCH_TYPE } from '../../misc/types';
@@ -455,7 +455,7 @@ export class NgSelectComponent {
455
455
  }
456
456
  this._absolutePopupType = component;
457
457
  this._absolutePopupElement = this.liveSearchElement[0][0];
458
- // 1. Create a component reference from the component
458
+ // 1. Create a component reference from the component
459
459
  this._absolutePopup = this._componentFactoryResolver
460
460
  .resolveComponentFactory(component)
461
461
  .create(this._injector, this.liveSearchElement);
@@ -465,7 +465,7 @@ export class NgSelectComponent {
465
465
  const domElem = this._absolutePopup.hostView
466
466
  .rootNodes[0];
467
467
  // 4. Append DOM element to the body
468
- document.body.appendChild(domElem);
468
+ renderToBody(document, domElem, this._selectOptions.containerElement);
469
469
  this.setPopupComponent(this._absolutePopup.instance);
470
470
  }
471
471
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"select.component.js","sourceRoot":"","sources":["../../../../src/components/select/select.component.ts","../../../../src/components/select/select.component.html"],"names":[],"mappings":"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","sourcesContent":["import {Component, ChangeDetectionStrategy, FactoryProvider, Input, Inject, ChangeDetectorRef, Optional, Type, AfterViewInit, OnInit, ContentChildren, QueryList, EventEmitter, forwardRef, resolveForwardRef, ElementRef, OnChanges, SimpleChanges, Attribute, OnDestroy, TemplateRef, ContentChild, ComponentFactoryResolver, ApplicationRef, Injector, EmbeddedViewRef, ComponentRef, ClassProvider} from '@angular/core';\nimport {nameof, isBoolean, isPresent, isString} from '@jscrpt/common';\nimport {extend} from '@jscrpt/common/extend';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\n\nimport {NgSelectOptions, NgSelectPlugin, PluginDescription, NormalizeFunc, NgSelectPluginTypes} from '../../misc';\nimport {NG_SELECT_OPTIONS, KEYBOARD_HANDLER_TYPE, NORMAL_STATE_TYPE, POPUP_TYPE, POSITIONER_TYPE, READONLY_STATE_TYPE, VALUE_HANDLER_TYPE, LIVE_SEARCH_TYPE} from '../../misc/types';\nimport {NgSelect, NgSelectPluginInstances, NgSelectAction, NgSelectFunction} from './select.interface';\nimport {NG_SELECT_PLUGIN_INSTANCES} from './types';\nimport {KeyboardHandler} from '../../plugins/keyboardHandler';\nimport {BasicKeyboardHandlerComponent} from '../../plugins/keyboardHandler/components';\nimport {KEYBOARD_HANDLER} from '../../plugins/keyboardHandler/types';\nimport {NormalState, NormalStateContext} from '../../plugins/normalState';\nimport {NORMAL_STATE} from '../../plugins/normalState/types';\nimport {BasicNormalStateComponent} from '../../plugins/normalState/components';\nimport {Popup, PopupContext} from '../../plugins/popup';\nimport {POPUP} from '../../plugins/popup/types';\nimport {BasicPopupComponent} from '../../plugins/popup/component';\nimport {Positioner} from '../../plugins/positioner';\nimport {POSITIONER} from '../../plugins/positioner/types';\nimport {DefaultPositionerComponent} from '../../plugins/positioner/components';\nimport {ReadonlyState} from '../../plugins/readonlyState';\nimport {READONLY_STATE} from '../../plugins/readonlyState/types';\nimport {ValueHandler} from '../../plugins/valueHandler';\nimport {VALUE_HANDLER} from '../../plugins/valueHandler/types';\nimport {BasicValueHandlerComponent} from '../../plugins/valueHandler/components';\nimport {LiveSearch} from '../../plugins/liveSearch';\nimport {LIVE_SEARCH} from '../../plugins/liveSearch/types';\nimport {NoLiveSearchComponent} from '../../plugins/liveSearch/components';\nimport {NgSelectOption, NgSelectOptGroup} from '../option';\nimport {OptionComponent} from '../option/option.component';\nimport {OptGroupComponent} from '../option/optgroup.component';\nimport {PluginBus} from '../../misc/pluginBus/pluginBus';\nimport {PluginBusEvents} from '../../misc/pluginBus/pluginBus.interface';\n\n//TODO - dynamic change of absolute popup\n//TODO - dynamic change of options gatherer destroy called properly ?\n\n/**\n * Default 'NgSelectOptions'\n * @internal\n */\nconst defaultOptions: NgSelectOptions =\n{\n autoInitialize: true,\n absolute: false,\n forceValueCheckOnInit: false,\n multiple: false,\n readonly: false,\n valueComparer: (source, target) =>\n {\n return source === target;\n },\n liveSearchFilter: (query: string, normalizer: NormalizeFunc = value => value) =>\n {\n return itm => normalizer(itm.text).indexOf(normalizer(query)) >= 0;\n },\n normalizer: value =>\n {\n if(isString(value))\n {\n return value.toLowerCase();\n }\n\n return value;\n },\n cssClasses:\n {\n },\n plugins:\n {\n normalState: <PluginDescription<BasicNormalStateComponent>>\n {\n type: forwardRef(() => BasicNormalStateComponent)\n },\n liveSearch: <PluginDescription<NoLiveSearchComponent>>\n {\n type: forwardRef(() => NoLiveSearchComponent)\n },\n popup: <PluginDescription<BasicPopupComponent>>\n {\n type: forwardRef(() => BasicPopupComponent)\n },\n positioner: <PluginDescription<DefaultPositionerComponent>>\n {\n type: forwardRef(() => DefaultPositionerComponent)\n },\n keyboardHandler: <PluginDescription<BasicKeyboardHandlerComponent>>\n {\n type: forwardRef(() => BasicKeyboardHandlerComponent)\n },\n readonlyState: <PluginDescription<ReadonlyState>>\n {\n type: forwardRef(() => BasicNormalStateComponent)\n },\n valueHandler: <PluginDescription<BasicValueHandlerComponent>>\n {\n type: forwardRef(() => BasicValueHandlerComponent)\n }\n }\n};\n\n/**\n * Component that represents NgSelect itself, allows selection of value from options\n */\n@Component(\n{\n selector: 'ng-select',\n templateUrl: 'select.component.html',\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers:\n [\n <FactoryProvider>\n {\n provide: NG_SELECT_PLUGIN_INSTANCES,\n useFactory: () => {return {};}\n },\n <ClassProvider>\n {\n provide: PluginBus,\n useClass: PluginBus\n }\n ],\n styles: [\n `:host\n {\n display: block;\n position: relative;\n }`\n ]\n})\nexport class NgSelectComponent<TValue = any> implements NgSelect<TValue>, OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * NgSelect options\n */\n protected _selectOptions: NgSelectOptions<TValue>;\n\n /**\n * Subject used for indication that NgSelect was initialized\n */\n protected _initializedSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n /**\n * Occurs when array of provided options has changed\n */\n protected _optionsChange: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Occurs when array of visible, displayed options has changed\n */\n protected _availableOptionsChange: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Array of available options to be displayed\n */\n protected _availableOptions: NgSelectOption<TValue>[] = [];\n\n /**\n * Live search plugin currently used in NgSelect\n */\n protected _liveSearch: LiveSearch;\n\n /**\n * Subscription for changes of live search value\n */\n protected _searchValueChangeSubscription: Subscription;\n\n /**\n * Instance of component ref for absolute popup\n */\n protected _absolutePopup: ComponentRef<Popup>;\n\n /**\n * Instance of type that is used as absolute popup\n */\n protected _absolutePopupType: Type<Popup>;\n\n /**\n * Instance of html element that is used\n */\n protected _absolutePopupElement: HTMLElement;\n\n //######################### public properties - inputs #########################\n\n /**\n * Gets or sets NgSelect options\n */\n @Input()\n public get selectOptions(): NgSelectOptions<TValue>\n {\n return this._selectOptions;\n }\n public set selectOptions(options: NgSelectOptions<TValue>)\n {\n this._selectOptions = extend(true, this._selectOptions, options);\n this._pluginBus.selectOptions = this._selectOptions;\n }\n\n /**\n * Indication whether should be NgSelect disabled or not\n */\n @Input()\n public disabled: boolean;\n\n /**\n * Indication whether should be NgSelect readonly or not\n */\n @Input()\n public readonly: boolean;\n\n //######################### public properties - implementation of NgSelect #########################\n\n /**\n * Occurs every time when NgSelect is initialized or reinitialized, if value is false NgSelect was not initialized yet\n */\n public get initialized(): Observable<boolean>\n {\n return this._initializedSubject.asObservable();\n }\n\n /**\n * Gets current state of initialization\n */\n public isInitialized: boolean = false;\n\n //######################### public properties - implementation of TemplateGatherer #########################\n\n /**\n * Template used within normal state\n */\n @ContentChild('normalStateTemplate')\n public normalStateTemplate: TemplateRef<NormalStateContext>;\n\n /**\n * Template that is used within Popup as option\n * @internal\n */\n @ContentChild('optionTemplate')\n public optionTemplate?: TemplateRef<PopupContext>;\n\n //######################### public properties - implementation of OptionsGatherer #########################\n\n /**\n * Array of provided options for select\n */\n public get options(): NgSelectOption<TValue>[]\n {\n return this.optionsChildren.toArray();\n }\n\n /**\n * Occurs when array of provided options has changed\n */\n public get optionsChange(): EventEmitter<void>\n {\n return this._optionsChange;\n }\n\n /**\n * Array of visible, displayed options for select\n */\n public get availableOptions(): NgSelectOption<TValue>[]\n {\n return this._availableOptions;\n }\n\n /**\n * Occurs when array of visible, displayed options has changed\n */\n public get availableOptionsChange(): EventEmitter<void>\n {\n return this._availableOptionsChange;\n }\n\n /**\n * NgSelect plugin instances available for gatherer\n */\n public ngSelectPlugins: NgSelectPluginInstances;\n\n /**\n * Plugin bus used for inter plugin shared events\n */\n public pluginBus: PluginBus<TValue>;\n\n /**\n * Select element that implements default gatherers\n */\n public select: NgSelect<TValue>;\n\n //######################### public properties - template bindings #########################\n\n /**\n * Element used for live search\n */\n public liveSearchElement: HTMLElement[][];\n\n //######################### public properties - children #########################\n\n /**\n * Options children found inside ng-select\n */\n @ContentChildren(OptionComponent)\n public optionsChildren: QueryList<NgSelectOption>;\n\n //######################### public properties - children #########################\n\n /**\n * Options groups children found inside ng-select\n */\n @ContentChildren(OptGroupComponent)\n public optGroupsChildren: QueryList<NgSelectOptGroup>;\n\n //######################### constructors #########################\n constructor(protected _changeDetector: ChangeDetectorRef,\n protected _element: ElementRef<HTMLElement>,\n protected _componentFactoryResolver: ComponentFactoryResolver,\n protected _appRef: ApplicationRef,\n protected _injector: Injector,\n protected _pluginBus: PluginBus<TValue>,\n @Inject(NG_SELECT_PLUGIN_INSTANCES) protected _pluginInstances: NgSelectPluginInstances,\n @Inject(NG_SELECT_OPTIONS) @Optional() options?: NgSelectOptions<TValue>,\n @Inject(NORMAL_STATE_TYPE) @Optional() normalStateType?: Type<NormalState>,\n @Inject(KEYBOARD_HANDLER_TYPE) @Optional() keyboardHandlerType?: Type<KeyboardHandler>,\n @Inject(POPUP_TYPE) @Optional() popupType?: Type<Popup>,\n @Inject(POSITIONER_TYPE) @Optional() positionerType?: Type<Positioner>,\n @Inject(READONLY_STATE_TYPE) @Optional() readonlyStateType?: Type<ReadonlyState>,\n @Inject(VALUE_HANDLER_TYPE) @Optional() valueHandlerType?: Type<ValueHandler>,\n @Inject(LIVE_SEARCH_TYPE) @Optional() liveSearchType?: Type<LiveSearch>,\n @Attribute('readonly') readonly?: string,\n @Attribute('disabled') disabled?: string,\n @Attribute('multiple') multiple?: string)\n {\n //at least on of following is present (value is not important)\n const readonlyDefault = isPresent(readonly) || isPresent(disabled);\n const multipleDefault = isPresent(multiple);\n const opts: NgSelectOptions<TValue> = extend(true, {}, options);\n\n if(!opts.plugins)\n {\n opts.plugins = {};\n }\n\n if(keyboardHandlerType)\n {\n if(!opts.plugins.keyboardHandler)\n {\n opts.plugins.keyboardHandler = {};\n }\n\n opts.plugins.keyboardHandler.type = keyboardHandlerType;\n }\n\n if(normalStateType)\n {\n if(!opts.plugins.normalState)\n {\n opts.plugins.normalState = {};\n }\n\n opts.plugins.normalState.type = normalStateType;\n }\n\n if(popupType)\n {\n if(!opts.plugins.popup)\n {\n opts.plugins.popup = {};\n }\n\n opts.plugins.popup.type = popupType;\n }\n\n if(positionerType)\n {\n if(!opts.plugins.positioner)\n {\n opts.plugins.positioner = {};\n }\n\n opts.plugins.positioner.type = positionerType;\n }\n\n if(readonlyStateType)\n {\n if(!opts.plugins.readonlyState)\n {\n opts.plugins.readonlyState = {};\n }\n\n opts.plugins.readonlyState.type = readonlyStateType;\n }\n\n if(valueHandlerType)\n {\n if(!opts.plugins.valueHandler)\n {\n opts.plugins.valueHandler = {};\n }\n\n opts.plugins.valueHandler.type = valueHandlerType;\n }\n\n if(liveSearchType)\n {\n if(!opts.plugins.liveSearch)\n {\n opts.plugins.liveSearch = {};\n }\n\n opts.plugins.liveSearch.type = liveSearchType;\n }\n\n this._selectOptions = extend(true,\n <NgSelectOptions<TValue>>\n {\n optionsGatherer: this,\n templateGatherer: this,\n },\n defaultOptions,\n <NgSelectOptions<TValue>>\n {\n readonly: readonlyDefault,\n multiple: multipleDefault\n },\n opts);\n\n this._pluginBus.selectElement = this._element;\n this._pluginBus.selectOptions = this._selectOptions;\n }\n\n //######################### public methods - implementation of OnChanges #########################\n\n /**\n * Called when input value changes\n */\n public ngOnChanges(changes: SimpleChanges): void\n {\n const updateReadonly = (state: boolean, firstChange: boolean) =>\n {\n //update options\n this.selectOptions.readonly = state;\n\n if(!firstChange)\n {\n this.initOptions();\n this.initialize();\n }\n };\n\n if(nameof<NgSelectComponent<TValue>>('disabled') in changes && isBoolean(this.disabled))\n {\n updateReadonly(this.disabled, changes[nameof<NgSelectComponent<TValue>>('disabled')].firstChange);\n }\n\n if(nameof<NgSelectComponent<TValue>>('readonly') in changes && isBoolean(this.readonly))\n {\n updateReadonly(this.readonly, changes[nameof<NgSelectComponent<TValue>>('readonly')].firstChange);\n }\n }\n\n //######################### public methods - implementation of OnInit #########################\n\n /**\n * Initialize component\n */\n public ngOnInit()\n {\n this.initOptions();\n }\n\n //######################### public methods - implementation of AfterViewInit #########################\n\n /**\n * Called when view was initialized\n */\n public ngAfterViewInit()\n {\n this._availableOptions = this.options;\n\n this.optionsChildren.changes.subscribe(() =>\n {\n this._availableOptions = this.options;\n this._optionsChange.emit();\n this._availableOptionsChange.emit();\n });\n \n if(this._selectOptions.autoInitialize)\n {\n this.initialize();\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * Called when component is destroyed\n */\n public ngOnDestroy()\n {\n this._searchValueChangeSubscription?.unsubscribe();\n this._searchValueChangeSubscription = null;\n\n this.selectOptions.optionsGatherer?.destroyGatherer();\n\n this._destroyAbsolutePopup();\n }\n\n //######################### public methods - implementation of OptionsGatherer #########################\n\n /**\n * Initialize gatherer during initialization phase\n */\n public initializeGatherer(): void\n {\n const liveSearch = this._pluginInstances[LIVE_SEARCH] as LiveSearch;\n\n if(this._liveSearch && this._liveSearch != liveSearch)\n {\n this._searchValueChangeSubscription.unsubscribe();\n this._searchValueChangeSubscription = null;\n\n this._liveSearch = null;\n }\n\n if(!this._liveSearch)\n {\n this._liveSearch = liveSearch;\n\n this._searchValueChangeSubscription = this._liveSearch.searchValueChange.subscribe(() =>\n {\n if(!this._liveSearch.searchValue)\n {\n this._availableOptions = this.options;\n this._availableOptionsChange.emit();\n\n return;\n }\n\n this._availableOptions = this.options.filter(this.selectOptions.liveSearchFilter(this._liveSearch.searchValue, this.selectOptions.normalizer));\n this._availableOptionsChange.emit();\n });\n }\n }\n\n /**\n * Called when gatherer needs to be destroyed\n */\n public destroyGatherer(): void\n {\n }\n\n //######################### public methods - template bindings #########################\n\n /**\n * Sets normal state component\n * @param normalState - Created normal state that is rendered\n * @internal\n */\n public setNormalStateComponent(normalState: NormalState)\n {\n this._registerNewPlugin(normalState, NORMAL_STATE, 'normalState');\n }\n\n /**\n * Sets keyboard handler component\n * @param keyboardHandler - Created keyboard handler that is rendered\n * @internal\n */\n public setKeyboardHandlerComponent(keyboardHandler: KeyboardHandler)\n {\n this._registerNewPlugin(keyboardHandler, KEYBOARD_HANDLER, 'keyboardHandler');\n }\n\n /**\n * Sets popup component\n * @param popup - Created popup that is rendered\n * @internal\n */\n public setPopupComponent(popup: Popup)\n {\n this._registerNewPlugin(popup, POPUP, 'popup');\n }\n\n /**\n * Sets positioner component\n * @param positioner - Created positioner that is rendered\n * @internal\n */\n public setPositionerComponent(positioner: Positioner)\n {\n this._registerNewPlugin(positioner, POSITIONER, 'positioner');\n }\n\n /**\n * Sets readonly state component\n * @param readonlyState - Created readonly state that is rendered\n * @internal\n */\n public setReadonlyStateComponent(readonlyState: ReadonlyState)\n {\n this._registerNewPlugin(readonlyState, READONLY_STATE, 'readonlyState');\n this._pluginInstances[NORMAL_STATE] = this._pluginInstances[READONLY_STATE];\n }\n\n /**\n * Sets value handler component\n * @param valueHandler - Created value handler that is rendered\n * @internal\n */\n public setValueHandlerComponent(valueHandler: ValueHandler<TValue>)\n {\n this._registerNewPlugin(valueHandler, VALUE_HANDLER, 'valueHandler');\n }\n\n /**\n * Sets live search component\n * @param liveSearch - Created live search that is rendered\n * @internal\n */\n public setLiveSearchComponent(liveSearch: LiveSearch)\n {\n this._registerNewPlugin(liveSearch, LIVE_SEARCH, 'liveSearch');\n }\n\n //######################### public methods #########################\n\n /**\n * Initialize component, automatically called once if not blocked by options\n */\n public initialize()\n {\n const liveSearchPlugin = this._pluginInstances[LIVE_SEARCH] as LiveSearch;\n this.liveSearchElement = [[liveSearchPlugin.liveSearchElement]];\n\n if(this.selectOptions.absolute)\n {\n this._appendPopupToBody(this._selectOptions.plugins.popup.type);\n }\n\n this._changeDetector.detectChanges();\n \n this.selectOptions.optionsGatherer.initializeGatherer();\n\n this._pluginInstances[LIVE_SEARCH].initialize();\n this._pluginInstances[KEYBOARD_HANDLER].initialize();\n this._pluginInstances[VALUE_HANDLER].initialize();\n this._pluginInstances[NORMAL_STATE]?.initialize();\n this._pluginInstances[READONLY_STATE]?.initialize();\n this._pluginInstances[POPUP].initialize();\n this._pluginInstances[POSITIONER].initialize();\n\n this.isInitialized = true;\n this._initializedSubject.next(true);\n }\n\n /**\n * Initialize options, automaticaly called during init phase, but can be used to reinitialize NgSelectOptions\n */\n public initOptions()\n {\n this.selectOptions.optionsGatherer.ngSelectPlugins = this._pluginInstances;\n this.selectOptions.optionsGatherer.pluginBus = this._pluginBus;\n this.selectOptions.optionsGatherer.select = this;\n\n const initOptionsPlugin = (pluginKey: string, pluginName: keyof NgSelectPluginTypes) =>\n {\n if(this._selectOptions.plugins[pluginName])\n {\n this._selectOptions.plugins[pluginName].type = resolveForwardRef(this._selectOptions.plugins[pluginName].type);\n\n if(this._pluginInstances[pluginKey])\n {\n if(this._selectOptions.plugins && this._selectOptions.plugins[pluginName] && this._selectOptions.plugins[pluginName].options)\n {\n this._pluginInstances[pluginKey].options = this._selectOptions.plugins[pluginName].options;\n }\n\n this._pluginInstances[pluginKey].initOptions();\n }\n }\n };\n\n if(this._selectOptions.plugins)\n {\n initOptionsPlugin(NORMAL_STATE, 'normalState');\n initOptionsPlugin(KEYBOARD_HANDLER, 'keyboardHandler');\n initOptionsPlugin(POPUP, 'popup');\n initOptionsPlugin(POSITIONER, 'positioner');\n initOptionsPlugin(READONLY_STATE, 'readonlyState');\n initOptionsPlugin(VALUE_HANDLER, 'valueHandler');\n initOptionsPlugin(LIVE_SEARCH, 'liveSearch');\n }\n }\n\n /**\n * Explicitly runs invalidation of content (change detection)\n */\n public invalidateVisuals(): void\n {\n this._changeDetector.detectChanges();\n }\n\n /**\n * Gets instance of plugin by its id\n * @param pluginId - Id of plugin, use constants\n */\n public getPlugin<PluginType extends NgSelectPlugin>(pluginId: string): PluginType\n {\n return this._pluginInstances[pluginId] as PluginType;\n }\n\n /**\n * Subscribes for event\n * @param eventName - Name of event that should be listened to\n * @param handler - Function used for handling event\n */\n public listenTo<TParam = void>(eventName: keyof PluginBusEvents, handler: (data: TParam) => void): Subscription\n {\n return this._pluginBus[eventName].subscribe(handler);\n }\n\n /**\n * Executes actions on NgSelect\n * @param actions - Array of actions that are executed over NgSelect\n */\n public execute(...actions: NgSelectAction<TValue>[])\n {\n if(!actions)\n {\n return;\n }\n\n actions.forEach(action => action(this));\n }\n\n /**\n * Executes function on NgSelect and returns result\n * @param func - Function that is executed and its result is returned\n */\n public executeAndReturn<TResult>(func: NgSelectFunction<TResult, TValue>): TResult\n {\n if(!func)\n {\n return null;\n }\n\n return func(this);\n }\n\n //######################### protected methods #########################\n\n /**\n * Appends popup component directly to body, allows absolute positioning over page body\n * @param component - Popup component type to be appended\n */\n protected _appendPopupToBody(component: Type<Popup>) \n {\n //do not reinitialize if already exists and nothing has changed\n if(this._absolutePopupType == component && this.liveSearchElement[0][0] == this._absolutePopupElement)\n {\n return;\n }\n\n // 0. Destroyes absolute popup if it exists\n this._destroyAbsolutePopup();\n\n if(!component)\n {\n return;\n }\n\n this._absolutePopupType = component;\n this._absolutePopupElement = this.liveSearchElement[0][0];\n\n // 1. Create a component reference from the component \n this._absolutePopup = this._componentFactoryResolver\n .resolveComponentFactory(component)\n .create(this._injector, this.liveSearchElement);\n \n // 2. Attach component to the appRef so that it's inside the ng component tree\n this._appRef.attachView(this._absolutePopup.hostView);\n \n // 3. Get DOM element from component\n const domElem = (this._absolutePopup.hostView as EmbeddedViewRef<any>)\n .rootNodes[0] as HTMLElement;\n \n // 4. Append DOM element to the body\n document.body.appendChild(domElem);\n\n this.setPopupComponent(this._absolutePopup.instance);\n }\n\n /**\n * Destroyes absolute popup if it exists\n */\n protected _destroyAbsolutePopup()\n {\n if(this._absolutePopup)\n {\n this._appRef.detachView(this._absolutePopup.hostView);\n this._absolutePopup.destroy();\n this._absolutePopup = null;\n this._absolutePopupType = null;\n this._absolutePopupElement = null;\n }\n }\n\n /**\n * Registers newly created plugin\n * @param plugin - Plugin to be registered\n * @param pluginKey - Key of plugin used for pluginInstances\n * @param pluginName - Name property for plugin from options\n */\n protected _registerNewPlugin(plugin: NgSelectPlugin, pluginKey: string, pluginName: keyof NgSelectPluginTypes)\n {\n if(!plugin)\n {\n this._pluginInstances[pluginKey] = null;\n\n return;\n }\n\n this._pluginInstances[pluginKey] = plugin;\n\n if(this._selectOptions.plugins && this._selectOptions.plugins[pluginName] && this._selectOptions.plugins[pluginName].options)\n {\n plugin.options = this._selectOptions.plugins[pluginName].options;\n }\n\n plugin.initOptions();\n\n if(this._selectOptions.plugins && this._selectOptions.plugins[pluginName] && this._selectOptions.plugins[pluginName].instanceCallback)\n {\n this._selectOptions.plugins[pluginName].instanceCallback(plugin);\n }\n }\n}","<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.liveSearch?.type\" (ngComponentOutletExCreated)=\"setLiveSearchComponent($event)\"></ng-template>\r\n<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.positioner?.type\" (ngComponentOutletExCreated)=\"setPositionerComponent($event)\"></ng-template>\r\n<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.keyboardHandler?.type\" (ngComponentOutletExCreated)=\"setKeyboardHandlerComponent($event)\"></ng-template>\r\n<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.valueHandler?.type\" (ngComponentOutletExCreated)=\"setValueHandlerComponent($event)\"></ng-template>\r\n\r\n<div>\r\n <ng-template [ngIf]=\"!selectOptions?.readonly\">\r\n <ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.normalState?.type\" (ngComponentOutletExCreated)=\"setNormalStateComponent($event)\" [ngComponentOutletExContent]=\"liveSearchElement\"></ng-template>\r\n </ng-template>\r\n\r\n <ng-template [ngIf]=\"selectOptions?.readonly\">\r\n <ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.readonlyState?.type\" (ngComponentOutletExCreated)=\"setReadonlyStateComponent($event)\"></ng-template>\r\n </ng-template>\r\n\r\n <ng-template [ngIf]=\"!selectOptions?.absolute\">\r\n <ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.popup?.type\" (ngComponentOutletExCreated)=\"setPopupComponent($event)\" [ngComponentOutletExContent]=\"liveSearchElement\"></ng-template>\r\n </ng-template>\r\n</div>"]}
1
+ {"version":3,"file":"select.component.js","sourceRoot":"","sources":["../../../../src/components/select/select.component.ts","../../../../src/components/select/select.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,uBAAuB,EAAmB,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAyB,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAA4B,SAAS,EAAa,WAAW,EAAE,YAAY,EAAE,wBAAwB,EAAE,cAAc,EAAE,QAAQ,EAA+C,MAAM,eAAe,CAAC;AAC7Z,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAC,eAAe,EAA2B,MAAM,MAAM,CAAC;AAG/D,OAAO,EAAC,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAErL,OAAO,EAAC,0BAA0B,EAAC,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAC,6BAA6B,EAAC,MAAM,0CAA0C,CAAC;AACvF,OAAO,EAAC,gBAAgB,EAAC,MAAM,qCAAqC,CAAC;AAErE,OAAO,EAAC,YAAY,EAAC,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAC,yBAAyB,EAAC,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAAC,KAAK,EAAC,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAC,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAC,UAAU,EAAC,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAC,0BAA0B,EAAC,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAAC,cAAc,EAAC,MAAM,mCAAmC,CAAC;AAEjE,OAAO,EAAC,aAAa,EAAC,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAC,0BAA0B,EAAC,MAAM,uCAAuC,CAAC;AAEjF,OAAO,EAAC,WAAW,EAAC,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAC,qBAAqB,EAAC,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAC,SAAS,EAAC,MAAM,gCAAgC,CAAC;;;;;AAGzD,yCAAyC;AACzC,qEAAqE;AAErE;;;GAGG;AACH,MAAM,cAAc,GACpB;IACI,cAAc,EAAE,IAAI;IACpB,QAAQ,EAAE,KAAK;IACf,qBAAqB,EAAE,KAAK;IAC5B,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,KAAK;IACf,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAE9B,OAAO,MAAM,KAAK,MAAM,CAAC;IAC7B,CAAC;IACD,gBAAgB,EAAE,CAAC,KAAa,EAAE,aAA4B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;QAE5E,OAAO,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,CAAC;IACD,UAAU,EAAE,KAAK,CAAC,EAAE;QAEhB,IAAG,QAAQ,CAAC,KAAK,CAAC,EAClB,CAAC;YACG,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,UAAU,EACV,EACC;IACD,OAAO,EACP;QACI,WAAW,EACX;YACI,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC;SACpD;QACD,UAAU,EACV;YACI,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC;SAChD;QACD,KAAK,EACL;YACI,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC;SAC9C;QACD,UAAU,EACV;YACI,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,0BAA0B,CAAC;SACrD;QACD,eAAe,EACf;YACI,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,6BAA6B,CAAC;SACxD;QACD,aAAa,EACb;YACI,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC;SACpD;QACD,YAAY,EACZ;YACI,IAAI,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,0BAA0B,CAAC;SACrD;KACJ;CACJ,CAAC;AAEF;;GAEG;AA4BH,MAAM,OAAO,iBAAiB;IAsD1B,gFAAgF;IAEhF;;OAEG;IACH,IACW,aAAa;QAEpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IACD,IAAW,aAAa,CAAC,OAAgC;QAErD,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;IACxD,CAAC;IAcD,oGAAoG;IAEpG;;OAEG;IACH,IAAW,WAAW;QAElB,OAAO,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;IACnD,CAAC;IAsBD,2GAA2G;IAE3G;;OAEG;IACH,IAAW,OAAO;QAEd,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QAEpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QAEvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,sBAAsB;QAE7B,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACxC,CAAC;IAwCD,kEAAkE;IAClE,YAAsB,eAAkC,EAClC,QAAiC,EACjC,yBAAmD,EACnD,OAAuB,EACvB,SAAmB,EACnB,UAA6B,EACO,gBAAyC,EAChD,OAAiC,EACjC,eAAmC,EAC/B,mBAA2C,EACtD,SAAuB,EAClB,cAAiC,EAC7B,iBAAuC,EACxC,gBAAqC,EACvC,cAAiC,EAChD,QAAiB,EACjB,QAAiB,EACjB,QAAiB;QAjB9B,oBAAe,GAAf,eAAe,CAAmB;QAClC,aAAQ,GAAR,QAAQ,CAAyB;QACjC,8BAAyB,GAAzB,yBAAyB,CAA0B;QACnD,YAAO,GAAP,OAAO,CAAgB;QACvB,cAAS,GAAT,SAAS,CAAU;QACnB,eAAU,GAAV,UAAU,CAAmB;QACO,qBAAgB,GAAhB,gBAAgB,CAAyB;QAtLnG;;WAEG;QACO,wBAAmB,GAA6B,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAE9F;;WAEG;QACO,mBAAc,GAAuB,IAAI,YAAY,EAAQ,CAAC;QAExE;;WAEG;QACO,4BAAuB,GAAuB,IAAI,YAAY,EAAQ,CAAC;QAEjF;;WAEG;QACO,sBAAiB,GAA6B,EAAE,CAAC;QAiE3D;;WAEG;QACI,kBAAa,GAAY,KAAK,CAAC;QA6GlC,8DAA8D;QAC9D,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAA4B,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAG,CAAC,IAAI,CAAC,OAAO,EAChB,CAAC;YACG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,CAAC;QAED,IAAG,mBAAmB,EACtB,CAAC;YACG,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAChC,CAAC;gBACG,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC;YACtC,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAC5D,CAAC;QAED,IAAG,eAAe,EAClB,CAAC;YACG,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAC5B,CAAC;gBACG,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,GAAG,eAAe,CAAC;QACpD,CAAC;QAED,IAAG,SAAS,EACZ,CAAC;YACG,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EACtB,CAAC;gBACG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;QACxC,CAAC;QAED,IAAG,cAAc,EACjB,CAAC;YACG,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAC3B,CAAC;gBACG,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,cAAc,CAAC;QAClD,CAAC;QAED,IAAG,iBAAiB,EACpB,CAAC;YACG,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAC9B,CAAC;gBACG,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,iBAAiB,CAAC;QACxD,CAAC;QAED,IAAG,gBAAgB,EACnB,CAAC;YACG,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAC7B,CAAC;gBACG,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,gBAAgB,CAAC;QACtD,CAAC;QAED,IAAG,cAAc,EACjB,CAAC;YACG,IAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAC3B,CAAC;gBACG,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;YACjC,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,cAAc,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,IAAI,EAEJ;YACI,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;SACzB,EACD,cAAc,EAEd;YACI,QAAQ,EAAE,eAAe;YACzB,QAAQ,EAAE,eAAe;SAC5B,EACD,IAAI,CAAC,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;IACxD,CAAC;IAED,kGAAkG;IAElG;;OAEG;IACI,WAAW,CAAC,OAAsB;QAErC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAE,WAAoB,EAAE,EAAE;YAE5D,gBAAgB;YAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,CAAC;YAEpC,IAAG,CAAC,WAAW,EACf,CAAC;gBACG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,CAAC;QACL,CAAC,CAAC;QAEF,IAAG,MAAM,CAA4B,UAAU,CAAC,IAAI,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACvF,CAAC;YACG,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAA4B,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACtG,CAAC;QAED,IAAG,MAAM,CAA4B,UAAU,CAAC,IAAI,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACvF,CAAC;YACG,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAA4B,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACtG,CAAC;IACL,CAAC;IAED,+FAA+F;IAE/F;;OAEG;IACI,QAAQ;QAEX,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,sGAAsG;IAEtG;;OAEG;IACI,eAAe;QAElB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC;QAEtC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE;YAExC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC;YACtC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAG,IAAI,CAAC,cAAc,CAAC,cAAc,EACrC,CAAC;YACG,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,CAAC;IACL,CAAC;IAED,kGAAkG;IAElG;;OAEG;IACI,WAAW;QAEd,IAAI,CAAC,8BAA8B,EAAE,WAAW,EAAE,CAAC;QACnD,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;QAE3C,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,eAAe,EAAE,CAAC;QAEtD,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED,wGAAwG;IAExG;;OAEG;IACI,kBAAkB;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAe,CAAC;QAEpE,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU,EACrD,CAAC;YACG,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE,CAAC;YAClD,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC;YAE3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;QAED,IAAG,CAAC,IAAI,CAAC,WAAW,EACpB,CAAC;YACG,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAE9B,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE;gBAEpF,IAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAChC,CAAC;oBACG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC;oBACtC,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;oBAEpC,OAAO;gBACX,CAAC;gBAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC/I,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;YACxC,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED;;OAEG;IACI,eAAe;IAEtB,CAAC;IAED,wFAAwF;IAExF;;;;OAIG;IACI,uBAAuB,CAAC,WAAwB;QAEnD,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACI,2BAA2B,CAAC,eAAgC;QAE/D,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAClF,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,KAAY;QAEjC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,UAAsB;QAEhD,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACI,yBAAyB,CAAC,aAA4B;QAEzD,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAChF,CAAC;IAED;;;;OAIG;IACI,wBAAwB,CAAC,YAAkC;QAE9D,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IACzE,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,UAAsB;QAEhD,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACnE,CAAC;IAED,oEAAoE;IAEpE;;OAEG;IACI,UAAU;QAEb,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAe,CAAC;QAC1E,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAEhE,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAC9B,CAAC;YACG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;QAErC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,kBAAkB,EAAE,CAAC;QAExD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,CAAC;QACrD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;QACpD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC;QAE/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,WAAW;QAEd,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3E,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC;QAEjD,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,UAAqC,EAAE,EAAE;YAEnF,IAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,EAC1C,CAAC;gBACG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;gBAE/G,IAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACnC,CAAC;oBACG,IAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,EAC5H,CAAC;wBACG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;oBAC/F,CAAC;oBAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;gBACnD,CAAC;YACL,CAAC;QACL,CAAC,CAAC;QAEF,IAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAC9B,CAAC;YACG,iBAAiB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;YAC/C,iBAAiB,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;YACvD,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAClC,iBAAiB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAC5C,iBAAiB,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;YACnD,iBAAiB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;YACjD,iBAAiB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACjD,CAAC;IACL,CAAC;IAED;;OAEG;IACI,iBAAiB;QAEpB,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC;IAED;;;OAGG;IACI,SAAS,CAAoC,QAAgB;QAEhE,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAe,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAgB,SAAgC,EAAE,OAA+B;QAE5F,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,GAAG,OAAiC;QAE/C,IAAG,CAAC,OAAO,EACX,CAAC;YACG,OAAO;QACX,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAU,IAAuC;QAEpE,IAAG,CAAC,IAAI,EACR,CAAC;YACG,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,uEAAuE;IAEvE;;;OAGG;IACO,kBAAkB,CAAC,SAAsB;QAE/C,+DAA+D;QAC/D,IAAG,IAAI,CAAC,kBAAkB,IAAI,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,qBAAqB,EACrG,CAAC;YACG,OAAO;QACX,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAG,CAAC,SAAS,EACb,CAAC;YACG,OAAO;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1D,qDAAqD;QACrD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,yBAAyB;aAC/C,uBAAuB,CAAC,SAAS,CAAC;aAClC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpD,8EAA8E;QAC9E,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEtD,oCAAoC;QACpC,MAAM,OAAO,GAAI,IAAI,CAAC,cAAc,CAAC,QAAiC;aACjE,SAAS,CAAC,CAAC,CAAgB,CAAC;QAEjC,oCAAoC;QACpC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAEtE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACO,qBAAqB;QAE3B,IAAG,IAAI,CAAC,cAAc,EACtB,CAAC;YACG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACtC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACO,kBAAkB,CAAC,MAAsB,EAAE,SAAiB,EAAE,UAAqC;QAEzG,IAAG,CAAC,MAAM,EACV,CAAC;YACG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;YAExC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QAE1C,IAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,EAC5H,CAAC;YACG,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC;QACrE,CAAC;QAED,MAAM,CAAC,WAAW,EAAE,CAAC;QAErB,IAAG,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,gBAAgB,EACrI,CAAC;YACG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;8GAnsBQ,iBAAiB,oMA+LN,0BAA0B,aAC1B,iBAAiB,6BACjB,iBAAiB,6BACjB,qBAAqB,6BACrB,UAAU,6BACV,eAAe,6BACf,mBAAmB,6BACnB,kBAAkB,6BAClB,gBAAgB,6BACb,UAAU,8BACV,UAAU,8BACV,UAAU;kGA1MxB,iBAAiB,iJApB1B;YAEI;gBACI,OAAO,EAAE,0BAA0B;gBACnC,UAAU,EAAE,GAAG,EAAE,GAAE,OAAO,EAAE,CAAC,CAAA,CAAC;aACjC;YAED;gBACI,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,SAAS;aACtB;SACJ,0QAsLgB,eAAe,oDAQf,iBAAiB,kDCzTtC,igDAiBM;;2FDmHO,iBAAiB;kBA3B7B,SAAS;+BAEI,WAAW,cAET,KAAK,mBACA,uBAAuB,CAAC,MAAM,aAE/C;wBAEI;4BACI,OAAO,EAAE,0BAA0B;4BACnC,UAAU,EAAE,GAAG,EAAE,GAAE,OAAO,EAAE,CAAC,CAAA,CAAC;yBACjC;wBAED;4BACI,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,SAAS;yBACtB;qBACJ;;0BAwMY,MAAM;2BAAC,0BAA0B;;0BACjC,MAAM;2BAAC,iBAAiB;;0BAAG,QAAQ;;0BACnC,MAAM;2BAAC,iBAAiB;;0BAAG,QAAQ;;0BACnC,MAAM;2BAAC,qBAAqB;;0BAAG,QAAQ;;0BACvC,MAAM;2BAAC,UAAU;;0BAAG,QAAQ;;0BAC5B,MAAM;2BAAC,eAAe;;0BAAG,QAAQ;;0BACjC,MAAM;2BAAC,mBAAmB;;0BAAG,QAAQ;;0BACrC,MAAM;2BAAC,kBAAkB;;0BAAG,QAAQ;;0BACpC,MAAM;2BAAC,gBAAgB;;0BAAG,QAAQ;;0BAClC,SAAS;2BAAC,UAAU;;0BACpB,SAAS;2BAAC,UAAU;;0BACpB,SAAS;2BAAC,UAAU;yCA9ItB,aAAa;sBADvB,KAAK;gBAeC,QAAQ;sBADd,KAAK;gBAOC,QAAQ;sBADd,KAAK;gBAwBC,mBAAmB;sBADzB,YAAY;uBAAC,qBAAqB;gBAQ5B,cAAc;sBADpB,YAAY;uBAAC,gBAAgB;gBAiEvB,eAAe;sBADrB,eAAe;uBAAC,eAAe;gBASzB,iBAAiB;sBADvB,eAAe;uBAAC,iBAAiB","sourcesContent":["import {Component, ChangeDetectionStrategy, FactoryProvider, Input, Inject, ChangeDetectorRef, Optional, Type, AfterViewInit, OnInit, ContentChildren, QueryList, EventEmitter, forwardRef, resolveForwardRef, ElementRef, OnChanges, SimpleChanges, Attribute, OnDestroy, TemplateRef, ContentChild, ComponentFactoryResolver, ApplicationRef, Injector, EmbeddedViewRef, ComponentRef, ClassProvider} from '@angular/core';\nimport {nameof, isBoolean, isPresent, isString, renderToBody} from '@jscrpt/common';\nimport {extend} from '@jscrpt/common/extend';\nimport {BehaviorSubject, Observable, Subscription} from 'rxjs';\n\nimport {NgSelectOptions, NgSelectPlugin, PluginDescription, NormalizeFunc, NgSelectPluginTypes} from '../../misc';\nimport {NG_SELECT_OPTIONS, KEYBOARD_HANDLER_TYPE, NORMAL_STATE_TYPE, POPUP_TYPE, POSITIONER_TYPE, READONLY_STATE_TYPE, VALUE_HANDLER_TYPE, LIVE_SEARCH_TYPE} from '../../misc/types';\nimport {NgSelect, NgSelectPluginInstances, NgSelectAction, NgSelectFunction} from './select.interface';\nimport {NG_SELECT_PLUGIN_INSTANCES} from './types';\nimport {KeyboardHandler} from '../../plugins/keyboardHandler';\nimport {BasicKeyboardHandlerComponent} from '../../plugins/keyboardHandler/components';\nimport {KEYBOARD_HANDLER} from '../../plugins/keyboardHandler/types';\nimport {NormalState, NormalStateContext} from '../../plugins/normalState';\nimport {NORMAL_STATE} from '../../plugins/normalState/types';\nimport {BasicNormalStateComponent} from '../../plugins/normalState/components';\nimport {Popup, PopupContext} from '../../plugins/popup';\nimport {POPUP} from '../../plugins/popup/types';\nimport {BasicPopupComponent} from '../../plugins/popup/component';\nimport {Positioner} from '../../plugins/positioner';\nimport {POSITIONER} from '../../plugins/positioner/types';\nimport {DefaultPositionerComponent} from '../../plugins/positioner/components';\nimport {ReadonlyState} from '../../plugins/readonlyState';\nimport {READONLY_STATE} from '../../plugins/readonlyState/types';\nimport {ValueHandler} from '../../plugins/valueHandler';\nimport {VALUE_HANDLER} from '../../plugins/valueHandler/types';\nimport {BasicValueHandlerComponent} from '../../plugins/valueHandler/components';\nimport {LiveSearch} from '../../plugins/liveSearch';\nimport {LIVE_SEARCH} from '../../plugins/liveSearch/types';\nimport {NoLiveSearchComponent} from '../../plugins/liveSearch/components';\nimport {NgSelectOption, NgSelectOptGroup} from '../option';\nimport {OptionComponent} from '../option/option.component';\nimport {OptGroupComponent} from '../option/optgroup.component';\nimport {PluginBus} from '../../misc/pluginBus/pluginBus';\nimport {PluginBusEvents} from '../../misc/pluginBus/pluginBus.interface';\n\n//TODO - dynamic change of absolute popup\n//TODO - dynamic change of options gatherer destroy called properly ?\n\n/**\n * Default 'NgSelectOptions'\n * @internal\n */\nconst defaultOptions: NgSelectOptions =\n{\n autoInitialize: true,\n absolute: false,\n forceValueCheckOnInit: false,\n multiple: false,\n readonly: false,\n valueComparer: (source, target) =>\n {\n return source === target;\n },\n liveSearchFilter: (query: string, normalizer: NormalizeFunc = value => value) =>\n {\n return itm => normalizer(itm.text).indexOf(normalizer(query)) >= 0;\n },\n normalizer: value =>\n {\n if(isString(value))\n {\n return value.toLowerCase();\n }\n\n return value;\n },\n cssClasses:\n {\n },\n plugins:\n {\n normalState: <PluginDescription<BasicNormalStateComponent>>\n {\n type: forwardRef(() => BasicNormalStateComponent)\n },\n liveSearch: <PluginDescription<NoLiveSearchComponent>>\n {\n type: forwardRef(() => NoLiveSearchComponent)\n },\n popup: <PluginDescription<BasicPopupComponent>>\n {\n type: forwardRef(() => BasicPopupComponent)\n },\n positioner: <PluginDescription<DefaultPositionerComponent>>\n {\n type: forwardRef(() => DefaultPositionerComponent)\n },\n keyboardHandler: <PluginDescription<BasicKeyboardHandlerComponent>>\n {\n type: forwardRef(() => BasicKeyboardHandlerComponent)\n },\n readonlyState: <PluginDescription<ReadonlyState>>\n {\n type: forwardRef(() => BasicNormalStateComponent)\n },\n valueHandler: <PluginDescription<BasicValueHandlerComponent>>\n {\n type: forwardRef(() => BasicValueHandlerComponent)\n }\n }\n};\n\n/**\n * Component that represents NgSelect itself, allows selection of value from options\n */\n@Component(\n{\n selector: 'ng-select',\n templateUrl: 'select.component.html',\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers:\n [\n <FactoryProvider>\n {\n provide: NG_SELECT_PLUGIN_INSTANCES,\n useFactory: () => {return {};}\n },\n <ClassProvider>\n {\n provide: PluginBus,\n useClass: PluginBus\n }\n ],\n styles: [\n `:host\n {\n display: block;\n position: relative;\n }`\n ]\n})\nexport class NgSelectComponent<TValue = any> implements NgSelect<TValue>, OnChanges, OnInit, AfterViewInit, OnDestroy\n{\n //######################### protected fields #########################\n\n /**\n * NgSelect options\n */\n protected _selectOptions: NgSelectOptions<TValue>;\n\n /**\n * Subject used for indication that NgSelect was initialized\n */\n protected _initializedSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n /**\n * Occurs when array of provided options has changed\n */\n protected _optionsChange: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Occurs when array of visible, displayed options has changed\n */\n protected _availableOptionsChange: EventEmitter<void> = new EventEmitter<void>();\n\n /**\n * Array of available options to be displayed\n */\n protected _availableOptions: NgSelectOption<TValue>[] = [];\n\n /**\n * Live search plugin currently used in NgSelect\n */\n protected _liveSearch: LiveSearch;\n\n /**\n * Subscription for changes of live search value\n */\n protected _searchValueChangeSubscription: Subscription;\n\n /**\n * Instance of component ref for absolute popup\n */\n protected _absolutePopup: ComponentRef<Popup>;\n\n /**\n * Instance of type that is used as absolute popup\n */\n protected _absolutePopupType: Type<Popup>;\n\n /**\n * Instance of html element that is used\n */\n protected _absolutePopupElement: HTMLElement;\n\n //######################### public properties - inputs #########################\n\n /**\n * Gets or sets NgSelect options\n */\n @Input()\n public get selectOptions(): NgSelectOptions<TValue>\n {\n return this._selectOptions;\n }\n public set selectOptions(options: NgSelectOptions<TValue>)\n {\n this._selectOptions = extend(true, this._selectOptions, options);\n this._pluginBus.selectOptions = this._selectOptions;\n }\n\n /**\n * Indication whether should be NgSelect disabled or not\n */\n @Input()\n public disabled: boolean;\n\n /**\n * Indication whether should be NgSelect readonly or not\n */\n @Input()\n public readonly: boolean;\n\n //######################### public properties - implementation of NgSelect #########################\n\n /**\n * Occurs every time when NgSelect is initialized or reinitialized, if value is false NgSelect was not initialized yet\n */\n public get initialized(): Observable<boolean>\n {\n return this._initializedSubject.asObservable();\n }\n\n /**\n * Gets current state of initialization\n */\n public isInitialized: boolean = false;\n\n //######################### public properties - implementation of TemplateGatherer #########################\n\n /**\n * Template used within normal state\n */\n @ContentChild('normalStateTemplate')\n public normalStateTemplate: TemplateRef<NormalStateContext>;\n\n /**\n * Template that is used within Popup as option\n * @internal\n */\n @ContentChild('optionTemplate')\n public optionTemplate?: TemplateRef<PopupContext>;\n\n //######################### public properties - implementation of OptionsGatherer #########################\n\n /**\n * Array of provided options for select\n */\n public get options(): NgSelectOption<TValue>[]\n {\n return this.optionsChildren.toArray();\n }\n\n /**\n * Occurs when array of provided options has changed\n */\n public get optionsChange(): EventEmitter<void>\n {\n return this._optionsChange;\n }\n\n /**\n * Array of visible, displayed options for select\n */\n public get availableOptions(): NgSelectOption<TValue>[]\n {\n return this._availableOptions;\n }\n\n /**\n * Occurs when array of visible, displayed options has changed\n */\n public get availableOptionsChange(): EventEmitter<void>\n {\n return this._availableOptionsChange;\n }\n\n /**\n * NgSelect plugin instances available for gatherer\n */\n public ngSelectPlugins: NgSelectPluginInstances;\n\n /**\n * Plugin bus used for inter plugin shared events\n */\n public pluginBus: PluginBus<TValue>;\n\n /**\n * Select element that implements default gatherers\n */\n public select: NgSelect<TValue>;\n\n //######################### public properties - template bindings #########################\n\n /**\n * Element used for live search\n */\n public liveSearchElement: HTMLElement[][];\n\n //######################### public properties - children #########################\n\n /**\n * Options children found inside ng-select\n */\n @ContentChildren(OptionComponent)\n public optionsChildren: QueryList<NgSelectOption>;\n\n //######################### public properties - children #########################\n\n /**\n * Options groups children found inside ng-select\n */\n @ContentChildren(OptGroupComponent)\n public optGroupsChildren: QueryList<NgSelectOptGroup>;\n\n //######################### constructors #########################\n constructor(protected _changeDetector: ChangeDetectorRef,\n protected _element: ElementRef<HTMLElement>,\n protected _componentFactoryResolver: ComponentFactoryResolver,\n protected _appRef: ApplicationRef,\n protected _injector: Injector,\n protected _pluginBus: PluginBus<TValue>,\n @Inject(NG_SELECT_PLUGIN_INSTANCES) protected _pluginInstances: NgSelectPluginInstances,\n @Inject(NG_SELECT_OPTIONS) @Optional() options?: NgSelectOptions<TValue>,\n @Inject(NORMAL_STATE_TYPE) @Optional() normalStateType?: Type<NormalState>,\n @Inject(KEYBOARD_HANDLER_TYPE) @Optional() keyboardHandlerType?: Type<KeyboardHandler>,\n @Inject(POPUP_TYPE) @Optional() popupType?: Type<Popup>,\n @Inject(POSITIONER_TYPE) @Optional() positionerType?: Type<Positioner>,\n @Inject(READONLY_STATE_TYPE) @Optional() readonlyStateType?: Type<ReadonlyState>,\n @Inject(VALUE_HANDLER_TYPE) @Optional() valueHandlerType?: Type<ValueHandler>,\n @Inject(LIVE_SEARCH_TYPE) @Optional() liveSearchType?: Type<LiveSearch>,\n @Attribute('readonly') readonly?: string,\n @Attribute('disabled') disabled?: string,\n @Attribute('multiple') multiple?: string)\n {\n //at least on of following is present (value is not important)\n const readonlyDefault = isPresent(readonly) || isPresent(disabled);\n const multipleDefault = isPresent(multiple);\n const opts: NgSelectOptions<TValue> = extend(true, {}, options);\n\n if(!opts.plugins)\n {\n opts.plugins = {};\n }\n\n if(keyboardHandlerType)\n {\n if(!opts.plugins.keyboardHandler)\n {\n opts.plugins.keyboardHandler = {};\n }\n\n opts.plugins.keyboardHandler.type = keyboardHandlerType;\n }\n\n if(normalStateType)\n {\n if(!opts.plugins.normalState)\n {\n opts.plugins.normalState = {};\n }\n\n opts.plugins.normalState.type = normalStateType;\n }\n\n if(popupType)\n {\n if(!opts.plugins.popup)\n {\n opts.plugins.popup = {};\n }\n\n opts.plugins.popup.type = popupType;\n }\n\n if(positionerType)\n {\n if(!opts.plugins.positioner)\n {\n opts.plugins.positioner = {};\n }\n\n opts.plugins.positioner.type = positionerType;\n }\n\n if(readonlyStateType)\n {\n if(!opts.plugins.readonlyState)\n {\n opts.plugins.readonlyState = {};\n }\n\n opts.plugins.readonlyState.type = readonlyStateType;\n }\n\n if(valueHandlerType)\n {\n if(!opts.plugins.valueHandler)\n {\n opts.plugins.valueHandler = {};\n }\n\n opts.plugins.valueHandler.type = valueHandlerType;\n }\n\n if(liveSearchType)\n {\n if(!opts.plugins.liveSearch)\n {\n opts.plugins.liveSearch = {};\n }\n\n opts.plugins.liveSearch.type = liveSearchType;\n }\n\n this._selectOptions = extend(true,\n <NgSelectOptions<TValue>>\n {\n optionsGatherer: this,\n templateGatherer: this,\n },\n defaultOptions,\n <NgSelectOptions<TValue>>\n {\n readonly: readonlyDefault,\n multiple: multipleDefault\n },\n opts);\n\n this._pluginBus.selectElement = this._element;\n this._pluginBus.selectOptions = this._selectOptions;\n }\n\n //######################### public methods - implementation of OnChanges #########################\n\n /**\n * Called when input value changes\n */\n public ngOnChanges(changes: SimpleChanges): void\n {\n const updateReadonly = (state: boolean, firstChange: boolean) =>\n {\n //update options\n this.selectOptions.readonly = state;\n\n if(!firstChange)\n {\n this.initOptions();\n this.initialize();\n }\n };\n\n if(nameof<NgSelectComponent<TValue>>('disabled') in changes && isBoolean(this.disabled))\n {\n updateReadonly(this.disabled, changes[nameof<NgSelectComponent<TValue>>('disabled')].firstChange);\n }\n\n if(nameof<NgSelectComponent<TValue>>('readonly') in changes && isBoolean(this.readonly))\n {\n updateReadonly(this.readonly, changes[nameof<NgSelectComponent<TValue>>('readonly')].firstChange);\n }\n }\n\n //######################### public methods - implementation of OnInit #########################\n\n /**\n * Initialize component\n */\n public ngOnInit()\n {\n this.initOptions();\n }\n\n //######################### public methods - implementation of AfterViewInit #########################\n\n /**\n * Called when view was initialized\n */\n public ngAfterViewInit()\n {\n this._availableOptions = this.options;\n\n this.optionsChildren.changes.subscribe(() =>\n {\n this._availableOptions = this.options;\n this._optionsChange.emit();\n this._availableOptionsChange.emit();\n });\n\n if(this._selectOptions.autoInitialize)\n {\n this.initialize();\n }\n }\n\n //######################### public methods - implementation of OnDestroy #########################\n\n /**\n * Called when component is destroyed\n */\n public ngOnDestroy()\n {\n this._searchValueChangeSubscription?.unsubscribe();\n this._searchValueChangeSubscription = null;\n\n this.selectOptions.optionsGatherer?.destroyGatherer();\n\n this._destroyAbsolutePopup();\n }\n\n //######################### public methods - implementation of OptionsGatherer #########################\n\n /**\n * Initialize gatherer during initialization phase\n */\n public initializeGatherer(): void\n {\n const liveSearch = this._pluginInstances[LIVE_SEARCH] as LiveSearch;\n\n if(this._liveSearch && this._liveSearch != liveSearch)\n {\n this._searchValueChangeSubscription.unsubscribe();\n this._searchValueChangeSubscription = null;\n\n this._liveSearch = null;\n }\n\n if(!this._liveSearch)\n {\n this._liveSearch = liveSearch;\n\n this._searchValueChangeSubscription = this._liveSearch.searchValueChange.subscribe(() =>\n {\n if(!this._liveSearch.searchValue)\n {\n this._availableOptions = this.options;\n this._availableOptionsChange.emit();\n\n return;\n }\n\n this._availableOptions = this.options.filter(this.selectOptions.liveSearchFilter(this._liveSearch.searchValue, this.selectOptions.normalizer));\n this._availableOptionsChange.emit();\n });\n }\n }\n\n /**\n * Called when gatherer needs to be destroyed\n */\n public destroyGatherer(): void\n {\n }\n\n //######################### public methods - template bindings #########################\n\n /**\n * Sets normal state component\n * @param normalState - Created normal state that is rendered\n * @internal\n */\n public setNormalStateComponent(normalState: NormalState)\n {\n this._registerNewPlugin(normalState, NORMAL_STATE, 'normalState');\n }\n\n /**\n * Sets keyboard handler component\n * @param keyboardHandler - Created keyboard handler that is rendered\n * @internal\n */\n public setKeyboardHandlerComponent(keyboardHandler: KeyboardHandler)\n {\n this._registerNewPlugin(keyboardHandler, KEYBOARD_HANDLER, 'keyboardHandler');\n }\n\n /**\n * Sets popup component\n * @param popup - Created popup that is rendered\n * @internal\n */\n public setPopupComponent(popup: Popup)\n {\n this._registerNewPlugin(popup, POPUP, 'popup');\n }\n\n /**\n * Sets positioner component\n * @param positioner - Created positioner that is rendered\n * @internal\n */\n public setPositionerComponent(positioner: Positioner)\n {\n this._registerNewPlugin(positioner, POSITIONER, 'positioner');\n }\n\n /**\n * Sets readonly state component\n * @param readonlyState - Created readonly state that is rendered\n * @internal\n */\n public setReadonlyStateComponent(readonlyState: ReadonlyState)\n {\n this._registerNewPlugin(readonlyState, READONLY_STATE, 'readonlyState');\n this._pluginInstances[NORMAL_STATE] = this._pluginInstances[READONLY_STATE];\n }\n\n /**\n * Sets value handler component\n * @param valueHandler - Created value handler that is rendered\n * @internal\n */\n public setValueHandlerComponent(valueHandler: ValueHandler<TValue>)\n {\n this._registerNewPlugin(valueHandler, VALUE_HANDLER, 'valueHandler');\n }\n\n /**\n * Sets live search component\n * @param liveSearch - Created live search that is rendered\n * @internal\n */\n public setLiveSearchComponent(liveSearch: LiveSearch)\n {\n this._registerNewPlugin(liveSearch, LIVE_SEARCH, 'liveSearch');\n }\n\n //######################### public methods #########################\n\n /**\n * Initialize component, automatically called once if not blocked by options\n */\n public initialize()\n {\n const liveSearchPlugin = this._pluginInstances[LIVE_SEARCH] as LiveSearch;\n this.liveSearchElement = [[liveSearchPlugin.liveSearchElement]];\n\n if(this.selectOptions.absolute)\n {\n this._appendPopupToBody(this._selectOptions.plugins.popup.type);\n }\n\n this._changeDetector.detectChanges();\n\n this.selectOptions.optionsGatherer.initializeGatherer();\n\n this._pluginInstances[LIVE_SEARCH].initialize();\n this._pluginInstances[KEYBOARD_HANDLER].initialize();\n this._pluginInstances[VALUE_HANDLER].initialize();\n this._pluginInstances[NORMAL_STATE]?.initialize();\n this._pluginInstances[READONLY_STATE]?.initialize();\n this._pluginInstances[POPUP].initialize();\n this._pluginInstances[POSITIONER].initialize();\n\n this.isInitialized = true;\n this._initializedSubject.next(true);\n }\n\n /**\n * Initialize options, automaticaly called during init phase, but can be used to reinitialize NgSelectOptions\n */\n public initOptions()\n {\n this.selectOptions.optionsGatherer.ngSelectPlugins = this._pluginInstances;\n this.selectOptions.optionsGatherer.pluginBus = this._pluginBus;\n this.selectOptions.optionsGatherer.select = this;\n\n const initOptionsPlugin = (pluginKey: string, pluginName: keyof NgSelectPluginTypes) =>\n {\n if(this._selectOptions.plugins[pluginName])\n {\n this._selectOptions.plugins[pluginName].type = resolveForwardRef(this._selectOptions.plugins[pluginName].type);\n\n if(this._pluginInstances[pluginKey])\n {\n if(this._selectOptions.plugins && this._selectOptions.plugins[pluginName] && this._selectOptions.plugins[pluginName].options)\n {\n this._pluginInstances[pluginKey].options = this._selectOptions.plugins[pluginName].options;\n }\n\n this._pluginInstances[pluginKey].initOptions();\n }\n }\n };\n\n if(this._selectOptions.plugins)\n {\n initOptionsPlugin(NORMAL_STATE, 'normalState');\n initOptionsPlugin(KEYBOARD_HANDLER, 'keyboardHandler');\n initOptionsPlugin(POPUP, 'popup');\n initOptionsPlugin(POSITIONER, 'positioner');\n initOptionsPlugin(READONLY_STATE, 'readonlyState');\n initOptionsPlugin(VALUE_HANDLER, 'valueHandler');\n initOptionsPlugin(LIVE_SEARCH, 'liveSearch');\n }\n }\n\n /**\n * Explicitly runs invalidation of content (change detection)\n */\n public invalidateVisuals(): void\n {\n this._changeDetector.detectChanges();\n }\n\n /**\n * Gets instance of plugin by its id\n * @param pluginId - Id of plugin, use constants\n */\n public getPlugin<PluginType extends NgSelectPlugin>(pluginId: string): PluginType\n {\n return this._pluginInstances[pluginId] as PluginType;\n }\n\n /**\n * Subscribes for event\n * @param eventName - Name of event that should be listened to\n * @param handler - Function used for handling event\n */\n public listenTo<TParam = void>(eventName: keyof PluginBusEvents, handler: (data: TParam) => void): Subscription\n {\n return this._pluginBus[eventName].subscribe(handler);\n }\n\n /**\n * Executes actions on NgSelect\n * @param actions - Array of actions that are executed over NgSelect\n */\n public execute(...actions: NgSelectAction<TValue>[])\n {\n if(!actions)\n {\n return;\n }\n\n actions.forEach(action => action(this));\n }\n\n /**\n * Executes function on NgSelect and returns result\n * @param func - Function that is executed and its result is returned\n */\n public executeAndReturn<TResult>(func: NgSelectFunction<TResult, TValue>): TResult\n {\n if(!func)\n {\n return null;\n }\n\n return func(this);\n }\n\n //######################### protected methods #########################\n\n /**\n * Appends popup component directly to body, allows absolute positioning over page body\n * @param component - Popup component type to be appended\n */\n protected _appendPopupToBody(component: Type<Popup>)\n {\n //do not reinitialize if already exists and nothing has changed\n if(this._absolutePopupType == component && this.liveSearchElement[0][0] == this._absolutePopupElement)\n {\n return;\n }\n\n // 0. Destroyes absolute popup if it exists\n this._destroyAbsolutePopup();\n\n if(!component)\n {\n return;\n }\n\n this._absolutePopupType = component;\n this._absolutePopupElement = this.liveSearchElement[0][0];\n\n // 1. Create a component reference from the component\n this._absolutePopup = this._componentFactoryResolver\n .resolveComponentFactory(component)\n .create(this._injector, this.liveSearchElement);\n\n // 2. Attach component to the appRef so that it's inside the ng component tree\n this._appRef.attachView(this._absolutePopup.hostView);\n\n // 3. Get DOM element from component\n const domElem = (this._absolutePopup.hostView as EmbeddedViewRef<any>)\n .rootNodes[0] as HTMLElement;\n\n // 4. Append DOM element to the body\n renderToBody(document, domElem, this._selectOptions.containerElement);\n\n this.setPopupComponent(this._absolutePopup.instance);\n }\n\n /**\n * Destroyes absolute popup if it exists\n */\n protected _destroyAbsolutePopup()\n {\n if(this._absolutePopup)\n {\n this._appRef.detachView(this._absolutePopup.hostView);\n this._absolutePopup.destroy();\n this._absolutePopup = null;\n this._absolutePopupType = null;\n this._absolutePopupElement = null;\n }\n }\n\n /**\n * Registers newly created plugin\n * @param plugin - Plugin to be registered\n * @param pluginKey - Key of plugin used for pluginInstances\n * @param pluginName - Name property for plugin from options\n */\n protected _registerNewPlugin(plugin: NgSelectPlugin, pluginKey: string, pluginName: keyof NgSelectPluginTypes)\n {\n if(!plugin)\n {\n this._pluginInstances[pluginKey] = null;\n\n return;\n }\n\n this._pluginInstances[pluginKey] = plugin;\n\n if(this._selectOptions.plugins && this._selectOptions.plugins[pluginName] && this._selectOptions.plugins[pluginName].options)\n {\n plugin.options = this._selectOptions.plugins[pluginName].options;\n }\n\n plugin.initOptions();\n\n if(this._selectOptions.plugins && this._selectOptions.plugins[pluginName] && this._selectOptions.plugins[pluginName].instanceCallback)\n {\n this._selectOptions.plugins[pluginName].instanceCallback(plugin);\n }\n }\n}","<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.liveSearch?.type\" (ngComponentOutletExCreated)=\"setLiveSearchComponent($event)\"></ng-template>\r\n<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.positioner?.type\" (ngComponentOutletExCreated)=\"setPositionerComponent($event)\"></ng-template>\r\n<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.keyboardHandler?.type\" (ngComponentOutletExCreated)=\"setKeyboardHandlerComponent($event)\"></ng-template>\r\n<ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.valueHandler?.type\" (ngComponentOutletExCreated)=\"setValueHandlerComponent($event)\"></ng-template>\r\n\r\n<div>\r\n <ng-template [ngIf]=\"!selectOptions?.readonly\">\r\n <ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.normalState?.type\" (ngComponentOutletExCreated)=\"setNormalStateComponent($event)\" [ngComponentOutletExContent]=\"liveSearchElement\"></ng-template>\r\n </ng-template>\r\n\r\n <ng-template [ngIf]=\"selectOptions?.readonly\">\r\n <ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.readonlyState?.type\" (ngComponentOutletExCreated)=\"setReadonlyStateComponent($event)\"></ng-template>\r\n </ng-template>\r\n\r\n <ng-template [ngIf]=\"!selectOptions?.absolute\">\r\n <ng-template [ngComponentOutletEx]=\"selectOptions?.plugins?.popup?.type\" (ngComponentOutletExCreated)=\"setPopupComponent($event)\" [ngComponentOutletExContent]=\"liveSearchElement\"></ng-template>\r\n </ng-template>\r\n</div>"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ngSelectOptions.interface.js","sourceRoot":"","sources":["../../../src/misc/ngSelectOptions.interface.ts"],"names":[],"mappings":"","sourcesContent":["\nimport {NgSelectPluginTypes} from './plugin.interface';\nimport {OptionsGatherer, LiveSearchFilter} from './optionsGatherer/optionsGatherer.interface';\nimport {TemplateGatherer} from './templateGatherer.interface';\n\n/**\n * Function used for comparing two values\n */\nexport interface CompareValueFunc<TValue = any>\n{\n /**\n * Compares two values and returns true if objects are equal, otherwise false\n * @param source - First value to be compared\n * @param target - Second value to be compared\n */\n (source: TValue, target: TValue): boolean;\n}\n\n/**\n * Function used for normalization of value, used during comparison or search\n */\nexport interface NormalizeFunc<TValue = any>\n{\n /**\n * Normalize provided value, usually used with strings\n * @param value - Value that is being normalized\n */\n (value: TValue): TValue;\n}\n\n/**\n * Options used for plugin bus\n */\nexport interface PluginBusOptions<TValue = any>\n{\n /**\n * Instance of options gatherer that is used for obtaining options\n */\n optionsGatherer?: OptionsGatherer<TValue>;\n\n /**\n * Instance of template gatherer used for obtaining custom templates\n */\n templateGatherer?: TemplateGatherer;\n\n /**\n * Indication whether is NgSelect readonly or not\n */\n readonly?: boolean;\n\n /**\n * Indication that multiple values can be selected\n */\n multiple?: boolean;\n\n /**\n * Indication whether use non existing value in live search as new value, use with dynamic value handler\n */\n useNonExistingAsValue?: boolean;\n\n /**\n * Function of value comparer that is used for comparison of values\n */\n valueComparer?: CompareValueFunc<TValue>;\n\n /**\n * Method that is used for filtering when live search is running on static data\n */\n liveSearchFilter?: LiveSearchFilter<TValue>;\n\n /**\n * Normalizer used for normalizing values\n */\n normalizer?: NormalizeFunc<TValue>;\n}\n\n/**\n * Describes select options used for NgSelect\n */\nexport interface NgSelectOptions<TValue = any> extends PluginBusOptions<TValue>\n{\n /**\n * Indication whether NgSelect should be initialized automaticaly during 'NgOnInit' phase\n */\n autoInitialize?: boolean;\n\n /**\n * Css classes applied to ng select component, possible to override only part of classes\n */\n cssClasses?: {};\n\n /**\n * Object defining overrides for default plugins, default plugins can be also specified using DI\n */\n plugins?: NgSelectPluginTypes;\n\n /**\n * Indication whether is 'Popup' plugin displayd inside of NgSelect (false) or directly in Body (true)\n */\n absolute?: boolean;\n\n /**\n * Indication whether force value check on initialization of select, this allows to change value of form control to value of valueHandler\n */\n forceValueCheckOnInit?: boolean;\n}"]}
1
+ {"version":3,"file":"ngSelectOptions.interface.js","sourceRoot":"","sources":["../../../src/misc/ngSelectOptions.interface.ts"],"names":[],"mappings":"","sourcesContent":["\nimport {NgSelectPluginTypes} from './plugin.interface';\nimport {OptionsGatherer, LiveSearchFilter} from './optionsGatherer/optionsGatherer.interface';\nimport {TemplateGatherer} from './templateGatherer.interface';\n\n/**\n * Function used for comparing two values\n */\nexport interface CompareValueFunc<TValue = any>\n{\n /**\n * Compares two values and returns true if objects are equal, otherwise false\n * @param source - First value to be compared\n * @param target - Second value to be compared\n */\n (source: TValue, target: TValue): boolean;\n}\n\n/**\n * Function used for normalization of value, used during comparison or search\n */\nexport interface NormalizeFunc<TValue = any>\n{\n /**\n * Normalize provided value, usually used with strings\n * @param value - Value that is being normalized\n */\n (value: TValue): TValue;\n}\n\n/**\n * Options used for plugin bus\n */\nexport interface PluginBusOptions<TValue = any>\n{\n /**\n * Instance of options gatherer that is used for obtaining options\n */\n optionsGatherer?: OptionsGatherer<TValue>;\n\n /**\n * Instance of template gatherer used for obtaining custom templates\n */\n templateGatherer?: TemplateGatherer;\n\n /**\n * Indication whether is NgSelect readonly or not\n */\n readonly?: boolean;\n\n /**\n * Indication that multiple values can be selected\n */\n multiple?: boolean;\n\n /**\n * Indication whether use non existing value in live search as new value, use with dynamic value handler\n */\n useNonExistingAsValue?: boolean;\n\n /**\n * Function of value comparer that is used for comparison of values\n */\n valueComparer?: CompareValueFunc<TValue>;\n\n /**\n * Method that is used for filtering when live search is running on static data\n */\n liveSearchFilter?: LiveSearchFilter<TValue>;\n\n /**\n * Normalizer used for normalizing values\n */\n normalizer?: NormalizeFunc<TValue>;\n}\n\n/**\n * Describes select options used for NgSelect\n */\nexport interface NgSelectOptions<TValue = any> extends PluginBusOptions<TValue>\n{\n /**\n * Indication whether NgSelect should be initialized automaticaly during 'NgOnInit' phase\n */\n autoInitialize?: boolean;\n\n /**\n * Css classes applied to ng select component, possible to override only part of classes\n */\n cssClasses?: {};\n\n /**\n * Object defining overrides for default plugins, default plugins can be also specified using DI\n */\n plugins?: NgSelectPluginTypes;\n\n /**\n * Indication whether is 'Popup' plugin displayd inside of NgSelect (false) or directly in Body (true)\n */\n absolute?: boolean;\n\n /**\n * String that defines element in which should be absolute popup rendered, if not specified, body is used, used only if absolute is set to true, otherwise it has no effect\n *\n * Allows also css classes to be specified (div.body-box)\n */\n containerElement?: string;\n\n /**\n * Indication whether force value check on initialization of select, this allows to change value of form control to value of valueHandler\n */\n forceValueCheckOnInit?: boolean;\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anglr/select",
3
- "version": "13.1.0-beta.20250428112445",
3
+ "version": "13.1.0",
4
4
  "description": "Angular component representing html select",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -79,6 +79,12 @@ export interface NgSelectOptions<TValue = any> extends PluginBusOptions<TValue>
79
79
  * Indication whether is 'Popup' plugin displayd inside of NgSelect (false) or directly in Body (true)
80
80
  */
81
81
  absolute?: boolean;
82
+ /**
83
+ * String that defines element in which should be absolute popup rendered, if not specified, body is used, used only if absolute is set to true, otherwise it has no effect
84
+ *
85
+ * Allows also css classes to be specified (div.body-box)
86
+ */
87
+ containerElement?: string;
82
88
  /**
83
89
  * Indication whether force value check on initialization of select, this allows to change value of form control to value of valueHandler
84
90
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ngSelectOptions.interface.d.ts","sourceRoot":"","sources":["ngSelectOptions.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,6CAA6C,CAAC;AAC9F,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,MAAM,GAAG,GAAG;IAE1C;;;;OAIG;IACH,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,GAAG,GAAG;IAEvC;;;OAGG;IACH,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,MAAM,GAAG,GAAG;IAE1C;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAE1C;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,aAAa,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzC;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE5C;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,MAAM,GAAG,GAAG,CAAE,SAAQ,gBAAgB,CAAC,MAAM,CAAC;IAE3E;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC"}
1
+ {"version":3,"file":"ngSelectOptions.interface.d.ts","sourceRoot":"","sources":["ngSelectOptions.interface.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,6CAA6C,CAAC;AAC9F,OAAO,EAAC,gBAAgB,EAAC,MAAM,8BAA8B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,MAAM,GAAG,GAAG;IAE1C;;;;OAIG;IACH,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,GAAG,GAAG;IAEvC;;;OAGG;IACH,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,MAAM,GAAG,GAAG;IAE1C;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAE1C;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,aAAa,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzC;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE5C;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,MAAM,GAAG,GAAG,CAAE,SAAQ,gBAAgB,CAAC,MAAM,CAAC;IAE3E;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,CAAC;IAEhB;;OAEG;IACH,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC"}
package/version.bak CHANGED
@@ -1 +1 @@
1
- 13.1.0-beta.20250428112445
1
+ 13.1.0