@leanix/components 0.2.227 → 0.2.230

Sign up to get free protection for your applications and to get access to all the features.
Files changed (348) hide show
  1. package/esm2020/index.mjs +119 -0
  2. package/esm2020/leanix-components.mjs +5 -0
  3. package/esm2020/lib/core-ui/annotations/required.mjs +33 -0
  4. package/esm2020/lib/core-ui/components/badge/badge.component.mjs +25 -0
  5. package/esm2020/lib/core-ui/components/button/button.component.mjs +72 -0
  6. package/esm2020/lib/core-ui/components/button-group/button-group.component.mjs +28 -0
  7. package/esm2020/lib/core-ui/components/card/card.component.mjs +19 -0
  8. package/esm2020/lib/core-ui/components/collapsible/collapsible.component.mjs +53 -0
  9. package/esm2020/lib/core-ui/components/colored-label/colored-label.component.mjs +34 -0
  10. package/esm2020/lib/core-ui/components/ellipsis/ellipsis.component.mjs +70 -0
  11. package/esm2020/lib/core-ui/components/icon-scale/icon-scale.component.mjs +40 -0
  12. package/esm2020/lib/core-ui/components/spinner/spinner.component.mjs +26 -0
  13. package/esm2020/lib/core-ui/components/table/table-header/table-header.component.mjs +55 -0
  14. package/esm2020/lib/core-ui/components/table/table.component.mjs +69 -0
  15. package/esm2020/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +11 -0
  16. package/esm2020/lib/core-ui/core-ui.constants.mjs +13 -0
  17. package/esm2020/lib/core-ui/core-ui.module.mjs +177 -0
  18. package/esm2020/lib/core-ui/directives/after-view-init.directive.mjs +30 -0
  19. package/esm2020/lib/core-ui/directives/autoclose-group.service.mjs +38 -0
  20. package/esm2020/lib/core-ui/directives/autoclose.directive.mjs +40 -0
  21. package/esm2020/lib/core-ui/directives/autofocus.directive.mjs +27 -0
  22. package/esm2020/lib/core-ui/directives/html.directive.mjs +29 -0
  23. package/esm2020/lib/core-ui/functions/core-css.helpers.mjs +35 -0
  24. package/esm2020/lib/core-ui/pipes/br.pipe.mjs +23 -0
  25. package/esm2020/lib/core-ui/pipes/contrast-color.pipe.mjs +20 -0
  26. package/esm2020/lib/core-ui/pipes/custom-date.pipe.mjs +27 -0
  27. package/esm2020/lib/core-ui/pipes/highlight-range.pipe.mjs +21 -0
  28. package/esm2020/lib/core-ui/pipes/highlight-term.pipe.mjs +38 -0
  29. package/esm2020/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +21 -0
  30. package/esm2020/lib/core-ui/pipes/lx-time-ago.pipe.mjs +25 -0
  31. package/esm2020/lib/core-ui/pipes/lx-translate.pipe.mjs +45 -0
  32. package/esm2020/lib/core-ui/pipes/markdown.pipe.mjs +29 -0
  33. package/esm2020/lib/core-ui/pipes/nbsp.pipe.mjs +14 -0
  34. package/esm2020/lib/core-ui/pipes/sort.pipe.mjs +52 -0
  35. package/esm2020/lib/core-ui/pipes/translation-after.pipe.mjs +28 -0
  36. package/esm2020/lib/core-ui/pipes/translation-before.pipe.mjs +53 -0
  37. package/esm2020/lib/core-ui/pipes/translation-between.pipe.mjs +67 -0
  38. package/esm2020/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +16 -0
  39. package/esm2020/lib/core-ui/tooltip/to-cdk-position.function.mjs +74 -0
  40. package/esm2020/lib/core-ui/tooltip/tooltip-position.interface.mjs +7 -0
  41. package/esm2020/lib/core-ui/tooltip/tooltip.component.mjs +26 -0
  42. package/esm2020/lib/core-ui/tooltip/tooltip.directive.mjs +102 -0
  43. package/esm2020/lib/core-ui/tooltip/tooltip.module.mjs +21 -0
  44. package/esm2020/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +103 -0
  45. package/esm2020/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +33 -0
  46. package/esm2020/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +216 -0
  47. package/esm2020/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +136 -0
  48. package/esm2020/lib/forms-ui/components/currency/currency-input.component.mjs +141 -0
  49. package/esm2020/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +105 -0
  50. package/esm2020/lib/forms-ui/components/currency/currency-symbol.component.mjs +25 -0
  51. package/esm2020/lib/forms-ui/components/date-input/date-input.component.mjs +270 -0
  52. package/esm2020/lib/forms-ui/components/drag-and-drop-list/constants.mjs +5 -0
  53. package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +49 -0
  54. package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +102 -0
  55. package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +25 -0
  56. package/esm2020/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +133 -0
  57. package/esm2020/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +37 -0
  58. package/esm2020/lib/forms-ui/components/error-message/error-message.component.mjs +24 -0
  59. package/esm2020/lib/forms-ui/components/form-error/form-error.component.mjs +40 -0
  60. package/esm2020/lib/forms-ui/components/icon/icon.component.mjs +44 -0
  61. package/esm2020/lib/forms-ui/components/input/input.component.mjs +44 -0
  62. package/esm2020/lib/forms-ui/components/keyboard-select.directive.mjs +116 -0
  63. package/esm2020/lib/forms-ui/components/multi-select/multi-select.component.mjs +251 -0
  64. package/esm2020/lib/forms-ui/components/option/option.component.mjs +81 -0
  65. package/esm2020/lib/forms-ui/components/option-group/option-group.component.mjs +29 -0
  66. package/esm2020/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +100 -0
  67. package/esm2020/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +163 -0
  68. package/esm2020/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +92 -0
  69. package/esm2020/lib/forms-ui/components/picker/picker-trigger.directive.mjs +36 -0
  70. package/esm2020/lib/forms-ui/components/picker/picker.component.mjs +201 -0
  71. package/esm2020/lib/forms-ui/components/picker-option/picker-option.component.mjs +118 -0
  72. package/esm2020/lib/forms-ui/components/pill-item/pill-item.component.mjs +33 -0
  73. package/esm2020/lib/forms-ui/components/pill-list/pill-list.component.mjs +59 -0
  74. package/esm2020/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +97 -0
  75. package/esm2020/lib/forms-ui/components/single-select/single-select.component.mjs +274 -0
  76. package/esm2020/lib/forms-ui/components/slider-toggle/slider-toggle.component.mjs +42 -0
  77. package/esm2020/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +52 -0
  78. package/esm2020/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +21 -0
  79. package/esm2020/lib/forms-ui/directives/form-error.directive.mjs +109 -0
  80. package/esm2020/lib/forms-ui/directives/form-submit.directive.mjs +28 -0
  81. package/esm2020/lib/forms-ui/directives/keyboard-action-source.directive.mjs +53 -0
  82. package/esm2020/lib/forms-ui/directives/mark-invalid.directive.mjs +38 -0
  83. package/esm2020/lib/forms-ui/directives/select-dropdown.directive.mjs +31 -0
  84. package/esm2020/lib/forms-ui/directives/selectable-item.directive.mjs +33 -0
  85. package/esm2020/lib/forms-ui/directives/selected-option.directive.mjs +26 -0
  86. package/esm2020/lib/forms-ui/forms-ui.module.mjs +236 -0
  87. package/esm2020/lib/forms-ui/helpers/key-codes.constants.mjs +11 -0
  88. package/esm2020/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +38 -0
  89. package/esm2020/lib/forms-ui/models/base-select.directive.mjs +148 -0
  90. package/esm2020/lib/forms-ui/models/dropdown-item.interface.mjs +2 -0
  91. package/esm2020/lib/forms-ui/models/single-select-padding.interface.mjs +2 -0
  92. package/esm2020/lib/forms-ui/models/sorting.interface.mjs +7 -0
  93. package/esm2020/lib/forms-ui/pipes/filter-selection.pipe.mjs +30 -0
  94. package/esm2020/lib/forms-ui/pipes/filter-term.pipe.mjs +26 -0
  95. package/esm2020/lib/forms-ui/pipes/format-number.pipe.mjs +65 -0
  96. package/esm2020/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +26 -0
  97. package/esm2020/lib/modal-ui/components/modal/modal.component.mjs +205 -0
  98. package/esm2020/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +11 -0
  99. package/esm2020/lib/modal-ui/components/modal-header/modal-header.component.mjs +23 -0
  100. package/esm2020/lib/modal-ui/directives/modal-content.directive.mjs +13 -0
  101. package/esm2020/lib/modal-ui/modal.constants.mjs +3 -0
  102. package/esm2020/lib/modal-ui/modal.module.mjs +26 -0
  103. package/esm2020/lib/popover-ui/components/popover/popover.component.mjs +199 -0
  104. package/esm2020/lib/popover-ui/directives/popover-click.directive.mjs +51 -0
  105. package/esm2020/lib/popover-ui/directives/popover-content.directive.mjs +16 -0
  106. package/esm2020/lib/popover-ui/directives/popover-hover.directive.mjs +87 -0
  107. package/esm2020/lib/popover-ui/popover-ui.module.mjs +22 -0
  108. package/esm2020/lib/shared/date-helpers.mjs +35 -0
  109. package/esm2020/lib/shared/misc-helpers.mjs +34 -0
  110. package/esm2020/lib/shared/observe.mjs +40 -0
  111. package/esm2020/lib/tab-ui/components/tab/tab.component.mjs +70 -0
  112. package/esm2020/lib/tab-ui/components/tab-group/tab-group.component.mjs +71 -0
  113. package/esm2020/lib/tab-ui/tab-ui.module.mjs +22 -0
  114. package/fesm2015/{leanix-components.js → leanix-components.mjs} +681 -692
  115. package/fesm2015/leanix-components.mjs.map +1 -0
  116. package/fesm2020/leanix-components.mjs +6207 -0
  117. package/fesm2020/leanix-components.mjs.map +1 -0
  118. package/index.d.ts +1 -0
  119. package/lib/core-ui/functions/core-css.helpers.d.ts +7 -0
  120. package/lib/forms-ui/components/drag-and-drop-list/constants.d.ts +4 -0
  121. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.d.ts +7 -6
  122. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.d.ts +23 -17
  123. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.d.ts +14 -0
  124. package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.d.ts +36 -0
  125. package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.d.ts +14 -0
  126. package/lib/forms-ui/forms-ui.module.d.ts +41 -43
  127. package/package.json +23 -9
  128. package/bundles/leanix-components.umd.js +0 -7162
  129. package/bundles/leanix-components.umd.js.map +0 -1
  130. package/esm2015/index.js +0 -117
  131. package/esm2015/index.js.map +0 -1
  132. package/esm2015/leanix-components.js +0 -5
  133. package/esm2015/leanix-components.js.map +0 -1
  134. package/esm2015/lib/core-ui/annotations/required.js +0 -33
  135. package/esm2015/lib/core-ui/annotations/required.js.map +0 -1
  136. package/esm2015/lib/core-ui/components/badge/badge.component.js +0 -29
  137. package/esm2015/lib/core-ui/components/badge/badge.component.js.map +0 -1
  138. package/esm2015/lib/core-ui/components/button/button.component.js +0 -78
  139. package/esm2015/lib/core-ui/components/button/button.component.js.map +0 -1
  140. package/esm2015/lib/core-ui/components/button-group/button-group.component.js +0 -32
  141. package/esm2015/lib/core-ui/components/button-group/button-group.component.js.map +0 -1
  142. package/esm2015/lib/core-ui/components/card/card.component.js +0 -23
  143. package/esm2015/lib/core-ui/components/card/card.component.js.map +0 -1
  144. package/esm2015/lib/core-ui/components/collapsible/collapsible.component.js +0 -58
  145. package/esm2015/lib/core-ui/components/collapsible/collapsible.component.js.map +0 -1
  146. package/esm2015/lib/core-ui/components/colored-label/colored-label.component.js +0 -39
  147. package/esm2015/lib/core-ui/components/colored-label/colored-label.component.js.map +0 -1
  148. package/esm2015/lib/core-ui/components/ellipsis/ellipsis.component.js +0 -74
  149. package/esm2015/lib/core-ui/components/ellipsis/ellipsis.component.js.map +0 -1
  150. package/esm2015/lib/core-ui/components/icon-scale/icon-scale.component.js +0 -46
  151. package/esm2015/lib/core-ui/components/icon-scale/icon-scale.component.js.map +0 -1
  152. package/esm2015/lib/core-ui/components/spinner/spinner.component.js +0 -30
  153. package/esm2015/lib/core-ui/components/spinner/spinner.component.js.map +0 -1
  154. package/esm2015/lib/core-ui/components/table/table-header/table-header.component.js +0 -60
  155. package/esm2015/lib/core-ui/components/table/table-header/table-header.component.js.map +0 -1
  156. package/esm2015/lib/core-ui/components/table/table.component.js +0 -70
  157. package/esm2015/lib/core-ui/components/table/table.component.js.map +0 -1
  158. package/esm2015/lib/core-ui/components/tiny-spinner/tiny-spinner.component.js +0 -14
  159. package/esm2015/lib/core-ui/components/tiny-spinner/tiny-spinner.component.js.map +0 -1
  160. package/esm2015/lib/core-ui/core-ui.constants.js +0 -13
  161. package/esm2015/lib/core-ui/core-ui.constants.js.map +0 -1
  162. package/esm2015/lib/core-ui/core-ui.module.js +0 -177
  163. package/esm2015/lib/core-ui/core-ui.module.js.map +0 -1
  164. package/esm2015/lib/core-ui/directives/after-view-init.directive.js +0 -30
  165. package/esm2015/lib/core-ui/directives/after-view-init.directive.js.map +0 -1
  166. package/esm2015/lib/core-ui/directives/autoclose-group.service.js +0 -38
  167. package/esm2015/lib/core-ui/directives/autoclose-group.service.js.map +0 -1
  168. package/esm2015/lib/core-ui/directives/autoclose.directive.js +0 -40
  169. package/esm2015/lib/core-ui/directives/autoclose.directive.js.map +0 -1
  170. package/esm2015/lib/core-ui/directives/autofocus.directive.js +0 -27
  171. package/esm2015/lib/core-ui/directives/autofocus.directive.js.map +0 -1
  172. package/esm2015/lib/core-ui/directives/html.directive.js +0 -30
  173. package/esm2015/lib/core-ui/directives/html.directive.js.map +0 -1
  174. package/esm2015/lib/core-ui/functions/core-css.helpers.js +0 -23
  175. package/esm2015/lib/core-ui/functions/core-css.helpers.js.map +0 -1
  176. package/esm2015/lib/core-ui/pipes/br.pipe.js +0 -23
  177. package/esm2015/lib/core-ui/pipes/br.pipe.js.map +0 -1
  178. package/esm2015/lib/core-ui/pipes/contrast-color.pipe.js +0 -20
  179. package/esm2015/lib/core-ui/pipes/contrast-color.pipe.js.map +0 -1
  180. package/esm2015/lib/core-ui/pipes/custom-date.pipe.js +0 -27
  181. package/esm2015/lib/core-ui/pipes/custom-date.pipe.js.map +0 -1
  182. package/esm2015/lib/core-ui/pipes/highlight-range.pipe.js +0 -21
  183. package/esm2015/lib/core-ui/pipes/highlight-range.pipe.js.map +0 -1
  184. package/esm2015/lib/core-ui/pipes/highlight-term.pipe.js +0 -38
  185. package/esm2015/lib/core-ui/pipes/highlight-term.pipe.js.map +0 -1
  186. package/esm2015/lib/core-ui/pipes/lx-is-uuid.pipe.js +0 -21
  187. package/esm2015/lib/core-ui/pipes/lx-is-uuid.pipe.js.map +0 -1
  188. package/esm2015/lib/core-ui/pipes/lx-time-ago.pipe.js +0 -25
  189. package/esm2015/lib/core-ui/pipes/lx-time-ago.pipe.js.map +0 -1
  190. package/esm2015/lib/core-ui/pipes/lx-translate.pipe.js +0 -46
  191. package/esm2015/lib/core-ui/pipes/lx-translate.pipe.js.map +0 -1
  192. package/esm2015/lib/core-ui/pipes/markdown.pipe.js +0 -29
  193. package/esm2015/lib/core-ui/pipes/markdown.pipe.js.map +0 -1
  194. package/esm2015/lib/core-ui/pipes/nbsp.pipe.js +0 -14
  195. package/esm2015/lib/core-ui/pipes/nbsp.pipe.js.map +0 -1
  196. package/esm2015/lib/core-ui/pipes/sort.pipe.js +0 -52
  197. package/esm2015/lib/core-ui/pipes/sort.pipe.js.map +0 -1
  198. package/esm2015/lib/core-ui/pipes/translation-after.pipe.js +0 -28
  199. package/esm2015/lib/core-ui/pipes/translation-after.pipe.js.map +0 -1
  200. package/esm2015/lib/core-ui/pipes/translation-before.pipe.js +0 -53
  201. package/esm2015/lib/core-ui/pipes/translation-before.pipe.js.map +0 -1
  202. package/esm2015/lib/core-ui/pipes/translation-between.pipe.js +0 -67
  203. package/esm2015/lib/core-ui/pipes/translation-between.pipe.js.map +0 -1
  204. package/esm2015/lib/core-ui/pipes/unescape-curly-braces.pipe.js +0 -16
  205. package/esm2015/lib/core-ui/pipes/unescape-curly-braces.pipe.js.map +0 -1
  206. package/esm2015/lib/core-ui/tooltip/to-cdk-position.function.js +0 -74
  207. package/esm2015/lib/core-ui/tooltip/to-cdk-position.function.js.map +0 -1
  208. package/esm2015/lib/core-ui/tooltip/tooltip-position.interface.js +0 -7
  209. package/esm2015/lib/core-ui/tooltip/tooltip-position.interface.js.map +0 -1
  210. package/esm2015/lib/core-ui/tooltip/tooltip.component.js +0 -30
  211. package/esm2015/lib/core-ui/tooltip/tooltip.component.js.map +0 -1
  212. package/esm2015/lib/core-ui/tooltip/tooltip.directive.js +0 -107
  213. package/esm2015/lib/core-ui/tooltip/tooltip.directive.js.map +0 -1
  214. package/esm2015/lib/core-ui/tooltip/tooltip.module.js +0 -21
  215. package/esm2015/lib/core-ui/tooltip/tooltip.module.js.map +0 -1
  216. package/esm2015/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.js +0 -108
  217. package/esm2015/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.js.map +0 -1
  218. package/esm2015/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.js +0 -38
  219. package/esm2015/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.js.map +0 -1
  220. package/esm2015/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.js +0 -223
  221. package/esm2015/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.js.map +0 -1
  222. package/esm2015/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.js +0 -140
  223. package/esm2015/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.js.map +0 -1
  224. package/esm2015/lib/forms-ui/components/currency/currency-input.component.js +0 -147
  225. package/esm2015/lib/forms-ui/components/currency/currency-input.component.js.map +0 -1
  226. package/esm2015/lib/forms-ui/components/currency/currency-symbol-map.constant.js +0 -105
  227. package/esm2015/lib/forms-ui/components/currency/currency-symbol-map.constant.js.map +0 -1
  228. package/esm2015/lib/forms-ui/components/currency/currency-symbol.component.js +0 -28
  229. package/esm2015/lib/forms-ui/components/currency/currency-symbol.component.js.map +0 -1
  230. package/esm2015/lib/forms-ui/components/date-input/date-input.component.js +0 -276
  231. package/esm2015/lib/forms-ui/components/date-input/date-input.component.js.map +0 -1
  232. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.js +0 -57
  233. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.js.map +0 -1
  234. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.js +0 -99
  235. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.js.map +0 -1
  236. package/esm2015/lib/forms-ui/components/error-message/error-message.component.js +0 -29
  237. package/esm2015/lib/forms-ui/components/error-message/error-message.component.js.map +0 -1
  238. package/esm2015/lib/forms-ui/components/form-error/form-error.component.js +0 -44
  239. package/esm2015/lib/forms-ui/components/form-error/form-error.component.js.map +0 -1
  240. package/esm2015/lib/forms-ui/components/icon/icon.component.js +0 -49
  241. package/esm2015/lib/forms-ui/components/icon/icon.component.js.map +0 -1
  242. package/esm2015/lib/forms-ui/components/input/input.component.js +0 -51
  243. package/esm2015/lib/forms-ui/components/input/input.component.js.map +0 -1
  244. package/esm2015/lib/forms-ui/components/keyboard-select.directive.js +0 -117
  245. package/esm2015/lib/forms-ui/components/keyboard-select.directive.js.map +0 -1
  246. package/esm2015/lib/forms-ui/components/multi-select/multi-select.component.js +0 -257
  247. package/esm2015/lib/forms-ui/components/multi-select/multi-select.component.js.map +0 -1
  248. package/esm2015/lib/forms-ui/components/option/option.component.js +0 -85
  249. package/esm2015/lib/forms-ui/components/option/option.component.js.map +0 -1
  250. package/esm2015/lib/forms-ui/components/option-group/option-group.component.js +0 -34
  251. package/esm2015/lib/forms-ui/components/option-group/option-group.component.js.map +0 -1
  252. package/esm2015/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.js +0 -105
  253. package/esm2015/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.js.map +0 -1
  254. package/esm2015/lib/forms-ui/components/options-dropdown/options-dropdown.component.js +0 -169
  255. package/esm2015/lib/forms-ui/components/options-dropdown/options-dropdown.component.js.map +0 -1
  256. package/esm2015/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.js +0 -96
  257. package/esm2015/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.js.map +0 -1
  258. package/esm2015/lib/forms-ui/components/picker/picker-trigger.directive.js +0 -36
  259. package/esm2015/lib/forms-ui/components/picker/picker-trigger.directive.js.map +0 -1
  260. package/esm2015/lib/forms-ui/components/picker/picker.component.js +0 -210
  261. package/esm2015/lib/forms-ui/components/picker/picker.component.js.map +0 -1
  262. package/esm2015/lib/forms-ui/components/picker-option/picker-option.component.js +0 -124
  263. package/esm2015/lib/forms-ui/components/picker-option/picker-option.component.js.map +0 -1
  264. package/esm2015/lib/forms-ui/components/pill-item/pill-item.component.js +0 -37
  265. package/esm2015/lib/forms-ui/components/pill-item/pill-item.component.js.map +0 -1
  266. package/esm2015/lib/forms-ui/components/pill-list/pill-list.component.js +0 -64
  267. package/esm2015/lib/forms-ui/components/pill-list/pill-list.component.js.map +0 -1
  268. package/esm2015/lib/forms-ui/components/responsive-input/responsive-input.component.js +0 -104
  269. package/esm2015/lib/forms-ui/components/responsive-input/responsive-input.component.js.map +0 -1
  270. package/esm2015/lib/forms-ui/components/single-select/single-select.component.js +0 -279
  271. package/esm2015/lib/forms-ui/components/single-select/single-select.component.js.map +0 -1
  272. package/esm2015/lib/forms-ui/components/slider-toggle/slider-toggle.component.js +0 -47
  273. package/esm2015/lib/forms-ui/components/slider-toggle/slider-toggle.component.js.map +0 -1
  274. package/esm2015/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.js +0 -56
  275. package/esm2015/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.js.map +0 -1
  276. package/esm2015/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.js +0 -25
  277. package/esm2015/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.js.map +0 -1
  278. package/esm2015/lib/forms-ui/directives/form-error.directive.js +0 -111
  279. package/esm2015/lib/forms-ui/directives/form-error.directive.js.map +0 -1
  280. package/esm2015/lib/forms-ui/directives/form-submit.directive.js +0 -28
  281. package/esm2015/lib/forms-ui/directives/form-submit.directive.js.map +0 -1
  282. package/esm2015/lib/forms-ui/directives/keyboard-action-source.directive.js +0 -53
  283. package/esm2015/lib/forms-ui/directives/keyboard-action-source.directive.js.map +0 -1
  284. package/esm2015/lib/forms-ui/directives/mark-invalid.directive.js +0 -38
  285. package/esm2015/lib/forms-ui/directives/mark-invalid.directive.js.map +0 -1
  286. package/esm2015/lib/forms-ui/directives/select-dropdown.directive.js +0 -31
  287. package/esm2015/lib/forms-ui/directives/select-dropdown.directive.js.map +0 -1
  288. package/esm2015/lib/forms-ui/directives/selectable-item.directive.js +0 -33
  289. package/esm2015/lib/forms-ui/directives/selectable-item.directive.js.map +0 -1
  290. package/esm2015/lib/forms-ui/directives/selected-option.directive.js +0 -26
  291. package/esm2015/lib/forms-ui/directives/selected-option.directive.js.map +0 -1
  292. package/esm2015/lib/forms-ui/forms-ui.module.js +0 -244
  293. package/esm2015/lib/forms-ui/forms-ui.module.js.map +0 -1
  294. package/esm2015/lib/forms-ui/helpers/key-codes.constants.js +0 -11
  295. package/esm2015/lib/forms-ui/helpers/key-codes.constants.js.map +0 -1
  296. package/esm2015/lib/forms-ui/helpers/keyboard-navigation.helpers.js +0 -38
  297. package/esm2015/lib/forms-ui/helpers/keyboard-navigation.helpers.js.map +0 -1
  298. package/esm2015/lib/forms-ui/models/base-select.directive.js +0 -148
  299. package/esm2015/lib/forms-ui/models/base-select.directive.js.map +0 -1
  300. package/esm2015/lib/forms-ui/models/dropdown-item.interface.js +0 -2
  301. package/esm2015/lib/forms-ui/models/dropdown-item.interface.js.map +0 -1
  302. package/esm2015/lib/forms-ui/models/single-select-padding.interface.js +0 -2
  303. package/esm2015/lib/forms-ui/models/single-select-padding.interface.js.map +0 -1
  304. package/esm2015/lib/forms-ui/models/sorting.interface.js +0 -7
  305. package/esm2015/lib/forms-ui/models/sorting.interface.js.map +0 -1
  306. package/esm2015/lib/forms-ui/pipes/filter-selection.pipe.js +0 -30
  307. package/esm2015/lib/forms-ui/pipes/filter-selection.pipe.js.map +0 -1
  308. package/esm2015/lib/forms-ui/pipes/filter-term.pipe.js +0 -26
  309. package/esm2015/lib/forms-ui/pipes/filter-term.pipe.js.map +0 -1
  310. package/esm2015/lib/forms-ui/pipes/format-number.pipe.js +0 -65
  311. package/esm2015/lib/forms-ui/pipes/format-number.pipe.js.map +0 -1
  312. package/esm2015/lib/forms-ui/validators/date-in-foreseeable-future.validator.js +0 -26
  313. package/esm2015/lib/forms-ui/validators/date-in-foreseeable-future.validator.js.map +0 -1
  314. package/esm2015/lib/modal-ui/components/modal/modal.component.js +0 -214
  315. package/esm2015/lib/modal-ui/components/modal/modal.component.js.map +0 -1
  316. package/esm2015/lib/modal-ui/components/modal-footer/modal-footer.component.js +0 -15
  317. package/esm2015/lib/modal-ui/components/modal-footer/modal-footer.component.js.map +0 -1
  318. package/esm2015/lib/modal-ui/components/modal-header/modal-header.component.js +0 -27
  319. package/esm2015/lib/modal-ui/components/modal-header/modal-header.component.js.map +0 -1
  320. package/esm2015/lib/modal-ui/directives/modal-content.directive.js +0 -13
  321. package/esm2015/lib/modal-ui/directives/modal-content.directive.js.map +0 -1
  322. package/esm2015/lib/modal-ui/modal.constants.js +0 -3
  323. package/esm2015/lib/modal-ui/modal.constants.js.map +0 -1
  324. package/esm2015/lib/modal-ui/modal.module.js +0 -26
  325. package/esm2015/lib/modal-ui/modal.module.js.map +0 -1
  326. package/esm2015/lib/popover-ui/components/popover/popover.component.js +0 -203
  327. package/esm2015/lib/popover-ui/components/popover/popover.component.js.map +0 -1
  328. package/esm2015/lib/popover-ui/directives/popover-click.directive.js +0 -51
  329. package/esm2015/lib/popover-ui/directives/popover-click.directive.js.map +0 -1
  330. package/esm2015/lib/popover-ui/directives/popover-content.directive.js +0 -16
  331. package/esm2015/lib/popover-ui/directives/popover-content.directive.js.map +0 -1
  332. package/esm2015/lib/popover-ui/directives/popover-hover.directive.js +0 -87
  333. package/esm2015/lib/popover-ui/directives/popover-hover.directive.js.map +0 -1
  334. package/esm2015/lib/popover-ui/popover-ui.module.js +0 -22
  335. package/esm2015/lib/popover-ui/popover-ui.module.js.map +0 -1
  336. package/esm2015/lib/shared/date-helpers.js +0 -35
  337. package/esm2015/lib/shared/date-helpers.js.map +0 -1
  338. package/esm2015/lib/shared/misc-helpers.js +0 -34
  339. package/esm2015/lib/shared/misc-helpers.js.map +0 -1
  340. package/esm2015/lib/shared/observe.js +0 -40
  341. package/esm2015/lib/shared/observe.js.map +0 -1
  342. package/esm2015/lib/tab-ui/components/tab/tab.component.js +0 -75
  343. package/esm2015/lib/tab-ui/components/tab/tab.component.js.map +0 -1
  344. package/esm2015/lib/tab-ui/components/tab-group/tab-group.component.js +0 -78
  345. package/esm2015/lib/tab-ui/components/tab-group/tab-group.component.js.map +0 -1
  346. package/esm2015/lib/tab-ui/tab-ui.module.js +0 -22
  347. package/esm2015/lib/tab-ui/tab-ui.module.js.map +0 -1
  348. package/fesm2015/leanix-components.js.map +0 -1
