{"version":3,"file":"index.mjs","sources":["../../../../../projects/components/widgets/input/chips/src/chips.props.ts","../../../../../projects/components/widgets/input/chips/src/chips.component.ts","../../../../../projects/components/widgets/input/chips/src/chips.component.html","../../../../../projects/components/widgets/input/chips/src/index.ts"],"sourcesContent":["import { PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, register, registerFormWidget } from '@wm/components/base';\nimport { FormWidgetType } from '@wm/core';\n\nexport const chipsProps = new Map(\n    [\n        ['allowonlyselect', PROP_BOOLEAN],\n        ['autofocus', PROP_BOOLEAN],\n        ['chipclass', PROP_STRING],\n        ['class', PROP_STRING],\n        ['compareby', PROP_STRING],\n        ['datafield', PROP_STRING],\n        ['dataoptions', PROP_ANY],\n        ['dataset', {value: 'Option 1, Option 2, Option 3', ...PROP_ANY}],\n        ['datasource', PROP_ANY],\n        ['datavalue', PROP_ANY],\n        ['datavaluesource', PROP_ANY],\n        ['dateformat', PROP_STRING],\n        ['disabled', PROP_BOOLEAN],\n        ['displayexpression', PROP_STRING],\n        ['displayfield', PROP_STRING],\n        ['displayimagesrc', PROP_STRING],\n        ['enablereorder', PROP_BOOLEAN],\n        ['groupby', PROP_STRING],\n        ['inputposition', {value: 'last', ...PROP_STRING}],\n        ['inputwidth', {value: 'default', ...PROP_STRING}],\n        ['limit', PROP_NUMBER],\n        ['loadingdatamsg', {value: 'Loading items...', ...PROP_STRING}],\n        ['match', PROP_STRING],\n        ['matchmode', PROP_STRING],\n        ['maxsize', PROP_NUMBER],\n        ['minchars', {value: 1 , ...PROP_NUMBER}],\n        ['name', PROP_STRING],\n        ['navsearchbar', {value: false, ...PROP_BOOLEAN}],\n        ['orderby', PROP_STRING],\n        ['placeholder', {value: 'Type here..', ...PROP_STRING}],\n        ['query', PROP_STRING],\n        ['readonly', PROP_BOOLEAN],\n        ['searchkey', PROP_STRING],\n        ['shortcutkey', PROP_STRING],\n        ['show', {value: true, ...PROP_BOOLEAN}],\n        ['showsearchicon', PROP_BOOLEAN],\n        ['tabindex', {value: 0, ...PROP_NUMBER}],\n        ['type', {value: 'search', ...PROP_STRING}],\n        ['debouncetime', {value: 250, ...PROP_NUMBER}],\n        ['datacompletemsg', { value: 'No more data to load', ...PROP_STRING }],\n    ]\n);\n\nexport const registerProps = () => {\n    register(\n        'wm-chips',\n        chipsProps\n    );\n    registerFormWidget(\n        FormWidgetType.CHIPS,\n        new Map(chipsProps)\n    );\n};\n\n","import {CommonModule} from '@angular/common';\nimport {AfterViewInit, Attribute, Component, Inject, Injector, OnDestroy, OnInit, Optional, ViewChild} from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {$appDigest, $unwatch, $watch, debounce, isAppleProduct, isDefined, toBoolean} from '@wm/core';\nimport {\n    ALLFIELDS,\n    configureDnD,\n    DataSetItem,\n    getConditionalClasses,\n    getUniqObjsByDataField,\n    IWidgetConfig,\n    provideAs,\n    provideAsWidgetRef,\n    styler,\n    TextContentDirective\n} from '@wm/components/base';\nimport {DatasetAwareFormComponent} from '@wm/components/input/dataset-aware-form';\nimport {SearchComponent} from '@wm/components/basic/search';\n\nimport {registerProps} from './chips.props';\nimport {\n    clone,\n    filter,\n    find,\n    findIndex,\n    forEach,\n    isArray,\n    isEqual,\n    isObject,\n    max,\n    pullAt,\n    reduce,\n    slice,\n    toString,\n    trim\n} from \"lodash-es\";\n\nconst WIDGET_CONFIG: IWidgetConfig = {\n    widgetType: 'wm-chips',\n    hostClass: 'app-chips nav nav-pills list-inline'\n};\n\n@Component({\n    standalone: true,\n    imports: [CommonModule, TextContentDirective, SearchComponent],\n    selector: '[wmChips]',\n    templateUrl: './chips.component.html',\n    providers: [\n        provideAs(ChipsComponent, NG_VALUE_ACCESSOR, true),\n        provideAsWidgetRef(ChipsComponent)\n    ]\n})\nexport class ChipsComponent extends DatasetAwareFormComponent implements OnInit, AfterViewInit, OnDestroy {\n    static initializeProps = registerProps();\n    public allowonlyselect: boolean;\n    public enablereorder: boolean;\n    public maxsize: number;\n    public inputwidth: any;\n    private debouncetime: number;\n\n    public chipsList: Array<any> = [];\n    private readonly maxSizeReached = 'Max size reached';\n    private saturate: boolean;\n    private nextItemIndex: number;\n    private getTransformedData: (data, itemIndex?) => DataSetItem[];\n    private inputposition: string;\n    private showsearchicon: boolean;\n\n    @ViewChild(SearchComponent, /* TODO: add static flag */ {static: true}) searchComponent: SearchComponent;\n    private _datasource: any;\n    private _unsubscribeDv = false;\n    private searchkey: string;\n    private _debounceUpdateQueryModel: any = null;\n    private limit: number;\n    private _classExpr: any;\n    private minchars: number;\n    private matchmode: string;\n\n    // getter setter is added to pass the datasource to searchcomponent.\n    get datasource () {\n        return this._datasource;\n    }\n\n    set datasource(nv) {\n        this._datasource = nv;\n        this.searchComponent.datasource = nv;\n        if (this._debounceUpdateQueryModel) {\n            this._debounceUpdateQueryModel(this.datavalue || this.toBeProcessedDatavalue);\n        }\n    }\n\n    constructor(\n        inj: Injector,\n        @Attribute('displayfield.bind') private bindDisplayField,\n        @Attribute('displayexpression.bind') private bindDisplayExpr,\n        @Attribute('displayimagesrc.bind') private bindDisplayImgSrc,\n        @Attribute('datafield.bind') private bindDataField,\n        @Attribute('dataset.bind') private bindDataSet,\n        @Attribute('chipclass.bind') private bindChipclass,\n        @Inject('EXPLICIT_CONTEXT') @Optional() explicitContext: any\n    ) {\n        super(inj, WIDGET_CONFIG, explicitContext);\n        styler(this.nativeElement, this);\n\n        // set the showsearchicon as false by default.\n        if (!isDefined(this.showsearchicon)) {\n            this.showsearchicon = false;\n        }\n\n        this.multiple = true;\n        this.nextItemIndex = 0; // default chip index\n\n        this._debounceUpdateQueryModel = debounce((val) => {\n            this.updateQueryModel(val).then(() => {\n                if (this.bindChipclass) {\n                    forEach(this.chipsList, (item, index) => {\n                        this.registerChipItemClass(item, index);\n                    });\n                }\n            });\n        }, 150);\n\n        const datasetSubscription = this.dataset$.subscribe(() => {\n            this.searchComponent.dataset = this.dataset;\n            // clearing the last results when dataset is reassigned\n            (this.searchComponent as any)._lastResult = undefined;\n            this.nextItemIndex = this.datasetItems.length;\n            if (this._debounceUpdateQueryModel) {\n                this._debounceUpdateQueryModel(this.datavalue || this.toBeProcessedDatavalue);\n            }\n        });\n        this.registerDestroyListener(() => datasetSubscription.unsubscribe());\n\n        const datavalueSubscription = this.datavalue$.subscribe((val: Array<string> | string) => {\n            // update queryModel only when parentRef is available.\n            if (!this._unsubscribeDv) {\n                this.chipsList = [];\n                // if the datafield is ALLFILEDS do not fetch the records\n                // update the query model with the values we have\n                if (this._debounceUpdateQueryModel) {\n                    this._debounceUpdateQueryModel(val);\n                }\n            }\n        });\n        this.registerDestroyListener(() => datavalueSubscription.unsubscribe());\n    }\n\n    ngOnInit() {\n        super.ngOnInit();\n\n        this.searchComponent.multiple = true;\n        this.searchComponent.binddisplayimagesrc = this.bindDisplayImgSrc;\n        this.searchComponent.displayimagesrc = this.displayimagesrc;\n        this.searchComponent.binddisplaylabel = this.bindDisplayExpr;\n        this.searchComponent.displaylabel = this.displayfield;\n        this.searchComponent.datafield = this.bindDataField || this.datafield;\n        this.searchComponent.binddataset = this.bindDataSet;\n        this.searchComponent.dataset = this.dataset;\n        this.searchComponent.searchkey = this.searchkey;\n        this.searchComponent.limit = this.limit;\n        this.searchComponent.debouncetime = this.debouncetime;\n        this.searchComponent.matchmode = this.matchmode;\n\n        this.getTransformedData = (val, isCustom) => {\n            return this.searchComponent.getTransformedData([val], this.nextItemIndex++, isCustom);\n        };\n    }\n\n    ngAfterViewInit() {\n        super.ngAfterViewInit();\n        if (this.enablereorder) {\n            this.configureDnD();\n        }\n    }\n\n    /**\n     * This method returns the evaluated class expression.\n     * @param $index index of the chip\n     * @param item chip object containing the key, value, label\n     * @returns {any} evaluated class expression value\n     */\n    private registerChipItemClass(item, $index) {\n        if (this.bindChipclass) {\n            const watchName = `${this.widgetId}_chipItemClass_${$index}`;\n            $unwatch(watchName);\n            //[Todo-CSP]: same as list item class\n            this.registerDestroyListener($watch(this.bindChipclass, this.viewParent, {item, $index}, (nv, ov) => {\n                this.applyItemClass(getConditionalClasses(nv, ov), $index);\n            }, watchName));\n        }\n    }\n\n    private applyItemClass(val, index) {\n        const chipItems = this.nativeElement.querySelectorAll('.chip-item');\n        const chipItem = chipItems.item(index);\n        if (chipItem) {\n            $(chipItem).removeClass(val.toRemove).addClass(val.toAdd);\n            return;\n        }\n        setTimeout(() => {\n            const retryChip = this.nativeElement.querySelectorAll('.chip-item').item(index);\n            if (retryChip) {\n                $(retryChip).removeClass(val.toRemove).addClass(val.toAdd);\n            }\n        }, 50);\n    }\n\n    private removeDuplicates() {\n        this.chipsList = getUniqObjsByDataField(this.chipsList, this.datafield, this.displayfield || this.displaylabel);\n    }\n\n    // This method updates the queryModel.\n    // default call to get the default data can be done only when defaultQuery is true.\n    private updateQueryModel(data: any): Promise<void> {\n        const promises = [];\n        if (!data) {\n            this.chipsList = [];\n            return Promise.resolve();\n        }\n\n        // clone the data as the updations on data will change the datavalue.\n        let dataValue = clone(data);\n        const prevChipsList = this.chipsList;\n        this.chipsList = [];\n\n        // update the model when model has items more than maxsize\n        if (this.maxsize && dataValue.length > this.maxsize) {\n            this._modelByValue = dataValue = slice(dataValue, 0, this.maxsize);\n            data = dataValue;\n        }\n\n        const searchQuery: Array<string> = [];\n\n        /**\n         * For each value in datavalue,\n         * 1. check whether value is in datasetItems, if item is found, addd to the chipsList.\n         * 2. else make a default query to the filter and get the record.\n         * 3. In step 2, if datavalue is not ALLFIELDS, then make a query. Extract the chipsList from the query response.\n         * 4. If there is no response for the value and allowonlyselect is true, remove the value from the datavalue. So that datavalue just contains the valid values.\n         * 5. In step 2, if datavalue is ALLFIELDS and value is object, then just prepare the datasetItem from the value.\n         * 6. If value is not object and allowonlyselect is false, then create a customModel and replace this value with customModel and prepare datasetItem from this value\n         */\n        dataValue.forEach((val: any, i: number) => {\n            const itemFound = find(this.datasetItems, item => {\n                return isObject(item.value) ? isEqual(item.value, val) : toString(item.value) === toString(val);\n            });\n\n            if (itemFound) {\n                this.chipsList.push(itemFound);\n            } else if (this.datafield !== ALLFIELDS) {\n                searchQuery.push(val);\n            } else if (this.datafield === ALLFIELDS) {\n                let dataObj, isCustom = false;\n                if (!isObject(val)) {\n                    dataObj = this.createCustomDataModel(val);\n                    isCustom = true;\n                    if (dataObj) {\n                        data.splice(i, 1, dataObj);\n                    }\n                } else {\n                    // if custom chips is already generated, val will be object as {'dataField_val': 'entered_val'}\n                    // Hence check this val in previous chipList and assign the iscustom flag\n                    const prevChipObj = prevChipsList.find(obj => {\n                        return isEqual(obj.value, val);\n                    });\n                    if (prevChipObj) {\n                        isCustom = prevChipObj.iscustom;\n                    }\n                }\n                dataObj = dataObj || val;\n\n                const transformedData = this.getTransformedData(dataObj, isCustom);\n                const chipObj = transformedData[0];\n                if (isCustom) {\n                    (chipObj as any).iscustom = isCustom;\n                }\n                this.chipsList.push(chipObj);\n            }\n        });\n\n        // make default query with all the values and if response for the value is not in datavalue then add a custom chip object.\n        if (searchQuery.length) {\n            promises.push(this.getDefaultModel(searchQuery, this.nextItemIndex)\n                .then(response => {\n                    this.chipsList = this.chipsList.concat(response || []);\n                    dataValue.forEach((val: any, i: number) => {\n                        const isExists = find(this.chipsList, (obj) => {\n                            return obj.value.toString() === val.toString();\n                        });\n\n                        if (!isExists) {\n                            if (this.allowonlyselect) {\n                                const index = data.indexOf(val);\n                                if (index > -1) {\n                                    data.splice(index, 1);\n                                }\n                                return;\n                            }\n                            const transformedData = this.getTransformedData(val, true);\n                            const chipObj = transformedData[0];\n                            (chipObj as any).iscustom = true;\n                            this.chipsList.push(chipObj);\n                        }\n                    });\n                }));\n        }\n\n        // default chip data is adding focus on to the search input. Hence this flag helps not to focus.\n        this.resetSearchModel(true);\n\n        return Promise.all(promises).then(() => {\n            this._modelByValue = data;\n            this.removeDuplicates();\n            this.updateMaxSize();\n            $appDigest();\n        });\n    }\n\n    private resetSearchModel(defaultQuery?: boolean) {\n        this._unsubscribeDv = true;\n        // clear search will empty the query model and gets the data when minchars is 0 (i.e. autocomplete) on focus\n        // defaultQuery flag is set when widget is not active. This will only load the autocomplete dropup with minchars as 0 when widget is focused/active\n        (this.searchComponent as any).clearSearch(undefined, !this.minchars && !defaultQuery);\n        this._unsubscribeDv = false;\n    }\n\n    // Add the newItem to the list\n    private addItem($event: Event, widget?: SearchComponent) {\n        const searchComponent = widget;\n        let allowAdd;\n        let chipObj;\n\n        if (searchComponent && isDefined(searchComponent.datavalue) && searchComponent.queryModel !== '') {\n            if (!searchComponent.query || !trim(searchComponent.query)) {\n                return;\n            }\n            chipObj = searchComponent.queryModel;\n        } else {\n            if (this.allowonlyselect) {\n                return;\n            }\n            let dataObj;\n            if (this.datafield === ALLFIELDS) {\n                if (!isObject(this.searchComponent.query) && trim(this.searchComponent.query)) {\n                    dataObj = this.createCustomDataModel(this.searchComponent.query);\n                    // return if the custom chip is empty\n                    if (!dataObj) {\n                        this.resetSearchModel();\n                        return;\n                    }\n                }\n            }\n\n            const data = dataObj || trim(this.searchComponent.query);\n            if (data) {\n                const transformedData = this.getTransformedData(data, true);\n                chipObj = transformedData[0];\n                chipObj.iscustom = true;\n            }\n        }\n\n        if (!isDefined(chipObj) || chipObj === '') {\n            return;\n        }\n\n        allowAdd = this.invokeEventCallback('beforeadd', {$event, newItem: chipObj});\n\n        if (isDefined(allowAdd) && !toBoolean(allowAdd)) {\n            return;\n        }\n\n        if (this.isDuplicate(chipObj)) {\n            this.resetSearchModel();\n            return;\n        }\n        this.registerChipItemClass(chipObj, this.chipsList.length);\n        this.chipsList.push(chipObj);\n\n        if (!this.datavalue) {\n            this._modelByValue = [chipObj.value];\n        } else {\n            this._modelByValue = [...this._modelByValue, chipObj.value];\n        }\n\n        this._unsubscribeDv = true;\n        this.invokeOnTouched();\n        this.invokeOnChange(this._modelByValue, $event || {}, true);\n\n        this.invokeEventCallback('add', {$event, $item: chipObj});\n\n        this.updateMaxSize();\n\n        // reset input box when item is added.\n        this.resetSearchModel();\n\n        // stop the event to not to call the submit event on enter press.\n        if ($event && (($event as any).key === 'Enter' || ($event as any).keyCode === 13)) {\n            this.stopEvent($event);\n        }\n    }\n\n    // Prepare datavalue object from a string(junk) value when datafield is allFields.\n    private createCustomDataModel(val: string) {\n        const key = this.displayfield || (this.datafield !== ALLFIELDS ? this.datafield : undefined);\n\n        if (key) {\n            const customObj = {};\n            customObj[key] = val;\n            return customObj;\n        }\n    }\n\n    // Check if newItem already exists\n    private isDuplicate(item: DataSetItem) {\n        if (this.datafield === ALLFIELDS) {\n            return findIndex(this.chipsList, {value: item.value}) > -1;\n        }\n        return findIndex(this.chipsList, {key: item.key}) > -1;\n    }\n\n    // Check if max size is reached\n    private updateMaxSize() {\n        this.saturate = this.maxsize > 0 && this.chipsList.length === this.maxsize;\n    }\n\n    // Makes call to searchComponent to filter the dataSource based on the query.\n    protected getDefaultModel(query: Array<string> | string, index?: number) {\n        this.nextItemIndex++;\n        return this.searchComponent.getDataSource(query, true, index)\n            .then((response) => {\n                // @ts-ignore\n                return filter(query, queryVal => {\n                    find(response, {value: queryVal});\n                });\n            });\n    }\n\n    private handleChipClick($event: Event, chip: DataSetItem) {\n        if (this.readonly) {\n            return;\n        }\n        ($event.currentTarget as any).focus();\n        this.invokeEventCallback('chipclick', {$event, $item: chip});\n    }\n\n    private handleChipFocus($event: Event, chip: DataSetItem) {\n        if (this.readonly) {\n            return;\n        }\n        (chip as any).active = true;\n        this.invokeEventCallback('chipselect', {$event, $item: chip});\n    }\n\n    // To avoid form submit on pressing enter key\n    public stopEvent($event: Event) {\n      const inputValue = ($event.target as HTMLInputElement)?.value ?? '';\n      if(inputValue.trim()){\n        $event.stopPropagation();\n        $event.preventDefault();\n      }\n    }\n\n    public onTextDelete($event: Event) {\n        if (isAppleProduct) {\n            this.onInputClear($event);\n        }\n    }\n\n    public onInputClear($event: Event) {\n        if (!this.chipsList || !this.chipsList.length || this.searchComponent.query) {\n            return;\n        }\n        this.$element.find('li.chip-item > a.app-chip').last().focus();\n        this.stopEvent($event);\n    }\n\n    private onBackspace($event: Event, $item: DataSetItem, $index: number) {\n        if (this.readonly) {\n            return;\n        }\n        this.removeItem($event, $item, $index, true);\n    }\n\n    private onDelete($event: Event, $item: DataSetItem, $index: number) {\n        if (this.readonly) {\n            return;\n        }\n        this.removeItem($event, $item, $index);\n    }\n\n    public onArrowLeft($item?: DataSetItem, $index?: number) {\n        if (this.readonly) {\n            return;\n        }\n\n        // On left arrow click when search input query is empty.\n        if (!this.searchComponent.query && !isDefined($index) && !isDefined($item)) {\n            this.$element.find('li.chip-item > a.app-chip').last().focus();\n            return;\n        }\n\n        if ($index > 0) {\n            this.$element.find('li.chip-item > a.app-chip').get($index - 1).focus();\n        } else {\n            this.focusSearchBox();\n        }\n    }\n\n    public onArrowRight($item?: DataSetItem, $index?: number) {\n        if (this.readonly) {\n            return;\n        }\n        // On right arrow click when search input query is empty.\n        if (!this.searchComponent.query && !isDefined($index) && !isDefined($item)) {\n            this.$element.find('li.chip-item > a.app-chip').first().focus();\n            return;\n        }\n\n        if ($index < (this.chipsList.length - 1)) {\n            this.$element.find('li.chip-item > a.app-chip').get($index + 1).focus();\n        } else {\n            this.focusSearchBox();\n        }\n    }\n\n    // focus search box.\n    private focusSearchBox() {\n        this.$element.find('.app-chip-input > input.app-textbox').focus();\n    }\n\n    // Remove the item from list\n    private removeItem($event: Event, item: DataSetItem, index: number, canFocus?: boolean) {\n        $event.stopPropagation();\n\n        const indexes = isArray(index) ? index : [index];\n        const focusIndex = max(indexes);\n\n        const items = reduce(indexes, (result, i) => {\n            result.push(this.chipsList[i]);\n            return result;\n        }, []);\n\n        // prevent deletion if the before-remove event callback returns false\n        const allowRemove = this.invokeEventCallback('beforeremove', {$event, $item: items.length === 1 ? items[0] : items});\n        if (isDefined(allowRemove) && !toBoolean(allowRemove)) {\n            return;\n        }\n\n        const prevDatavalue = clone(this.datavalue);\n\n        // focus next chip after deletion.\n        // if there are no chips in the list focus search box\n        setTimeout(() => {\n            const chipsLength = this.chipsList.length;\n            const $chipsList = this.$element.find('li.chip-item > a.app-chip');\n\n            if (!chipsLength || !canFocus) {\n                this.focusSearchBox();\n            } else if ((chipsLength - 1) < focusIndex) {\n                // if focus index is greater than chips length select last chip\n                $chipsList.get(chipsLength - 1).focus();\n            } else {\n                // manually set the succeeding chip as active if there is a chip next to the current chip.\n                this.chipsList[focusIndex].active = true;\n                $chipsList.get(focusIndex).focus();\n            }\n        });\n\n        const pulledItems = pullAt(this.chipsList, indexes);\n\n        pulledItems.forEach(datasetItem => {\n            this._modelByValue = filter(this._modelByValue, val => {\n                return !(isObject(val) ? isEqual(val, datasetItem.value) : toString(val) === toString(datasetItem.value));\n            });\n        });\n\n        this._unsubscribeDv = false;\n\n        this.invokeOnChange(this._modelByValue, $event, true);\n        this.invokeEventCallback('change', {$event, newVal: this.datavalue, oldVal: prevDatavalue});\n\n        this.updateMaxSize();\n\n        this.invokeEventCallback('remove', {$event, $item: items.length === 1 ? items[0] : items});\n    }\n\n    /**\n     * Swaps items in an array if provided with indexes.\n     * @param data :- array to be swapped\n     * @param newIndex :- new index for the element to be placed\n     * @param currentIndex :- the current index of the element.\n     */\n    private swapElementsInArray(data: Array<any>, newIndex: number, currentIndex: number) {\n        const draggedItem = pullAt(data, currentIndex)[0];\n        data.splice(newIndex, 0, draggedItem);\n    }\n\n    /**\n     * Cancels the reorder by reseting the elements to the original position.\n     */\n    private resetReorder() {\n        this.$element.removeData('oldIndex');\n    }\n\n    private invokeOnBeforeServiceCall(inputData) {\n        this.invokeEventCallback('beforeservicecall', {inputData});\n    }\n\n    protected handleEvent(node: HTMLElement, eventName: string, eventCallback: Function, locals: any) {\n        if (eventName === 'remove' || eventName === 'beforeremove' || eventName === 'chipselect'\n            || eventName === 'chipclick' || eventName === 'add' || eventName === 'reorder' || eventName === 'change') {\n            return;\n        }\n\n        super.handleEvent(node, eventName, eventCallback, locals);\n    }\n\n    // Configures the reordable feature in chips widgets.\n    private configureDnD() {\n        const options = {\n            items: '> li:not(.app-chip-search)',\n            placeholder: 'chip-placeholder'\n        };\n\n        configureDnD(this.$element, options, this.onReorderStart.bind(this), this.update.bind(this));\n    }\n\n    // Triggered on drag start while reordering.\n    private onReorderStart(evt: Event, ui: Object) {\n        const helper = (ui as any).helper;\n        // increasing the width of the dragged item by 1\n        helper.width(helper.width() + 1);\n        this.$element.data('oldIndex', (ui as any).item.index() - (this.inputposition === 'first' ? 1 : 0));\n    }\n\n    // updates the chipsList and datavalue on reorder.\n    private update($event: Event, ui: Object) {\n        let changedItem,\n            newIndex,\n            oldIndex;\n\n        // Get the index of the item at position before drag and after the reorder.\n        newIndex = (ui as any).item.index() - (this.inputposition === 'first' ? 1 : 0);\n        oldIndex = this.$element.data('oldIndex');\n\n        newIndex = this.chipsList.length === newIndex ? newIndex - 1 : newIndex;\n        changedItem = {\n            oldIndex: oldIndex,\n            newIndex: newIndex,\n            item: this.chipsList[oldIndex]\n        };\n\n        if (newIndex === oldIndex) {\n            this.resetReorder();\n            return;\n        }\n        changedItem.item = this.chipsList[oldIndex];\n\n        const allowReorder = this.invokeEventCallback('beforereorder', {$event, $data: this.chipsList, $changedItem: changedItem});\n\n        if (isDefined(allowReorder) && toBoolean(allowReorder) === false) {\n            this.resetReorder();\n            return;\n        }\n\n        // modify the chipsList and datavalue after the reorder.\n        this.swapElementsInArray(this.chipsList, newIndex, oldIndex);\n        this.swapElementsInArray(this._modelByValue, newIndex, oldIndex);\n\n        changedItem.item = this.chipsList[newIndex];\n\n        this.chipsList = [...this.chipsList];\n\n        this.resetReorder();\n        this.invokeEventCallback('reorder', {$event, $data: this.chipsList, $changedItem: changedItem});\n    }\n\n    onPropertyChange(key: string, nv: any, ov: any) {\n        if (key === 'tabindex') {\n            return;\n        }\n        if (key === 'dataoptions') {\n            (this.searchComponent as any).dataoptions = nv;\n        }\n        if (key === 'datafield') {\n            this.searchComponent.datafield = this.datafield;\n        }\n        if (key === 'displayfield') {\n            this.searchComponent.displaylabel = this.displayfield;\n        }\n        if (key === 'displayexpression') {\n            this.searchComponent.binddisplaylabel = this.binddisplayexpression ? this.binddisplayexpression : this.displayexpression;\n        }\n        if (key === 'displayimagesrc') {\n            this.searchComponent.binddisplayimagesrc = this.binddisplayimagesrc ? this.binddisplayimagesrc : this.displayimagesrc;\n        }\n        if (key === 'limit') {\n            this.searchComponent.limit = this.limit;\n        }\n        if (key === 'matchmode') {\n            this.searchComponent.matchmode = this.matchmode;\n        }\n        if (key === 'groupby') {\n            this.searchComponent.groupby = this.groupby;\n        }\n        if (key === 'enablereorder') {\n            if (this.$element.hasClass('ui-sortable')) {\n                this.$element.sortable('option', 'disabled', !nv);\n            } else if (nv) {\n                this.configureDnD();\n            }\n\n            // Add this block to handle drag prevention\n            const chipElements = this.$element.find('.chip-item a.app-chip');\n            if (!nv) {\n                chipElements.addClass('no-drag');\n                // Prevent default drag behavior\n                chipElements.on('dragstart', (e) => {\n                    e.preventDefault();\n                    return false;\n                });\n            } else {\n                chipElements.removeClass('no-drag');\n                chipElements.off('dragstart');\n            }\n        }\n        if (key === 'readonly') {\n            if (nv) {\n                this.$element.addClass('readonly');\n            } else {\n                this.$element.removeClass('readonly');\n            }\n        }\n        if (key === 'inputposition') {\n            const $inputEl = this.$element.find('li.app-chip-search');\n            if (nv === 'first') {\n                this.$element.prepend($inputEl);\n            } else {\n                this.$element.append($inputEl);\n            }\n        }\n        if (key === 'autofocus' && nv) {\n            // setting the autofocus on the input once after dom is updated\n            setTimeout(() => {\n                const $chipsList = this.$element.find('.app-chip-input > input.app-textbox');\n                if ($chipsList && $chipsList.length) {\n                    this.focusSearchBox();\n                }\n            });\n        }\n        super.onPropertyChange(key, nv, ov);\n    }\n\n    ngOnDestroy() {\n        // MEMORY LEAK FIX: Clear chips list array\n        this.chipsList = [];\n\n        // MEMORY LEAK FIX: Nullify debounced function closure\n        this._debounceUpdateQueryModel = null;\n\n        // MEMORY LEAK FIX: Clear search component reference\n        this.searchComponent = null;\n\n        // MEMORY LEAK FIX: Destroy jQuery sortable if enabled\n        if (this.enablereorder && this.$element) {\n            try {\n                this.$element.sortable('destroy');\n            } catch (e) {\n                // Ignore errors during destroy\n            }\n        }\n\n        // MEMORY LEAK FIX: Clear transform function reference\n        this.getTransformedData = null;\n\n        // MEMORY LEAK FIX: Clear class expression\n        this._classExpr = null;\n\n        // Call parent ngOnDestroy (DatasetAwareFormComponent has cleanup)\n        super.ngOnDestroy();\n    }\n}\n","@for (item of chipsList; track item) {\n  <li class=\"chip-item {{chipclass && !bindChipclass ? chipclass : ''}}\"\n    [ngClass]=\"{'active': item.active, 'disabled': disabled}\">\n    <a href=\"javascript:void(0)\" class=\"app-chip\"\n      (click)=\"handleChipClick($event, item)\"\n      (keydown.delete)=\"onDelete($event, item, $index)\"\n      (keydown.backspace)=\"onBackspace($event, item, $index)\"\n      (keydown.arrowleft)=\"onArrowLeft(item, $index)\"\n      (keydown.arrowright)=\"onArrowRight(item, $index)\"\n      (focus)=\"handleChipFocus($event, item)\"\n      (blur)=\"readonly ? 0 : item.active = false\"\n      [ngClass]=\"{'no-drag': !enablereorder,'chip-duplicate bg-danger': item.isDuplicate, 'chip-picture': item.imgSrc}\">\n      @if (item.imgSrc) {\n        <img data-identifier=\"img\" alt=\"Chip Image\" class=\"button-image-icon\" [src]=\"item.imgSrc\"/>\n      }\n      <span class=\"app-chip-title\" [textContent]=\"item.label\" [title]=\"item.label\"></span>\n      @if (!readonly) {\n        <button type=\"button\" [attr.aria-label]=\"'Clear ' + item.label\" class=\"btn btn-transparent\"\n          (click)=\"removeItem($event, item, $index);\">\n          <i class=\"app-icon wi wi-close\"></i>\n        </button>\n      }\n    </a>\n  </li>\n}\n<li class=\"app-chip-search\" [ngClass]=\"{'full-width': inputwidth === 'full'}\">\n  <div #search wmSearch class=\"app-chip-input\"\n    name=\"app-chip-search\"\n    submit.event=\"addItem($event, widget)\"\n    beforeservicecall.event=\"invokeOnBeforeServiceCall(inputData)\"\n    disabled.bind=\"disabled || readonly || saturate\"\n    datafield.bind=\"datafield\"\n    allowonlyselect.bind=\"allowonlyselect\"\n    searchkey.bind=\"searchkey\"\n    orderby.bind=\"orderby\"\n    placeholder.bind=\"saturate ? maxSizeReached : placeholder\"\n    showsearchicon.bind=\"showsearchicon\"\n    tabindex.bind=\"tabindex\"\n    minchars.bind=\"minchars\"\n    debouncetime.bind=\"debouncetime\"\n    matchmode.bind=\"matchmode\"\n    datacompletemsg.bind = \"datacompletemsg\"\n    groupby.bind=\"groupby\"\n    match.bind=\"match\"\n    dateformat.bind=\"dateformat\"\n    (keydown.enter)=\"stopEvent($event)\"\n    (keydown.delete)=\"onTextDelete($event)\"\n    (keydown.backspace)=\"onInputClear($event)\"\n    (keydown.arrowleft)=\"onArrowLeft()\"\n    (keydown.arrowright)=\"onArrowRight()\">\n  </div>\n</li>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}