primeng 11.1.0 → 11.2.3

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.
Files changed (234) hide show
  1. package/README.md +1 -0
  2. package/api/confirmaeventtype.d.ts +5 -0
  3. package/api/filtermatchmode.d.ts +4 -0
  4. package/api/filterservice.d.ts +4 -0
  5. package/api/primeng-api.metadata.json +1 -1
  6. package/api/public_api.d.ts +1 -0
  7. package/api/translation.d.ts +4 -0
  8. package/autocomplete/autocomplete.d.ts +8 -1
  9. package/autocomplete/primeng-autocomplete.metadata.json +1 -1
  10. package/avatar/primeng-avatar.metadata.json +1 -1
  11. package/bundles/primeng-api.umd.js +56 -6
  12. package/bundles/primeng-api.umd.js.map +1 -1
  13. package/bundles/primeng-api.umd.min.js +1 -1
  14. package/bundles/primeng-api.umd.min.js.map +1 -1
  15. package/bundles/primeng-autocomplete.umd.js +86 -17
  16. package/bundles/primeng-autocomplete.umd.js.map +1 -1
  17. package/bundles/primeng-autocomplete.umd.min.js +1 -1
  18. package/bundles/primeng-autocomplete.umd.min.js.map +1 -1
  19. package/bundles/primeng-avatar.umd.js +1 -1
  20. package/bundles/primeng-avatar.umd.min.js +1 -1
  21. package/bundles/primeng-avatar.umd.min.js.map +1 -1
  22. package/bundles/primeng-calendar.umd.js +6 -0
  23. package/bundles/primeng-calendar.umd.js.map +1 -1
  24. package/bundles/primeng-calendar.umd.min.js +1 -1
  25. package/bundles/primeng-calendar.umd.min.js.map +1 -1
  26. package/bundles/primeng-cascadeselect.umd.js +8 -5
  27. package/bundles/primeng-cascadeselect.umd.js.map +1 -1
  28. package/bundles/primeng-cascadeselect.umd.min.js +2 -2
  29. package/bundles/primeng-cascadeselect.umd.min.js.map +1 -1
  30. package/bundles/primeng-colorpicker.umd.js.map +1 -1
  31. package/bundles/primeng-colorpicker.umd.min.js.map +1 -1
  32. package/bundles/primeng-confirmdialog.umd.js +11 -8
  33. package/bundles/primeng-confirmdialog.umd.js.map +1 -1
  34. package/bundles/primeng-confirmdialog.umd.min.js +1 -1
  35. package/bundles/primeng-confirmdialog.umd.min.js.map +1 -1
  36. package/bundles/primeng-contextmenu.umd.js +2 -2
  37. package/bundles/primeng-contextmenu.umd.js.map +1 -1
  38. package/bundles/primeng-contextmenu.umd.min.js +1 -1
  39. package/bundles/primeng-contextmenu.umd.min.js.map +1 -1
  40. package/bundles/primeng-dialog.umd.js +1 -1
  41. package/bundles/primeng-dialog.umd.min.js +1 -1
  42. package/bundles/primeng-dialog.umd.min.js.map +1 -1
  43. package/bundles/primeng-dom.umd.js +3 -0
  44. package/bundles/primeng-dom.umd.js.map +1 -1
  45. package/bundles/primeng-dom.umd.min.js +1 -1
  46. package/bundles/primeng-dom.umd.min.js.map +1 -1
  47. package/bundles/primeng-dropdown.umd.js +1 -1
  48. package/bundles/primeng-dropdown.umd.js.map +1 -1
  49. package/bundles/primeng-dropdown.umd.min.js +1 -1
  50. package/bundles/primeng-dropdown.umd.min.js.map +1 -1
  51. package/bundles/primeng-dynamicdialog.umd.js +1 -1
  52. package/bundles/primeng-dynamicdialog.umd.min.js +1 -1
  53. package/bundles/primeng-dynamicdialog.umd.min.js.map +1 -1
  54. package/bundles/primeng-inputmask.umd.js +5 -2
  55. package/bundles/primeng-inputmask.umd.js.map +1 -1
  56. package/bundles/primeng-inputmask.umd.min.js +1 -1
  57. package/bundles/primeng-inputmask.umd.min.js.map +1 -1
  58. package/bundles/primeng-inputnumber.umd.js +16 -2
  59. package/bundles/primeng-inputnumber.umd.js.map +1 -1
  60. package/bundles/primeng-inputnumber.umd.min.js +1 -1
  61. package/bundles/primeng-inputnumber.umd.min.js.map +1 -1
  62. package/bundles/primeng-knob.umd.js +1 -1
  63. package/bundles/primeng-knob.umd.js.map +1 -1
  64. package/bundles/primeng-knob.umd.min.js +1 -1
  65. package/bundles/primeng-knob.umd.min.js.map +1 -1
  66. package/bundles/primeng-lightbox.umd.js +1 -1
  67. package/bundles/primeng-lightbox.umd.min.js +1 -1
  68. package/bundles/primeng-lightbox.umd.min.js.map +1 -1
  69. package/bundles/primeng-listbox.umd.js +133 -34
  70. package/bundles/primeng-listbox.umd.js.map +1 -1
  71. package/bundles/primeng-listbox.umd.min.js +1 -1
  72. package/bundles/primeng-listbox.umd.min.js.map +1 -1
  73. package/bundles/primeng-multiselect.umd.js +146 -32
  74. package/bundles/primeng-multiselect.umd.js.map +1 -1
  75. package/bundles/primeng-multiselect.umd.min.js +2 -2
  76. package/bundles/primeng-multiselect.umd.min.js.map +1 -1
  77. package/bundles/primeng-sidebar.umd.js.map +1 -1
  78. package/bundles/primeng-sidebar.umd.min.js.map +1 -1
  79. package/bundles/primeng-slider.umd.js +1 -0
  80. package/bundles/primeng-slider.umd.js.map +1 -1
  81. package/bundles/primeng-slider.umd.min.js +1 -1
  82. package/bundles/primeng-slider.umd.min.js.map +1 -1
  83. package/bundles/primeng-table.umd.js +117 -16
  84. package/bundles/primeng-table.umd.js.map +1 -1
  85. package/bundles/primeng-table.umd.min.js +1 -1
  86. package/bundles/primeng-table.umd.min.js.map +1 -1
  87. package/bundles/primeng-tabview.umd.js +25 -3
  88. package/bundles/primeng-tabview.umd.js.map +1 -1
  89. package/bundles/primeng-tabview.umd.min.js +1 -1
  90. package/bundles/primeng-tabview.umd.min.js.map +1 -1
  91. package/bundles/primeng-treetable.umd.js +1 -1
  92. package/bundles/primeng-treetable.umd.js.map +1 -1
  93. package/bundles/primeng-treetable.umd.min.js +1 -1
  94. package/bundles/primeng-treetable.umd.min.js.map +1 -1
  95. package/bundles/primeng-virtualscroller.umd.js +3 -2
  96. package/bundles/primeng-virtualscroller.umd.js.map +1 -1
  97. package/bundles/primeng-virtualscroller.umd.min.js +1 -1
  98. package/bundles/primeng-virtualscroller.umd.min.js.map +1 -1
  99. package/calendar/primeng-calendar.metadata.json +1 -1
  100. package/cascadeselect/cascadeselect.d.ts +3 -3
  101. package/cascadeselect/primeng-cascadeselect.metadata.json +1 -1
  102. package/colorpicker/colorpicker.d.ts +1 -1
  103. package/confirmdialog/confirmdialog.d.ts +3 -2
  104. package/confirmdialog/primeng-confirmdialog.metadata.json +1 -1
  105. package/dialog/primeng-dialog.metadata.json +1 -1
  106. package/dom/primeng-dom.metadata.json +1 -1
  107. package/dropdown/primeng-dropdown.metadata.json +1 -1
  108. package/dynamicdialog/primeng-dynamicdialog.metadata.json +1 -1
  109. package/esm2015/api/confirmaeventtype.js +7 -0
  110. package/esm2015/api/filtermatchmode.js +5 -1
  111. package/esm2015/api/filterservice.js +39 -3
  112. package/esm2015/api/primengconfig.js +9 -5
  113. package/esm2015/api/public_api.js +2 -1
  114. package/esm2015/api/translation.js +1 -1
  115. package/esm2015/autocomplete/autocomplete.js +105 -22
  116. package/esm2015/avatar/avatar.js +1 -1
  117. package/esm2015/calendar/calendar.js +7 -1
  118. package/esm2015/cascadeselect/cascadeselect.js +9 -6
  119. package/esm2015/colorpicker/colorpicker.js +1 -1
  120. package/esm2015/confirmdialog/confirmdialog.js +14 -11
  121. package/esm2015/contextmenu/contextmenu.js +3 -3
  122. package/esm2015/dialog/dialog.js +1 -1
  123. package/esm2015/dom/domhandler.js +4 -1
  124. package/esm2015/dropdown/dropdown.js +2 -2
  125. package/esm2015/dynamicdialog/dynamicdialog.js +1 -1
  126. package/esm2015/inputmask/inputmask.js +6 -3
  127. package/esm2015/inputnumber/inputnumber.js +13 -3
  128. package/esm2015/knob/knob.js +2 -2
  129. package/esm2015/lightbox/lightbox.js +1 -1
  130. package/esm2015/listbox/listbox.js +134 -42
  131. package/esm2015/multiselect/multiselect.js +149 -42
  132. package/esm2015/sidebar/sidebar.js +1 -1
  133. package/esm2015/slider/slider.js +2 -1
  134. package/esm2015/table/table.js +127 -17
  135. package/esm2015/tabview/tabview.js +18 -4
  136. package/esm2015/treetable/treetable.js +2 -2
  137. package/esm2015/virtualscroller/virtualscroller.js +4 -3
  138. package/fesm2015/primeng-api.js +58 -7
  139. package/fesm2015/primeng-api.js.map +1 -1
  140. package/fesm2015/primeng-autocomplete.js +104 -21
  141. package/fesm2015/primeng-autocomplete.js.map +1 -1
  142. package/fesm2015/primeng-avatar.js +1 -1
  143. package/fesm2015/primeng-calendar.js +6 -0
  144. package/fesm2015/primeng-calendar.js.map +1 -1
  145. package/fesm2015/primeng-cascadeselect.js +8 -5
  146. package/fesm2015/primeng-cascadeselect.js.map +1 -1
  147. package/fesm2015/primeng-colorpicker.js.map +1 -1
  148. package/fesm2015/primeng-confirmdialog.js +13 -10
  149. package/fesm2015/primeng-confirmdialog.js.map +1 -1
  150. package/fesm2015/primeng-contextmenu.js +2 -2
  151. package/fesm2015/primeng-contextmenu.js.map +1 -1
  152. package/fesm2015/primeng-dialog.js +1 -1
  153. package/fesm2015/primeng-dom.js +3 -0
  154. package/fesm2015/primeng-dom.js.map +1 -1
  155. package/fesm2015/primeng-dropdown.js +1 -1
  156. package/fesm2015/primeng-dropdown.js.map +1 -1
  157. package/fesm2015/primeng-dynamicdialog.js +1 -1
  158. package/fesm2015/primeng-inputmask.js +5 -2
  159. package/fesm2015/primeng-inputmask.js.map +1 -1
  160. package/fesm2015/primeng-inputnumber.js +12 -2
  161. package/fesm2015/primeng-inputnumber.js.map +1 -1
  162. package/fesm2015/primeng-knob.js +1 -1
  163. package/fesm2015/primeng-knob.js.map +1 -1
  164. package/fesm2015/primeng-lightbox.js +1 -1
  165. package/fesm2015/primeng-listbox.js +133 -41
  166. package/fesm2015/primeng-listbox.js.map +1 -1
  167. package/fesm2015/primeng-multiselect.js +148 -41
  168. package/fesm2015/primeng-multiselect.js.map +1 -1
  169. package/fesm2015/primeng-sidebar.js.map +1 -1
  170. package/fesm2015/primeng-slider.js +1 -0
  171. package/fesm2015/primeng-slider.js.map +1 -1
  172. package/fesm2015/primeng-table.js +126 -16
  173. package/fesm2015/primeng-table.js.map +1 -1
  174. package/fesm2015/primeng-tabview.js +17 -3
  175. package/fesm2015/primeng-tabview.js.map +1 -1
  176. package/fesm2015/primeng-treetable.js +1 -1
  177. package/fesm2015/primeng-treetable.js.map +1 -1
  178. package/fesm2015/primeng-virtualscroller.js +3 -2
  179. package/fesm2015/primeng-virtualscroller.js.map +1 -1
  180. package/inputmask/inputmask.d.ts +2 -1
  181. package/inputmask/primeng-inputmask.metadata.json +1 -1
  182. package/inputnumber/inputnumber.d.ts +3 -1
  183. package/inputnumber/primeng-inputnumber.metadata.json +1 -1
  184. package/knob/primeng-knob.metadata.json +1 -1
  185. package/lightbox/primeng-lightbox.metadata.json +1 -1
  186. package/listbox/listbox.d.ts +7 -1
  187. package/listbox/primeng-listbox.metadata.json +1 -1
  188. package/multiselect/multiselect.d.ts +8 -1
  189. package/multiselect/primeng-multiselect.metadata.json +1 -1
  190. package/package.json +1 -1
  191. package/resources/components/avatar/avatar.css +3 -2
  192. package/resources/components/dialog/dialog.css +2 -0
  193. package/resources/components/virtualscroller/virtualscroller.css +2 -16
  194. package/resources/themes/arya-blue/theme.css +26 -38
  195. package/resources/themes/arya-green/theme.css +26 -38
  196. package/resources/themes/arya-orange/theme.css +26 -38
  197. package/resources/themes/arya-purple/theme.css +26 -38
  198. package/resources/themes/bootstrap4-dark-blue/theme.css +26 -38
  199. package/resources/themes/bootstrap4-dark-purple/theme.css +26 -38
  200. package/resources/themes/bootstrap4-light-blue/theme.css +26 -38
  201. package/resources/themes/bootstrap4-light-purple/theme.css +26 -38
  202. package/resources/themes/fluent-light/theme.css +26 -38
  203. package/resources/themes/luna-amber/theme.css +26 -38
  204. package/resources/themes/luna-blue/theme.css +26 -38
  205. package/resources/themes/luna-green/theme.css +26 -38
  206. package/resources/themes/luna-pink/theme.css +26 -38
  207. package/resources/themes/md-dark-deeppurple/theme.css +89 -69
  208. package/resources/themes/md-dark-indigo/theme.css +89 -69
  209. package/resources/themes/md-light-deeppurple/theme.css +293 -273
  210. package/resources/themes/md-light-indigo/theme.css +293 -273
  211. package/resources/themes/mdc-dark-deeppurple/theme.css +89 -69
  212. package/resources/themes/mdc-dark-indigo/theme.css +89 -69
  213. package/resources/themes/mdc-light-deeppurple/theme.css +293 -273
  214. package/resources/themes/mdc-light-indigo/theme.css +293 -273
  215. package/resources/themes/nova/theme.css +26 -38
  216. package/resources/themes/nova-accent/theme.css +26 -38
  217. package/resources/themes/nova-alt/theme.css +26 -38
  218. package/resources/themes/rhea/theme.css +26 -38
  219. package/resources/themes/saga-blue/theme.css +26 -38
  220. package/resources/themes/saga-green/theme.css +26 -38
  221. package/resources/themes/saga-orange/theme.css +26 -38
  222. package/resources/themes/saga-purple/theme.css +26 -38
  223. package/resources/themes/vela-blue/theme.css +26 -38
  224. package/resources/themes/vela-green/theme.css +26 -38
  225. package/resources/themes/vela-orange/theme.css +26 -38
  226. package/resources/themes/vela-purple/theme.css +26 -38
  227. package/sidebar/sidebar.d.ts +1 -1
  228. package/slider/primeng-slider.metadata.json +1 -1
  229. package/table/primeng-table.metadata.json +1 -1
  230. package/table/table.d.ts +12 -0
  231. package/tabview/primeng-tabview.metadata.json +1 -1
  232. package/tabview/tabview.d.ts +6 -2
  233. package/treetable/primeng-treetable.metadata.json +1 -1
  234. package/virtualscroller/primeng-virtualscroller.metadata.json +1 -1
