@clr/angular 17.5.0 → 17.7.0

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 (562) hide show
  1. package/button/button-group/button.d.ts +6 -3
  2. package/clarity.api.md +616 -217
  3. package/data/datagrid/built-in/filters/datagrid-string-filter.d.ts +13 -4
  4. package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +5 -4
  5. package/data/datagrid/providers/columns.service.d.ts +1 -0
  6. package/data/datagrid/render/main-renderer.d.ts +4 -3
  7. package/data/datagrid/wrapped-cell.d.ts +1 -3
  8. package/data/datagrid/wrapped-column.d.ts +1 -3
  9. package/data/datagrid/wrapped-row.d.ts +1 -3
  10. package/esm2020/accordion/accordion-content.mjs +2 -2
  11. package/esm2020/accordion/accordion-description.mjs +2 -2
  12. package/esm2020/accordion/accordion-panel.mjs +2 -2
  13. package/esm2020/accordion/accordion-title.mjs +2 -2
  14. package/esm2020/accordion/accordion.mjs +2 -2
  15. package/esm2020/accordion/accordion.module.mjs +2 -2
  16. package/esm2020/accordion/chocolate/accordion-oompa-loompa.mjs +2 -2
  17. package/esm2020/accordion/chocolate/accordion-willy-wonka.mjs +2 -2
  18. package/esm2020/accordion/enums/accordion-status.enum.mjs +2 -2
  19. package/esm2020/accordion/enums/accordion-strategy.enum.mjs +2 -2
  20. package/esm2020/accordion/index.mjs +2 -2
  21. package/esm2020/accordion/models/accordion.model.mjs +2 -2
  22. package/esm2020/accordion/providers/accordion.service.mjs +2 -2
  23. package/esm2020/accordion/stepper/chocolate/stepper-oompa-loompa.mjs +2 -2
  24. package/esm2020/accordion/stepper/chocolate/stepper-willy-wonka.mjs +2 -2
  25. package/esm2020/accordion/stepper/index.mjs +2 -2
  26. package/esm2020/accordion/stepper/models/stepper.model.mjs +2 -2
  27. package/esm2020/accordion/stepper/providers/stepper.service.mjs +2 -2
  28. package/esm2020/accordion/stepper/step-button.mjs +2 -2
  29. package/esm2020/accordion/stepper/stepper-panel.mjs +2 -2
  30. package/esm2020/accordion/stepper/stepper.mjs +2 -2
  31. package/esm2020/accordion/stepper/stepper.module.mjs +2 -2
  32. package/esm2020/accordion/utils/animation.mjs +2 -2
  33. package/esm2020/button/button-group/button-group.mjs +4 -4
  34. package/esm2020/button/button-group/button-group.module.mjs +2 -2
  35. package/esm2020/button/button-group/button.mjs +17 -10
  36. package/esm2020/button/button-group/index.mjs +2 -2
  37. package/esm2020/button/button-loading/index.mjs +2 -2
  38. package/esm2020/button/button-loading/loading-button.mjs +2 -2
  39. package/esm2020/button/button-loading/loading-button.module.mjs +2 -2
  40. package/esm2020/button/button.module.mjs +2 -2
  41. package/esm2020/button/index.mjs +2 -2
  42. package/esm2020/button/providers/button-group-focus-handler.service.mjs +2 -2
  43. package/esm2020/button/providers/button-group-focus.enum.mjs +2 -2
  44. package/esm2020/button/providers/button-in-group.service.mjs +2 -2
  45. package/esm2020/clr-angular.module.mjs +2 -2
  46. package/esm2020/data/data.module.mjs +2 -2
  47. package/esm2020/data/datagrid/built-in/comparators/datagrid-property-comparator.mjs +2 -2
  48. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter-impl.mjs +2 -2
  49. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +19 -18
  50. package/esm2020/data/datagrid/built-in/filters/datagrid-property-numeric-filter.mjs +2 -2
  51. package/esm2020/data/datagrid/built-in/filters/datagrid-property-string-filter.mjs +2 -2
  52. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter-impl.mjs +2 -2
  53. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +64 -29
  54. package/esm2020/data/datagrid/built-in/nested-property.mjs +2 -2
  55. package/esm2020/data/datagrid/chocolate/actionable-oompa-loompa.mjs +2 -2
  56. package/esm2020/data/datagrid/chocolate/datagrid-willy-wonka.mjs +2 -2
  57. package/esm2020/data/datagrid/chocolate/expandable-oompa-loompa.mjs +2 -2
  58. package/esm2020/data/datagrid/datagrid-action-bar.mjs +2 -2
  59. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +2 -2
  60. package/esm2020/data/datagrid/datagrid-cell.mjs +2 -2
  61. package/esm2020/data/datagrid/datagrid-column-separator.mjs +2 -2
  62. package/esm2020/data/datagrid/datagrid-column-toggle-button.mjs +2 -2
  63. package/esm2020/data/datagrid/datagrid-column-toggle-trackby.mjs +2 -2
  64. package/esm2020/data/datagrid/datagrid-column-toggle.mjs +5 -4
  65. package/esm2020/data/datagrid/datagrid-column.mjs +3 -3
  66. package/esm2020/data/datagrid/datagrid-detail-body.mjs +2 -2
  67. package/esm2020/data/datagrid/datagrid-detail-header.mjs +2 -2
  68. package/esm2020/data/datagrid/datagrid-detail-registerer.mjs +2 -2
  69. package/esm2020/data/datagrid/datagrid-detail.mjs +2 -2
  70. package/esm2020/data/datagrid/datagrid-filter.mjs +2 -2
  71. package/esm2020/data/datagrid/datagrid-footer.mjs +2 -2
  72. package/esm2020/data/datagrid/datagrid-hideable-column.mjs +2 -2
  73. package/esm2020/data/datagrid/datagrid-if-detail.mjs +2 -2
  74. package/esm2020/data/datagrid/datagrid-if-expanded.service.mjs +2 -2
  75. package/esm2020/data/datagrid/datagrid-items.mjs +2 -2
  76. package/esm2020/data/datagrid/datagrid-page-size.mjs +2 -2
  77. package/esm2020/data/datagrid/datagrid-pagination.mjs +2 -2
  78. package/esm2020/data/datagrid/datagrid-placeholder.mjs +2 -2
  79. package/esm2020/data/datagrid/datagrid-row-detail.mjs +2 -2
  80. package/esm2020/data/datagrid/datagrid-row.mjs +2 -2
  81. package/esm2020/data/datagrid/datagrid-selection-cell.directive.mjs +2 -2
  82. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +14 -12
  83. package/esm2020/data/datagrid/datagrid.mjs +5 -6
  84. package/esm2020/data/datagrid/datagrid.module.mjs +2 -2
  85. package/esm2020/data/datagrid/enums/column-changes.enum.mjs +2 -2
  86. package/esm2020/data/datagrid/enums/display-mode.enum.mjs +2 -2
  87. package/esm2020/data/datagrid/enums/render-step.enum.mjs +2 -2
  88. package/esm2020/data/datagrid/enums/selection-type.mjs +2 -2
  89. package/esm2020/data/datagrid/enums/sort-order.enum.mjs +2 -2
  90. package/esm2020/data/datagrid/index.mjs +2 -2
  91. package/esm2020/data/datagrid/interfaces/column-state.interface.mjs +2 -2
  92. package/esm2020/data/datagrid/interfaces/comparator.interface.mjs +2 -2
  93. package/esm2020/data/datagrid/interfaces/filter.interface.mjs +2 -2
  94. package/esm2020/data/datagrid/interfaces/numeric-filter.interface.mjs +2 -2
  95. package/esm2020/data/datagrid/interfaces/state.interface.mjs +2 -2
  96. package/esm2020/data/datagrid/interfaces/string-filter.interface.mjs +2 -2
  97. package/esm2020/data/datagrid/providers/column-resizer.service.mjs +2 -2
  98. package/esm2020/data/datagrid/providers/column-state.provider.mjs +2 -2
  99. package/esm2020/data/datagrid/providers/columns.service.mjs +5 -2
  100. package/esm2020/data/datagrid/providers/custom-filter.mjs +2 -2
  101. package/esm2020/data/datagrid/providers/detail.service.mjs +2 -2
  102. package/esm2020/data/datagrid/providers/display-mode.service.mjs +2 -2
  103. package/esm2020/data/datagrid/providers/filters.mjs +2 -2
  104. package/esm2020/data/datagrid/providers/global-expandable-rows.mjs +2 -2
  105. package/esm2020/data/datagrid/providers/items.mjs +2 -2
  106. package/esm2020/data/datagrid/providers/page.mjs +2 -2
  107. package/esm2020/data/datagrid/providers/row-action-service.mjs +2 -2
  108. package/esm2020/data/datagrid/providers/selection.mjs +2 -2
  109. package/esm2020/data/datagrid/providers/sort.mjs +2 -2
  110. package/esm2020/data/datagrid/providers/state-debouncer.provider.mjs +2 -2
  111. package/esm2020/data/datagrid/providers/state.provider.mjs +2 -2
  112. package/esm2020/data/datagrid/providers/table-size.service.mjs +2 -2
  113. package/esm2020/data/datagrid/render/cell-renderer.mjs +2 -2
  114. package/esm2020/data/datagrid/render/constants.mjs +2 -2
  115. package/esm2020/data/datagrid/render/header-renderer.mjs +2 -2
  116. package/esm2020/data/datagrid/render/main-renderer.mjs +24 -20
  117. package/esm2020/data/datagrid/render/noop-dom-adapter.mjs +2 -2
  118. package/esm2020/data/datagrid/render/render-organizer.mjs +2 -2
  119. package/esm2020/data/datagrid/render/row-renderer.mjs +2 -2
  120. package/esm2020/data/datagrid/utils/datagrid-filter-registrar.mjs +2 -2
  121. package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +32 -23
  122. package/esm2020/data/datagrid/wrapped-cell.mjs +2 -5
  123. package/esm2020/data/datagrid/wrapped-column.mjs +2 -5
  124. package/esm2020/data/datagrid/wrapped-row.mjs +2 -5
  125. package/esm2020/data/index.mjs +2 -2
  126. package/esm2020/data/stack-view/index.mjs +2 -2
  127. package/esm2020/data/stack-view/stack-block.mjs +2 -2
  128. package/esm2020/data/stack-view/stack-content-input.mjs +2 -2
  129. package/esm2020/data/stack-view/stack-header.mjs +2 -2
  130. package/esm2020/data/stack-view/stack-view-custom-tags.mjs +2 -2
  131. package/esm2020/data/stack-view/stack-view.mjs +2 -2
  132. package/esm2020/data/stack-view/stack-view.module.mjs +2 -2
  133. package/esm2020/data/tree-view/index.mjs +2 -2
  134. package/esm2020/data/tree-view/models/async-array.mjs +2 -2
  135. package/esm2020/data/tree-view/models/declarative-tree-node.model.mjs +2 -2
  136. package/esm2020/data/tree-view/models/recursive-tree-node.model.mjs +2 -2
  137. package/esm2020/data/tree-view/models/selected-state.enum.mjs +2 -2
  138. package/esm2020/data/tree-view/models/tree-node.model.mjs +2 -2
  139. package/esm2020/data/tree-view/recursive-children.mjs +2 -2
  140. package/esm2020/data/tree-view/recursive-for-of.mjs +2 -2
  141. package/esm2020/data/tree-view/tree-features.service.mjs +2 -2
  142. package/esm2020/data/tree-view/tree-focus-manager.service.mjs +2 -2
  143. package/esm2020/data/tree-view/tree-node-link.mjs +2 -2
  144. package/esm2020/data/tree-view/tree-node.mjs +4 -4
  145. package/esm2020/data/tree-view/tree-view.module.mjs +2 -2
  146. package/esm2020/data/tree-view/tree.mjs +2 -2
  147. package/esm2020/emphasis/alert/alert-item.mjs +2 -2
  148. package/esm2020/emphasis/alert/alert-text.mjs +2 -2
  149. package/esm2020/emphasis/alert/alert.mjs +4 -4
  150. package/esm2020/emphasis/alert/alert.module.mjs +2 -2
  151. package/esm2020/emphasis/alert/alerts-pager.mjs +4 -4
  152. package/esm2020/emphasis/alert/alerts.mjs +4 -4
  153. package/esm2020/emphasis/alert/index.mjs +2 -2
  154. package/esm2020/emphasis/alert/providers/icon-and-types.service.mjs +2 -2
  155. package/esm2020/emphasis/alert/providers/multi-alert.service.mjs +2 -2
  156. package/esm2020/emphasis/alert/utils/alert-info-object.mjs +2 -2
  157. package/esm2020/emphasis/alert/utils/alert-types.mjs +2 -2
  158. package/esm2020/emphasis/emphasis.module.mjs +2 -2
  159. package/esm2020/emphasis/index.mjs +2 -2
  160. package/esm2020/forms/checkbox/checkbox-container.mjs +2 -2
  161. package/esm2020/forms/checkbox/checkbox-wrapper.mjs +2 -6
  162. package/esm2020/forms/checkbox/checkbox.mjs +2 -2
  163. package/esm2020/forms/checkbox/checkbox.module.mjs +2 -2
  164. package/esm2020/forms/checkbox/index.mjs +2 -2
  165. package/esm2020/forms/combobox/combobox-container.mjs +2 -2
  166. package/esm2020/forms/combobox/combobox.mjs +10 -10
  167. package/esm2020/forms/combobox/combobox.module.mjs +2 -2
  168. package/esm2020/forms/combobox/index.mjs +2 -2
  169. package/esm2020/forms/combobox/model/combobox.model.mjs +2 -2
  170. package/esm2020/forms/combobox/model/multi-select-combobox.model.mjs +2 -2
  171. package/esm2020/forms/combobox/model/pseudo-focus.model.mjs +2 -2
  172. package/esm2020/forms/combobox/model/single-select-combobox.model.mjs +2 -2
  173. package/esm2020/forms/combobox/option-items.directive.mjs +2 -2
  174. package/esm2020/forms/combobox/option-selected.directive.mjs +2 -2
  175. package/esm2020/forms/combobox/option.mjs +2 -2
  176. package/esm2020/forms/combobox/options.mjs +2 -2
  177. package/esm2020/forms/combobox/providers/combobox-container.service.mjs +2 -2
  178. package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +2 -2
  179. package/esm2020/forms/combobox/providers/option-selection.service.mjs +2 -2
  180. package/esm2020/forms/common/abstract-container.mjs +13 -6
  181. package/esm2020/forms/common/abstract-control.mjs +2 -2
  182. package/esm2020/forms/common/common.module.mjs +2 -2
  183. package/esm2020/forms/common/control-container.mjs +2 -2
  184. package/esm2020/forms/common/control.mjs +2 -2
  185. package/esm2020/forms/common/error.mjs +2 -2
  186. package/esm2020/forms/common/form.mjs +2 -2
  187. package/esm2020/forms/common/helper.mjs +2 -2
  188. package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +4 -2
  189. package/esm2020/forms/common/if-control-state/if-control-state.service.mjs +30 -28
  190. package/esm2020/forms/common/if-control-state/if-error.mjs +10 -6
  191. package/esm2020/forms/common/if-control-state/if-success.mjs +2 -2
  192. package/esm2020/forms/common/index.mjs +2 -2
  193. package/esm2020/forms/common/label.mjs +5 -2
  194. package/esm2020/forms/common/layout.mjs +2 -2
  195. package/esm2020/forms/common/providers/container-id.service.mjs +2 -2
  196. package/esm2020/forms/common/providers/control-class.service.mjs +2 -2
  197. package/esm2020/forms/common/providers/control-id.service.mjs +2 -2
  198. package/esm2020/forms/common/providers/focus.service.mjs +2 -2
  199. package/esm2020/forms/common/providers/layout.service.mjs +2 -2
  200. package/esm2020/forms/common/providers/mark-control.service.mjs +2 -2
  201. package/esm2020/forms/common/providers/ng-control.service.mjs +21 -2
  202. package/esm2020/forms/common/success.mjs +2 -2
  203. package/esm2020/forms/common/wrapped-control.mjs +43 -19
  204. package/esm2020/forms/datalist/datalist-container.mjs +2 -2
  205. package/esm2020/forms/datalist/datalist-input.mjs +2 -2
  206. package/esm2020/forms/datalist/datalist.mjs +2 -2
  207. package/esm2020/forms/datalist/datalist.module.mjs +2 -2
  208. package/esm2020/forms/datalist/index.mjs +2 -2
  209. package/esm2020/forms/datalist/providers/datalist-id.service.mjs +2 -2
  210. package/esm2020/forms/datepicker/calendar.mjs +65 -10
  211. package/esm2020/forms/datepicker/date-container.mjs +103 -10
  212. package/esm2020/forms/datepicker/date-end-input.mjs +60 -0
  213. package/esm2020/forms/datepicker/date-input.mjs +74 -80
  214. package/esm2020/forms/datepicker/date-input.validator.mjs +65 -6
  215. package/esm2020/forms/datepicker/date-single-input.mjs +63 -0
  216. package/esm2020/forms/datepicker/date-start-input.mjs +61 -0
  217. package/esm2020/forms/datepicker/datepicker-action-buttons.mjs +59 -0
  218. package/esm2020/forms/datepicker/datepicker-view-manager.mjs +34 -11
  219. package/esm2020/forms/datepicker/datepicker.module.mjs +30 -8
  220. package/esm2020/forms/datepicker/day.mjs +58 -15
  221. package/esm2020/forms/datepicker/daypicker.mjs +2 -2
  222. package/esm2020/forms/datepicker/index.mjs +6 -2
  223. package/esm2020/forms/datepicker/interfaces/date-range.interface.mjs +2 -2
  224. package/esm2020/forms/datepicker/interfaces/day-of-week.interface.mjs +2 -2
  225. package/esm2020/forms/datepicker/model/calendar-view.model.mjs +31 -6
  226. package/esm2020/forms/datepicker/model/calendar.model.mjs +14 -2
  227. package/esm2020/forms/datepicker/model/day-view.model.mjs +5 -3
  228. package/esm2020/forms/datepicker/model/day.model.mjs +18 -2
  229. package/esm2020/forms/datepicker/model/year-range.model.mjs +2 -2
  230. package/esm2020/forms/datepicker/monthpicker.mjs +237 -40
  231. package/esm2020/forms/datepicker/providers/date-form-control.service.mjs +2 -2
  232. package/esm2020/forms/datepicker/providers/date-io.service.mjs +21 -2
  233. package/esm2020/forms/datepicker/providers/date-navigation.service.mjs +75 -8
  234. package/esm2020/forms/datepicker/providers/datepicker-enabled.service.mjs +2 -2
  235. package/esm2020/forms/datepicker/providers/datepicker-focus.service.mjs +2 -2
  236. package/esm2020/forms/datepicker/providers/locale-helper.service.mjs +2 -2
  237. package/esm2020/forms/datepicker/providers/view-manager.service.mjs +2 -2
  238. package/esm2020/forms/datepicker/utils/constants.mjs +2 -2
  239. package/esm2020/forms/datepicker/utils/date-utils.mjs +2 -2
  240. package/esm2020/forms/datepicker/yearpicker.mjs +132 -58
  241. package/esm2020/forms/file-input/file-input-container.mjs +102 -14
  242. package/esm2020/forms/file-input/file-input-validator-errors.mjs +8 -0
  243. package/esm2020/forms/file-input/file-input-validator.mjs +15 -23
  244. package/esm2020/forms/file-input/file-input-value-accessor.mjs +2 -2
  245. package/esm2020/forms/file-input/file-input.helpers.mjs +2 -2
  246. package/esm2020/forms/file-input/file-input.mjs +4 -3
  247. package/esm2020/forms/file-input/file-input.module.mjs +36 -5
  248. package/esm2020/forms/file-input/file-list.mjs +160 -0
  249. package/esm2020/forms/file-input/file-messages-template.mjs +26 -0
  250. package/esm2020/forms/file-input/file-messages.mjs +61 -0
  251. package/esm2020/forms/file-input/index.mjs +6 -2
  252. package/esm2020/forms/forms.module.mjs +8 -4
  253. package/esm2020/forms/index.mjs +3 -2
  254. package/esm2020/forms/input/index.mjs +2 -2
  255. package/esm2020/forms/input/input-container.mjs +12 -4
  256. package/esm2020/forms/input/input.mjs +11 -2
  257. package/esm2020/forms/input/input.module.mjs +2 -2
  258. package/esm2020/forms/number-input/index.mjs +10 -0
  259. package/esm2020/forms/number-input/number-input-container.mjs +145 -0
  260. package/esm2020/forms/number-input/number-input.mjs +72 -0
  261. package/esm2020/forms/number-input/number-input.module.mjs +32 -0
  262. package/esm2020/forms/password/index.mjs +2 -2
  263. package/esm2020/forms/password/password-container.mjs +2 -2
  264. package/esm2020/forms/password/password.mjs +2 -2
  265. package/esm2020/forms/password/password.module.mjs +2 -2
  266. package/esm2020/forms/radio/index.mjs +2 -2
  267. package/esm2020/forms/radio/radio-container.mjs +2 -2
  268. package/esm2020/forms/radio/radio-wrapper.mjs +2 -8
  269. package/esm2020/forms/radio/radio.mjs +2 -2
  270. package/esm2020/forms/radio/radio.module.mjs +2 -2
  271. package/esm2020/forms/range/index.mjs +2 -2
  272. package/esm2020/forms/range/range-container.mjs +2 -2
  273. package/esm2020/forms/range/range.mjs +2 -2
  274. package/esm2020/forms/range/range.module.mjs +2 -2
  275. package/esm2020/forms/select/index.mjs +2 -2
  276. package/esm2020/forms/select/select-container.mjs +2 -2
  277. package/esm2020/forms/select/select.mjs +2 -2
  278. package/esm2020/forms/select/select.module.mjs +2 -2
  279. package/esm2020/forms/textarea/index.mjs +2 -2
  280. package/esm2020/forms/textarea/textarea-container.mjs +2 -2
  281. package/esm2020/forms/textarea/textarea.mjs +2 -2
  282. package/esm2020/forms/textarea/textarea.module.mjs +2 -2
  283. package/esm2020/icon/icon.mjs +2 -2
  284. package/esm2020/icon/icon.module.mjs +2 -2
  285. package/esm2020/icon/index.mjs +2 -2
  286. package/esm2020/index.mjs +2 -2
  287. package/esm2020/layout/breadcrumbs/breadcrumb-item.mjs +2 -2
  288. package/esm2020/layout/breadcrumbs/breadcrumbs.constants.mjs +2 -2
  289. package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +4 -4
  290. package/esm2020/layout/breadcrumbs/breadcrumbs.module.mjs +2 -2
  291. package/esm2020/layout/breadcrumbs/index.mjs +2 -2
  292. package/esm2020/layout/breadcrumbs/model/breadcrumbs.model.mjs +2 -2
  293. package/esm2020/layout/index.mjs +2 -2
  294. package/esm2020/layout/layout.module.mjs +2 -2
  295. package/esm2020/layout/main-container/index.mjs +2 -2
  296. package/esm2020/layout/main-container/main-container.mjs +2 -2
  297. package/esm2020/layout/main-container/main-container.module.mjs +2 -2
  298. package/esm2020/layout/nav/aria-current-link.mjs +2 -2
  299. package/esm2020/layout/nav/chocolate/index.mjs +2 -2
  300. package/esm2020/layout/nav/chocolate/main-container-willy-wonka.mjs +2 -2
  301. package/esm2020/layout/nav/chocolate/nav-detection-oompa-loompa.mjs +2 -2
  302. package/esm2020/layout/nav/header.mjs +2 -2
  303. package/esm2020/layout/nav/index.mjs +2 -2
  304. package/esm2020/layout/nav/nav-level.mjs +2 -2
  305. package/esm2020/layout/nav/navigation.module.mjs +2 -2
  306. package/esm2020/layout/nav/providers/responsive-navigation.service.mjs +2 -2
  307. package/esm2020/layout/nav/responsive-nav-codes.mjs +2 -2
  308. package/esm2020/layout/nav/responsive-nav-control-message.mjs +2 -2
  309. package/esm2020/layout/tabs/chocolate/active-oompa-loompa.mjs +2 -2
  310. package/esm2020/layout/tabs/chocolate/tabs-willy-wonka.mjs +2 -2
  311. package/esm2020/layout/tabs/enums/tabs-layout.enum.mjs +2 -2
  312. package/esm2020/layout/tabs/index.mjs +2 -2
  313. package/esm2020/layout/tabs/providers/tabs.service.mjs +2 -2
  314. package/esm2020/layout/tabs/tab-action.directive.mjs +2 -2
  315. package/esm2020/layout/tabs/tab-content.mjs +2 -2
  316. package/esm2020/layout/tabs/tab-link.directive.mjs +2 -2
  317. package/esm2020/layout/tabs/tab-overflow-content.mjs +2 -2
  318. package/esm2020/layout/tabs/tab.mjs +2 -2
  319. package/esm2020/layout/tabs/tabs-actions.mjs +2 -2
  320. package/esm2020/layout/tabs/tabs-id.provider.mjs +2 -2
  321. package/esm2020/layout/tabs/tabs.mjs +2 -2
  322. package/esm2020/layout/tabs/tabs.module.mjs +2 -2
  323. package/esm2020/layout/vertical-nav/index.mjs +2 -2
  324. package/esm2020/layout/vertical-nav/providers/vertical-nav-group-registration.service.mjs +2 -2
  325. package/esm2020/layout/vertical-nav/providers/vertical-nav-group.service.mjs +2 -2
  326. package/esm2020/layout/vertical-nav/providers/vertical-nav-icon.service.mjs +2 -2
  327. package/esm2020/layout/vertical-nav/providers/vertical-nav.service.mjs +2 -2
  328. package/esm2020/layout/vertical-nav/vertical-nav-group-children.mjs +2 -2
  329. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +4 -4
  330. package/esm2020/layout/vertical-nav/vertical-nav-icon.mjs +2 -2
  331. package/esm2020/layout/vertical-nav/vertical-nav-link.mjs +2 -2
  332. package/esm2020/layout/vertical-nav/vertical-nav.mjs +10 -5
  333. package/esm2020/layout/vertical-nav/vertical-nav.module.mjs +2 -2
  334. package/esm2020/modal/index.mjs +3 -2
  335. package/esm2020/modal/modal-body.mjs +2 -2
  336. package/esm2020/modal/modal-configuration.service.mjs +2 -2
  337. package/esm2020/modal/modal-host.directive.mjs +20 -0
  338. package/esm2020/modal/modal-stack.service.mjs +2 -2
  339. package/esm2020/modal/modal.mjs +12 -6
  340. package/esm2020/modal/modal.module.mjs +5 -4
  341. package/esm2020/modal/side-panel.mjs +90 -14
  342. package/esm2020/modal/side-panel.module.mjs +5 -5
  343. package/esm2020/popover/common/abstract-popover.mjs +14 -16
  344. package/esm2020/popover/common/popover-host-anchor.token.mjs +2 -2
  345. package/esm2020/popover/common/popover-options.interface.mjs +2 -2
  346. package/esm2020/popover/common/popover.mjs +2 -2
  347. package/esm2020/popover/dropdown/dropdown-item.mjs +2 -2
  348. package/esm2020/popover/dropdown/dropdown-menu.mjs +2 -2
  349. package/esm2020/popover/dropdown/dropdown-trigger.mjs +2 -2
  350. package/esm2020/popover/dropdown/dropdown.mjs +2 -2
  351. package/esm2020/popover/dropdown/dropdown.module.mjs +2 -2
  352. package/esm2020/popover/dropdown/index.mjs +2 -2
  353. package/esm2020/popover/dropdown/menu-positions.mjs +2 -2
  354. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +2 -2
  355. package/esm2020/popover/dropdown/providers/dropdown.service.mjs +2 -2
  356. package/esm2020/popover/index.mjs +2 -2
  357. package/esm2020/popover/popover.module.mjs +2 -2
  358. package/esm2020/popover/signpost/index.mjs +2 -2
  359. package/esm2020/popover/signpost/providers/signpost-focus-manager.service.mjs +2 -2
  360. package/esm2020/popover/signpost/providers/signpost-id.service.mjs +2 -2
  361. package/esm2020/popover/signpost/signpost-content.mjs +2 -2
  362. package/esm2020/popover/signpost/signpost-positions.mjs +2 -2
  363. package/esm2020/popover/signpost/signpost-title.mjs +2 -2
  364. package/esm2020/popover/signpost/signpost-trigger.mjs +2 -2
  365. package/esm2020/popover/signpost/signpost.mjs +2 -2
  366. package/esm2020/popover/signpost/signpost.module.mjs +2 -2
  367. package/esm2020/popover/tooltip/index.mjs +2 -2
  368. package/esm2020/popover/tooltip/providers/tooltip-id.service.mjs +2 -2
  369. package/esm2020/popover/tooltip/providers/tooltip-mouse.service.mjs +2 -2
  370. package/esm2020/popover/tooltip/tooltip-content.mjs +2 -2
  371. package/esm2020/popover/tooltip/tooltip-trigger.mjs +2 -2
  372. package/esm2020/popover/tooltip/tooltip.mjs +2 -2
  373. package/esm2020/popover/tooltip/tooltip.module.mjs +2 -2
  374. package/esm2020/progress/progress-bars/index.mjs +2 -2
  375. package/esm2020/progress/progress-bars/progress-bar.mjs +2 -2
  376. package/esm2020/progress/progress-bars/progress-bar.module.mjs +2 -2
  377. package/esm2020/progress/spinner/index.mjs +2 -2
  378. package/esm2020/progress/spinner/spinner.mjs +2 -2
  379. package/esm2020/progress/spinner/spinner.module.mjs +2 -2
  380. package/esm2020/timeline/enums/timeline-layout.enum.mjs +2 -2
  381. package/esm2020/timeline/enums/timeline-step-state.enum.mjs +2 -2
  382. package/esm2020/timeline/index.mjs +2 -2
  383. package/esm2020/timeline/interface/icon-attribute.interface.mjs +2 -2
  384. package/esm2020/timeline/providers/timeline-icon-attribute.service.mjs +2 -2
  385. package/esm2020/timeline/timeline-step-description.mjs +2 -2
  386. package/esm2020/timeline/timeline-step-header.mjs +2 -2
  387. package/esm2020/timeline/timeline-step-title.mjs +2 -2
  388. package/esm2020/timeline/timeline-step.mjs +2 -2
  389. package/esm2020/timeline/timeline.mjs +2 -2
  390. package/esm2020/timeline/timeline.module.mjs +2 -2
  391. package/esm2020/utils/animations/collapse/collapse.mjs +2 -2
  392. package/esm2020/utils/animations/collapse/index.mjs +2 -2
  393. package/esm2020/utils/animations/constants.mjs +2 -2
  394. package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +2 -2
  395. package/esm2020/utils/animations/expandable-animation/expandable-animation.module.mjs +2 -2
  396. package/esm2020/utils/animations/expandable-animation/index.mjs +2 -2
  397. package/esm2020/utils/animations/fade/fade.mjs +2 -2
  398. package/esm2020/utils/animations/fade/index.mjs +2 -2
  399. package/esm2020/utils/animations/fade-slide/fade-slide.mjs +2 -2
  400. package/esm2020/utils/animations/fade-slide/index.mjs +2 -2
  401. package/esm2020/utils/animations/index.mjs +2 -2
  402. package/esm2020/utils/animations/slide/index.mjs +2 -2
  403. package/esm2020/utils/animations/slide/slide.mjs +2 -2
  404. package/esm2020/utils/assert/assert.helpers.mjs +2 -2
  405. package/esm2020/utils/breakpoints/breakpoints.mjs +2 -2
  406. package/esm2020/utils/cdk/cdk-drag.module.mjs +1 -1
  407. package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +2 -2
  408. package/esm2020/utils/chocolate/oompa-loompa.mjs +2 -2
  409. package/esm2020/utils/chocolate/willy-wonka.mjs +2 -2
  410. package/esm2020/utils/component/is-boolean-attribute-set.mjs +2 -2
  411. package/esm2020/utils/conditional/conditional.module.mjs +2 -2
  412. package/esm2020/utils/conditional/if-active.directive.mjs +2 -2
  413. package/esm2020/utils/conditional/if-active.service.mjs +2 -2
  414. package/esm2020/utils/conditional/if-expanded.directive.mjs +2 -2
  415. package/esm2020/utils/conditional/if-expanded.service.mjs +2 -2
  416. package/esm2020/utils/conditional/if-open.directive.mjs +2 -2
  417. package/esm2020/utils/conditional/index.mjs +2 -2
  418. package/esm2020/utils/destroy/destroy.service.mjs +2 -2
  419. package/esm2020/utils/destroy/index.mjs +2 -2
  420. package/esm2020/utils/dom-adapter/dom-adapter.mjs +2 -2
  421. package/esm2020/utils/enums/keys.enum.mjs +4 -2
  422. package/esm2020/utils/focus/arrow-key-direction.enum.mjs +2 -2
  423. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +2 -2
  424. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.module.mjs +2 -2
  425. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.provider.mjs +2 -2
  426. package/esm2020/utils/focus/focus-on-view-init/index.mjs +2 -2
  427. package/esm2020/utils/focus/focus-trap/index.mjs +2 -2
  428. package/esm2020/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.mjs +2 -2
  429. package/esm2020/utils/focus/focus.service.mjs +2 -2
  430. package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +2 -2
  431. package/esm2020/utils/focus/focusable-item/custom-focusable-item-provider.mjs +2 -2
  432. package/esm2020/utils/focus/focusable-item/focusable-item.mjs +2 -2
  433. package/esm2020/utils/focus/focusable-item/linkers.mjs +2 -2
  434. package/esm2020/utils/focus/key-focus/enums/focus-direction.enum.mjs +2 -2
  435. package/esm2020/utils/focus/key-focus/index.mjs +2 -2
  436. package/esm2020/utils/focus/key-focus/interfaces.mjs +2 -2
  437. package/esm2020/utils/focus/key-focus/key-focus-item.mjs +2 -2
  438. package/esm2020/utils/focus/key-focus/key-focus.mjs +2 -2
  439. package/esm2020/utils/focus/key-focus/key-focus.module.mjs +2 -2
  440. package/esm2020/utils/focus/key-focus/roving-tabindex.mjs +2 -2
  441. package/esm2020/utils/focus/key-focus/util.mjs +2 -2
  442. package/esm2020/utils/focus/wrap-observable.mjs +2 -2
  443. package/esm2020/utils/forms/validation.mjs +2 -2
  444. package/esm2020/utils/host-wrapping/empty-anchor.mjs +2 -2
  445. package/esm2020/utils/host-wrapping/host-wrapper.mjs +2 -4
  446. package/esm2020/utils/host-wrapping/host-wrapping.module.mjs +2 -2
  447. package/esm2020/utils/i18n/common-strings.default.mjs +6 -2
  448. package/esm2020/utils/i18n/common-strings.interface.mjs +2 -2
  449. package/esm2020/utils/i18n/common-strings.service.mjs +2 -2
  450. package/esm2020/utils/i18n/index.mjs +2 -2
  451. package/esm2020/utils/id-generator/id-generator.service.mjs +2 -2
  452. package/esm2020/utils/index.mjs +2 -2
  453. package/esm2020/utils/loading/index.mjs +2 -2
  454. package/esm2020/utils/loading/loading-listener.mjs +2 -2
  455. package/esm2020/utils/loading/loading.mjs +2 -2
  456. package/esm2020/utils/loading/loading.module.mjs +2 -2
  457. package/esm2020/utils/outside-click/index.mjs +2 -2
  458. package/esm2020/utils/outside-click/outside-click.mjs +2 -2
  459. package/esm2020/utils/outside-click/outside-click.module.mjs +2 -2
  460. package/esm2020/utils/popover/enums/alignment.enum.mjs +2 -2
  461. package/esm2020/utils/popover/enums/axis.enum.mjs +2 -2
  462. package/esm2020/utils/popover/enums/positions.enum.mjs +2 -2
  463. package/esm2020/utils/popover/enums/side.enum.mjs +2 -2
  464. package/esm2020/utils/popover/enums/viewport-violation.enum.mjs +2 -2
  465. package/esm2020/utils/popover/index.mjs +2 -2
  466. package/esm2020/utils/popover/interfaces/popover-content-offset.interface.mjs +2 -2
  467. package/esm2020/utils/popover/interfaces/popover-position.interface.mjs +2 -2
  468. package/esm2020/utils/popover/interfaces/visibility-coords.interface.mjs +2 -2
  469. package/esm2020/utils/popover/popover-anchor.mjs +2 -2
  470. package/esm2020/utils/popover/popover-close-button.mjs +2 -2
  471. package/esm2020/utils/popover/popover-content.mjs +2 -2
  472. package/esm2020/utils/popover/popover-host.directive.mjs +2 -2
  473. package/esm2020/utils/popover/popover-open-close-button.mjs +2 -2
  474. package/esm2020/utils/popover/popover.module.mjs +2 -2
  475. package/esm2020/utils/popover/position-operators.mjs +2 -2
  476. package/esm2020/utils/popover/providers/popover-events.service.mjs +2 -2
  477. package/esm2020/utils/popover/providers/popover-position.service.mjs +2 -2
  478. package/esm2020/utils/popover/providers/popover-toggle.service.mjs +2 -2
  479. package/esm2020/utils/popover/stop-escape-propagation.directive.mjs +2 -2
  480. package/esm2020/utils/scrolling/scrolling-service.mjs +2 -2
  481. package/esm2020/utils/template-ref/index.mjs +2 -2
  482. package/esm2020/utils/template-ref/template-ref-container.mjs +2 -2
  483. package/esm2020/utils/template-ref/template-ref.module.mjs +2 -2
  484. package/esm2020/wizard/heading-level.mjs +2 -2
  485. package/esm2020/wizard/index.mjs +2 -2
  486. package/esm2020/wizard/providers/button-hub.service.mjs +2 -2
  487. package/esm2020/wizard/providers/header-actions.service.mjs +2 -2
  488. package/esm2020/wizard/providers/page-collection.service.mjs +2 -2
  489. package/esm2020/wizard/providers/wizard-navigation.service.mjs +2 -2
  490. package/esm2020/wizard/wizard-button.mjs +2 -2
  491. package/esm2020/wizard/wizard-header-action.mjs +2 -2
  492. package/esm2020/wizard/wizard-page-buttons.mjs +2 -2
  493. package/esm2020/wizard/wizard-page-header-actions.mjs +2 -2
  494. package/esm2020/wizard/wizard-page-navtitle.mjs +2 -2
  495. package/esm2020/wizard/wizard-page-title.mjs +2 -2
  496. package/esm2020/wizard/wizard-page.mjs +2 -2
  497. package/esm2020/wizard/wizard-stepnav-item.mjs +6 -2
  498. package/esm2020/wizard/wizard-stepnav.mjs +2 -2
  499. package/esm2020/wizard/wizard-title.mjs +2 -2
  500. package/esm2020/wizard/wizard.mjs +11 -5
  501. package/esm2020/wizard/wizard.module.mjs +2 -2
  502. package/fesm2015/clr-angular.mjs +14736 -12993
  503. package/fesm2015/clr-angular.mjs.map +1 -1
  504. package/fesm2020/clr-angular.mjs +14416 -12708
  505. package/fesm2020/clr-angular.mjs.map +1 -1
  506. package/forms/checkbox/checkbox-wrapper.d.ts +1 -3
  507. package/forms/common/abstract-container.d.ts +4 -3
  508. package/forms/common/if-control-state/abstract-if-state.d.ts +1 -0
  509. package/forms/common/if-control-state/if-control-state.service.d.ts +4 -7
  510. package/forms/common/providers/ng-control.service.d.ts +8 -0
  511. package/forms/common/wrapped-control.d.ts +7 -4
  512. package/forms/datepicker/calendar.d.ts +10 -1
  513. package/forms/datepicker/date-container.d.ts +16 -3
  514. package/forms/datepicker/date-end-input.d.ts +15 -0
  515. package/forms/datepicker/date-input.d.ts +18 -12
  516. package/forms/datepicker/date-input.validator.d.ts +18 -1
  517. package/forms/datepicker/date-single-input.d.ts +15 -0
  518. package/forms/datepicker/date-start-input.d.ts +15 -0
  519. package/forms/datepicker/datepicker-action-buttons.d.ts +16 -0
  520. package/forms/datepicker/datepicker-view-manager.d.ts +9 -1
  521. package/forms/datepicker/datepicker.module.d.ts +18 -14
  522. package/forms/datepicker/day.d.ts +16 -6
  523. package/forms/datepicker/index.d.ts +4 -0
  524. package/forms/datepicker/interfaces/date-range.interface.d.ts +8 -0
  525. package/forms/datepicker/model/calendar-view.model.d.ts +12 -2
  526. package/forms/datepicker/model/calendar.model.d.ts +8 -0
  527. package/forms/datepicker/model/day-view.model.d.ts +3 -1
  528. package/forms/datepicker/model/day.model.d.ts +8 -0
  529. package/forms/datepicker/monthpicker.d.ts +43 -2
  530. package/forms/datepicker/providers/date-io.service.d.ts +5 -1
  531. package/forms/datepicker/providers/date-navigation.service.d.ts +32 -2
  532. package/forms/datepicker/yearpicker.d.ts +14 -0
  533. package/forms/file-input/file-input-container.d.ts +15 -4
  534. package/forms/file-input/file-input-validator-errors.d.ts +52 -0
  535. package/forms/file-input/file-input.module.d.ts +7 -4
  536. package/forms/file-input/file-list.d.ts +18 -0
  537. package/forms/file-input/file-messages-template.d.ts +19 -0
  538. package/forms/file-input/file-messages.d.ts +17 -0
  539. package/forms/file-input/index.d.ts +4 -0
  540. package/forms/forms.module.d.ts +2 -1
  541. package/forms/index.d.ts +1 -0
  542. package/forms/input/input-container.d.ts +1 -1
  543. package/forms/number-input/index.d.ts +3 -0
  544. package/forms/number-input/number-input-container.d.ts +16 -0
  545. package/forms/number-input/number-input.d.ts +20 -0
  546. package/forms/number-input/number-input.module.d.ts +13 -0
  547. package/forms/radio/radio-wrapper.d.ts +1 -3
  548. package/layout/vertical-nav/vertical-nav.d.ts +3 -1
  549. package/modal/index.d.ts +1 -0
  550. package/modal/modal-host.directive.d.ts +5 -0
  551. package/modal/modal.d.ts +4 -2
  552. package/modal/modal.module.d.ts +5 -4
  553. package/modal/side-panel.d.ts +25 -6
  554. package/modal/side-panel.module.d.ts +1 -1
  555. package/package.json +2 -2
  556. package/popover/common/abstract-popover.d.ts +0 -1
  557. package/utils/enums/keys.enum.d.ts +3 -1
  558. package/utils/host-wrapping/host-wrapper.d.ts +1 -2
  559. package/utils/i18n/common-strings.interface.d.ts +16 -0
  560. package/wizard/wizard.d.ts +2 -1
  561. package/esm2020/utils/host-wrapping/dynamic-wrapper.mjs +0 -8
  562. package/utils/host-wrapping/dynamic-wrapper.d.ts +0 -3
