igniteui-angular 17.0.13 → 17.0.14

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 (364) hide show
  1. package/esm2022/lib/accordion/accordion.component.mjs +3 -3
  2. package/esm2022/lib/accordion/accordion.module.mjs +4 -4
  3. package/esm2022/lib/action-strip/action-strip.component.mjs +6 -6
  4. package/esm2022/lib/action-strip/action-strip.module.mjs +4 -4
  5. package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +3 -3
  6. package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +3 -3
  7. package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +3 -3
  8. package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +3 -3
  9. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  10. package/esm2022/lib/avatar/avatar.module.mjs +4 -4
  11. package/esm2022/lib/badge/badge.component.mjs +3 -3
  12. package/esm2022/lib/badge/badge.module.mjs +4 -4
  13. package/esm2022/lib/banner/banner.component.mjs +3 -3
  14. package/esm2022/lib/banner/banner.directives.mjs +3 -3
  15. package/esm2022/lib/banner/banner.module.mjs +4 -4
  16. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +26 -20
  17. package/esm2022/lib/buttonGroup/buttongroup.module.mjs +4 -4
  18. package/esm2022/lib/calendar/calendar-base.mjs +9 -7
  19. package/esm2022/lib/calendar/calendar.component.mjs +3 -3
  20. package/esm2022/lib/calendar/calendar.directives.mjs +15 -15
  21. package/esm2022/lib/calendar/calendar.module.mjs +4 -4
  22. package/esm2022/lib/calendar/days-view/day-item.component.mjs +3 -3
  23. package/esm2022/lib/calendar/days-view/days-view.component.mjs +3 -3
  24. package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +3 -3
  25. package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +3 -3
  26. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +3 -3
  27. package/esm2022/lib/calendar/months-view/months-view.component.mjs +3 -3
  28. package/esm2022/lib/calendar/months-view.pipe.mjs +6 -6
  29. package/esm2022/lib/calendar/years-view/years-view.component.mjs +6 -6
  30. package/esm2022/lib/card/card.component.mjs +27 -27
  31. package/esm2022/lib/card/card.module.mjs +4 -4
  32. package/esm2022/lib/carousel/carousel.component.mjs +6 -6
  33. package/esm2022/lib/carousel/carousel.directives.mjs +9 -9
  34. package/esm2022/lib/carousel/carousel.module.mjs +4 -4
  35. package/esm2022/lib/carousel/slide.component.mjs +3 -3
  36. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  37. package/esm2022/lib/checkbox/checkbox.module.mjs +4 -4
  38. package/esm2022/lib/chips/chip.component.mjs +3 -3
  39. package/esm2022/lib/chips/chips-area.component.mjs +3 -3
  40. package/esm2022/lib/chips/chips.module.mjs +4 -4
  41. package/esm2022/lib/combo/combo-add-item.component.mjs +3 -3
  42. package/esm2022/lib/combo/combo-dropdown.component.mjs +3 -3
  43. package/esm2022/lib/combo/combo-item.component.mjs +3 -3
  44. package/esm2022/lib/combo/combo.api.mjs +3 -3
  45. package/esm2022/lib/combo/combo.common.mjs +3 -3
  46. package/esm2022/lib/combo/combo.component.mjs +3 -3
  47. package/esm2022/lib/combo/combo.directives.mjs +24 -24
  48. package/esm2022/lib/combo/combo.module.mjs +4 -4
  49. package/esm2022/lib/combo/combo.pipes.mjs +6 -6
  50. package/esm2022/lib/core/density.mjs +25 -21
  51. package/esm2022/lib/core/navigation/directives.mjs +6 -6
  52. package/esm2022/lib/core/navigation/nav.service.mjs +3 -3
  53. package/esm2022/lib/core/selection.mjs +3 -3
  54. package/esm2022/lib/core/touch.mjs +3 -3
  55. package/esm2022/lib/core/utils.mjs +3 -3
  56. package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +3 -3
  57. package/esm2022/lib/date-common/picker-base.directive.mjs +3 -3
  58. package/esm2022/lib/date-common/picker-icons.common.mjs +9 -9
  59. package/esm2022/lib/date-picker/date-picker.component.mjs +3 -3
  60. package/esm2022/lib/date-picker/date-picker.module.mjs +4 -4
  61. package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +15 -15
  62. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +3 -3
  63. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +4 -4
  64. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  65. package/esm2022/lib/dialog/dialog.directives.mjs +6 -6
  66. package/esm2022/lib/dialog/dialog.module.mjs +4 -4
  67. package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +3 -3
  68. package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +4 -4
  69. package/esm2022/lib/directives/button/button.directive.mjs +3 -3
  70. package/esm2022/lib/directives/button/button.module.mjs +4 -4
  71. package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +3 -3
  72. package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +4 -4
  73. package/esm2022/lib/directives/divider/divider.directive.mjs +3 -3
  74. package/esm2022/lib/directives/divider/divider.module.mjs +4 -4
  75. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +12 -12
  76. package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +4 -4
  77. package/esm2022/lib/directives/filter/filter.directive.mjs +6 -6
  78. package/esm2022/lib/directives/filter/filter.module.mjs +4 -4
  79. package/esm2022/lib/directives/focus/focus.directive.mjs +3 -3
  80. package/esm2022/lib/directives/focus/focus.module.mjs +4 -4
  81. package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +3 -3
  82. package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +4 -4
  83. package/esm2022/lib/directives/for-of/base.helper.component.mjs +3 -3
  84. package/esm2022/lib/directives/for-of/display.container.mjs +3 -3
  85. package/esm2022/lib/directives/for-of/for_of.directive.mjs +6 -6
  86. package/esm2022/lib/directives/for-of/for_of.module.mjs +4 -4
  87. package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +6 -6
  88. package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +3 -3
  89. package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +3 -3
  90. package/esm2022/lib/directives/form-control/form-control.directive.mjs +3 -3
  91. package/esm2022/lib/directives/form-control/form-control.module.mjs +4 -4
  92. package/esm2022/lib/directives/hint/hint.directive.mjs +3 -3
  93. package/esm2022/lib/directives/input/input.directive.mjs +3 -3
  94. package/esm2022/lib/directives/label/label.directive.mjs +3 -3
  95. package/esm2022/lib/directives/layout/layout.directive.mjs +6 -6
  96. package/esm2022/lib/directives/layout/layout.module.mjs +4 -4
  97. package/esm2022/lib/directives/mask/mask-parsing.service.mjs +3 -3
  98. package/esm2022/lib/directives/mask/mask.directive.mjs +3 -3
  99. package/esm2022/lib/directives/mask/mask.module.mjs +4 -4
  100. package/esm2022/lib/directives/notification/notifications.directive.mjs +3 -3
  101. package/esm2022/lib/directives/prefix/prefix.directive.mjs +3 -3
  102. package/esm2022/lib/directives/radio/radio-group.directive.mjs +3 -3
  103. package/esm2022/lib/directives/radio/radio-group.module.mjs +4 -4
  104. package/esm2022/lib/directives/ripple/ripple.directive.mjs +3 -3
  105. package/esm2022/lib/directives/ripple/ripple.module.mjs +4 -4
  106. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +3 -3
  107. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +4 -4
  108. package/esm2022/lib/directives/suffix/suffix.directive.mjs +3 -3
  109. package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +3 -3
  110. package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +3 -3
  111. package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +4 -4
  112. package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +3 -3
  113. package/esm2022/lib/directives/text-selection/text-selection.module.mjs +4 -4
  114. package/esm2022/lib/directives/toggle/toggle.directive.mjs +9 -9
  115. package/esm2022/lib/directives/toggle/toggle.module.mjs +4 -4
  116. package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +3 -3
  117. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +3 -3
  118. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +3 -3
  119. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +4 -4
  120. package/esm2022/lib/drop-down/drop-down-group.component.mjs +3 -3
  121. package/esm2022/lib/drop-down/drop-down-item.base.mjs +3 -3
  122. package/esm2022/lib/drop-down/drop-down-item.component.mjs +3 -3
  123. package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +3 -3
  124. package/esm2022/lib/drop-down/drop-down.base.mjs +3 -3
  125. package/esm2022/lib/drop-down/drop-down.component.mjs +3 -3
  126. package/esm2022/lib/drop-down/drop-down.module.mjs +4 -4
  127. package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +3 -3
  128. package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +3 -3
  129. package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +3 -3
  130. package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +3 -3
  131. package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +9 -9
  132. package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +4 -4
  133. package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +3 -3
  134. package/esm2022/lib/grids/api.service.mjs +3 -3
  135. package/esm2022/lib/grids/cell.component.mjs +3 -3
  136. package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +3 -3
  137. package/esm2022/lib/grids/column-actions/column-actions.component.mjs +12 -12
  138. package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +3 -3
  139. package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +3 -3
  140. package/esm2022/lib/grids/columns/column-group.component.mjs +3 -3
  141. package/esm2022/lib/grids/columns/column-layout.component.mjs +3 -3
  142. package/esm2022/lib/grids/columns/column.component.mjs +3 -3
  143. package/esm2022/lib/grids/columns/templates.directive.mjs +24 -24
  144. package/esm2022/lib/grids/columns/validators.directive.mjs +21 -21
  145. package/esm2022/lib/grids/common/crud.service.mjs +3 -3
  146. package/esm2022/lib/grids/common/pipes.mjs +54 -54
  147. package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +3 -3
  148. package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +3 -3
  149. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
  150. package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +3 -3
  151. package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +3 -3
  152. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +3 -3
  153. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +3 -3
  154. package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +3 -3
  155. package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +3 -3
  156. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +9 -9
  157. package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +3 -3
  158. package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +3 -3
  159. package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +3 -3
  160. package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +3 -3
  161. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -6
  162. package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +3 -3
  163. package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +3 -3
  164. package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +3 -3
  165. package/esm2022/lib/grids/grid/expandable-cell.component.mjs +3 -3
  166. package/esm2022/lib/grids/grid/grid-api.service.mjs +3 -3
  167. package/esm2022/lib/grids/grid/grid-row.component.mjs +3 -3
  168. package/esm2022/lib/grids/grid/grid-validation.service.mjs +3 -3
  169. package/esm2022/lib/grids/grid/grid.component.mjs +3 -3
  170. package/esm2022/lib/grids/grid/grid.details.pipe.mjs +3 -3
  171. package/esm2022/lib/grids/grid/grid.module.mjs +4 -4
  172. package/esm2022/lib/grids/grid/grid.pipes.mjs +12 -12
  173. package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +3 -3
  174. package/esm2022/lib/grids/grid/groupby-row.component.mjs +3 -3
  175. package/esm2022/lib/grids/grid-base.directive.mjs +3 -3
  176. package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +3 -3
  177. package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +3 -3
  178. package/esm2022/lib/grids/grid-navigation.service.mjs +3 -3
  179. package/esm2022/lib/grids/grid.common.mjs +3 -3
  180. package/esm2022/lib/grids/grid.directives.mjs +33 -33
  181. package/esm2022/lib/grids/grid.rowEdit.directive.mjs +15 -15
  182. package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +3 -3
  183. package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +6 -6
  184. package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +3 -3
  185. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +3 -3
  186. package/esm2022/lib/grids/headers/grid-header-row.component.mjs +3 -3
  187. package/esm2022/lib/grids/headers/grid-header.component.mjs +3 -3
  188. package/esm2022/lib/grids/headers/pipes.mjs +9 -9
  189. package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +3 -3
  190. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
  191. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +3 -3
  192. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
  193. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +31 -24
  194. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +4 -4
  195. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +6 -6
  196. package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +3 -3
  197. package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +3 -3
  198. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +3 -3
  199. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
  200. package/esm2022/lib/grids/moving/moving.drop.directive.mjs +3 -3
  201. package/esm2022/lib/grids/moving/moving.service.mjs +3 -3
  202. package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +3 -3
  203. package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +3 -3
  204. package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +3 -3
  205. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +3 -3
  206. package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +3 -3
  207. package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +4 -4
  208. package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +30 -30
  209. package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +3 -3
  210. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +3 -3
  211. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +3 -3
  212. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +3 -3
  213. package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +3 -3
  214. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +3 -3
  215. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +3 -3
  216. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +3 -3
  217. package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +3 -3
  218. package/esm2022/lib/grids/resizing/resizer.component.mjs +3 -3
  219. package/esm2022/lib/grids/resizing/resizer.directive.mjs +3 -3
  220. package/esm2022/lib/grids/resizing/resizing.service.mjs +3 -3
  221. package/esm2022/lib/grids/row-drag.directive.mjs +9 -9
  222. package/esm2022/lib/grids/row.directive.mjs +3 -3
  223. package/esm2022/lib/grids/selection/drag-select.directive.mjs +3 -3
  224. package/esm2022/lib/grids/selection/row-selectors.mjs +9 -9
  225. package/esm2022/lib/grids/selection/selection.service.mjs +3 -3
  226. package/esm2022/lib/grids/state.directive.mjs +3 -3
  227. package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +3 -3
  228. package/esm2022/lib/grids/summaries/grid-summary.service.mjs +3 -3
  229. package/esm2022/lib/grids/summaries/summary-cell.component.mjs +3 -3
  230. package/esm2022/lib/grids/summaries/summary-row.component.mjs +3 -3
  231. package/esm2022/lib/grids/toolbar/common.mjs +15 -15
  232. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +3 -3
  233. package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +3 -3
  234. package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +3 -3
  235. package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +3 -3
  236. package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +6 -6
  237. package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +3 -3
  238. package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +3 -3
  239. package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +3 -3
  240. package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +3 -3
  241. package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +3 -3
  242. package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +3 -3
  243. package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +3 -3
  244. package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +3 -3
  245. package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +3 -3
  246. package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +4 -4
  247. package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +21 -21
  248. package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +3 -3
  249. package/esm2022/lib/icon/icon.component.mjs +3 -3
  250. package/esm2022/lib/icon/icon.module.mjs +4 -4
  251. package/esm2022/lib/icon/icon.service.mjs +3 -3
  252. package/esm2022/lib/input-group/input-group.component.mjs +3 -3
  253. package/esm2022/lib/input-group/input-group.module.mjs +4 -4
  254. package/esm2022/lib/list/list-item.component.mjs +3 -3
  255. package/esm2022/lib/list/list.common.mjs +15 -15
  256. package/esm2022/lib/list/list.component.mjs +18 -18
  257. package/esm2022/lib/list/list.module.mjs +4 -4
  258. package/esm2022/lib/navbar/navbar.component.mjs +9 -9
  259. package/esm2022/lib/navbar/navbar.module.mjs +4 -4
  260. package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +3 -3
  261. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +9 -9
  262. package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +4 -4
  263. package/esm2022/lib/paginator/paginator-interfaces.mjs +3 -3
  264. package/esm2022/lib/paginator/paginator.component.mjs +12 -12
  265. package/esm2022/lib/paginator/paginator.module.mjs +4 -4
  266. package/esm2022/lib/progressbar/progressbar.common.mjs +6 -6
  267. package/esm2022/lib/progressbar/progressbar.component.mjs +9 -9
  268. package/esm2022/lib/progressbar/progressbar.module.mjs +4 -4
  269. package/esm2022/lib/query-builder/query-builder-header.component.mjs +3 -3
  270. package/esm2022/lib/query-builder/query-builder.component.mjs +6 -6
  271. package/esm2022/lib/query-builder/query-builder.module.mjs +4 -4
  272. package/esm2022/lib/radio/radio.component.mjs +3 -3
  273. package/esm2022/lib/select/select-group.component.mjs +3 -3
  274. package/esm2022/lib/select/select-item.component.mjs +3 -3
  275. package/esm2022/lib/select/select-navigation.directive.mjs +3 -3
  276. package/esm2022/lib/select/select.component.mjs +12 -12
  277. package/esm2022/lib/select/select.module.mjs +4 -4
  278. package/esm2022/lib/services/animation/angular-animation-service.mjs +3 -3
  279. package/esm2022/lib/services/csv/csv-exporter.mjs +3 -3
  280. package/esm2022/lib/services/direction/directionality.mjs +3 -3
  281. package/esm2022/lib/services/excel/excel-exporter.mjs +3 -3
  282. package/esm2022/lib/services/excel/excel-files.mjs +5 -4
  283. package/esm2022/lib/services/exporter-common/base-export-service.mjs +2 -2
  284. package/esm2022/lib/services/overlay/overlay.mjs +3 -3
  285. package/esm2022/lib/services/transaction/transaction-factory.service.mjs +6 -6
  286. package/esm2022/lib/simple-combo/simple-combo.component.mjs +3 -3
  287. package/esm2022/lib/simple-combo/simple-combo.module.mjs +4 -4
  288. package/esm2022/lib/slider/label/thumb-label.component.mjs +3 -3
  289. package/esm2022/lib/slider/slider.common.mjs +9 -9
  290. package/esm2022/lib/slider/slider.component.mjs +3 -3
  291. package/esm2022/lib/slider/slider.module.mjs +4 -4
  292. package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +3 -3
  293. package/esm2022/lib/slider/ticks/tick.pipe.mjs +3 -3
  294. package/esm2022/lib/slider/ticks/ticks.component.mjs +3 -3
  295. package/esm2022/lib/snackbar/snackbar.component.mjs +3 -3
  296. package/esm2022/lib/snackbar/snackbar.module.mjs +4 -4
  297. package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +3 -3
  298. package/esm2022/lib/splitter/splitter.component.mjs +6 -6
  299. package/esm2022/lib/splitter/splitter.module.mjs +4 -4
  300. package/esm2022/lib/stepper/step/step.component.mjs +3 -3
  301. package/esm2022/lib/stepper/stepper.component.mjs +3 -3
  302. package/esm2022/lib/stepper/stepper.directive.mjs +21 -21
  303. package/esm2022/lib/stepper/stepper.module.mjs +4 -4
  304. package/esm2022/lib/stepper/stepper.service.mjs +3 -3
  305. package/esm2022/lib/switch/switch.component.mjs +3 -3
  306. package/esm2022/lib/switch/switch.module.mjs +4 -4
  307. package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +3 -3
  308. package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +3 -3
  309. package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +3 -3
  310. package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +3 -3
  311. package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +6 -6
  312. package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +4 -4
  313. package/esm2022/lib/tabs/tab-content.directive.mjs +3 -3
  314. package/esm2022/lib/tabs/tab-header.directive.mjs +3 -3
  315. package/esm2022/lib/tabs/tab-item.directive.mjs +3 -3
  316. package/esm2022/lib/tabs/tabs/tab-content.component.mjs +3 -3
  317. package/esm2022/lib/tabs/tabs/tab-header.component.mjs +3 -3
  318. package/esm2022/lib/tabs/tabs/tab-item.component.mjs +3 -3
  319. package/esm2022/lib/tabs/tabs/tabs.component.mjs +3 -3
  320. package/esm2022/lib/tabs/tabs/tabs.directives.mjs +6 -6
  321. package/esm2022/lib/tabs/tabs/tabs.module.mjs +4 -4
  322. package/esm2022/lib/tabs/tabs.directive.mjs +3 -3
  323. package/esm2022/lib/time-picker/time-picker.component.mjs +3 -3
  324. package/esm2022/lib/time-picker/time-picker.directives.mjs +6 -6
  325. package/esm2022/lib/time-picker/time-picker.module.mjs +4 -4
  326. package/esm2022/lib/time-picker/time-picker.pipes.mjs +6 -6
  327. package/esm2022/lib/toast/toast.component.mjs +3 -3
  328. package/esm2022/lib/toast/toast.module.mjs +4 -4
  329. package/esm2022/lib/tree/tree-navigation.service.mjs +3 -3
  330. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +6 -6
  331. package/esm2022/lib/tree/tree-selection.service.mjs +3 -3
  332. package/esm2022/lib/tree/tree.component.mjs +9 -9
  333. package/esm2022/lib/tree/tree.module.mjs +4 -4
  334. package/esm2022/lib/tree/tree.service.mjs +3 -3
  335. package/fesm2022/igniteui-angular.mjs +1640 -1620
  336. package/fesm2022/igniteui-angular.mjs.map +1 -1
  337. package/lib/core/density.d.ts +0 -1
  338. package/lib/core/styles/components/button/_button-theme.scss +0 -6
  339. package/lib/core/styles/components/grid/_excel-filtering-theme.scss +5 -0
  340. package/lib/core/styles/components/grid/_grid-theme.scss +6 -0
  341. package/lib/directives/autocomplete/autocomplete.directive.d.ts +1 -1
  342. package/lib/grids/filtering/base/grid-filtering-row.component.d.ts +2 -2
  343. package/lib/grids/filtering/excel-style/excel-style-default-expression.component.d.ts +1 -1
  344. package/lib/grids/filtering/excel-style/excel-style-filtering.component.d.ts +1 -1
  345. package/lib/grids/grid-base.directive.d.ts +1 -1
  346. package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +4 -0
  347. package/lib/tabs/tab-content.directive.d.ts +1 -1
  348. package/package.json +1 -1
  349. package/schematics/tsconfig.tsbuildinfo +1 -1
  350. package/styles/igniteui-bootstrap-dark.css +1 -1
  351. package/styles/igniteui-bootstrap-light.css +1 -1
  352. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  353. package/styles/maps/igniteui-angular.css.map +1 -1
  354. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  355. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  356. package/styles/maps/igniteui-dark-green.css.map +1 -1
  357. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  358. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  359. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  360. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  361. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  362. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  363. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  364. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -733,10 +733,10 @@ export class IgxGridNavigationService {
733
733
  isAddKey(key) {
734
734
  return ROW_ADD_KEYS.has(key);
735
735
  }
736
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridNavigationService, deps: [{ token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Injectable }); }
737
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridNavigationService }); }
736
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridNavigationService, deps: [{ token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Injectable }); }
737
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridNavigationService }); }
738
738
  }
