cm-angular-dual-listbox
Version:
Dual List Box for Angular
1 lines • 43.7 kB
Source Map (JSON)
{"version":3,"file":"cm-angular-dual-listbox.mjs","sources":["../../../projects/cm-angular-dual-listbox/src/lib/angular-dual-listbox/angular-dual-listbox.model.ts","../../../projects/cm-angular-dual-listbox/src/lib/angular-dual-listbox/angular-dual-listbox.component.ts","../../../projects/cm-angular-dual-listbox/src/lib/angular-dual-listbox/angular-dual-listbox.component.html","../../../projects/cm-angular-dual-listbox/src/public-api.ts","../../../projects/cm-angular-dual-listbox/src/cm-angular-dual-listbox.ts"],"sourcesContent":["export class AngularDualListModel {\r\n /** Name of the list */\r\n private _name: string;\r\n /** Last element touched */\r\n last: any;\r\n /** text filter */\r\n picker: string;\r\n\r\n dragStart: boolean;\r\n dragOver: boolean;\r\n\r\n pick: Array<any>;\r\n list: Array<any>;\r\n sift: Array<any>;\r\n\r\n constructor(name: string) {\r\n this._name = name;\r\n this.last = null;\r\n this.picker = '';\r\n this.dragStart = false;\r\n this.dragOver = false;\r\n\r\n // Arrays will contain objects of { _id, _name }.\r\n this.pick = [];\r\n this.list = [];\r\n this.sift = [];\r\n }\r\n\r\n get name(): string {\r\n return this._name;\r\n }\r\n}","import { Component, DoCheck, EventEmitter, Input, IterableDiffers, OnChanges, Output, SimpleChange } from '@angular/core';\r\nimport { AngularDualListModel } from './angular-dual-listbox.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport type compareFunction = (a: any, b: any) => number;\r\nvar nextId = 0;\r\n\r\n@Component({\r\n selector: 'dual-listbox',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './angular-dual-listbox.component.html',\r\n styleUrls: ['./angular-dual-listbox.component.css']\r\n})\r\nexport class CmAngularDualListboxComponent implements DoCheck, OnChanges {\r\n\r\n static AVAILABLE_LIST_NAME = 'available';\r\n static CONFIRMED_LIST_NAME = 'confirmed';\r\n\r\n static LTR = 'left-to-right';\r\n static RTL = 'right-to-left';\r\n\r\n static DEFAULT_FORMAT = {\r\n add: 'Add',\r\n remove: 'Remove',\r\n all: 'All',\r\n none: 'None',\r\n direction: CmAngularDualListboxComponent.LTR,\r\n draggable: true,\r\n };\r\n\r\n @Input() id = `dual-list-${nextId++}`;\r\n @Input() key = '_id';\r\n @Input() display: any = '_name';\r\n @Input() height = '100px';\r\n @Input() filter = false;\r\n @Input() format = CmAngularDualListboxComponent.DEFAULT_FORMAT;\r\n @Input() sort = false;\r\n @Input() compare: compareFunction | undefined;\r\n @Input() disabled = false;\r\n @Input() source: Array<any> = [];\r\n @Input() destination: Array<any> = [];\r\n @Output() destinationChange = new EventEmitter();\r\n\r\n available: AngularDualListModel;\r\n confirmed: AngularDualListModel;\r\n\r\n sourceDiffer: any;\r\n destinationDiffer: any;\r\n\r\n private sorter = (a: any, b: any) => { return (a._name < b._name) ? -1 : ((a._name > b._name) ? 1 : 0); };\r\n\r\n constructor(private differs: IterableDiffers) {\r\n this.available = new AngularDualListModel(CmAngularDualListboxComponent.AVAILABLE_LIST_NAME);\r\n this.confirmed = new AngularDualListModel(CmAngularDualListboxComponent.CONFIRMED_LIST_NAME);\r\n }\r\n\r\n ngOnChanges(changeRecord: { [key: string]: SimpleChange }) {\r\n if (changeRecord['filter']) {\r\n if (changeRecord['filter'].currentValue === false) {\r\n this.clearFilter(this.available);\r\n this.clearFilter(this.confirmed);\r\n }\r\n }\r\n\r\n if (changeRecord['sort']) {\r\n if (changeRecord['sort'].currentValue === true && this.compare === undefined) {\r\n this.compare = this.sorter;\r\n }\r\n else if (changeRecord['sort'].currentValue === false) {\r\n this.compare = undefined;\r\n }\r\n }\r\n\r\n if (changeRecord['format']) {\r\n this.format = changeRecord['format'].currentValue;\r\n\r\n if (typeof (this.format.direction) === 'undefined') {\r\n this.format.direction = CmAngularDualListboxComponent.LTR;\r\n }\r\n\r\n if (typeof (this.format.add) === 'undefined') {\r\n this.format.add = CmAngularDualListboxComponent.DEFAULT_FORMAT.add;\r\n }\r\n\r\n if (typeof (this.format.remove) === 'undefined') {\r\n this.format.remove = CmAngularDualListboxComponent.DEFAULT_FORMAT.remove;\r\n }\r\n\r\n if (typeof (this.format.all) === 'undefined') {\r\n this.format.all = CmAngularDualListboxComponent.DEFAULT_FORMAT.all;\r\n }\r\n\r\n if (typeof (this.format.none) === 'undefined') {\r\n this.format.none = CmAngularDualListboxComponent.DEFAULT_FORMAT.none;\r\n }\r\n\r\n if (typeof (this.format.draggable) === 'undefined') {\r\n this.format.draggable = CmAngularDualListboxComponent.DEFAULT_FORMAT.draggable;\r\n }\r\n }\r\n\r\n if (changeRecord['source']) {\r\n this.available = new AngularDualListModel(CmAngularDualListboxComponent.AVAILABLE_LIST_NAME);\r\n this.updatedSource();\r\n this.updatedDestination();\r\n }\r\n\r\n if (changeRecord['destination']) {\r\n this.confirmed = new AngularDualListModel(CmAngularDualListboxComponent.CONFIRMED_LIST_NAME);\r\n this.updatedDestination();\r\n this.updatedSource();\r\n }\r\n }\r\n\r\n ngDoCheck() {\r\n if (this.source && this.buildAvailable(this.source)) {\r\n this.onFilter(this.available);\r\n }\r\n if (this.destination && this.buildConfirmed(this.destination)) {\r\n this.onFilter(this.confirmed);\r\n }\r\n }\r\n\r\n buildAvailable(source: Array<any>): boolean {\r\n const sourceChanges = this.sourceDiffer.diff(source);\r\n if (sourceChanges) {\r\n sourceChanges.forEachRemovedItem((r: any) => {\r\n const idx = this.findItemIndex(this.available.list, r.item, this.key);\r\n if (idx !== -1) {\r\n this.available.list.splice(idx, 1);\r\n }\r\n });\r\n\r\n sourceChanges.forEachAddedItem((r: any) => {\r\n // Do not add duplicates even if source has duplicates.\r\n if (this.findItemIndex(this.available.list, r.item, this.key) === -1) {\r\n this.available.list.push({ _id: this.makeId(r.item), _name: this.makeName(r.item) });\r\n }\r\n });\r\n\r\n if (this.compare !== undefined) {\r\n this.available.list.sort(this.compare);\r\n }\r\n this.available.sift = this.available.list;\r\n\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n buildConfirmed(destination: Array<any>): boolean {\r\n let moved = false;\r\n const destChanges = this.destinationDiffer.diff(destination);\r\n if (destChanges) {\r\n destChanges.forEachRemovedItem((r: any) => {\r\n const idx = this.findItemIndex(this.confirmed.list, r.item, this.key);\r\n if (idx !== -1) {\r\n if (!this.isItemSelected(this.confirmed.pick, this.confirmed.list[idx])) {\r\n this.selectItem(this.confirmed.pick, this.confirmed.list[idx]);\r\n }\r\n this.moveItem(this.confirmed, this.available, this.confirmed.list[idx], false);\r\n moved = true;\r\n }\r\n });\r\n\r\n destChanges.forEachAddedItem((r: any) => {\r\n const idx = this.findItemIndex(this.available.list, r.item, this.key);\r\n if (idx !== -1) {\r\n if (!this.isItemSelected(this.available.pick, this.available.list[idx])) {\r\n this.selectItem(this.available.pick, this.available.list[idx]);\r\n }\r\n this.moveItem(this.available, this.confirmed, this.available.list[idx], false);\r\n moved = true;\r\n }\r\n });\r\n\r\n if (this.compare !== undefined) {\r\n this.confirmed.list.sort(this.compare);\r\n }\r\n this.confirmed.sift = this.confirmed.list;\r\n\r\n if (moved) {\r\n this.trueUp();\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n updatedSource() {\r\n this.available.list.length = 0;\r\n this.available.pick.length = 0;\r\n\r\n if (this.source !== undefined) {\r\n this.sourceDiffer = this.differs.find(this.source).create();\r\n }\r\n }\r\n\r\n updatedDestination() {\r\n if (this.destination !== undefined) {\r\n this.destinationDiffer = this.differs.find(this.destination).create();\r\n }\r\n }\r\n\r\n direction() {\r\n return this.format.direction === CmAngularDualListboxComponent.LTR;\r\n }\r\n\r\n dragEnd(list: any = null): boolean {\r\n if (list) {\r\n list.dragStart = false;\r\n } else {\r\n this.available.dragStart = false;\r\n this.confirmed.dragStart = false;\r\n }\r\n return false;\r\n }\r\n\r\n drag(event: DragEvent, item: any, list: AngularDualListModel) {\r\n if (!this.isItemSelected(list.pick, item)) {\r\n this.selectItem(list.pick, item);\r\n }\r\n list.dragStart = true;\r\n\r\n if (event.dataTransfer)\r\n // Set a custom type to be this dual-list's id.\r\n event.dataTransfer.setData(this.id, item['_id']);\r\n }\r\n\r\n allowDrop(event: DragEvent, list: AngularDualListModel): boolean {\r\n if (event.dataTransfer)\r\n if (event.dataTransfer.types.length && (event.dataTransfer.types[0] === this.id)) {\r\n event.preventDefault();\r\n if (!list.dragStart) {\r\n list.dragOver = true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n dragLeave() {\r\n this.available.dragOver = false;\r\n this.confirmed.dragOver = false;\r\n }\r\n\r\n drop(event: DragEvent, list: AngularDualListModel) {\r\n if (event.dataTransfer)\r\n if (event.dataTransfer.types.length && (event.dataTransfer.types[0] === this.id)) {\r\n event.preventDefault();\r\n this.dragLeave();\r\n this.dragEnd();\r\n\r\n if (list === this.available) {\r\n this.moveItem(this.available, this.confirmed);\r\n } else {\r\n this.moveItem(this.confirmed, this.available);\r\n }\r\n }\r\n }\r\n\r\n private trueUp() {\r\n let changed = false;\r\n\r\n // Clear removed items.\r\n let pos = this.destination.length;\r\n while ((pos -= 1) >= 0) {\r\n const mv = this.confirmed.list.filter(conf => {\r\n if (typeof this.destination[pos] === 'object') {\r\n return conf._id === this.destination[pos][this.key];\r\n } else {\r\n return conf._id === this.destination[pos];\r\n }\r\n });\r\n if (mv.length === 0) {\r\n // Not found so remove.\r\n this.destination.splice(pos, 1);\r\n changed = true;\r\n }\r\n }\r\n\r\n // Push added items.\r\n for (let i = 0, len = this.confirmed.list.length; i < len; i += 1) {\r\n let mv = this.destination.filter((d: any) => {\r\n if (typeof d === 'object') {\r\n return (d[this.key] === this.confirmed.list[i]._id);\r\n } else {\r\n return (d === this.confirmed.list[i]._id);\r\n }\r\n });\r\n\r\n if (mv.length === 0) {\r\n // Not found so add.\r\n mv = this.source.filter((o: any) => {\r\n if (typeof o === 'object') {\r\n return (o[this.key] === this.confirmed.list[i]._id);\r\n } else {\r\n return (o === this.confirmed.list[i]._id);\r\n }\r\n });\r\n\r\n if (mv.length > 0) {\r\n this.destination.push(mv[0]);\r\n changed = true;\r\n }\r\n }\r\n }\r\n\r\n if (changed) {\r\n this.destinationChange.emit(this.destination);\r\n }\r\n }\r\n\r\n findItemIndex(list: Array<any>, item: any, key: any = '_id') {\r\n let idx = -1;\r\n\r\n function matchObject(e: any) {\r\n if (e._id === item[key]) {\r\n idx = list.indexOf(e);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function match(e: any) {\r\n if (e._id === item) {\r\n idx = list.indexOf(e);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n // Assumption is that the arrays do not have duplicates.\r\n if (typeof item === 'object') {\r\n list.filter(matchObject);\r\n } else {\r\n list.filter(match);\r\n }\r\n\r\n return idx;\r\n }\r\n\r\n private makeUnavailable(source: AngularDualListModel, item: any) {\r\n const idx = source.list.indexOf(item);\r\n if (idx !== -1) {\r\n source.list.splice(idx, 1);\r\n }\r\n }\r\n\r\n moveItem(source: AngularDualListModel, target: AngularDualListModel, item: any = null, trueup = true) {\r\n let i = 0;\r\n let len = source.pick.length;\r\n\r\n if (item) {\r\n i = source.list.indexOf(item);\r\n len = i + 1;\r\n }\r\n\r\n for (; i < len; i += 1) {\r\n // Is the pick still in list?\r\n let mv: Array<any> = [];\r\n if (item) {\r\n const idx = this.findItemIndex(source.pick, item);\r\n if (idx !== -1) {\r\n mv[0] = source.pick[idx];\r\n }\r\n } else {\r\n mv = source.list.filter(src => {\r\n return (src._id === source.pick[i]._id);\r\n });\r\n }\r\n\r\n // Should only ever be 1\r\n if (mv.length === 1) {\r\n // Add if not already in target.\r\n if (target.list.filter(trg => trg._id === mv[0]._id).length === 0) {\r\n target.list.push(mv[0]);\r\n }\r\n\r\n this.makeUnavailable(source, mv[0]);\r\n }\r\n }\r\n\r\n if (this.compare !== undefined) {\r\n target.list.sort(this.compare);\r\n }\r\n\r\n source.pick.length = 0;\r\n\r\n // Update destination\r\n if (trueup) {\r\n this.trueUp();\r\n }\r\n\r\n // Delay ever-so-slightly to prevent race condition.\r\n setTimeout(() => {\r\n this.onFilter(source);\r\n this.onFilter(target);\r\n }, 10);\r\n }\r\n\r\n isItemSelected(list: Array<any>, item: any): boolean {\r\n if (list.filter(e => Object.is(e, item)).length > 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n shiftClick(event: MouseEvent, index: number, source: AngularDualListModel, item: any) {\r\n if (event.shiftKey && source.last && !Object.is(item, source.last)) {\r\n const idx = source.sift.indexOf(source.last);\r\n if (index > idx) {\r\n for (let i = (idx + 1); i < index; i += 1) {\r\n this.selectItem(source.pick, source.sift[i]);\r\n }\r\n } else if (idx !== -1) {\r\n for (let i = (index + 1); i < idx; i += 1) {\r\n this.selectItem(source.pick, source.sift[i]);\r\n }\r\n }\r\n }\r\n source.last = item;\r\n }\r\n\r\n selectItem(list: Array<any>, item: any) {\r\n const pk = list.filter((e: any) => {\r\n return Object.is(e, item);\r\n });\r\n if (pk.length > 0) {\r\n // Already in list, so deselect.\r\n for (let i = 0, len = pk.length; i < len; i += 1) {\r\n const idx = list.indexOf(pk[i]);\r\n if (idx !== -1) {\r\n list.splice(idx, 1);\r\n }\r\n }\r\n } else {\r\n list.push(item);\r\n }\r\n }\r\n\r\n selectAll(source: AngularDualListModel) {\r\n source.pick.length = 0;\r\n source.pick = source.sift.slice(0);\r\n }\r\n\r\n selectNone(source: AngularDualListModel) {\r\n source.pick.length = 0;\r\n }\r\n\r\n isAllSelected(source: AngularDualListModel): boolean {\r\n if (source.list.length === 0 || source.list.length === source.pick.length) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n isAnySelected(source: AngularDualListModel): boolean {\r\n if (source.pick.length > 0) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private unpick(source: AngularDualListModel) {\r\n for (let i = source.pick.length - 1; i >= 0; i -= 1) {\r\n if (source.sift.indexOf(source.pick[i]) === -1) {\r\n source.pick.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n clearFilter(source: AngularDualListModel) {\r\n if (source) {\r\n source.picker = '';\r\n this.onFilter(source);\r\n }\r\n }\r\n\r\n onFilter(source: AngularDualListModel) {\r\n if (source.picker.length > 0) {\r\n try {\r\n const filtered = source.list.filter((item: any) => {\r\n if (Object.prototype.toString.call(item) === '[object Object]') {\r\n if (item._name !== undefined) {\r\n // @ts-ignore: remove when d.ts has locale as an argument.\r\n return item._name.toLocaleLowerCase(this.format.locale).indexOf(source.picker.toLocaleLowerCase(this.format.locale)) !== -1;\r\n } else {\r\n // @ts-ignore: remove when d.ts has locale as an argument.\r\n return JSON.stringify(item).toLocaleLowerCase(this.format.locale).indexOf(source.picker.toLocaleLowerCase(this.format.locale)) !== -1;\r\n }\r\n } else {\r\n // @ts-ignore: remove when d.ts has locale as an argument.\r\n return item.toLocaleLowerCase(this.format.locale).indexOf(source.picker.toLocaleLowerCase(this.format.locale)) !== -1;\r\n }\r\n });\r\n source.sift = filtered;\r\n this.unpick(source);\r\n } catch (e) {\r\n if (e instanceof RangeError) {\r\n // this.format.locale = undefined;\r\n }\r\n source.sift = source.list;\r\n }\r\n } else {\r\n source.sift = source.list;\r\n }\r\n }\r\n\r\n private makeId(item: any): string | number {\r\n if (typeof item === 'object') {\r\n return item[this.key];\r\n } else {\r\n return item;\r\n }\r\n }\r\n\r\n // Allow for complex names by passing an array of strings.\r\n // Example: [display]=\"[ '_type.substring(0,1)', '_name' ]\"\r\n protected makeName(item: any, separator = '_'): string {\r\n const display = this.display;\r\n\r\n function fallback(itm: any) {\r\n switch (Object.prototype.toString.call(itm)) {\r\n case '[object Number]':\r\n return itm;\r\n case '[object String]':\r\n return itm;\r\n default:\r\n if (itm !== undefined) {\r\n return itm[display];\r\n } else {\r\n return 'undefined';\r\n }\r\n }\r\n }\r\n\r\n let str = '';\r\n\r\n if (this.display !== undefined) {\r\n switch (Object.prototype.toString.call(this.display)) {\r\n case '[object Function]':\r\n str = this.display(item);\r\n break;\r\n\r\n case '[object Array]':\r\n for (let i = 0, len = this.display.length; i < len; i += 1) {\r\n if (str.length > 0) {\r\n str = str + separator;\r\n }\r\n\r\n if (this.display[i].indexOf('.') === -1) {\r\n // Simple, just add to string.\r\n str = str + item[this.display[i]];\r\n } else {\r\n // Complex, some action needs to be performed\r\n const parts = this.display[i].split('.');\r\n\r\n const s = item[parts[0]];\r\n if (s) {\r\n // Use brute force\r\n if (parts[1].indexOf('substring') !== -1) {\r\n const nums = (parts[1].substring(parts[1].indexOf('(') + 1, parts[1].indexOf(')'))).split(',');\r\n\r\n switch (nums.length) {\r\n case 1:\r\n str = str + s.substring(parseInt(nums[0], 10));\r\n break;\r\n case 2:\r\n str = str + s.substring(parseInt(nums[0], 10), parseInt(nums[1], 10));\r\n break;\r\n default:\r\n str = str + s;\r\n break;\r\n }\r\n } else {\r\n // method not approved, so just add s.\r\n str = str + s;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n default:\r\n str = fallback(item);\r\n break;\r\n }\r\n } else {\r\n str = fallback(item);\r\n }\r\n\r\n return str;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","<div class=\"dual-list\">\n\t<div class=\"listbox\" [ngStyle]=\"{ 'order' : direction() ? 1 : 2, 'margin-left' : direction() ? 0 : '10px' }\">\n\t\t<button type=\"button\" name=\"addBtn\" class=\"btn btn-primary btn-block\" (click)=\"moveItem(available, confirmed)\"\n\t\t\t[ngClass]=\"direction() ? 'point-right' : 'point-left'\"\n\t\t\t[disabled]=\"available.pick.length === 0\">{{format.add}}</button>\n\n\t\t<form *ngIf=\"filter\" class=\"filter\">\n\t\t\t<input class=\"form-control\" name=\"filterSource\" [(ngModel)]=\"available.picker\"\n\t\t\t\t(ngModelChange)=\"onFilter(available)\">\n\t\t</form>\n\n\t\t<div class=\"record-picker\">\n\t\t\t<ul [ngStyle]=\"{'max-height': height, 'min-height': height}\" [ngClass]=\"{over:available.dragOver}\"\n\t\t\t\t(drop)=\"drop($event, confirmed)\" (dragover)=\"allowDrop($event, available)\" (dragleave)=\"dragLeave()\">\n\t\t\t\t<li *ngFor=\"let item of available.sift; let idx=index;\"\n\t\t\t\t\t(click)=\"disabled ? null : selectItem(available.pick, item); shiftClick($event, idx, available, item)\"\n\t\t\t\t\t[ngClass]=\"{selected: isItemSelected(available.pick, item), disabled: disabled}\"\n\t\t\t\t\t[draggable]=\"!disabled && format.draggable\" (dragstart)=\"drag($event, item, available)\"\n\t\t\t\t\t(dragend)=\"dragEnd(available)\"><label>{{item._name}}</label></li>\n\t\t\t</ul>\n\t\t</div>\n\n\t\t<div class=\"button-bar\">\n\t\t\t<button type=\"button\" class=\"btn btn-primary pull-left\" (click)=\"selectAll(available)\"\n\t\t\t\t[disabled]=\"disabled || isAllSelected(available)\">{{format.all}}</button>\n\t\t\t<button type=\"button\" class=\"btn btn-default pull-right\" (click)=\"selectNone(available)\"\n\t\t\t\t[disabled]=\"!isAnySelected(available)\">{{format.none}}</button>\n\t\t</div>\n\t</div>\n\n\t<div class=\"listbox\" [ngStyle]=\"{ 'order' : direction() ? 2 : 1, 'margin-left' : direction() ? '10px' : 0 }\">\n\t\t<button type=\"button\" name=\"removeBtn\" class=\"btn btn-primary btn-block\"\n\t\t\t(click)=\"moveItem(confirmed, available)\" [ngClass]=\"direction() ? 'point-left' : 'point-right'\"\n\t\t\t[disabled]=\"confirmed.pick.length === 0\">{{format.remove}}</button>\n\n\t\t<form *ngIf=\"filter\" class=\"filter\">\n\t\t\t<input class=\"form-control\" name=\"filterDestination\" [(ngModel)]=\"confirmed.picker\"\n\t\t\t\t(ngModelChange)=\"onFilter(confirmed)\">\n\t\t</form>\n\n\t\t<div class=\"record-picker\">\n\t\t\t<ul [ngStyle]=\"{'max-height': height, 'min-height': height}\" [ngClass]=\"{over:confirmed.dragOver}\"\n\t\t\t\t(drop)=\"drop($event, available)\" (dragover)=\"allowDrop($event, confirmed)\" (dragleave)=\"dragLeave()\">\n\t\t\t\t<li #itmConf *ngFor=\"let item of confirmed.sift; let idx=index;\"\n\t\t\t\t\t(click)=\"disabled ? null : selectItem(confirmed.pick, item); shiftClick($event, idx, confirmed, item)\"\n\t\t\t\t\t[ngClass]=\"{selected: isItemSelected(confirmed.pick, item), disabled: disabled}\"\n\t\t\t\t\t[draggable]=\"!disabled && format.draggable\" (dragstart)=\"drag($event, item, confirmed)\"\n\t\t\t\t\t(dragend)=\"dragEnd(confirmed)\"><label>{{item._name}}</label></li>\n\t\t\t</ul>\n\t\t</div>\n\n\t\t<div class=\"button-bar\">\n\t\t\t<button type=\"button\" class=\"btn btn-primary pull-left\" (click)=\"selectAll(confirmed)\"\n\t\t\t\t[disabled]=\"disabled || isAllSelected(confirmed)\">{{format.all}}</button>\n\t\t\t<button type=\"button\" class=\"btn btn-default pull-right\" (click)=\"selectNone(confirmed)\"\n\t\t\t\t[disabled]=\"!isAnySelected(confirmed)\">{{format.none}}</button>\n\t\t</div>\n\t</div>\n</div>","/*\n * Public API Surface of cm-angular-dual-listbox\n */\nexport * from './lib/angular-dual-listbox/angular-dual-listbox.model';\nexport * from './lib/angular-dual-listbox/angular-dual-listbox.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}