@acorex/components 7.3.1 → 7.4.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 (441) hide show
  1. package/button/lib/button-group.component.d.ts +10 -73
  2. package/button/lib/button-item.class.d.ts +1 -3
  3. package/button/lib/button-item.component.d.ts +12 -75
  4. package/button/lib/button.component.d.ts +1 -1
  5. package/button-group/README.md +3 -0
  6. package/button-group/index.d.ts +2 -0
  7. package/button-group/lib/button-group.component.d.ts +21 -0
  8. package/button-group/lib/button-group.module.d.ts +8 -0
  9. package/calendar/lib/calendar-range.component.d.ts +2 -1
  10. package/calendar/lib/calendar.class.d.ts +9 -8
  11. package/calendar/lib/calendar.component.d.ts +2 -1
  12. package/check-box/lib/check-box.component.d.ts +3 -2
  13. package/color-box/README.md +3 -0
  14. package/color-box/index.d.ts +2 -0
  15. package/color-box/lib/color-box.component.d.ts +27 -0
  16. package/color-box/lib/color-box.module.d.ts +11 -0
  17. package/common/index.d.ts +6 -5
  18. package/common/lib/classes/styles.class.d.ts +0 -9
  19. package/common/lib/components/button-base-component.class.d.ts +0 -2
  20. package/common/lib/components/interactive-component.class.d.ts +7 -1
  21. package/common/lib/types/direction.d.ts +4 -0
  22. package/common/lib/types/orientation.d.ts +4 -0
  23. package/common/lib/types/placement.d.ts +30 -0
  24. package/common/lib/types/selection-mode.d.ts +4 -0
  25. package/data-pager/lib/data-pager.module.d.ts +5 -4
  26. package/data-table/lib/data-column.directive.d.ts +2 -2
  27. package/datetime-box/README.md +3 -0
  28. package/datetime-box/index.d.ts +2 -0
  29. package/datetime-box/lib/datetime-box.component.d.ts +34 -0
  30. package/datetime-box/lib/datetime-box.module.d.ts +13 -0
  31. package/datetime-input/README.md +3 -0
  32. package/datetime-input/index.d.ts +2 -0
  33. package/datetime-input/lib/datetime-input.component.d.ts +44 -0
  34. package/datetime-input/lib/datetime-input.module.d.ts +10 -0
  35. package/datetime-picker/README.md +3 -0
  36. package/datetime-picker/index.d.ts +2 -0
  37. package/datetime-picker/lib/datetime-picker.component.d.ts +42 -0
  38. package/datetime-picker/lib/datetime-picker.module.d.ts +14 -0
  39. package/decorators/index.d.ts +4 -4
  40. package/decorators/lib/decorators.module.d.ts +4 -4
  41. package/dropdown/index.d.ts +2 -0
  42. package/dropdown/lib/dropdown-box.class.d.ts +15 -0
  43. package/dropdown/lib/dropdown-box.component.d.ts +25 -0
  44. package/dropdown/lib/dropdown-panel.component.d.ts +31 -20
  45. package/dropdown/lib/dropdown.module.d.ts +9 -8
  46. package/esm2022/action-sheet/lib/action-sheet.class.mjs +1 -1
  47. package/esm2022/action-sheet/lib/action-sheet.component.mjs +3 -3
  48. package/esm2022/action-sheet/lib/action-sheet.module.mjs +4 -4
  49. package/esm2022/action-sheet/lib/action-sheet.service.mjs +3 -3
  50. package/esm2022/alert/lib/alert.component.mjs +3 -3
  51. package/esm2022/alert/lib/alert.module.mjs +4 -4
  52. package/esm2022/avatar/lib/avatar-group.component.mjs +3 -3
  53. package/esm2022/avatar/lib/avatar.component.mjs +3 -3
  54. package/esm2022/avatar/lib/avatar.module.mjs +4 -4
  55. package/esm2022/badge/lib/badge.component.mjs +3 -3
  56. package/esm2022/badge/lib/badge.module.mjs +4 -4
  57. package/esm2022/breadcrumbs/lib/breadcrumbs-item.component.mjs +3 -3
  58. package/esm2022/breadcrumbs/lib/breadcrumbs.component.mjs +3 -3
  59. package/esm2022/breadcrumbs/lib/breadcrumbs.module.mjs +4 -4
  60. package/esm2022/button/lib/button-group.component.mjs +36 -29
  61. package/esm2022/button/lib/button-item.class.mjs +1 -1
  62. package/esm2022/button/lib/button-item.component.mjs +46 -32
  63. package/esm2022/button/lib/button.component.mjs +14 -10
  64. package/esm2022/button/lib/button.module.mjs +4 -4
  65. package/esm2022/{color-picker/acorex-components-color-picker.mjs → button-group/acorex-components-button-group.mjs} +1 -1
  66. package/esm2022/button-group/index.mjs +3 -0
  67. package/esm2022/button-group/lib/button-group.component.mjs +97 -0
  68. package/esm2022/button-group/lib/button-group.module.mjs +21 -0
  69. package/esm2022/calendar/lib/calendar-range.component.mjs +14 -13
  70. package/esm2022/calendar/lib/calendar.class.mjs +19 -18
  71. package/esm2022/calendar/lib/calendar.component.mjs +80 -40
  72. package/esm2022/calendar/lib/calendar.module.mjs +4 -4
  73. package/esm2022/check-box/lib/check-box.component.mjs +9 -5
  74. package/esm2022/check-box/lib/check-box.module.mjs +4 -4
  75. package/esm2022/chips/lib/chips.component.mjs +3 -3
  76. package/esm2022/chips/lib/chips.module.mjs +4 -4
  77. package/esm2022/collapse/lib/collapse-group.component.mjs +3 -3
  78. package/esm2022/collapse/lib/collapse.component.mjs +3 -3
  79. package/esm2022/collapse/lib/collapse.module.mjs +4 -4
  80. package/esm2022/color-box/acorex-components-color-box.mjs +5 -0
  81. package/esm2022/color-box/index.mjs +3 -0
  82. package/esm2022/color-box/lib/color-box.component.mjs +91 -0
  83. package/esm2022/color-box/lib/color-box.module.mjs +24 -0
  84. package/esm2022/color-palette/lib/color-palette-input.component.mjs +3 -3
  85. package/esm2022/color-palette/lib/color-palette-picker.component.mjs +13 -13
  86. package/esm2022/color-palette/lib/color-palette-preview.component.mjs +3 -3
  87. package/esm2022/color-palette/lib/color-palette-swatches.component.mjs +3 -3
  88. package/esm2022/color-palette/lib/color-palette.class.mjs +6 -6
  89. package/esm2022/color-palette/lib/color-palette.component.mjs +5 -5
  90. package/esm2022/color-palette/lib/color-palette.module.mjs +4 -4
  91. package/esm2022/common/index.mjs +7 -6
  92. package/esm2022/common/lib/classes/components.class.mjs +22 -22
  93. package/esm2022/common/lib/classes/styles.class.mjs +1 -2
  94. package/esm2022/common/lib/common.module.mjs +4 -4
  95. package/esm2022/common/lib/components/base-component.class.mjs +3 -3
  96. package/esm2022/common/lib/components/button-base-component.class.mjs +4 -18
  97. package/esm2022/common/lib/components/input-base-value-component.class.mjs +3 -3
  98. package/esm2022/common/lib/components/interactive-component.class.mjs +14 -1
  99. package/esm2022/common/lib/components/value-component.class.mjs +6 -6
  100. package/esm2022/common/lib/directives/auto-focus.directive.mjs +3 -3
  101. package/esm2022/common/lib/directives/delayed-value-changed.directive.mjs +3 -3
  102. package/esm2022/common/lib/directives/hotkey.directive.mjs +3 -3
  103. package/esm2022/common/lib/directives/infinite-scroll.directive.mjs +3 -3
  104. package/esm2022/common/lib/directives/responsive.directive.mjs +3 -3
  105. package/esm2022/common/lib/services/dom.service.mjs +3 -3
  106. package/esm2022/common/lib/services/hotkey.service.mjs +3 -3
  107. package/esm2022/common/lib/types/direction.mjs +2 -0
  108. package/esm2022/common/lib/types/orientation.mjs +2 -0
  109. package/esm2022/common/lib/types/placement.mjs +160 -0
  110. package/esm2022/common/lib/types/range.mjs +2 -0
  111. package/esm2022/common/lib/types/selection-mode.mjs +5 -0
  112. package/esm2022/context-menu/lib/context-menu.component.mjs +3 -3
  113. package/esm2022/context-menu/lib/context-menu.module.mjs +4 -4
  114. package/esm2022/data-pager/lib/data-pager-base.component.mjs +6 -6
  115. package/esm2022/data-pager/lib/data-pager-info.component.mjs +3 -3
  116. package/esm2022/data-pager/lib/data-pager-input-selector.component.mjs +3 -3
  117. package/esm2022/data-pager/lib/data-pager-next-buttons.components.mjs +4 -4
  118. package/esm2022/data-pager/lib/data-pager-numeric-selector.component.mjs +15 -18
  119. package/esm2022/data-pager/lib/data-pager-pagesize-dropdown.component.mjs +7 -7
  120. package/esm2022/data-pager/lib/data-pager-prev-buttons.component.mjs +4 -4
  121. package/esm2022/data-pager/lib/data-pager.component.mjs +5 -5
  122. package/esm2022/data-pager/lib/data-pager.module.mjs +8 -7
  123. package/esm2022/data-table/lib/data-column.directive.mjs +6 -8
  124. package/esm2022/data-table/lib/data-table.component.mjs +3 -3
  125. package/esm2022/data-table/lib/data-table.module.mjs +4 -4
  126. package/esm2022/datetime-box/acorex-components-datetime-box.mjs +5 -0
  127. package/esm2022/datetime-box/index.mjs +3 -0
  128. package/esm2022/datetime-box/lib/datetime-box.component.mjs +109 -0
  129. package/esm2022/datetime-box/lib/datetime-box.module.mjs +38 -0
  130. package/esm2022/datetime-input/acorex-components-datetime-input.mjs +5 -0
  131. package/esm2022/datetime-input/index.mjs +3 -0
  132. package/esm2022/datetime-input/lib/datetime-input.component.mjs +522 -0
  133. package/esm2022/datetime-input/lib/datetime-input.module.mjs +23 -0
  134. package/esm2022/datetime-picker/acorex-components-datetime-picker.mjs +5 -0
  135. package/esm2022/datetime-picker/index.mjs +3 -0
  136. package/esm2022/datetime-picker/lib/datetime-picker.component.mjs +232 -0
  137. package/esm2022/datetime-picker/lib/datetime-picker.module.mjs +41 -0
  138. package/esm2022/decorators/index.mjs +5 -5
  139. package/esm2022/decorators/lib/components/clear-button.component.mjs +58 -0
  140. package/esm2022/decorators/lib/components/close-button.component.mjs +43 -0
  141. package/esm2022/decorators/lib/components/generic-content.component.mjs +17 -0
  142. package/esm2022/decorators/lib/components/icon.component.mjs +26 -0
  143. package/esm2022/decorators/lib/decorators.module.mjs +10 -10
  144. package/esm2022/dialog/lib/dialog.component.mjs +4 -4
  145. package/esm2022/dialog/lib/dialog.module.mjs +4 -4
  146. package/esm2022/dialog/lib/dialog.service.mjs +3 -3
  147. package/esm2022/drawer/lib/drawer-container.component.mjs +3 -3
  148. package/esm2022/drawer/lib/drawer.component.mjs +3 -3
  149. package/esm2022/drawer/lib/drawer.module.mjs +4 -4
  150. package/esm2022/dropdown/index.mjs +3 -1
  151. package/esm2022/dropdown/lib/dropdown-box.class.mjs +38 -0
  152. package/esm2022/dropdown/lib/dropdown-box.component.mjs +94 -0
  153. package/esm2022/dropdown/lib/dropdown-panel.component.mjs +88 -37
  154. package/esm2022/dropdown/lib/dropdown.module.mjs +8 -7
  155. package/esm2022/form/index.mjs +2 -1
  156. package/esm2022/form/lib/form-field.component.mjs +3 -3
  157. package/esm2022/form/lib/form.component.mjs +3 -3
  158. package/esm2022/form/lib/form.config.mjs +36 -0
  159. package/esm2022/form/lib/form.module.mjs +6 -28
  160. package/esm2022/form/lib/validation-rule.widget.mjs +8 -7
  161. package/esm2022/form/lib/validation-summary.component.mjs +4 -4
  162. package/esm2022/image/lib/image.component.mjs +3 -3
  163. package/esm2022/image/lib/image.module.mjs +4 -4
  164. package/esm2022/label/lib/label.component.mjs +3 -3
  165. package/esm2022/label/lib/label.module.mjs +4 -4
  166. package/esm2022/loading/lib/loading-spinner.component.mjs +3 -3
  167. package/esm2022/loading/lib/loading.component.mjs +6 -6
  168. package/esm2022/loading/lib/loading.directive.mjs +20 -51
  169. package/esm2022/loading/lib/loading.module.mjs +6 -6
  170. package/esm2022/loading/lib/loading.service.mjs +36 -28
  171. package/esm2022/menu/lib/menu.component.mjs +3 -3
  172. package/esm2022/menu/lib/menu.module.mjs +4 -4
  173. package/esm2022/mixin/index.mjs +1 -2
  174. package/esm2022/mixin/lib/base-components.class.mjs +3 -3
  175. package/esm2022/mixin/lib/selection-component.class.mjs +3 -3
  176. package/esm2022/mixin/lib/value-mixin.class.mjs +3 -3
  177. package/esm2022/notification/lib/notification.component.mjs +3 -3
  178. package/esm2022/notification/lib/notification.module.mjs +4 -4
  179. package/esm2022/notification/lib/notification.service.mjs +3 -3
  180. package/esm2022/number-box/lib/number-box.component.mjs +3 -3
  181. package/esm2022/number-box/lib/number-box.module.mjs +4 -4
  182. package/esm2022/otp/lib/otp.component.mjs +23 -11
  183. package/esm2022/otp/lib/otp.module.mjs +4 -4
  184. package/esm2022/page/lib/base-page.class.mjs +20 -21
  185. package/esm2022/page/lib/page.component.mjs +13 -13
  186. package/esm2022/page/lib/page.module.mjs +4 -4
  187. package/esm2022/password-box/lib/password-box.component.mjs +3 -3
  188. package/esm2022/password-box/lib/password-box.module.mjs +4 -4
  189. package/esm2022/picker/acorex-components-picker.mjs +5 -0
  190. package/esm2022/picker/index.mjs +4 -0
  191. package/esm2022/picker/lib/picker-column.directive.mjs +73 -0
  192. package/esm2022/picker/lib/picker.component.mjs +148 -0
  193. package/esm2022/picker/lib/picker.module.mjs +22 -0
  194. package/esm2022/popover/index.mjs +1 -2
  195. package/esm2022/popover/lib/popover.component.mjs +270 -166
  196. package/esm2022/popover/lib/popover.module.mjs +4 -4
  197. package/esm2022/popup/lib/popup.component.mjs +40 -15
  198. package/esm2022/popup/lib/popup.module.mjs +6 -6
  199. package/esm2022/popup/lib/popup.service.mjs +9 -6
  200. package/esm2022/progress-bar/lib/progress-bar.component.mjs +9 -13
  201. package/esm2022/progress-bar/lib/progress-bar.module.mjs +4 -4
  202. package/esm2022/radio/lib/radio.component.mjs +36 -21
  203. package/esm2022/radio/lib/radio.module.mjs +4 -4
  204. package/esm2022/range-slider/lib/range-slider.component.mjs +21 -34
  205. package/esm2022/range-slider/lib/range-slider.module.mjs +4 -4
  206. package/esm2022/result/lib/result.component.mjs +6 -6
  207. package/esm2022/result/lib/result.module.mjs +4 -4
  208. package/esm2022/scheduler/index.mjs +2 -1
  209. package/esm2022/scheduler/lib/scheduler-month-view.component.mjs +16 -9
  210. package/esm2022/scheduler/lib/scheduler-week-view.component.mjs +12 -0
  211. package/esm2022/scheduler/lib/scheduler.component.mjs +27 -14
  212. package/esm2022/scheduler/lib/scheduler.module.mjs +10 -9
  213. package/esm2022/search-box/lib/search-box.component.mjs +3 -3
  214. package/esm2022/search-box/lib/search-box.module.mjs +4 -4
  215. package/esm2022/select-box/lib/select-box.component.mjs +7 -7
  216. package/esm2022/select-box/lib/select-box.module.mjs +4 -4
  217. package/esm2022/selection-list/lib/selection-list.component.mjs +3 -3
  218. package/esm2022/selection-list/lib/selection-list.module.mjs +4 -4
  219. package/esm2022/switch/lib/switch-content.component.mjs +3 -3
  220. package/esm2022/switch/lib/switch.component.mjs +3 -3
  221. package/esm2022/switch/lib/switch.module.mjs +4 -4
  222. package/esm2022/tabs/lib/tab-content.directive.mjs +3 -3
  223. package/esm2022/tabs/lib/tab-item.component.mjs +23 -53
  224. package/esm2022/tabs/lib/tabs.class.mjs +1 -1
  225. package/esm2022/tabs/lib/tabs.component.mjs +19 -28
  226. package/esm2022/tabs/lib/tabs.module.mjs +4 -4
  227. package/esm2022/tag/lib/tag.component.mjs +8 -10
  228. package/esm2022/tag/lib/tag.module.mjs +4 -4
  229. package/esm2022/text-area/lib/text-area.component.mjs +3 -3
  230. package/esm2022/text-area/lib/text-area.module.mjs +4 -4
  231. package/esm2022/text-box/lib/mask-options.directive.mjs +3 -3
  232. package/esm2022/text-box/lib/text-box.component.mjs +3 -3
  233. package/esm2022/text-box/lib/text-box.module.mjs +4 -4
  234. package/esm2022/toast/lib/toast.component.mjs +3 -3
  235. package/esm2022/toast/lib/toast.config.mjs +9 -3
  236. package/esm2022/toast/lib/toast.module.mjs +10 -6
  237. package/esm2022/toast/lib/toast.service.mjs +3 -3
  238. package/esm2022/tooltip/lib/tooltip.component.mjs +9 -13
  239. package/esm2022/tooltip/lib/tooltip.directive.mjs +35 -143
  240. package/esm2022/tooltip/lib/tooltip.module.mjs +4 -4
  241. package/esm2022/uploader/index.mjs +4 -2
  242. package/esm2022/uploader/lib/uploader-drop-zone.component.mjs +13 -0
  243. package/esm2022/uploader/lib/uploader-list.component.mjs +14 -0
  244. package/esm2022/uploader/lib/uploader-overlay.component.mjs +12 -0
  245. package/esm2022/uploader/lib/uploader.module.mjs +14 -11
  246. package/fesm2022/acorex-components-action-sheet.mjs +10 -10
  247. package/fesm2022/acorex-components-alert.mjs +7 -7
  248. package/fesm2022/acorex-components-avatar.mjs +10 -10
  249. package/fesm2022/acorex-components-badge.mjs +7 -7
  250. package/fesm2022/acorex-components-breadcrumbs.mjs +10 -10
  251. package/fesm2022/acorex-components-button-group.mjs +122 -0
  252. package/fesm2022/acorex-components-button-group.mjs.map +1 -0
  253. package/fesm2022/acorex-components-button.mjs +138 -116
  254. package/fesm2022/acorex-components-button.mjs.map +1 -1
  255. package/fesm2022/acorex-components-calendar.mjs +110 -68
  256. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  257. package/fesm2022/acorex-components-check-box.mjs +12 -8
  258. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  259. package/fesm2022/acorex-components-chips.mjs +7 -7
  260. package/fesm2022/acorex-components-collapse.mjs +10 -10
  261. package/fesm2022/acorex-components-color-box.mjs +116 -0
  262. package/fesm2022/acorex-components-color-box.mjs.map +1 -0
  263. package/fesm2022/acorex-components-color-palette.mjs +36 -36
  264. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  265. package/fesm2022/acorex-components-common.mjs +238 -301
  266. package/fesm2022/acorex-components-common.mjs.map +1 -1
  267. package/fesm2022/acorex-components-context-menu.mjs +7 -7
  268. package/fesm2022/acorex-components-data-pager.mjs +52 -54
  269. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  270. package/fesm2022/acorex-components-data-table.mjs +12 -14
  271. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  272. package/fesm2022/acorex-components-datetime-box.mjs +146 -0
  273. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -0
  274. package/fesm2022/acorex-components-datetime-input.mjs +547 -0
  275. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -0
  276. package/fesm2022/acorex-components-datetime-picker.mjs +273 -0
  277. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -0
  278. package/fesm2022/acorex-components-decorators.mjs +50 -50
  279. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  280. package/fesm2022/acorex-components-dialog.mjs +11 -11
  281. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  282. package/fesm2022/acorex-components-drawer.mjs +10 -10
  283. package/fesm2022/acorex-components-dropdown.mjs +217 -44
  284. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  285. package/fesm2022/acorex-components-form.mjs +58 -44
  286. package/fesm2022/acorex-components-form.mjs.map +1 -1
  287. package/fesm2022/acorex-components-image.mjs +7 -7
  288. package/fesm2022/acorex-components-label.mjs +7 -7
  289. package/fesm2022/acorex-components-loading.mjs +93 -116
  290. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  291. package/fesm2022/acorex-components-menu.mjs +7 -7
  292. package/fesm2022/acorex-components-mixin.mjs +7 -26
  293. package/fesm2022/acorex-components-mixin.mjs.map +1 -1
  294. package/fesm2022/acorex-components-notification.mjs +10 -10
  295. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  296. package/fesm2022/acorex-components-number-box.mjs +7 -7
  297. package/fesm2022/acorex-components-otp.mjs +27 -15
  298. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  299. package/fesm2022/acorex-components-page.mjs +55 -56
  300. package/fesm2022/acorex-components-page.mjs.map +1 -1
  301. package/fesm2022/acorex-components-password-box.mjs +7 -7
  302. package/fesm2022/acorex-components-picker.mjs +242 -0
  303. package/fesm2022/acorex-components-picker.mjs.map +1 -0
  304. package/fesm2022/acorex-components-popover.mjs +275 -241
  305. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  306. package/fesm2022/acorex-components-popup.mjs +52 -24
  307. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  308. package/fesm2022/acorex-components-progress-bar.mjs +12 -16
  309. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  310. package/fesm2022/acorex-components-radio.mjs +39 -25
  311. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  312. package/fesm2022/acorex-components-range-slider.mjs +24 -37
  313. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  314. package/fesm2022/acorex-components-result.mjs +9 -9
  315. package/fesm2022/acorex-components-result.mjs.map +1 -1
  316. package/fesm2022/acorex-components-scheduler.mjs +50 -25
  317. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  318. package/fesm2022/acorex-components-search-box.mjs +7 -7
  319. package/fesm2022/acorex-components-select-box.mjs +10 -10
  320. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  321. package/fesm2022/acorex-components-selection-list.mjs +7 -7
  322. package/fesm2022/acorex-components-switch.mjs +10 -10
  323. package/fesm2022/acorex-components-tabs.mjs +45 -85
  324. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  325. package/fesm2022/acorex-components-tag.mjs +11 -13
  326. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  327. package/fesm2022/acorex-components-text-area.mjs +7 -7
  328. package/fesm2022/acorex-components-text-box.mjs +10 -10
  329. package/fesm2022/acorex-components-toast.mjs +23 -13
  330. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  331. package/fesm2022/acorex-components-tooltip.mjs +45 -157
  332. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  333. package/fesm2022/acorex-components-uploader.mjs +38 -103
  334. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  335. package/form/index.d.ts +1 -0
  336. package/form/lib/form.config.d.ts +17 -0
  337. package/form/lib/form.module.d.ts +0 -1
  338. package/form/lib/validation-rule.widget.d.ts +1 -0
  339. package/loading/lib/loading.directive.d.ts +10 -17
  340. package/loading/lib/loading.module.d.ts +1 -1
  341. package/loading/lib/loading.service.d.ts +10 -15
  342. package/mixin/index.d.ts +0 -1
  343. package/mixin/lib/base-components.class.d.ts +2 -2
  344. package/mixin/lib/base-menu-mixin.class.d.ts +5 -5
  345. package/mixin/lib/button-mixin.class.d.ts +2 -2
  346. package/mixin/lib/clickable-mixin.class.d.ts +2 -2
  347. package/mixin/lib/color-look-mixing.class.d.ts +2 -2
  348. package/mixin/lib/datalist-component.class.d.ts +10 -10
  349. package/mixin/lib/dropdown-mixin.class.d.ts +2 -2
  350. package/mixin/lib/interactive-mixin.class.d.ts +4 -4
  351. package/mixin/lib/mixin.class.d.ts +61 -61
  352. package/mixin/lib/page-component.class.d.ts +2 -2
  353. package/mixin/lib/selection-component.class.d.ts +2 -2
  354. package/mixin/lib/sizable-mixin.class.d.ts +2 -2
  355. package/mixin/lib/textbox-mixin.class.d.ts +2 -2
  356. package/mixin/lib/value-mixin.class.d.ts +8 -8
  357. package/otp/lib/otp.component.d.ts +10 -6
  358. package/package.json +56 -41
  359. package/page/lib/base-page.class.d.ts +6 -10
  360. package/page/lib/page.component.d.ts +4 -4
  361. package/picker/README.md +3 -0
  362. package/picker/index.d.ts +3 -0
  363. package/picker/lib/picker-column.directive.d.ts +16 -0
  364. package/picker/lib/picker.component.d.ts +30 -0
  365. package/picker/lib/picker.module.d.ts +9 -0
  366. package/popover/index.d.ts +0 -1
  367. package/popover/lib/popover.component.d.ts +51 -27
  368. package/popup/lib/popup.component.d.ts +6 -6
  369. package/progress-bar/lib/progress-bar.component.d.ts +3 -8
  370. package/radio/lib/radio.component.d.ts +8 -10
  371. package/range-slider/lib/range-slider.component.d.ts +12 -12
  372. package/result/lib/result.component.d.ts +2 -2
  373. package/scheduler/index.d.ts +1 -0
  374. package/scheduler/lib/scheduler-month-view.component.d.ts +2 -1
  375. package/scheduler/lib/scheduler-week-view.component.d.ts +6 -0
  376. package/scheduler/lib/scheduler.component.d.ts +6 -0
  377. package/scheduler/lib/scheduler.module.d.ts +7 -6
  378. package/tabs/lib/tab-item.component.d.ts +7 -38
  379. package/tabs/lib/tabs.class.d.ts +2 -1
  380. package/tabs/lib/tabs.component.d.ts +7 -9
  381. package/tag/lib/tag.component.d.ts +2 -4
  382. package/tooltip/lib/tooltip.component.d.ts +3 -6
  383. package/tooltip/lib/tooltip.directive.d.ts +11 -17
  384. package/uploader/index.d.ts +3 -1
  385. package/uploader/lib/uploader-drop-zone.component.d.ts +6 -0
  386. package/uploader/lib/uploader-list.component.d.ts +6 -0
  387. package/uploader/lib/uploader-overlay.component.d.ts +6 -0
  388. package/uploader/lib/uploader.module.d.ts +7 -4
  389. package/color-picker/README.md +0 -3
  390. package/color-picker/index.d.ts +0 -2
  391. package/color-picker/lib/color-picker.component.d.ts +0 -191
  392. package/color-picker/lib/color-picker.module.d.ts +0 -18
  393. package/common/lib/classes/drawing.class.d.ts +0 -9
  394. package/common/lib/constant/positions.d.ts +0 -75
  395. package/common/lib/services/custom-cdk-overlay.service.d.ts +0 -19
  396. package/common/lib/services/overlay.service.d.ts +0 -34
  397. package/date-picker/README.md +0 -3
  398. package/date-picker/index.d.ts +0 -2
  399. package/date-picker/lib/datepicker.component.d.ts +0 -40
  400. package/date-picker/lib/datepicker.module.d.ts +0 -15
  401. package/esm2022/color-picker/index.mjs +0 -3
  402. package/esm2022/color-picker/lib/color-picker.component.mjs +0 -116
  403. package/esm2022/color-picker/lib/color-picker.module.mjs +0 -61
  404. package/esm2022/common/lib/classes/data.class.mjs +0 -2
  405. package/esm2022/common/lib/classes/drawing.class.mjs +0 -2
  406. package/esm2022/common/lib/constant/positions.mjs +0 -75
  407. package/esm2022/common/lib/services/custom-cdk-overlay.service.mjs +0 -49
  408. package/esm2022/common/lib/services/overlay.service.mjs +0 -113
  409. package/esm2022/date-picker/acorex-components-date-picker.mjs +0 -5
  410. package/esm2022/date-picker/index.mjs +0 -3
  411. package/esm2022/date-picker/lib/datepicker.component.mjs +0 -128
  412. package/esm2022/date-picker/lib/datepicker.module.mjs +0 -44
  413. package/esm2022/decorators/lib/clear-button.component.mjs +0 -58
  414. package/esm2022/decorators/lib/close-button.component.mjs +0 -43
  415. package/esm2022/decorators/lib/generic-content.component.mjs +0 -17
  416. package/esm2022/decorators/lib/icon.component.mjs +0 -26
  417. package/esm2022/mixin/lib/loading-mixin.class.mjs +0 -18
  418. package/esm2022/popover/lib/dropdown-component.class.mjs +0 -73
  419. package/esm2022/time-box/acorex-components-time-box.mjs +0 -5
  420. package/esm2022/time-box/index.mjs +0 -3
  421. package/esm2022/time-box/lib/time-box.component.mjs +0 -294
  422. package/esm2022/time-box/lib/time-box.module.mjs +0 -32
  423. package/esm2022/uploader/lib/uploader.component.mjs +0 -99
  424. package/fesm2022/acorex-components-color-picker.mjs +0 -178
  425. package/fesm2022/acorex-components-color-picker.mjs.map +0 -1
  426. package/fesm2022/acorex-components-date-picker.mjs +0 -173
  427. package/fesm2022/acorex-components-date-picker.mjs.map +0 -1
  428. package/fesm2022/acorex-components-time-box.mjs +0 -329
  429. package/fesm2022/acorex-components-time-box.mjs.map +0 -1
  430. package/mixin/lib/loading-mixin.class.d.ts +0 -40
  431. package/popover/lib/dropdown-component.class.d.ts +0 -17
  432. package/time-box/README.md +0 -3
  433. package/time-box/index.d.ts +0 -2
  434. package/time-box/lib/time-box.component.d.ts +0 -50
  435. package/time-box/lib/time-box.module.d.ts +0 -11
  436. package/uploader/lib/uploader.component.d.ts +0 -28
  437. /package/common/lib/{classes/data.class.d.ts → types/range.d.ts} +0 -0
  438. /package/decorators/lib/{clear-button.component.d.ts → components/clear-button.component.d.ts} +0 -0
  439. /package/decorators/lib/{close-button.component.d.ts → components/close-button.component.d.ts} +0 -0
  440. /package/decorators/lib/{generic-content.component.d.ts → components/generic-content.component.d.ts} +0 -0
  441. /package/decorators/lib/{icon.component.d.ts → components/icon.component.d.ts} +0 -0