@@ -0,0 +1,216 @@
1
+ import { CdkConnectedOverlay } from '@angular/cdk/overlay';
2
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Input, ViewChild } from '@angular/core';
3
+ import { BehaviorSubject, combineLatest, fromEvent, merge, Subject } from 'rxjs';
4
+ import { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, takeUntil, withLatestFrom } from 'rxjs/operators';
5
+ import { TooltipDirective } from '../../../core-ui/tooltip/tooltip.directive';
6
+ import { KeyboardActionSourceDirective } from '../../directives/keyboard-action-source.directive';
7
+ import { KeyboardSelectAction } from '../keyboard-select.directive';
8
+ import { OptionComponent } from '../option/option.component';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/cdk/overlay";
11
+ const BOTTOM_LEFT_POSITION = {
12
+ originX: 'end',
13
+ overlayX: 'end',
14
+ originY: 'bottom',
15
+ overlayY: 'top'
16
+ };
17
+ const BOTTOM_RIGHT_POSITION = {
18
+ originX: 'start',
19
+ overlayX: 'start',
20
+ originY: 'bottom',
21
+ overlayY: 'top'
22
+ };
23
+ const TOP_LEFT_POSITION = {
24
+ originX: 'end',
25
+ overlayX: 'end',
26
+ originY: 'top',
27
+ overlayY: 'bottom'
28
+ };
29
+ const TOP_RIGHT_POSITION = {
30
+ originX: 'start',
31
+ overlayX: 'start',
32
+ originY: 'top',
33
+ overlayY: 'bottom'
34
+ };
35
+ const LEFT_ALIGN_POSITIONS = [BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION, BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION];
36
+ const RIGHT_ALIGN_POSITIONS = [BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION, BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION];
37
+ export class CdkOptionsDropdownComponent {
38
+ constructor(changeDetection) {
39
+ this.changeDetection = changeDetection;
40
+ this.align = 'right';
41
+ this.closeOnScroll = false;
42
+ this.disabled = false;
43
+ this.maxHeight = 'none';
44
+ this.highlightedOptionIndex$ = new BehaviorSubject(0);
45
+ this._open = false;
46
+ this.isSubdropdownExpanded = false;
47
+ this.destroyed$ = new Subject();
48
+ this.isPositionComputed = true;
49
+ }
50
+ set open(value) {
51
+ if (this.disabled) {
52
+ return;
53
+ }
54
+ this._open = value;
55
+ if (this.trigger) {
56
+ // Don't emit keyboard actions while the dropdown is not open yet.
57
+ this.trigger.dontEmit = !this.open;
58
+ }
59
+ if (this.open) {
60
+ this.isSubdropdownExpanded = false;
61
+ this.setInitialHighlightingIndex();
62
+ }
63
+ this.reloadOverlayPosition(this.open);
64
+ }
65
+ get open() {
66
+ return this._open;
67
+ }
68
+ get options() {
69
+ return this._options.toArray();
70
+ }
71
+ ngAfterViewInit() {
72
+ this.trigger.dontEmit = !this.open;
73
+ this.overlay.positions = this.align === 'left' ? LEFT_ALIGN_POSITIONS : RIGHT_ALIGN_POSITIONS;
74
+ const optionsChanges$ = this._options.changes.pipe(startWith(this._options), map((options) => options.toArray()));
75
+ this.trigger.keyboardActions$
76
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.NEXT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.next(index, options)))
77
+ .subscribe(this.highlightedOptionIndex$);
78
+ this.trigger.keyboardActions$
79
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.PREV), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.prev(index, options)))
80
+ .subscribe(this.highlightedOptionIndex$);
81
+ this.trigger.keyboardActions$
82
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.LEFT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
83
+ .subscribe(this.highlightedOptionIndex$);
84
+ this.trigger.keyboardActions$
85
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.RIGHT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
86
+ .subscribe(this.highlightedOptionIndex$);
87
+ this.trigger.keyboardActions$
88
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.CLOSE))
89
+ .subscribe(() => this.closeDropdown());
90
+ this.trigger.keyboardActions$
91
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.EXECUTE), withLatestFrom(this.highlightedOptionIndex$, (_, index) => index))
92
+ .subscribe((index) => {
93
+ this.options[index]?.selectOption();
94
+ });
95
+ /** Combined stream of all of the child options' select outputs. */
96
+ this._options.changes
97
+ .pipe(startWith(this._options), switchMap(() => merge(...this._options.map((option) => option.select), ...this._options.map((option) => option.selectedClick))), delay(0), takeUntil(this.destroyed$))
98
+ .subscribe((_value) => {
99
+ this.closeDropdown();
100
+ });
101
+ combineLatest([optionsChanges$, this.highlightedOptionIndex$])
102
+ .pipe(delay(0), map(([options, index]) => options[index]), distinctUntilChanged(), takeUntil(this.destroyed$))
103
+ .subscribe((optionToBeHighlighted) => {
104
+ this.options.forEach((option) => option.setHighlighted(optionToBeHighlighted === option));
105
+ this.changeDetection.markForCheck();
106
+ });
107
+ if (this.closeOnScroll) {
108
+ fromEvent(window, 'scroll')
109
+ .pipe(debounceTime(100), takeUntil(this.destroyed$))
110
+ .subscribe(() => {
111
+ this.open = false;
112
+ this.trigger.blur();
113
+ });
114
+ }
115
+ }
116
+ ngOnDestroy() {
117
+ this.destroyed$.next();
118
+ }
119
+ closeDropdown() {
120
+ this.tooltips.toArray().forEach((tooltip) => tooltip.hide());
121
+ this.open = false;
122
+ }
123
+ setInitialHighlightingIndex() {
124
+ const firstAvailableIndex = this.options.map((option) => !this.optionIsHighlightable(option)).indexOf(false, 0);
125
+ this.highlightedOptionIndex$.next(firstAvailableIndex);
126
+ }
127
+ prev(currentIndex, items) {
128
+ if (currentIndex > 0) {
129
+ const prevEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).lastIndexOf(false, currentIndex - 1);
130
+ return prevEnabledIndex !== -1 ? prevEnabledIndex : currentIndex;
131
+ }
132
+ else {
133
+ return currentIndex;
134
+ }
135
+ }
136
+ next(currentIndex, items) {
137
+ if (currentIndex < items.length) {
138
+ const nextEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).indexOf(false, currentIndex + 1);
139
+ return nextEnabledIndex !== -1 ? nextEnabledIndex : currentIndex;
140
+ }
141
+ else {
142
+ return currentIndex;
143
+ }
144
+ }
145
+ expand(currentIndex, items) {
146
+ if (items[currentIndex]?.hasSubdropdown) {
147
+ this.isSubdropdownExpanded = true;
148
+ return this.next(currentIndex, items);
149
+ }
150
+ else {
151
+ return currentIndex;
152
+ }
153
+ }
154
+ collapse(currentIndex, items) {
155
+ if (this.isSubdropdownExpanded) {
156
+ this.isSubdropdownExpanded = false;
157
+ return this.prev(currentIndex, items);
158
+ }
159
+ else {
160
+ return currentIndex;
161
+ }
162
+ }
163
+ optionIsHighlightable(option) {
164
+ const isToplevelOptionAndAllowed = !option.isSuboption && !this.isSubdropdownExpanded;
165
+ const isSecondlevelOptionAndAllowed = option.isSuboption && this.isSubdropdownExpanded;
166
+ return !option.disabled && (isToplevelOptionAndAllowed || isSecondlevelOptionAndAllowed);
167
+ }
168
+ reloadOverlayPosition(open) {
169
+ if (open) {
170
+ this.isPositionComputed = false;
171
+ setTimeout(() => {
172
+ const dropdownElement = this.dropdownContainer.nativeElement;
173
+ this.overlay.overlayRef.updateSize({
174
+ height: dropdownElement.offsetHeight,
175
+ width: dropdownElement.offsetWidth
176
+ });
177
+ this.overlay.overlayRef.updatePosition();
178
+ this.isPositionComputed = true;
179
+ this.changeDetection.markForCheck();
180
+ }, 0);
181
+ }
182
+ else {
183
+ this.changeDetection.markForCheck();
184
+ }
185
+ }
186
+ }
187
+ CdkOptionsDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: CdkOptionsDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
188
+ CdkOptionsDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: CdkOptionsDropdownComponent, selector: "lx-cdk-options-dropdown", inputs: { align: "align", closeOnScroll: "closeOnScroll", disabled: "disabled", maxHeight: "maxHeight" }, queries: [{ propertyName: "trigger", first: true, predicate: KeyboardActionSourceDirective, descendants: true }, { propertyName: "_options", predicate: OptionComponent, descendants: true }, { propertyName: "tooltips", predicate: TooltipDirective, descendants: true }], viewQueries: [{ propertyName: "dropdownContainer", first: true, predicate: ["dropdown"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }], ngImport: i0, template: "<div (click)=\"open = !open\" class=\"triggerContainer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <ng-content select=\"[lxKeyboardActionSource]\"></ng-content>\n</div>\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"open\"\n (overlayOutsideClick)=\"closeDropdown()\"\n>\n <ul\n #dropdown\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n [style.visibility]=\"isPositionComputed ? null : 'hidden'\"\n >\n <ng-content></ng-content>\n </ul>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative}ul{position:absolute;background-color:#fff;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;border:solid 1px #e1e5eb;text-align:left;list-style:none;margin:0;padding-left:0;z-index:20;white-space:nowrap}ul::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}ul::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}ul::-webkit-scrollbar-track-piece{background-color:transparent}ul.left{right:0;padding-right:0}ul.showScrollbar{overflow-y:auto}.triggerContainer{display:inline-block}\n"], directives: [{ type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: CdkOptionsDropdownComponent, decorators: [{
190
+ type: Component,
191
+ args: [{ selector: 'lx-cdk-options-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div (click)=\"open = !open\" class=\"triggerContainer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <ng-content select=\"[lxKeyboardActionSource]\"></ng-content>\n</div>\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"open\"\n (overlayOutsideClick)=\"closeDropdown()\"\n>\n <ul\n #dropdown\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n [style.visibility]=\"isPositionComputed ? null : 'hidden'\"\n >\n <ng-content></ng-content>\n </ul>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative}ul{position:absolute;background-color:#fff;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;border:solid 1px #e1e5eb;text-align:left;list-style:none;margin:0;padding-left:0;z-index:20;white-space:nowrap}ul::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}ul::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}ul::-webkit-scrollbar-track-piece{background-color:transparent}ul.left{right:0;padding-right:0}ul.showScrollbar{overflow-y:auto}.triggerContainer{display:inline-block}\n"] }]
192
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { dropdownContainer: [{
193
+ type: ViewChild,
194
+ args: ['dropdown']
195
+ }], align: [{
196
+ type: Input
197
+ }], closeOnScroll: [{
198
+ type: Input
199
+ }], disabled: [{
200
+ type: Input
201
+ }], maxHeight: [{
202
+ type: Input
203
+ }], trigger: [{
204
+ type: ContentChild,
205
+ args: [KeyboardActionSourceDirective]
206
+ }], overlay: [{
207
+ type: ViewChild,
208
+ args: [CdkConnectedOverlay]
209
+ }], _options: [{
210
+ type: ContentChildren,
211
+ args: [OptionComponent, { descendants: true }]
212
+ }], tooltips: [{
213
+ type: ContentChildren,
214
+ args: [TooltipDirective, { descendants: true }]
215
+ }] } });
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW9wdGlvbnMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9jZGstb3B0aW9ucy1kcm9wZG93bi9jZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Nkay1vcHRpb25zLWRyb3Bkb3duL2Nkay1vcHRpb25zLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQUU3RCxNQUFNLG9CQUFv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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQzs7d0hBdE5VLDJCQUEyQjs0R0FBM0IsMkJBQTJCLDhNQTRCeEIsNkJBQTZCLDhEQUcxQixlQUFlLDhEQUdmLGdCQUFnQix5TEFMdEIsbUJBQW1CLGdEQ3ZGaEMseWtCQWtCQTsyRkR3Q2EsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTTt3R0FHeEIsaUJBQWlCO3NCQUF2QyxTQUFTO3VCQUFDLFVBQVU7Z0JBRVosS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQXNCdUMsT0FBTztzQkFBbkQsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBQ1gsT0FBTztzQkFBdEMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBRzlCLFFBQVE7c0JBRFAsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUl2RCxRQUFRO3NCQURQLGVBQWU7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRlbGF5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUtdWkvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBLZXlib2FyZEFjdGlvblNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMva2V5Ym9hcmQtYWN0aW9uLXNvdXJjZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTZWxlY3RBY3Rpb24gfSBmcm9tICcuLi9rZXlib2FyZC1zZWxlY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbi9vcHRpb24uY29tcG9uZW50JztcblxuY29uc3QgQk9UVE9NX0xFRlRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnZW5kJyxcbiAgb3ZlcmxheVg6ICdlbmQnLFxuICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgb3ZlcmxheVk6ICd0b3AnXG59O1xuXG5jb25zdCBCT1RUT01fUklHSFRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnc3RhcnQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ2JvdHRvbScsXG4gIG92ZXJsYXlZOiAndG9wJ1xufTtcblxuY29uc3QgVE9QX0xFRlRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnZW5kJyxcbiAgb3ZlcmxheVg6ICdlbmQnLFxuICBvcmlnaW5ZOiAndG9wJyxcbiAgb3ZlcmxheVk6ICdib3R0b20nXG59O1xuXG5jb25zdCBUT1BfUklHSFRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnc3RhcnQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ3RvcCcsXG4gIG92ZXJsYXlZOiAnYm90dG9tJ1xufTtcblxuY29uc3QgTEVGVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX0xFRlRfUE9TSVRJT04sIFRPUF9MRUZUX1BPU0lUSU9OLCBCT1RUT01fUklHSFRfUE9TSVRJT04sIFRPUF9SSUdIVF9QT1NJVElPTl07XG5jb25zdCBSSUdIVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX1JJR0hUX1BPU0lUSU9OLCBUT1BfUklHSFRfUE9TSVRJT04sIEJPVFRPTV9MRUZUX1BPU0lUSU9OLCBUT1BfTEVGVF9QT1NJVElPTl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LWNkay1vcHRpb25zLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICdjZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDZGtPcHRpb25zRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duQ29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICBASW5wdXQoKSBhbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdyaWdodCc7XG4gIEBJbnB1dCgpIGNsb3NlT25TY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbWF4SGVpZ2h0OiBzdHJpbmcgPSAnbm9uZSc7XG5cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29wZW4gPSB2YWx1ZTtcbiAgICBpZiAodGhpcy50cmlnZ2VyKSB7XG4gICAgICAvLyBEb24ndCBlbWl0IGtleWJvYXJkIGFjdGlvbnMgd2hpbGUgdGhlIGRyb3Bkb3duIGlzIG5vdCBvcGVuIHlldC5cbiAgICAgIHRoaXMudHJpZ2dlci5kb250RW1pdCA9ICF0aGlzLm9wZW47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldEluaXRpYWxIaWdobGlnaHRpbmdJbmRleCgpO1xuICAgIH1cbiAgICB0aGlzLnJlbG9hZE92ZXJsYXlQb3NpdGlvbih0aGlzLm9wZW4pO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVuO1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZChLZXlib2FyZEFjdGlvblNvdXJjZURpcmVjdGl2ZSkgdHJpZ2dlciE6IEtleWJvYXJkQWN0aW9uU291cmNlRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXkpIG92ZXJsYXkhOiBDZGtDb25uZWN0ZWRPdmVybGF5O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIF9vcHRpb25zITogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUb29sdGlwRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRvb2x0aXBzITogUXVlcnlMaXN0PFRvb2x0aXBEaXJlY3RpdmU+O1xuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgX29wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGlzUG9zaXRpb25Db21wdXRlZCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnRyaWdnZXIuZG9udEVtaXQgPSAhdGhpcy5vcGVuO1xuXG4gICAgdGhpcy5vdmVybGF5LnBvc2l0aW9ucyA9IHRoaXMuYWxpZ24gPT09ICdsZWZ0JyA/IExFRlRfQUxJR05fUE9TSVRJT05TIDogUklHSFRfQUxJR05fUE9TSVRJT05TO1xuXG4gICAgY29uc3Qgb3B0aW9uc0NoYW5nZXMkID0gdGhpcy5fb3B0aW9ucy5jaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodGhpcy5fb3B0aW9ucyksXG4gICAgICBtYXAoKG9wdGlvbnM6IFF1ZXJ5TGlzdDxPcHRpb25Db21wb25lbnQ+KSA9PiBvcHRpb25zLnRvQXJyYXkoKSlcbiAgICApO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uTkVYVCksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIG9wdGlvbnNDaGFuZ2VzJCwgKF8sIGluZGV4LCBvcHRpb25zKSA9PiB0aGlzLm5leHQoaW5kZXgsIG9wdGlvbnMpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkKTtcblxuICAgIHRoaXMudHJpZ2dlci5rZXlib2FyZEFjdGlvbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChrZXlib2FyZFNlbGVjdEFjdGlvbikgPT4ga2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLlBSRVYpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkLCBvcHRpb25zQ2hhbmdlcyQsIChfLCBpbmRleCwgb3B0aW9ucykgPT4gdGhpcy5wcmV2KGluZGV4LCBvcHRpb25zKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5MRUZUKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCwgb3B0aW9uc0NoYW5nZXMkLCAoXywgaW5kZXgsIG9wdGlvbnMpID0+XG4gICAgICAgICAgdGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQgPyB0aGlzLmNvbGxhcHNlKGluZGV4LCBvcHRpb25zKSA6IHRoaXMuZXhwYW5kKGluZGV4LCBvcHRpb25zKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQpO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uUklHSFQpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkLCBvcHRpb25zQ2hhbmdlcyQsIChfLCBpbmRleCwgb3B0aW9ucykgPT5cbiAgICAgICAgICB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZCA/IHRoaXMuY29sbGFwc2UoaW5kZXgsIG9wdGlvbnMpIDogdGhpcy5leHBhbmQoaW5kZXgsIG9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoZmlsdGVyKChrZXlib2FyZFNlbGVjdEFjdGlvbikgPT4ga2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLkNMT1NFKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZURyb3Bkb3duKCkpO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uRVhFQ1VURSksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIChfLCBpbmRleCkgPT4gaW5kZXgpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpbmRleCkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnNbaW5kZXhdPy5zZWxlY3RPcHRpb24oKTtcbiAgICAgIH0pO1xuXG4gICAgLyoqIENvbWJpbmVkIHN0cmVhbSBvZiBhbGwgb2YgdGhlIGNoaWxkIG9wdGlvbnMnIHNlbGVjdCBvdXRwdXRzLiAqL1xuICAgIHRoaXMuX29wdGlvbnMuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLl9vcHRpb25zKSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IG1lcmdlKC4uLnRoaXMuX29wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3QpLCAuLi50aGlzLl9vcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWRDbGljaykpKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChfdmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3QoW29wdGlvbnNDaGFuZ2VzJCwgdGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JF0pXG4gICAgICAucGlwZShcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIG1hcCgoW29wdGlvbnMsIGluZGV4XTogW09wdGlvbkNvbXBvbmVudFtdLCBudW1iZXJdKSA9PiBvcHRpb25zW2luZGV4XSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChvcHRpb25Ub0JlSGlnaGxpZ2h0ZWQpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4gb3B0aW9uLnNldEhpZ2hsaWdodGVkKG9wdGlvblRvQmVIaWdobGlnaHRlZCA9PT0gb3B0aW9uKSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5jbG9zZU9uU2Nyb2xsKSB7XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAnc2Nyb2xsJylcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXIuYmx1cigpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG5cbiAgY2xvc2VEcm9wZG93bigpIHtcbiAgICB0aGlzLnRvb2x0aXBzLnRvQXJyYXkoKS5mb3JFYWNoKCh0b29sdGlwKSA9PiB0b29sdGlwLmhpZGUoKSk7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxIaWdobGlnaHRpbmdJbmRleCgpIHtcbiAgICBjb25zdCBmaXJzdEF2YWlsYWJsZUluZGV4ID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiAhdGhpcy5vcHRpb25Jc0hpZ2hsaWdodGFibGUob3B0aW9uKSkuaW5kZXhPZihmYWxzZSwgMCk7XG4gICAgdGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JC5uZXh0KGZpcnN0QXZhaWxhYmxlSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmV2KGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogT3B0aW9uQ29tcG9uZW50W10pOiBudW1iZXIge1xuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2RW5hYmxlZEluZGV4ID0gaXRlbXMubWFwKChvcHRpb24pID0+ICF0aGlzLm9wdGlvbklzSGlnaGxpZ2h0YWJsZShvcHRpb24pKS5sYXN0SW5kZXhPZihmYWxzZSwgY3VycmVudEluZGV4IC0gMSk7XG4gICAgICByZXR1cm4gcHJldkVuYWJsZWRJbmRleCAhPT0gLTEgPyBwcmV2RW5hYmxlZEluZGV4IDogY3VycmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV4dChjdXJyZW50SW5kZXg6IG51bWJlciwgaXRlbXM6IE9wdGlvbkNvbXBvbmVudFtdKTogbnVtYmVyIHtcbiAgICBpZiAoY3VycmVudEluZGV4IDwgaXRlbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0RW5hYmxlZEluZGV4ID0gaXRlbXMubWFwKChvcHRpb24pID0+ICF0aGlzLm9wdGlvbklzSGlnaGxpZ2h0YWJsZShvcHRpb24pKS5pbmRleE9mKGZhbHNlLCBjdXJyZW50SW5kZXggKyAxKTtcbiAgICAgIHJldHVybiBuZXh0RW5hYmxlZEluZGV4ICE9PSAtMSA/IG5leHRFbmFibGVkSW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmQoY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW1zOiBPcHRpb25Db21wb25lbnRbXSkge1xuICAgIGlmIChpdGVtc1tjdXJyZW50SW5kZXhdPy5oYXNTdWJkcm9wZG93bikge1xuICAgICAgdGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMubmV4dChjdXJyZW50SW5kZXgsIGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbGxhcHNlKGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogT3B0aW9uQ29tcG9uZW50W10pIHtcbiAgICBpZiAodGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2KGN1cnJlbnRJbmRleCwgaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uSXNIaWdobGlnaHRhYmxlKG9wdGlvbjogT3B0aW9uQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNUb3BsZXZlbE9wdGlvbkFuZEFsbG93ZWQgPSAhb3B0aW9uLmlzU3Vib3B0aW9uICYmICF0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZDtcbiAgICBjb25zdCBpc1NlY29uZGxldmVsT3B0aW9uQW5kQWxsb3dlZCA9IG9wdGlvbi5pc1N1Ym9wdGlvbiAmJiB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZDtcbiAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZCAmJiAoaXNUb3BsZXZlbE9wdGlvbkFuZEFsbG93ZWQgfHwgaXNTZWNvbmRsZXZlbE9wdGlvbkFuZEFsbG93ZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWRPdmVybGF5UG9zaXRpb24ob3BlbjogYm9vbGVhbikge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLmlzUG9zaXRpb25Db21wdXRlZCA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duRWxlbWVudCA9IHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICB0aGlzLm92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVTaXplKHtcbiAgICAgICAgICBoZWlnaHQ6IGRyb3Bkb3duRWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IGRyb3Bkb3duRWxlbWVudC5vZmZzZXRXaWR0aFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vdmVybGF5Lm92ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcblxuICAgICAgICB0aGlzLmlzUG9zaXRpb25Db21wdXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0aW9uLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAoY2xpY2spPVwib3BlbiA9ICFvcGVuXCIgY2xhc3M9XCJ0cmlnZ2VyQ29udGFpbmVyXCIgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2x4S2V5Ym9hcmRBY3Rpb25Tb3VyY2VdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48bmctdGVtcGxhdGVcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm9wZW5cIlxuICAob3ZlcmxheU91dHNpZGVDbGljayk9XCJjbG9zZURyb3Bkb3duKClcIlxuPlxuICA8dWxcbiAgICAjZHJvcGRvd25cbiAgICBbY2xhc3Muc2hvd1Njcm9sbGJhcl09XCJtYXhIZWlnaHQgIT09ICdub25lJ1wiXG4gICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJpc1Bvc2l0aW9uQ29tcHV0ZWQgPyBudWxsIDogJ2hpZGRlbidcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,136 @@
1
+ import { CdkConnectedOverlay } from '@angular/cdk/overlay';
2
+ import { Component, ContentChildren, Input, ViewChild } from '@angular/core';
3
+ import { combineLatest, fromEvent, merge, Subject } from 'rxjs';
4
+ import { debounceTime, delay, distinctUntilChanged, map, mapTo, startWith, switchMap, takeUntil } from 'rxjs/operators';
5
+ import { executeOnNextTick } from '../../../shared/misc-helpers';
6
+ import { OptionComponent } from '../option/option.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/cdk/overlay";
9
+ import * as i2 from "../../../core-ui/directives/autoclose.directive";
10
+ const BOTTOM_LEFT_POSITION = {
11
+ originX: 'start',
12
+ overlayX: 'end',
13
+ originY: 'top',
14
+ overlayY: 'top',
15
+ offsetX: -4
16
+ };
17
+ const BOTTOM_RIGHT_POSITION = {
18
+ originX: 'end',
19
+ overlayX: 'start',
20
+ originY: 'top',
21
+ overlayY: 'top',
22
+ offsetX: 4
23
+ };
24
+ const TOP_LEFT_POSITION = {
25
+ originX: 'start',
26
+ overlayX: 'end',
27
+ originY: 'bottom',
28
+ overlayY: 'bottom',
29
+ offsetX: -4
30
+ };
31
+ const TOP_RIGHT_POSITION = {
32
+ originX: 'end',
33
+ overlayX: 'start',
34
+ originY: 'bottom',
35
+ overlayY: 'bottom',
36
+ offsetX: 4
37
+ };
38
+ const LEFT_ALIGN_POSITIONS = [BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION, BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION];
39
+ const RIGHT_ALIGN_POSITIONS = [BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION, BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION];
40
+ export class CdkOptionsSubDropdownComponent {
41
+ constructor(changeDetection) {
42
+ this.changeDetection = changeDetection;
43
+ this.align = 'right';
44
+ this.open = false;
45
+ this.isPositionComputed = true;
46
+ this.mouseInside$ = new Subject();
47
+ this.destroyed$ = new Subject();
48
+ }
49
+ mouseenter() {
50
+ this.mouseInside$.next(true);
51
+ }
52
+ mouseleave() {
53
+ this.mouseInside$.next(false);
54
+ }
55
+ ngOnDestroy() {
56
+ this.destroyed$.next();
57
+ }
58
+ ngAfterViewInit() {
59
+ // To avoid `Expression has changed after it was checked`
60
+ executeOnNextTick(() => {
61
+ this.trigger.hasSubdropdown = true;
62
+ this.overlay.positions = this.align === 'left' ? LEFT_ALIGN_POSITIONS : RIGHT_ALIGN_POSITIONS;
63
+ });
64
+ merge(this.showByMouse(), this.showByKeyboard())
65
+ .pipe(takeUntil(this.destroyed$), distinctUntilChanged())
66
+ .subscribe((show) => {
67
+ this.open = show;
68
+ this.reloadOverlayPosition(this.open);
69
+ });
70
+ this.options.changes
71
+ .pipe(startWith(this.options), switchMap(() => merge(...this.options.map((option) => option.select), ...this.options.map((option) => option.selectedClick))), delay(0), takeUntil(this.destroyed$))
72
+ .subscribe(() => {
73
+ this.closeDropdown();
74
+ });
75
+ }
76
+ showByKeyboard() {
77
+ const optionChange$ = this.options.changes.pipe(startWith(this.options), map((options) => options.toArray()), map((options) => options.map((option) => {
78
+ option.isSuboption = true;
79
+ return option;
80
+ })));
81
+ return combineLatest([this.trigger.highlight.asObservable(), optionChange$]).pipe(delay(0), // Need tick delay to get option highlighted and filter it out after
82
+ map(([isHighlighted, options]) => isHighlighted || options.some((option) => option.isHighlighted)));
83
+ }
84
+ showByMouse() {
85
+ const mouseEnterTrigger$ = fromEvent(this.trigger.elementRef.nativeElement, 'mouseenter');
86
+ const mouseLeaveTrigger$ = fromEvent(this.trigger.elementRef.nativeElement, 'mouseleave');
87
+ const showOnEnterMouse$ = mouseEnterTrigger$.pipe(mapTo(true));
88
+ const hideOnLeaveMouse$ = mouseLeaveTrigger$.pipe(mapTo(false));
89
+ // react to trigger mouse leave events, and mouse enter events in the sub-dropdown. We'll use a 300ms
90
+ // debounce, so that while navigating from the trigger to the sub-dropdown, all the intermediate events
91
+ // are ignored.
92
+ const showSubdropdown$ = merge(hideOnLeaveMouse$, this.mouseInside$).pipe(debounceTime(300));
93
+ const showOnEnterSubdropdown$ = mouseEnterTrigger$.pipe(switchMap(() => showSubdropdown$));
94
+ return merge(showOnEnterMouse$, showOnEnterSubdropdown$);
95
+ }
96
+ reloadOverlayPosition(open) {
97
+ // force a rendering so that the dropdown container's dimensions are computed.
98
+ this.changeDetection.markForCheck();
99
+ if (open && this.dropdownContainer) {
100
+ this.isPositionComputed = false;
101
+ setTimeout(() => {
102
+ const dropdownElement = this.dropdownContainer.nativeElement;
103
+ this.overlay.overlayRef.updateSize({
104
+ height: dropdownElement.offsetHeight,
105
+ width: dropdownElement.offsetWidth
106
+ });
107
+ this.overlay.overlayRef.updatePosition();
108
+ this.isPositionComputed = true;
109
+ }, 0);
110
+ }
111
+ }
112
+ closeDropdown() {
113
+ this.open = false;
114
+ this.mouseInside$.next(false);
115
+ }
116
+ }
117
+ CdkOptionsSubDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: CdkOptionsSubDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
118
+ CdkOptionsSubDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: CdkOptionsSubDropdownComponent, selector: "lx-cdk-options-sub-dropdown", inputs: { trigger: "trigger", align: "align" }, queries: [{ propertyName: "options", predicate: OptionComponent, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "dropdownContainer", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"open\">\n <ul\n (mouseenter)=\"mouseenter()\"\n (mouseleave)=\"mouseleave()\"\n class=\"sub-dropdown\"\n [style.visibility]=\"isPositionComputed ? '' : 'hidden'\"\n lxAutoclose\n (autoclose)=\"closeDropdown()\"\n #dropdown\n >\n <ng-content></ng-content>\n </ul>\n</ng-template>\n", styles: [".sub-dropdown{height:100%;padding:0;margin:0;background-color:#fff;border:solid 1px #e1e5eb;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;text-align:left;list-style:none}\n"], directives: [{ type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i2.AutocloseDirective, selector: "[lxAutoclose]", inputs: ["autocloseGroup"], outputs: ["autoclose"] }] });
119
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: CdkOptionsSubDropdownComponent, decorators: [{
120
+ type: Component,
121
+ args: [{ selector: 'lx-cdk-options-sub-dropdown', template: "<ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"open\">\n <ul\n (mouseenter)=\"mouseenter()\"\n (mouseleave)=\"mouseleave()\"\n class=\"sub-dropdown\"\n [style.visibility]=\"isPositionComputed ? '' : 'hidden'\"\n lxAutoclose\n (autoclose)=\"closeDropdown()\"\n #dropdown\n >\n <ng-content></ng-content>\n </ul>\n</ng-template>\n", styles: [".sub-dropdown{height:100%;padding:0;margin:0;background-color:#fff;border:solid 1px #e1e5eb;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;text-align:left;list-style:none}\n"] }]
122
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { trigger: [{
123
+ type: Input
124
+ }], align: [{
125
+ type: Input
126
+ }], options: [{
127
+ type: ContentChildren,
128
+ args: [OptionComponent, { descendants: true }]
129
+ }], overlay: [{
130
+ type: ViewChild,
131
+ args: [CdkConnectedOverlay]
132
+ }], dropdownContainer: [{
133
+ type: ViewChild,
134
+ args: ['dropdown']
135
+ }] } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW9wdGlvbnMtc3ViLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2NvbXBvbmVudHMvY2RrLW9wdGlvbnMtc3ViLWRyb3Bkb3duL2Nkay1vcHRpb25zLXN1Yi1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Nkay1vcHRpb25zLXN1Yi1kcm9wZG93bi9jZGstb3B0aW9ucy1zdWItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFHTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBRTdELE1BQU0sb0JBQW9CLEdBQXNCO0lBQzlDLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsT0FBTyxFQUFFLEtBQUs7SUFDZCxRQUFRLEVBQUUsS0FBSztJQUNmLE9BQU8sRUFBRSxDQUFDLENB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QUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ1A7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OzJIQWhIVSw4QkFBOEI7K0dBQTlCLDhCQUE4QiwySUFJeEIsZUFBZSx5RkFDckIsbUJBQW1CLGdKQzlEaEMsMFpBYUE7MkZENENhLDhCQUE4QjtrQkFMMUMsU0FBUzsrQkFDRSw2QkFBNkI7d0dBSzlCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRW1ELE9BQU87c0JBQS9ELGVBQWU7dUJBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFDdkIsT0FBTztzQkFBdEMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ1AsaUJBQWlCO3NCQUF2QyxTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBDb25uZWN0ZWRQb3NpdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRlbGF5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtYXBUbywgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGV4ZWN1dGVPbk5leHRUaWNrIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21pc2MtaGVscGVycyc7XG5pbXBvcnQgeyBPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9vcHRpb24vb3B0aW9uLmNvbXBvbmVudCc7XG5cbmNvbnN0IEJPVFRPTV9MRUZUX1BPU0lUSU9OOiBDb25uZWN0ZWRQb3NpdGlvbiA9IHtcbiAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgb3ZlcmxheVg6ICdlbmQnLFxuICBvcmlnaW5ZOiAndG9wJyxcbiAgb3ZlcmxheVk6ICd0b3AnLFxuICBvZmZzZXRYOiAtNFxufTtcblxuY29uc3QgQk9UVE9NX1JJR0hUX1BPU0lUSU9OOiBDb25uZWN0ZWRQb3NpdGlvbiA9IHtcbiAgb3JpZ2luWDogJ2VuZCcsXG4gIG92ZXJsYXlYOiAnc3RhcnQnLFxuICBvcmlnaW5ZOiAndG9wJyxcbiAgb3ZlcmxheVk6ICd0b3AnLFxuICBvZmZzZXRYOiA0XG59O1xuXG5jb25zdCBUT1BfTEVGVF9QT1NJVElPTjogQ29ubmVjdGVkUG9zaXRpb24gPSB7XG4gIG9yaWdpblg6ICdzdGFydCcsXG4gIG92ZXJsYXlYOiAnZW5kJyxcbiAgb3JpZ2luWTogJ2JvdHRvbScsXG4gIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgb2Zmc2V0WDogLTRcbn07XG5cbmNvbnN0IFRPUF9SSUdIVF9QT1NJVElPTjogQ29ubmVjdGVkUG9zaXRpb24gPSB7XG4gIG9yaWdpblg6ICdlbmQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ2JvdHRvbScsXG4gIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgb2Zmc2V0WDogNFxufTtcblxuY29uc3QgTEVGVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX0xFRlRfUE9TSVRJT04sIFRPUF9MRUZUX1BPU0lUSU9OLCBCT1RUT01fUklHSFRfUE9TSVRJT04sIFRPUF9SSUdIVF9QT1NJVElPTl07XG5jb25zdCBSSUdIVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX1JJR0hUX1BPU0lUSU9OLCBUT1BfUklHSFRfUE9TSVRJT04sIEJPVFRPTV9MRUZUX1BPU0lUSU9OLCBUT1BfTEVGVF9QT1NJVElPTl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LWNkay1vcHRpb25zLXN1Yi1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnY2RrLW9wdGlvbnMtc3ViLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2Nkay1vcHRpb25zLXN1Yi1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENka09wdGlvbnNTdWJEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHRyaWdnZXIhOiBPcHRpb25Db21wb25lbnQ7XG4gIEBJbnB1dCgpIGFsaWduOiAncmlnaHQnIHwgJ2xlZnQnID0gJ3JpZ2h0JztcblxuICBAQ29udGVudENoaWxkcmVuKE9wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBvcHRpb25zITogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSkgb3ZlcmxheSE6IENka0Nvbm5lY3RlZE92ZXJsYXk7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJykgZHJvcGRvd25Db250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIG9wZW4gPSBmYWxzZTtcbiAgaXNQb3NpdGlvbkNvbXB1dGVkID0gdHJ1ZTtcblxuICBwcml2YXRlIG1vdXNlSW5zaWRlJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcmVhZG9ubHkgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG1vdXNlZW50ZXIoKSB7XG4gICAgdGhpcy5tb3VzZUluc2lkZSQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG1vdXNlbGVhdmUoKSB7XG4gICAgdGhpcy5tb3VzZUluc2lkZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFRvIGF2b2lkIGBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkYFxuICAgIGV4ZWN1dGVPbk5leHRUaWNrKCgpID0+IHtcbiAgICAgIHRoaXMudHJpZ2dlci5oYXNTdWJkcm9wZG93biA9IHRydWU7XG4gICAgICB0aGlzLm92ZXJsYXkucG9zaXRpb25zID0gdGhpcy5hbGlnbiA9PT0gJ2xlZnQnID8gTEVGVF9BTElHTl9QT1NJVElPTlMgOiBSSUdIVF9BTElHTl9QT1NJVElPTlM7XG4gICAgfSk7XG5cbiAgICBtZXJnZSh0aGlzLnNob3dCeU1vdXNlKCksIHRoaXMuc2hvd0J5S2V5Ym9hcmQoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZSgoc2hvdykgPT4ge1xuICAgICAgICB0aGlzLm9wZW4gPSBzaG93O1xuICAgICAgICB0aGlzLnJlbG9hZE92ZXJsYXlQb3NpdGlvbih0aGlzLm9wZW4pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnMuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLm9wdGlvbnMpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gbWVyZ2UoLi4udGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0KSwgLi4udGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWRDbGljaykpKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0J5S2V5Ym9hcmQoKSB7XG4gICAgY29uc3Qgb3B0aW9uQ2hhbmdlJCA9IHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodGhpcy5vcHRpb25zKSxcbiAgICAgIG1hcCgob3B0aW9uczogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD4pID0+IG9wdGlvbnMudG9BcnJheSgpKSxcbiAgICAgIG1hcCgob3B0aW9ucykgPT5cbiAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIG9wdGlvbi5pc1N1Ym9wdGlvbiA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMudHJpZ2dlci5oaWdobGlnaHQuYXNPYnNlcnZhYmxlKCksIG9wdGlvbkNoYW5nZSRdKS5waXBlKFxuICAgICAgZGVsYXkoMCksIC8vIE5lZWQgdGljayBkZWxheSB0byBnZXQgb3B0aW9uIGhpZ2hsaWdodGVkIGFuZCBmaWx0ZXIgaXQgb3V0IGFmdGVyXG4gICAgICBtYXAoKFtpc0hpZ2hsaWdodGVkLCBvcHRpb25zXSkgPT4gaXNIaWdobGlnaHRlZCB8fCBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLmlzSGlnaGxpZ2h0ZWQpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNob3dCeU1vdXNlKCkge1xuICAgIGNvbnN0IG1vdXNlRW50ZXJUcmlnZ2VyJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnRyaWdnZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpO1xuICAgIGNvbnN0IG1vdXNlTGVhdmVUcmlnZ2VyJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLnRyaWdnZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VsZWF2ZScpO1xuXG4gICAgY29uc3Qgc2hvd09uRW50ZXJNb3VzZSQgPSBtb3VzZUVudGVyVHJpZ2dlciQucGlwZShtYXBUbyh0cnVlKSk7XG4gICAgY29uc3QgaGlkZU9uTGVhdmVNb3VzZSQgPSBtb3VzZUxlYXZlVHJpZ2dlciQucGlwZShtYXBUbyhmYWxzZSkpO1xuXG4gICAgLy8gcmVhY3QgdG8gdHJpZ2dlciBtb3VzZSBsZWF2ZSBldmVudHMsIGFuZCBtb3VzZSBlbnRlciBldmVudHMgaW4gdGhlIHN1Yi1kcm9wZG93bi4gV2UnbGwgdXNlIGEgMzAwbXNcbiAgICAvLyBkZWJvdW5jZSwgc28gdGhhdCB3aGlsZSBuYXZpZ2F0aW5nIGZyb20gdGhlIHRyaWdnZXIgdG8gdGhlIHN1Yi1kcm9wZG93biwgYWxsIHRoZSBpbnRlcm1lZGlhdGUgZXZlbnRzXG4gICAgLy8gYXJlIGlnbm9yZWQuXG4gICAgY29uc3Qgc2hvd1N1YmRyb3Bkb3duJCA9IG1lcmdlKGhpZGVPbkxlYXZlTW91c2UkLCB0aGlzLm1vdXNlSW5zaWRlJCkucGlwZShkZWJvdW5jZVRpbWUoMzAwKSk7XG5cbiAgICBjb25zdCBzaG93T25FbnRlclN1YmRyb3Bkb3duJCA9IG1vdXNlRW50ZXJUcmlnZ2VyJC5waXBlKHN3aXRjaE1hcCgoKSA9PiBzaG93U3ViZHJvcGRvd24kKSk7XG5cbiAgICByZXR1cm4gbWVyZ2Uoc2hvd09uRW50ZXJNb3VzZSQsIHNob3dPbkVudGVyU3ViZHJvcGRvd24kKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkT3ZlcmxheVBvc2l0aW9uKG9wZW46IGJvb2xlYW4pIHtcbiAgICAvLyBmb3JjZSBhIHJlbmRlcmluZyBzbyB0aGF0IHRoZSBkcm9wZG93biBjb250YWluZXIncyBkaW1lbnNpb25zIGFyZSBjb21wdXRlZC5cbiAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGlmIChvcGVuICYmIHRoaXMuZHJvcGRvd25Db250YWluZXIpIHtcbiAgICAgIHRoaXMuaXNQb3NpdGlvbkNvbXB1dGVkID0gZmFsc2U7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMub3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVNpemUoe1xuICAgICAgICAgIGhlaWdodDogZHJvcGRvd25FbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICB3aWR0aDogZHJvcGRvd25FbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmlzUG9zaXRpb25Db21wdXRlZCA9IHRydWU7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCkge1xuICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIHRoaXMubW91c2VJbnNpZGUkLm5leHQoZmFsc2UpO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCIgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm9wZW5cIj5cbiAgPHVsXG4gICAgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcigpXCJcbiAgICAobW91c2VsZWF2ZSk9XCJtb3VzZWxlYXZlKClcIlxuICAgIGNsYXNzPVwic3ViLWRyb3Bkb3duXCJcbiAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJpc1Bvc2l0aW9uQ29tcHV0ZWQgPyAnJyA6ICdoaWRkZW4nXCJcbiAgICBseEF1dG9jbG9zZVxuICAgIChhdXRvY2xvc2UpPVwiY2xvc2VEcm9wZG93bigpXCJcbiAgICAjZHJvcGRvd25cbiAgPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,141 @@
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { fromEvent, ReplaySubject, Subject } from 'rxjs';
5
+ import { filter, takeUntil } from 'rxjs/operators';
6
+ import { Observe } from '../../../shared/observe';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./currency-symbol.component";
9
+ import * as i2 from "@angular/common";
10
+ import * as i3 from "@angular/forms";
11
+ export class CurrencyInputComponent {
12
+ constructor(changeDetector) {
13
+ this.changeDetector = changeDetector;
14
+ this.decimalSeparator = '.';
15
+ this.data = 0;
16
+ this.disabled = false;
17
+ this.mode = 'edit';
18
+ this.iconPosition = 'first';
19
+ this.format = '1.2-2';
20
+ this.onFocusLost = new EventEmitter();
21
+ this.onChange = new EventEmitter();
22
+ this.showCurrencyInput = false;
23
+ this.dataValue$ = new ReplaySubject();
24
+ this.destroyed$ = new Subject();
25
+ }
26
+ get allowedCharacters() {
27
+ return this.fieldDefinitionType === 'DOUBLE' ? new RegExp(`[0-9\e\\${this.decimalSeparator}\]`) : /[0-9\e\\]/;
28
+ }
29
+ ngOnInit() {
30
+ this.data$.pipe(takeUntil(this.destroyed$)).subscribe(this.dataValue$);
31
+ }
32
+ ngAfterViewInit() {
33
+ if (this.currencyInput) {
34
+ fromEvent(this.currencyInput.nativeElement, 'keypress')
35
+ .pipe(filter((keyboardEvent) => this.shouldRejectKey(keyboardEvent)), takeUntil(this.destroyed$))
36
+ .subscribe((keyboardEvent) => {
37
+ keyboardEvent.preventDefault();
38
+ });
39
+ }
40
+ }
41
+ ngOnDestroy() {
42
+ this.destroyed$.next();
43
+ }
44
+ valueChanged(value) {
45
+ if (typeof value === 'string') {
46
+ const invalidSeparator = this.decimalSeparator === '.' ? ',' : '.';
47
+ value = this.parseInput(value, invalidSeparator);
48
+ }
49
+ // fix copy & paste string values being interpreted wrongly
50
+ this.dataValue$.next(value);
51
+ this.onChange.emit(value);
52
+ this.propagateChange(value);
53
+ }
54
+ onBlur() {
55
+ this.showCurrencyInput = false;
56
+ this.onFocusLost.emit(true);
57
+ }
58
+ focusCurrencyInput() {
59
+ this.showCurrencyInput = true;
60
+ this.changeDetector.detectChanges();
61
+ this.currencyInput.nativeElement.focus();
62
+ this.currencyInput.nativeElement.setSelectionRange(0, 0);
63
+ }
64
+ shouldRejectKey(event) {
65
+ if (this.fieldDefinitionType === 'DOUBLE' && event.key === this.decimalSeparator) {
66
+ return this.containsSeparators(this.currencyInput.nativeElement.value);
67
+ }
68
+ return !this.allowedCharacters.test(event.key);
69
+ }
70
+ propagateChange(_newValue) { }
71
+ writeValue(newValue) {
72
+ this.dataValue$.next(newValue);
73
+ }
74
+ registerOnChange(fn) {
75
+ this.propagateChange = fn;
76
+ }
77
+ registerOnTouched(_fn) { }
78
+ setDisabledState(disabled) {
79
+ this.disabled = disabled;
80
+ }
81
+ parseInput(value, char) {
82
+ const countOccurences = value.split(char).length - 1;
83
+ if (countOccurences > 1) {
84
+ for (let i = 0; i < countOccurences; i++) {
85
+ value = value.replace(char, '');
86
+ }
87
+ }
88
+ const parsedValue = parseFloat(value.replace(',', '.').replace(/ /g, ''));
89
+ return isNaN(parsedValue) ? null : parsedValue;
90
+ }
91
+ containsSeparators(value) {
92
+ return value.indexOf(',') > -1 || value.indexOf('.') > -1;
93
+ }
94
+ }
95
+ CurrencyInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: CurrencyInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
96
+ CurrencyInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: CurrencyInputComponent, selector: "lx-currency-input", inputs: { code: "code", decimalSeparator: "decimalSeparator", placeholder: "placeholder", data: "data", disabled: "disabled", mode: "mode", fieldDefinitionType: "fieldDefinitionType", iconPosition: "iconPosition", format: "format" }, outputs: { onFocusLost: "onFocusLost", onChange: "onChange" }, providers: [
97
+ {
98
+ provide: NG_VALUE_ACCESSOR,
99
+ useExisting: forwardRef(() => CurrencyInputComponent),
100
+ multi: true
101
+ }
102
+ ], viewQueries: [{ propertyName: "currencyInput", first: true, predicate: ["currencyInput"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"mode === 'edit'\" class=\"container input-group\">\n <div *ngIf=\"iconPosition === 'first'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n <input\n [attr.disabled]=\"disabled ? true : null\"\n *ngIf=\"!showCurrencyInput\"\n type=\"text\"\n class=\"form-control currencyDisplayValue\"\n placeholder=\"{{ placeholder }}\"\n [value]=\"dataValue$ | async | number: format\"\n (focus)=\"focusCurrencyInput()\"\n />\n <input\n [attr.disabled]=\"disabled ? true : null\"\n [class.hideInput]=\"!showCurrencyInput\"\n type=\"text\"\n inputmode=\"numeric\"\n class=\"form-control currencyInput\"\n name=\"inputAmount\"\n #currencyInput\n placeholder=\"{{ placeholder }}\"\n [ngModel]=\"dataValue$ | async\"\n (blur)=\"onBlur()\"\n (ngModelChange)=\"valueChanged($event)\"\n />\n <div *ngIf=\"iconPosition === 'end'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n</div>\n<span *ngIf=\"mode === 'view'\" [class.placeholder]=\"(dataValue$ | async) === null && placeholder\">\n <!-- Not using Angular 2 currency pipe since a lot of currency symbols are missing: https://github.com/angular/angular/issues/6724 -->\n <lx-currency-symbol *ngIf=\"iconPosition === 'first'\" [code]=\"code\"></lx-currency-symbol>\n {{ (dataValue$ | async | number: format) || placeholder }}\n <lx-currency-symbol *ngIf=\"iconPosition === 'end'\" [code]=\"code\"></lx-currency-symbol>\n</span>\n", styles: [".container{width:100%!important;padding:0}.labelContainer{width:5%!important;min-width:40px}input{width:100%}.hideInput{display:none}.placeholder{color:#99a5bb}\n"], components: [{ type: i1.CurrencySymbolComponent, selector: "lx-currency-symbol", inputs: ["code"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "number": i2.DecimalPipe, "async": i2.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
103
+ __decorate([
104
+ Observe('data')
105
+ ], CurrencyInputComponent.prototype, "data$", void 0);
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: CurrencyInputComponent, decorators: [{
107
+ type: Component,
108
+ args: [{ selector: 'lx-currency-input', providers: [
109
+ {
110
+ provide: NG_VALUE_ACCESSOR,
111
+ useExisting: forwardRef(() => CurrencyInputComponent),
112
+ multi: true
113
+ }
114
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"mode === 'edit'\" class=\"container input-group\">\n <div *ngIf=\"iconPosition === 'first'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n <input\n [attr.disabled]=\"disabled ? true : null\"\n *ngIf=\"!showCurrencyInput\"\n type=\"text\"\n class=\"form-control currencyDisplayValue\"\n placeholder=\"{{ placeholder }}\"\n [value]=\"dataValue$ | async | number: format\"\n (focus)=\"focusCurrencyInput()\"\n />\n <input\n [attr.disabled]=\"disabled ? true : null\"\n [class.hideInput]=\"!showCurrencyInput\"\n type=\"text\"\n inputmode=\"numeric\"\n class=\"form-control currencyInput\"\n name=\"inputAmount\"\n #currencyInput\n placeholder=\"{{ placeholder }}\"\n [ngModel]=\"dataValue$ | async\"\n (blur)=\"onBlur()\"\n (ngModelChange)=\"valueChanged($event)\"\n />\n <div *ngIf=\"iconPosition === 'end'\" class=\"labelContainer input-group-addon\">\n <lx-currency-symbol [code]=\"code\"></lx-currency-symbol>\n </div>\n</div>\n<span *ngIf=\"mode === 'view'\" [class.placeholder]=\"(dataValue$ | async) === null && placeholder\">\n <!-- Not using Angular 2 currency pipe since a lot of currency symbols are missing: https://github.com/angular/angular/issues/6724 -->\n <lx-currency-symbol *ngIf=\"iconPosition === 'first'\" [code]=\"code\"></lx-currency-symbol>\n {{ (dataValue$ | async | number: format) || placeholder }}\n <lx-currency-symbol *ngIf=\"iconPosition === 'end'\" [code]=\"code\"></lx-currency-symbol>\n</span>\n", styles: [".container{width:100%!important;padding:0}.labelContainer{width:5%!important;min-width:40px}input{width:100%}.hideInput{display:none}.placeholder{color:#99a5bb}\n"] }]
115
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { code: [{
116
+ type: Input
117
+ }], decimalSeparator: [{
118
+ type: Input
119
+ }], placeholder: [{
120
+ type: Input
121
+ }], data: [{
122
+ type: Input
123
+ }], data$: [], disabled: [{
124
+ type: Input
125
+ }], mode: [{
126
+ type: Input
127
+ }], fieldDefinitionType: [{
128
+ type: Input
129
+ }], iconPosition: [{
130
+ type: Input
131
+ }], format: [{
132
+ type: Input
133
+ }], onFocusLost: [{
134
+ type: Output
135
+ }], onChange: [{
136
+ type: Output
137
+ }], currencyInput: [{
138
+ type: ViewChild,
139
+ args: ['currencyInput']
140
+ }] } });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3ktaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9jdXJyZW5jeS9jdXJyZW5jeS1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2N1cnJlbmN5L2N1cnJlbmN5LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFjLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7O0FBb0JsRCxNQUFNLE9BQU8sc0JBQXNCO0lBMEJqQyxZQUFvQixjQUFpQztRQUFqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUF4QnJDLHFCQUFnQixHQUFxQixHQUFHLENBQUM7UUFFekMsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUdqQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBc0IsTUFBTSxDQUFDO1FBRWpDLGlCQUFZLEdBQXlCLE9BQU8sQ0FBQztRQUM3QyxXQUFNLEdBQVcsT0FBTyxDQUFDO1FBRXhCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztR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QUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7O21IQTNHVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixxVkFUdEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztZQUNyRCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMElDbENILCtpREFvQ0E7QURNMkI7SUFBeEIsT0FBTyxDQUFTLE1BQU0sQ0FBQztxREFBNEI7MkZBTHpDLHNCQUFzQjtrQkFibEMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUM7NEJBQ3JELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3dHQUcvQixJQUFJO3NCQUFuQixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ21CLEtBQUssTUFFZCxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsTUFBTTtzQkFBckIsS0FBSztnQkFFVyxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLFFBQVE7c0JBQXhCLE1BQU07Z0JBRTZCLGFBQWE7c0JBQWhELFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2ZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZlJztcblxuZXhwb3J0IHR5cGUgQ3VycmVuY3lJbnB1dE1vZGUgPSAndmlldycgfCAnZWRpdCc7XG5leHBvcnQgdHlwZSBDdXJyZW5jeUljb25Qb3NpdGlvbiA9ICdmaXJzdCcgfCAnZW5kJztcblxudHlwZSBEZWNpbWFsU2VwYXJhdG9yID0gJywnIHwgJy4nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdseC1jdXJyZW5jeS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnY3VycmVuY3ktaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnY3VycmVuY3ktaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDdXJyZW5jeUlucHV0Q29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDdXJyZW5jeUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGNvZGUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkZWNpbWFsU2VwYXJhdG9yOiBEZWNpbWFsU2VwYXJhdG9yID0gJy4nO1xuICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhOiBudW1iZXIgPSAwO1xuICBAT2JzZXJ2ZTxudW1iZXI+KCdkYXRhJykgZGF0YSQhOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBtb2RlOiBDdXJyZW5jeUlucHV0TW9kZSA9ICdlZGl0JztcbiAgQElucHV0KCkgcHVibGljIGZpZWxkRGVmaW5pdGlvblR5cGUhOiAnRE9VQkxFJyB8ICdJTlRFR0VSJztcbiAgQElucHV0KCkgcHVibGljIGljb25Qb3NpdGlvbjogQ3VycmVuY3lJY29uUG9zaXRpb24gPSAnZmlyc3QnO1xuICBASW5wdXQoKSBwdWJsaWMgZm9ybWF0OiBzdHJpbmcgPSAnMS4yLTInO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25Gb2N1c0xvc3QgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBAVmlld0NoaWxkKCdjdXJyZW5jeUlucHV0JykgcHJpdmF0ZSBjdXJyZW5jeUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgc2hvd0N1cnJlbmN5SW5wdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGF0YVZhbHVlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PG51bWJlcj4oKTtcblxuICBwcml2YXRlIGdldCBhbGxvd2VkQ2hhcmFjdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZERlZmluaXRpb25UeXBlID09PSAnRE9VQkxFJyA/IG5ldyBSZWdFeHAoYFswLTlcXGVcXFxcJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9XFxdYCkgOiAvWzAtOVxcZVxcXFxdLztcbiAgfVxuXG4gIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGF0YSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKHRoaXMuZGF0YVZhbHVlJCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVuY3lJbnB1dCkge1xuICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHRoaXMuY3VycmVuY3lJbnB1dC5uYXRpdmVFbGVtZW50LCAna2V5cHJlc3MnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGtleWJvYXJkRXZlbnQpID0+IHRoaXMuc2hvdWxkUmVqZWN0S2V5KGtleWJvYXJkRXZlbnQpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICBrZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gIH1cblxuICB2YWx1ZUNoYW5nZWQodmFsdWU6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBpbnZhbGlkU2VwYXJhdG9yID0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yID09PSAnLicgPyAnLCcgOiAnLic7XG4gICAgICB2YWx1ZSA9IHRoaXMucGFyc2VJbnB1dCh2YWx1ZSwgaW52YWxpZFNlcGFyYXRvcikgYXMgbnVtYmVyO1xuICAgIH1cbiAgICAvLyBmaXggY29weSAmIHBhc3RlIHN0cmluZyB2YWx1ZXMgYmVpbmcgaW50ZXJwcmV0ZWQgd3JvbmdseVxuICAgIHRoaXMuZGF0YVZhbHVlJC5uZXh0KHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLnNob3dDdXJyZW5jeUlucHV0ID0gZmFsc2U7XG4gICAgdGhpcy5vbkZvY3VzTG9zdC5lbWl0KHRydWUpO1xuICB9XG5cbiAgZm9jdXNDdXJyZW5jeUlucHV0KCkge1xuICAgIHRoaXMuc2hvd0N1cnJlbmN5SW5wdXQgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY3VycmVuY3lJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5jdXJyZW5jeUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgMCk7XG4gIH1cblxuICBzaG91bGRSZWplY3RLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5maWVsZERlZmluaXRpb25UeXBlID09PSAnRE9VQkxFJyAmJiBldmVudC5rZXkgPT09IHRoaXMuZGVjaW1hbFNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnNTZXBhcmF0b3JzKHRoaXMuY3VycmVuY3lJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLmFsbG93ZWRDaGFyYWN0ZXJzLnRlc3QoZXZlbnQua2V5KTtcbiAgfVxuXG4gIHByb3BhZ2F0ZUNoYW5nZShfbmV3VmFsdWU6IG51bWJlcikge31cblxuICB3cml0ZVZhbHVlKG5ld1ZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmRhdGFWYWx1ZSQubmV4dChuZXdWYWx1ZSk7XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKF9mbjogYW55KSB7fVxuXG4gIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW5wdXQodmFsdWU6IHN0cmluZywgY2hhcjogc3RyaW5nKSB7XG4gICAgY29uc3QgY291bnRPY2N1cmVuY2VzID0gdmFsdWUuc3BsaXQoY2hhcikubGVuZ3RoIC0gMTtcbiAgICBpZiAoY291bnRPY2N1cmVuY2VzID4gMSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudE9jY3VyZW5jZXM7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoY2hhciwgJycpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgnLCcsICcuJykucmVwbGFjZSgvIC9nLCAnJykpO1xuICAgIHJldHVybiBpc05hTihwYXJzZWRWYWx1ZSkgPyBudWxsIDogcGFyc2VkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGNvbnRhaW5zU2VwYXJhdG9ycyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoJywnKSA+IC0xIHx8IHZhbHVlLmluZGV4T2YoJy4nKSA+IC0xO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnXCIgY2xhc3M9XCJjb250YWluZXIgaW5wdXQtZ3JvdXBcIj5cbiAgPGRpdiAqbmdJZj1cImljb25Qb3NpdGlvbiA9PT0gJ2ZpcnN0J1wiIGNsYXNzPVwibGFiZWxDb250YWluZXIgaW5wdXQtZ3JvdXAtYWRkb25cIj5cbiAgICA8bHgtY3VycmVuY3ktc3ltYm9sIFtjb2RlXT1cImNvZGVcIj48L2x4LWN1cnJlbmN5LXN5bWJvbD5cbiAgPC9kaXY+XG4gIDxpbnB1dFxuICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIlxuICAgICpuZ0lmPVwiIXNob3dDdXJyZW5jeUlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY3VycmVuY3lEaXNwbGF5VmFsdWVcIlxuICAgIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIlxuICAgIFt2YWx1ZV09XCJkYXRhVmFsdWUkIHwgYXN5bmMgfCBudW1iZXI6IGZvcm1hdFwiXG4gICAgKGZvY3VzKT1cImZvY3VzQ3VycmVuY3lJbnB1dCgpXCJcbiAgLz5cbiAgPGlucHV0XG4gICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyB0cnVlIDogbnVsbFwiXG4gICAgW2NsYXNzLmhpZGVJbnB1dF09XCIhc2hvd0N1cnJlbmN5SW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICBpbnB1dG1vZGU9XCJudW1lcmljXCJcbiAgICBjbGFzcz1cImZvcm0tY29udHJvbCBjdXJyZW5jeUlucHV0XCJcbiAgICBuYW1lPVwiaW5wdXRBbW91bnRcIlxuICAgICNjdXJyZW5jeUlucHV0XG4gICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiXG4gICAgW25nTW9kZWxdPVwiZGF0YVZhbHVlJCB8IGFzeW5jXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2VkKCRldmVudClcIlxuICAvPlxuICA8ZGl2ICpuZ0lmPVwiaWNvblBvc2l0aW9uID09PSAnZW5kJ1wiIGNsYXNzPVwibGFiZWxDb250YWluZXIgaW5wdXQtZ3JvdXAtYWRkb25cIj5cbiAgICA8bHgtY3VycmVuY3ktc3ltYm9sIFtjb2RlXT1cImNvZGVcIj48L2x4LWN1cnJlbmN5LXN5bWJvbD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxzcGFuICpuZ0lmPVwibW9kZSA9PT0gJ3ZpZXcnXCIgW2NsYXNzLnBsYWNlaG9sZGVyXT1cIihkYXRhVmFsdWUkIHwgYXN5bmMpID09PSBudWxsICYmIHBsYWNlaG9sZGVyXCI+XG4gIDwhLS0gTm90IHVzaW5nIEFuZ3VsYXIgMiBjdXJyZW5jeSBwaXBlIHNpbmNlIGEgbG90IG9mIGN1cnJlbmN5IHN5bWJvbHMgYXJlIG1pc3Npbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzY3MjQgLS0+XG4gIDxseC1jdXJyZW5jeS1zeW1ib2wgKm5nSWY9XCJpY29uUG9zaXRpb24gPT09ICdmaXJzdCdcIiBbY29kZV09XCJjb2RlXCI+PC9seC1jdXJyZW5jeS1zeW1ib2w+XG4gIHt7IChkYXRhVmFsdWUkIHwgYXN5bmMgfCBudW1iZXI6IGZvcm1hdCkgfHwgcGxhY2Vob2xkZXIgfX1cbiAgPGx4LWN1cnJlbmN5LXN5bWJvbCAqbmdJZj1cImljb25Qb3NpdGlvbiA9PT0gJ2VuZCdcIiBbY29kZV09XCJjb2RlXCI+PC9seC1jdXJyZW5jeS1zeW1ib2w+XG48L3NwYW4+XG4iXX0=