739
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridNavigationService, decorators: [{
739
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridNavigationService, decorators: [{
740
740
  type: Injectable
741
741
  }], ctorParameters: () => [{ type: i1.PlatformUtil }] });
742
742
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUNILGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlCLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXRGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFjdkUsY0FBYztBQUVkLE1BQU0sT0FBTyx3QkFBd0I7SUFNakMsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsS0FBa0I7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQXNCLFFBQXNCO1FBQXRCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFackMsZ0JBQVcsR0FBZ0IsRUFBaUIsQ0FBQztRQUM3QyxtQkFBYyxHQUFnQixFQUFpQixDQUFDO1FBQzdDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztJQVVZLENBQUM7SUFFMUMsZ0JBQWdCLENBQUMsS0FBb0I7UUFDeEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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QUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUgsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUMvQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RyxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDM0IsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7OEdBcHdCUSx3QkFBd0I7a0hBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBOQVZJR0FUSU9OX0tFWVMsXG4gICAgUk9XX0NPTExBUFNFX0tFWVMsXG4gICAgUk9XX0VYUEFORF9LRVlTLFxuICAgIFNVUFBPUlRFRF9LRVlTLFxuICAgIEhPUklaT05UQUxfTkFWX0tFWVMsXG4gICAgSEVBREVSX0tFWVMsXG4gICAgUk9XX0FERF9LRVlTLFxuICAgIFBsYXRmb3JtVXRpbFxufSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSwgR3JpZFNlbGVjdGlvbk1vZGUsIEZpbHRlck1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncm91cGJ5LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU11bHRpUm93TGF5b3V0Tm9kZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkdyb3Vwc0NhY2hlIHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHZpc2libGVJbmRleDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZlTm9kZSB7XG4gICAgZ3JpZElEPzogc3RyaW5nO1xuICAgIHJvdzogbnVtYmVyO1xuICAgIGNvbHVtbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBtY2hDYWNoZT86IENvbHVtbkdyb3Vwc0NhY2hlO1xuICAgIGxheW91dD86IElNdWx0aVJvd0xheW91dE5vZGU7XG59XG5cbi8qKiBAaGlkZGVuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIF9hY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSA9IHt9IGFzIElBY3RpdmVOb2RlO1xuICAgIHB1YmxpYyBsYXN0QWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUgPSB7fSBhcyBJQWN0aXZlTm9kZTtcbiAgICBwcm90ZWN0ZWQgcGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhY3RpdmVOb2RlKHZhbHVlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHsgfVxuXG4gICAgcHVibGljIGhhbmRsZU5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCAmJiBOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0ICYmIFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwYXRjaEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSB8fCAhKFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkgJiYgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmlzRGF0YVJvdyh0aGlzLmFjdGl2ZU5vZGUucm93KSA/ICdkYXRhQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3codGhpcy5hY3RpdmVOb2RlLnJvdywgdHJ1ZSkgPyAnc3VtbWFyeUNlbGwnIDogJ2dyb3VwUm93JztcbiAgICAgICAgaWYgKHRoaXMuZW1pdEtleURvd24odHlwZSwgdGhpcy5hY3RpdmVOb2RlLnJvdywgZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBbHQoa2V5LCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsnICcsICdzcGFjZWJhcicsICdzcGFjZSddLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmtleWJvYXJkU3RhdGVPbktleWRvd24odGhpcy5hY3RpdmVOb2RlLCBzaGlmdCwgc2hpZnQgJiYga2V5ID09PSAndGFiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE5leHRQb3NpdGlvbih0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBldmVudCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlSW5Cb2R5KHBvc2l0aW9uLnJvd0luZGV4LCBwb3NpdGlvbi5jb2xJbmRleCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIG9iai50YXJnZXQuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1bW1hcnlOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsTmF2KGV2ZW50LCBldmVudC5rZXkudG9Mb3dlckNhc2UoKSwgdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCwgJ3N1bW1hcnlDZWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGVhZGVyTmF2aWdhdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFIRUFERVJfS0VZUy5oYXMoa2V5KSB8fCB0aGlzLmFjdGl2ZU5vZGU/LnJvdyAhPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGN0cmwgPSBldmVudC5jdHJsS2V5O1xuICAgICAgICBjb25zdCBzaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICBjb25zdCBhbHQgPSBldmVudC5hbHRLZXk7XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtSGVhZGVyS2V5Q29tYmluYXRpb24odGhpcy5jdXJyZW50QWN0aXZlQ29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBhbHQsIGV2ZW50KTtcbiAgICAgICAgaWYgKHNoaWZ0IHx8IGFsdCB8fCAoY3RybCAmJiAoa2V5LmluY2x1ZGVzKCdkb3duJykgfHwga2V5LmluY2x1ZGVzKCdkb3duJykpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzQ29sdW1uR3JvdXBzKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU1DSGVhZGVyTmF2KGtleSwgY3RybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvcml6b250YWxOYXYoZXZlbnQsIGtleSwgLTEsICdoZWFkZXJDZWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNUYm9keShldmVudCkge1xuICAgICAgICBjb25zdCBncmlkUm93cyA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci50b3RhbEl0ZW1Db3VudCA/PyB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoO1xuICAgICAgICBpZiAoZ3JpZFJvd3MgPCAxKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlIHx8ICFPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZU5vZGUpLmxlbmd0aCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93ID4gZ3JpZFJvd3MgLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNMYXN0QWN0aXZlTm9kZSA9IE9iamVjdC5rZXlzKHRoaXMubGFzdEFjdGl2ZU5vZGUpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZENsZWFyU2VsZWN0aW9uID0gaGFzTGFzdEFjdGl2ZU5vZGUgJiYgKHRoaXMubGFzdEFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA+IGdyaWRSb3dzIC0gMSk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgPj0gMCAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA8IGdyaWRSb3dzID9cbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VmlzaWJsZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cpIDogdGhpcy5maXJzdFZpc2libGVOb2RlKCkpO1xuICAgICAgICAgICAgaWYgKHNob3VsZENsZWFyU2VsZWN0aW9uIHx8ICh0aGlzLmdyaWQuY2VsbFNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNsZWFyQ2VsbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqLnRhcmdldD8uYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0xhc3RBY3RpdmVOb2RlICYmICF0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RlZCh0aGlzLmxhc3RBY3RpdmVOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICAgICAgICAgICAgICByb3dTdGFydDogdGhpcy5hY3RpdmVOb2RlLnJvdywgcm93RW5kOiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5TdGFydDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgY29sdW1uRW5kOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNGaXJzdENlbGwoaGVhZGVyID0gdHJ1ZSkge1xuICAgICAgICBpZiAoKGhlYWRlciB8fCB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKSAmJiB0aGlzLmFjdGl2ZU5vZGUgJiZcbiAgICAgICAgICAgICh0aGlzLmFjdGl2ZU5vZGUucm93ID09PSAtMSB8fCB0aGlzLmFjdGl2ZU5vZGUucm93ID09PSB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgKCFoZWFkZXIgJiYgIXRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucykpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsSW50b1ZpZXcgPSB0aGlzLmxhc3RBY3RpdmVOb2RlICYmIChoZWFkZXIgJiYgdGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgIT09IC0xKSB8fFxuICAgICAgICAgICAgKCFoZWFkZXIgJiYgdGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgIT09IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUodGhpcy5maXJzdFZpc2libGVOb2RlKGhlYWRlciA/IC0xIDogdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsSW50b1ZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwodGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb2x1bW5GdWxseVZpc2libGUoY29sdW1uSW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAoY29sdW1uSW5kZXggPCAwIHx8IHRoaXMuaXNDb2x1bW5QaW5uZWQoY29sdW1uSW5kZXgsIHRoaXMuZm9yT2ZEaXIoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRDb2x1bW5VbnBpbm5lZEluZGV4KGNvbHVtbkluZGV4KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCArIDEpIC0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5kaXNwbGF5Q29udGFpbmVyV2lkdGggPCB3aWR0aCAmJiB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0ID09PSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlDb250YWluZXJXaWR0aCA+PSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCArIDEpIC0gdGhpcy5kaXNwbGF5Q29udGFpbmVyU2Nyb2xsTGVmdCAmJlxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5Q29udGFpbmVyU2Nyb2xsTGVmdCA8PSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZFBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsKHZpc2libGVDb2xJbmRleDogbnVtYmVyLCByb3dJbmRleCA9IC0xKSB7XG4gICAgICAgIGlmICh2aXNpYmxlQ29sSW5kZXggPCAwIHx8IHZpc2libGVDb2xJbmRleCA+IHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNDb2x1bW5GdWxseVZpc2libGUodmlzaWJsZUNvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXhdO1xuICAgICAgICByZXR1cm4gcm93LmV4cHJlc3Npb24gfHwgcm93LmRldGFpbHNEYXRhID8gZmFsc2UgOiAhdGhpcy5pc0NvbHVtbkZ1bGx5VmlzaWJsZSh2aXNpYmxlQ29sSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwodGFyZ2V0Um93SW5kZXg6IG51bWJlciwgX3Zpc2libGVDb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleCh0YXJnZXRSb3dJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3JvbGxSb3dJbmRleCA9IHRoaXMuZ3JpZC5oYXNQaW5uZWRSZWNvcmRzICYmIHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/XG4gICAgICAgICAgICB0YXJnZXRSb3dJbmRleCAtIHRoaXMuZ3JpZC5waW5uZWREYXRhVmlldy5sZW5ndGggOiB0YXJnZXRSb3dJbmRleDtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93ID0gdGhpcy5nZXRSb3dFbGVtZW50QnlJbmRleCh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTaXplQXQoc2Nyb2xsUm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmdyaWQuY2FsY0hlaWdodCA/IE1hdGguY2VpbCh0aGlzLmdyaWQuY2FsY0hlaWdodCkgOiAwO1xuICAgICAgICBjb25zdCBlbmRUb3BPZmZzZXQgPSB0YXJnZXRSb3cgPyB0YXJnZXRSb3cub2Zmc2V0VG9wICsgcm93SGVpZ2h0ICsgdGhpcy5jb250YWluZXJUb3BPZmZzZXQgOiBjb250YWluZXJIZWlnaHQgKyByb3dIZWlnaHQ7XG4gICAgICAgIC8vIHRoaXMgaXMgd29ya2Fyb3VuZDogZW5kVG9wT2Zmc2V0IC0gY29udGFpbmVySGVpZ2h0ID4gNSBhbmQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGg6IGNvbnRhaW5lckhlaWdodCA8IGVuZFRvcE9mZnNldFxuICAgICAgICAvLyB3aGVuIHRoZSBwYWdlIGlzIHpvb21lZCB0aGUgZ3JpZCBkb2VzIG5vdCBzY3JvbGwgdGhlIHJvdyBjb21wbGV0ZWx5IGluIHRoZSB2aWV3XG4gICAgICAgIHJldHVybiAhdGFyZ2V0Um93IHx8IHRhcmdldFJvdy5vZmZzZXRUb3AgPCBNYXRoLmFicyh0aGlzLmNvbnRhaW5lclRvcE9mZnNldClcbiAgICAgICAgICAgIHx8IGNvbnRhaW5lckhlaWdodCAmJiBlbmRUb3BPZmZzZXQgLSBjb250YWluZXJIZWlnaHQgPiA1O1xuICAgIH1cblxuICAgIHB1YmxpYyBwZXJmb3JtVmVydGljYWxTY3JvbGxUb0NlbGwocm93SW5kZXg6IG51bWJlciwgdmlzaWJsZUNvbEluZGV4ID0gLTEsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIC8vIE9ubHkgZm9yIHRvcCBwaW5uaW5nIHdlIG5lZWQgdG8gc3VidHJhY3QgcGlubmVkIGNvdW50IGJlY2F1c2UgdmlydHVhbGl6YXRpb24gaW5kZXhpbmcgZG9lc24ndCBjb3VudCBwaW5uZWQgcm93cy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsUm93SW5kZXggPSB0aGlzLmdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiB0aGlzLmdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgP1xuICAgICAgICAgICAgcm93SW5kZXggLSB0aGlzLmdyaWQucGlubmVkRGF0YVZpZXcubGVuZ3RoIDogcm93SW5kZXg7XG4gICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxUbyhzY3JvbGxSb3dJbmRleCk7XG4gICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWRcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBwZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlciwgY2I/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93TGlzdCA8IDEgJiYgdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QubGVuZ3RoIDwgMSAmJiB0aGlzLmdyaWQuaGFzQ29sdW1uR3JvdXBzKSB7XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KHZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICB3aGlsZSAoY29sdW1uLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbi5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmZvck9mRGlyKCkuaWd4Rm9yT2YuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRQZXJmb3JtSG9yaXpvbnRhbFNjcm9sbCh2aXNpYmxlQ29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZC5wYXJlbnRWaXJ0RGlyLmNodW5rTG9hZFxuICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JPZkRpcigpLnNjcm9sbFRvKHRoaXMuZ2V0Q29sdW1uVW5waW5uZWRJbmRleCh2aXNpYmxlQ29sdW1uSW5kZXgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNEYXRhUm93KHJvd0luZGV4OiBudW1iZXIsIGluY2x1ZGVTdW1tYXJ5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGN1clJvdzogYW55O1xuXG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgcm93SW5kZXggPiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4IC0gdGhpcy5ncmlkLnZpcnR1YWxpemF0aW9uU3RhdGUuc3RhcnRJbmRleF07XG4gICAgICAgICAgICBpZiAoIWN1clJvdykge1xuICAgICAgICAgICAgICAgIC8vIGlmIGRhdGEgaXMgcmVtb3RlLCByZWNvcmQgbWlnaHQgbm90IGJlIGluIHRoZSB2aWV3IHlldC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmlzUmVtb3RlICYmIHJvd0luZGV4ID49IDAgJiYgcm93SW5kZXggPD0gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1clJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChjdXJSb3cpICYmICF0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQoY3VyUm93KVxuICAgICAgICAgICAgJiYgIWN1clJvdy5jaGlsZEdyaWRzRGF0YSAmJiAoaW5jbHVkZVN1bW1hcnkgfHwgIWN1clJvdy5zdW1tYXJpZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0dyb3VwUm93KHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1clJvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFjdGl2ZU5vZGUoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBhY3RpdmVOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmFjdGl2ZU5vZGUsIGFjdGl2ZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbYWN0aXZlTm9kZS5yb3ddO1xuICAgICAgICBjb25zdCB0eXBlOiBHcmlkS2V5ZG93blRhcmdldFR5cGUgPSBhY3RpdmVOb2RlLnJvdyA8IDAgPyAnaGVhZGVyQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3coYWN0aXZlTm9kZS5yb3cpID8gJ2RhdGFDZWxsJyA6XG4gICAgICAgICAgICAgICAgY3VyclJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1cnJSb3cpID8gJ2dyb3VwUm93JyA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSb3cgJiYgdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKGN1cnJSb3cpID8gJ21hc3RlckRldGFpbFJvdycgOiAnc3VtbWFyeUNlbGwnO1xuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElBY3RpdmVOb2RlQ2hhbmdlRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLFxuICAgICAgICAgICAgbGV2ZWw6IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCxcbiAgICAgICAgICAgIHRhZzogdHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ3JpZC5hY3RpdmVOb2RlQ2hhbmdlLmVtaXQoYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgbGV0IGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjaGVja0lubmVyUHJvcCA9IChhY2l2ZU5vZGU6IENvbHVtbkdyb3Vwc0NhY2hlIHwgSU11bHRpUm93TGF5b3V0Tm9kZSwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhY2l2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhY2l2ZU5vZGUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU5vZGVbcHJvcF1bcHJvcE5hbWVdICE9PSBhY2l2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFjdGl2ZU5vZGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIHByb3BzKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdICYmIHR5cGVvZiB0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNoZWNrSW5uZXJQcm9wKGFjdGl2ZU5vZGVbcHJvcE5hbWVdLCBwcm9wTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gIT09IGFjdGl2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0NoYW5nZWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5leHRQb3NpdGlvbihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZywgc2hpZnQ6IGJvb2xlYW4sIGN0cmw6IGJvb2xlYW4sIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgsIHRydWUpICYmIChrZXkuaW5kZXhPZignZG93bicpIDwgMCB8fCBrZXkuaW5kZXhPZigndXAnKSA8IDApICYmIGN0cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjb2xJbmRleCB9O1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdwYWdlZG93bic6XG4gICAgICAgICAgICBjYXNlICdwYWdldXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUHJldlBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdENlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRpdENlbGwgJiYgdGhpcy5ncmlkLnJvd0xpc3QubWFwKHIgPT4gci5pbmRleCkuaW5kZXhPZihlZGl0Q2VsbC5yb3dJbmRleCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFZGl0aW5nKHNoaWZ0LCBldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZExhc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3c7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmxhc3RDb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZEZpcnN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93bGVmdCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyAwIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyB0aGlzLmxhc3RDb2x1bW5JbmRleCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gKyAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICAgICAgaWYgKGN0cmwgJiYgIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kRmlyc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3cgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgICAgICAgIGlmICgoY3RybCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kTGFzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgICBjYXNlICdmMic6XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkgfHwgIWNlbGwuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgICBjYXNlICdlc2MnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSB8fCB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kRWRpdChmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0VkZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICBjYXNlICdzcGFjZWJhcic6XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLmFjdGl2ZU5vZGUucm93KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzUm93U2VsZWN0YWJsZSAmJiByb3dPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd09iai5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd09iai5rZXksIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93QnlJZChyb3dPYmoua2V5LCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzR3JvdXBSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoKHJvd09iaiBhcyBhbnkpIGFzIElneEdyaWRHcm91cEJ5Um93Q29tcG9uZW50KS5vbkdyb3VwU2VsZWN0b3JDbGljayhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByb3dJbmRleCwgY29sSW5kZXggfTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaG9yaXpvbnRhbE5hdihldmVudDogS2V5Ym9hcmRFdmVudCwga2V5OiBzdHJpbmcsIHJvd0luZGV4OiBudW1iZXIsIHRhZzogR3JpZEtleWRvd25UYXJnZXRUeXBlKSB7XG4gICAgICAgIGNvbnN0IGN0cmwgPSBldmVudC5jdHJsS2V5O1xuICAgICAgICBpZiAoIUhPUklaT05UQUxfTkFWX0tFWVMuaGFzKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlTm9kZS5yb3cgPSByb3dJbmRleDtcbiAgICAgICAgaWYgKHJvd0luZGV4ID4gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW1pdEtleURvd24oJ3N1bW1hcnlDZWxsJywgdGhpcy5hY3RpdmVOb2RlLnJvdywgZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3QWN0aXZlTm9kZSA9IHtcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbixcbiAgICAgICAgICAgIG1jaENhY2hlOiB7XG4gICAgICAgICAgICAgICAgbGV2ZWw6IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCxcbiAgICAgICAgICAgICAgICB2aXNpYmxlSW5kZXg6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygnbGVmdCcpIHx8IGtleSA9PT0gJ2hvbWUnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID4gMCkge1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5jb2x1bW4gPSBjdHJsIHx8IGtleSA9PT0gJ2hvbWUnID8gMCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gLSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdyaWdodCcpIHx8IGtleSA9PT0gJ2VuZCcpICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPCB0aGlzLmxhc3RDb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5jb2x1bW4gPSBjdHJsIHx8IGtleSA9PT0gJ2VuZCcgPyB0aGlzLmxhc3RDb2x1bW5JbmRleCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZyA9PT0gJ2hlYWRlckNlbGwnKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgobmV3QWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5tY2hDYWNoZS5sZXZlbCA9IGNvbHVtbi5sZXZlbDtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUubWNoQ2FjaGUudmlzaWJsZUluZGV4ID0gY29sdW1uLnZpc2libGVJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh7IHJvdzogdGhpcy5hY3RpdmVOb2RlLnJvdywgY29sdW1uOiBuZXdBY3RpdmVOb2RlLmNvbHVtbiwgbWNoQ2FjaGU6IG5ld0FjdGl2ZU5vZGUubWNoQ2FjaGUgfSk7XG4gICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwodGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYXN0Q29sdW1uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMubWFwKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4KSk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUNvbnRhaW5lcldpZHRoKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmdyaWQucGFyZW50VmlydERpci5kYy5pbnN0YW5jZS5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuZ3JpZC5oZWFkZXJDb250YWluZXIuc2Nyb2xsUG9zaXRpb24pO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNvbnRhaW5lclRvcE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5kYy5pbnN0YW5jZS5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wLCAxMCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbHVtblVucGlubmVkSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maW5kKChjb2wpID0+ICFjb2wuY29sdW1uR3JvdXAgJiYgY29sLnZpc2libGVJbmRleCA9PT0gdmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmxlbmd0aCA/IHRoaXMuZ3JpZC51bnBpbm5lZENvbHVtbnMuZmlsdGVyKChjKSA9PiAhYy5jb2x1bW5Hcm91cCkuaW5kZXhPZihjb2x1bW4pIDpcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5JbmRleDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9yT2ZEaXIoKTogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZvck9mRGlyID0gdGhpcy5ncmlkLmRhdGFSb3dMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmlyc3QudmlydERpclJvdyA6IHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0Lmxlbmd0aCA/XG4gICAgICAgICAgICB0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC5maXJzdC52aXJ0RGlyUm93IDogdGhpcy5ncmlkLmhlYWRlckNvbnRhaW5lcjtcbiAgICAgICAgcmV0dXJuIGZvck9mRGlyIGFzIElneEZvck9mRGlyZWN0aXZlPGFueT47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUFsdChrZXk6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgLy8gdG9kbyBUT0RPIFJPV1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHRoaXMuYWN0aXZlTm9kZS5yb3cpO1xuXG4gICAgICAgIGlmICghKHRoaXMuaXNUb2dnbGVLZXkoa2V5KSB8fCB0aGlzLmlzQWRkS2V5KGtleSkpIHx8ICFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FkZEtleShrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCBiZSBpbiByb3cgZWRpdCBtb2RlIHRvIHBlcmZvcm0gcm93IGFkZGluZyEnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiByb3cudHJlZVJvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyQWRkUm93TW9kZShyb3csIHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyQWRkUm93TW9kZShyb3csIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXJvdy5leHBhbmRlZCAmJiBST1dfRVhQQU5EX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGlmIChyb3cua2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHVzZSBleHBhbmRlZCByb3cuZXhwYW5kZWQgPSAhcm93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIChyb3cgYXMgYW55KS50b2dnbGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUocm93LmtleSwgdHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJvdy5leHBhbmRlZCAmJiBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgaWYgKHJvdy5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gdXNlIGV4cGFuZGVkIHJvdy5leHBhbmRlZCA9ICFyb3cuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgKHJvdyBhcyBhbnkpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3cua2V5LCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUVkaXRpbmcoc2hpZnQ6IGJvb2xlYW4sIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBzaGlmdCA/IHRoaXMuZ3JpZC5nZXRQcmV2aW91c0NlbGwodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgY29sID0+IGNvbC5lZGl0YWJsZSkgOlxuICAgICAgICAgICAgdGhpcy5ncmlkLmdldE5leHRDZWxsKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIGNvbCA9PiBjb2wuZWRpdGFibGUpO1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlICYmIHRoaXMuaXNBY3RpdmVOb2RlKG5leHQucm93SW5kZXgsIG5leHQudmlzaWJsZUNvbHVtbkluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlICYmIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sZW5ndGgpICYmXG4gICAgICAgICAgICAodGhpcy5hY3RpdmVOb2RlLnJvdyAhPT0gbmV4dC5yb3dJbmRleCB8fCB0aGlzLmlzQWN0aXZlTm9kZShuZXh0LnJvd0luZGV4LCBuZXh0LnZpc2libGVDb2x1bW5JbmRleCkpKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGlmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sYXN0LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdFRhYnMuZmlyc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgIXRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzaGlmdCAmJiBuZXh0LnJvd0luZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUucm93ICYmIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmdyaWQubGFzdEVkaXRhYmxlQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzaGlmdCAmJiBuZXh0LnJvd0luZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUucm93ICYmIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmdyaWQuZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0LnJvd0luZGV4ID0gdGhpcy5hY3RpdmVOb2RlLnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmF2aWdhdGVJbkJvZHkobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgsIChvYmopID0+IHtcbiAgICAgICAgICAgIG9iai50YXJnZXQuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBuYXZpZ2F0ZUluQm9keShyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYjogKGFyZzogYW55KSA9PiB2b2lkID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZFBvc2l0aW9uKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpIHx8IHRoaXMuaXNBY3RpdmVOb2RlKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgIH1cblxuXG4gICAgcHJvdGVjdGVkIGVtaXRLZXlEb3duKHR5cGU6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSwgcm93SW5kZXgsIGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LnRvQXJyYXkoKS5jb25jYXQodGhpcy5ncmlkLnJvd0xpc3QudG9BcnJheSgpKS5maW5kKHIgPT4gci5pbmRleCA9PT0gcm93SW5kZXgpO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHlwZSA9PT0gJ2dyb3VwUm93JyA/IHJvdyA6XG4gICAgICAgICAgICB0eXBlID09PSAnZGF0YUNlbGwnID8gcm93LmNlbGxzPy5maW5kKGMgPT4gYy52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIDpcbiAgICAgICAgICAgICAgICByb3cuc3VtbWFyeUNlbGxzPy5maW5kKGMgPT4gYy52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICBjb25zdCBrZXlkb3duQXJncyA9IHsgdGFyZ2V0VHlwZTogdHlwZSwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIHRhcmdldCB9O1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEtleWRvd24uZW1pdChrZXlkb3duQXJncyk7XG4gICAgICAgIGlmIChrZXlkb3duQXJncy5jYW5jZWwgJiYgdHlwZSA9PT0gJ2RhdGFDZWxsJykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmtleWJvYXJkU3RhdGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBrZXlkb3duQXJncy5jYW5jZWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNDb2x1bW5QaW5uZWQoY29sdW1uSW5kZXg6IG51bWJlciwgZm9yT2ZEaXI6IElneEZvck9mRGlyZWN0aXZlPGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbCA9IGZvck9mRGlyLmdldFNjcm9sbCgpO1xuICAgICAgICByZXR1cm4gKCFob3Jpem9udGFsU2Nyb2xsLmNsaWVudFdpZHRoIHx8IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleChjb2x1bW5JbmRleCk/LnBpbm5lZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRGaXJzdERhdGFSb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFWaWV3LmZpbmRJbmRleChyZWMgPT4gIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocmVjKSAmJiAhdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKHJlYykgJiYgIXJlYy5zdW1tYXJpZXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmaW5kTGFzdERhdGFSb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVJvdyhpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJvd0VsZW1lbnRCeUluZGV4KGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzRGV0YWlscykge1xuICAgICAgICAgICAgY29uc3QgZGV0YWlsID0gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RldGFpbD1cInRydWVcIl1bZGF0YS1yb3dpbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICBpZiAoZGV0YWlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRldGFpbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0xpc3QudG9BcnJheSgpLmNvbmNhdCh0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC50b0FycmF5KCkpLmZpbmQociA9PiByLmluZGV4ID09PSBpbmRleCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzVmFsaWRQb3NpdGlvbihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9ICh0aGlzLmdyaWQgYXMgYW55KS50b3RhbEl0ZW1Db3VudCA/PyB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoO1xuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IGNvbEluZGV4IDwgMCB8fCBsZW5ndGggLSAxIDwgcm93SW5kZXggfHwgdGhpcy5sYXN0Q29sdW1uSW5kZXggPCBjb2xJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICE9PSBjb2xJbmRleCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgsIHRydWUpID8gZmFsc2UgOiB0cnVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcGVyZm9ybUhlYWRlcktleUNvbWJpbmF0aW9uKGNvbHVtbiwga2V5LCBzaGlmdCwgY3RybCwgYWx0LCBldmVudCkge1xuICAgICAgICBsZXQgZGlyZWN0aW9uID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5maW5kKGV4cHIgPT4gZXhwci5maWVsZE5hbWUgPT09IGNvbHVtbi5maWVsZCk/LmRpcjtcbiAgICAgICAgaWYgKGN0cmwgJiYga2V5LmluY2x1ZGVzKCd1cCcpICYmIGNvbHVtbi5zb3J0YWJsZSAmJiAhY29sdW1uLmNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uQXNjID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogU29ydGluZ0RpcmVjdGlvbi5Bc2M7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydCh7IGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLCBkaXI6IGRpcmVjdGlvbiwgaWdub3JlQ2FzZTogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0cmwgJiYga2V5LmluY2x1ZGVzKCdkb3duJykgJiYgY29sdW1uLnNvcnRhYmxlICYmICFjb2x1bW4uY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gU29ydGluZ0RpcmVjdGlvbi5EZXNjID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogU29ydGluZ0RpcmVjdGlvbi5EZXNjO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnQoeyBmaWVsZE5hbWU6IGNvbHVtbi5maWVsZCwgZGlyOiBkaXJlY3Rpb24sIGlnbm9yZUNhc2U6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGlmdCAmJiBhbHQgJiYgdGhpcy5pc1RvZ2dsZUtleShrZXkpICYmICFjb2x1bW4uY29sdW1uR3JvdXAgJiYgY29sdW1uLmdyb3VwYWJsZSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IFNvcnRpbmdEaXJlY3Rpb24uQXNjO1xuICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygncmlnaHQnKSkge1xuICAgICAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgYW55KS5ncm91cEJ5KHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGRpcjogZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBjb2x1bW4uc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBjb2x1bW4uc29ydFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvbXBhcmVyOiBjb2x1bW4uZ3JvdXBpbmdDb21wYXJlcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLmNsZWFyR3JvdXBpbmcoY29sdW1uLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPSBrZXkuaW5jbHVkZXMoJ3JpZ2h0JykgJiYgKHRoaXMuZ3JpZCBhcyBhbnkpLmhpZGVHcm91cGVkQ29sdW1ucyAmJlxuICAgICAgICAgICAgICAgIGNvbHVtbi52aXNpYmxlSW5kZXggPT09IHRoaXMubGFzdENvbHVtbkluZGV4ID8gdGhpcy5sYXN0Q29sdW1uSW5kZXggLSAxIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWx0ICYmIChST1dfRVhQQU5EX0tFWVMuaGFzKGtleSkgfHwgUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU1DSEV4cGFuZENvbGxhcHNlKGtleSwgY29sdW1uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoWycgJywgJ3NwYWNlYmFyJywgJ3NwYWNlJ10uaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb2x1bW5TZWxlY3Rpb24oY29sdW1uLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsdCAmJiAoa2V5ID09PSAnbCcgfHwga2V5ID09PSAnwqwnKSAmJiB0aGlzLmdyaWQuYWxsb3dBZHZhbmNlZEZpbHRlcmluZykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLm9wZW5BZHZhbmNlZEZpbHRlcmluZ0RpYWxvZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHJsICYmIHNoaWZ0ICYmIGtleSA9PT0gJ2wnICYmIHRoaXMuZ3JpZC5hbGxvd0ZpbHRlcmluZyAmJiAhY29sdW1uLmNvbHVtbkdyb3VwICYmIGNvbHVtbi5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmZpbHRlck1vZGUgPT09IEZpbHRlck1vZGUuZXhjZWxTdHlsZUZpbHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckVsID0gdGhpcy5ncmlkLmhlYWRlckdyb3Vwcy5maW5kKGcgPT4gZy5hY3RpdmUpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UudG9nZ2xlRmlsdGVyRHJvcGRvd24oaGVhZGVyRWwsIGNvbHVtbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwoY29sdW1uLnZpc2libGVJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmlyc3RWaXNpYmxlTm9kZShyb3dJbmRleD8pIHtcbiAgICAgICAgY29uc3QgY29sSW5kZXggPSB0aGlzLmxhc3RBY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5sYXN0QWN0aXZlTm9kZS5jb2x1bW4gOlxuICAgICAgICAgICAgdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLnNvcnQoKGMxLCBjMikgPT4gYzEudmlzaWJsZUluZGV4IC0gYzIudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgICAgIC5maW5kKGMgPT4gdGhpcy5pc0NvbHVtbkZ1bGx5VmlzaWJsZShjLnZpc2libGVJbmRleCkpPy52aXNpYmxlSW5kZXg7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5maW5kKChjb2wpID0+ICFjb2wuY29sdW1uTGF5b3V0ICYmIGNvbC52aXNpYmxlSW5kZXggPT09IGNvbEluZGV4KTtcbiAgICAgICAgY29uc3Qgcm93SW5kID0gcm93SW5kZXggPyByb3dJbmRleCA6IHRoaXMuZ3JpZC5yb3dMaXN0LmZpbmQociA9PiAhdGhpcy5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwoci5pbmRleCwgY29sSW5kZXgpKT8uaW5kZXg7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgICByb3c6IHJvd0luZCA/PyAwLFxuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4/LnZpc2libGVJbmRleCA/PyAwLCBsZXZlbDogY29sdW1uPy5sZXZlbCA/PyAwLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IGNvbHVtbiA/IHsgbGV2ZWw6IGNvbHVtbi5sZXZlbCwgdmlzaWJsZUluZGV4OiBjb2x1bW4udmlzaWJsZUluZGV4IH0gOiB7fSBhcyBDb2x1bW5Hcm91cHNDYWNoZSxcbiAgICAgICAgICAgIGxheW91dDogY29sdW1uICYmIGNvbHVtbi5jb2x1bW5MYXlvdXRDaGlsZCA/IHtcbiAgICAgICAgICAgICAgICByb3dTdGFydDogY29sdW1uLnJvd1N0YXJ0LCBjb2xTdGFydDogY29sdW1uLmNvbFN0YXJ0LFxuICAgICAgICAgICAgICAgIHJvd0VuZDogY29sdW1uLnJvd0VuZCwgY29sRW5kOiBjb2x1bW4uY29sRW5kLCBjb2x1bW5WaXNpYmxlSW5kZXg6IGNvbHVtbi52aXNpYmxlSW5kZXhcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTUNIZWFkZXJOYXYoa2V5OiBzdHJpbmcsIGN0cmw6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbmV3SGVhZGVyTm9kZTogQ29sdW1uR3JvdXBzQ2FjaGUgPSB7XG4gICAgICAgICAgICB2aXNpYmxlSW5kZXg6IHRoaXMuYWN0aXZlTm9kZS5tY2hDYWNoZS52aXNpYmxlSW5kZXgsXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdGl2ZUNvbCA9IHRoaXMuY3VycmVudEFjdGl2ZUNvbHVtbjtcbiAgICAgICAgY29uc3QgbGFzdEdyb3VwSW5kZXggPSBNYXRoLm1heCguLi4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLlxuICAgICAgICAgICAgZmlsdGVyKGMgPT4gYy5sZXZlbCA8PSB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwpLm1hcChjb2wgPT4gY29sLnZpc2libGVJbmRleCkpO1xuICAgICAgICBsZXQgbmV4dENvbCA9IGFjdGl2ZUNvbDtcbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ2xlZnQnKSB8fCBrZXkgPT09ICdob21lJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY3RybCB8fCBrZXkgPT09ICdob21lJyA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgICAgIG5leHRDb2wgPSB0aGlzLmdldE5leHRDb2x1bW5NQ0goaW5kZXgpO1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXggPSBuZXh0Q29sLnZpc2libGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygncmlnaHQnKSB8fCBrZXkgPT09ICdlbmQnKSAmJiBhY3RpdmVDb2wudmlzaWJsZUluZGV4IDwgbGFzdEdyb3VwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWSW5kZXggPSBhY3RpdmVDb2wuY2hpbGRyZW4gPyBNYXRoLm1heCguLi5hY3RpdmVDb2wuYWxsQ2hpbGRyZW4ubWFwKGMgPT4gYy52aXNpYmxlSW5kZXgpKSArIDEgOlxuICAgICAgICAgICAgICAgIGFjdGl2ZUNvbC52aXNpYmxlSW5kZXggKyAxO1xuICAgICAgICAgICAgbmV4dENvbCA9IGN0cmwgfHwga2V5ID09PSAnZW5kJyA/IHRoaXMuZ2V0TmV4dENvbHVtbk1DSCh0aGlzLmxhc3RDb2x1bW5JbmRleCkgOiB0aGlzLmdldE5leHRDb2x1bW5NQ0gobmV4dFZJbmRleCk7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCA9IG5leHRDb2wudmlzaWJsZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3RybCAmJiBrZXkuaW5jbHVkZXMoJ3VwJykgJiYgdGhpcy5hY3RpdmVOb2RlLmxldmVsID4gMCkge1xuICAgICAgICAgICAgbmV4dENvbCA9IGFjdGl2ZUNvbC5wYXJlbnQ7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLmxldmVsID0gbmV4dENvbC5sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0cmwgJiYga2V5LmluY2x1ZGVzKCdkb3duJykgJiYgYWN0aXZlQ29sLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBuZXh0Q29sID0gYWN0aXZlQ29sLmNoaWxkcmVuLmZpbmQoYyA9PiBjLnZpc2libGVJbmRleCA9PT0gbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXgpIHx8XG4gICAgICAgICAgICAgICAgYWN0aXZlQ29sLmNoaWxkcmVuLnRvQXJyYXkoKS5zb3J0KChhLCBiKSA9PiBiLnZpc2libGVJbmRleCAtIGEudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4IDwgbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXgpWzBdO1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS5sZXZlbCA9IG5leHRDb2wubGV2ZWw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUoe1xuICAgICAgICAgICAgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgY29sdW1uOiBuZXh0Q29sLnZpc2libGVJbmRleCxcbiAgICAgICAgICAgIGxldmVsOiBuZXh0Q29sLmxldmVsLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IG5ld0hlYWRlck5vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwobmV4dENvbC52aXNpYmxlSW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTUNIRXhwYW5kQ29sbGFwc2Uoa2V5LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKCFjb2x1bW4uY2hpbGRyZW4gfHwgIWNvbHVtbi5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sdW1uLmV4cGFuZGVkICYmIFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgY29sdW1uLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZXhwYW5kZWQgJiYgUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb2x1bW5TZWxlY3Rpb24oY29sdW1uLCBldmVudCkge1xuICAgICAgICBpZiAoIWNvbHVtbi5zZWxlY3RhYmxlIHx8IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm5vbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGVhclNlbGVjdGlvbiA9IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZTtcbiAgICAgICAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gIWNvbHVtbi5jaGlsZHJlbiA/IFtjb2x1bW4uZmllbGRdIDpcbiAgICAgICAgICAgIGNvbHVtbi5hbGxDaGlsZHJlbi5maWx0ZXIoYyA9PiAhYy5oaWRkZW4gJiYgYy5zZWxlY3RhYmxlICYmICFjLmNvbHVtbkdyb3VwKS5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1ucyhjb2x1bW5zVG9TZWxlY3QsIGNsZWFyU2VsZWN0aW9uLCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROZXh0Q29sdW1uTUNIKHZpc2libGVJbmRleCkge1xuICAgICAgICBsZXQgY29sID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KHZpc2libGVJbmRleCk7XG4gICAgICAgIGxldCBwYXJlbnQgPSBjb2wucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50ICYmIGNvbC5sZXZlbCA+IHRoaXMuYWN0aXZlTm9kZS5tY2hDYWNoZS5sZXZlbCkge1xuICAgICAgICAgICAgY29sID0gY29sLnBhcmVudDtcbiAgICAgICAgICAgIHBhcmVudCA9IGNvbC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjdXJyZW50QWN0aXZlQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmZpbmQoYyA9PiBjLnZpc2libGVJbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAmJiBjLmxldmVsID09PSB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3RpdmVOb2RlKHJJbmRleDogbnVtYmVyLCBjSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVOb2RlID8gdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gckluZGV4ICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPT09IGNJbmRleCA6IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUb2dnbGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpIHx8IFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWRkS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBST1dfQUREX0tFWVMuaGFzKGtleSk7XG4gICAgfVxufVxuIl19
@@ -5,10 +5,10 @@ import { IgxForOfSyncService } from '../directives/for-of/for_of.sync.service';
5
5
  import { scaleInVerBottom, scaleInVerTop } from 'igniteui-angular/animations';
