@clr/angular 17.6.0 → 17.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. package/button/button-group/button.d.ts +6 -3
  2. package/clarity.api.md +351 -175
  3. package/data/datagrid/datagrid-virtual-scroll.directive.d.ts +1 -1
  4. package/data/datagrid/render/main-renderer.d.ts +4 -3
  5. package/data/datagrid/wrapped-cell.d.ts +1 -3
  6. package/data/datagrid/wrapped-column.d.ts +1 -3
  7. package/data/datagrid/wrapped-row.d.ts +1 -3
  8. package/esm2020/accordion/accordion-content.mjs +2 -2
  9. package/esm2020/accordion/accordion-description.mjs +2 -2
  10. package/esm2020/accordion/accordion-panel.mjs +2 -2
  11. package/esm2020/accordion/accordion-title.mjs +2 -2
  12. package/esm2020/accordion/accordion.mjs +2 -2
  13. package/esm2020/accordion/accordion.module.mjs +2 -2
  14. package/esm2020/accordion/chocolate/accordion-oompa-loompa.mjs +2 -2
  15. package/esm2020/accordion/chocolate/accordion-willy-wonka.mjs +2 -2
  16. package/esm2020/accordion/enums/accordion-status.enum.mjs +2 -2
  17. package/esm2020/accordion/enums/accordion-strategy.enum.mjs +2 -2
  18. package/esm2020/accordion/index.mjs +2 -2
  19. package/esm2020/accordion/models/accordion.model.mjs +2 -2
  20. package/esm2020/accordion/providers/accordion.service.mjs +2 -2
  21. package/esm2020/accordion/stepper/chocolate/stepper-oompa-loompa.mjs +2 -2
  22. package/esm2020/accordion/stepper/chocolate/stepper-willy-wonka.mjs +2 -2
  23. package/esm2020/accordion/stepper/index.mjs +2 -2
  24. package/esm2020/accordion/stepper/models/stepper.model.mjs +2 -2
  25. package/esm2020/accordion/stepper/providers/stepper.service.mjs +2 -2
  26. package/esm2020/accordion/stepper/step-button.mjs +2 -2
  27. package/esm2020/accordion/stepper/stepper-panel.mjs +2 -2
  28. package/esm2020/accordion/stepper/stepper.mjs +2 -2
  29. package/esm2020/accordion/stepper/stepper.module.mjs +2 -2
  30. package/esm2020/accordion/utils/animation.mjs +2 -2
  31. package/esm2020/button/button-group/button-group.mjs +4 -4
  32. package/esm2020/button/button-group/button-group.module.mjs +2 -2
  33. package/esm2020/button/button-group/button.mjs +17 -10
  34. package/esm2020/button/button-group/index.mjs +2 -2
  35. package/esm2020/button/button-loading/index.mjs +2 -2
  36. package/esm2020/button/button-loading/loading-button.mjs +2 -2
  37. package/esm2020/button/button-loading/loading-button.module.mjs +2 -2
  38. package/esm2020/button/button.module.mjs +2 -2
  39. package/esm2020/button/index.mjs +2 -2
  40. package/esm2020/button/providers/button-group-focus-handler.service.mjs +2 -2
  41. package/esm2020/button/providers/button-group-focus.enum.mjs +2 -2
  42. package/esm2020/button/providers/button-in-group.service.mjs +2 -2
  43. package/esm2020/clr-angular.module.mjs +2 -2
  44. package/esm2020/data/data.module.mjs +2 -2
  45. package/esm2020/data/datagrid/built-in/comparators/datagrid-property-comparator.mjs +2 -2
  46. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter-impl.mjs +2 -2
  47. package/esm2020/data/datagrid/built-in/filters/datagrid-numeric-filter.mjs +2 -2
  48. package/esm2020/data/datagrid/built-in/filters/datagrid-property-numeric-filter.mjs +2 -2
  49. package/esm2020/data/datagrid/built-in/filters/datagrid-property-string-filter.mjs +2 -2
  50. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter-impl.mjs +2 -2
  51. package/esm2020/data/datagrid/built-in/filters/datagrid-string-filter.mjs +2 -2
  52. package/esm2020/data/datagrid/built-in/nested-property.mjs +2 -2
  53. package/esm2020/data/datagrid/chocolate/actionable-oompa-loompa.mjs +2 -2
  54. package/esm2020/data/datagrid/chocolate/datagrid-willy-wonka.mjs +2 -2
  55. package/esm2020/data/datagrid/chocolate/expandable-oompa-loompa.mjs +2 -2
  56. package/esm2020/data/datagrid/datagrid-action-bar.mjs +2 -2
  57. package/esm2020/data/datagrid/datagrid-action-overflow.mjs +2 -2
  58. package/esm2020/data/datagrid/datagrid-cell.mjs +2 -2
  59. package/esm2020/data/datagrid/datagrid-column-separator.mjs +2 -2
  60. package/esm2020/data/datagrid/datagrid-column-toggle-button.mjs +2 -2
  61. package/esm2020/data/datagrid/datagrid-column-toggle-trackby.mjs +2 -2
  62. package/esm2020/data/datagrid/datagrid-column-toggle.mjs +5 -4
  63. package/esm2020/data/datagrid/datagrid-column.mjs +2 -2
  64. package/esm2020/data/datagrid/datagrid-detail-body.mjs +2 -2
  65. package/esm2020/data/datagrid/datagrid-detail-header.mjs +2 -2
  66. package/esm2020/data/datagrid/datagrid-detail-registerer.mjs +2 -2
  67. package/esm2020/data/datagrid/datagrid-detail.mjs +2 -2
  68. package/esm2020/data/datagrid/datagrid-filter.mjs +2 -2
  69. package/esm2020/data/datagrid/datagrid-footer.mjs +2 -2
  70. package/esm2020/data/datagrid/datagrid-hideable-column.mjs +2 -2
  71. package/esm2020/data/datagrid/datagrid-if-detail.mjs +2 -2
  72. package/esm2020/data/datagrid/datagrid-if-expanded.service.mjs +2 -2
  73. package/esm2020/data/datagrid/datagrid-items.mjs +2 -2
  74. package/esm2020/data/datagrid/datagrid-page-size.mjs +2 -2
  75. package/esm2020/data/datagrid/datagrid-pagination.mjs +2 -2
  76. package/esm2020/data/datagrid/datagrid-placeholder.mjs +2 -2
  77. package/esm2020/data/datagrid/datagrid-row-detail.mjs +4 -6
  78. package/esm2020/data/datagrid/datagrid-row.mjs +2 -2
  79. package/esm2020/data/datagrid/datagrid-selection-cell.directive.mjs +2 -2
  80. package/esm2020/data/datagrid/datagrid-virtual-scroll.directive.mjs +4 -4
  81. package/esm2020/data/datagrid/datagrid.mjs +5 -6
  82. package/esm2020/data/datagrid/datagrid.module.mjs +2 -2
  83. package/esm2020/data/datagrid/enums/column-changes.enum.mjs +2 -2
  84. package/esm2020/data/datagrid/enums/display-mode.enum.mjs +2 -2
  85. package/esm2020/data/datagrid/enums/render-step.enum.mjs +2 -2
  86. package/esm2020/data/datagrid/enums/selection-type.mjs +2 -2
  87. package/esm2020/data/datagrid/enums/sort-order.enum.mjs +2 -2
  88. package/esm2020/data/datagrid/index.mjs +2 -2
  89. package/esm2020/data/datagrid/interfaces/column-state.interface.mjs +2 -2
  90. package/esm2020/data/datagrid/interfaces/comparator.interface.mjs +2 -2
  91. package/esm2020/data/datagrid/interfaces/filter.interface.mjs +2 -2
  92. package/esm2020/data/datagrid/interfaces/numeric-filter.interface.mjs +2 -2
  93. package/esm2020/data/datagrid/interfaces/state.interface.mjs +2 -2
  94. package/esm2020/data/datagrid/interfaces/string-filter.interface.mjs +2 -2
  95. package/esm2020/data/datagrid/providers/column-resizer.service.mjs +2 -2
  96. package/esm2020/data/datagrid/providers/column-state.provider.mjs +2 -2
  97. package/esm2020/data/datagrid/providers/columns.service.mjs +2 -2
  98. package/esm2020/data/datagrid/providers/custom-filter.mjs +2 -2
  99. package/esm2020/data/datagrid/providers/detail.service.mjs +2 -2
  100. package/esm2020/data/datagrid/providers/display-mode.service.mjs +2 -2
  101. package/esm2020/data/datagrid/providers/filters.mjs +2 -2
  102. package/esm2020/data/datagrid/providers/global-expandable-rows.mjs +2 -2
  103. package/esm2020/data/datagrid/providers/items.mjs +2 -2
  104. package/esm2020/data/datagrid/providers/page.mjs +2 -2
  105. package/esm2020/data/datagrid/providers/row-action-service.mjs +2 -2
  106. package/esm2020/data/datagrid/providers/selection.mjs +2 -2
  107. package/esm2020/data/datagrid/providers/sort.mjs +2 -2
  108. package/esm2020/data/datagrid/providers/state-debouncer.provider.mjs +2 -2
  109. package/esm2020/data/datagrid/providers/state.provider.mjs +2 -2
  110. package/esm2020/data/datagrid/providers/table-size.service.mjs +2 -2
  111. package/esm2020/data/datagrid/render/cell-renderer.mjs +2 -2
  112. package/esm2020/data/datagrid/render/constants.mjs +2 -2
  113. package/esm2020/data/datagrid/render/header-renderer.mjs +2 -2
  114. package/esm2020/data/datagrid/render/main-renderer.mjs +22 -18
  115. package/esm2020/data/datagrid/render/noop-dom-adapter.mjs +2 -2
  116. package/esm2020/data/datagrid/render/render-organizer.mjs +2 -2
  117. package/esm2020/data/datagrid/render/row-renderer.mjs +2 -2
  118. package/esm2020/data/datagrid/utils/datagrid-filter-registrar.mjs +2 -2
  119. package/esm2020/data/datagrid/utils/key-navigation-grid.controller.mjs +32 -23
  120. package/esm2020/data/datagrid/wrapped-cell.mjs +2 -5
  121. package/esm2020/data/datagrid/wrapped-column.mjs +2 -5
  122. package/esm2020/data/datagrid/wrapped-row.mjs +2 -5
  123. package/esm2020/data/index.mjs +2 -2
  124. package/esm2020/data/stack-view/index.mjs +2 -2
  125. package/esm2020/data/stack-view/stack-block.mjs +2 -2
  126. package/esm2020/data/stack-view/stack-content-input.mjs +2 -2
  127. package/esm2020/data/stack-view/stack-header.mjs +2 -2
  128. package/esm2020/data/stack-view/stack-view-custom-tags.mjs +2 -2
  129. package/esm2020/data/stack-view/stack-view.mjs +2 -2
  130. package/esm2020/data/stack-view/stack-view.module.mjs +2 -2
  131. package/esm2020/data/tree-view/index.mjs +2 -2
  132. package/esm2020/data/tree-view/models/async-array.mjs +2 -2
  133. package/esm2020/data/tree-view/models/declarative-tree-node.model.mjs +2 -2
  134. package/esm2020/data/tree-view/models/recursive-tree-node.model.mjs +2 -2
  135. package/esm2020/data/tree-view/models/selected-state.enum.mjs +2 -2
  136. package/esm2020/data/tree-view/models/tree-node.model.mjs +2 -2
  137. package/esm2020/data/tree-view/recursive-children.mjs +2 -2
  138. package/esm2020/data/tree-view/recursive-for-of.mjs +2 -2
  139. package/esm2020/data/tree-view/tree-features.service.mjs +2 -2
  140. package/esm2020/data/tree-view/tree-focus-manager.service.mjs +2 -2
  141. package/esm2020/data/tree-view/tree-node-link.mjs +2 -2
  142. package/esm2020/data/tree-view/tree-node.mjs +4 -4
  143. package/esm2020/data/tree-view/tree-view.module.mjs +2 -2
  144. package/esm2020/data/tree-view/tree.mjs +2 -2
  145. package/esm2020/emphasis/alert/alert-item.mjs +2 -2
  146. package/esm2020/emphasis/alert/alert-text.mjs +2 -2
  147. package/esm2020/emphasis/alert/alert.mjs +4 -4
  148. package/esm2020/emphasis/alert/alert.module.mjs +2 -2
  149. package/esm2020/emphasis/alert/alerts-pager.mjs +4 -4
  150. package/esm2020/emphasis/alert/alerts.mjs +4 -4
  151. package/esm2020/emphasis/alert/index.mjs +2 -2
  152. package/esm2020/emphasis/alert/providers/icon-and-types.service.mjs +2 -2
  153. package/esm2020/emphasis/alert/providers/multi-alert.service.mjs +2 -2
  154. package/esm2020/emphasis/alert/utils/alert-info-object.mjs +2 -2
  155. package/esm2020/emphasis/alert/utils/alert-types.mjs +2 -2
  156. package/esm2020/emphasis/emphasis.module.mjs +2 -2
  157. package/esm2020/emphasis/index.mjs +2 -2
  158. package/esm2020/forms/checkbox/checkbox-container.mjs +2 -2
  159. package/esm2020/forms/checkbox/checkbox-wrapper.mjs +2 -6
  160. package/esm2020/forms/checkbox/checkbox.mjs +2 -2
  161. package/esm2020/forms/checkbox/checkbox.module.mjs +2 -2
  162. package/esm2020/forms/checkbox/index.mjs +2 -2
  163. package/esm2020/forms/combobox/combobox-container.mjs +2 -2
  164. package/esm2020/forms/combobox/combobox.mjs +4 -4
  165. package/esm2020/forms/combobox/combobox.module.mjs +2 -2
  166. package/esm2020/forms/combobox/index.mjs +2 -2
  167. package/esm2020/forms/combobox/model/combobox.model.mjs +2 -2
  168. package/esm2020/forms/combobox/model/multi-select-combobox.model.mjs +2 -2
  169. package/esm2020/forms/combobox/model/pseudo-focus.model.mjs +2 -2
  170. package/esm2020/forms/combobox/model/single-select-combobox.model.mjs +2 -2
  171. package/esm2020/forms/combobox/option-items.directive.mjs +2 -2
  172. package/esm2020/forms/combobox/option-selected.directive.mjs +2 -2
  173. package/esm2020/forms/combobox/option.mjs +2 -2
  174. package/esm2020/forms/combobox/options.mjs +2 -2
  175. package/esm2020/forms/combobox/providers/combobox-container.service.mjs +2 -2
  176. package/esm2020/forms/combobox/providers/combobox-focus-handler.service.mjs +2 -2
  177. package/esm2020/forms/combobox/providers/option-selection.service.mjs +2 -2
  178. package/esm2020/forms/common/abstract-container.mjs +5 -4
  179. package/esm2020/forms/common/abstract-control.mjs +2 -2
  180. package/esm2020/forms/common/common.module.mjs +2 -2
  181. package/esm2020/forms/common/control-container.mjs +2 -2
  182. package/esm2020/forms/common/control.mjs +2 -2
  183. package/esm2020/forms/common/error.mjs +2 -2
  184. package/esm2020/forms/common/form.mjs +2 -2
  185. package/esm2020/forms/common/helper.mjs +2 -2
  186. package/esm2020/forms/common/if-control-state/abstract-if-state.mjs +4 -2
  187. package/esm2020/forms/common/if-control-state/if-control-state.service.mjs +24 -6
  188. package/esm2020/forms/common/if-control-state/if-error.mjs +10 -6
  189. package/esm2020/forms/common/if-control-state/if-success.mjs +2 -2
  190. package/esm2020/forms/common/index.mjs +2 -2
  191. package/esm2020/forms/common/label.mjs +2 -2
  192. package/esm2020/forms/common/layout.mjs +2 -2
  193. package/esm2020/forms/common/providers/container-id.service.mjs +2 -2
  194. package/esm2020/forms/common/providers/control-class.service.mjs +2 -2
  195. package/esm2020/forms/common/providers/control-id.service.mjs +2 -2
  196. package/esm2020/forms/common/providers/focus.service.mjs +2 -2
  197. package/esm2020/forms/common/providers/layout.service.mjs +2 -2
  198. package/esm2020/forms/common/providers/mark-control.service.mjs +2 -2
  199. package/esm2020/forms/common/providers/ng-control.service.mjs +17 -2
  200. package/esm2020/forms/common/success.mjs +2 -2
  201. package/esm2020/forms/common/wrapped-control.mjs +43 -19
  202. package/esm2020/forms/datalist/datalist-container.mjs +2 -2
  203. package/esm2020/forms/datalist/datalist-input.mjs +2 -2
  204. package/esm2020/forms/datalist/datalist.mjs +2 -2
  205. package/esm2020/forms/datalist/datalist.module.mjs +2 -2
  206. package/esm2020/forms/datalist/index.mjs +2 -2
  207. package/esm2020/forms/datalist/providers/datalist-id.service.mjs +2 -2
  208. package/esm2020/forms/datepicker/calendar.mjs +50 -8
  209. package/esm2020/forms/datepicker/date-container.mjs +97 -11
  210. package/esm2020/forms/datepicker/date-end-input.mjs +60 -0
  211. package/esm2020/forms/datepicker/date-input.mjs +74 -80
  212. package/esm2020/forms/datepicker/date-input.validator.mjs +65 -6
  213. package/esm2020/forms/datepicker/date-single-input.mjs +63 -0
  214. package/esm2020/forms/datepicker/date-start-input.mjs +61 -0
  215. package/esm2020/forms/datepicker/datepicker-action-buttons.mjs +12 -3
  216. package/esm2020/forms/datepicker/datepicker-view-manager.mjs +28 -12
  217. package/esm2020/forms/datepicker/datepicker.module.mjs +24 -6
  218. package/esm2020/forms/datepicker/day.mjs +49 -4
  219. package/esm2020/forms/datepicker/daypicker.mjs +2 -2
  220. package/esm2020/forms/datepicker/index.mjs +5 -2
  221. package/esm2020/forms/datepicker/interfaces/date-range.interface.mjs +2 -2
  222. package/esm2020/forms/datepicker/interfaces/day-of-week.interface.mjs +2 -2
  223. package/esm2020/forms/datepicker/model/calendar-view.model.mjs +17 -3
  224. package/esm2020/forms/datepicker/model/calendar.model.mjs +14 -2
  225. package/esm2020/forms/datepicker/model/day-view.model.mjs +5 -3
  226. package/esm2020/forms/datepicker/model/day.model.mjs +18 -2
  227. package/esm2020/forms/datepicker/model/year-range.model.mjs +2 -2
  228. package/esm2020/forms/datepicker/monthpicker.mjs +237 -40
  229. package/esm2020/forms/datepicker/providers/date-form-control.service.mjs +2 -2
  230. package/esm2020/forms/datepicker/providers/date-io.service.mjs +21 -2
  231. package/esm2020/forms/datepicker/providers/date-navigation.service.mjs +70 -8
  232. package/esm2020/forms/datepicker/providers/datepicker-enabled.service.mjs +2 -2
  233. package/esm2020/forms/datepicker/providers/datepicker-focus.service.mjs +2 -2
  234. package/esm2020/forms/datepicker/providers/locale-helper.service.mjs +2 -2
  235. package/esm2020/forms/datepicker/providers/view-manager.service.mjs +2 -2
  236. package/esm2020/forms/datepicker/utils/constants.mjs +2 -2
  237. package/esm2020/forms/datepicker/utils/date-utils.mjs +2 -2
  238. package/esm2020/forms/datepicker/yearpicker.mjs +132 -58
  239. package/esm2020/forms/file-input/file-input-container.mjs +2 -2
  240. package/esm2020/forms/file-input/file-input-validator-errors.mjs +2 -2
  241. package/esm2020/forms/file-input/file-input-validator.mjs +2 -2
  242. package/esm2020/forms/file-input/file-input-value-accessor.mjs +2 -2
  243. package/esm2020/forms/file-input/file-input.helpers.mjs +2 -2
  244. package/esm2020/forms/file-input/file-input.mjs +2 -2
  245. package/esm2020/forms/file-input/file-input.module.mjs +2 -2
  246. package/esm2020/forms/file-input/file-list.mjs +4 -2
  247. package/esm2020/forms/file-input/file-messages-template.mjs +2 -2
  248. package/esm2020/forms/file-input/file-messages.mjs +2 -2
  249. package/esm2020/forms/file-input/index.mjs +2 -2
  250. package/esm2020/forms/forms.module.mjs +2 -2
  251. package/esm2020/forms/index.mjs +2 -2
  252. package/esm2020/forms/input/index.mjs +2 -2
  253. package/esm2020/forms/input/input-container.mjs +2 -2
  254. package/esm2020/forms/input/input.mjs +2 -2
  255. package/esm2020/forms/input/input.module.mjs +2 -2
  256. package/esm2020/forms/number-input/index.mjs +2 -2
  257. package/esm2020/forms/number-input/number-input-container.mjs +2 -2
  258. package/esm2020/forms/number-input/number-input.mjs +2 -2
  259. package/esm2020/forms/number-input/number-input.module.mjs +2 -2
  260. package/esm2020/forms/password/index.mjs +2 -2
  261. package/esm2020/forms/password/password-container.mjs +2 -2
  262. package/esm2020/forms/password/password.mjs +2 -2
  263. package/esm2020/forms/password/password.module.mjs +2 -2
  264. package/esm2020/forms/radio/index.mjs +2 -2
  265. package/esm2020/forms/radio/radio-container.mjs +2 -2
  266. package/esm2020/forms/radio/radio-wrapper.mjs +2 -8
  267. package/esm2020/forms/radio/radio.mjs +2 -2
  268. package/esm2020/forms/radio/radio.module.mjs +2 -2
  269. package/esm2020/forms/range/index.mjs +2 -2
  270. package/esm2020/forms/range/range-container.mjs +2 -2
  271. package/esm2020/forms/range/range.mjs +2 -2
  272. package/esm2020/forms/range/range.module.mjs +2 -2
  273. package/esm2020/forms/select/index.mjs +2 -2
  274. package/esm2020/forms/select/select-container.mjs +2 -2
  275. package/esm2020/forms/select/select.mjs +2 -2
  276. package/esm2020/forms/select/select.module.mjs +2 -2
  277. package/esm2020/forms/textarea/index.mjs +2 -2
  278. package/esm2020/forms/textarea/textarea-container.mjs +2 -2
  279. package/esm2020/forms/textarea/textarea.mjs +2 -2
  280. package/esm2020/forms/textarea/textarea.module.mjs +2 -2
  281. package/esm2020/icon/icon.mjs +2 -2
  282. package/esm2020/icon/icon.module.mjs +2 -2
  283. package/esm2020/icon/index.mjs +2 -2
  284. package/esm2020/index.mjs +2 -2
  285. package/esm2020/layout/breadcrumbs/breadcrumb-item.mjs +2 -2
  286. package/esm2020/layout/breadcrumbs/breadcrumbs.constants.mjs +2 -2
  287. package/esm2020/layout/breadcrumbs/breadcrumbs.mjs +4 -4
  288. package/esm2020/layout/breadcrumbs/breadcrumbs.module.mjs +2 -2
  289. package/esm2020/layout/breadcrumbs/index.mjs +2 -2
  290. package/esm2020/layout/breadcrumbs/model/breadcrumbs.model.mjs +2 -2
  291. package/esm2020/layout/index.mjs +2 -2
  292. package/esm2020/layout/layout.module.mjs +2 -2
  293. package/esm2020/layout/main-container/index.mjs +2 -2
  294. package/esm2020/layout/main-container/main-container.mjs +2 -2
  295. package/esm2020/layout/main-container/main-container.module.mjs +2 -2
  296. package/esm2020/layout/nav/aria-current-link.mjs +2 -2
  297. package/esm2020/layout/nav/chocolate/index.mjs +2 -2
  298. package/esm2020/layout/nav/chocolate/main-container-willy-wonka.mjs +2 -2
  299. package/esm2020/layout/nav/chocolate/nav-detection-oompa-loompa.mjs +2 -2
  300. package/esm2020/layout/nav/header.mjs +2 -2
  301. package/esm2020/layout/nav/index.mjs +2 -2
  302. package/esm2020/layout/nav/nav-level.mjs +2 -2
  303. package/esm2020/layout/nav/navigation.module.mjs +2 -2
  304. package/esm2020/layout/nav/providers/responsive-navigation.service.mjs +2 -2
  305. package/esm2020/layout/nav/responsive-nav-codes.mjs +2 -2
  306. package/esm2020/layout/nav/responsive-nav-control-message.mjs +2 -2
  307. package/esm2020/layout/tabs/chocolate/active-oompa-loompa.mjs +2 -2
  308. package/esm2020/layout/tabs/chocolate/tabs-willy-wonka.mjs +2 -2
  309. package/esm2020/layout/tabs/enums/tabs-layout.enum.mjs +2 -2
  310. package/esm2020/layout/tabs/index.mjs +2 -2
  311. package/esm2020/layout/tabs/providers/tabs.service.mjs +2 -2
  312. package/esm2020/layout/tabs/tab-action.directive.mjs +2 -2
  313. package/esm2020/layout/tabs/tab-content.mjs +2 -2
  314. package/esm2020/layout/tabs/tab-link.directive.mjs +2 -2
  315. package/esm2020/layout/tabs/tab-overflow-content.mjs +2 -2
  316. package/esm2020/layout/tabs/tab.mjs +2 -2
  317. package/esm2020/layout/tabs/tabs-actions.mjs +2 -2
  318. package/esm2020/layout/tabs/tabs-id.provider.mjs +2 -2
  319. package/esm2020/layout/tabs/tabs.mjs +2 -2
  320. package/esm2020/layout/tabs/tabs.module.mjs +2 -2
  321. package/esm2020/layout/vertical-nav/index.mjs +2 -2
  322. package/esm2020/layout/vertical-nav/providers/vertical-nav-group-registration.service.mjs +2 -2
  323. package/esm2020/layout/vertical-nav/providers/vertical-nav-group.service.mjs +2 -2
  324. package/esm2020/layout/vertical-nav/providers/vertical-nav-icon.service.mjs +2 -2
  325. package/esm2020/layout/vertical-nav/providers/vertical-nav.service.mjs +2 -2
  326. package/esm2020/layout/vertical-nav/vertical-nav-group-children.mjs +2 -2
  327. package/esm2020/layout/vertical-nav/vertical-nav-group.mjs +4 -4
  328. package/esm2020/layout/vertical-nav/vertical-nav-icon.mjs +2 -2
  329. package/esm2020/layout/vertical-nav/vertical-nav-link.mjs +2 -2
  330. package/esm2020/layout/vertical-nav/vertical-nav.mjs +10 -5
  331. package/esm2020/layout/vertical-nav/vertical-nav.module.mjs +2 -2
  332. package/esm2020/modal/index.mjs +3 -2
  333. package/esm2020/modal/modal-body.mjs +2 -2
  334. package/esm2020/modal/modal-configuration.service.mjs +2 -2
  335. package/esm2020/modal/modal-host.directive.mjs +20 -0
  336. package/esm2020/modal/modal-stack.service.mjs +2 -2
  337. package/esm2020/modal/modal.mjs +12 -6
  338. package/esm2020/modal/modal.module.mjs +5 -4
  339. package/esm2020/modal/side-panel.mjs +90 -14
  340. package/esm2020/modal/side-panel.module.mjs +5 -5
  341. package/esm2020/popover/common/abstract-popover.mjs +14 -16
  342. package/esm2020/popover/common/popover-host-anchor.token.mjs +2 -2
  343. package/esm2020/popover/common/popover-options.interface.mjs +2 -2
  344. package/esm2020/popover/common/popover.mjs +2 -2
  345. package/esm2020/popover/dropdown/dropdown-item.mjs +2 -2
  346. package/esm2020/popover/dropdown/dropdown-menu.mjs +2 -2
  347. package/esm2020/popover/dropdown/dropdown-trigger.mjs +2 -2
  348. package/esm2020/popover/dropdown/dropdown.mjs +2 -2
  349. package/esm2020/popover/dropdown/dropdown.module.mjs +2 -2
  350. package/esm2020/popover/dropdown/index.mjs +2 -2
  351. package/esm2020/popover/dropdown/menu-positions.mjs +2 -2
  352. package/esm2020/popover/dropdown/providers/dropdown-focus-handler.service.mjs +2 -2
  353. package/esm2020/popover/dropdown/providers/dropdown.service.mjs +2 -2
  354. package/esm2020/popover/index.mjs +2 -2
  355. package/esm2020/popover/popover.module.mjs +2 -2
  356. package/esm2020/popover/signpost/index.mjs +2 -2
  357. package/esm2020/popover/signpost/providers/signpost-focus-manager.service.mjs +2 -2
  358. package/esm2020/popover/signpost/providers/signpost-id.service.mjs +2 -2
  359. package/esm2020/popover/signpost/signpost-content.mjs +2 -2
  360. package/esm2020/popover/signpost/signpost-positions.mjs +2 -2
  361. package/esm2020/popover/signpost/signpost-title.mjs +2 -2
  362. package/esm2020/popover/signpost/signpost-trigger.mjs +2 -2
  363. package/esm2020/popover/signpost/signpost.mjs +2 -2
  364. package/esm2020/popover/signpost/signpost.module.mjs +2 -2
  365. package/esm2020/popover/tooltip/index.mjs +2 -2
  366. package/esm2020/popover/tooltip/providers/tooltip-id.service.mjs +2 -2
  367. package/esm2020/popover/tooltip/providers/tooltip-mouse.service.mjs +2 -2
  368. package/esm2020/popover/tooltip/tooltip-content.mjs +2 -2
  369. package/esm2020/popover/tooltip/tooltip-trigger.mjs +2 -2
  370. package/esm2020/popover/tooltip/tooltip.mjs +2 -2
  371. package/esm2020/popover/tooltip/tooltip.module.mjs +2 -2
  372. package/esm2020/progress/progress-bars/index.mjs +2 -2
  373. package/esm2020/progress/progress-bars/progress-bar.mjs +2 -2
  374. package/esm2020/progress/progress-bars/progress-bar.module.mjs +2 -2
  375. package/esm2020/progress/spinner/index.mjs +2 -2
  376. package/esm2020/progress/spinner/spinner.mjs +2 -2
  377. package/esm2020/progress/spinner/spinner.module.mjs +2 -2
  378. package/esm2020/timeline/enums/timeline-layout.enum.mjs +2 -2
  379. package/esm2020/timeline/enums/timeline-step-state.enum.mjs +2 -2
  380. package/esm2020/timeline/index.mjs +2 -2
  381. package/esm2020/timeline/interface/icon-attribute.interface.mjs +2 -2
  382. package/esm2020/timeline/providers/timeline-icon-attribute.service.mjs +2 -2
  383. package/esm2020/timeline/timeline-step-description.mjs +2 -2
  384. package/esm2020/timeline/timeline-step-header.mjs +2 -2
  385. package/esm2020/timeline/timeline-step-title.mjs +2 -2
  386. package/esm2020/timeline/timeline-step.mjs +2 -2
  387. package/esm2020/timeline/timeline.mjs +2 -2
  388. package/esm2020/timeline/timeline.module.mjs +2 -2
  389. package/esm2020/utils/animations/collapse/collapse.mjs +2 -2
  390. package/esm2020/utils/animations/collapse/index.mjs +2 -2
  391. package/esm2020/utils/animations/constants.mjs +2 -2
  392. package/esm2020/utils/animations/expandable-animation/expandable-animation.mjs +2 -2
  393. package/esm2020/utils/animations/expandable-animation/expandable-animation.module.mjs +2 -2
  394. package/esm2020/utils/animations/expandable-animation/index.mjs +2 -2
  395. package/esm2020/utils/animations/fade/fade.mjs +2 -2
  396. package/esm2020/utils/animations/fade/index.mjs +2 -2
  397. package/esm2020/utils/animations/fade-slide/fade-slide.mjs +2 -2
  398. package/esm2020/utils/animations/fade-slide/index.mjs +2 -2
  399. package/esm2020/utils/animations/index.mjs +2 -2
  400. package/esm2020/utils/animations/slide/index.mjs +2 -2
  401. package/esm2020/utils/animations/slide/slide.mjs +2 -2
  402. package/esm2020/utils/assert/assert.helpers.mjs +2 -2
  403. package/esm2020/utils/breakpoints/breakpoints.mjs +2 -2
  404. package/esm2020/utils/cdk/cdk-drag.module.mjs +1 -1
  405. package/esm2020/utils/cdk/cdk-trap-focus.module.mjs +2 -2
  406. package/esm2020/utils/chocolate/oompa-loompa.mjs +2 -2
  407. package/esm2020/utils/chocolate/willy-wonka.mjs +2 -2
  408. package/esm2020/utils/component/is-boolean-attribute-set.mjs +2 -2
  409. package/esm2020/utils/conditional/conditional.module.mjs +2 -2
  410. package/esm2020/utils/conditional/if-active.directive.mjs +2 -2
  411. package/esm2020/utils/conditional/if-active.service.mjs +2 -2
  412. package/esm2020/utils/conditional/if-expanded.directive.mjs +2 -2
  413. package/esm2020/utils/conditional/if-expanded.service.mjs +2 -2
  414. package/esm2020/utils/conditional/if-open.directive.mjs +2 -2
  415. package/esm2020/utils/conditional/index.mjs +2 -2
  416. package/esm2020/utils/destroy/destroy.service.mjs +2 -2
  417. package/esm2020/utils/destroy/index.mjs +2 -2
  418. package/esm2020/utils/dom-adapter/dom-adapter.mjs +2 -2
  419. package/esm2020/utils/enums/keys.enum.mjs +4 -2
  420. package/esm2020/utils/focus/arrow-key-direction.enum.mjs +2 -2
  421. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.mjs +2 -2
  422. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.module.mjs +2 -2
  423. package/esm2020/utils/focus/focus-on-view-init/focus-on-view-init.provider.mjs +2 -2
  424. package/esm2020/utils/focus/focus-on-view-init/index.mjs +2 -2
  425. package/esm2020/utils/focus/focus-trap/index.mjs +2 -2
  426. package/esm2020/utils/focus/focus-trap/standalone-cdk-trap-focus.directive.mjs +2 -2
  427. package/esm2020/utils/focus/focus.service.mjs +2 -2
  428. package/esm2020/utils/focus/focusable-item/basic-focusable-item.service.mjs +2 -2
  429. package/esm2020/utils/focus/focusable-item/custom-focusable-item-provider.mjs +2 -2
  430. package/esm2020/utils/focus/focusable-item/focusable-item.mjs +2 -2
  431. package/esm2020/utils/focus/focusable-item/linkers.mjs +2 -2
  432. package/esm2020/utils/focus/key-focus/enums/focus-direction.enum.mjs +2 -2
  433. package/esm2020/utils/focus/key-focus/index.mjs +2 -2
  434. package/esm2020/utils/focus/key-focus/interfaces.mjs +2 -2
  435. package/esm2020/utils/focus/key-focus/key-focus-item.mjs +2 -2
  436. package/esm2020/utils/focus/key-focus/key-focus.mjs +2 -2
  437. package/esm2020/utils/focus/key-focus/key-focus.module.mjs +2 -2
  438. package/esm2020/utils/focus/key-focus/roving-tabindex.mjs +2 -2
  439. package/esm2020/utils/focus/key-focus/util.mjs +2 -2
  440. package/esm2020/utils/focus/wrap-observable.mjs +2 -2
  441. package/esm2020/utils/forms/validation.mjs +2 -2
  442. package/esm2020/utils/host-wrapping/empty-anchor.mjs +2 -2
  443. package/esm2020/utils/host-wrapping/host-wrapper.mjs +2 -4
  444. package/esm2020/utils/host-wrapping/host-wrapping.module.mjs +2 -2
  445. package/esm2020/utils/i18n/common-strings.default.mjs +3 -2
  446. package/esm2020/utils/i18n/common-strings.interface.mjs +2 -2
  447. package/esm2020/utils/i18n/common-strings.service.mjs +2 -2
  448. package/esm2020/utils/i18n/index.mjs +2 -2
  449. package/esm2020/utils/id-generator/id-generator.service.mjs +2 -2
  450. package/esm2020/utils/index.mjs +2 -2
  451. package/esm2020/utils/loading/index.mjs +2 -2
  452. package/esm2020/utils/loading/loading-listener.mjs +2 -2
  453. package/esm2020/utils/loading/loading.mjs +2 -2
  454. package/esm2020/utils/loading/loading.module.mjs +2 -2
  455. package/esm2020/utils/outside-click/index.mjs +2 -2
  456. package/esm2020/utils/outside-click/outside-click.mjs +2 -2
  457. package/esm2020/utils/outside-click/outside-click.module.mjs +2 -2
  458. package/esm2020/utils/popover/enums/alignment.enum.mjs +2 -2
  459. package/esm2020/utils/popover/enums/axis.enum.mjs +2 -2
  460. package/esm2020/utils/popover/enums/positions.enum.mjs +2 -2
  461. package/esm2020/utils/popover/enums/side.enum.mjs +2 -2
  462. package/esm2020/utils/popover/enums/viewport-violation.enum.mjs +2 -2
  463. package/esm2020/utils/popover/index.mjs +2 -2
  464. package/esm2020/utils/popover/interfaces/popover-content-offset.interface.mjs +2 -2
  465. package/esm2020/utils/popover/interfaces/popover-position.interface.mjs +2 -2
  466. package/esm2020/utils/popover/interfaces/visibility-coords.interface.mjs +2 -2
  467. package/esm2020/utils/popover/popover-anchor.mjs +2 -2
  468. package/esm2020/utils/popover/popover-close-button.mjs +2 -2
  469. package/esm2020/utils/popover/popover-content.mjs +2 -2
  470. package/esm2020/utils/popover/popover-host.directive.mjs +2 -2
  471. package/esm2020/utils/popover/popover-open-close-button.mjs +2 -2
  472. package/esm2020/utils/popover/popover.module.mjs +2 -2
  473. package/esm2020/utils/popover/position-operators.mjs +2 -2
  474. package/esm2020/utils/popover/providers/popover-events.service.mjs +2 -2
  475. package/esm2020/utils/popover/providers/popover-position.service.mjs +2 -2
  476. package/esm2020/utils/popover/providers/popover-toggle.service.mjs +2 -2
  477. package/esm2020/utils/popover/stop-escape-propagation.directive.mjs +2 -2
  478. package/esm2020/utils/scrolling/scrolling-service.mjs +2 -2
  479. package/esm2020/utils/template-ref/index.mjs +2 -2
  480. package/esm2020/utils/template-ref/template-ref-container.mjs +2 -2
  481. package/esm2020/utils/template-ref/template-ref.module.mjs +2 -2
  482. package/esm2020/wizard/heading-level.mjs +2 -2
  483. package/esm2020/wizard/index.mjs +2 -2
  484. package/esm2020/wizard/providers/button-hub.service.mjs +2 -2
  485. package/esm2020/wizard/providers/header-actions.service.mjs +2 -2
  486. package/esm2020/wizard/providers/page-collection.service.mjs +2 -2
  487. package/esm2020/wizard/providers/wizard-navigation.service.mjs +2 -2
  488. package/esm2020/wizard/wizard-button.mjs +2 -2
  489. package/esm2020/wizard/wizard-header-action.mjs +2 -2
  490. package/esm2020/wizard/wizard-page-buttons.mjs +2 -2
  491. package/esm2020/wizard/wizard-page-header-actions.mjs +2 -2
  492. package/esm2020/wizard/wizard-page-navtitle.mjs +2 -2
  493. package/esm2020/wizard/wizard-page-title.mjs +2 -2
  494. package/esm2020/wizard/wizard-page.mjs +2 -2
  495. package/esm2020/wizard/wizard-stepnav-item.mjs +6 -2
  496. package/esm2020/wizard/wizard-stepnav.mjs +2 -2
  497. package/esm2020/wizard/wizard-title.mjs +2 -2
  498. package/esm2020/wizard/wizard.mjs +11 -5
  499. package/esm2020/wizard/wizard.module.mjs +2 -2
  500. package/fesm2015/clr-angular.mjs +14427 -13398
  501. package/fesm2015/clr-angular.mjs.map +1 -1
  502. package/fesm2020/clr-angular.mjs +14447 -13450
  503. package/fesm2020/clr-angular.mjs.map +1 -1
  504. package/forms/checkbox/checkbox-wrapper.d.ts +1 -3
  505. package/forms/common/abstract-container.d.ts +2 -3
  506. package/forms/common/if-control-state/abstract-if-state.d.ts +1 -0
  507. package/forms/common/providers/ng-control.service.d.ts +6 -0
  508. package/forms/common/wrapped-control.d.ts +7 -4
  509. package/forms/datepicker/calendar.d.ts +4 -0
  510. package/forms/datepicker/date-container.d.ts +15 -3
  511. package/forms/datepicker/date-end-input.d.ts +15 -0
  512. package/forms/datepicker/date-input.d.ts +18 -12
  513. package/forms/datepicker/date-input.validator.d.ts +18 -1
  514. package/forms/datepicker/date-single-input.d.ts +15 -0
  515. package/forms/datepicker/date-start-input.d.ts +15 -0
  516. package/forms/datepicker/datepicker-view-manager.d.ts +6 -1
  517. package/forms/datepicker/datepicker.module.d.ts +18 -15
  518. package/forms/datepicker/day.d.ts +11 -0
  519. package/forms/datepicker/index.d.ts +3 -0
  520. package/forms/datepicker/interfaces/date-range.interface.d.ts +8 -0
  521. package/forms/datepicker/model/calendar-view.model.d.ts +7 -2
  522. package/forms/datepicker/model/calendar.model.d.ts +8 -0
  523. package/forms/datepicker/model/day-view.model.d.ts +3 -1
  524. package/forms/datepicker/model/day.model.d.ts +8 -0
  525. package/forms/datepicker/monthpicker.d.ts +43 -2
  526. package/forms/datepicker/providers/date-io.service.d.ts +5 -1
  527. package/forms/datepicker/providers/date-navigation.service.d.ts +27 -1
  528. package/forms/datepicker/yearpicker.d.ts +14 -0
  529. package/forms/radio/radio-wrapper.d.ts +1 -3
  530. package/layout/vertical-nav/vertical-nav.d.ts +3 -1
  531. package/modal/index.d.ts +1 -0
  532. package/modal/modal-host.directive.d.ts +5 -0
  533. package/modal/modal.d.ts +4 -2
  534. package/modal/modal.module.d.ts +5 -4
  535. package/modal/side-panel.d.ts +25 -6
  536. package/modal/side-panel.module.d.ts +1 -1
  537. package/package.json +2 -2
  538. package/popover/common/abstract-popover.d.ts +0 -1
  539. package/utils/enums/keys.enum.d.ts +3 -1
  540. package/utils/host-wrapping/host-wrapper.d.ts +1 -2
  541. package/utils/i18n/common-strings.interface.d.ts +4 -0
  542. package/wizard/wizard.d.ts +2 -1
  543. package/esm2020/utils/host-wrapping/dynamic-wrapper.mjs +0 -8
  544. package/utils/host-wrapping/dynamic-wrapper.d.ts +0 -3