@@ -1,13 +1,12 @@
1
1
  /*
2
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
2
+ * Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
3
3
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4
4
  * This software is released under MIT license.
5
5
  * The full license information can be found in LICENSE in the root directory of this project.
6
6
  */
7
7
  import { isPlatformBrowser } from '@angular/common';
8
- import { Directive, EventEmitter, HostBinding, HostListener, Inject, Input, Optional, Output, PLATFORM_ID, Self, } from '@angular/core';
9
- import { of } from 'rxjs';
10
- import { filter, switchMap } from 'rxjs/operators';
8
+ import { Directive, forwardRef, HostBinding, HostListener, Inject, Input, Optional, PLATFORM_ID, Self, } from '@angular/core';
9
+ import { filter } from 'rxjs/operators';
11
10
  import { isBooleanAttributeSet } from '../../utils/component/is-boolean-attribute-set';
12
11
  import { WrappedFormControl } from '../common/wrapped-control';
13
12
  import { ClrDateContainer } from './date-container';
@@ -16,23 +15,22 @@ import { DateFormControlService } from './providers/date-form-control.service';
16
15
  import { DateIOService } from './providers/date-io.service';
17
16
  import { DateNavigationService } from './providers/date-navigation.service';
18
17
  import { DatepickerEnabledService } from './providers/datepicker-enabled.service';