6
6
  import * as i0 from "@angular/core";
7
7
  export class IgxGridBodyDirective {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridBodyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxGridBodyDirective, isStandalone: true, selector: "[igxGridBody]", providers: [IgxForOfSyncService], ngImport: i0 }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridBodyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
9
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxGridBodyDirective, isStandalone: true, selector: "[igxGridBody]", providers: [IgxForOfSyncService], ngImport: i0 }); }
10
10
  }
11
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridBodyDirective, decorators: [{
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridBodyDirective, decorators: [{
12
12
  type: Directive,
13
13
  args: [{
14
14
  selector: '[igxGridBody]',
@@ -12,10 +12,10 @@ export class IgxGroupByRowTemplateDirective {
12
12
  constructor(template) {
13
13
  this.template = template;
14
14
  }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupByRowTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
16
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxGroupByRowTemplateDirective, isStandalone: true, selector: "[igxGroupByRow]", ngImport: i0 }); }
15
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupByRowTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
16
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxGroupByRowTemplateDirective, isStandalone: true, selector: "[igxGroupByRow]", ngImport: i0 }); }
17
17
  }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupByRowTemplateDirective, decorators: [{
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupByRowTemplateDirective, decorators: [{
19
19
  type: Directive,
20
20
  args: [{
21
21
  selector: '[igxGroupByRow]',
@@ -29,10 +29,10 @@ export class IgxGridDetailTemplateDirective {
29
29
  static ngTemplateContextGuard(_dir, ctx) {
30
30
  return true;
31
31
  }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridDetailTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
33
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxGridDetailTemplateDirective, isStandalone: true, selector: "[igxGridDetail]", ngImport: i0 }); }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridDetailTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
33
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxGridDetailTemplateDirective, isStandalone: true, selector: "[igxGridDetail]", ngImport: i0 }); }
34
34
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridDetailTemplateDirective, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridDetailTemplateDirective, decorators: [{
36
36
  type: Directive,
37
37
  args: [{
38
38
  selector: '[igxGridDetail]',
@@ -46,10 +46,10 @@ export class IgxRowExpandedIndicatorDirective {
46
46
  static ngTemplateContextGuard(_directive, context) {
47
47
  return true;
48
48
  }
49
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowExpandedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
50
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxRowExpandedIndicatorDirective, isStandalone: true, selector: "[igxRowExpandedIndicator]", ngImport: i0 }); }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowExpandedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
50
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxRowExpandedIndicatorDirective, isStandalone: true, selector: "[igxRowExpandedIndicator]", ngImport: i0 }); }
51
51
  }
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowExpandedIndicatorDirective, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowExpandedIndicatorDirective, decorators: [{
53
53
  type: Directive,
54
54
  args: [{
55
55
  selector: '[igxRowExpandedIndicator]',
@@ -63,10 +63,10 @@ export class IgxRowCollapsedIndicatorDirective {
63
63
  static ngTemplateContextGuard(_directive, context) {
64
64
  return true;
65
65
  }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowCollapsedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
67
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxRowCollapsedIndicatorDirective, isStandalone: true, selector: "[igxRowCollapsedIndicator]", ngImport: i0 }); }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowCollapsedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
67
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxRowCollapsedIndicatorDirective, isStandalone: true, selector: "[igxRowCollapsedIndicator]", ngImport: i0 }); }
68
68
  }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowCollapsedIndicatorDirective, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowCollapsedIndicatorDirective, decorators: [{
70
70
  type: Directive,
71
71
  args: [{
72
72
  selector: '[igxRowCollapsedIndicator]',
@@ -80,10 +80,10 @@ export class IgxHeaderExpandedIndicatorDirective {
80
80
  static ngTemplateContextGuard(_directive, context) {
81
81
  return true;
82
82
  }
83
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxHeaderExpandedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
84
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxHeaderExpandedIndicatorDirective, isStandalone: true, selector: "[igxHeaderExpandedIndicator]", ngImport: i0 }); }
83
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxHeaderExpandedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
84
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxHeaderExpandedIndicatorDirective, isStandalone: true, selector: "[igxHeaderExpandedIndicator]", ngImport: i0 }); }
85
85
  }