@@ -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,18 +8,21 @@ import { Component, HostListener } from '@angular/core';
8
8
  import { Keys } from '../../utils/enums/keys.enum';
9
9
  import { normalizeKey } from '../../utils/focus/key-focus/util';
10
10
  import * as i0 from "@angular/core";
11
- import * as i1 from "./providers/view-manager.service";
12
- import * as i2 from "./providers/locale-helper.service";
13
- import * as i3 from "./providers/date-navigation.service";
14
- import * as i4 from "./providers/datepicker-focus.service";
15
- import * as i5 from "@angular/common";
11
+ import * as i1 from "./providers/locale-helper.service";
12
+ import * as i2 from "./providers/date-navigation.service";
13
+ import * as i3 from "./providers/datepicker-focus.service";
14
+ import * as i4 from "./providers/view-manager.service";
15
+ import * as i5 from "../../utils";
16
+ import * as i6 from "@angular/common";
17
+ import * as i7 from "../../icon/icon";
16
18
  export class ClrMonthpicker {
17
- constructor(_viewManagerService, _localeHelperService, _dateNavigationService, _datepickerFocusService, _elRef) {
18
- this._viewManagerService = _viewManagerService;
19
+ constructor(_localeHelperService, _dateNavigationService, _datepickerFocusService, _elRef, _viewManagerService, commonStrings) {
19
20
  this._localeHelperService = _localeHelperService;
20
21
  this._dateNavigationService = _dateNavigationService;
21
22
  this._datepickerFocusService = _datepickerFocusService;
22
23
  this._elRef = _elRef;
24
+ this._viewManagerService = _viewManagerService;
25
+ this.commonStrings = commonStrings;
23
26
  this._focusedMonthIndex = this.calendarMonthIndex;
24
27
  }
25
28
  /**
@@ -35,6 +38,45 @@ export class ClrMonthpicker {
35
38
  get calendarMonthIndex() {
36
39
  return this._dateNavigationService.displayedCalendar.month;
37
40
  }
41
+ /**
42
+ * Gets the year which the user is currently on.
43
+ */
44
+ get calendarEndMonthIndex() {
45
+ return this._dateNavigationService.selectedEndDay?.month;
46
+ }
47
+ get yearAttrString() {
48
+ return this.commonStrings.parse(this.commonStrings.keys.datepickerSelectYearText, {
49
+ CALENDAR_YEAR: this.calendarYear.toString(),
50
+ });
51
+ }
52
+ /**
53
+ * Returns the year value of the calendar.
54
+ */
55
+ get calendarYear() {
56
+ return this._dateNavigationService.displayedCalendar.year;
57
+ }
58
+ get currentCalendarYear() {
59
+ return new Date().getFullYear();
60
+ }
61
+ get currentCalendarMonth() {
62
+ return new Date().getMonth();
63
+ }
64
+ getIsRangeStartMonth(monthIndex) {
65
+ return (this._dateNavigationService.isRangePicker &&
66
+ this.calendarYear === this._dateNavigationService.selectedDay?.year &&
67
+ monthIndex === this._dateNavigationService.selectedDay?.month);
68
+ }
69
+ getIsRangeEndMonth(monthIndex) {
70
+ return (this._dateNavigationService.isRangePicker &&
71
+ this.calendarYear === this._dateNavigationService.selectedEndDay?.year &&
72
+ monthIndex === this._dateNavigationService.selectedEndDay?.month);
73
+ }
74
+ /**
75
+ * Calls the ViewManagerService to change to the yearpicker view.
76
+ */
77
+ changeToYearView() {
78
+ this._viewManagerService.changeToYearView();
79
+ }
38
80
  /**
39
81
  * Focuses on the current calendar month when the View is initialized.
40
82
  */
@@ -50,28 +92,40 @@ export class ClrMonthpicker {
50
92
  // to create extra observables just to move this logic to the service.
51
93
  if (event) {
52
94
  const key = normalizeKey(event.key);
53
- if (key === Keys.ArrowUp && this._focusedMonthIndex > 0) {
95
+ if (key === Keys.ArrowUp && this._focusedMonthIndex > 1) {
54
96
  event.preventDefault();
55
- this._focusedMonthIndex--;
97
+ this._focusedMonthIndex -= 2;
56
98
  this._datepickerFocusService.focusCell(this._elRef);
57
99
  }
58
- else if (key === Keys.ArrowDown && this._focusedMonthIndex < 11) {
100
+ else if (key === Keys.ArrowDown && this._focusedMonthIndex < 10) {
59
101
  event.preventDefault();
60
- this._focusedMonthIndex++;
102
+ this._focusedMonthIndex += 2;
61
103
  this._datepickerFocusService.focusCell(this._elRef);
62
104
  }
63
- else if (key === Keys.ArrowRight && this._focusedMonthIndex < 6) {
105
+ else if (key === Keys.ArrowRight && this._focusedMonthIndex < 11) {
64
106
  event.preventDefault();
65
- this._focusedMonthIndex = this._focusedMonthIndex + 6;
107
+ this._focusedMonthIndex++;
66
108
  this._datepickerFocusService.focusCell(this._elRef);
67
109
  }
68
- else if (key === Keys.ArrowLeft && this._focusedMonthIndex > 5) {
110
+ else if (key === Keys.ArrowLeft && this._focusedMonthIndex > 0) {
69
111
  event.preventDefault();
70
- this._focusedMonthIndex = this._focusedMonthIndex - 6;
112
+ this._focusedMonthIndex--;
71
113
  this._datepickerFocusService.focusCell(this._elRef);
72
114
  }
73
115
  }
74
116
  }
117
+ isSelected(monthIndex) {
118
+ return ((this._dateNavigationService.selectedDay?.year === this.calendarYear &&
119
+ monthIndex === this._dateNavigationService.selectedDay?.month) ||
120
+ (this._dateNavigationService.selectedEndDay?.year === this.calendarYear &&
121
+ monthIndex === this.calendarEndMonthIndex));
122
+ }
123
+ /**
124
+ * Calls the DateNavigationService to update the hovered month value of the calendar
125
+ */
126
+ onHover(monthIndex) {
127
+ this._dateNavigationService.hoveredMonth = monthIndex;
128
+ }
75
129
  /**
76
130
  * Calls the DateNavigationService to update the month value of the calendar.
77
131
  * Also changes the view to the daypicker.
@@ -86,43 +140,186 @@ export class ClrMonthpicker {
86
140
  getTabIndex(monthIndex) {
87
141
  return monthIndex === this._focusedMonthIndex ? 0 : -1;
88
142
  }
143
+ /**
144
+ * Calls the DateNavigationService to move to the next month.
145
+ */
146
+ nextYear() {
147
+ this._dateNavigationService.moveToNextYear();
148
+ }
149
+ /**
150
+ * Calls the DateNavigationService to move to the previous month.
151
+ */
152
+ previousYear() {
153
+ this._dateNavigationService.moveToPreviousYear();
154
+ }
155
+ /**
156
+ * Calls the DateNavigationService to move to the current month.
157
+ */
158
+ currentYear() {
159
+ this._dateNavigationService.moveToCurrentMonth();
160
+ }
161
+ /**
162
+ * Applicable only to date range picker
163
+ * Compares the month passed is in between the start and end date range
164
+ */
165
+ isInRange(monthIndex) {
166
+ if (!this._dateNavigationService.isRangePicker) {
167
+ return false;
168
+ }
169
+ if (this._dateNavigationService.selectedDay && this._dateNavigationService.selectedEndDay) {
170
+ return ((this.calendarYear === this._dateNavigationService.selectedDay.year &&
171
+ monthIndex > this._dateNavigationService.selectedDay.month &&
172
+ this.calendarYear === this._dateNavigationService.selectedEndDay.year &&
173
+ monthIndex < this._dateNavigationService.selectedEndDay.month) ||
174
+ (this._dateNavigationService.selectedDay.year !== this._dateNavigationService.selectedEndDay.year &&
175
+ this.calendarYear === this._dateNavigationService.selectedDay.year &&
176
+ monthIndex > this._dateNavigationService.selectedDay.month) ||
177
+ (this._dateNavigationService.selectedDay.year !== this._dateNavigationService.selectedEndDay.year &&
178
+ this.calendarYear === this._dateNavigationService.selectedEndDay.year &&
179
+ monthIndex < this._dateNavigationService.selectedEndDay.month) ||
180
+ (this.calendarYear > this._dateNavigationService.selectedDay.year &&
181
+ this.calendarYear < this._dateNavigationService.selectedEndDay.year));
182
+ }
183
+ else if (this._dateNavigationService.selectedDay && !this._dateNavigationService.selectedEndDay) {
184
+ return ((this.calendarYear === this._dateNavigationService.selectedDay.year &&
185
+ monthIndex > this._dateNavigationService.selectedDay.month &&
186
+ monthIndex < this._dateNavigationService.hoveredMonth) ||
187
+ (this.calendarYear > this._dateNavigationService.selectedDay.year &&
188
+ monthIndex < this._dateNavigationService.hoveredMonth));
189
+ }
190
+ else {
191
+ return false;
192
+ }
193
+ }
89
194
  }
90
- ClrMonthpicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrMonthpicker, deps: [{ token: i1.ViewManagerService }, { token: i2.LocaleHelperService }, { token: i3.DateNavigationService }, { token: i4.DatepickerFocusService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
195
+ ClrMonthpicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrMonthpicker, deps: [{ token: i1.LocaleHelperService }, { token: i2.DateNavigationService }, { token: i3.DatepickerFocusService }, { token: i0.ElementRef }, { token: i4.ViewManagerService }, { token: i5.ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component });
91
196
  ClrMonthpicker.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrMonthpicker, selector: "clr-monthpicker", host: { attributes: { "role": "application" }, listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.monthpicker": "true" } }, ngImport: i0, template: `
92
- <button
93
- type="button"
94
- class="calendar-btn month"
95
- *ngFor="let month of monthNames; let monthIndex = index"
96
- (click)="changeMonth(monthIndex)"
97
- [class.is-selected]="monthIndex === calendarMonthIndex"
98
- [attr.tabindex]="getTabIndex(monthIndex)"
99
- >
100
- {{ month }}
101
- </button>
102
- `, isInline: true, dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
197
+ <div class="calendar-header in-monthpicker">
198
+ <div class="year-view-switcher">
199
+ <button
200
+ class="calendar-btn yearpicker-trigger"
201
+ type="button"
202
+ (click)="changeToYearView()"
203
+ [attr.aria-label]="yearAttrString"
204
+ [attr.title]="yearAttrString"
205
+ >
206
+ {{ calendarYear }}
207
+ </button>
208
+ </div>
209
+ <div class="calendar-switchers">
210
+ <button
211
+ class="calendar-btn switcher"
212
+ type="button"
213
+ (click)="previousYear()"
214
+ [attr.aria-label]="commonStrings.keys.datepickerPreviousMonth"
215
+ >
216
+ <cds-icon shape="angle" direction="left" [attr.title]="commonStrings.keys.datepickerPreviousMonth"></cds-icon>
217
+ </button>
218
+ <button
219
+ class="calendar-btn switcher"
220
+ type="button"
221
+ (click)="currentYear()"
222
+ [attr.aria-label]="commonStrings.keys.datepickerCurrentMonth"
223
+ >
224
+ <cds-icon shape="event" [attr.title]="commonStrings.keys.datepickerCurrentMonth"></cds-icon>
225
+ </button>
226
+ <button
227
+ class="calendar-btn switcher"
228
+ type="button"
229
+ (click)="nextYear()"
230
+ [attr.aria-label]="commonStrings.keys.datepickerNextMonth"
231
+ >
232
+ <cds-icon shape="angle" direction="right" [attr.title]="commonStrings.keys.datepickerNextMonth"></cds-icon>
233
+ </button>
234
+ </div>
235
+ </div>
236
+ <div class="months">
237
+ <button
238
+ type="button"
239
+ class="calendar-btn month"
240
+ *ngFor="let month of monthNames; let monthIndex = index"
241
+ (click)="changeMonth(monthIndex)"
242
+ [class.is-selected]="isSelected(monthIndex)"
243
+ [class.is-start-range]="getIsRangeStartMonth(monthIndex)"
244
+ [class.is-end-range]="getIsRangeEndMonth(monthIndex)"
245
+ [class.in-range]="isInRange(monthIndex)"
246
+ [attr.tabindex]="getTabIndex(monthIndex)"
247
+ [class.is-today]="calendarYear === currentCalendarYear && monthIndex === currentCalendarMonth"
248
+ (mouseenter)="onHover(monthIndex)"
249
+ >
250
+ {{ month }}
251
+ </button>
252
+ </div>
253
+ `, isInline: true, dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.CdsIconCustomTag, selector: "cds-icon" }] });
103
254
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrMonthpicker, decorators: [{
104
255
  type: Component,
105
256
  args: [{
106
257
  selector: 'clr-monthpicker',
107
258
  template: `
108
- <button
109
- type="button"
110
- class="calendar-btn month"
111
- *ngFor="let month of monthNames; let monthIndex = index"
112
- (click)="changeMonth(monthIndex)"
113
- [class.is-selected]="monthIndex === calendarMonthIndex"
114
- [attr.tabindex]="getTabIndex(monthIndex)"
115
- >
116
- {{ month }}
117
- </button>
259
+ <div class="calendar-header in-monthpicker">
260
+ <div class="year-view-switcher">
261
+ <button
262
+ class="calendar-btn yearpicker-trigger"
263
+ type="button"
264
+ (click)="changeToYearView()"
265
+ [attr.aria-label]="yearAttrString"
266
+ [attr.title]="yearAttrString"
267
+ >
268
+ {{ calendarYear }}
269
+ </button>
270
+ </div>
271
+ <div class="calendar-switchers">
272
+ <button
273
+ class="calendar-btn switcher"
274
+ type="button"
275
+ (click)="previousYear()"
276
+ [attr.aria-label]="commonStrings.keys.datepickerPreviousMonth"
277
+ >
278
+ <cds-icon shape="angle" direction="left" [attr.title]="commonStrings.keys.datepickerPreviousMonth"></cds-icon>
279
+ </button>
280
+ <button
281
+ class="calendar-btn switcher"
282
+ type="button"
283
+ (click)="currentYear()"
284
+ [attr.aria-label]="commonStrings.keys.datepickerCurrentMonth"
285
+ >
286
+ <cds-icon shape="event" [attr.title]="commonStrings.keys.datepickerCurrentMonth"></cds-icon>
287
+ </button>
288
+ <button
289
+ class="calendar-btn switcher"
290
+ type="button"
291
+ (click)="nextYear()"
292
+ [attr.aria-label]="commonStrings.keys.datepickerNextMonth"
293
+ >
294
+ <cds-icon shape="angle" direction="right" [attr.title]="commonStrings.keys.datepickerNextMonth"></cds-icon>
295
+ </button>
296
+ </div>
297
+ </div>
298
+ <div class="months">
299
+ <button
300
+ type="button"
301
+ class="calendar-btn month"
302
+ *ngFor="let month of monthNames; let monthIndex = index"
303
+ (click)="changeMonth(monthIndex)"
304
+ [class.is-selected]="isSelected(monthIndex)"
305
+ [class.is-start-range]="getIsRangeStartMonth(monthIndex)"
306
+ [class.is-end-range]="getIsRangeEndMonth(monthIndex)"
307
+ [class.in-range]="isInRange(monthIndex)"
308
+ [attr.tabindex]="getTabIndex(monthIndex)"
309
+ [class.is-today]="calendarYear === currentCalendarYear && monthIndex === currentCalendarMonth"
310
+ (mouseenter)="onHover(monthIndex)"
311
+ >
312
+ {{ month }}
313
+ </button>
314
+ </div>
118
315
  `,
119
316
  host: {
120
317
  '[class.monthpicker]': 'true',
121
318
  role: 'application',
122
319
  },
123
320
  }]
124
- }], ctorParameters: function () { return [{ type: i1.ViewManagerService }, { type: i2.LocaleHelperService }, { type: i3.DateNavigationService }, { type: i4.DatepickerFocusService }, { type: i0.ElementRef }]; }, propDecorators: { onKeyDown: [{
321
+ }], ctorParameters: function () { return [{ type: i1.LocaleHelperService }, { type: i2.DateNavigationService }, { type: i3.DatepickerFocusService }, { type: i0.ElementRef }, { type: i4.ViewManagerService }, { type: i5.ClrCommonStringsService }]; }, propDecorators: { onKeyDown: [{
125
322
  type: HostListener,
126
323
  args: ['keydown', ['$event']]
127
324
  }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhwaWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9mb3Jtcy9kYXRlcGlja2VyL21vbnRocGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5GLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7QUF5QmhFLE1BQU0sT0FBTyxjQUFjO0lBTXpCLFlBQ1UsbUJBQXVDLEVBQ3ZDLG9CQUF5QyxFQUN6QyxzQkFBNkMsRUFDN0MsdUJBQStDLEVBQy9DLE1BQStCO1FBSi9CLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDL0MsV0FBTSxHQUFOLE1BQU0sQ0FBeUI7UUFFdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFFSCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsZ0VBQWdFO1FBQ2hFLDZEQUE2RDtRQUM3RCxzRUFBc0U7UUFDdEUsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFBRTtnQkFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxFQUFFO2dCQUNqRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyRDtpQkFBTSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFBRTtnQkFDaEUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDckQ7U0FDRjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsVUFBa0I7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLFVBQWtCO1FBQzVCLE9BQU8sVUFBVSxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDOzsyR0FsRlUsY0FBYzsrRkFBZCxjQUFjLG9NQWpCZjs7Ozs7Ozs7Ozs7R0FXVDsyRkFNVSxjQUFjO2tCQW5CMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7O0dBV1Q7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLHFCQUFxQixFQUFFLE1BQU07d0JBQzdCLElBQUksRUFBRSxhQUFhO3FCQUNwQjtpQkFDRjs2T0EyQ0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCBCcm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgS2V5cyB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW1zL2tleXMuZW51bSc7XG5pbXBvcnQgeyBub3JtYWxpemVLZXkgfSBmcm9tICcuLi8uLi91dGlscy9mb2N1cy9rZXktZm9jdXMvdXRpbCc7XG5pbXBvcnQgeyBEYXRlTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9kYXRlLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlcGlja2VyRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZXBpY2tlci1mb2N1cy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9sb2NhbGUtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlld01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvdmlldy1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItbW9udGhwaWNrZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJjYWxlbmRhci1idG4gbW9udGhcIlxuICAgICAgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoTmFtZXM7IGxldCBtb250aEluZGV4ID0gaW5kZXhcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vbnRoKG1vbnRoSW5kZXgpXCJcbiAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJtb250aEluZGV4ID09PSBjYWxlbmRhck1vbnRoSW5kZXhcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZ2V0VGFiSW5kZXgobW9udGhJbmRleClcIlxuICAgID5cbiAgICAgIHt7IG1vbnRoIH19XG4gICAgPC9idXR0b24+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm1vbnRocGlja2VyXSc6ICd0cnVlJyxcbiAgICByb2xlOiAnYXBwbGljYXRpb24nLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBDbHJNb250aHBpY2tlciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAvKipcbiAgICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZm9jdXNlZCBtb250aC5cbiAgICovXG4gIHByaXZhdGUgX2ZvY3VzZWRNb250aEluZGV4OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfdmlld01hbmFnZXJTZXJ2aWNlOiBWaWV3TWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbG9jYWxlSGVscGVyU2VydmljZTogTG9jYWxlSGVscGVyU2VydmljZSxcbiAgICBwcml2YXRlIF9kYXRlTmF2aWdhdGlvblNlcnZpY2U6IERhdGVOYXZpZ2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIF9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlOiBEYXRlcGlja2VyRm9jdXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2VsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICB0aGlzLl9mb2N1c2VkTW9udGhJbmRleCA9IHRoaXMuY2FsZW5kYXJNb250aEluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1vbnRocyBhcnJheSB3aGljaCBpcyB1c2VkIHRvIHJlbmRlcmVkIHRoZSBtb250aHBpY2tlciB2aWV3LlxuICAgKiBNb250aHMgYXJlIGluIHRoZSBUcmFuc2xhdGlvbldpZHRoLldpZGUgZm9ybWF0LlxuICAgKi9cbiAgZ2V0IG1vbnRoTmFtZXMoKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNXaWRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1vbnRoIHZhbHVlIG9mIHRoZSBDYWxlbmRhci5cbiAgICovXG4gIGdldCBjYWxlbmRhck1vbnRoSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgb24gdGhlIGN1cnJlbnQgY2FsZW5kYXIgbW9udGggd2hlbiB0aGUgVmlldyBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZik7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgS2V5Ym9hcmQgYXJyb3cgbmF2aWdhdGlvbiBmb3IgdGhlIG1vbnRocGlja2VyLlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIE5PVEU6IERpZG4ndCBtb3ZlIHRoaXMgdG8gdGhlIGRhdGUgbmF2aWdhdGlvbiBzZXJ2aWNlIGJlY2F1c2VcbiAgICAvLyB0aGUgbG9naWMgaXMgZmFpcmx5IHNpbXBsZSBhbmQgaXQgZGlkbid0IG1ha2Ugc2Vuc2UgZm9yIG1lXG4gICAgLy8gdG8gY3JlYXRlIGV4dHJhIG9ic2VydmFibGVzIGp1c3QgdG8gbW92ZSB0aGlzIGxvZ2ljIHRvIHRoZSBzZXJ2aWNlLlxuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3Qga2V5ID0gbm9ybWFsaXplS2V5KGV2ZW50LmtleSk7XG4gICAgICBpZiAoa2V5ID09PSBLZXlzLkFycm93VXAgJiYgdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXggPiAwKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS07XG4gICAgICAgIHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBLZXlzLkFycm93RG93biAmJiB0aGlzLl9mb2N1c2VkTW9udGhJbmRleCA8IDExKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4Kys7XG4gICAgICAgIHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBLZXlzLkFycm93UmlnaHQgJiYgdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXggPCA2KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4ID0gdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXggKyA2O1xuICAgICAgICB0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZik7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5BcnJvd0xlZnQgJiYgdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXggPiA1KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4ID0gdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXggLSA2O1xuICAgICAgICB0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIHRoZSBEYXRlTmF2aWdhdGlvblNlcnZpY2UgdG8gdXBkYXRlIHRoZSBtb250aCB2YWx1ZSBvZiB0aGUgY2FsZW5kYXIuXG4gICAqIEFsc28gY2hhbmdlcyB0aGUgdmlldyB0byB0aGUgZGF5cGlja2VyLlxuICAgKi9cbiAgY2hhbmdlTW9udGgobW9udGhJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKG1vbnRoSW5kZXgpO1xuICAgIHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGUgbW9udGggcGFzc2VkIHRvIHRoZSBmb2N1c2VkIG1vbnRoIGFuZCByZXR1cm5zIHRoZSB0YWIgaW5kZXguXG4gICAqL1xuICBnZXRUYWJJbmRleChtb250aEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBtb250aEluZGV4ID09PSB0aGlzLl9mb2N1c2VkTW9udGhJbmRleCA/IDAgOiAtMTtcbiAgfVxufVxuIl19
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGhwaWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9mb3Jtcy9kYXRlcGlja2VyL21vbnRocGlja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25GLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7OztBQXNFaEUsTUFBTSxPQUFPLGNBQWM7SUFNekIsWUFDVSxvQkFBeUMsRUFDekMsc0JBQTZDLEVBQzdDLHVCQUErQyxFQUMvQyxNQUFrQixFQUNsQixtQkFBdUMsRUFDeEMsYUFBc0M7UUFMckMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDL0MsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNsQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3hDLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUU3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3BELENBQUM7SUFDRDs7O09BR0c7SUFDSCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNwRCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxJQUFJLGtCQUFrQjtRQUNwQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMs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QzNCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURUO29CQUNELElBQUksRUFBRTt3QkFDSixxQkFBcUIsRUFBRSxNQUFNO3dCQUM3QixJQUFJLEVBQUUsYUFBYTtxQkFDcEI7aUJBQ0Y7bVJBNkZDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENsckNvbW1vblN0cmluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5cyB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW1zL2tleXMuZW51bSc7XG5pbXBvcnQgeyBub3JtYWxpemVLZXkgfSBmcm9tICcuLi8uLi91dGlscy9mb2N1cy9rZXktZm9jdXMvdXRpbCc7XG5pbXBvcnQgeyBEYXRlTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9kYXRlLW5hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlcGlja2VyRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZXBpY2tlci1mb2N1cy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9sb2NhbGUtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlld01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvdmlldy1tYW5hZ2VyLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2xyLW1vbnRocGlja2VyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZGVyIGluLW1vbnRocGlja2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwieWVhci12aWV3LXN3aXRjaGVyXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImNhbGVuZGFyLWJ0biB5ZWFycGlja2VyLXRyaWdnZXJcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VUb1llYXJWaWV3KClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwieWVhckF0dHJTdHJpbmdcIlxuICAgICAgICAgIFthdHRyLnRpdGxlXT1cInllYXJBdHRyU3RyaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGNhbGVuZGFyWWVhciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLXN3aXRjaGVyc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1idG4gc3dpdGNoZXJcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJwcmV2aW91c1llYXIoKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNkcy1pY29uIHNoYXBlPVwiYW5nbGVcIiBkaXJlY3Rpb249XCJsZWZ0XCIgW2F0dHIudGl0bGVdPVwiY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoXCI+PC9jZHMtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImNhbGVuZGFyLWJ0biBzd2l0Y2hlclwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImN1cnJlbnRZZWFyKClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNkcy1pY29uIHNoYXBlPVwiZXZlbnRcIiBbYXR0ci50aXRsZV09XCJjb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aFwiPjwvY2RzLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1idG4gc3dpdGNoZXJcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJuZXh0WWVhcigpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjZHMtaWNvbiBzaGFwZT1cImFuZ2xlXCIgZGlyZWN0aW9uPVwicmlnaHRcIiBbYXR0ci50aXRsZV09XCJjb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aFwiPjwvY2RzLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1vbnRoc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1idG4gbW9udGhcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgbW9udGggb2YgbW9udGhOYW1lczsgbGV0IG1vbnRoSW5kZXggPSBpbmRleFwiXG4gICAgICAgIChjbGljayk9XCJjaGFuZ2VNb250aChtb250aEluZGV4KVwiXG4gICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJpc1NlbGVjdGVkKG1vbnRoSW5kZXgpXCJcbiAgICAgICAgW2NsYXNzLmlzLXN0YXJ0LXJhbmdlXT1cImdldElzUmFuZ2VTdGFydE1vbnRoKG1vbnRoSW5kZXgpXCJcbiAgICAgICAgW2NsYXNzLmlzLWVuZC1yYW5nZV09XCJnZXRJc1JhbmdlRW5kTW9udGgobW9udGhJbmRleClcIlxuICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiaXNJblJhbmdlKG1vbnRoSW5kZXgpXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZ2V0VGFiSW5kZXgobW9udGhJbmRleClcIlxuICAgICAgICBbY2xhc3MuaXMtdG9kYXldPVwiY2FsZW5kYXJZZWFyID09PSBjdXJyZW50Q2FsZW5kYXJZZWFyICYmIG1vbnRoSW5kZXggPT09IGN1cnJlbnRDYWxlbmRhck1vbnRoXCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Ib3Zlcihtb250aEluZGV4KVwiXG4gICAgICA+XG4gICAgICAgIHt7IG1vbnRoIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MubW9udGhwaWNrZXJdJzogJ3RydWUnLFxuICAgIHJvbGU6ICdhcHBsaWNhdGlvbicsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIENsck1vbnRocGlja2VyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBmb2N1c2VkIG1vbnRoLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNlZE1vbnRoSW5kZXg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9sb2NhbGVIZWxwZXJTZXJ2aWNlOiBMb2NhbGVIZWxwZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2RhdGVOYXZpZ2F0aW9uU2VydmljZTogRGF0ZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U6IERhdGVwaWNrZXJGb2N1c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfdmlld01hbmFnZXJTZXJ2aWNlOiBWaWV3TWFuYWdlclNlcnZpY2UsXG4gICAgcHVibGljIGNvbW1vblN0cmluZ3M6IENsckNvbW1vblN0cmluZ3NTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4ID0gdGhpcy5jYWxlbmRhck1vbnRoSW5kZXg7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1vbnRocyBhcnJheSB3aGljaCBpcyB1c2VkIHRvIHJlbmRlcmVkIHRoZSBtb250aHBpY2tlciB2aWV3LlxuICAgKiBNb250aHMgYXJlIGluIHRoZSBUcmFuc2xhdGlvbldpZHRoLldpZGUgZm9ybWF0LlxuICAgKi9cbiAgZ2V0IG1vbnRoTmFtZXMoKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNXaWRlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtb250aCB2YWx1ZSBvZiB0aGUgQ2FsZW5kYXIuXG4gICAqL1xuICBnZXQgY2FsZW5kYXJNb250aEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci5tb250aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB5ZWFyIHdoaWNoIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBvbi5cbiAgICovXG4gIGdldCBjYWxlbmRhckVuZE1vbnRoSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aDtcbiAgfVxuXG4gIGdldCB5ZWFyQXR0clN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LCB7XG4gICAgICBDQUxFTkRBUl9ZRUFSOiB0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHllYXIgdmFsdWUgb2YgdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgZ2V0IGNhbGVuZGFyWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcjtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q2FsZW5kYXJZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q2FsZW5kYXJNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldE1vbnRoKCk7XG4gIH1cblxuICBnZXRJc1JhbmdlU3RhcnRNb250aChtb250aEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIgJiZcbiAgICAgIHRoaXMuY2FsZW5kYXJZZWFyID09PSB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXIgJiZcbiAgICAgIG1vbnRoSW5kZXggPT09IHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ubW9udGhcbiAgICApO1xuICB9XG5cbiAgZ2V0SXNSYW5nZUVuZE1vbnRoKG1vbnRoSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciAmJlxuICAgICAgdGhpcy5jYWxlbmRhclllYXIgPT09IHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhciAmJlxuICAgICAgbW9udGhJbmRleCA9PT0gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlIFZpZXdNYW5hZ2VyU2VydmljZSB0byBjaGFuZ2UgdG8gdGhlIHllYXJwaWNrZXIgdmlldy5cbiAgICovXG4gIGNoYW5nZVRvWWVhclZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIG9uIHRoZSBjdXJyZW50IGNhbGVuZGFyIG1vbnRoIHdoZW4gdGhlIFZpZXcgaXMgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIEtleWJvYXJkIGFycm93IG5hdmlnYXRpb24gZm9yIHRoZSBtb250aHBpY2tlci5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyBOT1RFOiBEaWRuJ3QgbW92ZSB0aGlzIHRvIHRoZSBkYXRlIG5hdmlnYXRpb24gc2VydmljZSBiZWNhdXNlXG4gICAgLy8gdGhlIGxvZ2ljIGlzIGZhaXJseSBzaW1wbGUgYW5kIGl0IGRpZG4ndCBtYWtlIHNlbnNlIGZvciBtZVxuICAgIC8vIHRvIGNyZWF0ZSBleHRyYSBvYnNlcnZhYmxlcyBqdXN0IHRvIG1vdmUgdGhpcyBsb2dpYyB0byB0aGUgc2VydmljZS5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGtleSA9IG5vcm1hbGl6ZUtleShldmVudC5rZXkpO1xuICAgICAgaWYgKGtleSA9PT0gS2V5cy5BcnJvd1VwICYmIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4ID4gMSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9mb2N1c2VkTW9udGhJbmRleCAtPSAyO1xuICAgICAgICB0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZik7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5BcnJvd0Rvd24gJiYgdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXggPCAxMCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9mb2N1c2VkTW9udGhJbmRleCArPSAyO1xuICAgICAgICB0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZik7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gS2V5cy5BcnJvd1JpZ2h0ICYmIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4IDwgMTEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrKztcbiAgICAgICAgdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEtleXMuQXJyb3dMZWZ0ICYmIHRoaXMuX2ZvY3VzZWRNb250aEluZGV4ID4gMCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9mb2N1c2VkTW9udGhJbmRleC0tO1xuICAgICAgICB0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChtb250aEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciA9PT0gdGhpcy5jYWxlbmRhclllYXIgJiZcbiAgICAgICAgbW9udGhJbmRleCA9PT0gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aCkgfHxcbiAgICAgICh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXIgPT09IHRoaXMuY2FsZW5kYXJZZWFyICYmXG4gICAgICAgIG1vbnRoSW5kZXggPT09IHRoaXMuY2FsZW5kYXJFbmRNb250aEluZGV4KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgdGhlIERhdGVOYXZpZ2F0aW9uU2VydmljZSB0byB1cGRhdGUgdGhlIGhvdmVyZWQgbW9udGggdmFsdWUgb2YgdGhlIGNhbGVuZGFyXG4gICAqL1xuICBvbkhvdmVyKG1vbnRoSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkTW9udGggPSBtb250aEluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIHRoZSBEYXRlTmF2aWdhdGlvblNlcnZpY2UgdG8gdXBkYXRlIHRoZSBtb250aCB2YWx1ZSBvZiB0aGUgY2FsZW5kYXIuXG4gICAqIEFsc28gY2hhbmdlcyB0aGUgdmlldyB0byB0aGUgZGF5cGlja2VyLlxuICAgKi9cbiAgY2hhbmdlTW9udGgobW9udGhJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKG1vbnRoSW5kZXgpO1xuICAgIHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlcyB0aGUgbW9udGggcGFzc2VkIHRvIHRoZSBmb2N1c2VkIG1vbnRoIGFuZCByZXR1cm5zIHRoZSB0YWIgaW5kZXguXG4gICAqL1xuICBnZXRUYWJJbmRleChtb250aEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBtb250aEluZGV4ID09PSB0aGlzLl9mb2N1c2VkTW9udGhJbmRleCA/IDAgOiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgRGF0ZU5hdmlnYXRpb25TZXJ2aWNlIHRvIG1vdmUgdG8gdGhlIG5leHQgbW9udGguXG4gICAqL1xuICBuZXh0WWVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dFllYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgRGF0ZU5hdmlnYXRpb25TZXJ2aWNlIHRvIG1vdmUgdG8gdGhlIHByZXZpb3VzIG1vbnRoLlxuICAgKi9cbiAgcHJldmlvdXNZZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c1llYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgRGF0ZU5hdmlnYXRpb25TZXJ2aWNlIHRvIG1vdmUgdG8gdGhlIGN1cnJlbnQgbW9udGguXG4gICAqL1xuICBjdXJyZW50WWVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvQ3VycmVudE1vbnRoKCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGljYWJsZSBvbmx5IHRvIGRhdGUgcmFuZ2UgcGlja2VyXG4gICAqIENvbXBhcmVzIHRoZSBtb250aCBwYXNzZWQgaXMgaW4gYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlIHJhbmdlXG4gICAqL1xuICBpc0luUmFuZ2UobW9udGhJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5ICYmIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY2FsZW5kYXJZZWFyID09PSB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciAmJlxuICAgICAgICAgIG1vbnRoSW5kZXggPiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGggJiZcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyWWVhciA9PT0gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXIgJiZcbiAgICAgICAgICBtb250aEluZGV4IDwgdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRoKSB8fFxuICAgICAgICAodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIgIT09IHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyICYmXG4gICAgICAgICAgdGhpcy5jYWxlbmRhclllYXIgPT09IHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyICYmXG4gICAgICAgICAgbW9udGhJbmRleCA+IHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCkgfHxcbiAgICAgICAgKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyICE9PSB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciAmJlxuICAgICAgICAgIHRoaXMuY2FsZW5kYXJZZWFyID09PSB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciAmJlxuICAgICAgICAgIG1vbnRoSW5kZXggPCB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGgpIHx8XG4gICAgICAgICh0aGlzLmNhbGVuZGFyWWVhciA+IHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyICYmXG4gICAgICAgICAgdGhpcy5jYWxlbmRhclllYXIgPCB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhcilcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkgJiYgIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY2FsZW5kYXJZZWFyID09PSB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciAmJlxuICAgICAgICAgIG1vbnRoSW5kZXggPiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGggJiZcbiAgICAgICAgICBtb250aEluZGV4IDwgdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aCkgfHxcbiAgICAgICAgKHRoaXMuY2FsZW5kYXJZZWFyID4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIgJiZcbiAgICAgICAgICBtb250aEluZGV4IDwgdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -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.
@@ -34,4 +34,4 @@ DateFormControlService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0
34
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DateFormControlService, decorators: [{
35
35
  type: Injectable
36
36
  }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2Zvcm1zL2RhdGVwaWNrZXIvcHJvdmlkZXJzL2RhdGUtZm9ybS1jb250cm9sLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFJVSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBc0I1QztJQXBCQyxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsV0FBVyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQzs7bUhBekJVLHNCQUFzQjt1SEFBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGVGb3JtQ29udHJvbFNlcnZpY2Uge1xuICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIF90b3VjaGVkQ2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfZGlydHlDaGFuZ2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGdldCB0b3VjaGVkQ2hhbmdlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl90b3VjaGVkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGRpcnR5Q2hhbmdlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kaXJ0eUNoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIG1hcmtBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fdG91Y2hlZENoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBtYXJrQXNEaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXJ0eUNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICAvLyBmcmllbmRseSB3cmFwcGVyXG4gIHNldERpc2FibGVkKHN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHN0YXRlO1xuICB9XG59XG4iXX0=
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtLWNvbnRyb2wuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL2Zvcm1zL2RhdGVwaWNrZXIvcHJvdmlkZXJzL2RhdGUtZm9ybS1jb250cm9sLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxzQkFBc0I7SUFEbkM7UUFJVSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0tBc0I1QztJQXBCQyxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7SUFDbkIsV0FBVyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQzs7bUhBekJVLHNCQUFzQjt1SEFBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGVGb3JtQ29udHJvbFNlcnZpY2Uge1xuICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIF90b3VjaGVkQ2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfZGlydHlDaGFuZ2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGdldCB0b3VjaGVkQ2hhbmdlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl90b3VjaGVkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGRpcnR5Q2hhbmdlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kaXJ0eUNoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIG1hcmtBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fdG91Y2hlZENoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBtYXJrQXNEaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXJ0eUNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICAvLyBmcmllbmRseSB3cmFwcGVyXG4gIHNldERpc2FibGVkKHN0YXRlOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHN0YXRlO1xuICB9XG59XG4iXX0=
@@ -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.
@@ -53,6 +53,13 @@ export class DateIOService {
53
53
  this.disabledDates.maxDate = new DayModel(year, month - 1, day);
54
54
  }
55
55
  }
56
+ setRangeOptions(rangeOptions) {
57
+ const validatedRangeOption = this.validateDateRangeOptions(rangeOptions);
58
+ this.dateRangeOptions = validatedRangeOption || [];
59
+ }
60
+ getRangeOptions() {
61
+ return this.dateRangeOptions;
62
+ }
56
63
  toLocaleDisplayFormatString(date) {
57
64
  if (date) {
58
65
  if (isNaN(date.getTime())) {
@@ -96,6 +103,18 @@ export class DateIOService {
96
103
  return this.validateAndGetDate(firstPart, secondPart, thirdPart);
97
104
  }
98
105
  }
106
+ validateDateRangeOptions(rangeOptions) {
107
+ const validOptions = [];
108
+ rangeOptions?.forEach((rangeOption) => {
109
+ if (rangeOption?.value?.length !== 2 ||
110
+ Object.prototype.toString.call(rangeOption?.value[0]) !== '[object Date]' ||
111
+ Object.prototype.toString.call(rangeOption?.value[1]) !== '[object Date]') {
112
+ return;
113
+ }
114
+ validOptions.push(rangeOption);
115
+ });
116
+ return validOptions;
117
+ }
99
118
  initializeLocaleDisplayFormat() {
100
119
  const format = this.cldrLocaleDateFormat.toLocaleLowerCase();
101
120
  if (LITTLE_ENDIAN_REGEX.test(format)) {
@@ -173,4 +192,4 @@ DateIOService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", versio
173
192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: DateIOService, decorators: [{
174
193
  type: Injectable
175
194
  }], ctorParameters: function () { return [{ type: i1.LocaleHelperService }]; } });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvZGF0ZXBpY2tlci9wcm92aWRlcnMvZGF0ZS1pby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUNMLFVBQVUsRUFDVixxQkFBcUIsRUFDckIsZUFBZSxFQUVmLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUl0RixNQUFNLE9BQU8sYUFBYTtJQWN4QixZQUFZLG1CQUF3QztRQWJwRCxrQkFBYSxHQUFjO1lBQ3pCLHVGQUF1RjtZQUN2RixzRkFBc0Y7WUFDdEYsK0ZBQStGO1lBQy9GLE9BQU8sRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLHlCQUFvQixHQUFXLHFCQUFxQixDQUFDO1FBRTdDLHdCQUFtQixHQUEyQixhQUFhLENBQUM7UUFDNUQsZUFBVSxHQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUdoRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDdkMsQ0FBQztJ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cm9hZGNvbS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoZSB0ZXJtIFwiQnJvYWRjb21cIiByZWZlcnMgdG8gQnJvYWRjb20gSW5jLiBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcy5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEYXRlUmFuZ2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGUtcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IERheU1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvZGF5Lm1vZGVsJztcbmltcG9ydCB7XG4gIEJJR19FTkRJQU4sXG4gIERFRkFVTFRfTE9DQUxFX0ZPUk1BVCxcbiAgREVMSU1JVEVSX1JFR0VYLFxuICBJbnB1dERhdGVEaXNwbGF5Rm9ybWF0LFxuICBMSVRUTEVfRU5ESUFOLFxuICBMSVRUTEVfRU5ESUFOX1JFR0VYLFxuICBNSURETEVfRU5ESUFOLFxuICBNSURETEVfRU5ESUFOX1JFR0VYLFxuICBSVExfUkVHRVgsXG4gIFVTRVJfSU5QVVRfUkVHRVgsXG59IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXROdW1iZXJPZkRheXNJblRoZU1vbnRoLCBwYXJzZVRvRm91ckRpZ2l0WWVhciB9IGZyb20gJy4uL3V0aWxzL2RhdGUtdXRpbHMnO1xuaW1wb3J0IHsgTG9jYWxlSGVscGVyU2VydmljZSB9IGZyb20gJy4vbG9jYWxlLWhlbHBlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGVJT1NlcnZpY2Uge1xuICBkaXNhYmxlZERhdGVzOiBEYXRlUmFuZ2UgPSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCByYW5nZS4gSXQgYXBwcm94aW1hdGVzIHRoZSBiZWdpbm5pbmcgb2YgdGltZSB0byB0aGUgZW5kIG9mIHRpbWUuXG4gICAgLy8gVW5sZXNzIGEgbWluRGF0ZSBvciBtYXhEYXRlIGlzIHNldCB3aXRoIHRoZSBuYXRpdmUgSFRNTDUgYXBpIHRoZSByYW5nZSBpcyBhbGwgZGF0ZXNcbiAgICAvLyBUT0RPOiB0dXJuIHRoaXMgaW50byBhbiBBcnJheSBvZiBtaW4vbWF4IHJhbmdlcyB0aGF0IGFsbG93IGNvbmZpZ3VyYXRpb24gb2YgbXVsdGlwbGUgcmFuZ2VzLlxuICAgIG1pbkRhdGU6IG5ldyBEYXlNb2RlbCgwLCAwLCAxKSxcbiAgICBtYXhEYXRlOiBuZXcgRGF5TW9kZWwoOTk5OSwgMTEsIDMxKSxcbiAgfTtcblxuICBjbGRyTG9jYWxlRGF0ZUZvcm1hdDogc3RyaW5nID0gREVGQVVMVF9MT0NBTEVfRk9STUFUO1xuXG4gIHByaXZhdGUgbG9jYWxlRGlzcGxheUZvcm1hdDogSW5wdXREYXRlRGlzcGxheUZvcm1hdCA9IExJVFRMRV9FTkRJQU47XG4gIHByaXZhdGUgZGVsaW1pdGVyczogW3N0cmluZywgc3RyaW5nXSA9IFsnLycsICcvJ107XG5cbiAgY29uc3RydWN0b3IobG9jYWxlSGVscGVyU2VydmljZTogTG9jYWxlSGVscGVyU2VydmljZSkge1xuICAgIHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQgPSBsb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURhdGVGb3JtYXQ7XG4gICAgdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZvcm1hdDogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtcbiAgICByZXR1cm4gZm9ybWF0WzBdICsgdGhpcy5kZWxpbWl0ZXJzWzBdICsgZm9ybWF0WzFdICsgdGhpcy5kZWxpbWl0ZXJzWzFdICsgZm9ybWF0WzJdO1xuICB9XG5cbiAgc2V0TWluRGF0ZShkYXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBOT1RFOiBJJ20gZXhwZWN0aW5nIGNvbnN1bWVycyB0byBwYXNzIG9uZSBvZiBmb3VyIHRoaW5ncyBoZXJlOlxuICAgIC8vICAgICAgIEEgcHJvcGVyIGRhdGUgc3RyaW5nKDIwMTktMTEtMTEpLCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHkgc3RyaW5nICgnJylcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIC8vIGF0dHJpYnV0ZSBiaW5kaW5nIHdhcyByZW1vdmVkLCByZXNldCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGltZVxuICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGUgPSBuZXcgRGF5TW9kZWwoMCwgMCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGRhdGUuc3BsaXQoJy0nKS5tYXAobiA9PiBwYXJzZUludChuLCAxMCkpO1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGUgPSBuZXcgRGF5TW9kZWwoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICAgIH1cbiAgfVxuXG4gIHNldE1heERhdGUoZGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gTk9URTogSSdtIGV4cGVjdGluZyBjb25zdW1lcnMgdG8gcGFzcyBvbmUgb2YgZm91ciB0aGluZ3MgaGVyZTpcbiAgICAvLyAgICAgICBBIHByb3BlciBkYXRlIHN0cmluZygyMDE5LTExLTExKSwgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5IHN0cmluZyAoJycpXG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICAvLyBhdHRyaWJ1dGUgYmluZGluZyB3YXMgcmVtb3ZlZCwgcmVzZXQgZm9yd2FyZCB0byB0aGUgZW5kIG9mIHRpbWVcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlID0gbmV3IERheU1vZGVsKDk5OTksIDExLCAzMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGRhdGUuc3BsaXQoJy0nKS5tYXAobiA9PiBwYXJzZUludChuLCAxMCkpO1xuICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGUgPSBuZXcgRGF5TW9kZWwoeWVhciwgbW9udGggLSAxLCBkYXkpO1xuICAgIH1cbiAgfVxuXG4gIHRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRlTm86IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgY29uc3QgbW9udGhObzogbnVtYmVyID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICAgIGNvbnN0IGRhdGVTdHI6IHN0cmluZyA9IGRhdGVObyA+IDkgPyBkYXRlTm8udG9TdHJpbmcoKSA6ICcwJyArIGRhdGVObztcbiAgICAgIGNvbnN0IG1vbnRoU3RyOiBzdHJpbmcgPSBtb250aE5vID4gOSA/IG1vbnRoTm8udG9TdHJpbmcoKSA6ICcwJyArIG1vbnRoTm87XG4gICAgICBpZiAodGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0ID09PSBMSVRUTEVfRU5ESUFOKSB7XG4gICAgICAgIHJldHVybiBkYXRlU3RyICsgdGhpcy5kZWxpbWl0ZXJzWzBdICsgbW9udGhTdHIgKyB0aGlzLmRlbGltaXRlcnNbMV0gKyBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdCA9PT0gTUlERExFX0VORElBTikge1xuICAgICAgICByZXR1cm4gbW9udGhTdHIgKyB0aGlzLmRlbGltaXRlcnNbMF0gKyBkYXRlU3RyICsgdGhpcy5kZWxpbWl0ZXJzWzFdICsgZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIHRoaXMuZGVsaW1pdGVyc1swXSArIG1vbnRoU3RyICsgdGhpcy5kZWxpbWl0ZXJzWzFdICsgZGF0ZVN0cjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogRGF0ZSB7XG4gICAgaWYgKCFkYXRlIHx8IHR5cGVvZiBkYXRlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGRhdGVQYXJ0czogc3RyaW5nW10gPSBkYXRlLm1hdGNoKFVTRVJfSU5QVVRfUkVHRVgpO1xuICAgIGlmICghZGF0ZVBhcnRzIHx8IGRhdGVQYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBbZmlyc3RQYXJ0LCBzZWNvbmRQYXJ0LCB0aGlyZFBhcnRdID0gZGF0ZVBhcnRzO1xuICAgIGlmICh0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPT09IExJVFRMRV9FTkRJQU4pIHtcbiAgICAgIC8vIHNlY29uZFBhcnQgaXMgbW9udGggJiYgZmlyc3RQYXJ0IGlzIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh0aGlyZFBhcnQsIHNlY29uZFBhcnQsIGZpcnN0UGFydCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPT09IE1JRERMRV9FTkRJQU4pIHtcbiAgICAgIC8vIGZpcnN0UGFydCBpcyBtb250aCAmJiBzZWNvbmRQYXJ0IGlzIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh0aGlyZFBhcnQsIGZpcnN0UGFydCwgc2Vjb25kUGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNlY29uZFBhcnQgaXMgbW9udGggJiYgdGhpcmRQYXJ0IGlzIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShmaXJzdFBhcnQsIHNlY29uZFBhcnQsIHRoaXJkUGFydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXQ6IHN0cmluZyA9IHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICBpZiAoTElUVExFX0VORElBTl9SRUdFWC50ZXN0KGZvcm1hdCkpIHtcbiAgICAgIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdCA9IExJVFRMRV9FTkRJQU47XG4gICAgfSBlbHNlIGlmIChNSURETEVfRU5ESUFOX1JFR0VYLnRlc3QoZm9ybWF0KSkge1xuICAgICAgdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0ID0gTUlERExFX0VORElBTjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIGlzIHNldCB0byBCSUctRU5ESUFOIEZPUk1BVFxuICAgICAgdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0ID0gQklHX0VORElBTjtcbiAgICB9XG4gICAgdGhpcy5leHRyYWN0RGVsaW1pdGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RGVsaW1pdGVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCkge1xuICAgICAgLy8gU2FuaXRpemUgRGF0ZSBGb3JtYXQuIFJlbW92ZSBSVEwgY2hhcmFjdGVycy5cbiAgICAgIC8vIEZJWE1FOiBXaGVuIHdlIHN1cHBvcnQgUlRMLCByZW1vdmUgdGhpcyBhbmQgaGFuZGxlIGl0IGNvcnJlY3RseS5cbiAgICAgIGNvbnN0IGxvY2FsZUZvcm1hdDogc3RyaW5nID0gdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNlKFJUTF9SRUdFWCwgJycpO1xuICAgICAgY29uc3QgZGVsaW1pdGVyczogc3RyaW5nW10gPSBsb2NhbGVGb3JtYXQuc3BsaXQoREVMSU1JVEVSX1JFR0VYKTtcblxuICAgICAgLy8gTk9URTogVGhlIHNwbGl0IGZyb20gdGhlIENMRFIgZGF0ZSBmb3JtYXQgc2hvdWxkIGFsd2F5cyByZXN1bHRcbiAgICAgIC8vIGluIGFuIGFyYXJ5IHdpdGggNCBlbGVtZW50cy4gVGhlIDFzdCBhbmQgdGhlIDJuZCB2YWx1ZXMgYXJlIHRoZSBkZWxpbWl0ZXJzXG4gICAgICAvLyB3ZSB3aWxsIHVzZSBpbiBvcmRlci5cbiAgICAgIC8vIEVnOiBcImRkL01NL3lcIi5zcGxpdCgvZCt8bSt8eSsvaSkgcmVzdWx0cyBpbiBbXCJcIiwgXCIvXCIsIFwiL1wiLCBcIlwiXVxuICAgICAgaWYgKGRlbGltaXRlcnMgJiYgZGVsaW1pdGVycy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgdGhpcy5kZWxpbWl0ZXJzID0gW2RlbGltaXRlcnNbMV0sIGRlbGltaXRlcnNbMl1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICcsIGRlbGltaXRlcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIG1vbnRoIGVudGVyZWQgYnkgdGhlIHVzZXIgaXMgdmFsaWQgb3Igbm90LlxuICAgKiBOb3RlOiBNb250aCBpcyAwIGJhc2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkTW9udGgobW9udGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBtb250aCA+IC0xICYmIG1vbnRoIDwgMTI7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBkYXRlIGlzIHZhbGlkIGRlcGVuZGluZyBvbiB0aGUgeWVhciBhbmQgbW9udGggcHJvdmlkZWQuXG4gICAqL1xuICBwcml2YXRlIGlzVmFsaWREYXRlKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF0ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUgPiAwICYmIGRhdGUgPD0gZ2V0TnVtYmVyT2ZEYXlzSW5UaGVNb250aCh5ZWFyLCBtb250aCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGFuZCByZXR1cm5zIHRoZSBkYXRlLlxuICAgKiBJZiB0aGUgcGFyYW1ldGVycyBhcmUgbm90XG4gICAqIHZhbGlkIHRoZW4gcmV0dXJuIG51bGwuXG4gICAqIE5PVEU6IChNb250aCBoZXJlIGlzIDEgYmFzZWQgc2luY2UgdGhlIHVzZXIgaGFzIHByb3ZpZGVkIHRoYXQgYXMgYW4gaW5wdXQpXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQW5kR2V0RGF0ZSh5ZWFyOiBzdHJpbmcsIG1vbnRoOiBzdHJpbmcsIGRhdGU6IHN0cmluZyk6IERhdGUge1xuICAgIC8vIEkgZG9uJ3Qga25vdyB3aGF0cyB3cm9uZyB3aXRoIHRoZSBUUyBjb21waWxlci4gSXQgdGhyb3dzIGFuIGVycm9yIGlmIEkgd3JpdGVcbiAgICAvLyB0aGUgYmVsb3cgaWYgc3RhdGVtZW50LiBUaGUgZXJyb3IgaXM6XG4gICAgLy8gT3BlcmF0b3IgJyE9PScgY2Fubm90IGJlIGFwcGxpZWQgdG8gdHlwZXMgJzInIGFuZCAnNCdcbiAgICAvLyBNb3JlIGluZm8gaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xMjc5NCNpc3N1ZWNvbW1lbnQtMjcwMzQyOTM2XG4gICAgLypcbiAgICAgICAgaWYgKHllYXIubGVuZ3RoICE9PSAyIHx8IHllYXIubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAqL1xuXG4gICAgLy8gSW5zdGVhZCBJIGhhdmUgdG8gd3JpdGUgdGhlIGxvZ2ljIGxpa2UgdGhpcyB4LShcbiAgICBjb25zdCB5OiBudW1iZXIgPSAreWVhcjtcbiAgICBjb25zdCBtOiBudW1iZXIgPSArbW9udGggLSAxOyAvLyBtb250aCBpcyAwIGJhc2VkXG4gICAgY29uc3QgZDogbnVtYmVyID0gK2RhdGU7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRNb250aChtKSB8fCAhdGhpcy5pc1ZhbGlkRGF0ZSh5LCBtLCBkKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogbnVtYmVyID0gcGFyc2VUb0ZvdXJEaWdpdFllYXIoeSk7XG4gICAgcmV0dXJuIHJlc3VsdCAhPT0gLTEgPyBuZXcgRGF0ZShyZXN1bHQsIG0sIGQpIDogbnVsbDtcbiAgfVxufVxuIl19
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvZGF0ZXBpY2tlci9wcm92aWRlcnMvZGF0ZS1pby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUNMLFVBQVUsRUFDVixxQkFBcUIsRUFDckIsZUFBZSxFQUVmLGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUl0RixNQUFNLE9BQU8sYUFBYTtJQWV4QixZQUFZLG1CQUF3QztRQWRwRCxrQkFBYSxHQUFjO1lBQ3pCLHVGQUF1RjtZQUN2RixzRkFBc0Y7WUFDdEYsK0ZBQStGO1lBQy9GLE9BQU8sRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLHlCQUFvQixHQUFXLHFCQUFxQixDQUFDO1FBRzdDLHdCQUFtQixHQUEyQixhQUFhLENBQUM7UUFDNUQsZUFBVSxHQUFxQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUdoRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDdkMsQ0FBQztJ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WSxFQUFFLEtBQWEsRUFBRSxJQUFZO1FBQ2xFLCtFQUErRTtRQUMvRSx3Q0FBd0M7UUFDeEMsd0RBQXdEO1FBQ3hELDhGQUE4RjtRQUM5Rjs7OztjQUlNO1FBRU4sa0RBQWtEO1FBQ2xELE1BQU0sQ0FBQyxHQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxHQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUNqRCxNQUFNLENBQUMsR0FBVyxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUN2RCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsTUFBTSxNQUFNLEdBQVcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsT0FBTyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN2RCxDQUFDOzswR0EzTFUsYUFBYTs4R0FBYixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRGF0ZVJhbmdlLCBEYXRlUmFuZ2VPcHRpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGUtcmFuZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IERheU1vZGVsIH0gZnJvbSAnLi4vbW9kZWwvZGF5Lm1vZGVsJztcbmltcG9ydCB7XG4gIEJJR19FTkRJQU4sXG4gIERFRkFVTFRfTE9DQUxFX0ZPUk1BVCxcbiAgREVMSU1JVEVSX1JFR0VYLFxuICBJbnB1dERhdGVEaXNwbGF5Rm9ybWF0LFxuICBMSVRUTEVfRU5ESUFOLFxuICBMSVRUTEVfRU5ESUFOX1JFR0VYLFxuICBNSURETEVfRU5ESUFOLFxuICBNSURETEVfRU5ESUFOX1JFR0VYLFxuICBSVExfUkVHRVgsXG4gIFVTRVJfSU5QVVRfUkVHRVgsXG59IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXROdW1iZXJPZkRheXNJblRoZU1vbnRoLCBwYXJzZVRvRm91ckRpZ2l0WWVhciB9IGZyb20gJy4uL3V0aWxzL2RhdGUtdXRpbHMnO1xuaW1wb3J0IHsgTG9jYWxlSGVscGVyU2VydmljZSB9IGZyb20gJy4vbG9jYWxlLWhlbHBlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGVJT1NlcnZpY2Uge1xuICBkaXNhYmxlZERhdGVzOiBEYXRlUmFuZ2UgPSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCByYW5nZS4gSXQgYXBwcm94aW1hdGVzIHRoZSBiZWdpbm5pbmcgb2YgdGltZSB0byB0aGUgZW5kIG9mIHRpbWUuXG4gICAgLy8gVW5sZXNzIGEgbWluRGF0ZSBvciBtYXhEYXRlIGlzIHNldCB3aXRoIHRoZSBuYXRpdmUgSFRNTDUgYXBpIHRoZSByYW5nZSBpcyBhbGwgZGF0ZXNcbiAgICAvLyBUT0RPOiB0dXJuIHRoaXMgaW50byBhbiBBcnJheSBvZiBtaW4vbWF4IHJhbmdlcyB0aGF0IGFsbG93IGNvbmZpZ3VyYXRpb24gb2YgbXVsdGlwbGUgcmFuZ2VzLlxuICAgIG1pbkRhdGU6IG5ldyBEYXlNb2RlbCgwLCAwLCAxKSxcbiAgICBtYXhEYXRlOiBuZXcgRGF5TW9kZWwoOTk5OSwgMTEsIDMxKSxcbiAgfTtcblxuICBjbGRyTG9jYWxlRGF0ZUZvcm1hdDogc3RyaW5nID0gREVGQVVMVF9MT0NBTEVfRk9STUFUO1xuXG4gIHByaXZhdGUgZGF0ZVJhbmdlT3B0aW9ucztcbiAgcHJpdmF0ZSBsb2NhbGVEaXNwbGF5Rm9ybWF0OiBJbnB1dERhdGVEaXNwbGF5Rm9ybWF0ID0gTElUVExFX0VORElBTjtcbiAgcHJpdmF0ZSBkZWxpbWl0ZXJzOiBbc3RyaW5nLCBzdHJpbmddID0gWycvJywgJy8nXTtcblxuICBjb25zdHJ1Y3Rvcihsb2NhbGVIZWxwZXJTZXJ2aWNlOiBMb2NhbGVIZWxwZXJTZXJ2aWNlKSB7XG4gICAgdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCA9IGxvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF0ZUZvcm1hdDtcbiAgICB0aGlzLmluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCk7XG4gIH1cblxuICBnZXQgcGxhY2Vob2xkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgZm9ybWF0OiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10gPSB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQuZm9ybWF0O1xuICAgIHJldHVybiBmb3JtYXRbMF0gKyB0aGlzLmRlbGltaXRlcnNbMF0gKyBmb3JtYXRbMV0gKyB0aGlzLmRlbGltaXRlcnNbMV0gKyBmb3JtYXRbMl07XG4gIH1cblxuICBzZXRNaW5EYXRlKGRhdGU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIE5PVEU6IEknbSBleHBlY3RpbmcgY29uc3VtZXJzIHRvIHBhc3Mgb25lIG9mIGZvdXIgdGhpbmdzIGhlcmU6XG4gICAgLy8gICAgICAgQSBwcm9wZXIgZGF0ZSBzdHJpbmcoMjAxOS0xMS0xMSksIG51bGwsIHVuZGVmaW5lZCBvciBlbXB0eSBzdHJpbmcgKCcnKVxuICAgIGlmICghZGF0ZSkge1xuICAgICAgLy8gYXR0cmlidXRlIGJpbmRpbmcgd2FzIHJlbW92ZWQsIHJlc2V0IGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aW1lXG4gICAgICB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZSA9IG5ldyBEYXlNb2RlbCgwLCAwLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gZGF0ZS5zcGxpdCgnLScpLm1hcChuID0+IHBhcnNlSW50KG4sIDEwKSk7XG4gICAgICB0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZSA9IG5ldyBEYXlNb2RlbCh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TWF4RGF0ZShkYXRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBOT1RFOiBJJ20gZXhwZWN0aW5nIGNvbnN1bWVycyB0byBwYXNzIG9uZSBvZiBmb3VyIHRoaW5ncyBoZXJlOlxuICAgIC8vICAgICAgIEEgcHJvcGVyIGRhdGUgc3RyaW5nKDIwMTktMTEtMTEpLCBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHkgc3RyaW5nICgnJylcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIC8vIGF0dHJpYnV0ZSBiaW5kaW5nIHdhcyByZW1vdmVkLCByZXNldCBmb3J3YXJkIHRvIHRoZSBlbmQgb2YgdGltZVxuICAgICAgdGhpcy5kaXNhYmxlZERhdGVzLm1heERhdGUgPSBuZXcgRGF5TW9kZWwoOTk5OSwgMTEsIDMxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gZGF0ZS5zcGxpdCgnLScpLm1hcChuID0+IHBhcnNlSW50KG4sIDEwKSk7XG4gICAgICB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZSA9IG5ldyBEYXlNb2RlbCh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gICAgfVxuICB9XG5cbiAgc2V0UmFuZ2VPcHRpb25zKHJhbmdlT3B0aW9uczogRGF0ZVJhbmdlT3B0aW9uW10pIHtcbiAgICBjb25zdCB2YWxpZGF0ZWRSYW5nZU9wdGlvbiA9IHRoaXMudmFsaWRhdGVEYXRlUmFuZ2VPcHRpb25zKHJhbmdlT3B0aW9ucyk7XG4gICAgdGhpcy5kYXRlUmFuZ2VPcHRpb25zID0gdmFsaWRhdGVkUmFuZ2VPcHRpb24gfHwgW107XG4gIH1cblxuICBnZXRSYW5nZU9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVJhbmdlT3B0aW9ucztcbiAgfVxuXG4gIHRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBpZiAoZGF0ZSkge1xuICAgICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRlTm86IG51bWJlciA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgY29uc3QgbW9udGhObzogbnVtYmVyID0gZGF0ZS5nZXRNb250aCgpICsgMTtcbiAgICAgIGNvbnN0IGRhdGVTdHI6IHN0cmluZyA9IGRhdGVObyA+IDkgPyBkYXRlTm8udG9TdHJpbmcoKSA6ICcwJyArIGRhdGVObztcbiAgICAgIGNvbnN0IG1vbnRoU3RyOiBzdHJpbmcgPSBtb250aE5vID4gOSA/IG1vbnRoTm8udG9TdHJpbmcoKSA6ICcwJyArIG1vbnRoTm87XG4gICAgICBpZiAodGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0ID09PSBMSVRUTEVfRU5ESUFOKSB7XG4gICAgICAgIHJldHVybiBkYXRlU3RyICsgdGhpcy5kZWxpbWl0ZXJzWzBdICsgbW9udGhTdHIgKyB0aGlzLmRlbGltaXRlcnNbMV0gKyBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdCA9PT0gTUlERExFX0VORElBTikge1xuICAgICAgICByZXR1cm4gbW9udGhTdHIgKyB0aGlzLmRlbGltaXRlcnNbMF0gKyBkYXRlU3RyICsgdGhpcy5kZWxpbWl0ZXJzWzFdICsgZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKSArIHRoaXMuZGVsaW1pdGVyc1swXSArIG1vbnRoU3RyICsgdGhpcy5kZWxpbWl0ZXJzWzFdICsgZGF0ZVN0cjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogRGF0ZSB7XG4gICAgaWYgKCFkYXRlIHx8IHR5cGVvZiBkYXRlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGRhdGVQYXJ0czogc3RyaW5nW10gPSBkYXRlLm1hdGNoKFVTRVJfSU5QVVRfUkVHRVgpO1xuICAgIGlmICghZGF0ZVBhcnRzIHx8IGRhdGVQYXJ0cy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBbZmlyc3RQYXJ0LCBzZWNvbmRQYXJ0LCB0aGlyZFBhcnRdID0gZGF0ZVBhcnRzO1xuICAgIGlmICh0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPT09IExJVFRMRV9FTkRJQU4pIHtcbiAgICAgIC8vIHNlY29uZFBhcnQgaXMgbW9udGggJiYgZmlyc3RQYXJ0IGlzIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh0aGlyZFBhcnQsIHNlY29uZFBhcnQsIGZpcnN0UGFydCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPT09IE1JRERMRV9FTkRJQU4pIHtcbiAgICAgIC8vIGZpcnN0UGFydCBpcyBtb250aCAmJiBzZWNvbmRQYXJ0IGlzIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh0aGlyZFBhcnQsIGZpcnN0UGFydCwgc2Vjb25kUGFydCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNlY29uZFBhcnQgaXMgbW9udGggJiYgdGhpcmRQYXJ0IGlzIGRhdGVcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShmaXJzdFBhcnQsIHNlY29uZFBhcnQsIHRoaXJkUGFydCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURhdGVSYW5nZU9wdGlvbnMocmFuZ2VPcHRpb25zOiBEYXRlUmFuZ2VPcHRpb25bXSk6IERhdGVSYW5nZU9wdGlvbltdIHtcbiAgICBjb25zdCB2YWxpZE9wdGlvbnMgPSBbXTtcbiAgICByYW5nZU9wdGlvbnM/LmZvckVhY2goKHJhbmdlT3B0aW9uOiBEYXRlUmFuZ2VPcHRpb24pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcmFuZ2VPcHRpb24/LnZhbHVlPy5sZW5ndGggIT09IDIgfHxcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJhbmdlT3B0aW9uPy52YWx1ZVswXSkgIT09ICdbb2JqZWN0IERhdGVdJyB8fFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocmFuZ2VPcHRpb24/LnZhbHVlWzFdKSAhPT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFsaWRPcHRpb25zLnB1c2gocmFuZ2VPcHRpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWxpZE9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdDogc3RyaW5nID0gdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmIChMSVRUTEVfRU5ESUFOX1JFR0VYLnRlc3QoZm9ybWF0KSkge1xuICAgICAgdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0ID0gTElUVExFX0VORElBTjtcbiAgICB9IGVsc2UgaWYgKE1JRERMRV9FTkRJQU5fUkVHRVgudGVzdChmb3JtYXQpKSB7XG4gICAgICB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPSBNSURETEVfRU5ESUFOO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBldmVyeXRoaW5nIGVsc2UgaXMgc2V0IHRvIEJJRy1FTkRJQU4gRk9STUFUXG4gICAgICB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQgPSBCSUdfRU5ESUFOO1xuICAgIH1cbiAgICB0aGlzLmV4dHJhY3REZWxpbWl0ZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REZWxpbWl0ZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0KSB7XG4gICAgICAvLyBTYW5pdGl6ZSBEYXRlIEZvcm1hdC4gUmVtb3ZlIFJUTCBjaGFyYWN0ZXJzLlxuICAgICAgLy8gRklYTUU6IFdoZW4gd2Ugc3VwcG9ydCBSVEwsIHJlbW92ZSB0aGlzIGFuZCBoYW5kbGUgaXQgY29ycmVjdGx5LlxuICAgICAgY29uc3QgbG9jYWxlRm9ybWF0OiBzdHJpbmcgPSB0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoUlRMX1JFR0VYLCAnJyk7XG4gICAgICBjb25zdCBkZWxpbWl0ZXJzOiBzdHJpbmdbXSA9IGxvY2FsZUZvcm1hdC5zcGxpdChERUxJTUlURVJfUkVHRVgpO1xuXG4gICAgICAvLyBOT1RFOiBUaGUgc3BsaXQgZnJvbSB0aGUgQ0xEUiBkYXRlIGZvcm1hdCBzaG91bGQgYWx3YXlzIHJlc3VsdFxuICAgICAgLy8gaW4gYW4gYXJhcnkgd2l0aCA0IGVsZW1lbnRzLiBUaGUgMXN0IGFuZCB0aGUgMm5kIHZhbHVlcyBhcmUgdGhlIGRlbGltaXRlcnNcbiAgICAgIC8vIHdlIHdpbGwgdXNlIGluIG9yZGVyLlxuICAgICAgLy8gRWc6IFwiZGQvTU0veVwiLnNwbGl0KC9kK3xtK3x5Ky9pKSByZXN1bHRzIGluIFtcIlwiLCBcIi9cIiwgXCIvXCIsIFwiXCJdXG4gICAgICBpZiAoZGVsaW1pdGVycyAmJiBkZWxpbWl0ZXJzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB0aGlzLmRlbGltaXRlcnMgPSBbZGVsaW1pdGVyc1sxXSwgZGVsaW1pdGVyc1syXV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGRhdGUgZm9ybWF0IHJlY2VpdmVkLiBEZWxpbWl0ZXJzIGV4dHJhY3RlZDogJywgZGVsaW1pdGVycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgbW9udGggZW50ZXJlZCBieSB0aGUgdXNlciBpcyB2YWxpZCBvciBub3QuXG4gICAqIE5vdGU6IE1vbnRoIGlzIDAgYmFzZWQuXG4gICAqL1xuICBwcml2YXRlIGlzVmFsaWRNb250aChtb250aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1vbnRoID4gLTEgJiYgbW9udGggPCAxMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGRhdGUgaXMgdmFsaWQgZGVwZW5kaW5nIG9uIHRoZSB5ZWFyIGFuZCBtb250aCBwcm92aWRlZC5cbiAgICovXG4gIHByaXZhdGUgaXNWYWxpZERhdGUoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyLCBkYXRlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0ZSA+IDAgJiYgZGF0ZSA8PSBnZXROdW1iZXJPZkRheXNJblRoZU1vbnRoKHllYXIsIG1vbnRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHBhcmFtZXRlcnMgcHJvdmlkZWQgYW5kIHJldHVybnMgdGhlIGRhdGUuXG4gICAqIElmIHRoZSBwYXJhbWV0ZXJzIGFyZSBub3RcbiAgICogdmFsaWQgdGhlbiByZXR1cm4gbnVsbC5cbiAgICogTk9URTogKE1vbnRoIGhlcmUgaXMgMSBiYXNlZCBzaW5jZSB0aGUgdXNlciBoYXMgcHJvdmlkZWQgdGhhdCBhcyBhbiBpbnB1dClcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBbmRHZXREYXRlKHllYXI6IHN0cmluZywgbW9udGg6IHN0cmluZywgZGF0ZTogc3RyaW5nKTogRGF0ZSB7XG4gICAgLy8gSSBkb24ndCBrbm93IHdoYXRzIHdyb25nIHdpdGggdGhlIFRTIGNvbXBpbGVyLiBJdCB0aHJvd3MgYW4gZXJyb3IgaWYgSSB3cml0ZVxuICAgIC8vIHRoZSBiZWxvdyBpZiBzdGF0ZW1lbnQuIFRoZSBlcnJvciBpczpcbiAgICAvLyBPcGVyYXRvciAnIT09JyBjYW5ub3QgYmUgYXBwbGllZCB0byB0eXBlcyAnMicgYW5kICc0J1xuICAgIC8vIE1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzEyNzk0I2lzc3VlY29tbWVudC0yNzAzNDI5MzZcbiAgICAvKlxuICAgICAgICBpZiAoeWVhci5sZW5ndGggIT09IDIgfHwgeWVhci5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgICovXG5cbiAgICAvLyBJbnN0ZWFkIEkgaGF2ZSB0byB3cml0ZSB0aGUgbG9naWMgbGlrZSB0aGlzIHgtKFxuICAgIGNvbnN0IHk6IG51bWJlciA9ICt5ZWFyO1xuICAgIGNvbnN0IG06IG51bWJlciA9ICttb250aCAtIDE7IC8vIG1vbnRoIGlzIDAgYmFzZWRcbiAgICBjb25zdCBkOiBudW1iZXIgPSArZGF0ZTtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZE1vbnRoKG0pIHx8ICF0aGlzLmlzVmFsaWREYXRlKHksIG0sIGQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0OiBudW1iZXIgPSBwYXJzZVRvRm91ckRpZ2l0WWVhcih5KTtcbiAgICByZXR1cm4gcmVzdWx0ICE9PSAtMSA/IG5ldyBEYXRlKHJlc3VsdCwgbSwgZCkgOiBudWxsO1xuICB9XG59XG4iXX0=