@@ -0,0 +1,522 @@
1
+ import { Component, ViewEncapsulation, ChangeDetectionStrategy, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, forwardRef, inject } from '@angular/core';
2
+ import { AXClearableComponent, AXComponent, AXFocusableComponent, AXValuableComponent, MXInputBaseValueComponent } from '@acorex/components/common';
3
+ import { AXStringUtil } from '@acorex/core/utils';
4
+ import { AXCalendarService } from '@acorex/core/dateTime';
5
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ export class AXDateTimeInputComponent extends MXInputBaseValueComponent {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.calendarService = inject(AXCalendarService);
12
+ this._editingParts = {
13
+ year: {
14
+ key: "year",
15
+ placeholder: "yyyy",
16
+ placeholders: ["YY", "yy", "YYYY", "yyyy"],
17
+ enabled: false,
18
+ default: 2023,
19
+ typedValue: null,
20
+ realValue: () => this.editingDateObj.format(this._editingParts.year.placeholder)
21
+ },
22
+ month: {
23
+ key: "month",
24
+ placeholder: "MM",
25
+ placeholders: ["MMM", "MMMM", "MM", "M"],
26
+ enabled: false,
27
+ default: 1,
28
+ typedValue: null,
29
+ realValue: () => this.editingDateObj.format(this._editingParts.month.placeholder)
30
+ },
31
+ day: {
32
+ key: "day",
33
+ placeholder: "dd",
34
+ placeholders: ["dd", "d"],
35
+ enabled: false,
36
+ default: 1,
37
+ typedValue: null,
38
+ realValue: () => this.editingDateObj.format(this._editingParts.day.placeholder)
39
+ },
40
+ hour: {
41
+ key: "hour",
42
+ placeholder: "HH",
43
+ placeholders: ["HH", "H", "hh", "h"],
44
+ enabled: false,
45
+ default: 0,
46
+ typedValue: null,
47
+ realValue: () => this.editingDateObj.format(this._editingParts.hour.placeholder)
48
+ },
49
+ minute: {
50
+ key: "minute",
51
+ placeholder: "mm",
52
+ placeholders: ["mm", "m"],
53
+ enabled: false,
54
+ default: 0,
55
+ typedValue: null,
56
+ realValue: () => this.editingDateObj.format(this._editingParts.minute.placeholder)
57
+ },
58
+ second: {
59
+ key: "second",
60
+ placeholder: "ss",
61
+ placeholders: ["ss", "s"],
62
+ enabled: false,
63
+ default: 0,
64
+ typedValue: null,
65
+ realValue: () => this.editingDateObj.format(this._editingParts.second.placeholder)
66
+ }
67
+ };
68
+ this._inputChars = [];
69
+ this._type = this.calendarService.calendar.name();
70
+ this._activePart = 'hour';
71
+ this._editingDateObj = this.calendarService.now(this.type);
72
+ this.formatChange = new EventEmitter();
73
+ this._format = this.calendarService.calendar.formats.dateTimeDisplay;
74
+ }
75
+ get type() {
76
+ return this._type || this.calendarService.calendar.name();
77
+ }
78
+ set type(v) {
79
+ this.setOption({
80
+ name: 'type',
81
+ value: v,
82
+ afterCallback: () => {
83
+ this.cdr.markForCheck();
84
+ },
85
+ });
86
+ }
87
+ get activePart() {
88
+ return this._activePart;
89
+ }
90
+ set activePart(v) {
91
+ this._activePart = v;
92
+ this._clearInputBuffer();
93
+ }
94
+ get editingDateObj() {
95
+ return this._editingDateObj;
96
+ }
97
+ get minValue() {
98
+ return this._minValue;
99
+ }
100
+ set minValue(v) {
101
+ this._minValue = v;
102
+ }
103
+ get maxValue() {
104
+ return this._maxValue;
105
+ }
106
+ set maxValue(v) {
107
+ this._maxValue = v;
108
+ }
109
+ get format() {
110
+ return this._format;
111
+ }
112
+ set format(v) {
113
+ this.setOption({
114
+ name: 'format',
115
+ value: v,
116
+ afterCallback: (o, n) => {
117
+ Object.values(this._editingParts).forEach(e => {
118
+ e.enabled = false;
119
+ });
120
+ const formatParts = n.split(/[^a-zA-Z]+/);
121
+ formatParts.forEach(f => {
122
+ const found = Object.values(this._editingParts).find(c => c.placeholders.some(d => d == f));
123
+ if (found) {
124
+ found.enabled = true;
125
+ found.placeholder = f;
126
+ }
127
+ });
128
+ },
129
+ });
130
+ }
131
+ _getOrderedParts() {
132
+ // TODO: better spliter format
133
+ const formatParts = this.format.split(/[^a-zA-Z]+/);
134
+ const result = [];
135
+ formatParts.forEach(f => {
136
+ const found = Object.values(this._editingParts).find(c => c.placeholders.some(d => d == f));
137
+ if (found && found.enabled)
138
+ result.push(found);
139
+ });
140
+ return result;
141
+ }
142
+ _clearInputBuffer() {
143
+ this._inputChars = [];
144
+ }
145
+ _updateText() {
146
+ let text = this.format;
147
+ //
148
+ Object.values(this._editingParts).forEach(part => {
149
+ if (this.activePart == part.key) {
150
+ if (part.typedValue)
151
+ text = text.replace(part.placeholder, part.typedValue);
152
+ }
153
+ else {
154
+ if (part.typedValue != part.placeholder && part.typedValue != null) {
155
+ text = text.replace(part.placeholder, part.realValue());
156
+ }
157
+ }
158
+ });
159
+ this._editingText = text == this.format ? '' : text;
160
+ if (this.activePart) {
161
+ this._highlightActivePart();
162
+ }
163
+ }
164
+ internalSetValue(value) {
165
+ if (value) {
166
+ let editingDate = this.calendarService.create(value, this.type);
167
+ let applyChanges = false;
168
+ Object.values(this._editingParts).forEach(part => {
169
+ if (!part.enabled) {
170
+ editingDate = editingDate.set(part.key, part.default);
171
+ applyChanges = true;
172
+ }
173
+ });
174
+ if (applyChanges) {
175
+ return editingDate.date;
176
+ }
177
+ }
178
+ return value;
179
+ }
180
+ internalValueChanged(value) {
181
+ if (value) {
182
+ this._editingDateObj = this.calendarService.create(value, this.type);
183
+ }
184
+ Object.values(this._editingParts).forEach(part => {
185
+ if (value) {
186
+ if (part.typedValue != part.placeholder)
187
+ part.typedValue = part.realValue();
188
+ }
189
+ else
190
+ part.typedValue = null;
191
+ });
192
+ this._updateText();
193
+ }
194
+ _handleOnKeydownEvent(e) {
195
+ const ignore = () => {
196
+ e.preventDefault();
197
+ e.stopPropagation();
198
+ };
199
+ const input = e.target;
200
+ //
201
+ const orderedParts = this._getOrderedParts();
202
+ const part = this.activePart ? this._editingParts[this.activePart] : orderedParts[0];
203
+ const nextPart = part ? orderedParts[orderedParts.indexOf(part) + 1] : null;
204
+ const prevPart = part ? orderedParts[orderedParts.indexOf(part) - 1] : null;
205
+ //
206
+ const goNext = () => {
207
+ this._clearInputBuffer();
208
+ if (nextPart) {
209
+ this.activePart = nextPart.key;
210
+ this._highlightActivePart();
211
+ }
212
+ };
213
+ const goPrev = () => {
214
+ this._clearInputBuffer();
215
+ if (prevPart) {
216
+ this.activePart = prevPart.key;
217
+ this._highlightActivePart();
218
+ }
219
+ };
220
+ /*************** Handle Left and Right **************/
221
+ if (e.code === 'ArrowRight' || e.code === 'ArrowLeft') {
222
+ ignore();
223
+ e.code === 'ArrowRight' ? goNext() : goPrev();
224
+ }
225
+ /*************** Handle Up and Down **************/
226
+ else if ((e.code === 'ArrowUp' || e.code === 'ArrowDown') && !e.ctrlKey) {
227
+ if (this.disabled || this.readonly) {
228
+ ignore();
229
+ return;
230
+ }
231
+ else {
232
+ ignore();
233
+ const sign = e.code === 'ArrowUp' ? +1 : -1;
234
+ this.activePart = part.key;
235
+ let newVal = this.editingDateObj.add(part.key, sign);
236
+ this._editingParts[part.key].typedValue = newVal.format(this._editingParts[part.key].placeholder);
237
+ this._editingDateObj = newVal;
238
+ this._detectValueChanges();
239
+ }
240
+ }
241
+ /*************** Handle Backspace **************/
242
+ else if (e.code == 'Backspace' || e.code == 'Delete') {
243
+ if (this.disabled || this.readonly) {
244
+ return;
245
+ }
246
+ if (input.value) {
247
+ ignore();
248
+ this._editingParts[part.key].typedValue = this._editingParts[part.key].placeholder;
249
+ this._detectValueChanges();
250
+ goPrev();
251
+ }
252
+ }
253
+ /*************** Handle Backspace **************/
254
+ else if (e.code == 'Tab' || e.code == 'Space') {
255
+ if (input.value) {
256
+ if (!e.shiftKey && nextPart) {
257
+ ignore();
258
+ goNext();
259
+ }
260
+ else if (e.shiftKey && prevPart) {
261
+ ignore();
262
+ goPrev();
263
+ }
264
+ }
265
+ }
266
+ else if (e.key?.trim() && !isNaN(Number(e.key))) {
267
+ ignore();
268
+ if (this.disabled || this.readonly) {
269
+ return;
270
+ }
271
+ let next = false;
272
+ const editing = this._editingParts[part.key];
273
+ //
274
+ switch (part.key) {
275
+ case 'year':
276
+ {
277
+ if (editing.placeholder.length == 2 && this._inputChars.length == 0) {
278
+ this._inputChars.push(...this.calendarService.now(this.type).format('yyyy').substring(0, 2).split(''));
279
+ }
280
+ if (this._inputChars.length < 4) {
281
+ editing.typedValue = `${this._inputChars.join('')}${e.key}`;
282
+ this._inputChars.push(e.key);
283
+ if (this._inputChars.length > 3) {
284
+ next = true;
285
+ }
286
+ }
287
+ else {
288
+ next = true;
289
+ }
290
+ editing.typedValue = ('0000' + editing.typedValue).slice(-4);
291
+ const nv = parseInt(editing.typedValue);
292
+ //if (nv > 0) {
293
+ const newVal = this.editingDateObj.set('year', nv);
294
+ this._editingDateObj = newVal;
295
+ this._detectValueChanges();
296
+ //}
297
+ break;
298
+ }
299
+ case 'month':
300
+ {
301
+ if (this._inputChars.length == 0) {
302
+ this._inputChars.push(e.key);
303
+ editing.typedValue = `0${e.key}`;
304
+ if (parseInt(e.key) > 1) {
305
+ this._clearInputBuffer();
306
+ next = true;
307
+ }
308
+ }
309
+ else if (this._inputChars.length == 1) {
310
+ const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
311
+ if (newStr > 12) {
312
+ editing.typedValue = `0${e.key}`;
313
+ }
314
+ else {
315
+ editing.typedValue = newStr.toString();
316
+ }
317
+ this._clearInputBuffer();
318
+ next = true;
319
+ }
320
+ editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
321
+ const nv = parseInt(editing.typedValue);
322
+ if (nv > 0) {
323
+ const newVal = this.editingDateObj.set(part.key, nv);
324
+ this._editingDateObj = newVal;
325
+ this._detectValueChanges();
326
+ }
327
+ break;
328
+ }
329
+ case 'day':
330
+ {
331
+ if (this._inputChars.length == 0) {
332
+ this._inputChars.push(e.key);
333
+ editing.typedValue = `0${e.key}`;
334
+ if (parseInt(e.key) > 3) {
335
+ this._clearInputBuffer();
336
+ next = true;
337
+ }
338
+ }
339
+ else if (this._inputChars.length == 1) {
340
+ const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
341
+ if (newStr > this._editingDateObj.month.totalDays) {
342
+ editing.typedValue = `0${e.key}`;
343
+ }
344
+ else {
345
+ editing.typedValue = newStr.toString();
346
+ }
347
+ this._clearInputBuffer();
348
+ next = true;
349
+ }
350
+ editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
351
+ const nv = parseInt(editing.typedValue);
352
+ if (nv > 0) {
353
+ const newVal = this.editingDateObj.set(part.key, nv);
354
+ this._editingDateObj = newVal;
355
+ this._detectValueChanges();
356
+ }
357
+ break;
358
+ }
359
+ case 'hour':
360
+ {
361
+ if (this._inputChars.length == 0) {
362
+ this._inputChars.push(e.key);
363
+ editing.typedValue = `0${e.key}`;
364
+ if (parseInt(e.key) > 2) {
365
+ next = true;
366
+ }
367
+ }
368
+ else if (this._inputChars.length == 1) {
369
+ const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
370
+ if (newStr > 23) {
371
+ editing.typedValue = `0${e.key}`;
372
+ }
373
+ else {
374
+ editing.typedValue = newStr.toString();
375
+ }
376
+ next = true;
377
+ }
378
+ editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
379
+ const newVal = this.editingDateObj.set('hour', parseInt(editing.typedValue));
380
+ this._editingDateObj = newVal;
381
+ this._detectValueChanges();
382
+ break;
383
+ }
384
+ case 'minute':
385
+ case 'second':
386
+ if (this._inputChars.length == 0) {
387
+ this._inputChars.push(e.key);
388
+ editing.typedValue = `0${e.key}`;
389
+ if (parseInt(e.key) > 5) {
390
+ this._clearInputBuffer();
391
+ next = true;
392
+ }
393
+ }
394
+ else if (this._inputChars.length == 1) {
395
+ const newStr = parseInt(`${this._inputChars[0]}${e.key}`);
396
+ if (newStr > 59) {
397
+ editing.typedValue = `0${e.key}`;
398
+ }
399
+ else {
400
+ editing.typedValue = newStr.toString();
401
+ }
402
+ this._clearInputBuffer();
403
+ next = true;
404
+ }
405
+ editing.typedValue = editing.typedValue?.length === 1 ? "0" + editing.typedValue : editing.typedValue;
406
+ const newVal = this.editingDateObj.set(part.key, parseInt(editing.typedValue));
407
+ this._editingDateObj = newVal;
408
+ this._detectValueChanges();
409
+ break;
410
+ default:
411
+ }
412
+ if (next) {
413
+ goNext();
414
+ return;
415
+ }
416
+ }
417
+ /*************** Emit Event **************/
418
+ super.emitOnKeydownEvent(e);
419
+ }
420
+ _handleKeyUpEvent(e) {
421
+ if (this.activePart) {
422
+ this._highlightActivePart();
423
+ }
424
+ }
425
+ _handleFocusEvent(e) {
426
+ //this._highlightActivePart();
427
+ super.emitOnFocusEvent(e);
428
+ }
429
+ _handleBlurEvent(e) {
430
+ super.emitOnBlurEvent(e);
431
+ }
432
+ _handleOnInputClickEvent(e) {
433
+ setTimeout(() => {
434
+ this._detectPartAtPosition();
435
+ }, 0);
436
+ super.emitOnClickEvent(e);
437
+ }
438
+ _detectPartAtPosition() {
439
+ const input = this.input.nativeElement;
440
+ if (!input.value)
441
+ return;
442
+ const sStart = input.selectionEnd || 0;
443
+ const re = /[a-zA-Z0-9]+/gi;
444
+ const valueParts = Array.from(input.value.matchAll(re));
445
+ const orderedParts = this._getOrderedParts();
446
+ const index = valueParts.findIndex((c) => c.index <= sStart && (c.index + c[0].length) >= sStart);
447
+ this.activePart = orderedParts[index].key;
448
+ this._highlightActivePart();
449
+ }
450
+ _highlightActivePart() {
451
+ const input = this.input.nativeElement;
452
+ if (!input.value || !this.activePart)
453
+ return;
454
+ const orderedParts = this._getOrderedParts();
455
+ const index = orderedParts.findIndex(c => c.key == this.activePart);
456
+ const re = /[a-zA-Z0-9]+/gi;
457
+ const valueParts = Array.from(input.value.matchAll(re));
458
+ const { start, end } = AXStringUtil.getWordBoundsAtPosition(input.value, valueParts[index].index);
459
+ input.setSelectionRange(start, end);
460
+ }
461
+ _detectValueChanges() {
462
+ this.commitValue(this._editingDateObj.date, true);
463
+ }
464
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXDateTimeInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
465
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.9", type: AXDateTimeInputComponent, selector: "ax-datetime-input", inputs: { disabled: "disabled", readonly: "readonly", tabIndex: "tabIndex", placeholder: "placeholder", value: "value", state: "state", name: "name", id: "id", type: "type", minValue: "minValue", maxValue: "maxValue", format: "format" }, outputs: { valueChange: "valueChange", stateChange: "stateChange", onValueChanged: "onValueChanged", onBlur: "onBlur", onFocus: "onFocus", onClick: "onClick", readonlyChange: "readonlyChange", disabledChange: "disabledChange", formatChange: "formatChange" }, host: { listeners: { "keydown": "_handleOnKeydownEvent($event)", "keyup": "_handleKeyUpEvent($event)" }, classAttribute: "ax-editor-input" }, providers: [
466
+ { provide: AXComponent, useExisting: AXDateTimeInputComponent },
467
+ { provide: AXFocusableComponent, useExisting: AXDateTimeInputComponent },
468
+ { provide: AXValuableComponent, useExisting: AXDateTimeInputComponent },
469
+ { provide: AXClearableComponent, useExisting: AXDateTimeInputComponent },
470
+ {
471
+ provide: NG_VALUE_ACCESSOR,
472
+ useExisting: forwardRef(() => AXDateTimeInputComponent),
473
+ multi: true,
474
+ },
475
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "input2", first: true, predicate: ["input2"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<input #input autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" class=\"ax-input\" type=\"text\"\n [attr.placeholder]=\"placeholder\" [class.ax-state-disabled]=\"disabled\" [class.ax-state-readonly]=\"readonly\"\n [disabled]=\"disabled\" [readonly]=\"true\" [ngModel]=\"_editingText\" (mouseup)=\"_handleOnInputClickEvent($event)\"\n (blur)=\"_handleBlurEvent($event)\" (focus)=\"_handleFocusEvent($event)\">", dependencies: [{ kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
476
+ }
477
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.9", ngImport: i0, type: AXDateTimeInputComponent, decorators: [{
478
+ type: Component,
479
+ args: [{ selector: 'ax-datetime-input', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, inputs: ['disabled', 'readonly', 'tabIndex', 'placeholder', 'value', 'state', 'name', 'id'], host: { class: 'ax-editor-input' }, outputs: [
480
+ 'valueChange',
481
+ 'stateChange',
482
+ 'onValueChanged',
483
+ 'onBlur',
484
+ 'onFocus',
485
+ 'onClick',
486
+ 'readonlyChange',
487
+ 'disabledChange',
488
+ ], providers: [
489
+ { provide: AXComponent, useExisting: AXDateTimeInputComponent },
490
+ { provide: AXFocusableComponent, useExisting: AXDateTimeInputComponent },
491
+ { provide: AXValuableComponent, useExisting: AXDateTimeInputComponent },
492
+ { provide: AXClearableComponent, useExisting: AXDateTimeInputComponent },
493
+ {
494
+ provide: NG_VALUE_ACCESSOR,
495
+ useExisting: forwardRef(() => AXDateTimeInputComponent),
496
+ multi: true,
497
+ },
498
+ ], template: "<input #input autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" class=\"ax-input\" type=\"text\"\n [attr.placeholder]=\"placeholder\" [class.ax-state-disabled]=\"disabled\" [class.ax-state-readonly]=\"readonly\"\n [disabled]=\"disabled\" [readonly]=\"true\" [ngModel]=\"_editingText\" (mouseup)=\"_handleOnInputClickEvent($event)\"\n (blur)=\"_handleBlurEvent($event)\" (focus)=\"_handleFocusEvent($event)\">" }]
499
+ }], propDecorators: { type: [{
500
+ type: Input
501
+ }], input: [{
502
+ type: ViewChild,
503
+ args: ['input']
504
+ }], input2: [{
505
+ type: ViewChild,
506
+ args: ['input2']
507
+ }], minValue: [{
508
+ type: Input
509
+ }], maxValue: [{
510
+ type: Input
511
+ }], formatChange: [{
512
+ type: Output
513
+ }], format: [{
514
+ type: Input
515
+ }], _handleOnKeydownEvent: [{
516
+ type: HostListener,
517
+ args: ["keydown", ["$event"]]
518
+ }], _handleKeyUpEvent: [{
519
+ type: HostListener,
520
+ args: ["keyup", ["$event"]]
521
+ }] } });
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lLWlucHV0L3NyYy9saWIvZGF0ZXRpbWUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVLLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUF5RCxNQUFNLHVCQUF1QixDQUFDO0FBQ2pILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFrQ25ELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx5QkFBK0I7SUE3QjdFOztRQStCWSxvQkFBZSxHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUUvRCxrQkFBYSxHQUFvQjtZQUNyQyxJQUFJLEVBQUU7Z0JBQ0YsR0FBRyxFQUFFLE1BQU07Z0JBQ1gsV0FBVyxFQUFFLE1BQU07Z0JBQ25CLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFDMUMsT0FBTyxFQUFFLEtBQUs7Z0JB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Uzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjtxQkFDbkIsYUFDVTt3QkFDUCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVywwQkFBMEIsRUFBRTt3QkFDL0QsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVywwQkFBMEIsRUFBRTt3QkFDeEUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVywwQkFBMEIsRUFBRTt3QkFDdkUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVywwQkFBMEIsRUFBRTt3QkFDeEU7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKOzhCQXNFVSxJQUFJO3NCQURkLEtBQUs7Z0JBK0JOLEtBQUs7c0JBREosU0FBUzt1QkFBQyxPQUFPO2dCQUlsQixNQUFNO3NCQURMLFNBQVM7dUJBQUMsUUFBUTtnQkFLUixRQUFRO3NCQURsQixLQUFLO2dCQVVLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBU04sWUFBWTtzQkFEWCxNQUFNO2dCQUtJLE1BQU07c0JBRGhCLEtBQUs7Z0JBK0ZOLHFCQUFxQjtzQkFEcEIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBcU9uQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3RW5jYXBzdWxhdGlvbiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhDbGVhcmFibGVDb21wb25lbnQsIEFYQ29tcG9uZW50LCBBWEZvY3VzYWJsZUNvbXBvbmVudCwgQVhWYWx1YWJsZUNvbXBvbmVudCwgTVhJbnB1dEJhc2VWYWx1ZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgQVhTdHJpbmdVdGlsIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEFYQ2FsZW5kYXJTZXJ2aWNlLCBBWERhdGVUaW1lLCBUaW1lVW5pdCwgQVhEYXRlVGltZVBhcnQsIEFYRGF0ZVRpbWVQYXJ0cyB9IGZyb20gJ0BhY29yZXgvY29yZS9kYXRlVGltZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuXG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdheC1kYXRldGltZS1pbnB1dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGlucHV0czogWydkaXNhYmxlZCcsICdyZWFkb25seScsICd0YWJJbmRleCcsICdwbGFjZWhvbGRlcicsICd2YWx1ZScsICdzdGF0ZScsICduYW1lJywgJ2lkJ10sXG4gICAgaG9zdDogeyBjbGFzczogJ2F4LWVkaXRvci1pbnB1dCcgfSxcbiAgICBvdXRwdXRzOiBbXG4gICAgICAgICd2YWx1ZUNoYW5nZScsXG4gICAgICAgICdzdGF0ZUNoYW5nZScsXG4gICAgICAgICdvblZhbHVlQ2hhbmdlZCcsXG4gICAgICAgICdvbkJsdXInLFxuICAgICAgICAnb25Gb2N1cycsXG4gICAgICAgICdvbkNsaWNrJyxcbiAgICAgICAgJ3JlYWRvbmx5Q2hhbmdlJyxcbiAgICAgICAgJ2Rpc2FibGVkQ2hhbmdlJyxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEFYQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogQVhGb2N1c2FibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSxcbiAgICAgICAgeyBwcm92aWRlOiBBWFZhbHVhYmxlQ29tcG9uZW50LCB1c2VFeGlzdGluZzogQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogQVhDbGVhcmFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBWERhdGVUaW1lSW5wdXRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgTVhJbnB1dEJhc2VWYWx1ZUNvbXBvbmVudDxEYXRlPiB7XG5cbiAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQVhDYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQVhDYWxlbmRhclNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSBfZWRpdGluZ1BhcnRzOiBBWERhdGVUaW1lUGFydHMgPSB7XG4gICAgICAgIHllYXI6IHtcbiAgICAgICAgICAgIGtleTogXCJ5ZWFyXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJ5eXl5XCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcnM6IFtcIllZXCIsIFwieXlcIiwgXCJZWVlZXCIsIFwieXl5eVwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMjAyMyxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy55ZWFyLnBsYWNlaG9sZGVyKVxuICAgICAgICB9LFxuICAgICAgICBtb250aDoge1xuICAgICAgICAgICAga2V5OiBcIm1vbnRoXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJNTVwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJzOiBbXCJNTU1cIiwgXCJNTU1NXCIsIFwiTU1cIiwgXCJNXCJdLFxuICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICAgICAgdHlwZWRWYWx1ZTogbnVsbCxcbiAgICAgICAgICAgIHJlYWxWYWx1ZTogKCkgPT4gdGhpcy5lZGl0aW5nRGF0ZU9iai5mb3JtYXQodGhpcy5fZWRpdGluZ1BhcnRzLm1vbnRoLnBsYWNlaG9sZGVyKVxuICAgICAgICB9LFxuICAgICAgICBkYXk6IHtcbiAgICAgICAgICAgIGtleTogXCJkYXlcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcImRkXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcnM6IFtcImRkXCIsIFwiZFwiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5kYXkucGxhY2Vob2xkZXIpXG4gICAgICAgIH0sXG4gICAgICAgIGhvdXI6IHtcbiAgICAgICAgICAgIGtleTogXCJob3VyXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJISFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJzOiBbXCJISFwiLCBcIkhcIiwgXCJoaFwiLCBcImhcIl0sXG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICAgICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMuaG91ci5wbGFjZWhvbGRlcilcbiAgICAgICAgfSxcbiAgICAgICAgbWludXRlOiB7XG4gICAgICAgICAgICBrZXk6IFwibWludXRlXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJtbVwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJzOiBbXCJtbVwiLCBcIm1cIl0sXG4gICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICAgICAgICB0eXBlZFZhbHVlOiBudWxsLFxuICAgICAgICAgICAgcmVhbFZhbHVlOiAoKSA9PiB0aGlzLmVkaXRpbmdEYXRlT2JqLmZvcm1hdCh0aGlzLl9lZGl0aW5nUGFydHMubWludXRlLnBsYWNlaG9sZGVyKVxuICAgICAgICB9LFxuICAgICAgICBzZWNvbmQ6IHtcbiAgICAgICAgICAgIGtleTogXCJzZWNvbmRcIixcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcInNzXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcnM6IFtcInNzXCIsIFwic1wiXSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdDogMCxcbiAgICAgICAgICAgIHR5cGVkVmFsdWU6IG51bGwsXG4gICAgICAgICAgICByZWFsVmFsdWU6ICgpID0+IHRoaXMuZWRpdGluZ0RhdGVPYmouZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0cy5zZWNvbmQucGxhY2Vob2xkZXIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2VkaXRpbmdUZXh0OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9pbnB1dENoYXJzOiBzdHJpbmdbXSA9IFtdO1xuXG5cbiAgICBwcml2YXRlIF90eXBlOiBzdHJpbmcgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSB8fCB0aGlzLmNhbGVuZGFyU2VydmljZS5jYWxlbmRhci5uYW1lKCk7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgdHlwZSh2OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oe1xuICAgICAgICAgICAgbmFtZTogJ3R5cGUnLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBhZnRlckNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgX2FjdGl2ZVBhcnQgPSAnaG91cic7XG4gICAgcHVibGljIGdldCBhY3RpdmVQYXJ0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYXJ0O1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IGFjdGl2ZVBhcnQodjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVBhcnQgPSB2O1xuICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZWRpdGluZ0RhdGVPYmo6IEFYRGF0ZVRpbWUgPSB0aGlzLmNhbGVuZGFyU2VydmljZS5ub3codGhpcy50eXBlKTtcbiAgICBwcml2YXRlIGdldCBlZGl0aW5nRGF0ZU9iaigpOiBBWERhdGVUaW1lIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRpbmdEYXRlT2JqO1xuICAgIH1cblxuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnKVxuICAgIGlucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQyJylcbiAgICBpbnB1dDI6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBwcml2YXRlIF9taW5WYWx1ZTogRGF0ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5WYWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2OiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX21pblZhbHVlID0gdjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9tYXhWYWx1ZTogRGF0ZTtcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhWYWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBtYXhWYWx1ZSh2OiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX21heFZhbHVlID0gdjtcbiAgICB9XG5cbiAgICBAT3V0cHV0KClcbiAgICBmb3JtYXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgX2Zvcm1hdCA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFyLmZvcm1hdHMuZGF0ZVRpbWVEaXNwbGF5O1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBmb3JtYXQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9XG4gICAgcHVibGljIHNldCBmb3JtYXQodjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKHtcbiAgICAgICAgICAgIG5hbWU6ICdmb3JtYXQnLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBhZnRlckNhbGxiYWNrOiAobywgbikgPT4ge1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXRQYXJ0cyA9IG4uc3BsaXQoL1teYS16QS1aXSsvKTtcbiAgICAgICAgICAgICAgICBmb3JtYXRQYXJ0cy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5maW5kKGMgPT4gYy5wbGFjZWhvbGRlcnMuc29tZShkID0+IGQgPT0gZikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQucGxhY2Vob2xkZXIgPSBmO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgX2dldE9yZGVyZWRQYXJ0cygpOiBBWERhdGVUaW1lUGFydFtdIHtcbiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHNwbGl0ZXIgZm9ybWF0XG4gICAgICAgIGNvbnN0IGZvcm1hdFBhcnRzID0gdGhpcy5mb3JtYXQuc3BsaXQoL1teYS16QS1aXSsvKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBBWERhdGVUaW1lUGFydFtdID0gW107XG4gICAgICAgIGZvcm1hdFBhcnRzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5maW5kKGMgPT4gYy5wbGFjZWhvbGRlcnMuc29tZShkID0+IGQgPT0gZikpO1xuICAgICAgICAgICAgaWYgKGZvdW5kICYmIGZvdW5kLmVuYWJsZWQpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZm91bmQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGVhcklucHV0QnVmZmVyKCkge1xuICAgICAgICB0aGlzLl9pbnB1dENoYXJzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlVGV4dCgpIHtcbiAgICAgICAgbGV0IHRleHQgPSB0aGlzLmZvcm1hdDtcbiAgICAgICAgLy9cbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLl9lZGl0aW5nUGFydHMpLmZvckVhY2gocGFydCA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVQYXJ0ID09IHBhcnQua2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShwYXJ0LnBsYWNlaG9sZGVyLCBwYXJ0LnR5cGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZWRWYWx1ZSAhPSBwYXJ0LnBsYWNlaG9sZGVyICYmIHBhcnQudHlwZWRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocGFydC5wbGFjZWhvbGRlciwgcGFydC5yZWFsVmFsdWUoKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2VkaXRpbmdUZXh0ID0gdGV4dCA9PSB0aGlzLmZvcm1hdCA/ICcnIDogdGV4dDtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlUGFydCkge1xuICAgICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbnRlcm5hbFNldFZhbHVlKHZhbHVlPzogRGF0ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBlZGl0aW5nRGF0ZSA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICAgICAgICAgIGxldCBhcHBseUNoYW5nZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5fZWRpdGluZ1BhcnRzKS5mb3JFYWNoKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcGFydC5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRpbmdEYXRlID0gZWRpdGluZ0RhdGUuc2V0KHBhcnQua2V5IGFzIFRpbWVVbml0LCBwYXJ0LmRlZmF1bHQpO1xuICAgICAgICAgICAgICAgICAgICBhcHBseUNoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGFwcGx5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGl0aW5nRGF0ZS5kYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbnRlcm5hbFZhbHVlQ2hhbmdlZCh2YWx1ZT86IERhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmNyZWF0ZSh2YWx1ZSwgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuX2VkaXRpbmdQYXJ0cykuZm9yRWFjaChwYXJ0ID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJ0LnR5cGVkVmFsdWUgIT0gcGFydC5wbGFjZWhvbGRlcilcbiAgICAgICAgICAgICAgICAgICAgcGFydC50eXBlZFZhbHVlID0gcGFydC5yZWFsVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXJ0LnR5cGVkVmFsdWUgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVGV4dCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSlcbiAgICBfaGFuZGxlT25LZXlkb3duRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBpZ25vcmUgPSAoKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgLy9cbiAgICAgICAgY29uc3Qgb3JkZXJlZFBhcnRzID0gdGhpcy5fZ2V0T3JkZXJlZFBhcnRzKCk7XG4gICAgICAgIGNvbnN0IHBhcnQgPSB0aGlzLmFjdGl2ZVBhcnQgPyB0aGlzLl9lZGl0aW5nUGFydHNbdGhpcy5hY3RpdmVQYXJ0XSA6IG9yZGVyZWRQYXJ0c1swXTtcbiAgICAgICAgY29uc3QgbmV4dFBhcnQgPSBwYXJ0ID8gb3JkZXJlZFBhcnRzW29yZGVyZWRQYXJ0cy5pbmRleE9mKHBhcnQpICsgMV0gOiBudWxsO1xuICAgICAgICBjb25zdCBwcmV2UGFydCA9IHBhcnQgPyBvcmRlcmVkUGFydHNbb3JkZXJlZFBhcnRzLmluZGV4T2YocGFydCkgLSAxXSA6IG51bGw7XG4gICAgICAgIC8vXG4gICAgICAgIGNvbnN0IGdvTmV4dCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGlmIChuZXh0UGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUGFydCA9IG5leHRQYXJ0LmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGdvUHJldiA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgIGlmIChwcmV2UGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUGFydCA9IHByZXZQYXJ0LmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBMZWZ0IGFuZCBSaWdodCAgKioqKioqKioqKioqKiovXG4gICAgICAgIGlmIChlLmNvZGUgPT09ICdBcnJvd1JpZ2h0JyB8fCBlLmNvZGUgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgIGUuY29kZSA9PT0gJ0Fycm93UmlnaHQnID8gZ29OZXh0KCkgOiBnb1ByZXYoKTtcbiAgICAgICAgfVxuICAgICAgICAvKioqKioqKioqKioqKioqICBIYW5kbGUgVXAgYW5kIERvd24gICoqKioqKioqKioqKioqL1xuICAgICAgICBlbHNlIGlmICgoZS5jb2RlID09PSAnQXJyb3dVcCcgfHwgZS5jb2RlID09PSAnQXJyb3dEb3duJykgJiYgIWUuY3RybEtleSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBlLmNvZGUgPT09ICdBcnJvd1VwJyA/ICsxIDogLTE7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVQYXJ0ID0gcGFydC5rZXk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbDogQVhEYXRlVGltZSA9IHRoaXMuZWRpdGluZ0RhdGVPYmouYWRkKHBhcnQua2V5LCBzaWduKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnR5cGVkVmFsdWUgPSBuZXdWYWwuZm9ybWF0KHRoaXMuX2VkaXRpbmdQYXJ0c1twYXJ0LmtleV0ucGxhY2Vob2xkZXIpXG4gICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyoqKioqKioqKioqKioqKiAgSGFuZGxlIEJhY2tzcGFjZSAgKioqKioqKioqKioqKiovXG4gICAgICAgIGVsc2UgaWYgKGUuY29kZSA9PSAnQmFja3NwYWNlJyB8fCBlLmNvZGUgPT0gJ0RlbGV0ZScpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5wdXQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnR5cGVkVmFsdWUgPSB0aGlzLl9lZGl0aW5nUGFydHNbcGFydC5rZXldLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIGdvUHJldigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEhhbmRsZSBCYWNrc3BhY2UgICoqKioqKioqKioqKioqL1xuICAgICAgICBlbHNlIGlmIChlLmNvZGUgPT0gJ1RhYicgfHwgZS5jb2RlID09ICdTcGFjZScpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghZS5zaGlmdEtleSAmJiBuZXh0UGFydCkge1xuICAgICAgICAgICAgICAgICAgICBpZ25vcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZ29OZXh0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIHByZXZQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgICAgICAgICBnb1ByZXYoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZS5rZXk/LnRyaW0oKSAmJiAhaXNOYU4oTnVtYmVyKGUua2V5KSkpIHtcbiAgICAgICAgICAgIGlnbm9yZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBuZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBlZGl0aW5nID0gdGhpcy5fZWRpdGluZ1BhcnRzW3BhcnQua2V5XTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBzd2l0Y2ggKHBhcnQua2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0aW5nLnBsYWNlaG9sZGVyLmxlbmd0aCA9PSAyICYmIHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dENoYXJzLnB1c2goLi4udGhpcy5jYWxlbmRhclNlcnZpY2Uubm93KHRoaXMudHlwZSkuZm9ybWF0KCd5eXl5Jykuc3Vic3RyaW5nKDAsIDIpLnNwbGl0KCcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPCA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYCR7dGhpcy5faW5wdXRDaGFycy5qb2luKCcnKX0ke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSAoJzAwMDAnICsgZWRpdGluZy50eXBlZFZhbHVlKS5zbGljZSgtNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudiA9IHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChudiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KCd5ZWFyJywgbnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGAwJHtlLmtleX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1N0ciA9IHBhcnNlSW50KGAke3RoaXMuX2lucHV0Q2hhcnNbMF19JHtlLmtleX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RyID4gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBuZXdTdHIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyBcIjBcIiArIGVkaXRpbmcudHlwZWRWYWx1ZSA6IGVkaXRpbmcudHlwZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG52ID0gcGFyc2VJbnQoZWRpdGluZy50eXBlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldChwYXJ0LmtleSwgbnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRpbmdEYXRlT2JqID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RldGVjdFZhbHVlQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2lucHV0Q2hhcnMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ciA+IHRoaXMuX2VkaXRpbmdEYXRlT2JqLm1vbnRoLnRvdGFsRGF5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcklucHV0QnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBlZGl0aW5nLnR5cGVkVmFsdWU/Lmxlbmd0aCA9PT0gMSA/IFwiMFwiICsgZWRpdGluZy50eXBlZFZhbHVlIDogZWRpdGluZy50eXBlZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnYgPSBwYXJzZUludChlZGl0aW5nLnR5cGVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG52ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuZWRpdGluZ0RhdGVPYmouc2V0KHBhcnQua2V5LCBudik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0Q2hhcnMucHVzaChlLmtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3U3RyID0gcGFyc2VJbnQoYCR7dGhpcy5faW5wdXRDaGFyc1swXX0ke2Uua2V5fWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIgPiAyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IGVkaXRpbmcudHlwZWRWYWx1ZT8ubGVuZ3RoID09PSAxID8gXCIwXCIgKyBlZGl0aW5nLnR5cGVkVmFsdWUgOiBlZGl0aW5nLnR5cGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmVkaXRpbmdEYXRlT2JqLnNldCgnaG91cicsIHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0RhdGVPYmogPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZXRlY3RWYWx1ZUNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5wdXRDaGFycy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXRDaGFycy5wdXNoKGUua2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gYDAke2Uua2V5fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpID4gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFySW5wdXRCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9pbnB1dENoYXJzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdTdHIgPSBwYXJzZUludChgJHt0aGlzLl9pbnB1dENoYXJzWzBdfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RyID4gNTkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0aW5nLnR5cGVkVmFsdWUgPSBgMCR7ZS5rZXl9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRpbmcudHlwZWRWYWx1ZSA9IG5ld1N0ci50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJJbnB1dEJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWRpdGluZy50eXBlZFZhbHVlID0gZWRpdGluZy50eXBlZFZhbHVlPy5sZW5ndGggPT09IDEgPyBcIjBcIiArIGVkaXRpbmcudHlwZWRWYWx1ZSA6IGVkaXRpbmcudHlwZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5lZGl0aW5nRGF0ZU9iai5zZXQocGFydC5rZXksIHBhcnNlSW50KGVkaXRpbmcudHlwZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nRGF0ZU9iaiA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV0ZWN0VmFsdWVDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgICAgICAgIGdvTmV4dCgpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKioqKioqKioqKioqKiogIEVtaXQgRXZlbnQgICoqKioqKioqKioqKioqL1xuICAgICAgICBzdXBlci5lbWl0T25LZXlkb3duRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcImtleXVwXCIsIFtcIiRldmVudFwiXSlcbiAgICBfaGFuZGxlS2V5VXBFdmVudChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVBhcnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVGb2N1c0V2ZW50KGU6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy90aGlzLl9oaWdobGlnaHRBY3RpdmVQYXJ0KCk7XG4gICAgICAgIHN1cGVyLmVtaXRPbkZvY3VzRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVCbHVyRXZlbnQoZTogRm9jdXNFdmVudCkge1xuICAgICAgICBzdXBlci5lbWl0T25CbHVyRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVPbklucHV0Q2xpY2tFdmVudChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGV0ZWN0UGFydEF0UG9zaXRpb24oKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHN1cGVyLmVtaXRPbkNsaWNrRXZlbnQoZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGV0ZWN0UGFydEF0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWlucHV0LnZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzU3RhcnQgPSBpbnB1dC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgY29uc3QgcmUgPSAvW2EtekEtWjAtOV0rL2dpO1xuICAgICAgICBjb25zdCB2YWx1ZVBhcnRzID0gQXJyYXkuZnJvbShpbnB1dC52YWx1ZS5tYXRjaEFsbChyZSkpO1xuICAgICAgICBjb25zdCBvcmRlcmVkUGFydHMgPSB0aGlzLl9nZXRPcmRlcmVkUGFydHMoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB2YWx1ZVBhcnRzLmZpbmRJbmRleCgoYzogYW55KSA9PiBjLmluZGV4IDw9IHNTdGFydCAmJiAoYy5pbmRleCArIGNbMF0ubGVuZ3RoKSA+PSBzU3RhcnQpO1xuICAgICAgICB0aGlzLmFjdGl2ZVBhcnQgPSBvcmRlcmVkUGFydHNbaW5kZXhdLmtleTtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWN0aXZlUGFydCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hpZ2hsaWdodEFjdGl2ZVBhcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWlucHV0LnZhbHVlIHx8ICF0aGlzLmFjdGl2ZVBhcnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG9yZGVyZWRQYXJ0cyA9IHRoaXMuX2dldE9yZGVyZWRQYXJ0cygpO1xuICAgICAgICBjb25zdCBpbmRleCA9IG9yZGVyZWRQYXJ0cy5maW5kSW5kZXgoYyA9PiBjLmtleSA9PSB0aGlzLmFjdGl2ZVBhcnQpO1xuICAgICAgICBjb25zdCByZSA9IC9bYS16QS1aMC05XSsvZ2k7XG4gICAgICAgIGNvbnN0IHZhbHVlUGFydHMgPSBBcnJheS5mcm9tKGlucHV0LnZhbHVlLm1hdGNoQWxsKHJlKSk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gQVhTdHJpbmdVdGlsLmdldFdvcmRCb3VuZHNBdFBvc2l0aW9uKFxuICAgICAgICAgICAgaW5wdXQudmFsdWUsIHZhbHVlUGFydHNbaW5kZXhdLmluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RldGVjdFZhbHVlQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5jb21taXRWYWx1ZSh0aGlzLl9lZGl0aW5nRGF0ZU9iai5kYXRlLCB0cnVlKTtcbiAgICB9XG59XG4iLCI8aW5wdXQgI2lucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGF1dG9jb3JyZWN0PVwib2ZmXCIgYXV0b2NhcGl0YWxpemU9XCJvZmZcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiBjbGFzcz1cImF4LWlucHV0XCIgdHlwZT1cInRleHRcIlxuICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2NsYXNzLmF4LXN0YXRlLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLmF4LXN0YXRlLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIFtuZ01vZGVsXT1cIl9lZGl0aW5nVGV4dFwiIChtb3VzZXVwKT1cIl9oYW5kbGVPbklucHV0Q2xpY2tFdmVudCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJfaGFuZGxlQmx1ckV2ZW50KCRldmVudClcIiAoZm9jdXMpPVwiX2hhbmRsZUZvY3VzRXZlbnQoJGV2ZW50KVwiPiJdfQ==