86
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxHeaderExpandedIndicatorDirective, decorators: [{
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxHeaderExpandedIndicatorDirective, decorators: [{
87
87
  type: Directive,
88
88
  args: [{
89
89
  selector: '[igxHeaderExpandedIndicator]',
@@ -97,10 +97,10 @@ export class IgxHeaderCollapsedIndicatorDirective {
97
97
  static ngTemplateContextGuard(_directive, context) {
98
98
  return true;
99
99
  }
100
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxHeaderCollapsedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
101
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxHeaderCollapsedIndicatorDirective, isStandalone: true, selector: "[igxHeaderCollapsedIndicator]", ngImport: i0 }); }
100
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxHeaderCollapsedIndicatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
101
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxHeaderCollapsedIndicatorDirective, isStandalone: true, selector: "[igxHeaderCollapsedIndicator]", ngImport: i0 }); }
102
102
  }
103
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxHeaderCollapsedIndicatorDirective, decorators: [{
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxHeaderCollapsedIndicatorDirective, decorators: [{
104
104
  type: Directive,
105
105
  args: [{
106
106
  selector: '[igxHeaderCollapsedIndicator]',
@@ -114,10 +114,10 @@ export class IgxExcelStyleHeaderIconDirective {
114
114
  static ngTemplateContextGuard(_directive, context) {
115
115
  return true;
116
116
  }
117
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxExcelStyleHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
118
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxExcelStyleHeaderIconDirective, isStandalone: true, selector: "[igxExcelStyleHeaderIcon]", ngImport: i0 }); }
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxExcelStyleHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
118
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxExcelStyleHeaderIconDirective, isStandalone: true, selector: "[igxExcelStyleHeaderIcon]", ngImport: i0 }); }
119
119
  }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxExcelStyleHeaderIconDirective, decorators: [{
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxExcelStyleHeaderIconDirective, decorators: [{
121
121
  type: Directive,
122
122
  args: [{
123
123
  selector: '[igxExcelStyleHeaderIcon]',
@@ -131,10 +131,10 @@ export class IgxSortHeaderIconDirective {
131
131
  static ngTemplateContextGuard(_directive, context) {
132
132
  return true;
133
133
  }
134
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSortHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
135
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxSortHeaderIconDirective, isStandalone: true, selector: "[igxSortHeaderIcon]", ngImport: i0 }); }
134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSortHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
135
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxSortHeaderIconDirective, isStandalone: true, selector: "[igxSortHeaderIcon]", ngImport: i0 }); }
136
136
  }
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSortHeaderIconDirective, decorators: [{
137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSortHeaderIconDirective, decorators: [{
138
138
  type: Directive,
139
139
  args: [{
140
140
  selector: '[igxSortHeaderIcon]',
@@ -148,10 +148,10 @@ export class IgxSortAscendingHeaderIconDirective {
148
148
  static ngTemplateContextGuard(_directive, context) {
149
149
  return true;
150
150
  }
151
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSortAscendingHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
152
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxSortAscendingHeaderIconDirective, isStandalone: true, selector: "[igxSortAscendingHeaderIcon]", ngImport: i0 }); }
151
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSortAscendingHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
152
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxSortAscendingHeaderIconDirective, isStandalone: true, selector: "[igxSortAscendingHeaderIcon]", ngImport: i0 }); }
153
153
  }