19
- import { DatepickerFocusService } from './providers/datepicker-focus.service';
20
18
  import { datesAreEqual } from './utils/date-utils';
21
19
  import * as i0 from "@angular/core";
22
20
  import * as i1 from "@angular/forms";
23
- import * as i2 from "./date-container";
24
- import * as i3 from "./providers/date-io.service";
25
- import * as i4 from "./providers/date-navigation.service";
26
- import * as i5 from "./providers/datepicker-enabled.service";
27
- import * as i6 from "./providers/date-form-control.service";
28
- import * as i7 from "../common/providers/focus.service";
29
- import * as i8 from "./providers/datepicker-focus.service";
21
+ import * as i2 from "./providers/date-io.service";
22
+ import * as i3 from "./providers/date-navigation.service";
23
+ import * as i4 from "./providers/datepicker-enabled.service";
24
+ import * as i5 from "./providers/date-form-control.service";
25
+ import * as i6 from "../common/providers/focus.service";
26
+ import * as i7 from "./providers/datepicker-focus.service";
27
+ import * as i8 from "./date-container";
30
28
  // There are four ways the datepicker value is set
31
29
  // 1. Value set by user typing into text input as a string ex: '01/28/2015'
32
30
  // 2. Value set explicitly by Angular Forms APIs as a string ex: '01/28/2015'