@@ -121,7 +121,7 @@ class MultiSelect {
121
121
  }
122
122
  set filterValue(val) {
123
123
  this._filterValue = val;
124
- this.filterOptions();
124
+ this.activateFilter();
125
125
  }
126
126
  ngOnInit() {
127
127
  this.updateLabel();
@@ -132,6 +132,9 @@ class MultiSelect {
132
132
  case 'item':
133
133
  this.itemTemplate = item.template;
134
134
  break;
135
+ case 'group':
136
+ this.groupTemplate = item.template;
137
+ break;
135
138
  case 'selectedItems':
136
139
  this.selectedItemsTemplate = item.template;
137
140
  break;
@@ -164,6 +167,12 @@ class MultiSelect {
164
167
  getOptionValue(option) {
165
168
  return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel ? option : option.value);
166
169
  }
170
+ getOptionGroupLabel(optionGroup) {
171
+ return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);
172
+ }
173
+ getOptionGroupChildren(optionGroup) {
174
+ return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;
175
+ }
167
176
  isOptionDisabled(option) {
168
177
  let disabled = this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);
169
178
  return (disabled || (this.maxSelectionLimitReached && !this.isSelected(option)));
@@ -267,9 +276,21 @@ class MultiSelect {
267
276
  let optionsToRender = this.optionsToRender;
268
277
  let val = [];
269
278
  optionsToRender.forEach(opt => {
270
- let optionDisabled = this.isOptionDisabled(opt);
271
- if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {
272
- val.push(this.getOptionValue(opt));
279
+ if (!this.group) {
280
+ let optionDisabled = this.isOptionDisabled(opt);
281
+ if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {
282
+ val.push(this.getOptionValue(opt));
283
+ }
284
+ }
285
+ else {
286
+ if (opt.items) {
287
+ opt.items.forEach(option => {
288
+ let optionDisabled = this.isOptionDisabled(option);
289
+ if (!optionDisabled || (optionDisabled && this.isSelected(option))) {
290
+ val.push(this.getOptionValue(option));
291
+ }
292
+ });
293
+ }
273
294
  }
274
295
  });
275
296
  this.value = val;
@@ -278,9 +299,21 @@ class MultiSelect {
278
299
  let optionsToRender = this.optionsToRender;
279
300
  let val = [];
280
301
  optionsToRender.forEach(opt => {
281
- let optionDisabled = this.isOptionDisabled(opt);
282
- if (optionDisabled && this.isSelected(opt)) {
283
- val.push(this.getOptionValue(opt));
302
+ if (!this.group) {
303
+ let optionDisabled = this.isOptionDisabled(opt);
304
+ if (optionDisabled && this.isSelected(opt)) {
305
+ val.push(this.getOptionValue(opt));
306
+ }
307
+ }
308
+ else {
309
+ if (opt.items) {
310
+ opt.items.forEach(option => {
311
+ let optionDisabled = this.isOptionDisabled(option);
312
+ if (optionDisabled && this.isSelected(option)) {
313
+ val.push(this.getOptionValue(option));
314
+ }
315
+ });
316
+ }
284
317
  }
285
318
  });
286
319
  this.value = val;
@@ -427,14 +460,14 @@ class MultiSelect {
427
460
  findNextItem(item) {
428
461
  let nextItem = item.nextElementSibling;
429
462
  if (nextItem)
430
- return DomHandler.hasClass(nextItem.children[0], 'p-disabled') || DomHandler.isHidden(nextItem.children[0]) ? this.findNextItem(nextItem) : nextItem.children[0];
463
+ return DomHandler.hasClass(nextItem.children[0], 'p-disabled') || DomHandler.isHidden(nextItem.children[0]) || DomHandler.hasClass(nextItem, 'p-multiselect-item-group') ? this.findNextItem(nextItem) : nextItem.children[0];
431
464
  else
432
465
  return null;
433
466
  }
434
467
  findPrevItem(item) {
435
468
  let prevItem = item.previousElementSibling;
436
469
  if (prevItem)
437
- return DomHandler.hasClass(prevItem.children[0], 'p-disabled') || DomHandler.isHidden(prevItem.children[0]) ? this.findPrevItem(prevItem) : prevItem.children[0];
470
+ return DomHandler.hasClass(prevItem.children[0], 'p-disabled') || DomHandler.isHidden(prevItem.children[0]) || DomHandler.hasClass(prevItem, 'p-multiselect-item-group') ? this.findPrevItem(prevItem) : prevItem.children[0];
438
471
  else
439
472
  return null;
440
473
  }
@@ -490,9 +523,26 @@ class MultiSelect {
490
523
  }
491
524
  }
492
525
  findLabelByValue(val) {
526
+ if (this.group) {
527
+ let label = null;
528
+ for (let i = 0; i < this.options.length; i++) {
529
+ if (this.options[i].items) {
530
+ label = this.searchLabelByValue(val, this.options[i].items);
531
+ if (label) {
532
+ break;
533
+ }
534
+ }
535
+ }
536
+ return label;
537
+ }
538
+ else {
539
+ return this.searchLabelByValue(val, this.options);
540
+ }
541
+ }
542
+ searchLabelByValue(val, options) {
493
543
  let label = null;
494
- for (let i = 0; i < this.options.length; i++) {
495
- let option = this.options[i];
544
+ for (let i = 0; i < options.length; i++) {
545
+ let option = options[i];
496
546
  let optionValue = this.getOptionValue(option);
497
547
  if (val == null && optionValue == null || ObjectUtils.equals(val, optionValue, this.dataKey)) {
498
548
  label = this.getOptionLabel(option);
@@ -510,25 +560,48 @@ class MultiSelect {
510
560
  let selectedDisabledItemsLength = 0;
511
561
  let unselectedDisabledItemsLength = 0;
512
562
  let selectedEnabledItemsLength = 0;
563
+ let visibleOptionsLength = this.group ? 0 : this.optionsToRender.length;
513
564
  for (let option of optionsToRender) {
514
- let disabled = this.isOptionDisabled(option);
515
- let selected = this.isSelected(option);
516
- if (disabled) {
517
- if (selected)
518
- selectedDisabledItemsLength++;
519
- else
520
- unselectedDisabledItemsLength++;
565
+ if (!this.group) {
566
+ let disabled = this.isOptionDisabled(option);
567
+ let selected = this.isSelected(option);
568
+ if (disabled) {
569
+ if (selected)
570
+ selectedDisabledItemsLength++;
571
+ else
572
+ unselectedDisabledItemsLength++;
573
+ }
574
+ else {
575
+ if (selected)
576
+ selectedEnabledItemsLength++;
577
+ else
578
+ return false;
579
+ }
521
580
  }
522
- else {
523
- if (selected)
524
- selectedEnabledItemsLength++;
525
- else
526
- return false;
581
+ else if (option.items) {
582
+ for (let opt of option.items) {
583
+ let disabled = this.isOptionDisabled(opt);
584
+ let selected = this.isSelected(opt);
585
+ if (disabled) {
586
+ if (selected)
587
+ selectedDisabledItemsLength++;
588
+ else
589
+ unselectedDisabledItemsLength++;
590
+ }
591
+ else {
592
+ if (selected)
593
+ selectedEnabledItemsLength++;
594
+ else {
595
+ return false;
596
+ }
597
+ }
598
+ visibleOptionsLength++;
599
+ }
527
600
  }
528
601
  }
529
- return (optionsToRender.length === selectedDisabledItemsLength
530
- || optionsToRender.length === selectedEnabledItemsLength
531
- || selectedEnabledItemsLength && optionsToRender.length === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));
602
+ return (visibleOptionsLength === selectedDisabledItemsLength
603
+ || visibleOptionsLength === selectedEnabledItemsLength
604
+ || selectedEnabledItemsLength && visibleOptionsLength === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));
532
605
  }
533
606
  }
534
607
  get optionsToRender() {
@@ -543,12 +616,29 @@ class MultiSelect {
543
616
  }
544
617
  onFilter(event) {
545
618
  this._filterValue = event.target.value;
546
- this.filterOptions();
619
+ this.activateFilter();
547
620
  }
548
- filterOptions() {
621
+ activateFilter() {
549
622
  if (this.hasFilter() && this._options) {
550
623
  let searchFields = (this.filterBy || this.optionLabel || 'label').split(',');
551
- this._filteredOptions = this.filterService.filter(this.options, searchFields, this._filterValue, this.filterMatchMode, this.filterLocale);
624
+ if (this.group) {
625
+ let searchFields = (this.optionLabel || 'label').split(',');
626
+ let filteredGroups = [];
627
+ for (let optgroup of this.options) {
628
+ let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);
629
+ if (filteredSubOptions && filteredSubOptions.length) {
630
+ filteredGroups.push({
631
+ label: optgroup.label,
632
+ value: optgroup.value,
633
+ items: filteredSubOptions
634
+ });
635
+ }
636
+ }
637
+ this._filteredOptions = filteredGroups;
638
+ }
639
+ else {
640
+ this._filteredOptions = this.filterService.filter(this.options, searchFields, this._filterValue, this.filterMatchMode, this.filterLocale);
641
+ }
552
642
  }
553
643
  else {
554
644
  this._filteredOptions = null;
@@ -678,21 +768,35 @@ MultiSelect.decorators = [
678
768
  </div>
679
769
  <div class="p-multiselect-items-wrapper" [style.max-height]="virtualScroll ? 'auto' : (scrollHeight||'auto')">
680
770
  <ul class="p-multiselect-items p-component" role="listbox" aria-multiselectable="true">
681
- <ng-container *ngIf="!virtualScroll; else virtualScrollList">
682
- <ng-template ngFor let-option let-i="index" [ngForOf]="optionsToRender">
683
- <p-multiSelectItem [option]="option" [selected]="isSelected(option)" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)" (onClick)="onOptionClick($event)" (onKeydown)="onOptionKeydown($event)"
684
- [template]="itemTemplate"></p-multiSelectItem>
771
+ <ng-container *ngIf="group">
772
+ <ng-template ngFor let-optgroup [ngForOf]="optionsToRender">
773
+ <li class="p-multiselect-item-group">
774
+ <span *ngIf="!groupTemplate">{{getOptionGroupLabel(optgroup)||'empty'}}</span>
775
+ <ng-container *ngTemplateOutlet="groupTemplate; context: {$implicit: optgroup}"></ng-container>
776
+ </li>
777
+ <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}"></ng-container>
685
778
  </ng-template>
686
779
  </ng-container>
687
- <ng-template #virtualScrollList>
688
- <cdk-virtual-scroll-viewport #viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && !emptyOptions">
689
- <ng-container *cdkVirtualFor="let option of optionsToRender; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
780
+ <ng-container *ngIf="!group">
781
+ <ng-container *ngTemplateOutlet="itemslist; context: {$implicit: optionsToRender}"></ng-container>
782
+ </ng-container>
783
+ <ng-template #itemslist let-optionsToDisplay let-selectedOption="selectedOption">
784
+ <ng-container *ngIf="!virtualScroll; else virtualScrollList">
785
+ <ng-template ngFor let-option let-i="index" [ngForOf]="optionsToDisplay">
690
786
  <p-multiSelectItem [option]="option" [selected]="isSelected(option)" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)" (onClick)="onOptionClick($event)" (onKeydown)="onOptionKeydown($event)"
691
- [template]="itemTemplate" [itemSize]="itemSize"></p-multiSelectItem>
692
- </ng-container>
693
- </cdk-virtual-scroll-viewport>
787
+ [template]="itemTemplate"></p-multiSelectItem>
788
+ </ng-template>
789
+ </ng-container>
790
+ <ng-template #virtualScrollList>
791
+ <cdk-virtual-scroll-viewport #viewport [ngStyle]="{'height': scrollHeight}" [itemSize]="itemSize" *ngIf="virtualScroll && !emptyOptions">
792
+ <ng-container *cdkVirtualFor="let option of optionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd">
793
+ <p-multiSelectItem [option]="option" [selected]="isSelected(option)" [label]="getOptionLabel(option)" [disabled]="isOptionDisabled(option)" (onClick)="onOptionClick($event)" (onKeydown)="onOptionKeydown($event)"
794
+ [template]="itemTemplate" [itemSize]="itemSize"></p-multiSelectItem>
795
+ </ng-container>
796
+ </cdk-virtual-scroll-viewport>
797
+ </ng-template>
798
+ <li *ngIf="emptyOptions" class="p-multiselect-empty-message">{{emptyFilterMessage}}</li>
694
799
  </ng-template>
695
- <li *ngIf="emptyOptions" class="p-multiselect-empty-message">{{emptyFilterMessage}}</li>
696
800
  </ul>
697
801
  </div>
698
802
  <div class="p-multiselect-footer" *ngIf="footerFacet || footerTemplate">
@@ -715,7 +819,7 @@ MultiSelect.decorators = [
715
819
  ],
716
820
  host: {
717
821
  '[class.p-inputwrapper-filled]': 'filled',
718
- '[class.p-inputwrapper-focus]': 'focus'
822
+ '[class.p-inputwrapper-focus]': 'focus || overlayVisible'
719
823
  },
720
824
  providers: [MULTISELECT_VALUE_ACCESSOR],
721
825
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -737,6 +841,7 @@ MultiSelect.propDecorators = {
737
841
  inputId: [{ type: Input }],
738
842
  disabled: [{ type: Input }],
739
843
  readonly: [{ type: Input }],
844
+ group: [{ type: Input }],
740
845
  filter: [{ type: Input }],
741
846
  filterPlaceHolder: [{ type: Input }],
742
847
  filterLocale: [{ type: Input }],
@@ -757,6 +862,8 @@ MultiSelect.propDecorators = {
757
862
  optionLabel: [{ type: Input }],
758
863
  optionValue: [{ type: Input }],
759
864
  optionDisabled: [{ type: Input }],
865
+ optionGroupLabel: [{ type: Input }],
866
+ optionGroupChildren: [{ type: Input }],
760
867
  showHeader: [{ type: Input }],
761
868
  autoZIndex: [{ type: Input }],
762
869
  baseZIndex: [{ type: Input }],
@@ -1 +1 @@
1
- {"version":3,"file":"primeng-multiselect.js","sources":["../../src/app/components/multiselect/multiselect.ts","../../src/app/components/multiselect/primeng-multiselect.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, OnInit, AfterViewInit, AfterContentInit, AfterViewChecked, OnDestroy, Input, Output, Renderer2, EventEmitter,\n forwardRef, ViewChild, ChangeDetectorRef, TemplateRef, ContentChildren, QueryList, ContentChild, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport { trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ObjectUtils } from 'primeng/utils';\nimport { SharedModule, PrimeTemplate, Footer, Header, FilterService } from 'primeng/api';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { RippleModule } from 'primeng/ripple';\n\nexport const MULTISELECT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelect),\n multi: true\n};\n\n@Component({\n selector: 'p-multiSelectItem',\n template: `\n <li class=\"p-multiselect-item\" (click)=\"onOptionClick($event)\" (keydown)=\"onOptionKeydown($event)\" [attr.aria-label]=\"label\" \n [attr.tabindex]=\"disabled ? null : '0'\" [ngStyle]=\"{'height': itemSize + 'px'}\"\n [ngClass]=\"{'p-highlight': selected, 'p-disabled': disabled}\" pRipple>\n <div class=\"p-checkbox p-component\">\n <div class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight': selected}\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check': selected}\"></span>\n </div>\n </div>\n <span *ngIf=\"!template\">{{label}}</span>\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: option}\"></ng-container>\n </li>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class MultiSelectItem {\n\n @Input() option: any;\n\n @Input() selected: boolean;\n\n @Input() label: any;\n\n @Input() disabled: boolean;\n\n @Input() itemSize: number;\n\n @Input() template: TemplateRef<any>;\n\n @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n @Output() onKeydown: EventEmitter<any> = new EventEmitter();\n\n onOptionClick(event: Event) {\n this.onClick.emit({\n originalEvent: event,\n option: this.option\n });\n }\n\n onOptionKeydown(event: Event) {\n this.onKeydown.emit({\n originalEvent: event,\n option: this.option\n });\n }\n}\n\n@Component({\n selector: 'p-multiSelect',\n template: `\n <div #container [ngClass]=\"{'p-multiselect p-component':true,\n 'p-multiselect-open':overlayVisible,\n 'p-multiselect-chip': display === 'chip',\n 'p-focus':focus,\n 'p-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\"\n (click)=\"onMouseclick($event,in)\">\n <div class=\"p-hidden-accessible\">\n <input #in type=\"text\" readonly=\"readonly\" [attr.id]=\"inputId\" [attr.name]=\"name\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\"\n [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" (keydown)=\"onKeydown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\"\n [attr.aria-labelledby]=\"ariaLabelledBy\" role=\"listbox\">\n </div>\n <div class=\"p-multiselect-label-container\" [pTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition\" [positionStyle]=\"tooltipPositionStyle\" [tooltipStyleClass]=\"tooltipStyleClass\">\n <div class=\"p-multiselect-label\" [ngClass]=\"{'p-placeholder': valuesAsString === (defaultLabel || placeholder), 'p-multiselect-label-empty': ((valuesAsString == null || valuesAsString.length === 0) && (placeholder == null || placeholder.length === 0))}\">\n <ng-container *ngIf=\"!selectedItemsTemplate\">\n <ng-container *ngIf=\"display === 'comma'\">{{valuesAsString || 'empty'}}</ng-container>\n <ng-container *ngIf=\"display === 'chip'\">\n <div #token *ngFor=\"let item of value; let i = index;\" class=\"p-multiselect-token\">\n <span class=\"p-multiselect-token-label\">{{findLabelByValue(item)}}</span>\n <span *ngIf=\"!disabled\" class=\"p-multiselect-token-icon pi pi-times-circle\" (click)=\"removeChip(item, $event)\"></span>\n </div>\n <ng-container *ngIf=\"!value || value.length === 0\">{{placeholder || defaultLabel || 'empty'}}</ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"selectedItemsTemplate; context: {$implicit: value}\"></ng-container>\n </div>\n </div>\n <div [ngClass]=\"{'p-multiselect-trigger':true}\">\n <span class=\"p-multiselect-trigger-icon\" [ngClass]=\"dropdownIcon\"></span>\n </div>\n <div *ngIf=\"overlayVisible\" [ngClass]=\"['p-multiselect-panel p-component']\" [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\n [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\" (keydown)=\"onKeydown($event)\">\n <div class=\"p-multiselect-header\" *ngIf=\"showHeader\">\n <ng-content select=\"p-header\"></ng-content>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <div class=\"p-checkbox p-component\" *ngIf=\"showToggleAll && !selectionLimit\" [ngClass]=\"{'p-checkbox-disabled': disabled || toggleAllDisabled}\">\n <div class=\"p-hidden-accessible\">\n <input type=\"checkbox\" readonly=\"readonly\" [checked]=\"allChecked\" (focus)=\"onHeaderCheckboxFocus()\" (blur)=\"onHeaderCheckboxBlur()\" (keydown.space)=\"toggleAll($event)\" [attr.disabled]=\"disabled || toggleAllDisabled\">\n </div>\n <div class=\"p-checkbox-box\" role=\"checkbox\" [attr.aria-checked]=\"allChecked\" [ngClass]=\"{'p-highlight':allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}\" (click)=\"toggleAll($event)\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':allChecked}\"></span>\n </div>\n </div>\n <div class=\"p-multiselect-filter-container\" *ngIf=\"filter\">\n <input #filterInput type=\"text\" role=\"textbox\" [value]=\"filterValue||''\" (input)=\"onFilter($event)\" class=\"p-multiselect-filter p-inputtext p-component\" [disabled]=\"disabled\" [attr.placeholder]=\"filterPlaceHolder\" [attr.aria-label]=\"ariaFilterLabel\">\n <span class=\"p-multiselect-filter-icon pi pi-search\"></span>\n </div>\n <button class=\"p-multiselect-close p-link\" type=\"button\" (click)=\"close($event)\" pRipple>\n <span class=\"p-multiselect-close-icon pi pi-times\"></span>\n </button>\n </div>\n <div class=\"p-multiselect-items-wrapper\" [style.max-height]=\"virtualScroll ? 'auto' : (scrollHeight||'auto')\">\n <ul class=\"p-multiselect-items p-component\" role=\"listbox\" aria-multiselectable=\"true\">\n <ng-container *ngIf=\"!virtualScroll; else virtualScrollList\">\n <ng-template ngFor let-option let-i=\"index\" [ngForOf]=\"optionsToRender\">\n <p-multiSelectItem [option]=\"option\" [selected]=\"isSelected(option)\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\" (onClick)=\"onOptionClick($event)\" (onKeydown)=\"onOptionKeydown($event)\"\n [template]=\"itemTemplate\"></p-multiSelectItem>\n </ng-template>\n </ng-container>\n <ng-template #virtualScrollList>\n <cdk-virtual-scroll-viewport #viewport [ngStyle]=\"{'height': scrollHeight}\" [itemSize]=\"itemSize\" *ngIf=\"virtualScroll && !emptyOptions\">\n <ng-container *cdkVirtualFor=\"let option of optionsToRender; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd\">\n <p-multiSelectItem [option]=\"option\" [selected]=\"isSelected(option)\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\" (onClick)=\"onOptionClick($event)\" (onKeydown)=\"onOptionKeydown($event)\"\n [template]=\"itemTemplate\" [itemSize]=\"itemSize\"></p-multiSelectItem>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </ng-template>\n <li *ngIf=\"emptyOptions\" class=\"p-multiselect-empty-message\">{{emptyFilterMessage}}</li>\n </ul>\n </div>\n <div class=\"p-multiselect-footer\" *ngIf=\"footerFacet || footerTemplate\">\n <ng-content select=\"p-footer\"></ng-content>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n </div>\n </div>\n `,\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({opacity: 0, transform: 'scaleY(0.8)'}),\n animate('{{showTransitionParams}}')\n ]),\n transition(':leave', [\n animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n ])\n ])\n ],\n host: {\n '[class.p-inputwrapper-filled]': 'filled',\n '[class.p-inputwrapper-focus]': 'focus'\n },\n providers: [MULTISELECT_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./multiselect.css']\n})\nexport class MultiSelect implements OnInit,AfterViewInit,AfterContentInit,AfterViewChecked,OnDestroy,ControlValueAccessor {\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() panelStyle: any;\n\n @Input() panelStyleClass: string;\n\n @Input() inputId: string;\n\n @Input() disabled: boolean;\n\n @Input() readonly: boolean;\n\n @Input() filter: boolean = true;\n\n @Input() filterPlaceHolder: string;\n\n @Input() filterLocale: string;\n\n @Input() overlayVisible: boolean;\n\n @Input() tabindex: number;\n\n @Input() appendTo: any;\n\n @Input() dataKey: string;\n\n @Input() name: string;\n\n @Input() ariaLabelledBy: string;\n\n @Input() displaySelectedLabel: boolean = true;\n\n @Input() maxSelectedLabels: number = 3;\n\n @Input() selectionLimit: number;\n\n @Input() selectedItemsLabel: string = '{0} items selected';\n\n @Input() showToggleAll: boolean = true;\n\n @Input() emptyFilterMessage: string = 'No results found';\n\n @Input() resetFilterOnHide: boolean = false;\n\n @Input() dropdownIcon: string = 'pi pi-chevron-down';\n\n @Input() optionLabel: string;\n\n @Input() optionValue: string;\n\n @Input() optionDisabled: string;\n\n @Input() showHeader: boolean = true;\n\n @Input() autoZIndex: boolean = true;\n\n @Input() baseZIndex: number = 0;\n\n @Input() filterBy: string;\n\n @Input() virtualScroll: boolean;\n\n @Input() itemSize: number;\n\n @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n @Input() hideTransitionOptions: string = '.1s linear';\n\n @Input() ariaFilterLabel: string;\n\n @Input() filterMatchMode: string = \"contains\";\n\n @Input() tooltip: string = '';\n\n @Input() tooltipPosition: string = 'right';\n\n @Input() tooltipPositionStyle: string = 'absolute';\n\n @Input() tooltipStyleClass: string;\n\n @Input() autofocusFilter: boolean = true;\n\n @Input() display: string = 'comma';\n\n @ViewChild('container') containerViewChild: ElementRef;\n\n @ViewChild('filterInput') filterInputChild: ElementRef;\n\n @ViewChild('in') accessibleViewChild: ElementRef;\n\n @ContentChild(Footer) footerFacet;\n\n @ContentChild(Header) headerFacet;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n @Output() onPanelShow: EventEmitter<any> = new EventEmitter();\n\n @Output() onPanelHide: EventEmitter<any> = new EventEmitter();\n\n @Input() scrollHeight: string = '200px';\n\n _defaultLabel: string;\n\n @Input() set defaultLabel(val: string) {\n this._defaultLabel = val;\n this.updateLabel();\n }\n\n get defaultLabel(): string {\n return this._defaultLabel;\n }\n\n _placeholder: string;\n\n @Input() set placeholder(val: string) {\n this._placeholder = val;\n this.updateLabel();\n }\n\n get placeholder(): string {\n return this._placeholder;\n }\n\n @Input() get options(): any[] {\n return this._options;\n }\n\n set options(val: any[]) {\n this._options = val;\n }\n\n @Input() get filterValue(): string {\n return this._filterValue;\n }\n\n set filterValue(val: string) {\n this._filterValue = val;\n this.filterOptions();\n }\n\n public value: any[];\n\n public _filteredOptions: any[];\n\n public onModelChange: Function = () => {};\n\n public onModelTouched: Function = () => {};\n\n overlay: HTMLDivElement;\n\n public valuesAsString: string;\n\n public focus: boolean;\n\n filled: boolean;\n\n public documentClickListener: any;\n\n public _filterValue: string;\n\n public filtered: boolean;\n\n public itemTemplate: TemplateRef<any>;\n\n public headerTemplate: TemplateRef<any>;\n\n public footerTemplate: TemplateRef<any>;\n\n public selectedItemsTemplate: TemplateRef<any>;\n\n public headerCheckboxFocus: boolean;\n\n _options: any[];\n\n maxSelectionLimitReached: boolean;\n\n scrollHandler: any;\n\n documentResizeListener: any;\n\n preventModelTouched: boolean;\n\n constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public filterService: FilterService) {}\n\n ngOnInit() {\n this.updateLabel();\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch(item.getType()) {\n case 'item':\n this.itemTemplate = item.template;\n break;\n\n case 'selectedItems':\n this.selectedItemsTemplate = item.template;\n break;\n\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n default:\n this.itemTemplate = item.template;\n break;\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.overlayVisible) {\n this.show();\n }\n }\n\n ngAfterViewChecked() {\n if (this.filtered) {\n this.alignOverlay();\n\n this.filtered = false;\n }\n }\n\n getOptionLabel(option: any) {\n return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);\n }\n\n getOptionValue(option: any) {\n return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel ? option : option.value);\n }\n\n isOptionDisabled(option: any) {\n let disabled = this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n return (disabled || (this.maxSelectionLimitReached && !this.isSelected(option)));\n }\n\n writeValue(value: any) : void {\n this.value = value;\n this.updateLabel();\n this.updateFilledState();\n this.checkSelectionLimit();\n\n this.cd.markForCheck();\n }\n\n checkSelectionLimit() {\n if (this.selectionLimit && (this.value && this.value.length === this.selectionLimit)) {\n this.maxSelectionLimitReached = true;\n }\n else {\n this.maxSelectionLimitReached = false;\n }\n }\n\n updateFilledState() {\n this.filled = (this.value && this.value.length > 0);\n }\n\n registerOnChange(fn: Function): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onModelTouched = fn;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this.cd.markForCheck();\n }\n\n onOptionClick(event) {\n let option = event.option;\n if (this.isOptionDisabled(option)) {\n return;\n }\n\n let optionValue = this.getOptionValue(option);\n let selectionIndex = this.findSelectionIndex(optionValue);\n if (selectionIndex != -1) {\n this.value = this.value.filter((val,i) => i != selectionIndex);\n\n if (this.selectionLimit) {\n this.maxSelectionLimitReached = false;\n }\n }\n else {\n if (!this.selectionLimit || (!this.value || this.value.length < this.selectionLimit)) {\n this.value = [...this.value || [], optionValue];\n }\n\n this.checkSelectionLimit();\n }\n\n this.onModelChange(this.value);\n this.onChange.emit({originalEvent: event.originalEvent, value: this.value, itemValue: optionValue});\n this.updateLabel();\n this.updateFilledState();\n }\n\n isSelected(option) {\n return this.findSelectionIndex(this.getOptionValue(option)) != -1;\n }\n\n findSelectionIndex(val: any): number {\n let index = -1;\n\n if (this.value) {\n for (let i = 0; i < this.value.length; i++) {\n if (ObjectUtils.equals(this.value[i], val, this.dataKey)) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n get toggleAllDisabled(): boolean {\n let optionsToRender = this.optionsToRender;\n if (!optionsToRender || optionsToRender.length === 0) {\n return true;\n }\n else {\n for (let option of optionsToRender) {\n if (!this.isOptionDisabled(option))\n return false;\n }\n\n return true;\n }\n }\n\n toggleAll(event) {\n if (this.disabled || this.toggleAllDisabled || this.readonly) {\n return;\n }\n \n let allChecked = this.allChecked; \n\n if (allChecked)\n this.uncheckAll();\n else\n this.checkAll();\n\n this.onModelChange(this.value);\n this.onChange.emit({ originalEvent: event, value: this.value }); \n this.updateFilledState();\n this.updateLabel();\n event.preventDefault();\n }\n\n checkAll() {\n let optionsToRender = this.optionsToRender;\n let val: any[] = [];\n\n optionsToRender.forEach(opt => {\n let optionDisabled = this.isOptionDisabled(opt); \n if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {\n val.push(this.getOptionValue(opt));\n }\n });\n\n this.value = val;\n }\n\n uncheckAll() {\n let optionsToRender = this.optionsToRender;\n let val: any[] = [];\n\n optionsToRender.forEach(opt => {\n let optionDisabled = this.isOptionDisabled(opt); \n if (optionDisabled && this.isSelected(opt)) {\n val.push(this.getOptionValue(opt));\n }\n });\n\n this.value = val;\n }\n\n show() {\n if (!this.overlayVisible){\n this.overlayVisible = true;\n }\n }\n\n onOverlayAnimationStart(event: AnimationEvent) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n this.appendOverlay();\n if (this.autoZIndex) {\n this.overlay.style.zIndex = String(this.baseZIndex + (++DomHandler.zindex));\n }\n this.alignOverlay();\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n\n if (this.filterInputChild && this.filterInputChild.nativeElement) {\n this.preventModelTouched = true;\n\n if (this.autofocusFilter) {\n this.filterInputChild.nativeElement.focus();\n }\n }\n\n this.onPanelShow.emit();\n break;\n\n case 'void':\n this.onOverlayHide();\n break;\n }\n }\n\n appendOverlay() {\n if (this.appendTo) {\n if (this.appendTo === 'body')\n document.body.appendChild(this.overlay);\n else\n DomHandler.appendChild(this.overlay, this.appendTo);\n\n if (!this.overlay.style.minWidth) {\n this.overlay.style.minWidth = DomHandler.getWidth(this.containerViewChild.nativeElement) + 'px';\n }\n }\n }\n\n restoreOverlayAppend() {\n if (this.overlay && this.appendTo) {\n this.el.nativeElement.appendChild(this.overlay);\n }\n }\n\n alignOverlay() {\n if (this.overlay) {\n if (this.appendTo)\n DomHandler.absolutePosition(this.overlay, this.containerViewChild.nativeElement);\n else\n DomHandler.relativePosition(this.overlay, this.containerViewChild.nativeElement);\n }\n }\n\n hide() {\n this.overlayVisible = false;\n this.unbindDocumentClickListener();\n if (this.resetFilterOnHide){\n this.filterInputChild.nativeElement.value = '';\n this._filterValue = null;\n this._filteredOptions = null;\n }\n this.onPanelHide.emit();\n this.cd.markForCheck();\n }\n\n close(event) {\n this.hide();\n event.preventDefault();\n event.stopPropagation();\n }\n\n onMouseclick(event: MouseEvent, input) {\n if (this.disabled || this.readonly || (<Node> event.target).isSameNode(this.accessibleViewChild.nativeElement)) {\n return;\n }\n\n this.onClick.emit(event);\n\n if (!this.isOverlayClick(event) && !DomHandler.hasClass(event.target, 'p-multiselect-token-icon')) {\n if (this.overlayVisible) {\n this.hide();\n }\n else {\n input.focus();\n this.show();\n }\n }\n }\n\n removeChip(chip: any, event: MouseEvent) {\n this.value = this.value.filter(val => !ObjectUtils.equals(val, chip, this.dataKey));\n this.onModelChange(this.value);\n this.onChange.emit({ originalEvent: event, value: this.value });\n this.updateLabel();\n this.updateFilledState();\n }\n\n isOverlayClick(event: MouseEvent) {\n let targetNode = <Node> event.target;\n return this.overlay ? (this.overlay.isSameNode(targetNode) || this.overlay.contains(targetNode)) : false;\n }\n\n isOutsideClicked(event: MouseEvent): boolean {\n return !(this.el.nativeElement.isSameNode(event.target) || this.el.nativeElement.contains(event.target) || this.isOverlayClick(event));\n }\n\n onInputFocus(event) {\n this.focus = true;\n this.onFocus.emit({originalEvent: event});\n }\n\n onInputBlur(event) {\n this.focus = false;\n this.onBlur.emit({originalEvent: event});\n\n if (!this.preventModelTouched) {\n this.onModelTouched();\n }\n this.preventModelTouched = false;\n }\n\n onOptionKeydown(event) {\n if (this.readonly) {\n return;\n }\n\n switch(event.originalEvent.which) {\n\n //down\n case 40:\n var nextItem = this.findNextItem(event.originalEvent.target.parentElement);\n if (nextItem) {\n nextItem.focus();\n }\n\n event.originalEvent.preventDefault();\n break;\n\n //up\n case 38:\n var prevItem = this.findPrevItem(event.originalEvent.target.parentElement);\n if (prevItem) {\n prevItem.focus();\n }\n\n event.originalEvent.preventDefault();\n break;\n\n //enter\n case 13:\n this.onOptionClick(event);\n event.originalEvent.preventDefault();\n break;\n }\n }\n\n findNextItem(item) {\n let nextItem = item.nextElementSibling;\n\n if (nextItem)\n return DomHandler.hasClass(nextItem.children[0], 'p-disabled') || DomHandler.isHidden(nextItem.children[0]) ? this.findNextItem(nextItem) : nextItem.children[0];\n else\n return null;\n }\n\n findPrevItem(item) {\n let prevItem = item.previousElementSibling;\n\n if (prevItem)\n return DomHandler.hasClass(prevItem.children[0], 'p-disabled') || DomHandler.isHidden(prevItem.children[0]) ? this.findPrevItem(prevItem) : prevItem.children[0];\n else\n return null;\n }\n\n onKeydown(event: KeyboardEvent){\n switch(event.which) {\n //down\n case 40:\n if (!this.overlayVisible && event.altKey) {\n this.show();\n event.preventDefault();\n }\n break;\n\n //space\n case 32:\n if (!this.overlayVisible){\n this.show();\n event.preventDefault();\n }\n break;\n\n //escape\n case 27:\n this.hide();\n break;\n }\n }\n\n updateLabel() {\n if (this.value && this.options && this.value.length && this.displaySelectedLabel) {\n let label = '';\n for (let i = 0; i < this.value.length; i++) {\n let itemLabel = this.findLabelByValue(this.value[i]);\n if (itemLabel) {\n if (label.length > 0) {\n label = label + ', ';\n }\n label = label + itemLabel;\n }\n }\n\n if (this.value.length <= this.maxSelectedLabels) {\n this.valuesAsString = label;\n }\n else {\n let pattern = /{(.*?)}/;\n if (pattern.test(this.selectedItemsLabel)) {\n this.valuesAsString = this.selectedItemsLabel.replace(this.selectedItemsLabel.match(pattern)[0], this.value.length + '');\n } else {\n this.valuesAsString = this.selectedItemsLabel;\n }\n }\n }\n else {\n this.valuesAsString = this.placeholder || this.defaultLabel;\n }\n }\n\n findLabelByValue(val: any): string {\n let label = null;\n for (let i = 0; i < this.options.length; i++) {\n let option = this.options[i];\n let optionValue = this.getOptionValue(option);\n\n if (val == null && optionValue == null || ObjectUtils.equals(val, optionValue, this.dataKey)) {\n label = this.getOptionLabel(option);\n break;\n }\n }\n return label;\n }\n\n get allChecked(): boolean {\n let optionsToRender = this.optionsToRender;\n if (!optionsToRender || optionsToRender.length === 0) {\n return false;\n }\n else {\n let selectedDisabledItemsLength = 0;\n let unselectedDisabledItemsLength = 0;\n let selectedEnabledItemsLength = 0;\n\n for (let option of optionsToRender) {\n let disabled = this.isOptionDisabled(option);\n let selected = this.isSelected(option);\n\n if (disabled) {\n if (selected)\n selectedDisabledItemsLength++;\n else \n unselectedDisabledItemsLength++;\n }\n else {\n if (selected)\n selectedEnabledItemsLength++;\n else\n return false;\n }\n }\n\n return (optionsToRender.length === selectedDisabledItemsLength \n || optionsToRender.length === selectedEnabledItemsLength \n || selectedEnabledItemsLength && optionsToRender.length === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));\n }\n }\n\n get optionsToRender(): any[] {\n return this._filteredOptions || this.options;\n }\n\n get emptyOptions(): boolean {\n let optionsToRender = this.optionsToRender;\n return !optionsToRender || optionsToRender.length === 0;\n }\n\n hasFilter() {\n return this._filterValue && this._filterValue.trim().length > 0; \n }\n\n onFilter(event: KeyboardEvent) {\n this._filterValue = (<HTMLInputElement> event.target).value;\n this.filterOptions();\n }\n\n filterOptions() {\n if (this.hasFilter() && this._options) {\n let searchFields: string[] = (this.filterBy || this.optionLabel || 'label').split(',');\n this._filteredOptions = this.filterService.filter(this.options, searchFields, this._filterValue, this.filterMatchMode, this.filterLocale); \n }\n else {\n this._filteredOptions = null;\n }\n }\n\n onHeaderCheckboxFocus() {\n this.headerCheckboxFocus = true;\n }\n\n onHeaderCheckboxBlur() {\n this.headerCheckboxFocus = false;\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n if (this.isOutsideClicked(event)) {\n this.hide();\n }\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n\n bindDocumentResizeListener() {\n this.documentResizeListener = this.onWindowResize.bind(this);\n window.addEventListener('resize', this.documentResizeListener);\n }\n\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n\n onWindowResize() {\n if (!DomHandler.isAndroid()) {\n this.hide();\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n if (this.overlayVisible) {\n this.hide();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n this.onModelTouched();\n }\n\n ngOnDestroy() {\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n\n this.restoreOverlayAppend();\n this.onOverlayHide();\n }\n\n}\n\n@NgModule({\n imports: [CommonModule,SharedModule,ScrollingModule,TooltipModule,RippleModule],\n exports: [MultiSelect,SharedModule,ScrollingModule],\n declarations: [MultiSelect,MultiSelectItem]\n})\nexport class MultiSelectModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;MAYa,0BAA0B,GAAQ;IAC7C,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,WAAW,CAAC;IAC1C,KAAK,EAAE,IAAI;EACX;MAmBW,eAAe;IAjB5B;QA+Bc,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,cAAS,GAAsB,IAAI,YAAY,EAAE,CAAC;KAe/D;IAbG,aAAa,CAAC,KAAY;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;KACN;IAED,eAAe,CAAC,KAAY;QACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAChB,aAAa,EAAE,KAAK;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;KACN;;;YA/CJ,SAAS,SAAC;gBACP,QAAQ,EAAE,mBAAmB;gBAC7B,QAAQ,EAAE;;;;;;;;;;;;KAYT;gBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;aACxC;;;qBAGI,KAAK;uBAEL,KAAK;oBAEL,KAAK;uBAEL,KAAK;uBAEL,KAAK;uBAEL,KAAK;sBAEL,MAAM;wBAEN,MAAM;;MAoHE,WAAW;IAmMpB,YAAmB,EAAc,EAAS,QAAmB,EAAS,EAAqB,EAAS,aAA4B;QAA7G,OAAE,GAAF,EAAE,CAAY;QAAS,aAAQ,GAAR,QAAQ,CAAW;QAAS,OAAE,GAAF,EAAE,CAAmB;QAAS,kBAAa,GAAb,aAAa,CAAe;QAnLvH,WAAM,GAAY,IAAI,CAAC;QAkBvB,yBAAoB,GAAY,IAAI,CAAC;QAErC,sBAAiB,GAAW,CAAC,CAAC;QAI9B,uBAAkB,GAAW,oBAAoB,CAAC;QAElD,kBAAa,GAAY,IAAI,CAAC;QAE9B,uBAAkB,GAAW,kBAAkB,CAAC;QAEhD,sBAAiB,GAAY,KAAK,CAAC;QAEnC,iBAAY,GAAW,oBAAoB,CAAC;QAQ5C,eAAU,GAAY,IAAI,CAAC;QAE3B,eAAU,GAAY,IAAI,CAAC;QAE3B,eAAU,GAAW,CAAC,CAAC;QAQvB,0BAAqB,GAAW,iCAAiC,CAAC;QAElE,0BAAqB,GAAW,YAAY,CAAC;QAI7C,oBAAe,GAAW,UAAU,CAAC;QAErC,YAAO,GAAW,EAAE,CAAC;QAErB,oBAAe,GAAW,OAAO,CAAC;QAElC,yBAAoB,GAAW,UAAU,CAAC;QAI1C,oBAAe,GAAY,IAAI,CAAC;QAEhC,YAAO,GAAW,OAAO,CAAC;QAczB,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEjD,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,WAAM,GAAsB,IAAI,YAAY,EAAE,CAAC;QAE/C,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEhD,gBAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;QAEpD,gBAAW,GAAsB,IAAI,YAAY,EAAE,CAAC;QAErD,iBAAY,GAAW,OAAO,CAAC;QA6CjC,kBAAa,GAAa,SAAQ,CAAC;QAEnC,mBAAc,GAAa,SAAQ,CAAC;KAoCyF;IA/EpI,IAAa,YAAY,CAAC,GAAW;QACjC,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAID,IAAa,WAAW,CAAC,GAAW;QAChC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAa,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,IAAI,OAAO,CAAC,GAAU;QAClB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;KACvB;IAED,IAAa,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAI,WAAW,CAAC,GAAW;QACvB,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IA8CD,QAAQ;QACJ,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,kBAAkB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI;YACxB,QAAO,IAAI,CAAC,OAAO,EAAE;gBACjB,KAAK,MAAM;oBACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACtC,MAAM;gBAEN,KAAK,eAAe;oBAChB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC/C,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN,KAAK,QAAQ;oBACT,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACxC,MAAM;gBAEN;oBACI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACtC,MAAM;aACT;SACJ,CAAC,CAAC;KACN;IAED,eAAe;QACX,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;KACJ;IAED,kBAAkB;QACd,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACzB;KACJ;IAED,cAAc,CAAC,MAAW;QACtB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,SAAS,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;KAC1I;IAED,cAAc,CAAC,MAAW;QACtB,OAAO,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;KACjI;IAED,gBAAgB,CAAC,MAAW;QACxB,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,GAAG,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;QAC3J,QAAQ,QAAQ,KAAK,IAAI,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;KACpF;IAED,UAAU,CAAC,KAAU;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,mBAAmB;QACf,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE;YAClF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;SACxC;aACI;YACD,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;SACzC;KACJ;IAED,iBAAiB;QACb,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACvD;IAED,gBAAgB,CAAC,EAAY;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAC3B;IAED,iBAAiB,CAAC,EAAY;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;IAED,gBAAgB,CAAC,GAAY;QACzB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,aAAa,CAAC,KAAK;QACf,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;YAC/B,OAAO;SACV;QAED,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,cAAc,IAAI,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAC,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,CAAC;YAE/D,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;aACzC;SACJ;aACI;YACD,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE;gBAClF,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;aACnD;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAC,CAAC,CAAC;QACpG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAED,UAAU,CAAC,MAAM;QACb,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KACrE;IAED,kBAAkB,CAAC,GAAQ;QACvB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QAEf,IAAI,IAAI,CAAC,KAAK,EAAE;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;oBACtD,KAAK,GAAG,CAAC,CAAC;oBACV,MAAM;iBACT;aACJ;SACJ;QAED,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,iBAAiB;QACjB,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC3C,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YAClD,OAAO,IAAI,CAAC;SACf;aACI;YACD,KAAK,IAAI,MAAM,IAAI,eAAe,EAAE;gBAChC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;oBAC9B,OAAO,KAAK,CAAC;aACpB;YAED,OAAO,IAAI,CAAC;SACf;KACJ;IAED,SAAS,CAAC,KAAK;QACX,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC1D,OAAO;SACV;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjC,IAAI,UAAU;YACV,IAAI,CAAC,UAAU,EAAE,CAAC;;YAElB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,KAAK,CAAC,cAAc,EAAE,CAAC;KAC1B;IAED,QAAQ;QACJ,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC3C,IAAI,GAAG,GAAU,EAAE,CAAC;QAEpB,eAAe,CAAC,OAAO,CAAC,GAAG;YACvB,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,cAAc,KAAK,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC7D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;aACtC;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;KACpB;IAED,UAAU;QACN,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC3C,IAAI,GAAG,GAAU,EAAE,CAAC;QAEpB,eAAe,CAAC,OAAO,CAAC,GAAG;YACvB,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;aACtC;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;KACpB;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAC;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;SAC9B;KACJ;IAED,uBAAuB,CAAC,KAAqB;QACzC,QAAQ,KAAK,CAAC,OAAO;YACjB,KAAK,SAAS;gBACV,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC/E;gBACD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAE1B,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;oBAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBAEhC,IAAI,IAAI,CAAC,eAAe,EAAE;wBACtB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;qBAC/C;iBACJ;gBAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM;YAEN,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzB,MAAM;SACT;KACJ;IAED,aAAa;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;gBACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAExC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAExD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;aACnG;SACJ;KACJ;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YAC/B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACnD;KACJ;IAED,YAAY;QACR,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,IAAI,CAAC,QAAQ;gBACb,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;;gBAEjF,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;SACxF;KACJ;IAED,IAAI;QACA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,iBAAiB,EAAC;YACvB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;KAC1B;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;KAC3B;IAED,YAAY,CAAC,KAAiB,EAAE,KAAK;QACjC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAY,KAAK,CAAC,MAAO,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE;YAC5G,OAAO;SACV;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,0BAA0B,CAAC,EAAE;YAC/F,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;aACf;iBACI;gBACD,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,IAAI,CAAC,IAAI,EAAE,CAAC;aACf;SACJ;KACJ;IAED,UAAU,CAAC,IAAS,EAAE,KAAiB;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAED,cAAc,CAAC,KAAiB;QAC5B,IAAI,UAAU,GAAU,KAAK,CAAC,MAAM,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;KAC5G;IAED,gBAAgB,CAAC,KAAiB;QAC9B,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1I;IAED,YAAY,CAAC,KAAK;QACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,EAAC,CAAC,CAAC;KAC7C;IAED,WAAW,CAAC,KAAK;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAC,aAAa,EAAE,KAAK,EAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;SACzB;QACD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;KACpC;IAED,eAAe,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;SACV;QAED,QAAO,KAAK,CAAC,aAAa,CAAC,KAAK;;YAG5B,KAAK,EAAE;gBACH,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC3E,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;gBAED,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;gBACzC,MAAM;;YAGN,KAAK,EAAE;gBACH,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC3E,IAAI,QAAQ,EAAE;oBACV,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACpB;gBAED,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;gBACzC,MAAM;;YAGN,KAAK,EAAE;gBACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1B,KAAK,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;gBACzC,MAAM;SACT;KACJ;IAED,YAAY,CAAC,IAAI;QACb,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAEvC,IAAI,QAAQ;YACR,OAAO,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;YAEjK,OAAO,IAAI,CAAC;KACnB;IAED,YAAY,CAAC,IAAI;QACb,IAAI,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC;QAE3C,IAAI,QAAQ;YACR,OAAO,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;YAEjK,OAAO,IAAI,CAAC;KACnB;IAED,SAAS,CAAC,KAAoB;QAC1B,QAAO,KAAK,CAAC,KAAK;;YAEd,KAAK,EAAE;gBACH,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,MAAM,EAAE;oBACtC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;iBAC1B;gBACL,MAAM;;YAGN,KAAK,EAAE;gBACH,IAAI,CAAC,IAAI,CAAC,cAAc,EAAC;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;iBAC1B;gBACD,MAAM;;YAGV,KAAK,EAAE;gBACH,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChB,MAAM;SACT;KACJ;IAED,WAAW;QACP,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC9E,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,IAAI,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,IAAI,SAAS,EAAE;oBACX,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClB,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;qBACxB;oBACD,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;iBAC7B;aACJ;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC7C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;aAC/B;iBACI;gBACD,IAAI,OAAO,GAAG,SAAS,CAAC;gBACxB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;oBACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;iBAC5H;qBAAM;oBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC;iBACjD;aACJ;SACJ;aACI;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC;SAC/D;KACJ;IAED,gBAAgB,CAAC,GAAQ;QACrB,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAE9C,IAAI,GAAG,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC1F,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM;aACT;SACJ;QACD,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,UAAU;QACV,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC3C,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;YAClD,OAAO,KAAK,CAAC;SAChB;aACI;YACD,IAAI,2BAA2B,GAAG,CAAC,CAAC;YACpC,IAAI,6BAA6B,GAAG,CAAC,CAAC;YACtC,IAAI,0BAA0B,GAAG,CAAC,CAAC;YAEnC,KAAK,IAAI,MAAM,IAAI,eAAe,EAAE;gBAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAEvC,IAAI,QAAQ,EAAE;oBACV,IAAI,QAAQ;wBACR,2BAA2B,EAAE,CAAC;;wBAE9B,6BAA6B,EAAE,CAAC;iBACvC;qBACI;oBACD,IAAI,QAAQ;wBACR,0BAA0B,EAAE,CAAC;;wBAE7B,OAAO,KAAK,CAAC;iBACpB;aACJ;YAED,QAAQ,eAAe,CAAC,MAAM,KAAK,2BAA2B;mBACnD,eAAe,CAAC,MAAM,KAAK,0BAA0B;mBACrD,0BAA0B,IAAI,eAAe,CAAC,MAAM,MAAM,0BAA0B,GAAG,6BAA6B,GAAG,2BAA2B,CAAC,EAAE;SACnK;KACJ;IAED,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,CAAC;KAChD;IAED,IAAI,YAAY;QACZ,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC3C,OAAO,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;KAC3D;IAED,SAAS;QACL,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;KACnE;IAED,QAAQ,CAAC,KAAoB;QACzB,IAAI,CAAC,YAAY,GAAuB,KAAK,CAAC,MAAO,CAAC,KAAK,CAAC;QAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAED,aAAa;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,YAAY,GAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACvF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC7I;aACI;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;KACJ;IAED,qBAAqB;QACjB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;KACnC;IAED,oBAAoB;QAChB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;KACpC;IAED,yBAAyB;QACrB,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAC7B,MAAM,cAAc,GAAQ,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,GAAG,UAAU,CAAC;YAEvF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,KAAK;gBAC7E,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;oBAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;aACJ,CAAC,CAAC;SACN;KACJ;IAED,2BAA2B;QACvB,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;SACrC;KACJ;IAED,0BAA0B;QACtB,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;KAClE;IAED,4BAA4B;QACxB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC7B,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAClE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;SACtC;KACJ;IAED,cAAc;QACV,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;KACJ;IAED,kBAAkB;QACd,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;gBAC1F,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;iBACf;aACJ,CAAC,CAAC;SACN;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;KAC3C;IAED,oBAAoB;QAChB,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;SAC7C;KACJ;IAED,aAAa;QACT,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;KACzB;IAED,WAAW;QACP,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC7B;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;;;YA73BJ,SAAS,SAAC;gBACP,QAAQ,EAAE,eAAe;gBACzB,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4ET;gBACD,UAAU,EAAE;oBACR,OAAO,CAAC,kBAAkB,EAAE;wBACxB,UAAU,CAAC,QAAQ,EAAE;4BACjB,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAC,CAAC;4BAC7C,OAAO,CAAC,0BAA0B,CAAC;yBACpC,CAAC;wBACF,UAAU,CAAC,QAAQ,EAAE;4BACnB,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;yBAC3D,CAAC;qBACP,CAAC;iBACL;gBACD,IAAI,EAAE;oBACF,+BAA+B,EAAE,QAAQ;oBACzC,8BAA8B,EAAE,OAAO;iBAC1C;gBACD,SAAS,EAAE,CAAC,0BAA0B,CAAC;gBACvC,eAAe,EAAE,uBAAuB,CAAC,MAAM;gBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;;aAExC;;;YAtK6B,UAAU;YAAuF,SAAS;YAC7G,iBAAiB;YAKU,aAAa;;;oBAmK9D,KAAK;yBAEL,KAAK;yBAEL,KAAK;8BAEL,KAAK;sBAEL,KAAK;uBAEL,KAAK;uBAEL,KAAK;qBAEL,KAAK;gCAEL,KAAK;2BAEL,KAAK;6BAEL,KAAK;uBAEL,KAAK;uBAEL,KAAK;sBAEL,KAAK;mBAEL,KAAK;6BAEL,KAAK;mCAEL,KAAK;gCAEL,KAAK;6BAEL,KAAK;iCAEL,KAAK;4BAEL,KAAK;iCAEL,KAAK;gCAEL,KAAK;2BAEL,KAAK;0BAEL,KAAK;0BAEL,KAAK;6BAEL,KAAK;yBAEL,KAAK;yBAEL,KAAK;yBAEL,KAAK;uBAEL,KAAK;4BAEL,KAAK;uBAEL,KAAK;oCAEL,KAAK;oCAEL,KAAK;8BAEL,KAAK;8BAEL,KAAK;sBAEL,KAAK;8BAEL,KAAK;mCAEL,KAAK;gCAEL,KAAK;8BAEL,KAAK;sBAEL,KAAK;iCAEL,SAAS,SAAC,WAAW;+BAErB,SAAS,SAAC,aAAa;kCAEvB,SAAS,SAAC,IAAI;0BAEd,YAAY,SAAC,MAAM;0BAEnB,YAAY,SAAC,MAAM;wBAEnB,eAAe,SAAC,aAAa;uBAE7B,MAAM;sBAEN,MAAM;qBAEN,MAAM;sBAEN,MAAM;0BAEN,MAAM;0BAEN,MAAM;2BAEN,KAAK;2BAIL,KAAK;0BAWL,KAAK;sBASL,KAAK;0BAQL,KAAK;;MAmpBG,iBAAiB;;;YAL7B,QAAQ,SAAC;gBACN,OAAO,EAAE,CAAC,YAAY,EAAC,YAAY,EAAC,eAAe,EAAC,aAAa,EAAC,YAAY,CAAC;gBAC/E,OAAO,EAAE,CAAC,WAAW,EAAC,YAAY,EAAC,eAAe,CAAC;gBACnD,YAAY,EAAE,CAAC,WAAW,EAAC,eAAe,CAAC;aAC9C;;;ACz8BD;;;;;;"}
1
+ {"version":3,"file":"primeng-multiselect.js","sources":["../../src/app/components/multiselect/multiselect.ts","../../src/app/components/multiselect/primeng-multiselect.ts"],"sourcesContent":["import { NgModule, Component, ElementRef, OnInit, AfterViewInit, AfterContentInit, AfterViewChecked, OnDestroy, Input, Output, Renderer2, EventEmitter,\n forwardRef, ViewChild, ChangeDetectorRef, TemplateRef, ContentChildren, QueryList, ContentChild, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport { trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ObjectUtils } from 'primeng/utils';\nimport { SharedModule, PrimeTemplate, Footer, Header, FilterService } from 'primeng/api';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { RippleModule } from 'primeng/ripple';\n\nexport const MULTISELECT_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiSelect),\n multi: true\n};\n\n@Component({\n selector: 'p-multiSelectItem',\n template: `\n <li class=\"p-multiselect-item\" (click)=\"onOptionClick($event)\" (keydown)=\"onOptionKeydown($event)\" [attr.aria-label]=\"label\" \n [attr.tabindex]=\"disabled ? null : '0'\" [ngStyle]=\"{'height': itemSize + 'px'}\"\n [ngClass]=\"{'p-highlight': selected, 'p-disabled': disabled}\" pRipple>\n <div class=\"p-checkbox p-component\">\n <div class=\"p-checkbox-box\" [ngClass]=\"{'p-highlight': selected}\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check': selected}\"></span>\n </div>\n </div>\n <span *ngIf=\"!template\">{{label}}</span>\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: option}\"></ng-container>\n </li>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class MultiSelectItem {\n\n @Input() option: any;\n\n @Input() selected: boolean;\n\n @Input() label: any;\n\n @Input() disabled: boolean;\n\n @Input() itemSize: number;\n\n @Input() template: TemplateRef<any>;\n\n @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n @Output() onKeydown: EventEmitter<any> = new EventEmitter();\n\n onOptionClick(event: Event) {\n this.onClick.emit({\n originalEvent: event,\n option: this.option\n });\n }\n\n onOptionKeydown(event: Event) {\n this.onKeydown.emit({\n originalEvent: event,\n option: this.option\n });\n }\n}\n\n@Component({\n selector: 'p-multiSelect',\n template: `\n <div #container [ngClass]=\"{'p-multiselect p-component':true,\n 'p-multiselect-open':overlayVisible,\n 'p-multiselect-chip': display === 'chip',\n 'p-focus':focus,\n 'p-disabled': disabled}\" [ngStyle]=\"style\" [class]=\"styleClass\"\n (click)=\"onMouseclick($event,in)\">\n <div class=\"p-hidden-accessible\">\n <input #in type=\"text\" readonly=\"readonly\" [attr.id]=\"inputId\" [attr.name]=\"name\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\"\n [disabled]=\"disabled\" [attr.tabindex]=\"tabindex\" (keydown)=\"onKeydown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"overlayVisible\"\n [attr.aria-labelledby]=\"ariaLabelledBy\" role=\"listbox\">\n </div>\n <div class=\"p-multiselect-label-container\" [pTooltip]=\"tooltip\" [tooltipPosition]=\"tooltipPosition\" [positionStyle]=\"tooltipPositionStyle\" [tooltipStyleClass]=\"tooltipStyleClass\">\n <div class=\"p-multiselect-label\" [ngClass]=\"{'p-placeholder': valuesAsString === (defaultLabel || placeholder), 'p-multiselect-label-empty': ((valuesAsString == null || valuesAsString.length === 0) && (placeholder == null || placeholder.length === 0))}\">\n <ng-container *ngIf=\"!selectedItemsTemplate\">\n <ng-container *ngIf=\"display === 'comma'\">{{valuesAsString || 'empty'}}</ng-container>\n <ng-container *ngIf=\"display === 'chip'\">\n <div #token *ngFor=\"let item of value; let i = index;\" class=\"p-multiselect-token\">\n <span class=\"p-multiselect-token-label\">{{findLabelByValue(item)}}</span>\n <span *ngIf=\"!disabled\" class=\"p-multiselect-token-icon pi pi-times-circle\" (click)=\"removeChip(item, $event)\"></span>\n </div>\n <ng-container *ngIf=\"!value || value.length === 0\">{{placeholder || defaultLabel || 'empty'}}</ng-container>\n </ng-container>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"selectedItemsTemplate; context: {$implicit: value}\"></ng-container>\n </div>\n </div>\n <div [ngClass]=\"{'p-multiselect-trigger':true}\">\n <span class=\"p-multiselect-trigger-icon\" [ngClass]=\"dropdownIcon\"></span>\n </div>\n <div *ngIf=\"overlayVisible\" [ngClass]=\"['p-multiselect-panel p-component']\" [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\n [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\" (keydown)=\"onKeydown($event)\">\n <div class=\"p-multiselect-header\" *ngIf=\"showHeader\">\n <ng-content select=\"p-header\"></ng-content>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <div class=\"p-checkbox p-component\" *ngIf=\"showToggleAll && !selectionLimit\" [ngClass]=\"{'p-checkbox-disabled': disabled || toggleAllDisabled}\">\n <div class=\"p-hidden-accessible\">\n <input type=\"checkbox\" readonly=\"readonly\" [checked]=\"allChecked\" (focus)=\"onHeaderCheckboxFocus()\" (blur)=\"onHeaderCheckboxBlur()\" (keydown.space)=\"toggleAll($event)\" [attr.disabled]=\"disabled || toggleAllDisabled\">\n </div>\n <div class=\"p-checkbox-box\" role=\"checkbox\" [attr.aria-checked]=\"allChecked\" [ngClass]=\"{'p-highlight':allChecked, 'p-focus': headerCheckboxFocus, 'p-disabled': disabled || toggleAllDisabled}\" (click)=\"toggleAll($event)\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':allChecked}\"></span>\n </div>\n </div>\n <div class=\"p-multiselect-filter-container\" *ngIf=\"filter\">\n <input #filterInput type=\"text\" role=\"textbox\" [value]=\"filterValue||''\" (input)=\"onFilter($event)\" class=\"p-multiselect-filter p-inputtext p-component\" [disabled]=\"disabled\" [attr.placeholder]=\"filterPlaceHolder\" [attr.aria-label]=\"ariaFilterLabel\">\n <span class=\"p-multiselect-filter-icon pi pi-search\"></span>\n </div>\n <button class=\"p-multiselect-close p-link\" type=\"button\" (click)=\"close($event)\" pRipple>\n <span class=\"p-multiselect-close-icon pi pi-times\"></span>\n </button>\n </div>\n <div class=\"p-multiselect-items-wrapper\" [style.max-height]=\"virtualScroll ? 'auto' : (scrollHeight||'auto')\">\n <ul class=\"p-multiselect-items p-component\" role=\"listbox\" aria-multiselectable=\"true\">\n <ng-container *ngIf=\"group\">\n <ng-template ngFor let-optgroup [ngForOf]=\"optionsToRender\">\n <li class=\"p-multiselect-item-group\">\n <span *ngIf=\"!groupTemplate\">{{getOptionGroupLabel(optgroup)||'empty'}}</span>\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: {$implicit: optgroup}\"></ng-container>\n </li>\n <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!group\">\n <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: optionsToRender}\"></ng-container>\n </ng-container>\n <ng-template #itemslist let-optionsToDisplay let-selectedOption=\"selectedOption\">\n <ng-container *ngIf=\"!virtualScroll; else virtualScrollList\">\n <ng-template ngFor let-option let-i=\"index\" [ngForOf]=\"optionsToDisplay\">\n <p-multiSelectItem [option]=\"option\" [selected]=\"isSelected(option)\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\" (onClick)=\"onOptionClick($event)\" (onKeydown)=\"onOptionKeydown($event)\"\n [template]=\"itemTemplate\"></p-multiSelectItem>\n </ng-template>\n </ng-container>\n <ng-template #virtualScrollList>\n <cdk-virtual-scroll-viewport #viewport [ngStyle]=\"{'height': scrollHeight}\" [itemSize]=\"itemSize\" *ngIf=\"virtualScroll && !emptyOptions\">\n <ng-container *cdkVirtualFor=\"let option of optionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd\">\n <p-multiSelectItem [option]=\"option\" [selected]=\"isSelected(option)\" [label]=\"getOptionLabel(option)\" [disabled]=\"isOptionDisabled(option)\" (onClick)=\"onOptionClick($event)\" (onKeydown)=\"onOptionKeydown($event)\"\n [template]=\"itemTemplate\" [itemSize]=\"itemSize\"></p-multiSelectItem>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </ng-template>\n <li *ngIf=\"emptyOptions\" class=\"p-multiselect-empty-message\">{{emptyFilterMessage}}</li>\n </ng-template>\n </ul>\n </div>\n <div class=\"p-multiselect-footer\" *ngIf=\"footerFacet || footerTemplate\">\n <ng-content select=\"p-footer\"></ng-content>\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </div>\n </div>\n </div>\n `,\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({opacity: 0, transform: 'scaleY(0.8)'}),\n animate('{{showTransitionParams}}')\n ]),\n transition(':leave', [\n animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n ])\n ])\n ],\n host: {\n '[class.p-inputwrapper-filled]': 'filled',\n '[class.p-inputwrapper-focus]': 'focus || overlayVisible'\n },\n providers: [MULTISELECT_VALUE_ACCESSOR],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./multiselect.css']\n})\nexport class MultiSelect implements OnInit,AfterViewInit,AfterContentInit,AfterViewChecked,OnDestroy,ControlValueAccessor {\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() panelStyle: any;\n\n @Input() panelStyleClass: string;\n\n @Input() inputId: string;\n\n @Input() disabled: boolean;\n\n @Input() readonly: boolean;\n\n @Input() group: boolean;\n\n @Input() filter: boolean = true;\n\n @Input() filterPlaceHolder: string;\n\n @Input() filterLocale: string;\n\n @Input() overlayVisible: boolean;\n\n @Input() tabindex: number;\n\n @Input() appendTo: any;\n\n @Input() dataKey: string;\n\n @Input() name: string;\n\n @Input() ariaLabelledBy: string;\n\n @Input() displaySelectedLabel: boolean = true;\n\n @Input() maxSelectedLabels: number = 3;\n\n @Input() selectionLimit: number;\n\n @Input() selectedItemsLabel: string = '{0} items selected';\n\n @Input() showToggleAll: boolean = true;\n\n @Input() emptyFilterMessage: string = 'No results found';\n\n @Input() resetFilterOnHide: boolean = false;\n\n @Input() dropdownIcon: string = 'pi pi-chevron-down';\n\n @Input() optionLabel: string;\n\n @Input() optionValue: string;\n\n @Input() optionDisabled: string;\n\n @Input() optionGroupLabel: string;\n\n @Input() optionGroupChildren: string;\n\n @Input() showHeader: boolean = true;\n\n @Input() autoZIndex: boolean = true;\n\n @Input() baseZIndex: number = 0;\n\n @Input() filterBy: string;\n\n @Input() virtualScroll: boolean;\n\n @Input() itemSize: number;\n\n @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n @Input() hideTransitionOptions: string = '.1s linear';\n\n @Input() ariaFilterLabel: string;\n\n @Input() filterMatchMode: string = \"contains\";\n\n @Input() tooltip: string = '';\n\n @Input() tooltipPosition: string = 'right';\n\n @Input() tooltipPositionStyle: string = 'absolute';\n\n @Input() tooltipStyleClass: string;\n\n @Input() autofocusFilter: boolean = true;\n\n @Input() display: string = 'comma';\n\n @ViewChild('container') containerViewChild: ElementRef;\n\n @ViewChild('filterInput') filterInputChild: ElementRef;\n\n @ViewChild('in') accessibleViewChild: ElementRef;\n\n @ContentChild(Footer) footerFacet;\n\n @ContentChild(Header) headerFacet;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n @Output() onChange: EventEmitter<any> = new EventEmitter();\n\n @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n @Output() onClick: EventEmitter<any> = new EventEmitter();\n\n @Output() onPanelShow: EventEmitter<any> = new EventEmitter();\n\n @Output() onPanelHide: EventEmitter<any> = new EventEmitter();\n\n @Input() scrollHeight: string = '200px';\n\n _defaultLabel: string;\n\n @Input() set defaultLabel(val: string) {\n this._defaultLabel = val;\n this.updateLabel();\n }\n\n get defaultLabel(): string {\n return this._defaultLabel;\n }\n\n _placeholder: string;\n\n @Input() set placeholder(val: string) {\n this._placeholder = val;\n this.updateLabel();\n }\n\n get placeholder(): string {\n return this._placeholder;\n }\n\n @Input() get options(): any[] {\n return this._options;\n }\n\n set options(val: any[]) {\n this._options = val;\n }\n\n @Input() get filterValue(): string {\n return this._filterValue;\n }\n\n set filterValue(val: string) {\n this._filterValue = val;\n this.activateFilter();\n }\n\n public value: any[];\n\n public _filteredOptions: any[];\n\n public onModelChange: Function = () => {};\n\n public onModelTouched: Function = () => {};\n\n overlay: HTMLDivElement;\n\n public valuesAsString: string;\n\n public focus: boolean;\n\n filled: boolean;\n\n public documentClickListener: any;\n\n public _filterValue: string;\n\n public filtered: boolean;\n\n public itemTemplate: TemplateRef<any>;\n\n public groupTemplate: TemplateRef<any>;\n\n public headerTemplate: TemplateRef<any>;\n\n public footerTemplate: TemplateRef<any>;\n\n public selectedItemsTemplate: TemplateRef<any>;\n\n public headerCheckboxFocus: boolean;\n\n _options: any[];\n\n maxSelectionLimitReached: boolean;\n\n scrollHandler: any;\n\n documentResizeListener: any;\n\n preventModelTouched: boolean;\n\n constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public filterService: FilterService) {}\n\n ngOnInit() {\n this.updateLabel();\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch(item.getType()) {\n case 'item':\n this.itemTemplate = item.template;\n break;\n\n case 'group':\n this.groupTemplate = item.template;\n break;\n\n case 'selectedItems':\n this.selectedItemsTemplate = item.template;\n break;\n\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n default:\n this.itemTemplate = item.template;\n break;\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.overlayVisible) {\n this.show();\n }\n }\n\n ngAfterViewChecked() {\n if (this.filtered) {\n this.alignOverlay();\n\n this.filtered = false;\n }\n }\n\n getOptionLabel(option: any) {\n return this.optionLabel ? ObjectUtils.resolveFieldData(option, this.optionLabel) : (option.label != undefined ? option.label : option);\n }\n\n getOptionValue(option: any) {\n return this.optionValue ? ObjectUtils.resolveFieldData(option, this.optionValue) : (this.optionLabel ? option : option.value);\n }\n\n getOptionGroupLabel(optionGroup: any) {\n return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);\n }\n\n getOptionGroupChildren(optionGroup: any) {\n return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n }\n\n isOptionDisabled(option: any) {\n let disabled = this.optionDisabled ? ObjectUtils.resolveFieldData(option, this.optionDisabled) : (option.disabled !== undefined ? option.disabled : false);\n return (disabled || (this.maxSelectionLimitReached && !this.isSelected(option)));\n }\n\n writeValue(value: any) : void {\n this.value = value;\n this.updateLabel();\n this.updateFilledState();\n this.checkSelectionLimit();\n\n this.cd.markForCheck();\n }\n\n checkSelectionLimit() {\n if (this.selectionLimit && (this.value && this.value.length === this.selectionLimit)) {\n this.maxSelectionLimitReached = true;\n }\n else {\n this.maxSelectionLimitReached = false;\n }\n }\n\n updateFilledState() {\n this.filled = (this.value && this.value.length > 0);\n }\n\n registerOnChange(fn: Function): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: Function): void {\n this.onModelTouched = fn;\n }\n\n setDisabledState(val: boolean): void {\n this.disabled = val;\n this.cd.markForCheck();\n }\n\n onOptionClick(event) {\n let option = event.option;\n if (this.isOptionDisabled(option)) {\n return;\n }\n\n let optionValue = this.getOptionValue(option);\n let selectionIndex = this.findSelectionIndex(optionValue);\n if (selectionIndex != -1) {\n this.value = this.value.filter((val,i) => i != selectionIndex);\n\n if (this.selectionLimit) {\n this.maxSelectionLimitReached = false;\n }\n }\n else {\n if (!this.selectionLimit || (!this.value || this.value.length < this.selectionLimit)) {\n this.value = [...this.value || [], optionValue];\n }\n\n this.checkSelectionLimit();\n }\n\n this.onModelChange(this.value);\n this.onChange.emit({originalEvent: event.originalEvent, value: this.value, itemValue: optionValue});\n this.updateLabel();\n this.updateFilledState();\n }\n\n isSelected(option) {\n return this.findSelectionIndex(this.getOptionValue(option)) != -1;\n }\n\n findSelectionIndex(val: any): number {\n let index = -1;\n\n if (this.value) {\n for (let i = 0; i < this.value.length; i++) {\n if (ObjectUtils.equals(this.value[i], val, this.dataKey)) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n get toggleAllDisabled(): boolean {\n let optionsToRender = this.optionsToRender;\n if (!optionsToRender || optionsToRender.length === 0) {\n return true;\n }\n else {\n for (let option of optionsToRender) {\n if (!this.isOptionDisabled(option))\n return false;\n }\n\n return true;\n }\n }\n\n toggleAll(event) {\n if (this.disabled || this.toggleAllDisabled || this.readonly) {\n return;\n }\n \n let allChecked = this.allChecked; \n\n if (allChecked)\n this.uncheckAll();\n else\n this.checkAll();\n\n this.onModelChange(this.value);\n this.onChange.emit({ originalEvent: event, value: this.value }); \n this.updateFilledState();\n this.updateLabel();\n event.preventDefault();\n }\n\n checkAll() {\n let optionsToRender = this.optionsToRender;\n let val: any[] = [];\n\n optionsToRender.forEach(opt => {\n if (!this.group) {\n let optionDisabled = this.isOptionDisabled(opt); \n if (!optionDisabled || (optionDisabled && this.isSelected(opt))) {\n val.push(this.getOptionValue(opt));\n }\n }\n else {\n if (opt.items) {\n opt.items.forEach(option => {\n let optionDisabled = this.isOptionDisabled(option); \n if (!optionDisabled || (optionDisabled && this.isSelected(option))) {\n val.push(this.getOptionValue(option));\n }\n });\n }\n }\n });\n\n this.value = val;\n }\n\n uncheckAll() {\n let optionsToRender = this.optionsToRender;\n let val: any[] = [];\n\n optionsToRender.forEach(opt => {\n if (!this.group) {\n let optionDisabled = this.isOptionDisabled(opt); \n if (optionDisabled && this.isSelected(opt)) {\n val.push(this.getOptionValue(opt));\n }\n }\n else {\n if (opt.items) {\n opt.items.forEach(option => {\n let optionDisabled = this.isOptionDisabled(option); \n if (optionDisabled && this.isSelected(option)) {\n val.push(this.getOptionValue(option));\n }\n });\n }\n }\n });\n\n this.value = val;\n }\n\n show() {\n if (!this.overlayVisible){\n this.overlayVisible = true;\n }\n }\n\n onOverlayAnimationStart(event: AnimationEvent) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n this.appendOverlay();\n if (this.autoZIndex) {\n this.overlay.style.zIndex = String(this.baseZIndex + (++DomHandler.zindex));\n }\n this.alignOverlay();\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n\n if (this.filterInputChild && this.filterInputChild.nativeElement) {\n this.preventModelTouched = true;\n\n if (this.autofocusFilter) {\n this.filterInputChild.nativeElement.focus();\n }\n }\n\n this.onPanelShow.emit();\n break;\n\n case 'void':\n this.onOverlayHide();\n break;\n }\n }\n\n appendOverlay() {\n if (this.appendTo) {\n if (this.appendTo === 'body')\n document.body.appendChild(this.overlay);\n else\n DomHandler.appendChild(this.overlay, this.appendTo);\n\n if (!this.overlay.style.minWidth) {\n this.overlay.style.minWidth = DomHandler.getWidth(this.containerViewChild.nativeElement) + 'px';\n }\n }\n }\n\n restoreOverlayAppend() {\n if (this.overlay && this.appendTo) {\n this.el.nativeElement.appendChild(this.overlay);\n }\n }\n\n alignOverlay() {\n if (this.overlay) {\n if (this.appendTo)\n DomHandler.absolutePosition(this.overlay, this.containerViewChild.nativeElement);\n else\n DomHandler.relativePosition(this.overlay, this.containerViewChild.nativeElement);\n }\n }\n\n hide() {\n this.overlayVisible = false;\n this.unbindDocumentClickListener();\n if (this.resetFilterOnHide){\n this.filterInputChild.nativeElement.value = '';\n this._filterValue = null;\n this._filteredOptions = null;\n }\n this.onPanelHide.emit();\n this.cd.markForCheck();\n }\n\n close(event) {\n this.hide();\n event.preventDefault();\n event.stopPropagation();\n }\n\n onMouseclick(event: MouseEvent, input) {\n if (this.disabled || this.readonly || (<Node> event.target).isSameNode(this.accessibleViewChild.nativeElement)) {\n return;\n }\n\n this.onClick.emit(event);\n\n if (!this.isOverlayClick(event) && !DomHandler.hasClass(event.target, 'p-multiselect-token-icon')) {\n if (this.overlayVisible) {\n this.hide();\n }\n else {\n input.focus();\n this.show();\n }\n }\n }\n\n removeChip(chip: any, event: MouseEvent) {\n this.value = this.value.filter(val => !ObjectUtils.equals(val, chip, this.dataKey));\n this.onModelChange(this.value);\n this.onChange.emit({ originalEvent: event, value: this.value });\n this.updateLabel();\n this.updateFilledState();\n }\n\n isOverlayClick(event: MouseEvent) {\n let targetNode = <Node> event.target;\n return this.overlay ? (this.overlay.isSameNode(targetNode) || this.overlay.contains(targetNode)) : false;\n }\n\n isOutsideClicked(event: MouseEvent): boolean {\n return !(this.el.nativeElement.isSameNode(event.target) || this.el.nativeElement.contains(event.target) || this.isOverlayClick(event));\n }\n\n onInputFocus(event) {\n this.focus = true;\n this.onFocus.emit({originalEvent: event});\n }\n\n onInputBlur(event) {\n this.focus = false;\n this.onBlur.emit({originalEvent: event});\n\n if (!this.preventModelTouched) {\n this.onModelTouched();\n }\n this.preventModelTouched = false;\n }\n\n onOptionKeydown(event) {\n if (this.readonly) {\n return;\n }\n\n switch(event.originalEvent.which) {\n\n //down\n case 40:\n var nextItem = this.findNextItem(event.originalEvent.target.parentElement);\n if (nextItem) {\n nextItem.focus();\n }\n\n event.originalEvent.preventDefault();\n break;\n\n //up\n case 38:\n var prevItem = this.findPrevItem(event.originalEvent.target.parentElement);\n if (prevItem) {\n prevItem.focus();\n }\n\n event.originalEvent.preventDefault();\n break;\n\n //enter\n case 13:\n this.onOptionClick(event);\n event.originalEvent.preventDefault();\n break;\n }\n }\n\n findNextItem(item) {\n let nextItem = item.nextElementSibling;\n\n if (nextItem)\n return DomHandler.hasClass(nextItem.children[0], 'p-disabled') || DomHandler.isHidden(nextItem.children[0]) || DomHandler.hasClass(nextItem, 'p-multiselect-item-group') ? this.findNextItem(nextItem) : nextItem.children[0];\n else\n return null;\n }\n\n findPrevItem(item) {\n let prevItem = item.previousElementSibling;\n\n if (prevItem)\n return DomHandler.hasClass(prevItem.children[0], 'p-disabled') || DomHandler.isHidden(prevItem.children[0]) || DomHandler.hasClass(prevItem, 'p-multiselect-item-group') ? this.findPrevItem(prevItem) : prevItem.children[0];\n else\n return null;\n }\n\n onKeydown(event: KeyboardEvent){\n switch(event.which) {\n //down\n case 40:\n if (!this.overlayVisible && event.altKey) {\n this.show();\n event.preventDefault();\n }\n break;\n\n //space\n case 32:\n if (!this.overlayVisible){\n this.show();\n event.preventDefault();\n }\n break;\n\n //escape\n case 27:\n this.hide();\n break;\n }\n }\n\n updateLabel() {\n if (this.value && this.options && this.value.length && this.displaySelectedLabel) {\n let label = '';\n for (let i = 0; i < this.value.length; i++) {\n let itemLabel = this.findLabelByValue(this.value[i]);\n if (itemLabel) {\n if (label.length > 0) {\n label = label + ', ';\n }\n label = label + itemLabel;\n }\n }\n\n if (this.value.length <= this.maxSelectedLabels) {\n this.valuesAsString = label;\n }\n else {\n let pattern = /{(.*?)}/;\n if (pattern.test(this.selectedItemsLabel)) {\n this.valuesAsString = this.selectedItemsLabel.replace(this.selectedItemsLabel.match(pattern)[0], this.value.length + '');\n } else {\n this.valuesAsString = this.selectedItemsLabel;\n }\n }\n }\n else {\n this.valuesAsString = this.placeholder || this.defaultLabel;\n }\n }\n\n findLabelByValue(val: any): string {\n if (this.group) {\n let label = null;\n\n for (let i = 0; i < this.options.length; i++) {\n if (this.options[i].items) {\n label = this.searchLabelByValue(val, this.options[i].items);\n\n if (label) {\n break;\n }\n }\n }\n\n return label;\n }\n else {\n return this.searchLabelByValue(val, this.options)\n }\n }\n\n searchLabelByValue(val: any, options: any[]): string {\n let label = null;\n\n for (let i = 0; i < options.length; i++) {\n let option = options[i];\n let optionValue = this.getOptionValue(option);\n\n if (val == null && optionValue == null || ObjectUtils.equals(val, optionValue, this.dataKey)) {\n label = this.getOptionLabel(option);\n break;\n }\n }\n\n return label;\n }\n\n get allChecked(): boolean {\n let optionsToRender = this.optionsToRender;\n if (!optionsToRender || optionsToRender.length === 0) {\n return false;\n }\n else {\n let selectedDisabledItemsLength = 0;\n let unselectedDisabledItemsLength = 0;\n let selectedEnabledItemsLength = 0;\n let visibleOptionsLength = this.group ? 0 : this.optionsToRender.length;\n \n for (let option of optionsToRender) {\n if (!this.group) {\n let disabled = this.isOptionDisabled(option);\n let selected = this.isSelected(option);\n \n if (disabled) {\n if (selected)\n selectedDisabledItemsLength++;\n else \n unselectedDisabledItemsLength++;\n }\n else {\n if (selected)\n selectedEnabledItemsLength++;\n else\n return false;\n }\n }\n else if (option.items) {\n for (let opt of option.items) {\n let disabled = this.isOptionDisabled(opt);\n let selected = this.isSelected(opt);\n \n if (disabled) {\n if (selected)\n selectedDisabledItemsLength++;\n else \n unselectedDisabledItemsLength++;\n }\n else {\n if (selected)\n selectedEnabledItemsLength++;\n else {\n return false;\n }\n }\n\n visibleOptionsLength++;\n }\n }\n }\n\n return (visibleOptionsLength === selectedDisabledItemsLength \n || visibleOptionsLength === selectedEnabledItemsLength \n || selectedEnabledItemsLength && visibleOptionsLength === (selectedEnabledItemsLength + unselectedDisabledItemsLength + selectedDisabledItemsLength));\n }\n }\n\n get optionsToRender(): any[] {\n return this._filteredOptions || this.options;\n }\n\n get emptyOptions(): boolean {\n let optionsToRender = this.optionsToRender;\n return !optionsToRender || optionsToRender.length === 0;\n }\n\n hasFilter() {\n return this._filterValue && this._filterValue.trim().length > 0; \n }\n\n onFilter(event: KeyboardEvent) {\n this._filterValue = (<HTMLInputElement> event.target).value;\n this.activateFilter();\n }\n\n activateFilter() {\n if (this.hasFilter() && this._options) {\n let searchFields: string[] = (this.filterBy || this.optionLabel || 'label').split(',');\n if (this.group) {\n let searchFields: string[] = (this.optionLabel || 'label').split(',');\n\n let filteredGroups = [];\n for (let optgroup of this.options) {\n let filteredSubOptions = this.filterService.filter(this.getOptionGroupChildren(optgroup), searchFields, this.filterValue, this.filterMatchMode, this.filterLocale);\n if (filteredSubOptions && filteredSubOptions.length) {\n filteredGroups.push({\n label: optgroup.label,\n value: optgroup.value,\n items: filteredSubOptions\n });\n }\n }\n\n this._filteredOptions = filteredGroups;\n }\n else {\n this._filteredOptions = this.filterService.filter(this.options, searchFields, this._filterValue, this.filterMatchMode, this.filterLocale); \n }\n }\n else {\n this._filteredOptions = null;\n }\n }\n\n onHeaderCheckboxFocus() {\n this.headerCheckboxFocus = true;\n }\n\n onHeaderCheckboxBlur() {\n this.headerCheckboxFocus = false;\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n if (this.isOutsideClicked(event)) {\n this.hide();\n }\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n\n bindDocumentResizeListener() {\n this.documentResizeListener = this.onWindowResize.bind(this);\n window.addEventListener('resize', this.documentResizeListener);\n }\n\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n\n onWindowResize() {\n if (!DomHandler.isAndroid()) {\n this.hide();\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerViewChild.nativeElement, () => {\n if (this.overlayVisible) {\n this.hide();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n this.onModelTouched();\n }\n\n ngOnDestroy() {\n if (this.scrollHandler) {\n this.scrollHandler.destroy();\n this.scrollHandler = null;\n }\n\n this.restoreOverlayAppend();\n this.onOverlayHide();\n }\n\n}\n\n@NgModule({\n imports: [CommonModule,SharedModule,ScrollingModule,TooltipModule,RippleModule],\n exports: [MultiSelect,SharedModule,ScrollingModule],\n declarations: [MultiSelect,MultiSelectItem]\n})\nexport class MultiSelectModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}