@clr/angular 16.4.0 → 16.5.1

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 (510) hide show
  1. package/clarity.api.md +374 -136
  2. package/clr-angular.module.d.ts +7 -6
  3. package/data/datagrid/datagrid-detail-header.d.ts +4 -1
  4. package/data/datagrid/datagrid-filter.d.ts +4 -2
  5. package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +62 -0
  6. package/data/datagrid/datagrid.d.ts +8 -4
  7. package/data/datagrid/datagrid.module.d.ts +31 -30
  8. package/data/datagrid/enums/column-changes.enum.d.ts +2 -1
  9. package/data/datagrid/index.d.ts +1 -0
  10. package/data/datagrid/interfaces/column-state.interface.d.ts +1 -0
  11. package/data/datagrid/providers/columns.service.d.ts +1 -0
  12. package/data/datagrid/providers/detail.service.d.ts +4 -0
  13. package/data/datagrid/render/cell-renderer.d.ts +3 -6
  14. package/data/datagrid/render/header-renderer.d.ts +2 -3
  15. package/data/datagrid/render/main-renderer.d.ts +5 -1
  16. package/data/datagrid/render/row-renderer.d.ts +4 -3
  17. package/data/datagrid/utils/key-navigation-grid.controller.d.ts +5 -1
  18. package/esm2020/accordion/accordion-content.mjs +3 -2
  19. package/esm2020/accordion/accordion-description.mjs +3 -2
  20. package/esm2020/accordion/accordion-panel.mjs +5 -4
  21. package/esm2020/accordion/accordion-title.mjs +3 -2
  22. package/esm2020/accordion/accordion.mjs +3 -2
  23. package/esm2020/accordion/accordion.module.mjs +3 -2
  24. package/esm2020/accordion/chocolate/accordion-oompa-loompa.mjs +3 -2
  25. package/esm2020/accordion/chocolate/accordion-willy-wonka.mjs +3 -2
  26. package/esm2020/accordion/enums/accordion-status.enum.mjs +3 -2
  27. package/esm2020/accordion/enums/accordion-strategy.enum.mjs +3 -2
  28. package/esm2020/accordion/index.mjs +3 -2
  29. package/esm2020/accordion/models/accordion.model.mjs +3 -2
  30. package/esm2020/accordion/providers/accordion.service.mjs +3 -2
  31. package/esm2020/accordion/stepper/chocolate/stepper-oompa-loompa.mjs +3 -2
  32. package/esm2020/accordion/stepper/chocolate/stepper-willy-wonka.mjs +3 -2
  33. package/esm2020/accordion/stepper/index.mjs +3 -2
  34. package/esm2020/accordion/stepper/models/stepper.model.mjs +3 -2
  35. package/esm2020/accordion/stepper/providers/stepper.service.mjs +3 -2
  36. package/esm2020/accordion/stepper/step-button.mjs +3 -2
  37. package/esm2020/accordion/stepper/stepper-panel.mjs +10 -5
  38. package/esm2020/accordion/stepper/stepper.mjs +3 -2
  39. package/esm2020/accordion/stepper/stepper.module.mjs +3 -2
  40. package/esm2020/accordion/utils/animation.mjs +3 -2
  41. package/esm2020/button/button-group/button-group.mjs +5 -4
  42. package/esm2020/button/button-group/button-group.module.mjs +3 -2
  43. package/esm2020/button/button-group/button.mjs +3 -2
  44. package/esm2020/button/button-group/index.mjs +3 -2
  45. package/esm2020/button/button-loading/index.mjs +3 -2
  46. package/esm2020/button/button-loading/loading-button.mjs +3 -2
  47. package/esm2020/button/button-loading/loading-button.module.mjs +3 -2
  48. package/esm2020/button/button.module.mjs +3 -2
  49. package/esm2020/button/index.mjs +3 -2
  50. package/esm2020/button/providers/button-group-focus-handler.service.mjs +3 -2
  51. package/esm2020/button/providers/button-group-focus.enum.mjs +3 -2
  52. package/esm2020/button/providers/button-in-group.service.mjs +3 -2
  53. package/esm2020/clr-angular.module.mjs +7 -2
  54. package/esm2020/data/data.module.mjs +3 -2
  55. package/esm2020/data/datagrid/built-in/comparators/datagrid-property-comparator.mjs +3 -2
  56. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter-impl.mjs +3 -2
  57. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +3 -2
  58. package/esm2020/data/datagrid/built-in/filters/datagrid-property-numeric-filter.mjs +3 -2
  59. package/esm2020/data/datagrid/built-in/filters/datagrid-property-string-filter.mjs +3 -2
  60. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter-impl.mjs +3 -2
  61. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +3 -2
  62. package/esm2020/data/datagrid/built-in/nested-property.mjs +3 -2
  63. package/esm2020/data/datagrid/chocolate/actionable-oompa-loompa.mjs +3 -2
  64. package/esm2020/data/datagrid/chocolate/datagrid-willy-wonka.mjs +3 -2
  65. package/esm2020/data/datagrid/chocolate/expandable-oompa-loompa.mjs +3 -2
  66. package/esm2020/data/datagrid/datagrid-action-bar.mjs +3 -2
  67. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +5 -2
  68. package/esm2020/data/datagrid/datagrid-cell.mjs +3 -2
  69. package/esm2020/data/datagrid/datagrid-column-separator.mjs +3 -2
  70. package/esm2020/data/datagrid/datagrid-column-toggle-button.mjs +3 -2
  71. package/esm2020/data/datagrid/datagrid-column-toggle-trackby.mjs +3 -2
  72. package/esm2020/data/datagrid/datagrid-column-toggle.mjs +3 -2
  73. package/esm2020/data/datagrid/datagrid-column.mjs +3 -2
  74. package/esm2020/data/datagrid/datagrid-detail-body.mjs +3 -2
  75. package/esm2020/data/datagrid/datagrid-detail-header.mjs +14 -7
  76. package/esm2020/data/datagrid/datagrid-detail-registerer.mjs +3 -2
  77. package/esm2020/data/datagrid/datagrid-detail.mjs +5 -4
  78. package/esm2020/data/datagrid/datagrid-filter.mjs +21 -13
  79. package/esm2020/data/datagrid/datagrid-footer.mjs +3 -2
  80. package/esm2020/data/datagrid/datagrid-hideable-column.mjs +3 -2
  81. package/esm2020/data/datagrid/datagrid-if-detail.mjs +3 -2
  82. package/esm2020/data/datagrid/datagrid-if-expanded.service.mjs +3 -2
  83. package/esm2020/data/datagrid/datagrid-items-trackby.mjs +3 -2
  84. package/esm2020/data/datagrid/datagrid-items.mjs +3 -2
  85. package/esm2020/data/datagrid/datagrid-page-size.mjs +3 -2
  86. package/esm2020/data/datagrid/datagrid-pagination.mjs +3 -2
  87. package/esm2020/data/datagrid/datagrid-placeholder.mjs +3 -2
  88. package/esm2020/data/datagrid/datagrid-row-detail.mjs +3 -2
  89. package/esm2020/data/datagrid/datagrid-row.mjs +5 -4
  90. package/esm2020/data/datagrid/datagrid-selection-cell.directive.mjs +4 -3
  91. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +233 -0
  92. package/esm2020/data/datagrid/datagrid.mjs +45 -11
  93. package/esm2020/data/datagrid/datagrid.module.mjs +7 -2
  94. package/esm2020/data/datagrid/enums/column-changes.enum.mjs +5 -3
  95. package/esm2020/data/datagrid/enums/display-mode.enum.mjs +3 -2
  96. package/esm2020/data/datagrid/enums/render-step.enum.mjs +3 -2
  97. package/esm2020/data/datagrid/enums/selection-type.mjs +3 -2
  98. package/esm2020/data/datagrid/enums/sort-order.enum.mjs +3 -2
  99. package/esm2020/data/datagrid/index.mjs +4 -2
  100. package/esm2020/data/datagrid/interfaces/column-state.interface.mjs +3 -2
  101. package/esm2020/data/datagrid/interfaces/comparator.interface.mjs +3 -2
  102. package/esm2020/data/datagrid/interfaces/filter.interface.mjs +3 -2
  103. package/esm2020/data/datagrid/interfaces/numeric-filter.interface.mjs +3 -2
  104. package/esm2020/data/datagrid/interfaces/state.interface.mjs +3 -2
  105. package/esm2020/data/datagrid/interfaces/string-filter.interface.mjs +3 -2
  106. package/esm2020/data/datagrid/providers/column-resizer.service.mjs +3 -2
  107. package/esm2020/data/datagrid/providers/column-state.provider.mjs +3 -2
  108. package/esm2020/data/datagrid/providers/columns.service.mjs +11 -4
  109. package/esm2020/data/datagrid/providers/custom-filter.mjs +3 -2
  110. package/esm2020/data/datagrid/providers/detail.service.mjs +16 -3
  111. package/esm2020/data/datagrid/providers/display-mode.service.mjs +3 -2
  112. package/esm2020/data/datagrid/providers/filters.mjs +3 -2
  113. package/esm2020/data/datagrid/providers/global-expandable-rows.mjs +3 -2
  114. package/esm2020/data/datagrid/providers/items.mjs +3 -2
  115. package/esm2020/data/datagrid/providers/page.mjs +3 -2
  116. package/esm2020/data/datagrid/providers/row-action-service.mjs +3 -2
  117. package/esm2020/data/datagrid/providers/selection.mjs +3 -2
  118. package/esm2020/data/datagrid/providers/sort.mjs +3 -2
  119. package/esm2020/data/datagrid/providers/state-debouncer.provider.mjs +3 -2
  120. package/esm2020/data/datagrid/providers/state.provider.mjs +3 -2
  121. package/esm2020/data/datagrid/providers/table-size.service.mjs +3 -2
  122. package/esm2020/data/datagrid/render/cell-renderer.mjs +10 -34
  123. package/esm2020/data/datagrid/render/constants.mjs +3 -2
  124. package/esm2020/data/datagrid/render/header-renderer.mjs +27 -44
  125. package/esm2020/data/datagrid/render/main-renderer.mjs +61 -10
  126. package/esm2020/data/datagrid/render/noop-dom-adapter.mjs +3 -2
  127. package/esm2020/data/datagrid/render/render-organizer.mjs +4 -3
  128. package/esm2020/data/datagrid/render/row-renderer.mjs +7 -6
  129. package/esm2020/data/datagrid/utils/datagrid-filter-registrar.mjs +3 -2
  130. package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +22 -5
  131. package/esm2020/data/datagrid/wrapped-cell.mjs +3 -2
  132. package/esm2020/data/datagrid/wrapped-column.mjs +3 -2
  133. package/esm2020/data/datagrid/wrapped-row.mjs +3 -2
  134. package/esm2020/data/index.mjs +3 -2
  135. package/esm2020/data/stack-view/index.mjs +3 -2
  136. package/esm2020/data/stack-view/stack-block.mjs +3 -2
  137. package/esm2020/data/stack-view/stack-content-input.mjs +3 -2
  138. package/esm2020/data/stack-view/stack-header.mjs +3 -2
  139. package/esm2020/data/stack-view/stack-view-custom-tags.mjs +3 -2
  140. package/esm2020/data/stack-view/stack-view.mjs +3 -2
  141. package/esm2020/data/stack-view/stack-view.module.mjs +3 -2
  142. package/esm2020/data/tree-view/index.mjs +3 -2
  143. package/esm2020/data/tree-view/models/async-array.mjs +3 -2
  144. package/esm2020/data/tree-view/models/declarative-tree-node.model.mjs +3 -2
  145. package/esm2020/data/tree-view/models/recursive-tree-node.model.mjs +3 -2
  146. package/esm2020/data/tree-view/models/selected-state.enum.mjs +3 -2
  147. package/esm2020/data/tree-view/models/tree-node.model.mjs +3 -2
  148. package/esm2020/data/tree-view/recursive-children.mjs +3 -2
  149. package/esm2020/data/tree-view/recursive-for-of.mjs +3 -2
  150. package/esm2020/data/tree-view/tree-features.service.mjs +3 -2
  151. package/esm2020/data/tree-view/tree-focus-manager.service.mjs +3 -2
  152. package/esm2020/data/tree-view/tree-node-link.mjs +3 -2
  153. package/esm2020/data/tree-view/tree-node.mjs +5 -4
  154. package/esm2020/data/tree-view/tree-view.module.mjs +3 -2
  155. package/esm2020/data/tree-view/tree.mjs +3 -2
  156. package/esm2020/emphasis/alert/alert-item.mjs +3 -2
  157. package/esm2020/emphasis/alert/alert-text.mjs +3 -2
  158. package/esm2020/emphasis/alert/alert.mjs +5 -4
  159. package/esm2020/emphasis/alert/alert.module.mjs +3 -2
  160. package/esm2020/emphasis/alert/alerts-pager.mjs +5 -4
  161. package/esm2020/emphasis/alert/alerts.mjs +5 -4
  162. package/esm2020/emphasis/alert/index.mjs +3 -2
  163. package/esm2020/emphasis/alert/providers/icon-and-types.service.mjs +3 -2
  164. package/esm2020/emphasis/alert/providers/multi-alert.service.mjs +3 -2
  165. package/esm2020/emphasis/alert/utils/alert-info-object.mjs +3 -2
  166. package/esm2020/emphasis/alert/utils/alert-types.mjs +3 -2
  167. package/esm2020/emphasis/emphasis.module.mjs +3 -2
  168. package/esm2020/emphasis/index.mjs +3 -2
  169. package/esm2020/forms/checkbox/checkbox-container.mjs +3 -2
  170. package/esm2020/forms/checkbox/checkbox-wrapper.mjs +3 -2
  171. package/esm2020/forms/checkbox/checkbox.mjs +3 -2
  172. package/esm2020/forms/checkbox/checkbox.module.mjs +3 -2
  173. package/esm2020/forms/checkbox/index.mjs +3 -2
  174. package/esm2020/forms/combobox/combobox-container.mjs +3 -2
  175. package/esm2020/forms/combobox/combobox.mjs +5 -4
  176. package/esm2020/forms/combobox/combobox.module.mjs +3 -2
  177. package/esm2020/forms/combobox/index.mjs +3 -2
  178. package/esm2020/forms/combobox/model/combobox.model.mjs +3 -2
  179. package/esm2020/forms/combobox/model/multi-select-combobox.model.mjs +3 -2
  180. package/esm2020/forms/combobox/model/pseudo-focus.model.mjs +3 -2
  181. package/esm2020/forms/combobox/model/single-select-combobox.model.mjs +3 -2
  182. package/esm2020/forms/combobox/option-items.directive.mjs +3 -2
  183. package/esm2020/forms/combobox/option-selected.directive.mjs +3 -2
  184. package/esm2020/forms/combobox/option.mjs +3 -2
  185. package/esm2020/forms/combobox/options.mjs +3 -2
  186. package/esm2020/forms/combobox/providers/combobox-container.service.mjs +3 -2
  187. package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +3 -2
  188. package/esm2020/forms/combobox/providers/option-selection.service.mjs +3 -2
  189. package/esm2020/forms/common/abstract-container.mjs +7 -3
  190. package/esm2020/forms/common/abstract-control.mjs +3 -2
  191. package/esm2020/forms/common/common.module.mjs +3 -2
  192. package/esm2020/forms/common/control-container.mjs +3 -2
  193. package/esm2020/forms/common/control.mjs +3 -2
  194. package/esm2020/forms/common/error.mjs +3 -2
  195. package/esm2020/forms/common/form.mjs +3 -2
  196. package/esm2020/forms/common/helper.mjs +3 -2
  197. package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +3 -2
  198. package/esm2020/forms/common/if-control-state/if-control-state.service.mjs +3 -2
  199. package/esm2020/forms/common/if-control-state/if-error.mjs +3 -2
  200. package/esm2020/forms/common/if-control-state/if-success.mjs +3 -2
  201. package/esm2020/forms/common/index.mjs +3 -2
  202. package/esm2020/forms/common/label.mjs +3 -2
  203. package/esm2020/forms/common/layout.mjs +3 -2
  204. package/esm2020/forms/common/providers/container-id.service.mjs +3 -2
  205. package/esm2020/forms/common/providers/control-class.service.mjs +3 -2
  206. package/esm2020/forms/common/providers/control-id.service.mjs +3 -2
  207. package/esm2020/forms/common/providers/focus.service.mjs +3 -2
  208. package/esm2020/forms/common/providers/layout.service.mjs +3 -2
  209. package/esm2020/forms/common/providers/mark-control.service.mjs +3 -2
  210. package/esm2020/forms/common/providers/ng-control.service.mjs +3 -2
  211. package/esm2020/forms/common/success.mjs +3 -2
  212. package/esm2020/forms/common/wrapped-control.mjs +3 -2
  213. package/esm2020/forms/datalist/datalist-container.mjs +3 -2
  214. package/esm2020/forms/datalist/datalist-input.mjs +3 -2
  215. package/esm2020/forms/datalist/datalist.mjs +3 -2
  216. package/esm2020/forms/datalist/datalist.module.mjs +3 -2
  217. package/esm2020/forms/datalist/index.mjs +3 -2
  218. package/esm2020/forms/datalist/providers/datalist-id.service.mjs +3 -2
  219. package/esm2020/forms/datepicker/calendar.mjs +3 -2
  220. package/esm2020/forms/datepicker/date-container.mjs +3 -2
  221. package/esm2020/forms/datepicker/date-input.mjs +3 -2
  222. package/esm2020/forms/datepicker/date-input.validator.mjs +3 -2
  223. package/esm2020/forms/datepicker/datepicker-view-manager.mjs +5 -4
  224. package/esm2020/forms/datepicker/datepicker.module.mjs +3 -2
  225. package/esm2020/forms/datepicker/day.mjs +3 -2
  226. package/esm2020/forms/datepicker/daypicker.mjs +3 -2
  227. package/esm2020/forms/datepicker/index.mjs +3 -2
  228. package/esm2020/forms/datepicker/interfaces/date-range.interface.mjs +3 -2
  229. package/esm2020/forms/datepicker/interfaces/day-of-week.interface.mjs +3 -2
  230. package/esm2020/forms/datepicker/model/calendar-view.model.mjs +3 -2
  231. package/esm2020/forms/datepicker/model/calendar.model.mjs +3 -2
  232. package/esm2020/forms/datepicker/model/day-view.model.mjs +3 -2
  233. package/esm2020/forms/datepicker/model/day.model.mjs +3 -2
  234. package/esm2020/forms/datepicker/model/year-range.model.mjs +3 -2
  235. package/esm2020/forms/datepicker/monthpicker.mjs +3 -2
  236. package/esm2020/forms/datepicker/providers/date-form-control.service.mjs +3 -2
  237. package/esm2020/forms/datepicker/providers/date-io.service.mjs +3 -2
  238. package/esm2020/forms/datepicker/providers/date-navigation.service.mjs +3 -2
  239. package/esm2020/forms/datepicker/providers/datepicker-enabled.service.mjs +3 -2
  240. package/esm2020/forms/datepicker/providers/datepicker-focus.service.mjs +3 -2
  241. package/esm2020/forms/datepicker/providers/locale-helper.service.mjs +3 -2
  242. package/esm2020/forms/datepicker/providers/view-manager.service.mjs +3 -2
  243. package/esm2020/forms/datepicker/utils/constants.mjs +3 -2
  244. package/esm2020/forms/datepicker/utils/date-utils.mjs +3 -2
  245. package/esm2020/forms/datepicker/yearpicker.mjs +3 -2
  246. package/esm2020/forms/file-input/file-input-container.mjs +157 -0
  247. package/esm2020/forms/file-input/file-input-validator.mjs +72 -0
  248. package/esm2020/forms/file-input/file-input-value-accessor.mjs +53 -0
  249. package/esm2020/forms/file-input/file-input.helpers.mjs +22 -0
  250. package/esm2020/forms/file-input/file-input.mjs +68 -0
  251. package/esm2020/forms/file-input/file-input.module.mjs +43 -0
  252. package/esm2020/forms/file-input/index.mjs +12 -0
  253. package/esm2020/forms/forms.module.mjs +7 -2
  254. package/esm2020/forms/index.mjs +4 -2
  255. package/esm2020/forms/input/index.mjs +3 -2
  256. package/esm2020/forms/input/input-container.mjs +3 -2
  257. package/esm2020/forms/input/input.mjs +3 -2
  258. package/esm2020/forms/input/input.module.mjs +3 -2
  259. package/esm2020/forms/password/index.mjs +3 -2
  260. package/esm2020/forms/password/password-container.mjs +3 -2
  261. package/esm2020/forms/password/password.mjs +3 -2
  262. package/esm2020/forms/password/password.module.mjs +3 -2
  263. package/esm2020/forms/radio/index.mjs +3 -2
  264. package/esm2020/forms/radio/radio-container.mjs +3 -2
  265. package/esm2020/forms/radio/radio-wrapper.mjs +3 -2
  266. package/esm2020/forms/radio/radio.mjs +3 -2
  267. package/esm2020/forms/radio/radio.module.mjs +3 -2
  268. package/esm2020/forms/range/index.mjs +3 -2
  269. package/esm2020/forms/range/range-container.mjs +3 -2
  270. package/esm2020/forms/range/range.mjs +3 -2
  271. package/esm2020/forms/range/range.module.mjs +3 -2
  272. package/esm2020/forms/select/index.mjs +3 -2
  273. package/esm2020/forms/select/select-container.mjs +3 -2
  274. package/esm2020/forms/select/select.mjs +3 -2
  275. package/esm2020/forms/select/select.module.mjs +3 -2
  276. package/esm2020/forms/textarea/index.mjs +3 -2
  277. package/esm2020/forms/textarea/textarea-container.mjs +3 -2
  278. package/esm2020/forms/textarea/textarea.mjs +3 -2
  279. package/esm2020/forms/textarea/textarea.module.mjs +3 -2
  280. package/esm2020/icon/icon.mjs +3 -2
  281. package/esm2020/icon/icon.module.mjs +3 -2
  282. package/esm2020/icon/index.mjs +3 -2
  283. package/esm2020/index.mjs +3 -2
  284. package/esm2020/layout/index.mjs +3 -2
  285. package/esm2020/layout/layout.module.mjs +3 -2
  286. package/esm2020/layout/main-container/index.mjs +3 -2
  287. package/esm2020/layout/main-container/main-container.mjs +3 -2
  288. package/esm2020/layout/main-container/main-container.module.mjs +3 -2
  289. package/esm2020/layout/nav/aria-current-link.mjs +3 -2
  290. package/esm2020/layout/nav/chocolate/index.mjs +3 -2
  291. package/esm2020/layout/nav/chocolate/main-container-willy-wonka.mjs +3 -2
  292. package/esm2020/layout/nav/chocolate/nav-detection-oompa-loompa.mjs +3 -2
  293. package/esm2020/layout/nav/header.mjs +3 -2
  294. package/esm2020/layout/nav/index.mjs +3 -2
  295. package/esm2020/layout/nav/nav-level.mjs +3 -2
  296. package/esm2020/layout/nav/navigation.module.mjs +3 -2
  297. package/esm2020/layout/nav/providers/responsive-navigation.service.mjs +3 -2
  298. package/esm2020/layout/nav/responsive-nav-codes.mjs +3 -2
  299. package/esm2020/layout/nav/responsive-nav-control-message.mjs +3 -2
  300. package/esm2020/layout/tabs/chocolate/active-oompa-loompa.mjs +3 -2
  301. package/esm2020/layout/tabs/chocolate/tabs-willy-wonka.mjs +3 -2
  302. package/esm2020/layout/tabs/enums/tabs-layout.enum.mjs +3 -2
  303. package/esm2020/layout/tabs/index.mjs +3 -2
  304. package/esm2020/layout/tabs/providers/tabs.service.mjs +3 -2
  305. package/esm2020/layout/tabs/tab-content.mjs +3 -2
  306. package/esm2020/layout/tabs/tab-link.directive.mjs +3 -2
  307. package/esm2020/layout/tabs/tab-overflow-content.mjs +3 -2
  308. package/esm2020/layout/tabs/tab.mjs +3 -2
  309. package/esm2020/layout/tabs/tabs-id.provider.mjs +3 -2
  310. package/esm2020/layout/tabs/tabs.mjs +3 -2
  311. package/esm2020/layout/tabs/tabs.module.mjs +3 -2
  312. package/esm2020/layout/vertical-nav/index.mjs +3 -2
  313. package/esm2020/layout/vertical-nav/providers/vertical-nav-group-registration.service.mjs +3 -2
  314. package/esm2020/layout/vertical-nav/providers/vertical-nav-group.service.mjs +3 -2
  315. package/esm2020/layout/vertical-nav/providers/vertical-nav-icon.service.mjs +3 -2
  316. package/esm2020/layout/vertical-nav/providers/vertical-nav.service.mjs +3 -2
  317. package/esm2020/layout/vertical-nav/vertical-nav-group-children.mjs +3 -2
  318. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +5 -4
  319. package/esm2020/layout/vertical-nav/vertical-nav-icon.mjs +3 -2
  320. package/esm2020/layout/vertical-nav/vertical-nav-link.mjs +3 -2
  321. package/esm2020/layout/vertical-nav/vertical-nav.mjs +5 -4
  322. package/esm2020/layout/vertical-nav/vertical-nav.module.mjs +3 -2
  323. package/esm2020/modal/index.mjs +5 -2
  324. package/esm2020/modal/modal-body.mjs +3 -2
  325. package/esm2020/modal/modal-configuration.service.mjs +20 -0
  326. package/esm2020/modal/modal-stack.service.mjs +3 -2
  327. package/esm2020/modal/modal.mjs +43 -18
  328. package/esm2020/modal/modal.module.mjs +6 -3
  329. package/esm2020/modal/side-panel.mjs +90 -0
  330. package/esm2020/modal/side-panel.module.mjs +28 -0
  331. package/esm2020/popover/common/abstract-popover.mjs +3 -2
  332. package/esm2020/popover/common/popover-host-anchor.token.mjs +3 -2
  333. package/esm2020/popover/common/popover-options.interface.mjs +3 -2
  334. package/esm2020/popover/common/popover.mjs +3 -2
  335. package/esm2020/popover/dropdown/dropdown-item.mjs +3 -2
  336. package/esm2020/popover/dropdown/dropdown-menu.mjs +3 -2
  337. package/esm2020/popover/dropdown/dropdown-trigger.mjs +3 -2
  338. package/esm2020/popover/dropdown/dropdown.mjs +3 -2
  339. package/esm2020/popover/dropdown/dropdown.module.mjs +3 -2
  340. package/esm2020/popover/dropdown/index.mjs +3 -2
  341. package/esm2020/popover/dropdown/menu-positions.mjs +3 -2
  342. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +3 -2
  343. package/esm2020/popover/dropdown/providers/dropdown.service.mjs +3 -2
  344. package/esm2020/popover/index.mjs +3 -2
  345. package/esm2020/popover/popover.module.mjs +3 -2
  346. package/esm2020/popover/signpost/index.mjs +3 -2
  347. package/esm2020/popover/signpost/providers/signpost-focus-manager.service.mjs +3 -2
  348. package/esm2020/popover/signpost/providers/signpost-id.service.mjs +3 -2
  349. package/esm2020/popover/signpost/signpost-content.mjs +3 -2
  350. package/esm2020/popover/signpost/signpost-positions.mjs +3 -2
  351. package/esm2020/popover/signpost/signpost-trigger.mjs +3 -2
  352. package/esm2020/popover/signpost/signpost.mjs +3 -2
  353. package/esm2020/popover/signpost/signpost.module.mjs +3 -2
  354. package/esm2020/popover/tooltip/index.mjs +3 -2
  355. package/esm2020/popover/tooltip/providers/tooltip-id.service.mjs +3 -2
  356. package/esm2020/popover/tooltip/providers/tooltip-mouse.service.mjs +3 -2
  357. package/esm2020/popover/tooltip/tooltip-content.mjs +3 -2
  358. package/esm2020/popover/tooltip/tooltip-trigger.mjs +3 -2
  359. package/esm2020/popover/tooltip/tooltip.mjs +3 -2
  360. package/esm2020/popover/tooltip/tooltip.module.mjs +3 -2
  361. package/esm2020/progress/progress-bars/index.mjs +3 -2
  362. package/esm2020/progress/progress-bars/progress-bar.mjs +3 -2
  363. package/esm2020/progress/progress-bars/progress-bar.module.mjs +3 -2
  364. package/esm2020/progress/spinner/index.mjs +3 -2
  365. package/esm2020/progress/spinner/spinner.mjs +3 -2
  366. package/esm2020/progress/spinner/spinner.module.mjs +3 -2
  367. package/esm2020/timeline/enums/timeline-layout.enum.mjs +3 -2
  368. package/esm2020/timeline/enums/timeline-step-state.enum.mjs +3 -2
  369. package/esm2020/timeline/index.mjs +3 -2
  370. package/esm2020/timeline/interface/icon-attribute.interface.mjs +3 -2
  371. package/esm2020/timeline/providers/timeline-icon-attribute.service.mjs +3 -2
  372. package/esm2020/timeline/timeline-step-description.mjs +3 -2
  373. package/esm2020/timeline/timeline-step-header.mjs +3 -2
  374. package/esm2020/timeline/timeline-step-title.mjs +3 -2
  375. package/esm2020/timeline/timeline-step.mjs +5 -4
  376. package/esm2020/timeline/timeline.mjs +5 -4
  377. package/esm2020/timeline/timeline.module.mjs +3 -2
  378. package/esm2020/utils/animations/collapse/collapse.mjs +3 -2
  379. package/esm2020/utils/animations/collapse/index.mjs +3 -2
  380. package/esm2020/utils/animations/constants.mjs +3 -2
  381. package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +19 -13
  382. package/esm2020/utils/animations/expandable-animation/expandable-animation.module.mjs +3 -2
  383. package/esm2020/utils/animations/expandable-animation/index.mjs +3 -2
  384. package/esm2020/utils/animations/fade/fade.mjs +3 -2
  385. package/esm2020/utils/animations/fade/index.mjs +3 -2
  386. package/esm2020/utils/animations/fade-slide/fade-slide.mjs +3 -2
  387. package/esm2020/utils/animations/fade-slide/index.mjs +3 -2
  388. package/esm2020/utils/animations/index.mjs +3 -2
  389. package/esm2020/utils/animations/slide/index.mjs +3 -2
  390. package/esm2020/utils/animations/slide/slide.mjs +3 -2
  391. package/esm2020/utils/assert/assert.helpers.mjs +3 -2
  392. package/esm2020/utils/breakpoints/breakpoints.mjs +3 -2
  393. package/esm2020/utils/cdk/cdk-drag.module.mjs +3 -2
  394. package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +3 -2
  395. package/esm2020/utils/chocolate/oompa-loompa.mjs +3 -2
  396. package/esm2020/utils/chocolate/willy-wonka.mjs +3 -2
  397. package/esm2020/utils/component/is-boolean-attribute-set.mjs +3 -2
  398. package/esm2020/utils/conditional/conditional.module.mjs +3 -2
  399. package/esm2020/utils/conditional/if-active.directive.mjs +3 -2
  400. package/esm2020/utils/conditional/if-active.service.mjs +3 -2
  401. package/esm2020/utils/conditional/if-expanded.directive.mjs +3 -2
  402. package/esm2020/utils/conditional/if-expanded.service.mjs +3 -2
  403. package/esm2020/utils/conditional/if-open.directive.mjs +3 -2
  404. package/esm2020/utils/conditional/index.mjs +3 -2
  405. package/esm2020/utils/destroy/destroy.service.mjs +3 -2
  406. package/esm2020/utils/destroy/index.mjs +3 -2
  407. package/esm2020/utils/dom-adapter/dom-adapter.mjs +15 -5
  408. package/esm2020/utils/enums/keys.enum.mjs +3 -2
  409. package/esm2020/utils/focus/arrow-key-direction.enum.mjs +3 -2
  410. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +3 -2
  411. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.module.mjs +3 -2
  412. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.provider.mjs +3 -2
  413. package/esm2020/utils/focus/focus-on-view-init/index.mjs +3 -2
  414. package/esm2020/utils/focus/focus-trap/index.mjs +3 -2
  415. package/esm2020/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.mjs +3 -2
  416. package/esm2020/utils/focus/focus.service.mjs +3 -2
  417. package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +3 -2
  418. package/esm2020/utils/focus/focusable-item/custom-focusable-item-provider.mjs +3 -2
  419. package/esm2020/utils/focus/focusable-item/focusable-item.mjs +3 -2
  420. package/esm2020/utils/focus/focusable-item/linkers.mjs +3 -2
  421. package/esm2020/utils/focus/key-focus/enums/focus-direction.enum.mjs +3 -2
  422. package/esm2020/utils/focus/key-focus/index.mjs +3 -2
  423. package/esm2020/utils/focus/key-focus/interfaces.mjs +3 -2
  424. package/esm2020/utils/focus/key-focus/key-focus-item.mjs +3 -2
  425. package/esm2020/utils/focus/key-focus/key-focus.mjs +3 -2
  426. package/esm2020/utils/focus/key-focus/key-focus.module.mjs +3 -2
  427. package/esm2020/utils/focus/key-focus/roving-tabindex.mjs +3 -2
  428. package/esm2020/utils/focus/key-focus/util.mjs +3 -2
  429. package/esm2020/utils/focus/wrap-observable.mjs +3 -2
  430. package/esm2020/utils/forms/validation.mjs +3 -2
  431. package/esm2020/utils/host-wrapping/dynamic-wrapper.mjs +3 -2
  432. package/esm2020/utils/host-wrapping/empty-anchor.mjs +3 -2
  433. package/esm2020/utils/host-wrapping/host-wrapper.mjs +3 -2
  434. package/esm2020/utils/host-wrapping/host-wrapping.module.mjs +3 -2
  435. package/esm2020/utils/i18n/common-strings.default.mjs +8 -2
  436. package/esm2020/utils/i18n/common-strings.interface.mjs +3 -2
  437. package/esm2020/utils/i18n/common-strings.service.mjs +3 -2
  438. package/esm2020/utils/i18n/index.mjs +3 -2
  439. package/esm2020/utils/id-generator/id-generator.service.mjs +3 -2
  440. package/esm2020/utils/index.mjs +3 -2
  441. package/esm2020/utils/loading/index.mjs +3 -2
  442. package/esm2020/utils/loading/loading-listener.mjs +3 -2
  443. package/esm2020/utils/loading/loading.mjs +3 -2
  444. package/esm2020/utils/loading/loading.module.mjs +3 -2
  445. package/esm2020/utils/outside-click/index.mjs +3 -2
  446. package/esm2020/utils/outside-click/outside-click.mjs +3 -2
  447. package/esm2020/utils/outside-click/outside-click.module.mjs +3 -2
  448. package/esm2020/utils/popover/enums/alignment.enum.mjs +3 -2
  449. package/esm2020/utils/popover/enums/axis.enum.mjs +3 -2
  450. package/esm2020/utils/popover/enums/positions.enum.mjs +3 -2
  451. package/esm2020/utils/popover/enums/side.enum.mjs +3 -2
  452. package/esm2020/utils/popover/enums/viewport-violation.enum.mjs +3 -2
  453. package/esm2020/utils/popover/index.mjs +3 -2
  454. package/esm2020/utils/popover/interfaces/popover-content-offset.interface.mjs +3 -2
  455. package/esm2020/utils/popover/interfaces/popover-position.interface.mjs +3 -2
  456. package/esm2020/utils/popover/interfaces/visibility-coords.interface.mjs +3 -2
  457. package/esm2020/utils/popover/popover-anchor.mjs +3 -2
  458. package/esm2020/utils/popover/popover-close-button.mjs +3 -2
  459. package/esm2020/utils/popover/popover-content.mjs +3 -2
  460. package/esm2020/utils/popover/popover-host.directive.mjs +3 -2
  461. package/esm2020/utils/popover/popover-open-close-button.mjs +3 -2
  462. package/esm2020/utils/popover/popover.module.mjs +3 -2
  463. package/esm2020/utils/popover/position-operators.mjs +3 -2
  464. package/esm2020/utils/popover/providers/popover-events.service.mjs +3 -2
  465. package/esm2020/utils/popover/providers/popover-position.service.mjs +3 -2
  466. package/esm2020/utils/popover/providers/popover-toggle.service.mjs +3 -2
  467. package/esm2020/utils/popover/stop-escape-propagation.directive.mjs +3 -2
  468. package/esm2020/utils/scrolling/scrolling-service.mjs +3 -2
  469. package/esm2020/utils/template-ref/index.mjs +3 -2
  470. package/esm2020/utils/template-ref/template-ref-container.mjs +3 -2
  471. package/esm2020/utils/template-ref/template-ref.module.mjs +3 -2
  472. package/esm2020/wizard/heading-level.mjs +3 -2
  473. package/esm2020/wizard/index.mjs +3 -2
  474. package/esm2020/wizard/providers/button-hub.service.mjs +3 -2
  475. package/esm2020/wizard/providers/header-actions.service.mjs +3 -2
  476. package/esm2020/wizard/providers/page-collection.service.mjs +3 -2
  477. package/esm2020/wizard/providers/wizard-navigation.service.mjs +3 -2
  478. package/esm2020/wizard/wizard-button.mjs +3 -2
  479. package/esm2020/wizard/wizard-header-action.mjs +3 -2
  480. package/esm2020/wizard/wizard-page-buttons.mjs +3 -2
  481. package/esm2020/wizard/wizard-page-header-actions.mjs +3 -2
  482. package/esm2020/wizard/wizard-page-navtitle.mjs +3 -2
  483. package/esm2020/wizard/wizard-page-title.mjs +3 -2
  484. package/esm2020/wizard/wizard-page.mjs +3 -2
  485. package/esm2020/wizard/wizard-stepnav-item.mjs +3 -2
  486. package/esm2020/wizard/wizard-stepnav.mjs +3 -2
  487. package/esm2020/wizard/wizard-title.mjs +3 -2
  488. package/esm2020/wizard/wizard.mjs +5 -4
  489. package/esm2020/wizard/wizard.module.mjs +3 -2
  490. package/fesm2015/clr-angular.mjs +2221 -890
  491. package/fesm2015/clr-angular.mjs.map +1 -1
  492. package/fesm2020/clr-angular.mjs +2218 -889
  493. package/fesm2020/clr-angular.mjs.map +1 -1
  494. package/forms/file-input/file-input-container.d.ts +16 -0
  495. package/forms/file-input/file-input-validator.d.ts +12 -0
  496. package/forms/file-input/file-input-value-accessor.d.ts +15 -0
  497. package/forms/file-input/file-input.d.ts +21 -0
  498. package/forms/file-input/file-input.helpers.d.ts +3 -0
  499. package/forms/file-input/file-input.module.d.ts +14 -0
  500. package/forms/file-input/index.d.ts +5 -0
  501. package/forms/forms.module.d.ts +9 -8
  502. package/forms/index.d.ts +1 -0
  503. package/modal/index.d.ts +2 -0
  504. package/modal/modal-configuration.service.d.ts +7 -0
  505. package/modal/modal.d.ts +6 -1
  506. package/modal/side-panel.d.ts +26 -0
  507. package/modal/side-panel.module.d.ts +13 -0
  508. package/package.json +2 -2
  509. package/utils/animations/expandable-animation/expandable-animation.d.ts +5 -4
  510. package/utils/i18n/common-strings.interface.d.ts +4 -0