33
31
  // 3. Value set by user via datepicker UI as a Date Object
34
32
  // 4. Value set via `clrDate` input as a Date Object
35
- export class ClrDateInput extends WrappedFormControl {
33
+ export class ClrDateInputBase extends WrappedFormControl {
36
34
  constructor(viewContainerRef, injector, el, renderer, control, container, dateIOService, dateNavigationService, datepickerEnabledService, dateFormControlService, platformId, focusService, datepickerFocusService) {
37
35
  super(viewContainerRef, ClrDateContainer, injector, control, renderer, el);
38
36
  this.el = el;
@@ -46,28 +44,11 @@ export class ClrDateInput extends WrappedFormControl {
46
44
  this.platformId = platformId;
47
45
  this.focusService = focusService;
48
46
  this.datepickerFocusService = datepickerFocusService;
49
- this.dateChange = new EventEmitter(false);
50
47
  this.index = 1;
51
48
  }
52
- set date(date) {
53
- if (this.previousDateChange !== date) {
54
- this.updateDate(this.getValidDateValueFromDate(date));
55
- }
56
- if (!this.initialClrDateInputValue) {
57
- this.initialClrDateInputValue = date;
58
- }
59
- }
60
- set min(dateString) {
61
- this.dateIOService.setMinDate(dateString);
62
- this.triggerControlValidation();
63
- }
64
- set max(dateString) {
65
- this.dateIOService.setMaxDate(dateString);
66
- this.triggerControlValidation();
67
- }
68
49
  get disabled() {
69
50
  if (this.dateFormControlService) {
70
- return this.dateFormControlService.disabled;
51
+ return this.dateFormControlService.disabled || !!this.control?.control?.disabled;
71
52
  }
72
53
  return null;
73
54
  }
@@ -117,6 +98,20 @@ export class ClrDateInput extends WrappedFormControl {
117
98
  this.emitDateOutput(null);
118
99
  }
119
100
  }
101
+ datepickerHasFormControl() {
102
+ return !!this.control;
103
+ }
104
+ setDate(date) {
105
+ if (typeof date === 'string') {
106
+ date = new Date(date);
107
+ }
108
+ if (this.previousDateChange !== date) {
109
+ this.updateDate(date);
110
+ }
111
+ if (!this.initialClrDateInputValue) {
112
+ this.initialClrDateInputValue = date;
113
+ }
114
+ }
120
115
  usingClarityDatepicker() {
121
116
  return this.datepickerEnabledService.isEnabled;
122
117
  }
@@ -128,13 +123,6 @@ export class ClrDateInput extends WrappedFormControl {
128
123
  this.focusService.focused = focus;
129
124
  }
130
125
  }
131
- triggerControlValidation() {
132
- if (this.datepickerHasFormControl()) {
133
- // Set `emitEvent` to false to prevent unnecessary value change event. Status change event will be emitted by `setErrors` below.
134
- this.control.control?.updateValueAndValidity({ emitEvent: false });
135
- this.control.control?.setErrors(this.control.control.errors);
136
- }
137
- }
138
126
  populateServicesFromContainerComponent() {
139
127
  if (!this.container) {
140
128
  this.dateIOService = this.getProviderFromContainer(DateIOService);
@@ -160,9 +148,8 @@ export class ClrDateInput extends WrappedFormControl {
160
148
  this.previousDateChange = date;
161
149
  }
162
150
  if (this.dateNavigationService) {
163
- this.dateNavigationService.selectedDay = date
164
- ? new DayModel(date.getFullYear(), date.getMonth(), date.getDate())
165
- : null;
151
+ const dayModel = date ? new DayModel(date.getFullYear(), date.getMonth(), date.getDate()) : null;
152
+ this.updateDayModel(dayModel);
166
153
  }
167
154
  this.updateInput(date);
168
155
  }
@@ -180,6 +167,7 @@ export class ClrDateInput extends WrappedFormControl {
180
167
  else {
181
168
  this.renderer.setProperty(this.el.nativeElement, 'value', dateString);
182
169
  }
170
+ this.validateDateRange();
183
171
  }
184
172
  else {
185
173
  this.renderer.setProperty(this.el.nativeElement, 'value', '');
@@ -204,18 +192,20 @@ export class ClrDateInput extends WrappedFormControl {
204
192
  this.previousDateChange = null;
205
193
  }
206
194
  }
207
- datepickerHasFormControl() {
208
- return !!this.control;
209
- }
210
195
  listenForControlValueChanges() {
211
- return of(this.datepickerHasFormControl())
212
- .pipe(filter(hasControl => hasControl), switchMap(() => this.control.valueChanges),
213
- // only update date value if not being set by user
214
- filter(() => !this.datepickerFocusService.elementIsFocused(this.el.nativeElement)))
215
- .subscribe((value) => this.updateDate(this.dateIOService.getDateValueFromDateString(value)));
196
+ if (this.datepickerHasFormControl()) {
197
+ return this.control.valueChanges
198
+ .pipe(
199
+ // only update date value if not being set by user
200
+ filter(() => !this.datepickerFocusService.elementIsFocused(this.el.nativeElement)))
201
+ .subscribe((value) => this.updateDate(this.dateIOService.getDateValueFromDateString(value)));
202
+ }
203
+ else {
204
+ return null;
205
+ }
216
206
  }
217
207
  listenForUserSelectedDayChanges() {
218
- return this.dateNavigationService.selectedDayChange.subscribe(dayModel => this.updateDate(dayModel.toDate(), true));
208
+ return this.userSelectedDayChange.subscribe(dayModel => this.updateDate(dayModel?.toDate(), true));
219
209
  }
220
210
  listenForTouchChanges() {
221
211
  return this.dateFormControlService.touchedChange
@@ -229,51 +219,55 @@ export class ClrDateInput extends WrappedFormControl {
229
219
  }
230
220
  listenForInputRefocus() {
231
221
  return this.dateNavigationService.selectedDayChange
232
- .pipe(filter(date => !!date))
222
+ .pipe(filter(date => !!date && !this.dateNavigationService.isRangePicker))
233
223
  .subscribe(() => this.datepickerFocusService.focusInput(this.el.nativeElement));
234
224
  }
225
+ /**
226
+ * In case of date range error, both start & end date field validation has to be triggered
227
+ * if either of the field gets updated
228
+ */
229
+ validateDateRange() {
230
+ if (this.dateNavigationService.isRangePicker) {
231
+ const primaryControl = this.ngControlService?.control;
232
+ const additionalControls = this.ngControlService?.additionalControls;
233
+ const isValid = this.dateNavigationService.selectedDay?.isBefore(this.dateNavigationService.selectedEndDay, true);
234
+ if (isValid &&
235
+ (primaryControl?.hasError('range') || additionalControls?.some(control => control.hasError('range')))) {
236
+ primaryControl.control?.updateValueAndValidity({ emitEvent: false });
237
+ additionalControls.forEach((ngControl) => {
238
+ ngControl?.control?.updateValueAndValidity({ emitEvent: false });
239
+ });
240
+ }
241
+ }
242
+ }
235
243
  }
236
- ClrDateInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInput, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgControl, optional: true, self: true }, { token: i2.ClrDateContainer, optional: true }, { token: i3.DateIOService, optional: true }, { token: i4.DateNavigationService, optional: true }, { token: i5.DatepickerEnabledService, optional: true }, { token: i6.DateFormControlService, optional: true }, { token: PLATFORM_ID }, { token: i7.FocusService, optional: true }, { token: i8.DatepickerFocusService }], target: i0.ɵɵFactoryTarget.Directive });
237
- ClrDateInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDateInput, selector: "[clrDate]", inputs: { placeholder: "placeholder", date: ["clrDate", "date"], min: "min", max: "max", disabled: "disabled" }, outputs: { dateChange: "clrDateChange" }, host: { listeners: { "focus": "setFocusStates()", "blur": "triggerValidation()", "change": "onValueChange($event.target)" }, properties: { "class.clr-input": "true", "disabled": "this.disabled", "attr.placeholder": "this.placeholderText", "attr.type": "this.inputType" } }, providers: [DatepickerFocusService], usesInheritance: true, ngImport: i0 });
238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInput, decorators: [{
239
- type: Directive,
240
- args: [{
241
- selector: '[clrDate]',
242
- host: {
243
- '[class.clr-input]': 'true',
244
- },
245
- providers: [DatepickerFocusService],
246
- }]
244
+ ClrDateInputBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInputBase, deps: [{ token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.NgControl, optional: true, self: true }, { token: forwardRef(() => ClrDateContainer), optional: true }, { token: i2.DateIOService, optional: true }, { token: i3.DateNavigationService, optional: true }, { token: i4.DatepickerEnabledService, optional: true }, { token: i5.DateFormControlService, optional: true }, { token: PLATFORM_ID }, { token: i6.FocusService, optional: true }, { token: i7.DatepickerFocusService }], target: i0.ɵɵFactoryTarget.Directive });
245
+ ClrDateInputBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDateInputBase, inputs: { placeholder: "placeholder", disabled: "disabled" }, host: { listeners: { "focus": "setFocusStates()", "blur": "triggerValidation()", "change": "onValueChange($event.target)" }, properties: { "disabled": "this.disabled", "attr.placeholder": "this.placeholderText", "attr.type": "this.inputType" } }, usesInheritance: true, ngImport: i0 });
246
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInputBase, decorators: [{
247
+ type: Directive
247
248
  }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.NgControl, decorators: [{
248
249
  type: Self
249
250
  }, {
250
251
  type: Optional
251
- }] }, { type: i2.ClrDateContainer, decorators: [{
252
+ }] }, { type: i8.ClrDateContainer, decorators: [{
252
253
  type: Optional
253
- }] }, { type: i3.DateIOService, decorators: [{
254
+ }, {
255
+ type: Inject,
256
+ args: [forwardRef(() => ClrDateContainer)]
257
+ }] }, { type: i2.DateIOService, decorators: [{
254
258
  type: Optional
255
- }] }, { type: i4.DateNavigationService, decorators: [{
259
+ }] }, { type: i3.DateNavigationService, decorators: [{
256
260
  type: Optional
257
- }] }, { type: i5.DatepickerEnabledService, decorators: [{
261
+ }] }, { type: i4.DatepickerEnabledService, decorators: [{
258
262
  type: Optional
259
- }] }, { type: i6.DateFormControlService, decorators: [{
263
+ }] }, { type: i5.DateFormControlService, decorators: [{
260
264
  type: Optional
261
265
  }] }, { type: undefined, decorators: [{
262
266
  type: Inject,
263
267
  args: [PLATFORM_ID]
264
- }] }, { type: i7.FocusService, decorators: [{
268
+ }] }, { type: i6.FocusService, decorators: [{
265
269
  type: Optional
266
- }] }, { type: i8.DatepickerFocusService }]; }, propDecorators: { placeholder: [{
267
- type: Input
268
- }], dateChange: [{
269
- type: Output,
270
- args: ['clrDateChange']
271
- }], date: [{
272
- type: Input,
273
- args: ['clrDate']
274
- }], min: [{
275
- type: Input
276
- }], max: [{
270
+ }] }, { type: i7.DatepickerFocusService }]; }, propDecorators: { placeholder: [{
277
271
  type: Input
278
272
  }], disabled: [{
279
273
  type: Input,
@@ -297,4 +291,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
297
291
  type: HostListener,
298
292
  args: ['change', ['$event.target']]
299
293
  }] } });
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2Zvcm1zL2RhdGVwaWNrZXIvZGF0ZS1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFFWCxJQUFJLEdBRUwsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXZGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7O0FBRW5ELGtE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QkFDUixRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFDUixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFRO2lGQXRCRixXQUFXO3NCQUFuQixLQUFLO2dCQUNtQixVQUFVO3NCQUFsQyxNQUFNO3VCQUFDLGVBQWU7Z0JBNEJuQixJQUFJO3NCQURQLEtBQUs7dUJBQUMsU0FBUztnQkFZWixHQUFHO3NCQUROLEtBQUs7Z0JBT0YsR0FBRztzQkFETixLQUFLO2dCQWVGLFFBQVE7c0JBRlgsS0FBSzt1QkFBQyxVQUFVOztzQkFDaEIsV0FBVzt1QkFBQyxVQUFVO2dCQVFuQixlQUFlO3NCQURsQixXQUFXO3VCQUFDLGtCQUFrQjtnQkFNM0IsU0FBUztzQkFEWixXQUFXO3VCQUFDLFdBQVc7Z0JBOEJ4QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsT0FBTztnQkFNWixpQkFBaUI7c0JBRHpCLFlBQVk7dUJBQUMsTUFBTTtnQkFPcEIsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgU2VsZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGlzQm9vbGVhbkF0dHJpYnV0ZVNldCB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbXBvbmVudC9pcy1ib29sZWFuLWF0dHJpYnV0ZS1zZXQnO1xuaW1wb3J0IHsgRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3Byb3ZpZGVycy9mb2N1cy5zZXJ2aWNlJztcbmltcG9ydCB7IFdyYXBwZWRGb3JtQ29udHJvbCB9IGZyb20gJy4uL2NvbW1vbi93cmFwcGVkLWNvbnRyb2wnO1xuaW1wb3J0IHsgQ2xyRGF0ZUNvbnRhaW5lciB9IGZyb20gJy4vZGF0ZS1jb250YWluZXInO1xuaW1wb3J0IHsgRGF5TW9kZWwgfSBmcm9tICcuL21vZGVsL2RheS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlRm9ybUNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZS1mb3JtLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlSU9TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZS1pby5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2RhdGUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVwaWNrZXJFbmFibGVkU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2RhdGVwaWNrZXItZW5hYmxlZC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVwaWNrZXJGb2N1c1NlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9kYXRlcGlja2VyLWZvY3VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGF0ZXNBcmVFcXVhbCB9IGZyb20gJy4vdXRpbHMvZGF0ZS11dGlscyc7XG5cbi8vIFRoZXJlIGFyZSBmb3VyIHdheXMgdGhlIGRhdGVwaWNrZXIgdmFsdWUgaXMgc2V0XG4vLyAxLiBWYWx1ZSBzZXQgYnkgdXNlciB0eXBpbmcgaW50byB0ZXh0IGlucHV0IGFzIGEgc3RyaW5nIGV4OiAnMDEvMjgvMjAxNSdcbi8vIDIuIFZhbHVlIHNldCBleHBsaWNpdGx5IGJ5IEFuZ3VsYXIgRm9ybXMgQVBJcyBhcyBhIHN0cmluZyBleDogJzAxLzI4LzIwMTUnXG4vLyAzLiBWYWx1ZSBzZXQgYnkgdXNlciB2aWEgZGF0ZXBpY2tlciBVSSBhcyBhIERhdGUgT2JqZWN0XG4vLyA0LiBWYWx1ZSBzZXQgdmlhIGBjbHJEYXRlYCBpbnB1dCBhcyBhIERhdGUgT2JqZWN0XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJEYXRlXScsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmNsci1pbnB1dF0nOiAndHJ1ZScsXG4gIH0sXG4gIHByb3ZpZGVyczogW0RhdGVwaWNrZXJGb2N1c1NlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJEYXRlSW5wdXQgZXh0ZW5kcyBXcmFwcGVkRm9ybUNvbnRyb2w8Q2xyRGF0ZUNvbnRhaW5lcj4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kYXRlOiBEYXRlIHwgbnVsbCB8IHN0cmluZztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBAT3V0cHV0KCdjbHJEYXRlQ2hhbmdlJykgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oZmFsc2UpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbmRleCA9IDE7XG5cbiAgcHJpdmF0ZSBpbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWU6IERhdGU7XG4gIHByaXZhdGUgcHJldmlvdXNEYXRlQ2hhbmdlOiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBlbDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PixcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBAU2VsZigpXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcm90ZWN0ZWQgY29udHJvbDogTmdDb250cm9sLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY29udGFpbmVyOiBDbHJEYXRlQ29udGFpbmVyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZUlPU2VydmljZTogRGF0ZUlPU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVOYXZpZ2F0aW9uU2VydmljZTogRGF0ZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlOiBEYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRlRm9ybUNvbnRyb2xTZXJ2aWNlOiBEYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogYW55LFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9jdXNTZXJ2aWNlOiBGb2N1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlcGlja2VyRm9jdXNTZXJ2aWNlOiBEYXRlcGlja2VyRm9jdXNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHZpZXdDb250YWluZXJSZWYsIENsckRhdGVDb250YWluZXIsIGluamVjdG9yLCBjb250cm9sLCByZW5kZXJlciwgZWwpO1xuICB9XG5cbiAgQElucHV0KCdjbHJEYXRlJylcbiAgc2V0IGRhdGUoZGF0ZTogRGF0ZSB8IHN0cmluZykge1xuICAgIGlmICh0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSAhPT0gZGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVEYXRlKHRoaXMuZ2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShkYXRlIGFzIERhdGUpKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKSB7XG4gICAgICB0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZSA9IGRhdGUgYXMgRGF0ZTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbWluKGRhdGVTdHJpbmc6IHN0cmluZykge1xuICAgIHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGRhdGVTdHJpbmcpO1xuICAgIHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgbWF4KGRhdGVTdHJpbmc6IHN0cmluZykge1xuICAgIHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGRhdGVTdHJpbmcpO1xuICAgIHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgaWYgKHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgQEhvc3RCaW5kaW5nKCdkaXNhYmxlZCcpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZChpc0Jvb2xlYW5BdHRyaWJ1dGVTZXQodmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKVxuICBnZXQgcGxhY2Vob2xkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXIgPyB0aGlzLnBsYWNlaG9sZGVyIDogdGhpcy5kYXRlSU9TZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci50eXBlJylcbiAgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkgPyAnZGF0ZScgOiAndGV4dCc7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMucG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250YWluZXJDb21wb25lbnQoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksXG4gICAgICB0aGlzLmxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKSxcbiAgICAgIHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksXG4gICAgICB0aGlzLmxpc3RlbkZvckRpcnR5Q2hhbmdlcygpLFxuICAgICAgdGhpcy5saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gSSBkb24ndCBrbm93IHdoeSBJIGhhdmUgdG8gZG8gdGhpcyBidXQgYWZ0ZXIgdXNpbmcgdGhlIG5ldyBIb3N0V3JhcHBpbmcgTW9kdWxlIEkgaGF2ZSB0byBkZWxheSB0aGUgcHJvY2Vzc2luZ1xuICAgIC8vIG9mIHRoZSBpbml0aWFsIElucHV0IHNldCBieSB0aGUgdXNlciB0byBoZXJlLiBJZiBJIGRvIG5vdCAyIGlzc3VlcyBvY2N1cjpcbiAgICAvLyAxLiBUaGUgSW5wdXQgc2V0dGVyIGlzIGNhbGxlZCBiZWZvcmUgbmdPbkluaXQuIG5nT25Jbml0IGluaXRpYWxpemVzIHRoZSBzZXJ2aWNlcyB3aXRob3V0IHdoaWNoIHRoZSBzZXR0ZXIgZmFpbHMuXG4gICAgLy8gMi4gVGhlIFJlbmRlcmVyIGRvZXNuJ3Qgd29yayBiZWZvcmUgbmdBZnRlclZpZXdJbml0IChJdCB1c2VkIHRvIGJlZm9yZSB0aGUgbmV3IEhvc3RXcmFwcGluZyBNb2R1bGUgZm9yIHNvbWUgcmVhc29uKS5cbiAgICAvLyBJIG5lZWQgdGhlIHJlbmRlcmVyIHRvIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgb24gdGhlIGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSB1c2VyIGhhcyBzdXBwbGllZCBhIERhdGVcbiAgICAvLyBpbnB1dCBvYmplY3QsIHdlIHJlZmxlY3QgaXQgd2l0aCB0aGUgcmlnaHQgZGF0ZSBvbiB0aGUgaW5wdXQgZmllbGQgdXNpbmcgdGhlIElPIHNlcnZpY2UuIEkgYW0gbm90IHN1cmUgaWZcbiAgICAvLyB0aGVzZSBhcmUgbWFqb3IgaXNzdWVzIG9yIG5vdCBidXQganVzdCBub3RpbmcgdGhlbSBkb3duIGhlcmUuXG4gICAgdGhpcy5wcm9jZXNzSW5pdGlhbElucHV0cygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBzZXRGb2N1c1N0YXRlcygpIHtcbiAgICB0aGlzLnNldEZvY3VzKHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIG92ZXJyaWRlIHRyaWdnZXJWYWxpZGF0aW9uKCkge1xuICAgIHN1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCk7XG4gICAgdGhpcy5zZXRGb2N1cyhmYWxzZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25WYWx1ZUNoYW5nZSh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICBjb25zdCB2YWxpZERhdGVWYWx1ZSA9IHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyh0YXJnZXQudmFsdWUpO1xuICAgIGlmICh0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSAmJiB2YWxpZERhdGVWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVEYXRlKHZhbGlkRGF0ZVZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpIHtcbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHRhcmdldC52YWx1ZS5zcGxpdCgnLScpO1xuICAgICAgdGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCt5ZWFyLCArbW9udGggLSAxLCArZGF5KSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1c2luZ0NsYXJpdHlEYXRlcGlja2VyKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIHVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpIHtcbiAgICByZXR1cm4gIXRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXMoZm9jdXM6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5mb2N1c1NlcnZpY2UpIHtcbiAgICAgIHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQgPSBmb2N1cztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpIHtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkge1xuICAgICAgLy8gU2V0IGBlbWl0RXZlbnRgIHRvIGZhbHNlIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgdmFsdWUgY2hhbmdlIGV2ZW50LiBTdGF0dXMgY2hhbmdlIGV2ZW50IHdpbGwgYmUgZW1pdHRlZCBieSBgc2V0RXJyb3JzYCBiZWxvdy5cbiAgICAgIHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCkge1xuICAgIGlmICghdGhpcy5jb250YWluZXIpIHtcbiAgICAgIHRoaXMuZGF0ZUlPU2VydmljZSA9IHRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKERhdGVJT1NlcnZpY2UpO1xuICAgICAgdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihEYXRlTmF2aWdhdGlvblNlcnZpY2UpO1xuICAgICAgdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UgPSB0aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihEYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UpO1xuICAgICAgdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlID0gdGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoRGF0ZUZvcm1Db250cm9sU2VydmljZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzSW5pdGlhbElucHV0cygpIHtcbiAgICBpZiAodGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkge1xuICAgICAgdGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyh0aGlzLmNvbnRyb2wudmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURhdGUodmFsdWU6IERhdGUsIHNldEJ5VXNlckludGVyYWN0aW9uID0gZmFsc2UpIHtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKHZhbHVlKTtcblxuICAgIGlmIChzZXRCeVVzZXJJbnRlcmFjdGlvbikge1xuICAgICAgdGhpcy5lbWl0RGF0ZU91dHB1dChkYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UgPSBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkgPSBkYXRlXG4gICAgICAgID8gbmV3IERheU1vZGVsKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSlcbiAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlSW5wdXQoZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUlucHV0KGRhdGU6IERhdGUpIHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoZGF0ZSk7XG4gICAgICBpZiAodGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKSkge1xuICAgICAgICAvLyB2YWx1ZUFzRGF0ZSBleHBlY3RzIFVUQywgZGF0ZSBmcm9tIGlucHV0IGlzIHRpbWUtem9uZWRcbiAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZUFzRGF0ZScsIGRhdGUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpICYmIGRhdGVTdHJpbmcgIT09IHRoaXMuY29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuY29udHJvbC5zZXRWYWx1ZShkYXRlU3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBkYXRlU3RyaW5nKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsICcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICAgIGlmICh0aGlzLmRhdGVJT1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB0aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGRhdGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhkYXRlU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RGF0ZU91dHB1dChkYXRlOiBEYXRlKSB7XG4gICAgaWYgKCFkYXRlc0FyZUVxdWFsKGRhdGUsIHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKSkge1xuICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICB0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSA9IGRhdGU7XG4gICAgfSBlbHNlIGlmICghZGF0ZSAmJiB0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSkge1xuICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICB0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCkge1xuICAgIHJldHVybiBvZih0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihoYXNDb250cm9sID0+IGhhc0NvbnRyb2wpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcyksXG4gICAgICAgIC8vIG9ubHkgdXBkYXRlIGRhdGUgdmFsdWUgaWYgbm90IGJlaW5nIHNldCBieSB1c2VyXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmVsZW1lbnRJc0ZvY3VzZWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodmFsdWUpKSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnN1YnNjcmliZShkYXlNb2RlbCA9PiB0aGlzLnVwZGF0ZURhdGUoZGF5TW9kZWwudG9EYXRlKCksIHRydWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZVxuICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZVxuICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZVxuICAgICAgLnBpcGUoZmlsdGVyKGRhdGUgPT4gISFkYXRlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzSW5wdXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSk7XG4gIH1cbn1cbiJdfQ==
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2Zvcm1zL2RhdGVwaWNrZXIvZGF0ZS1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxTQUFTLEVBR1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFHTCxRQUFRLEVBQ1IsV0FBVyxFQUVYLElBQUksR0FFTCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVsRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7QUFFbkQsa0RBQWtEO0FBQ2xELDJFQUEyRTtBQUMzRSw2RUFBNkU7QUFDN0UsMERBQTBEO0FBQzFELG9EQUFvRDtBQUdwRCxNQUFNLE9BQWdCLGdCQUNwQixTQUFRLGtCQUFvQztJQWM1QyxZQUNFLGdC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SzlDLFdBQVc7aUdBNUJELGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQURyQyxTQUFTOzswQkFxQkwsSUFBSTs7MEJBQ0osUUFBUTs7MEJBRVIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7OzBCQUNyRCxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFROzswQkFDUixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFRO2lGQXZCRixXQUFXO3NCQUFuQixLQUFLO2dCQXNDRixRQUFRO3NCQUZYLEtBQUs7dUJBQUMsVUFBVTs7c0JBQ2hCLFdBQVc7dUJBQUMsVUFBVTtnQkFRbkIsZUFBZTtzQkFEbEIsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBTTNCLFNBQVM7c0JBRFosV0FBVzt1QkFBQyxXQUFXO2dCQWdDeEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLE9BQU87Z0JBTVosaUJBQWlCO3NCQUR6QixZQUFZO3VCQUFDLE1BQU07Z0JBT3BCLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBQTEFURk9STV9JRCxcbiAgUmVuZGVyZXIyLFxuICBTZWxmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgaXNCb29sZWFuQXR0cmlidXRlU2V0IH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tcG9uZW50L2lzLWJvb2xlYW4tYXR0cmlidXRlLXNldCc7XG5pbXBvcnQgeyBGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vcHJvdmlkZXJzL2ZvY3VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgV3JhcHBlZEZvcm1Db250cm9sIH0gZnJvbSAnLi4vY29tbW9uL3dyYXBwZWQtY29udHJvbCc7XG5pbXBvcnQgeyBDbHJEYXRlQ29udGFpbmVyIH0gZnJvbSAnLi9kYXRlLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBEYXlNb2RlbCB9IGZyb20gJy4vbW9kZWwvZGF5Lm1vZGVsJztcbmltcG9ydCB7IERhdGVGb3JtQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9kYXRlLWZvcm0tY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVJT1NlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9kYXRlLWlvLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZS1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZXBpY2tlci1lbmFibGVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckZvY3VzU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2RhdGVwaWNrZXItZm9jdXMuc2VydmljZSc7XG5pbXBvcnQgeyBkYXRlc0FyZUVxdWFsIH0gZnJvbSAnLi91dGlscy9kYXRlLXV0aWxzJztcblxuLy8gVGhlcmUgYXJlIGZvdXIgd2F5cyB0aGUgZGF0ZXBpY2tlciB2YWx1ZSBpcyBzZXRcbi8vIDEuIFZhbHVlIHNldCBieSB1c2VyIHR5cGluZyBpbnRvIHRleHQgaW5wdXQgYXMgYSBzdHJpbmcgZXg6ICcwMS8yOC8yMDE1J1xuLy8gMi4gVmFsdWUgc2V0IGV4cGxpY2l0bHkgYnkgQW5ndWxhciBGb3JtcyBBUElzIGFzIGEgc3RyaW5nIGV4OiAnMDEvMjgvMjAxNSdcbi8vIDMuIFZhbHVlIHNldCBieSB1c2VyIHZpYSBkYXRlcGlja2VyIFVJIGFzIGEgRGF0ZSBPYmplY3Rcbi8vIDQuIFZhbHVlIHNldCB2aWEgYGNsckRhdGVgIGlucHV0IGFzIGEgRGF0ZSBPYmplY3RcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xyRGF0ZUlucHV0QmFzZVxuICBleHRlbmRzIFdyYXBwZWRGb3JtQ29udHJvbDxDbHJEYXRlQ29udGFpbmVyPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kYXRlOiBEYXRlIHwgbnVsbCB8IHN0cmluZztcblxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBpbmRleCA9IDE7XG5cbiAgcHJpdmF0ZSBpbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWU6IERhdGU7XG4gIHByaXZhdGUgcHJldmlvdXNEYXRlQ2hhbmdlOiBEYXRlO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGVsOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBTZWxmKClcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByb3RlY3RlZCBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IENsckRhdGVDb250YWluZXIpKSBwcml2YXRlIGNvbnRhaW5lcjogQ2xyRGF0ZUNvbnRhaW5lcixcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZGF0ZUlPU2VydmljZTogRGF0ZUlPU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZGF0ZU5hdmlnYXRpb25TZXJ2aWNlOiBEYXRlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U6IERhdGVwaWNrZXJFbmFibGVkU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVGb3JtQ29udHJvbFNlcnZpY2U6IERhdGVGb3JtQ29udHJvbFNlcnZpY2UsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb2N1c1NlcnZpY2U6IEZvY3VzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZGF0ZXBpY2tlckZvY3VzU2VydmljZTogRGF0ZXBpY2tlckZvY3VzU2VydmljZVxuICApIHtcbiAgICBzdXBlcih2aWV3Q29udGFpbmVyUmVmLCBDbHJEYXRlQ29udGFpbmVyLCBpbmplY3RvciwgY29udHJvbCwgcmVuZGVyZXIsIGVsKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICBpZiAodGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLmRpc2FibGVkIHx8ICEhdGhpcy5jb250cm9sPy5jb250cm9sPy5kaXNhYmxlZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgQEhvc3RCaW5kaW5nKCdkaXNhYmxlZCcpXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZChpc0Jvb2xlYW5BdHRyaWJ1dGVTZXQodmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKVxuICBnZXQgcGxhY2Vob2xkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXIgPyB0aGlzLnBsYWNlaG9sZGVyIDogdGhpcy5kYXRlSU9TZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci50eXBlJylcbiAgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkgPyAnZGF0ZScgOiAndGV4dCc7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpOiBPYnNlcnZhYmxlPERheU1vZGVsPjtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMucG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250YWluZXJDb21wb25lbnQoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksXG4gICAgICB0aGlzLmxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKSxcbiAgICAgIHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksXG4gICAgICB0aGlzLmxpc3RlbkZvckRpcnR5Q2hhbmdlcygpLFxuICAgICAgdGhpcy5saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gSSBkb24ndCBrbm93IHdoeSBJIGhhdmUgdG8gZG8gdGhpcyBidXQgYWZ0ZXIgdXNpbmcgdGhlIG5ldyBIb3N0V3JhcHBpbmcgTW9kdWxlIEkgaGF2ZSB0byBkZWxheSB0aGUgcHJvY2Vzc2luZ1xuICAgIC8vIG9mIHRoZSBpbml0aWFsIElucHV0IHNldCBieSB0aGUgdXNlciB0byBoZXJlLiBJZiBJIGRvIG5vdCAyIGlzc3VlcyBvY2N1cjpcbiAgICAvLyAxLiBUaGUgSW5wdXQgc2V0dGVyIGlzIGNhbGxlZCBiZWZvcmUgbmdPbkluaXQuIG5nT25Jbml0IGluaXRpYWxpemVzIHRoZSBzZXJ2aWNlcyB3aXRob3V0IHdoaWNoIHRoZSBzZXR0ZXIgZmFpbHMuXG4gICAgLy8gMi4gVGhlIFJlbmRlcmVyIGRvZXNuJ3Qgd29yayBiZWZvcmUgbmdBZnRlclZpZXdJbml0IChJdCB1c2VkIHRvIGJlZm9yZSB0aGUgbmV3IEhvc3RXcmFwcGluZyBNb2R1bGUgZm9yIHNvbWUgcmVhc29uKS5cbiAgICAvLyBJIG5lZWQgdGhlIHJlbmRlcmVyIHRvIHNldCB0aGUgdmFsdWUgcHJvcGVydHkgb24gdGhlIGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IGlmIHRoZSB1c2VyIGhhcyBzdXBwbGllZCBhIERhdGVcbiAgICAvLyBpbnB1dCBvYmplY3QsIHdlIHJlZmxlY3QgaXQgd2l0aCB0aGUgcmlnaHQgZGF0ZSBvbiB0aGUgaW5wdXQgZmllbGQgdXNpbmcgdGhlIElPIHNlcnZpY2UuIEkgYW0gbm90IHN1cmUgaWZcbiAgICAvLyB0aGVzZSBhcmUgbWFqb3IgaXNzdWVzIG9yIG5vdCBidXQganVzdCBub3RpbmcgdGhlbSBkb3duIGhlcmUuXG4gICAgdGhpcy5wcm9jZXNzSW5pdGlhbElucHV0cygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZm9jdXMnKVxuICBzZXRGb2N1c1N0YXRlcygpIHtcbiAgICB0aGlzLnNldEZvY3VzKHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIG92ZXJyaWRlIHRyaWdnZXJWYWxpZGF0aW9uKCkge1xuICAgIHN1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCk7XG4gICAgdGhpcy5zZXRGb2N1cyhmYWxzZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25WYWx1ZUNoYW5nZSh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICBjb25zdCB2YWxpZERhdGVWYWx1ZSA9IHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyh0YXJnZXQudmFsdWUpO1xuICAgIGlmICh0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSAmJiB2YWxpZERhdGVWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVEYXRlKHZhbGlkRGF0ZVZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpIHtcbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHRhcmdldC52YWx1ZS5zcGxpdCgnLScpO1xuICAgICAgdGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCt5ZWFyLCArbW9udGggLSAxLCArZGF5KSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbnRyb2w7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0ZShkYXRlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSAhPT0gZGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVEYXRlKGRhdGUpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWUpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlID0gZGF0ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgdXNpbmdOYXRpdmVEYXRlcGlja2VyKCkge1xuICAgIHJldHVybiAhdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1cyhmb2N1czogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmZvY3VzU2VydmljZSkge1xuICAgICAgdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZCA9IGZvY3VzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250YWluZXJDb21wb25lbnQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lcikge1xuICAgICAgdGhpcy5kYXRlSU9TZXJ2aWNlID0gdGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoRGF0ZUlPU2VydmljZSk7XG4gICAgICB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKERhdGVOYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgICB0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZSA9IHRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKERhdGVwaWNrZXJFbmFibGVkU2VydmljZSk7XG4gICAgICB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UgPSB0aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihEYXRlRm9ybUNvbnRyb2xTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NJbml0aWFsSW5wdXRzKCkge1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHRoaXMuY29udHJvbC52YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZURhdGUodGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZSh2YWx1ZTogRGF0ZSwgc2V0QnlVc2VySW50ZXJhY3Rpb24gPSBmYWxzZSkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUodmFsdWUpO1xuXG4gICAgaWYgKHNldEJ5VXNlckludGVyYWN0aW9uKSB7XG4gICAgICB0aGlzLmVtaXREYXRlT3V0cHV0KGRhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSA9IGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlKSB7XG4gICAgICBjb25zdCBkYXlNb2RlbCA9IGRhdGUgPyBuZXcgRGF5TW9kZWwoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSA6IG51bGw7XG5cbiAgICAgIHRoaXMudXBkYXRlRGF5TW9kZWwoZGF5TW9kZWwpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlSW5wdXQoZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUlucHV0KGRhdGU6IERhdGUpIHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IHRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoZGF0ZSk7XG4gICAgICBpZiAodGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKSkge1xuICAgICAgICAvLyB2YWx1ZUFzRGF0ZSBleHBlY3RzIFVUQywgZGF0ZSBmcm9tIGlucHV0IGlzIHRpbWUtem9uZWRcbiAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZUFzRGF0ZScsIGRhdGUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpICYmIGRhdGVTdHJpbmcgIT09IHRoaXMuY29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuY29udHJvbC5zZXRWYWx1ZShkYXRlU3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCBkYXRlU3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsaWRhdGVEYXRlUmFuZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsICcnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoZGF0ZTogRGF0ZSkge1xuICAgIGlmICh0aGlzLmRhdGVJT1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSB0aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGRhdGUpO1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhkYXRlU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RGF0ZU91dHB1dChkYXRlOiBEYXRlKSB7XG4gICAgaWYgKCFkYXRlc0FyZUVxdWFsKGRhdGUsIHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKSkge1xuICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQoZGF0ZSk7XG4gICAgICB0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSA9IGRhdGU7XG4gICAgfSBlbHNlIGlmICghZGF0ZSAmJiB0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSkge1xuICAgICAgdGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICB0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBvbmx5IHVwZGF0ZSBkYXRlIHZhbHVlIGlmIG5vdCBiZWluZyBzZXQgYnkgdXNlclxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmVsZW1lbnRJc0ZvY3VzZWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB0aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHZhbHVlKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudXNlclNlbGVjdGVkRGF5Q2hhbmdlLnN1YnNjcmliZShkYXlNb2RlbCA9PiB0aGlzLnVwZGF0ZURhdGUoZGF5TW9kZWw/LnRvRGF0ZSgpLCB0cnVlKSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvclRvdWNoQ2hhbmdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2VcbiAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuRm9yRGlydHlDaGFuZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlydHlDaGFuZ2VcbiAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzRGlydHkoKSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvcklucHV0UmVmb2N1cygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2VcbiAgICAgIC5waXBlKGZpbHRlcihkYXRlID0+ICEhZGF0ZSAmJiAhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0lucHV0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2Ugb2YgZGF0ZSByYW5nZSBlcnJvciwgYm90aCBzdGFydCAmIGVuZCBkYXRlIGZpZWxkIHZhbGlkYXRpb24gaGFzIHRvIGJlIHRyaWdnZXJlZFxuICAgKiBpZiBlaXRoZXIgb2YgdGhlIGZpZWxkIGdldHMgdXBkYXRlZFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZURhdGVSYW5nZSgpIHtcbiAgICBpZiAodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcikge1xuICAgICAgY29uc3QgcHJpbWFyeUNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbFNlcnZpY2U/LmNvbnRyb2w7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsQ29udHJvbHMgPSB0aGlzLm5nQ29udHJvbFNlcnZpY2U/LmFkZGl0aW9uYWxDb250cm9scztcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8uaXNCZWZvcmUodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXksIHRydWUpO1xuICAgICAgaWYgKFxuICAgICAgICBpc1ZhbGlkICYmXG4gICAgICAgIChwcmltYXJ5Q29udHJvbD8uaGFzRXJyb3IoJ3JhbmdlJykgfHwgYWRkaXRpb25hbENvbnRyb2xzPy5zb21lKGNvbnRyb2wgPT4gY29udHJvbC5oYXNFcnJvcigncmFuZ2UnKSkpXG4gICAgICApIHtcbiAgICAgICAgcHJpbWFyeUNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIGFkZGl0aW9uYWxDb250cm9scy5mb3JFYWNoKChuZ0NvbnRyb2w6IE5nQ29udHJvbCkgPT4ge1xuICAgICAgICAgIG5nQ29udHJvbD8uY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCB1cGRhdGVEYXlNb2RlbChkYXlNb2RlbDogRGF5TW9kZWwpOiB2b2lkO1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-2024 Broadcom. All Rights Reserved.
2
+ * Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
3
3
  * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4