154
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSortAscendingHeaderIconDirective, decorators: [{
154
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSortAscendingHeaderIconDirective, decorators: [{
155
155
  type: Directive,
156
156
  args: [{
157
157
  selector: '[igxSortAscendingHeaderIcon]',
@@ -165,10 +165,10 @@ export class IgxSortDescendingHeaderIconDirective {
165
165
  static ngTemplateContextGuard(_directive, context) {
166
166
  return true;
167
167
  }
168
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSortDescendingHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
169
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxSortDescendingHeaderIconDirective, isStandalone: true, selector: "[igxSortDescendingHeaderIcon]", ngImport: i0 }); }
168
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSortDescendingHeaderIconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
169
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxSortDescendingHeaderIconDirective, isStandalone: true, selector: "[igxSortDescendingHeaderIcon]", ngImport: i0 }); }
170
170
  }
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSortDescendingHeaderIconDirective, decorators: [{
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxSortDescendingHeaderIconDirective, decorators: [{
172
172
  type: Directive,
173
173
  args: [{
174
174
  selector: '[igxSortDescendingHeaderIcon]',
@@ -231,10 +231,10 @@ export class IgxGroupAreaDropDirective extends IgxDropDirective {
231
231
  return true;
232
232
  }
233
233
  }
234
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupAreaDropDirective, deps: [{ token: i1.IgxGroupByAreaDirective }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
235
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxGroupAreaDropDirective, isStandalone: true, selector: "[igxGroupAreaDrop]", host: { properties: { "class.igx-drop-area--hover": "this.hovered" } }, usesInheritance: true, ngImport: i0 }); }
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupAreaDropDirective, deps: [{ token: i1.IgxGroupByAreaDirective }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive }); }
235
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxGroupAreaDropDirective, isStandalone: true, selector: "[igxGroupAreaDrop]", host: { properties: { "class.igx-drop-area--hover": "this.hovered" } }, usesInheritance: true, ngImport: i0 }); }
236
236
  }