@@ -0,0 +1,233 @@
1
+ import { coerceNumberProperty } from '@angular/cdk/coercion';
2
+ import { _RecycleViewRepeaterStrategy } from '@angular/cdk/collections';
3
+ import { CdkVirtualForOf, CdkVirtualScrollViewport, FixedSizeVirtualScrollStrategy, } from '@angular/cdk/scrolling';
4
+ import { Directive, EventEmitter, Input, Output, SkipSelf, } from '@angular/core';
5
+ import { Items } from './providers/items';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./providers/items";
8
+ import * as i2 from "@angular/cdk/bidi";
9
+ import * as i3 from "@angular/cdk/scrolling";
10
+ import * as i4 from "./datagrid";
11
+ import * as i5 from "./providers/columns.service";
12
+ const defaultCdkFixedSizeVirtualScrollInputs = {
13
+ itemSize: 32,
14
+ minBufferPx: 200,
15
+ maxBufferPx: 400,
16
+ };
17
+ export class ClrDatagridVirtualScrollDirective {
18
+ constructor(changeDetectorRef, iterableDiffers, items, ngZone, templateRef, viewContainerRef, directionality, scrollDispatcher, viewportRuler, datagrid, columnsService, injector) {
19
+ this.changeDetectorRef = changeDetectorRef;
20
+ this.iterableDiffers = iterableDiffers;
21
+ this.items = items;
22
+ this.ngZone = ngZone;
23
+ this.templateRef = templateRef;
24
+ this.viewContainerRef = viewContainerRef;
25
+ this.directionality = directionality;
26
+ this.scrollDispatcher = scrollDispatcher;
27
+ this.viewportRuler = viewportRuler;
28
+ this.datagrid = datagrid;
29
+ this.columnsService = columnsService;
30
+ this.injector = injector;
31
+ this.renderedRangeChange = new EventEmitter();
32
+ this._cdkFixedSizeVirtualScrollInputs = { ...defaultCdkFixedSizeVirtualScrollInputs };
33
+ this.subscriptions = [];
34
+ this.mutationChanges = new MutationObserver((mutations) => {
35
+ mutations.forEach((mutation) => {
36
+ // it is possible this to be called twice because the old class is removed and the new added
37
+ if (mutation.target.classList.contains('datagrid-compact') && this.itemSize > 24) {
38
+ this.itemSize = 24;
39
+ }
40
+ });
41
+ });
42
+ this.viewRepeater = new _RecycleViewRepeaterStrategy();
43
+ this.cdkVirtualForInputs = {
44
+ cdkVirtualForTrackBy: index => index,
45
+ };
46
+ this.items.smartenUp();
47
+ this.datagrid.hasVirtualScroller = true;
48
+ this.datagrid.detailService.preventFocusScroll = true;
49
+ this.datagridElementRef = this.datagrid.el;
50
+ // default
51
+ this.cdkVirtualForTemplateCacheSize = 20;
52
+ this.mutationChanges.observe(this.datagridElementRef.nativeElement, {
53
+ attributeFilter: ['class'],
54
+ attributeOldValue: true,
55
+ });
56
+ this.virtualScrollStrategy = new FixedSizeVirtualScrollStrategy(this._cdkFixedSizeVirtualScrollInputs.itemSize, this._cdkFixedSizeVirtualScrollInputs.minBufferPx, this._cdkFixedSizeVirtualScrollInputs.maxBufferPx);
57
+ }
58
+ get cdkVirtualForOf() {
59
+ return this.cdkVirtualForInputs.cdkVirtualForOf;
60
+ }
61
+ set cdkVirtualForOf(value) {
62
+ this.cdkVirtualForInputs.cdkVirtualForOf = value;
63
+ this.items.all = value;
64
+ this.updateCdkVirtualForInputs();
65
+ }
66
+ get cdkVirtualForTrackBy() {
67
+ return this.cdkVirtualForInputs.cdkVirtualForTrackBy;
68
+ }
69
+ set cdkVirtualForTrackBy(value) {
70
+ this.cdkVirtualForInputs.cdkVirtualForTrackBy = value;
71
+ this.updateCdkVirtualForInputs();
72
+ }
73
+ get cdkVirtualForTemplate() {
74
+ return this?.cdkVirtualForInputs?.cdkVirtualForTemplate;
75
+ }
76
+ set cdkVirtualForTemplate(value) {
77
+ this.cdkVirtualForInputs.cdkVirtualForTemplate = value;
78
+ this.updateCdkVirtualForInputs();
79
+ }
80
+ get cdkVirtualForTemplateCacheSize() {
81
+ return this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize;
82
+ }
83
+ set cdkVirtualForTemplateCacheSize(value) {
84
+ this.cdkVirtualForInputs.cdkVirtualForTemplateCacheSize = coerceNumberProperty(value);
85
+ this.updateCdkVirtualForInputs();
86
+ }
87
+ get itemSize() {
88
+ return this._cdkFixedSizeVirtualScrollInputs.itemSize;
89
+ }
90
+ set itemSize(value) {
91
+ this._cdkFixedSizeVirtualScrollInputs.itemSize = coerceNumberProperty(value);
92
+ this.updateFixedSizeVirtualScrollInputs();
93
+ }
94
+ get minBufferPx() {
95
+ return this._cdkFixedSizeVirtualScrollInputs.minBufferPx;
96
+ }
97
+ set minBufferPx(value) {
98
+ this._cdkFixedSizeVirtualScrollInputs.minBufferPx = coerceNumberProperty(value);
99
+ this.updateFixedSizeVirtualScrollInputs();
100
+ }
101
+ get maxBufferPx() {
102
+ return this._cdkFixedSizeVirtualScrollInputs.maxBufferPx;
103
+ }
104
+ set maxBufferPx(value) {
105
+ this._cdkFixedSizeVirtualScrollInputs.maxBufferPx = coerceNumberProperty(value);
106
+ this.updateFixedSizeVirtualScrollInputs();
107
+ }
108
+ ngAfterViewInit() {
109
+ this.injector.runInContext(() => {
110
+ this.virtualScrollViewport = this.createVirtualScrollViewportForDatagrid(this.changeDetectorRef, this.ngZone, this.directionality, this.scrollDispatcher, this.viewportRuler, this.datagridElementRef, this.virtualScrollStrategy);
111
+ this.cdkVirtualFor = new CdkVirtualForOf(this.viewContainerRef, this.templateRef, this.iterableDiffers, this.viewRepeater, this.virtualScrollViewport, this.ngZone);
112
+ this.virtualScrollViewport.ngOnInit();
113
+ });
114
+ this.gridRoleElement = this.datagridElementRef.nativeElement.querySelector('[role="grid"]');
115
+ this.updateCdkVirtualForInputs();
116
+ this.subscriptions.push(this.items.change.subscribe(newItems => {
117
+ this.cdkVirtualFor.cdkVirtualForOf = newItems;
118
+ }), this.cdkVirtualFor.dataStream.subscribe(data => {
119
+ this.updateAriaRowCount(data.length);
120
+ }), this.virtualScrollViewport.renderedRangeStream.subscribe(renderedRange => {
121
+ this.renderedRangeChange.emit(renderedRange);
122
+ }), this.datagrid.refresh.subscribe(datagridState => {
123
+ if (datagridState.filters) {
124
+ this.virtualScrollViewport.scrollToIndex(0);
125
+ }
126
+ }), this.columnsService.columnsStateChange.subscribe(() => {
127
+ this.viewRepeater.detach();
128
+ }));
129
+ }
130
+ ngDoCheck() {
131
+ this.cdkVirtualFor?.ngDoCheck();
132
+ this.updateAriaRowIndexes();
133
+ }
134
+ ngOnDestroy() {
135
+ this.cdkVirtualFor?.ngOnDestroy();
136
+ this.virtualScrollViewport?.ngOnDestroy();
137
+ this.mutationChanges?.disconnect();
138
+ this.subscriptions.forEach(subscription => {
139
+ subscription.unsubscribe();
140
+ });
141
+ }
142
+ updateCdkVirtualForInputs() {
143
+ if (this.cdkVirtualFor) {
144
+ for (const cdkVirtualForInputKey of Object.keys(this.cdkVirtualForInputs)) {
145
+ if (this.cdkVirtualFor[cdkVirtualForInputKey] !== this.cdkVirtualForInputs[cdkVirtualForInputKey]) {
146
+ this.cdkVirtualFor[cdkVirtualForInputKey] = this.cdkVirtualForInputs[cdkVirtualForInputKey];
147
+ }
148
+ }
149
+ }
150
+ }
151
+ updateFixedSizeVirtualScrollInputs() {
152
+ if (this.virtualScrollStrategy) {
153
+ this.virtualScrollStrategy.updateItemAndBufferSize(this._cdkFixedSizeVirtualScrollInputs.itemSize, this._cdkFixedSizeVirtualScrollInputs.minBufferPx, this._cdkFixedSizeVirtualScrollInputs.maxBufferPx);
154
+ }
155
+ }
156
+ updateAriaRowCount(rowCount) {
157
+ this.gridRoleElement?.setAttribute('aria-rowcount', rowCount.toString());
158
+ }
159
+ updateAriaRowIndexes() {
160
+ for (let i = 0; i < this.viewContainerRef.length; i++) {
161
+ const viewRef = this.viewContainerRef.get(i);
162
+ const rootElements = viewRef.rootNodes;
163
+ const datagridRowElement = rootElements.find(rowElement => rowElement.tagName === 'CLR-DG-ROW');
164
+ const rowRoleElement = datagridRowElement?.querySelector('[role="row"]');
165
+ // aria-rowindex should start with one, not zero, so we have to add one to the zero-based index
166
+ rowRoleElement?.setAttribute('aria-rowindex', (viewRef.context.index + 1).toString());
167
+ }
168
+ }
169
+ createVirtualScrollViewportForDatagrid(changeDetectorRef, ngZone, directionality, scrollDispatcher, viewportRuler, datagridElementRef, virtualScrollStrategy) {
170
+ const datagridDivElement = datagridElementRef.nativeElement.querySelector('.datagrid');
171
+ const datagridTableElement = datagridElementRef.nativeElement.querySelector('.datagrid-table');
172
+ const datagridRowsElement = datagridElementRef.nativeElement.querySelector('.datagrid-rows');
173
+ const datagridDivElementRef = { nativeElement: datagridDivElement };
174
+ let topOffset = 0;
175
+ let totalContentSize = 0;
176
+ function updateDatagridElementStyles() {
177
+ datagridRowsElement.style.transform = `translateY(${topOffset}px)`;
178
+ datagridRowsElement.style.height = `${totalContentSize - topOffset}px`;
179
+ }
180
+ const virtualScrollViewport = new CdkVirtualScrollViewport(datagridDivElementRef, changeDetectorRef, ngZone, virtualScrollStrategy, directionality, scrollDispatcher, viewportRuler, null);
181
+ virtualScrollViewport._contentWrapper = {
182
+ nativeElement: {
183
+ style: {
184
+ set transform(value) {
185
+ topOffset = value === undefined ? 0 : +/translateY\(([0-9]+)px\)/.exec(value)?.[1];
186
+ updateDatagridElementStyles();
187
+ },
188
+ },
189
+ },
190
+ };
191
+ virtualScrollViewport.setTotalContentSize = (value) => {
192
+ totalContentSize = value;
193
+ datagridTableElement.style.height = `${totalContentSize}px`;
194
+ updateDatagridElementStyles();
195
+ };
196
+ return virtualScrollViewport;
197
+ }
198
+ }
199
+ ClrDatagridVirtualScrollDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.IterableDiffers }, { token: i1.Items, skipSelf: true }, { token: i0.NgZone }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i2.Directionality }, { token: i3.ScrollDispatcher }, { token: i3.ViewportRuler }, { token: i4.ClrDatagrid }, { token: i5.ColumnsService }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Directive });
200
+ ClrDatagridVirtualScrollDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatagridVirtualScrollDirective, selector: "[ClrVirtualScroll]", inputs: { cdkVirtualForOf: ["clrVirtualRowsOf", "cdkVirtualForOf"], cdkVirtualForTrackBy: ["clrVirtualRowsTrackBy", "cdkVirtualForTrackBy"], cdkVirtualForTemplate: ["clrVirtualRowsTemplate", "cdkVirtualForTemplate"], cdkVirtualForTemplateCacheSize: ["clrVirtualRowsTemplateCacheSize", "cdkVirtualForTemplateCacheSize"], itemSize: ["clrVirtualRowsItemSize", "itemSize"], minBufferPx: ["clrVirtualRowsMinBufferPx", "minBufferPx"], maxBufferPx: ["clrVirtualRowsMaxBufferPx", "maxBufferPx"] }, outputs: { renderedRangeChange: "renderedRangeChange" }, providers: [Items], ngImport: i0 });
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatagridVirtualScrollDirective, decorators: [{
202
+ type: Directive,
203
+ args: [{
204
+ selector: '[ClrVirtualScroll]',
205
+ providers: [Items],
206
+ }]
207
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.IterableDiffers }, { type: i1.Items, decorators: [{
208
+ type: SkipSelf
209
+ }] }, { type: i0.NgZone }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i2.Directionality }, { type: i3.ScrollDispatcher }, { type: i3.ViewportRuler }, { type: i4.ClrDatagrid }, { type: i5.ColumnsService }, { type: i0.EnvironmentInjector }]; }, propDecorators: { renderedRangeChange: [{
210
+ type: Output
211
+ }], cdkVirtualForOf: [{
212
+ type: Input,
213
+ args: ['clrVirtualRowsOf']
214
+ }], cdkVirtualForTrackBy: [{
215
+ type: Input,
216
+ args: ['clrVirtualRowsTrackBy']
217
+ }], cdkVirtualForTemplate: [{
218
+ type: Input,
219
+ args: ['clrVirtualRowsTemplate']
220
+ }], cdkVirtualForTemplateCacheSize: [{
221
+ type: Input,
222
+ args: ['clrVirtualRowsTemplateCacheSize']
223
+ }], itemSize: [{
224
+ type: Input,
225
+ args: ['clrVirtualRowsItemSize']
226
+ }], minBufferPx: [{
227
+ type: Input,
228
+ args: ['clrVirtualRowsMinBufferPx']
229
+ }], maxBufferPx: [{
230
+ type: Input,
231
+ args: ['clrVirtualRowsMaxBufferPx']
232
+ }] } });
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQtdmlydHVhbC1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZGF0YS9kYXRhZ3JpZC9kYXRhZ3JpZC12aXJ0dWFsLXNjcm9sbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDRCQUE0QixFQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUVMLGVBQWUsRUFHZix3QkFBd0IsRUFDeEIsOEJBQThCLEdBRy9CLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUdMLFNBQVMsRUFLVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFDTixRQUFRLEdBR1QsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7O0FBWTFDLE1BQU0sc0NBQXNDLEdBQW9DO0lBQzlFLFFBQVEsRUFBRSxFQUFFO0lBQ1osV0FBVyxFQUFFLEdBQUc7SUFDaEIsV0FBVyxFQUFFLEdBQUc7Q0FDakIsQ0FBQztBQU1GLE1BQU0sT0FBTyxpQ0FBaUM7SUEwQjVDLFlBQ21CLGlCQUFvQyxFQUM3QyxlQUFnQyxFQUNwQixLQUFlLEVBQ2xCLE1BQWMsRUFDZCxXQUFtRCxFQUNuRCxnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLFFBQXFCLEVBQzlCLGNBQThCLEVBQ3JCLFFBQTZCO1FBWDdCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDN0Msb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGdCQUFXLEdBQVgsV0FBVyxDQUF3QztRQUNu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dCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgX1JlY3ljbGVWaWV3UmVwZWF0ZXJTdHJhdGVneSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7XG4gIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gIENka1ZpcnR1YWxGb3JPZixcbiAgQ2RrVmlydHVhbEZvck9mQ29udGV4dCxcbiAgQ2RrVmlydHVhbFNjcm9sbGFibGVFbGVtZW50LFxuICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gIEZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxTdHJhdGVneSxcbiAgU2Nyb2xsRGlzcGF0Y2hlcixcbiAgVmlld3BvcnRSdWxlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEVudmlyb25tZW50SW5qZWN0b3IsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2tpcFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDbHJEYXRhZ3JpZCB9IGZyb20gJy4vZGF0YWdyaWQnO1xuaW1wb3J0IHsgQ29sdW1uc1NlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9jb2x1bW5zLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbXMgfSBmcm9tICcuL3Byb3ZpZGVycy9pdGVtcyc7XG5cbnR5cGUgQ2RrVmlydHVhbEZvcklucHV0S2V5ID1cbiAgfCAnY2RrVmlydHVhbEZvck9mJ1xuICB8ICdjZGtWaXJ0dWFsRm9yVHJhY2tCeSdcbiAgfCAnY2RrVmlydHVhbEZvclRlbXBsYXRlJ1xuICB8ICdjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUnO1xuXG50eXBlIENka1ZpcnR1YWxGb3JJbnB1dHM8VD4gPSBQYXJ0aWFsPFBpY2s8Q2RrVmlydHVhbEZvck9mPFQ+LCBDZGtWaXJ0dWFsRm9ySW5wdXRLZXk+PjtcblxudHlwZSBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzID0gUGljazxDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLCAnaXRlbVNpemUnIHwgJ21pbkJ1ZmZlclB4JyB8ICdtYXhCdWZmZXJQeCc+O1xuXG5jb25zdCBkZWZhdWx0Q2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0czogQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cyA9IHtcbiAgaXRlbVNpemU6IDMyLFxuICBtaW5CdWZmZXJQeDogMjAwLFxuICBtYXhCdWZmZXJQeDogNDAwLFxufTtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW0NsclZpcnR1YWxTY3JvbGxdJyxcbiAgcHJvdmlkZXJzOiBbSXRlbXNdLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJEYXRhZ3JpZFZpcnR1YWxTY3JvbGxEaXJlY3RpdmU8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkRlc3Ryb3kge1xuICBAT3V0cHV0KCkgcmVuZGVyZWRSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdFJhbmdlPigpO1xuXG4gIHByaXZhdGUgX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMgPSB7IC4uLmRlZmF1bHRDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhZ3JpZEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgZ3JpZFJvbGVFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmlydHVhbFNjcm9sbFN0cmF0ZWd5OiBGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3k7XG4gIHByaXZhdGUgdmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gIHByaXZhdGUgY2RrVmlydHVhbEZvcjogQ2RrVmlydHVhbEZvck9mPFQ+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbXV0YXRpb25DaGFuZ2VzOiBNdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uczogTXV0YXRpb25SZWNvcmRbXSkgPT4ge1xuICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbjogTXV0YXRpb25SZWNvcmQpID0+IHtcbiAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoaXMgdG8gYmUgY2FsbGVkIHR3aWNlIGJlY2F1c2UgdGhlIG9sZCBjbGFzcyBpcyByZW1vdmVkIGFuZCB0aGUgbmV3IGFkZGVkXG4gICAgICBpZiAoKG11dGF0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXRhZ3JpZC1jb21wYWN0JykgJiYgdGhpcy5pdGVtU2l6ZSA+IDI0KSB7XG4gICAgICAgIHRoaXMuaXRlbVNpemUgPSAyNDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSB2aWV3UmVwZWF0ZXIgPSBuZXcgX1JlY3ljbGVWaWV3UmVwZWF0ZXJTdHJhdGVneTxULCBULCBDZGtWaXJ0dWFsRm9yT2ZDb250ZXh0PFQ+PigpO1xuICBwcml2YXRlIGNka1ZpcnR1YWxGb3JJbnB1dHM6IENka1ZpcnR1YWxGb3JJbnB1dHM8VD4gPSB7XG4gICAgY2RrVmlydHVhbEZvclRyYWNrQnk6IGluZGV4ID0+IGluZGV4LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgQFNraXBTZWxmKCkgcHJpdmF0ZSBpdGVtczogSXRlbXM8VD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxDZGtWaXJ0dWFsRm9yT2ZDb250ZXh0PFQ+PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXJlY3Rpb25hbGl0eTogRGlyZWN0aW9uYWxpdHksXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGFncmlkOiBDbHJEYXRhZ3JpZCxcbiAgICBwcml2YXRlIGNvbHVtbnNTZXJ2aWNlOiBDb2x1bW5zU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yXG4gICkge1xuICAgIHRoaXMuaXRlbXMuc21hcnRlblVwKCk7XG4gICAgdGhpcy5kYXRhZ3JpZC5oYXNWaXJ0dWFsU2Nyb2xsZXIgPSB0cnVlO1xuICAgIHRoaXMuZGF0YWdyaWQuZGV0YWlsU2VydmljZS5wcmV2ZW50Rm9jdXNTY3JvbGwgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYgPSB0aGlzLmRhdGFncmlkLmVsO1xuXG4gICAgLy8gZGVmYXVsdFxuICAgIHRoaXMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplID0gMjA7XG5cbiAgICB0aGlzLm11dGF0aW9uQ2hhbmdlcy5vYnNlcnZlKHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgICAgYXR0cmlidXRlT2xkVmFsdWU6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSA9IG5ldyBGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3koXG4gICAgICB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplLFxuICAgICAgdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeCxcbiAgICAgIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHhcbiAgICApO1xuICB9XG5cbiAgQElucHV0KCdjbHJWaXJ0dWFsUm93c09mJylcbiAgZ2V0IGNka1ZpcnR1YWxGb3JPZigpIHtcbiAgICByZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZjtcbiAgfVxuICBzZXQgY2RrVmlydHVhbEZvck9mKHZhbHVlOiBDZGtWaXJ0dWFsRm9ySW5wdXRzPFQ+WydjZGtWaXJ0dWFsRm9yT2YnXSkge1xuICAgIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2YgPSB2YWx1ZTtcbiAgICB0aGlzLml0ZW1zLmFsbCA9IHZhbHVlIGFzIFRbXTtcbiAgICB0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKTtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyVmlydHVhbFJvd3NUcmFja0J5JylcbiAgZ2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCkge1xuICAgIHJldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRyYWNrQnk7XG4gIH1cbiAgc2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KHZhbHVlOiBDZGtWaXJ0dWFsRm9ySW5wdXRzPFQ+WydjZGtWaXJ0dWFsRm9yVHJhY2tCeSddKSB7XG4gICAgdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5ID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCk7XG4gIH1cblxuICBASW5wdXQoJ2NsclZpcnR1YWxSb3dzVGVtcGxhdGUnKVxuICBnZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB0aGlzPy5jZGtWaXJ0dWFsRm9ySW5wdXRzPy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGU7XG4gIH1cbiAgc2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZSh2YWx1ZTogQ2RrVmlydHVhbEZvcklucHV0czxUPlsnY2RrVmlydHVhbEZvclRlbXBsYXRlJ10pIHtcbiAgICB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCk7XG4gIH1cblxuICBASW5wdXQoJ2NsclZpcnR1YWxSb3dzVGVtcGxhdGVDYWNoZVNpemUnKVxuICBnZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplO1xuICB9XG4gIHNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUodmFsdWU6IENka1ZpcnR1YWxGb3JJbnB1dHM8VD5bJ2Nka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSddKSB7XG4gICAgdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKTtcbiAgfVxuXG4gIEBJbnB1dCgnY2xyVmlydHVhbFJvd3NJdGVtU2l6ZScpXG4gIGdldCBpdGVtU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZTtcbiAgfVxuICBzZXQgaXRlbVNpemUodmFsdWU6IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHNbJ2l0ZW1TaXplJ10pIHtcbiAgICB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpO1xuICB9XG5cbiAgQElucHV0KCdjbHJWaXJ0dWFsUm93c01pbkJ1ZmZlclB4JylcbiAgZ2V0IG1pbkJ1ZmZlclB4KCkge1xuICAgIHJldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4O1xuICB9XG4gIHNldCBtaW5CdWZmZXJQeCh2YWx1ZTogQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0c1snbWluQnVmZmVyUHgnXSkge1xuICAgIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCk7XG4gIH1cblxuICBASW5wdXQoJ2NsclZpcnR1YWxSb3dzTWF4QnVmZmVyUHgnKVxuICBnZXQgbWF4QnVmZmVyUHgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHg7XG4gIH1cbiAgc2V0IG1heEJ1ZmZlclB4KHZhbHVlOiBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzWydtYXhCdWZmZXJQeCddKSB7XG4gICAgdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmluamVjdG9yLnJ1bkluQ29udGV4dCgoKSA9PiB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCA9IHRoaXMuY3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQoXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHRoaXMubmdab25lLFxuICAgICAgICB0aGlzLmRpcmVjdGlvbmFsaXR5LFxuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXIsXG4gICAgICAgIHRoaXMudmlld3BvcnRSdWxlcixcbiAgICAgICAgdGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYsXG4gICAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5XG4gICAgICApO1xuXG4gICAgICB0aGlzLmNka1ZpcnR1YWxGb3IgPSBuZXcgQ2RrVmlydHVhbEZvck9mPFQ+KFxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYsXG4gICAgICAgIHRoaXMuaXRlcmFibGVEaWZmZXJzLFxuICAgICAgICB0aGlzLnZpZXdSZXBlYXRlcixcbiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIHRoaXMubmdab25lXG4gICAgICApO1xuXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5uZ09uSW5pdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ncmlkUm9sZUVsZW1lbnQgPSB0aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCdbcm9sZT1cImdyaWRcIl0nKTtcblxuICAgIHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLml0ZW1zLmNoYW5nZS5zdWJzY3JpYmUobmV3SXRlbXMgPT4ge1xuICAgICAgICB0aGlzLmNka1ZpcnR1YWxGb3IuY2RrVmlydHVhbEZvck9mID0gbmV3SXRlbXM7XG4gICAgICB9KSxcbiAgICAgIHRoaXMuY2RrVmlydHVhbEZvci5kYXRhU3RyZWFtLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVBcmlhUm93Q291bnQoZGF0YS5sZW5ndGgpO1xuICAgICAgfSksXG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtLnN1YnNjcmliZShyZW5kZXJlZFJhbmdlID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlZFJhbmdlQ2hhbmdlLmVtaXQocmVuZGVyZWRSYW5nZSk7XG4gICAgICB9KSxcbiAgICAgIHRoaXMuZGF0YWdyaWQucmVmcmVzaC5zdWJzY3JpYmUoZGF0YWdyaWRTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChkYXRhZ3JpZFN0YXRlLmZpbHRlcnMpIHtcbiAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudmlld1JlcGVhdGVyLmRldGFjaCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIHRoaXMuY2RrVmlydHVhbEZvcj8ubmdEb0NoZWNrKCk7XG4gICAgdGhpcy51cGRhdGVBcmlhUm93SW5kZXhlcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jZGtWaXJ0dWFsRm9yPy5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMubXV0YXRpb25DaGFuZ2VzPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRzKCkge1xuICAgIGlmICh0aGlzLmNka1ZpcnR1YWxGb3IpIHtcbiAgICAgIGZvciAoY29uc3QgY2RrVmlydHVhbEZvcklucHV0S2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuY2RrVmlydHVhbEZvcklucHV0cykgYXMgQ2RrVmlydHVhbEZvcklucHV0S2V5W10pIHtcbiAgICAgICAgaWYgKHRoaXMuY2RrVmlydHVhbEZvcltjZGtWaXJ0dWFsRm9ySW5wdXRLZXldICE9PSB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbY2RrVmlydHVhbEZvcklucHV0S2V5XSkge1xuICAgICAgICAgICh0aGlzLmNka1ZpcnR1YWxGb3IgYXMgYW55KVtjZGtWaXJ0dWFsRm9ySW5wdXRLZXldID0gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2Nka1ZpcnR1YWxGb3JJbnB1dEtleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKSB7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneS51cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShcbiAgICAgICAgdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSxcbiAgICAgICAgdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeCxcbiAgICAgICAgdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5tYXhCdWZmZXJQeFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFyaWFSb3dDb3VudChyb3dDb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5ncmlkUm9sZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1yb3djb3VudCcsIHJvd0NvdW50LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBcmlhUm93SW5kZXhlcygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmlld0NvbnRhaW5lclJlZi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5nZXQoaSkgYXMgRW1iZWRkZWRWaWV3UmVmPENka1ZpcnR1YWxGb3JPZkNvbnRleHQ8VD4+O1xuXG4gICAgICBjb25zdCByb290RWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSB2aWV3UmVmLnJvb3ROb2RlcztcbiAgICAgIGNvbnN0IGRhdGFncmlkUm93RWxlbWVudCA9IHJvb3RFbGVtZW50cy5maW5kKHJvd0VsZW1lbnQgPT4gcm93RWxlbWVudC50YWdOYW1lID09PSAnQ0xSLURHLVJPVycpO1xuICAgICAgY29uc3Qgcm93Um9sZUVsZW1lbnQgPSBkYXRhZ3JpZFJvd0VsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPVwicm93XCJdJyk7XG5cbiAgICAgIC8vIGFyaWEtcm93aW5kZXggc2hvdWxkIHN0YXJ0IHdpdGggb25lLCBub3QgemVybywgc28gd2UgaGF2ZSB0byBhZGQgb25lIHRvIHRoZSB6ZXJvLWJhc2VkIGluZGV4XG4gICAgICByb3dSb2xlRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLXJvd2luZGV4JywgKHZpZXdSZWYuY29udGV4dC5pbmRleCArIDEpLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQoXG4gICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIG5nWm9uZTogTmdab25lLFxuICAgIGRpcmVjdGlvbmFsaXR5OiBEaXJlY3Rpb25hbGl0eSxcbiAgICBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgIHZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gICAgZGF0YWdyaWRFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICB2aXJ0dWFsU2Nyb2xsU3RyYXRlZ3k6IEZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxTdHJhdGVneVxuICApIHtcbiAgICBjb25zdCBkYXRhZ3JpZERpdkVsZW1lbnQgPSBkYXRhZ3JpZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLmRhdGFncmlkJyk7XG4gICAgY29uc3QgZGF0YWdyaWRUYWJsZUVsZW1lbnQgPSBkYXRhZ3JpZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLmRhdGFncmlkLXRhYmxlJyk7XG4gICAgY29uc3QgZGF0YWdyaWRSb3dzRWxlbWVudCA9IGRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcuZGF0YWdyaWQtcm93cycpO1xuICAgIGNvbnN0IGRhdGFncmlkRGl2RWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPSB7IG5hdGl2ZUVsZW1lbnQ6IGRhdGFncmlkRGl2RWxlbWVudCB9O1xuXG4gICAgbGV0IHRvcE9mZnNldCA9IDA7XG4gICAgbGV0IHRvdGFsQ29udGVudFNpemUgPSAwO1xuXG4gICAgZnVuY3Rpb24gdXBkYXRlRGF0YWdyaWRFbGVtZW50U3R5bGVzKCkge1xuICAgICAgZGF0YWdyaWRSb3dzRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke3RvcE9mZnNldH1weClgO1xuICAgICAgZGF0YWdyaWRSb3dzRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt0b3RhbENvbnRlbnRTaXplIC0gdG9wT2Zmc2V0fXB4YDtcbiAgICB9XG5cbiAgICBjb25zdCB2aXJ0dWFsU2Nyb2xsVmlld3BvcnQgPSBuZXcgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KFxuICAgICAgZGF0YWdyaWREaXZFbGVtZW50UmVmLFxuICAgICAgY2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICBuZ1pvbmUsXG4gICAgICB2aXJ0dWFsU2Nyb2xsU3RyYXRlZ3ksXG4gICAgICBkaXJlY3Rpb25hbGl0eSxcbiAgICAgIHNjcm9sbERpc3BhdGNoZXIsXG4gICAgICB2aWV3cG9ydFJ1bGVyLFxuICAgICAgbnVsbCBhcyBhbnkgYXMgQ2RrVmlydHVhbFNjcm9sbGFibGVFbGVtZW50XG4gICAgKTtcblxuICAgIHZpcnR1YWxTY3JvbGxWaWV3cG9ydC5fY29udGVudFdyYXBwZXIgPSB7XG4gICAgICBuYXRpdmVFbGVtZW50OiB7XG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgc2V0IHRyYW5zZm9ybSh2YWx1ZTogYW55KSB7XG4gICAgICAgICAgICB0b3BPZmZzZXQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gMCA6ICsvdHJhbnNsYXRlWVxcKChbMC05XSspcHhcXCkvLmV4ZWModmFsdWUpPy5bMV07XG4gICAgICAgICAgICB1cGRhdGVEYXRhZ3JpZEVsZW1lbnRTdHlsZXMoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9IGFzIEVsZW1lbnRSZWY7XG5cbiAgICB2aXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSA9ICh2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICB0b3RhbENvbnRlbnRTaXplID0gdmFsdWU7XG4gICAgICBkYXRhZ3JpZFRhYmxlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt0b3RhbENvbnRlbnRTaXplfXB4YDtcbiAgICAgIHVwZGF0ZURhdGFncmlkRWxlbWVudFN0eWxlcygpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICB9XG59XG4iXX0=