4
  * This software is released under MIT license.
5
5
  * The full license information can be found in LICENSE in the root directory of this project.
@@ -8,6 +8,7 @@ import { Directive, Optional } from '@angular/core';
8
8
  import { NG_VALIDATORS } from '@angular/forms';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "./providers/date-io.service";
11
+ import * as i2 from "./providers/date-navigation.service";
11
12
  export class ClrDateInputValidator {
12
13
  constructor(dateIOService) {
13
14
  this.dateIOService = dateIOService;
@@ -17,10 +18,10 @@ export class ClrDateInputValidator {
17
18
  const value = this.dateIOService.getDateValueFromDateString(control.value);
18
19
  const minDate = this.dateIOService.disabledDates.minDate.toDate();
19
20
  const maxDate = this.dateIOService.disabledDates.maxDate.toDate();
20
- if (value && value < this.dateIOService.disabledDates.minDate.toDate()) {
21
+ if (value && value < minDate) {
21
22
  return { min: { min: minDate.toLocaleDateString(), actual: value.toLocaleDateString() } };
22
23
  }
23
- else if (value && value > this.dateIOService.disabledDates.maxDate.toDate()) {
24
+ else if (value && value > maxDate) {
24
25
  return { max: { max: maxDate.toLocaleDateString(), actual: value.toLocaleDateString() } };
25
26
  }
26
27
  }
@@ -28,14 +29,72 @@ export class ClrDateInputValidator {
28
29
  }
29
30
  }
30
31
  ClrDateInputValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInputValidator, deps: [{ token: i1.DateIOService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
31
- ClrDateInputValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDateInputValidator, selector: "[clrDate]", providers: [{ provide: NG_VALIDATORS, useExisting: ClrDateInputValidator, multi: true }], ngImport: i0 });
32
+ ClrDateInputValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDateInputValidator, selector: "[clrDate], [clrStartDate], [clrEndDate]", providers: [{ provide: NG_VALIDATORS, useExisting: ClrDateInputValidator, multi: true }], ngImport: i0 });
32
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInputValidator, decorators: [{
33
34
  type: Directive,
34
35
  args: [{
35
- selector: '[clrDate]',
36
+ selector: '[clrDate], [clrStartDate], [clrEndDate]',
36
37
  providers: [{ provide: NG_VALIDATORS, useExisting: ClrDateInputValidator, multi: true }],
37
38
  }]
38
39
  }], ctorParameters: function () { return [{ type: i1.DateIOService, decorators: [{
39
40
  type: Optional
40
41
  }] }]; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9mb3Jtcy9kYXRlcGlja2VyL2RhdGUtaW5wdXQudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFtQixhQUFhLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7OztBQVE3RixNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQWdDLGFBQTRCO1FBQTVCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQUcsQ0FBQztJQUVoRSxRQUFRLENBQUMsT0FBd0I7UUFDL0IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFbEUsSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQzNGO2lCQUFNLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzdFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUMzRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztrSEFqQlUscUJBQXFCO3NHQUFyQixxQkFBcUIsb0NBRnJCLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7MkZBRTdFLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUN6Rjs7MEJBRWMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgRGlyZWN0aXZlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IERhdGVJT1NlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9kYXRlLWlvLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2xyRGF0ZV0nLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBDbHJEYXRlSW5wdXRWYWxpZGF0b3IsIG11bHRpOiB0cnVlIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJEYXRlSW5wdXRWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVJT1NlcnZpY2U6IERhdGVJT1NlcnZpY2UpIHt9XG5cbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XG4gICAgaWYgKHRoaXMuZGF0ZUlPU2VydmljZSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBtaW5EYXRlID0gdGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKTtcbiAgICAgIGNvbnN0IG1heERhdGUgPSB0aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO1xuXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUgPCB0aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5taW5EYXRlLnRvRGF0ZSgpKSB7XG4gICAgICAgIHJldHVybiB7IG1pbjogeyBtaW46IG1pbkRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCksIGFjdHVhbDogdmFsdWUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgfSB9O1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZSA+IHRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERhdGUudG9EYXRlKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgbWF4OiB7IG1heDogbWF4RGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKSwgYWN0dWFsOiB2YWx1ZS50b0xvY2FsZURhdGVTdHJpbmcoKSB9IH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
42
+ export class ClrStartDateInputValidator {
43
+ constructor(dateIOService, dateNavigationService) {
44
+ this.dateIOService = dateIOService;
45
+ this.dateNavigationService = dateNavigationService;
46
+ }
47
+ validate(control) {
48
+ if (this.dateIOService) {
49
+ const value = this.dateIOService.getDateValueFromDateString(control.value);
50
+ const endDate = this.dateNavigationService?.selectedEndDay?.toDate();
51
+ if (value && endDate && value > endDate) {
52
+ return { range: { startDate: value, endDate } };
53
+ }
54
+ }
55
+ return null;
56
+ }
57
+ }
58
+ ClrStartDateInputValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStartDateInputValidator, deps: [{ token: i1.DateIOService, optional: true }, { token: i2.DateNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
59
+ ClrStartDateInputValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrStartDateInputValidator, selector: "[clrStartDate]", providers: [{ provide: NG_VALIDATORS, useExisting: ClrStartDateInputValidator, multi: true }], ngImport: i0 });
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrStartDateInputValidator, decorators: [{
61
+ type: Directive,
62
+ args: [{
63
+ selector: '[clrStartDate]',
64
+ providers: [{ provide: NG_VALIDATORS, useExisting: ClrStartDateInputValidator, multi: true }],
65
+ }]
66
+ }], ctorParameters: function () { return [{ type: i1.DateIOService, decorators: [{
67
+ type: Optional
68
+ }] }, { type: i2.DateNavigationService, decorators: [{
69
+ type: Optional
70
+ }] }]; } });
71
+ export class ClrEndDateInputValidator {
72
+ constructor(dateIOService, dateNavigationService) {
73
+ this.dateIOService = dateIOService;
74
+ this.dateNavigationService = dateNavigationService;
75
+ }
76
+ validate(control) {
77
+ if (this.dateIOService) {
78
+ const value = this.dateIOService.getDateValueFromDateString(control.value);
79
+ const startDate = this.dateNavigationService?.selectedDay?.toDate();
80
+ if (value && startDate && value < startDate) {
81
+ return { range: { startDate, endDate: value } };
82
+ }
83
+ }
84
+ return null;
85
+ }
86
+ }
87
+ ClrEndDateInputValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrEndDateInputValidator, deps: [{ token: i1.DateIOService, optional: true }, { token: i2.DateNavigationService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
88
+ ClrEndDateInputValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrEndDateInputValidator, selector: "[clrEndDate]", providers: [{ provide: NG_VALIDATORS, useExisting: ClrEndDateInputValidator, multi: true }], ngImport: i0 });
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrEndDateInputValidator, decorators: [{
90
+ type: Directive,
91
+ args: [{
92
+ selector: '[clrEndDate]',
93
+ providers: [{ provide: NG_VALIDATORS, useExisting: ClrEndDateInputValidator, multi: true }],
94
+ }]
95
+ }], ctorParameters: function () { return [{ type: i1.DateIOService, decorators: [{
96
+ type: Optional
97
+ }] }, { type: i2.DateNavigationService, decorators: [{
98
+ type: Optional
99
+ }] }]; } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9mb3Jtcy9kYXRlcGlja2VyL2RhdGUtaW5wdXQudmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFtQixhQUFhLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFTN0YsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxZQUFnQyxhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUFHLENBQUM7SUFFaEUsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRWxFLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUU7Z0JBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUMzRjtpQkFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsT0FBTyxFQUFFO2dCQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8s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UUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLDBCQUEwQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDNUY7OzBCQUdJLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTkdfVkFMSURBVE9SUywgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBEYXRlSU9TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZS1pby5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2RhdGUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NsckRhdGVdLCBbY2xyU3RhcnREYXRlXSwgW2NsckVuZERhdGVdJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogQ2xyRGF0ZUlucHV0VmFsaWRhdG9yLCBtdWx0aTogdHJ1ZSB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xyRGF0ZUlucHV0VmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRlSU9TZXJ2aWNlOiBEYXRlSU9TZXJ2aWNlKSB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmICh0aGlzLmRhdGVJT1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3QgbWluRGF0ZSA9IHRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCk7XG4gICAgICBjb25zdCBtYXhEYXRlID0gdGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0RhdGUoKTtcblxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIDwgbWluRGF0ZSkge1xuICAgICAgICByZXR1cm4geyBtaW46IHsgbWluOiBtaW5EYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpLCBhY3R1YWw6IHZhbHVlLnRvTG9jYWxlRGF0ZVN0cmluZygpIH0gfTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUgPiBtYXhEYXRlKSB7XG4gICAgICAgIHJldHVybiB7IG1heDogeyBtYXg6IG1heERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCksIGFjdHVhbDogdmFsdWUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgfSB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJTdGFydERhdGVdJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogQ2xyU3RhcnREYXRlSW5wdXRWYWxpZGF0b3IsIG11bHRpOiB0cnVlIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJTdGFydERhdGVJbnB1dFZhbGlkYXRvciBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZUlPU2VydmljZTogRGF0ZUlPU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRhdGVOYXZpZ2F0aW9uU2VydmljZTogRGF0ZU5hdmlnYXRpb25TZXJ2aWNlXG4gICkge31cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICBpZiAodGhpcy5kYXRlSU9TZXJ2aWNlKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT8uc2VsZWN0ZWRFbmREYXk/LnRvRGF0ZSgpO1xuXG4gICAgICBpZiAodmFsdWUgJiYgZW5kRGF0ZSAmJiB2YWx1ZSA+IGVuZERhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgcmFuZ2U6IHsgc3RhcnREYXRlOiB2YWx1ZSwgZW5kRGF0ZSB9IH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NsckVuZERhdGVdJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxJREFUT1JTLCB1c2VFeGlzdGluZzogQ2xyRW5kRGF0ZUlucHV0VmFsaWRhdG9yLCBtdWx0aTogdHJ1ZSB9XSxcbn0pXG5leHBvcnQgY2xhc3MgQ2xyRW5kRGF0ZUlucHV0VmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkYXRlSU9TZXJ2aWNlOiBEYXRlSU9TZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGF0ZU5hdmlnYXRpb25TZXJ2aWNlOiBEYXRlTmF2aWdhdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmICh0aGlzLmRhdGVJT1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U/LnNlbGVjdGVkRGF5Py50b0RhdGUoKTtcblxuICAgICAgaWYgKHZhbHVlICYmIHN0YXJ0RGF0ZSAmJiB2YWx1ZSA8IHN0YXJ0RGF0ZSkge1xuICAgICAgICByZXR1cm4geyByYW5nZTogeyBzdGFydERhdGUsIGVuZERhdGU6IHZhbHVlIH0gfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
@@ -0,0 +1,63 @@
1
+ /*
2
+ * Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
3
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
4
+ * This software is released under MIT license.
5
+ * The full license information can be found in LICENSE in the root directory of this project.
6
+ */
7
+ import { Directive, EventEmitter, Input, Output } from '@angular/core';
8
+ import { ClrDateInputBase } from './date-input';
9
+ import { DatepickerFocusService } from './providers/datepicker-focus.service';
10
+ import * as i0 from "@angular/core";
11
+ export class ClrDateInput extends ClrDateInputBase {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.dateChange = new EventEmitter(false);
15
+ }
16
+ set date(date) {
17
+ this.setDate(date);
18
+ }
19
+ set min(dateString) {
20
+ this.dateIOService.setMinDate(dateString);
21
+ this.triggerControlValidation();
22
+ }
23
+ set max(dateString) {
24
+ this.dateIOService.setMaxDate(dateString);
25
+ this.triggerControlValidation();
26
+ }
27
+ get userSelectedDayChange() {
28
+ return this.dateNavigationService.selectedDayChange;
29
+ }
30
+ updateDayModel(dayModel) {
31
+ this.dateNavigationService.persistedDate = this.dateNavigationService.selectedDay = dayModel;
32
+ }
33
+ triggerControlValidation() {
34
+ if (this.datepickerHasFormControl()) {
35
+ // Set `emitEvent` to false to prevent unnecessary value change event. Status change event will be emitted by `setErrors` below.
36
+ this.control.control?.updateValueAndValidity({ emitEvent: false });
37
+ this.control.control?.setErrors(this.control.control.errors);
38
+ }
39
+ }
40
+ }
41
+ ClrDateInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInput, deps: null, target: i0.ɵɵFactoryTarget.Directive });
42
+ ClrDateInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: ClrDateInput, selector: "[clrDate]", inputs: { date: ["clrDate", "date"], min: "min", max: "max" }, outputs: { dateChange: "clrDateChange" }, host: { properties: { "class.clr-input": "true" } }, providers: [DatepickerFocusService], usesInheritance: true, ngImport: i0 });
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDateInput, decorators: [{
44
+ type: Directive,
45
+ args: [{
46
+ selector: '[clrDate]',
47
+ host: {
48
+ '[class.clr-input]': 'true',
49
+ },
50
+ providers: [DatepickerFocusService],
51
+ }]
52
+ }], propDecorators: { dateChange: [{
53
+ type: Output,
54
+ args: ['clrDateChange']
55
+ }], date: [{
56
+ type: Input,
57
+ args: ['clrDate']
58
+ }], min: [{
59
+ type: Input
60
+ }], max: [{
61
+ type: Input
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1zaW5nbGUtaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9mb3Jtcy9kYXRlcGlja2VyL2RhdGUtc2luZ2xlLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBUzlFLE1BQU0sT0FBTyxZQUFhLFNBQVEsZ0JBQWdCO0lBUGxEOztRQVFvQyxlQUFVLEdBQUcsSUFBSSxZQUFZLENBQU8sS0FBSyxDQUFDLENBQUM7S0FrQzlFO0lBaENDLElBQ0ksSUFBSSxDQUFDLElBQW1CO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQ0ksR0FBRyxDQUFDLFVBQWtCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUNJLEdBQUcsQ0FBQyxVQUFrQjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBdUIscUJBQXFCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDO0lBQ3RELENBQUM7SUFFa0IsY0FBYyxDQUFDLFFBQWtCO1FBQ2xELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7SUFDL0YsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFO1lBQ25DLGdJQUFnSTtZQUNoSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7O3lHQWxDVSxZQUFZOzZGQUFaLFlBQVksa01BRlosQ0FBQyxzQkFBc0IsQ0FBQzsyRkFFeEIsWUFBWTtrQkFQeEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsSUFBSSxFQUFFO3dCQUNKLG1CQUFtQixFQUFFLE1BQU07cUJBQzVCO29CQUNELFNBQVMsRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFFbUMsVUFBVTtzQkFBM0MsTUFBTTt1QkFBQyxlQUFlO2dCQUduQixJQUFJO3NCQURQLEtBQUs7dUJBQUMsU0FBUztnQkFNWixHQUFHO3NCQUROLEtBQUs7Z0JBT0YsR0FBRztzQkFETixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IEJyb2FkY29tLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhlIHRlcm0gXCJCcm9hZGNvbVwiIHJlZmVycyB0byBCcm9hZGNvbSBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDbHJEYXRlSW5wdXRCYXNlIH0gZnJvbSAnLi9kYXRlLWlucHV0JztcbmltcG9ydCB7IERheU1vZGVsIH0gZnJvbSAnLi9tb2RlbC9kYXkubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZXBpY2tlckZvY3VzU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2RhdGVwaWNrZXItZm9jdXMuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjbHJEYXRlXScsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmNsci1pbnB1dF0nOiAndHJ1ZScsXG4gIH0sXG4gIHByb3ZpZGVyczogW0RhdGVwaWNrZXJGb2N1c1NlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBDbHJEYXRlSW5wdXQgZXh0ZW5kcyBDbHJEYXRlSW5wdXRCYXNlIHtcbiAgQE91dHB1dCgnY2xyRGF0ZUNoYW5nZScpIG92ZXJyaWRlIGRhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KGZhbHNlKTtcblxuICBASW5wdXQoJ2NsckRhdGUnKVxuICBzZXQgZGF0ZShkYXRlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgdGhpcy5zZXREYXRlKGRhdGUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG1pbihkYXRlU3RyaW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWluRGF0ZShkYXRlU3RyaW5nKTtcbiAgICB0aGlzLnRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG1heChkYXRlU3RyaW5nOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShkYXRlU3RyaW5nKTtcbiAgICB0aGlzLnRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZURheU1vZGVsKGRheU1vZGVsOiBEYXlNb2RlbCkge1xuICAgIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZERhdGUgPSB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSA9IGRheU1vZGVsO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpIHtcbiAgICAgIC8vIFNldCBgZW1pdEV2ZW50YCB0byBmYWxzZSB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHZhbHVlIGNoYW5nZSBldmVudC4gU3RhdHVzIGNoYW5nZSBldmVudCB3aWxsIGJlIGVtaXR0ZWQgYnkgYHNldEVycm9yc2AgYmVsb3cuXG4gICAgICB0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycyk7XG4gICAgfVxuICB9XG59XG4iXX0=