237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupAreaDropDirective, decorators: [{
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupAreaDropDirective, decorators: [{
238
238
  type: Directive,
239
239
  args: [{
240
240
  selector: '[igxGroupAreaDrop]',
@@ -6,10 +6,10 @@ export class IgxRowEditTemplateDirective {
6
6
  static ngTemplateContextGuard(_directive, context) {
7
7
  return true;
8
8
  }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
10
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxRowEditTemplateDirective, isStandalone: true, selector: "[igxRowEdit]", ngImport: i0 }); }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditTemplateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
10
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxRowEditTemplateDirective, isStandalone: true, selector: "[igxRowEdit]", ngImport: i0 }); }
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditTemplateDirective, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditTemplateDirective, decorators: [{
13
13
  type: Directive,
14
14
  args: [{
15
15
  selector: '[igxRowEdit]',
@@ -21,10 +21,10 @@ export class IgxRowEditTextDirective {
21
21
  static ngTemplateContextGuard(_directive, context) {
22
22
  return true;
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxRowEditTextDirective, isStandalone: true, selector: "[igxRowEditText]", ngImport: i0 }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxRowEditTextDirective, isStandalone: true, selector: "[igxRowEditText]", ngImport: i0 }); }
26
26
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditTextDirective, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditTextDirective, decorators: [{
28
28
  type: Directive,
29
29
  args: [{
30
30
  selector: '[igxRowEditText]',
@@ -36,10 +36,10 @@ export class IgxRowAddTextDirective {
36
36
  static ngTemplateContextGuard(_directive, context) {
37
37
  return true;
38
38
  }
39
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowAddTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
40
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxRowAddTextDirective, isStandalone: true, selector: "[igxRowAddText]", ngImport: i0 }); }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowAddTextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
40
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxRowAddTextDirective, isStandalone: true, selector: "[igxRowAddText]", ngImport: i0 }); }
41
41
  }
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowAddTextDirective, decorators: [{
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowAddTextDirective, decorators: [{
43
43
  type: Directive,
44
44
  args: [{
45
45
  selector: '[igxRowAddText]',
@@ -51,10 +51,10 @@ export class IgxRowEditActionsDirective {
51
51
  static ngTemplateContextGuard(_directive, context) {
52
52
  return true;
53
53
  }
54
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
55
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxRowEditActionsDirective, isStandalone: true, selector: "[igxRowEditActions]", ngImport: i0 }); }
54
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
55
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxRowEditActionsDirective, isStandalone: true, selector: "[igxRowEditActions]", ngImport: i0 }); }
56
56
  }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditActionsDirective, decorators: [{
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditActionsDirective, decorators: [{
58
58
  type: Directive,
59
59
  args: [{
60
60
  selector: '[igxRowEditActions]',
@@ -98,10 +98,10 @@ export class IgxRowEditTabStopDirective {
98
98
  this.grid.cdr.detectChanges();
99
99
  });
100
100
  }
101
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditTabStopDirective, deps: [{ token: IGX_GRID_BASE }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
102
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxRowEditTabStopDirective, isStandalone: true, selector: "[igxRowEditTabStop]", host: { listeners: { "keydown.Tab": "handleTab($event)", "keydown.Shift.Tab": "handleTab($event)", "keydown.Escape": "handleEscape($event)", "keydown.Enter": "handleEnter($event)" } }, ngImport: i0 }); }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditTabStopDirective, deps: [{ token: IGX_GRID_BASE }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
102
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxRowEditTabStopDirective, isStandalone: true, selector: "[igxRowEditTabStop]", host: { listeners: { "keydown.Tab": "handleTab($event)", "keydown.Shift.Tab": "handleTab($event)", "keydown.Escape": "handleEscape($event)", "keydown.Enter": "handleEnter($event)" } }, ngImport: i0 }); }
103
103
  }
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxRowEditTabStopDirective, decorators: [{
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxRowEditTabStopDirective, decorators: [{
105
105
  type: Directive,
106
106
  args: [{
107
107
  selector: `[igxRowEditTabStop]`,
@@ -38,10 +38,10 @@ export class IgxGridGroupByAreaComponent extends IgxGroupByAreaDirective {
38
38
  clearGrouping(name) {
39
39
  this.grid.clearGrouping(name);
40
40
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridGroupByAreaComponent, deps: [{ token: i0.ElementRef }, { token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: IgxGridGroupByAreaComponent, isStandalone: true, selector: "igx-grid-group-by-area", inputs: { sortingExpressions: "sortingExpressions", grid: "grid" }, providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxGridGroupByAreaComponent }], usesInheritance: true, ngImport: i0, template: "<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n <ng-container *ngFor=\"let expression of chipExpressions; let last = last;\">\n <igx-chip\n [id]=\"expression.fieldName\"\n [title]=\"(expression.fieldName | igxGroupByMeta:grid).title\"\n [displayDensity]=\"grid.displayDensity\"\n [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n (remove)=\"clearGrouping($event.owner.id)\"\n (chipClick)=\"handleClick(expression.fieldName)\"\n >\n <span>{{ (expression.fieldName | igxGroupByMeta:grid).title }}</span>\n <igx-icon igxSuffix>{{ expression.dir === 1 ? 'arrow_upward' : 'arrow_downward' }}</igx-icon>\n </igx-chip>\n\n <span class=\"igx-grid-grouparea__connector\">\n <igx-icon [hidden]=\"(last && !dropAreaVisible)\">arrow_forward</igx-icon>\n </span>\n </ng-container>\n <div igxGroupAreaDrop\n class=\"igx-drop-area\"\n [attr.gridId]=\"grid.id\"\n [hidden]=\"!dropAreaVisible\"\n (igxDrop)=\"onDragDrop($event)\"\n >\n <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n </div>\n</igx-chips-area>\n\n<ng-template #default>\n <igx-icon class=\"igx-drop-area__icon\">group_work</igx-icon>\n <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n", dependencies: [{ kind: "component", type: IgxChipsAreaComponent, selector: "igx-chips-area", inputs: ["width", "height"], outputs: ["reorder", "selectionChange", "moveStart", "moveEnd"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "directive", type: IgxGroupAreaDropDirective, selector: "[igxGroupAreaDrop]" }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: IgxGroupByMetaPipe, name: "igxGroupByMeta" }] }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridGroupByAreaComponent, deps: [{ token: i0.ElementRef }, { token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: IgxGridGroupByAreaComponent, isStandalone: true, selector: "igx-grid-group-by-area", inputs: { sortingExpressions: "sortingExpressions", grid: "grid" }, providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxGridGroupByAreaComponent }], usesInheritance: true, ngImport: i0, template: "<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n <ng-container *ngFor=\"let expression of chipExpressions; let last = last;\">\n <igx-chip\n [id]=\"expression.fieldName\"\n [title]=\"(expression.fieldName | igxGroupByMeta:grid).title\"\n [displayDensity]=\"grid.displayDensity\"\n [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n (remove)=\"clearGrouping($event.owner.id)\"\n (chipClick)=\"handleClick(expression.fieldName)\"\n >\n <span>{{ (expression.fieldName | igxGroupByMeta:grid).title }}</span>\n <igx-icon igxSuffix>{{ expression.dir === 1 ? 'arrow_upward' : 'arrow_downward' }}</igx-icon>\n </igx-chip>\n\n <span class=\"igx-grid-grouparea__connector\">\n <igx-icon [hidden]=\"(last && !dropAreaVisible)\">arrow_forward</igx-icon>\n </span>\n </ng-container>\n <div igxGroupAreaDrop\n class=\"igx-drop-area\"\n [attr.gridId]=\"grid.id\"\n [hidden]=\"!dropAreaVisible\"\n (igxDrop)=\"onDragDrop($event)\"\n >\n <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n </div>\n</igx-chips-area>\n\n<ng-template #default>\n <igx-icon class=\"igx-drop-area__icon\">group_work</igx-icon>\n <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n", dependencies: [{ kind: "component", type: IgxChipsAreaComponent, selector: "igx-chips-area", inputs: ["width", "height"], outputs: ["reorder", "selectionChange", "moveStart", "moveEnd"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "directive", type: IgxSuffixDirective, selector: "igx-suffix,[igxSuffix],[igxEnd]" }, { kind: "directive", type: IgxGroupAreaDropDirective, selector: "[igxGroupAreaDrop]" }, { kind: "directive", type: IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: IgxGroupByMetaPipe, name: "igxGroupByMeta" }] }); }
43
43
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridGroupByAreaComponent, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGridGroupByAreaComponent, decorators: [{
45
45
  type: Component,
46
46
  args: [{ selector: 'igx-grid-group-by-area', providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxGridGroupByAreaComponent }], standalone: true, imports: [IgxChipsAreaComponent, NgFor, IgxChipComponent, IgxIconComponent, IgxSuffixDirective, IgxGroupAreaDropDirective, IgxDropDirective, NgTemplateOutlet, IgxGroupByMetaPipe], template: "<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n <ng-container *ngFor=\"let expression of chipExpressions; let last = last;\">\n <igx-chip\n [id]=\"expression.fieldName\"\n [title]=\"(expression.fieldName | igxGroupByMeta:grid).title\"\n [displayDensity]=\"grid.displayDensity\"\n [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n (remove)=\"clearGrouping($event.owner.id)\"\n (chipClick)=\"handleClick(expression.fieldName)\"\n >\n <span>{{ (expression.fieldName | igxGroupByMeta:grid).title }}</span>\n <igx-icon igxSuffix>{{ expression.dir === 1 ? 'arrow_upward' : 'arrow_downward' }}</igx-icon>\n </igx-chip>\n\n <span class=\"igx-grid-grouparea__connector\">\n <igx-icon [hidden]=\"(last && !dropAreaVisible)\">arrow_forward</igx-icon>\n </span>\n </ng-container>\n <div igxGroupAreaDrop\n class=\"igx-drop-area\"\n [attr.gridId]=\"grid.id\"\n [hidden]=\"!dropAreaVisible\"\n (igxDrop)=\"onDragDrop($event)\"\n >\n <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n </div>\n</igx-chips-area>\n\n<ng-template #default>\n <igx-icon class=\"igx-drop-area__icon\">group_work</igx-icon>\n <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n" }]
47
47
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.PlatformUtil }], propDecorators: { sortingExpressions: [{
@@ -102,10 +102,10 @@ export class IgxGroupByAreaDirective {
102
102
  }
103
103
  expressionsChanged() {
104
104
  }
105
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupByAreaDirective, deps: [{ token: i0.ElementRef }, { token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive }); }
106
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxGroupByAreaDirective, inputs: { dropAreaTemplate: "dropAreaTemplate", density: "density", grid: "grid", expressions: "expressions", dropAreaMessage: "dropAreaMessage" }, outputs: { expressionsChange: "expressionsChange" }, host: { properties: { "class.igx-grid-grouparea": "this.defaultClass" } }, viewQueries: [{ propertyName: "chips", predicate: IgxChipComponent, descendants: true }], ngImport: i0 }); }
105
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupByAreaDirective, deps: [{ token: i0.ElementRef }, { token: i1.PlatformUtil }], target: i0.ɵɵFactoryTarget.Directive }); }
106
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: IgxGroupByAreaDirective, inputs: { dropAreaTemplate: "dropAreaTemplate", density: "density", grid: "grid", expressions: "expressions", dropAreaMessage: "dropAreaMessage" }, outputs: { expressionsChange: "expressionsChange" }, host: { properties: { "class.igx-grid-grouparea": "this.defaultClass" } }, viewQueries: [{ propertyName: "chips", predicate: IgxChipComponent, descendants: true }], ngImport: i0 }); }
107
107
  }
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupByAreaDirective, decorators: [{
108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupByAreaDirective, decorators: [{
109
109
  type: Directive
110
110
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.PlatformUtil }], propDecorators: { dropAreaTemplate: [{
111
111
  type: Input
@@ -138,10 +138,10 @@ export class IgxGroupByMetaPipe {
138
138
  const column = grid.getColumnByName(key);
139
139
  return { groupable: !!column?.groupable, title: column?.header || key };
140
140
  }
141
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupByMetaPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
142
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupByMetaPipe, isStandalone: true, name: "igxGroupByMeta" }); }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupByMetaPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
142
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupByMetaPipe, isStandalone: true, name: "igxGroupByMeta" }); }
143
143
  }
144
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGroupByMetaPipe, decorators: [{
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: IgxGroupByMetaPipe, decorators: [{
145
145
  type: Pipe,
146
146
  args: [{
147
147
  name: 'igxGroupByMeta',