@leanix/components 0.2.229 → 0.2.230

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) 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} +436 -633
  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/package.json +23 -9
  119. package/bundles/leanix-components.umd.js +0 -7364
  120. package/bundles/leanix-components.umd.js.map +0 -1
  121. package/esm2015/index.js +0 -119
  122. package/esm2015/index.js.map +0 -1
  123. package/esm2015/leanix-components.js +0 -5
  124. package/esm2015/leanix-components.js.map +0 -1
  125. package/esm2015/lib/core-ui/annotations/required.js +0 -33
  126. package/esm2015/lib/core-ui/annotations/required.js.map +0 -1
  127. package/esm2015/lib/core-ui/components/badge/badge.component.js +0 -29
  128. package/esm2015/lib/core-ui/components/badge/badge.component.js.map +0 -1
  129. package/esm2015/lib/core-ui/components/button/button.component.js +0 -78
  130. package/esm2015/lib/core-ui/components/button/button.component.js.map +0 -1
  131. package/esm2015/lib/core-ui/components/button-group/button-group.component.js +0 -32
  132. package/esm2015/lib/core-ui/components/button-group/button-group.component.js.map +0 -1
  133. package/esm2015/lib/core-ui/components/card/card.component.js +0 -23
  134. package/esm2015/lib/core-ui/components/card/card.component.js.map +0 -1
  135. package/esm2015/lib/core-ui/components/collapsible/collapsible.component.js +0 -58
  136. package/esm2015/lib/core-ui/components/collapsible/collapsible.component.js.map +0 -1
  137. package/esm2015/lib/core-ui/components/colored-label/colored-label.component.js +0 -39
  138. package/esm2015/lib/core-ui/components/colored-label/colored-label.component.js.map +0 -1
  139. package/esm2015/lib/core-ui/components/ellipsis/ellipsis.component.js +0 -74
  140. package/esm2015/lib/core-ui/components/ellipsis/ellipsis.component.js.map +0 -1
  141. package/esm2015/lib/core-ui/components/icon-scale/icon-scale.component.js +0 -46
  142. package/esm2015/lib/core-ui/components/icon-scale/icon-scale.component.js.map +0 -1
  143. package/esm2015/lib/core-ui/components/spinner/spinner.component.js +0 -30
  144. package/esm2015/lib/core-ui/components/spinner/spinner.component.js.map +0 -1
  145. package/esm2015/lib/core-ui/components/table/table-header/table-header.component.js +0 -60
  146. package/esm2015/lib/core-ui/components/table/table-header/table-header.component.js.map +0 -1
  147. package/esm2015/lib/core-ui/components/table/table.component.js +0 -70
  148. package/esm2015/lib/core-ui/components/table/table.component.js.map +0 -1
  149. package/esm2015/lib/core-ui/components/tiny-spinner/tiny-spinner.component.js +0 -14
  150. package/esm2015/lib/core-ui/components/tiny-spinner/tiny-spinner.component.js.map +0 -1
  151. package/esm2015/lib/core-ui/core-ui.constants.js +0 -13
  152. package/esm2015/lib/core-ui/core-ui.constants.js.map +0 -1
  153. package/esm2015/lib/core-ui/core-ui.module.js +0 -177
  154. package/esm2015/lib/core-ui/core-ui.module.js.map +0 -1
  155. package/esm2015/lib/core-ui/directives/after-view-init.directive.js +0 -30
  156. package/esm2015/lib/core-ui/directives/after-view-init.directive.js.map +0 -1
  157. package/esm2015/lib/core-ui/directives/autoclose-group.service.js +0 -38
  158. package/esm2015/lib/core-ui/directives/autoclose-group.service.js.map +0 -1
  159. package/esm2015/lib/core-ui/directives/autoclose.directive.js +0 -40
  160. package/esm2015/lib/core-ui/directives/autoclose.directive.js.map +0 -1
  161. package/esm2015/lib/core-ui/directives/autofocus.directive.js +0 -27
  162. package/esm2015/lib/core-ui/directives/autofocus.directive.js.map +0 -1
  163. package/esm2015/lib/core-ui/directives/html.directive.js +0 -30
  164. package/esm2015/lib/core-ui/directives/html.directive.js.map +0 -1
  165. package/esm2015/lib/core-ui/functions/core-css.helpers.js +0 -35
  166. package/esm2015/lib/core-ui/functions/core-css.helpers.js.map +0 -1
  167. package/esm2015/lib/core-ui/pipes/br.pipe.js +0 -23
  168. package/esm2015/lib/core-ui/pipes/br.pipe.js.map +0 -1
  169. package/esm2015/lib/core-ui/pipes/contrast-color.pipe.js +0 -20
  170. package/esm2015/lib/core-ui/pipes/contrast-color.pipe.js.map +0 -1
  171. package/esm2015/lib/core-ui/pipes/custom-date.pipe.js +0 -27
  172. package/esm2015/lib/core-ui/pipes/custom-date.pipe.js.map +0 -1
  173. package/esm2015/lib/core-ui/pipes/highlight-range.pipe.js +0 -21
  174. package/esm2015/lib/core-ui/pipes/highlight-range.pipe.js.map +0 -1
  175. package/esm2015/lib/core-ui/pipes/highlight-term.pipe.js +0 -38
  176. package/esm2015/lib/core-ui/pipes/highlight-term.pipe.js.map +0 -1
  177. package/esm2015/lib/core-ui/pipes/lx-is-uuid.pipe.js +0 -21
  178. package/esm2015/lib/core-ui/pipes/lx-is-uuid.pipe.js.map +0 -1
  179. package/esm2015/lib/core-ui/pipes/lx-time-ago.pipe.js +0 -25
  180. package/esm2015/lib/core-ui/pipes/lx-time-ago.pipe.js.map +0 -1
  181. package/esm2015/lib/core-ui/pipes/lx-translate.pipe.js +0 -46
  182. package/esm2015/lib/core-ui/pipes/lx-translate.pipe.js.map +0 -1
  183. package/esm2015/lib/core-ui/pipes/markdown.pipe.js +0 -29
  184. package/esm2015/lib/core-ui/pipes/markdown.pipe.js.map +0 -1
  185. package/esm2015/lib/core-ui/pipes/nbsp.pipe.js +0 -14
  186. package/esm2015/lib/core-ui/pipes/nbsp.pipe.js.map +0 -1
  187. package/esm2015/lib/core-ui/pipes/sort.pipe.js +0 -52
  188. package/esm2015/lib/core-ui/pipes/sort.pipe.js.map +0 -1
  189. package/esm2015/lib/core-ui/pipes/translation-after.pipe.js +0 -28
  190. package/esm2015/lib/core-ui/pipes/translation-after.pipe.js.map +0 -1
  191. package/esm2015/lib/core-ui/pipes/translation-before.pipe.js +0 -53
  192. package/esm2015/lib/core-ui/pipes/translation-before.pipe.js.map +0 -1
  193. package/esm2015/lib/core-ui/pipes/translation-between.pipe.js +0 -67
  194. package/esm2015/lib/core-ui/pipes/translation-between.pipe.js.map +0 -1
  195. package/esm2015/lib/core-ui/pipes/unescape-curly-braces.pipe.js +0 -16
  196. package/esm2015/lib/core-ui/pipes/unescape-curly-braces.pipe.js.map +0 -1
  197. package/esm2015/lib/core-ui/tooltip/to-cdk-position.function.js +0 -74
  198. package/esm2015/lib/core-ui/tooltip/to-cdk-position.function.js.map +0 -1
  199. package/esm2015/lib/core-ui/tooltip/tooltip-position.interface.js +0 -7
  200. package/esm2015/lib/core-ui/tooltip/tooltip-position.interface.js.map +0 -1
  201. package/esm2015/lib/core-ui/tooltip/tooltip.component.js +0 -30
  202. package/esm2015/lib/core-ui/tooltip/tooltip.component.js.map +0 -1
  203. package/esm2015/lib/core-ui/tooltip/tooltip.directive.js +0 -107
  204. package/esm2015/lib/core-ui/tooltip/tooltip.directive.js.map +0 -1
  205. package/esm2015/lib/core-ui/tooltip/tooltip.module.js +0 -21
  206. package/esm2015/lib/core-ui/tooltip/tooltip.module.js.map +0 -1
  207. package/esm2015/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.js +0 -108
  208. package/esm2015/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.js.map +0 -1
  209. package/esm2015/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.js +0 -38
  210. package/esm2015/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.js.map +0 -1
  211. package/esm2015/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.js +0 -223
  212. package/esm2015/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.js.map +0 -1
  213. package/esm2015/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.js +0 -140
  214. package/esm2015/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.js.map +0 -1
  215. package/esm2015/lib/forms-ui/components/currency/currency-input.component.js +0 -147
  216. package/esm2015/lib/forms-ui/components/currency/currency-input.component.js.map +0 -1
  217. package/esm2015/lib/forms-ui/components/currency/currency-symbol-map.constant.js +0 -105
  218. package/esm2015/lib/forms-ui/components/currency/currency-symbol-map.constant.js.map +0 -1
  219. package/esm2015/lib/forms-ui/components/currency/currency-symbol.component.js +0 -28
  220. package/esm2015/lib/forms-ui/components/currency/currency-symbol.component.js.map +0 -1
  221. package/esm2015/lib/forms-ui/components/date-input/date-input.component.js +0 -276
  222. package/esm2015/lib/forms-ui/components/date-input/date-input.component.js.map +0 -1
  223. package/esm2015/lib/forms-ui/components/drag-and-drop-list/constants.js +0 -5
  224. package/esm2015/lib/forms-ui/components/drag-and-drop-list/constants.js.map +0 -1
  225. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.js +0 -54
  226. 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
  227. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.js +0 -107
  228. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.js.map +0 -1
  229. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.js +0 -25
  230. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.js.map +0 -1
  231. package/esm2015/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.js +0 -133
  232. package/esm2015/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.js.map +0 -1
  233. package/esm2015/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.js +0 -37
  234. package/esm2015/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.js.map +0 -1
  235. package/esm2015/lib/forms-ui/components/error-message/error-message.component.js +0 -29
  236. package/esm2015/lib/forms-ui/components/error-message/error-message.component.js.map +0 -1
  237. package/esm2015/lib/forms-ui/components/form-error/form-error.component.js +0 -44
  238. package/esm2015/lib/forms-ui/components/form-error/form-error.component.js.map +0 -1
  239. package/esm2015/lib/forms-ui/components/icon/icon.component.js +0 -49
  240. package/esm2015/lib/forms-ui/components/icon/icon.component.js.map +0 -1
  241. package/esm2015/lib/forms-ui/components/input/input.component.js +0 -51
  242. package/esm2015/lib/forms-ui/components/input/input.component.js.map +0 -1
  243. package/esm2015/lib/forms-ui/components/keyboard-select.directive.js +0 -117
  244. package/esm2015/lib/forms-ui/components/keyboard-select.directive.js.map +0 -1
  245. package/esm2015/lib/forms-ui/components/multi-select/multi-select.component.js +0 -257
  246. package/esm2015/lib/forms-ui/components/multi-select/multi-select.component.js.map +0 -1
  247. package/esm2015/lib/forms-ui/components/option/option.component.js +0 -85
  248. package/esm2015/lib/forms-ui/components/option/option.component.js.map +0 -1
  249. package/esm2015/lib/forms-ui/components/option-group/option-group.component.js +0 -34
  250. package/esm2015/lib/forms-ui/components/option-group/option-group.component.js.map +0 -1
  251. package/esm2015/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.js +0 -105
  252. package/esm2015/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.js.map +0 -1
  253. package/esm2015/lib/forms-ui/components/options-dropdown/options-dropdown.component.js +0 -169
  254. package/esm2015/lib/forms-ui/components/options-dropdown/options-dropdown.component.js.map +0 -1
  255. package/esm2015/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.js +0 -96
  256. package/esm2015/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.js.map +0 -1
  257. package/esm2015/lib/forms-ui/components/picker/picker-trigger.directive.js +0 -36
  258. package/esm2015/lib/forms-ui/components/picker/picker-trigger.directive.js.map +0 -1
  259. package/esm2015/lib/forms-ui/components/picker/picker.component.js +0 -210
  260. package/esm2015/lib/forms-ui/components/picker/picker.component.js.map +0 -1
  261. package/esm2015/lib/forms-ui/components/picker-option/picker-option.component.js +0 -124
  262. package/esm2015/lib/forms-ui/components/picker-option/picker-option.component.js.map +0 -1
  263. package/esm2015/lib/forms-ui/components/pill-item/pill-item.component.js +0 -37
  264. package/esm2015/lib/forms-ui/components/pill-item/pill-item.component.js.map +0 -1
  265. package/esm2015/lib/forms-ui/components/pill-list/pill-list.component.js +0 -64
  266. package/esm2015/lib/forms-ui/components/pill-list/pill-list.component.js.map +0 -1
  267. package/esm2015/lib/forms-ui/components/responsive-input/responsive-input.component.js +0 -104
  268. package/esm2015/lib/forms-ui/components/responsive-input/responsive-input.component.js.map +0 -1
  269. package/esm2015/lib/forms-ui/components/single-select/single-select.component.js +0 -279
  270. package/esm2015/lib/forms-ui/components/single-select/single-select.component.js.map +0 -1
  271. package/esm2015/lib/forms-ui/components/slider-toggle/slider-toggle.component.js +0 -47
  272. package/esm2015/lib/forms-ui/components/slider-toggle/slider-toggle.component.js.map +0 -1
  273. package/esm2015/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.js +0 -56
  274. package/esm2015/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.js.map +0 -1
  275. package/esm2015/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.js +0 -25
  276. package/esm2015/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.js.map +0 -1
  277. package/esm2015/lib/forms-ui/directives/form-error.directive.js +0 -111
  278. package/esm2015/lib/forms-ui/directives/form-error.directive.js.map +0 -1
  279. package/esm2015/lib/forms-ui/directives/form-submit.directive.js +0 -28
  280. package/esm2015/lib/forms-ui/directives/form-submit.directive.js.map +0 -1
  281. package/esm2015/lib/forms-ui/directives/keyboard-action-source.directive.js +0 -53
  282. package/esm2015/lib/forms-ui/directives/keyboard-action-source.directive.js.map +0 -1
  283. package/esm2015/lib/forms-ui/directives/mark-invalid.directive.js +0 -38
  284. package/esm2015/lib/forms-ui/directives/mark-invalid.directive.js.map +0 -1
  285. package/esm2015/lib/forms-ui/directives/select-dropdown.directive.js +0 -31
  286. package/esm2015/lib/forms-ui/directives/select-dropdown.directive.js.map +0 -1
  287. package/esm2015/lib/forms-ui/directives/selectable-item.directive.js +0 -33
  288. package/esm2015/lib/forms-ui/directives/selectable-item.directive.js.map +0 -1
  289. package/esm2015/lib/forms-ui/directives/selected-option.directive.js +0 -26
  290. package/esm2015/lib/forms-ui/directives/selected-option.directive.js.map +0 -1
  291. package/esm2015/lib/forms-ui/forms-ui.module.js +0 -236
  292. package/esm2015/lib/forms-ui/forms-ui.module.js.map +0 -1
  293. package/esm2015/lib/forms-ui/helpers/key-codes.constants.js +0 -11
  294. package/esm2015/lib/forms-ui/helpers/key-codes.constants.js.map +0 -1
  295. package/esm2015/lib/forms-ui/helpers/keyboard-navigation.helpers.js +0 -38
  296. package/esm2015/lib/forms-ui/helpers/keyboard-navigation.helpers.js.map +0 -1
  297. package/esm2015/lib/forms-ui/models/base-select.directive.js +0 -148
  298. package/esm2015/lib/forms-ui/models/base-select.directive.js.map +0 -1
  299. package/esm2015/lib/forms-ui/models/dropdown-item.interface.js +0 -2
  300. package/esm2015/lib/forms-ui/models/dropdown-item.interface.js.map +0 -1
  301. package/esm2015/lib/forms-ui/models/single-select-padding.interface.js +0 -2
  302. package/esm2015/lib/forms-ui/models/single-select-padding.interface.js.map +0 -1
  303. package/esm2015/lib/forms-ui/models/sorting.interface.js +0 -7
  304. package/esm2015/lib/forms-ui/models/sorting.interface.js.map +0 -1
  305. package/esm2015/lib/forms-ui/pipes/filter-selection.pipe.js +0 -30
  306. package/esm2015/lib/forms-ui/pipes/filter-selection.pipe.js.map +0 -1
  307. package/esm2015/lib/forms-ui/pipes/filter-term.pipe.js +0 -26
  308. package/esm2015/lib/forms-ui/pipes/filter-term.pipe.js.map +0 -1
  309. package/esm2015/lib/forms-ui/pipes/format-number.pipe.js +0 -65
  310. package/esm2015/lib/forms-ui/pipes/format-number.pipe.js.map +0 -1
  311. package/esm2015/lib/forms-ui/validators/date-in-foreseeable-future.validator.js +0 -26
  312. package/esm2015/lib/forms-ui/validators/date-in-foreseeable-future.validator.js.map +0 -1
  313. package/esm2015/lib/modal-ui/components/modal/modal.component.js +0 -214
  314. package/esm2015/lib/modal-ui/components/modal/modal.component.js.map +0 -1
  315. package/esm2015/lib/modal-ui/components/modal-footer/modal-footer.component.js +0 -15
  316. package/esm2015/lib/modal-ui/components/modal-footer/modal-footer.component.js.map +0 -1
  317. package/esm2015/lib/modal-ui/components/modal-header/modal-header.component.js +0 -27
  318. package/esm2015/lib/modal-ui/components/modal-header/modal-header.component.js.map +0 -1
  319. package/esm2015/lib/modal-ui/directives/modal-content.directive.js +0 -13
  320. package/esm2015/lib/modal-ui/directives/modal-content.directive.js.map +0 -1
  321. package/esm2015/lib/modal-ui/modal.constants.js +0 -3
  322. package/esm2015/lib/modal-ui/modal.constants.js.map +0 -1
  323. package/esm2015/lib/modal-ui/modal.module.js +0 -26
  324. package/esm2015/lib/modal-ui/modal.module.js.map +0 -1
  325. package/esm2015/lib/popover-ui/components/popover/popover.component.js +0 -203
  326. package/esm2015/lib/popover-ui/components/popover/popover.component.js.map +0 -1
  327. package/esm2015/lib/popover-ui/directives/popover-click.directive.js +0 -51
  328. package/esm2015/lib/popover-ui/directives/popover-click.directive.js.map +0 -1
  329. package/esm2015/lib/popover-ui/directives/popover-content.directive.js +0 -16
  330. package/esm2015/lib/popover-ui/directives/popover-content.directive.js.map +0 -1
  331. package/esm2015/lib/popover-ui/directives/popover-hover.directive.js +0 -87
  332. package/esm2015/lib/popover-ui/directives/popover-hover.directive.js.map +0 -1
  333. package/esm2015/lib/popover-ui/popover-ui.module.js +0 -22
  334. package/esm2015/lib/popover-ui/popover-ui.module.js.map +0 -1
  335. package/esm2015/lib/shared/date-helpers.js +0 -35
  336. package/esm2015/lib/shared/date-helpers.js.map +0 -1
  337. package/esm2015/lib/shared/misc-helpers.js +0 -34
  338. package/esm2015/lib/shared/misc-helpers.js.map +0 -1
  339. package/esm2015/lib/shared/observe.js +0 -40
  340. package/esm2015/lib/shared/observe.js.map +0 -1
  341. package/esm2015/lib/tab-ui/components/tab/tab.component.js +0 -75
  342. package/esm2015/lib/tab-ui/components/tab/tab.component.js.map +0 -1
  343. package/esm2015/lib/tab-ui/components/tab-group/tab-group.component.js +0 -78
  344. package/esm2015/lib/tab-ui/components/tab-group/tab-group.component.js.map +0 -1
  345. package/esm2015/lib/tab-ui/tab-ui.module.js +0 -22
  346. package/esm2015/lib/tab-ui/tab-ui.module.js.map +0 -1
  347. package/fesm2015/leanix-components.js.map +0 -1
@@ -0,0 +1,100 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';
2
+ import { BasicDropdownComponent } from '../basic-dropdown/basic-dropdown.component';
3
+ import { KeyboardSelectDirective } from '../keyboard-select.directive';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../core-ui/components/badge/badge.component";
6
+ import * as i2 from "../basic-dropdown-item/basic-dropdown-item.component";
7
+ import * as i3 from "../../../core-ui/components/spinner/spinner.component";
8
+ import * as i4 from "ngx-infinite-scroll";
9
+ import * as i5 from "@angular/common";
10
+ import * as i6 from "../../directives/selectable-item.directive";
11
+ import * as i7 from "@ngx-translate/core";
12
+ /**
13
+ * Usage:
14
+ * <lx-single-select
15
+ * #singleSelect
16
+ * [selection]="value"
17
+ * (selectionChange)="onSelectionChange($event)">
18
+ * <span class="selectedOption">
19
+ * {{ value.label }}
20
+ * </span>
21
+ * <lx-option-group-dropdown
22
+ * class="dropdownComponent"
23
+ * [keyboardSelectAction]="singleSelect.optionsKeyboardSelectAction$"
24
+ * [optionGroups]="optionGroups"
25
+ * (onItemSelected)="singleSelect.selectOption($event)">
26
+ * </lx-option-group-dropdown>
27
+ * </lx-single-select>
28
+ *
29
+ */
30
+ export class OptionGroupDropdownComponent extends KeyboardSelectDirective {
31
+ constructor() {
32
+ super(...arguments);
33
+ this.NAME = 'OptionGroupDropdownComponent';
34
+ this.optionGroups = [];
35
+ this.showCreateNewOption = false;
36
+ this.labelKey = 'label';
37
+ this.loading = false;
38
+ this.showNoResultsIfGroupIsEmpty = false;
39
+ this.onItemSelected = new EventEmitter();
40
+ this.containerScrolled = new EventEmitter();
41
+ this.createNewOption = new EventEmitter();
42
+ }
43
+ get isNewItem() {
44
+ const options = this.optionGroups?.reduce((flatOptions, optionGroup) => flatOptions.concat(optionGroup.options), []) ??
45
+ [];
46
+ return BasicDropdownComponent.isNewItem(options, this.newOptionLabel ?? '', this.labelKey);
47
+ }
48
+ selectOption(option) {
49
+ this.onItemSelected.emit(option);
50
+ }
51
+ trackByLabel(index, optionGroup) {
52
+ return optionGroup.label + index;
53
+ }
54
+ onCreateNewOption() {
55
+ if (!this.loading && this.newOptionLabel) {
56
+ this.createNewOption.emit(this.newOptionLabel);
57
+ }
58
+ }
59
+ trackByValue(_index, option) {
60
+ if (this.trackByProperty) {
61
+ return option[this.trackByProperty];
62
+ }
63
+ return option.value;
64
+ }
65
+ }
66
+ OptionGroupDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionGroupDropdownComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
67
+ OptionGroupDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: OptionGroupDropdownComponent, selector: "lx-option-group-dropdown", inputs: { optionGroups: "optionGroups", newOptionLabel: "newOptionLabel", highlightTerm: "highlightTerm", showCreateNewOption: "showCreateNewOption", labelKey: "labelKey", loading: "loading", trackByProperty: "trackByProperty", showNoResultsIfGroupIsEmpty: "showNoResultsIfGroupIsEmpty" }, outputs: { onItemSelected: "onItemSelected", containerScrolled: "containerScrolled", createNewOption: "createNewOption" }, queries: [{ propertyName: "optionTemplateRef", first: true, predicate: ["optionTemplate"], descendants: true }, { propertyName: "noResultsOptionTemplateRef", first: true, predicate: ["noResultsOptionTemplateRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n #keyboardSelectContainer\n class=\"scrollingPanel lxThinScrollbar\"\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n (scrolled)=\"containerScrolled.emit()\"\n>\n <ul class=\"options\">\n <li\n *ngIf=\"showCreateNewOption && newOptionLabel && isNewItem\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOption()\"\n (select)=\"onCreateNewOption()\"\n [class.highlighted]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <ng-container *ngFor=\"let optionGroup of optionGroups; let groupIndex = index; trackBy: trackByLabel\">\n <li>\n <div class=\"groupLabel\" *ngIf=\"optionGroup.label\">\n <span>{{ optionGroup.label | uppercase }}</span>\n </div>\n <ul>\n <ng-container *ngIf=\"showNoResultsIfGroupIsEmpty && optionGroup.options.length === 0; else options\">\n <li class=\"noResult\">\n <ng-container *ngIf=\"noResultsOptionTemplateRef; else defaultText\">\n <ng-container\n *ngTemplateOutlet=\"noResultsOptionTemplateRef; context: { group: optionGroup, groupIndex: groupIndex }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultText>\n <span>{{ NAME + '.noResults' | translate }}</span>\n </ng-template>\n </li>\n </ng-container>\n <ng-template #options>\n <li\n *ngFor=\"let option of optionGroup.options; let index = index; trackBy: trackByValue\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.highlighted]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else basicDropdownOption\">\n <ng-container\n *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index, groupIndex: groupIndex }\"\n ></ng-container>\n </ng-container>\n <ng-template #basicDropdownOption>\n <lx-basic-dropdown-item\n [label]=\"option.label\"\n labelFontWeight=\"normal\"\n [highlightTerm]=\"highlightTerm\"\n ></lx-basic-dropdown-item>\n </ng-template>\n </li>\n </ng-template>\n </ul>\n </li>\n </ng-container>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n </ul>\n</div>\n", styles: [":host{display:block}.scrollingPanel{overflow-y:auto;max-height:400px}.groupLabel{line-height:23px;padding:4px 12px;color:#99a5bb;letter-spacing:.5px;font-weight:700;text-transform:uppercase;cursor:default}ul{list-style:none;margin:0;padding:0}ul:not(:last-child){border-bottom:solid 1px #eaedf1}.noResult{display:block;padding:4px 12px}.option{cursor:pointer;display:block;padding:4px 12px}.option:hover{background-color:#e1e5eb!important}.option.highlighted{background:#eaedf1}\n"], components: [{ type: i1.BadgeComponent, selector: "lx-badge", inputs: ["content", "size", "color"] }, { type: i2.BasicDropdownItemComponent, selector: "lx-basic-dropdown-item", inputs: ["label", "description", "highlightTerm", "labelFontWeight", "descriptionFontStyle"] }, { type: i3.SpinnerComponent, selector: "lx-spinner", inputs: ["fadeBackground"] }], directives: [{ type: i4.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.SelectableItemDirective, selector: "[lxSelectableItem]", inputs: ["scrollInContainer", "lxSelectableItem"], outputs: ["select"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i5.AsyncPipe, "uppercase": i5.UpperCasePipe, "translate": i7.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionGroupDropdownComponent, decorators: [{
69
+ type: Component,
70
+ args: [{ selector: 'lx-option-group-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #keyboardSelectContainer\n class=\"scrollingPanel lxThinScrollbar\"\n infinite-scroll\n [scrollWindow]=\"false\"\n [fromRoot]=\"true\"\n (scrolled)=\"containerScrolled.emit()\"\n>\n <ul class=\"options\">\n <li\n *ngIf=\"showCreateNewOption && newOptionLabel && isNewItem\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n (click)=\"onCreateNewOption()\"\n (select)=\"onCreateNewOption()\"\n [class.highlighted]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n class=\"option\"\n >\n <span class=\"newEntryContent\">\n {{ newOptionLabel }}\n </span>\n <lx-badge class=\"lx-margin-left\" size=\"small\" [content]=\"'common.new' | translate | uppercase\"></lx-badge>\n </li>\n <ng-container *ngFor=\"let optionGroup of optionGroups; let groupIndex = index; trackBy: trackByLabel\">\n <li>\n <div class=\"groupLabel\" *ngIf=\"optionGroup.label\">\n <span>{{ optionGroup.label | uppercase }}</span>\n </div>\n <ul>\n <ng-container *ngIf=\"showNoResultsIfGroupIsEmpty && optionGroup.options.length === 0; else options\">\n <li class=\"noResult\">\n <ng-container *ngIf=\"noResultsOptionTemplateRef; else defaultText\">\n <ng-container\n *ngTemplateOutlet=\"noResultsOptionTemplateRef; context: { group: optionGroup, groupIndex: groupIndex }\"\n ></ng-container>\n </ng-container>\n <ng-template #defaultText>\n <span>{{ NAME + '.noResults' | translate }}</span>\n </ng-template>\n </li>\n </ng-container>\n <ng-template #options>\n <li\n *ngFor=\"let option of optionGroup.options; let index = index; trackBy: trackByValue\"\n lxSelectableItem\n [scrollInContainer]=\"keyboardSelectContainer\"\n #item\n class=\"option\"\n (click)=\"selectOption(option)\"\n (select)=\"selectOption(option)\"\n [class.highlighted]=\"isItemSelected(item, (selectedItem$ | async)?.element)\"\n >\n <ng-container *ngIf=\"optionTemplateRef; else basicDropdownOption\">\n <ng-container\n *ngTemplateOutlet=\"optionTemplateRef; context: { $implicit: option, index: index, groupIndex: groupIndex }\"\n ></ng-container>\n </ng-container>\n <ng-template #basicDropdownOption>\n <lx-basic-dropdown-item\n [label]=\"option.label\"\n labelFontWeight=\"normal\"\n [highlightTerm]=\"highlightTerm\"\n ></lx-basic-dropdown-item>\n </ng-template>\n </li>\n </ng-template>\n </ul>\n </li>\n </ng-container>\n <lx-spinner *ngIf=\"loading\" [fadeBackground]=\"true\"></lx-spinner>\n </ul>\n</div>\n", styles: [":host{display:block}.scrollingPanel{overflow-y:auto;max-height:400px}.groupLabel{line-height:23px;padding:4px 12px;color:#99a5bb;letter-spacing:.5px;font-weight:700;text-transform:uppercase;cursor:default}ul{list-style:none;margin:0;padding:0}ul:not(:last-child){border-bottom:solid 1px #eaedf1}.noResult{display:block;padding:4px 12px}.option{cursor:pointer;display:block;padding:4px 12px}.option:hover{background-color:#e1e5eb!important}.option.highlighted{background:#eaedf1}\n"] }]
71
+ }], propDecorators: { optionGroups: [{
72
+ type: Input
73
+ }], newOptionLabel: [{
74
+ type: Input
75
+ }], highlightTerm: [{
76
+ type: Input
77
+ }], showCreateNewOption: [{
78
+ type: Input
79
+ }], labelKey: [{
80
+ type: Input
81
+ }], loading: [{
82
+ type: Input
83
+ }], trackByProperty: [{
84
+ type: Input
85
+ }], showNoResultsIfGroupIsEmpty: [{
86
+ type: Input
87
+ }], onItemSelected: [{
88
+ type: Output
89
+ }], containerScrolled: [{
90
+ type: Output
91
+ }], createNewOption: [{
92
+ type: Output
93
+ }], optionTemplateRef: [{
94
+ type: ContentChild,
95
+ args: ['optionTemplate']
96
+ }], noResultsOptionTemplateRef: [{
97
+ type: ContentChild,
98
+ args: ['noResultsOptionTemplateRef']
99
+ }] } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWdyb3VwLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2NvbXBvbmVudHMvb3B0aW9uLWdyb3VwLWRyb3Bkb3duL29wdGlvbi1ncm91cC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL29wdGlvbi1ncm91cC1kcm9wZG93bi9vcHRpb24tZ3JvdXAtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7OztBQVF2RTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFPSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsdUJBQXVCO0lBTnpFOztRQU9XLFNBQUksR0FBRyw4QkFBOEIsQ0FBQztRQUV0QyxpQkFBWSxHQUE4QixFQUFFLENBQUM7UUFNN0Msd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLGFBQVEsR0FBVyxPQUFPLENBQUM7UUFDM0IsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUV6QixnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUFFNUMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUM3RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztLQXFDeEQ7SUEzQkMsSUFBVyxTQUFTO1FBQ2xCLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUE4QixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqSSxFQUFFLENBQUM7UUFDTCxPQUFPLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBK0I7UUFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFhLEVBQUUsV0FBb0M7UUFDOUQsT0FBTyxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjLEVBQUUsTUFBK0I7UUFDMUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDOzt5SEFyRFUsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsZ3VCQ2xDekMsdzlGQXlFQTsyRkR2Q2EsNEJBQTRCO2tCQU54QyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTTs4QkFLdEMsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRXlCLGlCQUFpQjtzQkFBaEQsWUFBWTt1QkFBQyxnQkFBZ0I7Z0JBTWMsMEJBQTBCO3NCQUFyRSxZQUFZO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzaWNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2ljLWRyb3Bkb3duL2Jhc2ljLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLZXlib2FyZFNlbGVjdERpcmVjdGl2ZSB9IGZyb20gJy4uL2tleWJvYXJkLXNlbGVjdC5kaXJlY3RpdmUnO1xuXG5leHBvcnQgdHlwZSBPcHRpb25Hcm91cE9wdGlvbiA9IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9O1xuZXhwb3J0IHR5cGUgU2luZ2xlU2VsZWN0T3B0aW9uR3JvdXA8VCA9IGFueT4gPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IChPcHRpb25Hcm91cE9wdGlvbiB8IFQpW107XG59O1xuXG4vKipcbiAqIFVzYWdlOlxuICogPGx4LXNpbmdsZS1zZWxlY3RcbiAqICAgICNzaW5nbGVTZWxlY3RcbiAqICAgIFtzZWxlY3Rpb25dPVwidmFsdWVcIlxuICogICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gKiAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWRPcHRpb25cIj5cbiAqICAgICB7eyB2YWx1ZS5sYWJlbCB9fVxuICogICA8L3NwYW4+XG4gKiAgIDxseC1vcHRpb24tZ3JvdXAtZHJvcGRvd25cbiAqICAgICBjbGFzcz1cImRyb3Bkb3duQ29tcG9uZW50XCJcbiAqICAgICBba2V5Ym9hcmRTZWxlY3RBY3Rpb25dPVwic2luZ2xlU2VsZWN0Lm9wdGlvbnNLZXlib2FyZFNlbGVjdEFjdGlvbiRcIlxuICogICAgIFtvcHRpb25Hcm91cHNdPVwib3B0aW9uR3JvdXBzXCJcbiAqICAgICAob25JdGVtU2VsZWN0ZWQpPVwic2luZ2xlU2VsZWN0LnNlbGVjdE9wdGlvbigkZXZlbnQpXCI+XG4gKiAgICA8L2x4LW9wdGlvbi1ncm91cC1kcm9wZG93bj5cbiAqIDwvbHgtc2luZ2xlLXNlbGVjdD5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LW9wdGlvbi1ncm91cC1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnb3B0aW9uLWdyb3VwLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ29wdGlvbi1ncm91cC1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBPcHRpb25Hcm91cERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgS2V5Ym9hcmRTZWxlY3REaXJlY3RpdmUge1xuICByZWFkb25seSBOQU1FID0gJ09wdGlvbkdyb3VwRHJvcGRvd25Db21wb25lbnQnO1xuXG4gIEBJbnB1dCgpIG9wdGlvbkdyb3VwczogU2luZ2xlU2VsZWN0T3B0aW9uR3JvdXBbXSA9IFtdO1xuICAvKipcbiAgICogVXN1YWxseSBhIHN0cmVhbSBvZiB0aGUgY3VycmVudCBpbnB1dCB2YWx1ZSBvZiB0aGUgcGFyZW50IHNlbGVjdC5cbiAgICovXG4gIEBJbnB1dCgpIG5ld09wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBoaWdobGlnaHRUZXJtPzogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlTmV3T3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGxhYmVsS2V5OiBzdHJpbmcgPSAnbGFiZWwnO1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wZXJ0eT86IHN0cmluZztcbiAgQElucHV0KCkgc2hvd05vUmVzdWx0c0lmR3JvdXBJc0VtcHR5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG9uSXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxPcHRpb25Hcm91cE9wdGlvbiB8IGFueT4oKTtcbiAgQE91dHB1dCgpIGNvbnRhaW5lclNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY3JlYXRlTmV3T3B0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uVGVtcGxhdGUnKSBvcHRpb25UZW1wbGF0ZVJlZj86IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBJZiB5b3UgcHJvdmlkZSBhIDxuZy10ZW1wbGF0ZSAjbm9SZXN1bHRzT3B0aW9uVGVtcGxhdGVSZWY+PC9uZy10ZW1wbGF0ZT4gaW5zaWRlIHRoZSA8bHgtb3B0aW9uLWdyb3VwLWRyb3Bkb3duPlxuICAgKiBpdCB3aWxsIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgXCJubyByZXN1bHRzXCIgb3B0aW9uIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgXCJObyByZXN1bHRzXCIgdGV4dC5cbiAgICogVGhpcyB3YXkgeW91IGNhbiBlYXNpbHkgZGVmaW5lIGRpZmZlcmVudCBcIk5vIHJlc3VsdHNcIiB0ZXh0cyBmb3IgZGlmZmVyZW50IGdyb3VwcyB0b28uXG4gICAqL1xuICBAQ29udGVudENoaWxkKCdub1Jlc3VsdHNPcHRpb25UZW1wbGF0ZVJlZicpIG5vUmVzdWx0c09wdGlvblRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwdWJsaWMgZ2V0IGlzTmV3SXRlbSgpIHtcbiAgICBjb25zdCBvcHRpb25zID1cbiAgICAgIHRoaXMub3B0aW9uR3JvdXBzPy5yZWR1Y2U8KE9wdGlvbkdyb3VwT3B0aW9uIHwgYW55KVtdPigoZmxhdE9wdGlvbnMsIG9wdGlvbkdyb3VwKSA9PiBmbGF0T3B0aW9ucy5jb25jYXQob3B0aW9uR3JvdXAub3B0aW9ucyksIFtdKSA/P1xuICAgICAgW107XG4gICAgcmV0dXJuIEJhc2ljRHJvcGRvd25Db21wb25lbnQuaXNOZXdJdGVtKG9wdGlvbnMsIHRoaXMubmV3T3B0aW9uTGFiZWwgPz8gJycsIHRoaXMubGFiZWxLZXkpO1xuICB9XG5cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogT3B0aW9uR3JvdXBPcHRpb24gfCBhbnkpIHtcbiAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQob3B0aW9uKTtcbiAgfVxuXG4gIHRyYWNrQnlMYWJlbChpbmRleDogbnVtYmVyLCBvcHRpb25Hcm91cDogU2luZ2xlU2VsZWN0T3B0aW9uR3JvdXApIHtcbiAgICByZXR1cm4gb3B0aW9uR3JvdXAubGFiZWwgKyBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBvbkNyZWF0ZU5ld09wdGlvbigpIHtcbiAgICBpZiAoIXRoaXMubG9hZGluZyAmJiB0aGlzLm5ld09wdGlvbkxhYmVsKSB7XG4gICAgICB0aGlzLmNyZWF0ZU5ld09wdGlvbi5lbWl0KHRoaXMubmV3T3B0aW9uTGFiZWwpO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlWYWx1ZShfaW5kZXg6IG51bWJlciwgb3B0aW9uOiBPcHRpb25Hcm91cE9wdGlvbiB8IGFueSkge1xuICAgIGlmICh0aGlzLnRyYWNrQnlQcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIG9wdGlvblt0aGlzLnRyYWNrQnlQcm9wZXJ0eV07XG4gICAgfVxuICAgIHJldHVybiBvcHRpb24udmFsdWU7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2tleWJvYXJkU2VsZWN0Q29udGFpbmVyXG4gIGNsYXNzPVwic2Nyb2xsaW5nUGFuZWwgbHhUaGluU2Nyb2xsYmFyXCJcbiAgaW5maW5pdGUtc2Nyb2xsXG4gIFtzY3JvbGxXaW5kb3ddPVwiZmFsc2VcIlxuICBbZnJvbVJvb3RdPVwidHJ1ZVwiXG4gIChzY3JvbGxlZCk9XCJjb250YWluZXJTY3JvbGxlZC5lbWl0KClcIlxuPlxuICA8dWwgY2xhc3M9XCJvcHRpb25zXCI+XG4gICAgPGxpXG4gICAgICAqbmdJZj1cInNob3dDcmVhdGVOZXdPcHRpb24gJiYgbmV3T3B0aW9uTGFiZWwgJiYgaXNOZXdJdGVtXCJcbiAgICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICAgIFtzY3JvbGxJbkNvbnRhaW5lcl09XCJrZXlib2FyZFNlbGVjdENvbnRhaW5lclwiXG4gICAgICAjaXRlbVxuICAgICAgKGNsaWNrKT1cIm9uQ3JlYXRlTmV3T3B0aW9uKClcIlxuICAgICAgKHNlbGVjdCk9XCJvbkNyZWF0ZU5ld09wdGlvbigpXCJcbiAgICAgIFtjbGFzcy5oaWdobGlnaHRlZF09XCJpc0l0ZW1TZWxlY3RlZChpdGVtLCAoc2VsZWN0ZWRJdGVtJCB8IGFzeW5jKT8uZWxlbWVudClcIlxuICAgICAgY2xhc3M9XCJvcHRpb25cIlxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwibmV3RW50cnlDb250ZW50XCI+XG4gICAgICAgIHt7IG5ld09wdGlvbkxhYmVsIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8bHgtYmFkZ2UgY2xhc3M9XCJseC1tYXJnaW4tbGVmdFwiIHNpemU9XCJzbWFsbFwiIFtjb250ZW50XT1cIidjb21tb24ubmV3JyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZVwiPjwvbHgtYmFkZ2U+XG4gICAgPC9saT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBvcHRpb25Hcm91cHM7IGxldCBncm91cEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlMYWJlbFwiPlxuICAgICAgPGxpPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBMYWJlbFwiICpuZ0lmPVwib3B0aW9uR3JvdXAubGFiZWxcIj5cbiAgICAgICAgICA8c3Bhbj57eyBvcHRpb25Hcm91cC5sYWJlbCB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd05vUmVzdWx0c0lmR3JvdXBJc0VtcHR5ICYmIG9wdGlvbkdyb3VwLm9wdGlvbnMubGVuZ3RoID09PSAwOyBlbHNlIG9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5vUmVzdWx0XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub1Jlc3VsdHNPcHRpb25UZW1wbGF0ZVJlZjsgZWxzZSBkZWZhdWx0VGV4dFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRzT3B0aW9uVGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgZ3JvdXA6IG9wdGlvbkdyb3VwLCBncm91cEluZGV4OiBncm91cEluZGV4IH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRleHQ+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgTkFNRSArICcubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNvcHRpb25zPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uR3JvdXAub3B0aW9uczsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlWYWx1ZVwiXG4gICAgICAgICAgICAgIGx4U2VsZWN0YWJsZUl0ZW1cbiAgICAgICAgICAgICAgW3Njcm9sbEluQ29udGFpbmVyXT1cImtleWJvYXJkU2VsZWN0Q29udGFpbmVyXCJcbiAgICAgICAgICAgICAgI2l0ZW1cbiAgICAgICAgICAgICAgY2xhc3M9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICAgICAoc2VsZWN0KT1cInNlbGVjdE9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImlzSXRlbVNlbGVjdGVkKGl0ZW0sIChzZWxlY3RlZEl0ZW0kIHwgYXN5bmMpPy5lbGVtZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25UZW1wbGF0ZVJlZjsgZWxzZSBiYXNpY0Ryb3Bkb3duT3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25UZW1wbGF0ZVJlZjsgY29udGV4dDogeyAkaW1wbGljaXQ6IG9wdGlvbiwgaW5kZXg6IGluZGV4LCBncm91cEluZGV4OiBncm91cEluZGV4IH1cIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYmFzaWNEcm9wZG93bk9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bHgtYmFzaWMtZHJvcGRvd24taXRlbVxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBsYWJlbEZvbnRXZWlnaHQ9XCJub3JtYWxcIlxuICAgICAgICAgICAgICAgICAgW2hpZ2hsaWdodFRlcm1dPVwiaGlnaGxpZ2h0VGVybVwiXG4gICAgICAgICAgICAgICAgPjwvbHgtYmFzaWMtZHJvcGRvd24taXRlbT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGx4LXNwaW5uZXIgKm5nSWY9XCJsb2FkaW5nXCIgW2ZhZGVCYWNrZ3JvdW5kXT1cInRydWVcIj48L2x4LXNwaW5uZXI+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,163 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Input } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, fromEvent, merge, Subject } from 'rxjs';
3
+ import { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, takeUntil, withLatestFrom } from 'rxjs/operators';
4
+ import { KeyboardActionSourceDirective } from '../../directives/keyboard-action-source.directive';
5
+ import { KeyboardSelectAction } from '../keyboard-select.directive';
6
+ import { OptionComponent } from '../option/option.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "../../../core-ui/directives/autoclose.directive";
10
+ export class OptionsDropdownComponent {
11
+ constructor(changeDetection) {
12
+ this.changeDetection = changeDetection;
13
+ this.NAME = 'OptionsDropdownComponent';
14
+ this.align = 'right';
15
+ this.closeOnScroll = false;
16
+ this.disabled = false;
17
+ this.maxHeight = 'none';
18
+ this.closeOnSelect = true;
19
+ this.highlightedOptionIndex$ = new BehaviorSubject(0);
20
+ this._open = false;
21
+ this.isSubdropdownExpanded = false;
22
+ this.destroyed$ = new Subject();
23
+ }
24
+ set open(value) {
25
+ if (this.disabled) {
26
+ return;
27
+ }
28
+ this._open = value;
29
+ if (this.trigger) {
30
+ // Don't emit keyboard actions while the dropdown is not open yet.
31
+ this.trigger.dontEmit = !this.open;
32
+ }
33
+ if (this.open) {
34
+ this.isSubdropdownExpanded = false;
35
+ this.setInitialHighlightingIndex();
36
+ }
37
+ this.changeDetection.markForCheck();
38
+ }
39
+ get open() {
40
+ return this._open;
41
+ }
42
+ get options() {
43
+ return this._options.toArray();
44
+ }
45
+ ngAfterViewInit() {
46
+ this.trigger.dontEmit = !this.open;
47
+ const optionsChanges$ = this._options.changes.pipe(startWith(this._options), map((options) => options.toArray()));
48
+ this.trigger.keyboardActions$
49
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.NEXT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.next(index, options)))
50
+ .subscribe(this.highlightedOptionIndex$);
51
+ this.trigger.keyboardActions$
52
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.PREV), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.prev(index, options)))
53
+ .subscribe(this.highlightedOptionIndex$);
54
+ this.trigger.keyboardActions$
55
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.LEFT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
56
+ .subscribe(this.highlightedOptionIndex$);
57
+ this.trigger.keyboardActions$
58
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.RIGHT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
59
+ .subscribe(this.highlightedOptionIndex$);
60
+ this.trigger.keyboardActions$
61
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.CLOSE))
62
+ .subscribe(() => this.closeDropdown());
63
+ this.trigger.keyboardActions$
64
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.EXECUTE), withLatestFrom(this.highlightedOptionIndex$, (_, index) => index))
65
+ .subscribe((index) => {
66
+ this.options[index]?.selectOption();
67
+ });
68
+ /** Combined stream of all of the child options' select outputs. */
69
+ this._options.changes
70
+ .pipe(startWith(this._options), filter(() => this.closeOnSelect), switchMap(() => merge(...this._options.map((option) => option.select), ...this._options.map((option) => option.selectedClick))), delay(0), takeUntil(this.destroyed$))
71
+ .subscribe((_value) => {
72
+ this.closeDropdown();
73
+ });
74
+ combineLatest(optionsChanges$, this.highlightedOptionIndex$)
75
+ .pipe(delay(0), map(([options, index]) => options[index]), distinctUntilChanged(), takeUntil(this.destroyed$))
76
+ .subscribe((optionToBeHighlighted) => {
77
+ this.options.forEach((option) => option.setHighlighted(optionToBeHighlighted === option));
78
+ this.changeDetection.markForCheck();
79
+ });
80
+ if (this.closeOnScroll) {
81
+ fromEvent(window, 'scroll')
82
+ .pipe(debounceTime(100), takeUntil(this.destroyed$))
83
+ .subscribe(() => {
84
+ this.open = false;
85
+ this.trigger.blur();
86
+ });
87
+ }
88
+ }
89
+ ngOnDestroy() {
90
+ this.destroyed$.next();
91
+ }
92
+ closeDropdown() {
93
+ this.open = false;
94
+ }
95
+ setInitialHighlightingIndex() {
96
+ const firstAvailableIndex = this.options.map((option) => !this.optionIsHighlightable(option)).indexOf(false, 0);
97
+ this.highlightedOptionIndex$.next(firstAvailableIndex);
98
+ }
99
+ prev(currentIndex, items) {
100
+ if (currentIndex > 0) {
101
+ const prevEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).lastIndexOf(false, currentIndex - 1);
102
+ return prevEnabledIndex !== -1 ? prevEnabledIndex : currentIndex;
103
+ }
104
+ else {
105
+ return currentIndex;
106
+ }
107
+ }
108
+ next(currentIndex, items) {
109
+ if (currentIndex < items.length) {
110
+ const nextEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).indexOf(false, currentIndex + 1);
111
+ return nextEnabledIndex !== -1 ? nextEnabledIndex : currentIndex;
112
+ }
113
+ else {
114
+ return currentIndex;
115
+ }
116
+ }
117
+ expand(currentIndex, items) {
118
+ if (items[currentIndex].hasSubdropdown) {
119
+ this.isSubdropdownExpanded = true;
120
+ return this.next(currentIndex, items);
121
+ }
122
+ else {
123
+ return currentIndex;
124
+ }
125
+ }
126
+ collapse(currentIndex, items) {
127
+ if (this.isSubdropdownExpanded) {
128
+ this.isSubdropdownExpanded = false;
129
+ return this.prev(currentIndex, items);
130
+ }
131
+ else {
132
+ return currentIndex;
133
+ }
134
+ }
135
+ optionIsHighlightable(option) {
136
+ const isToplevelOptionAndAllowed = !option.isSuboption && !this.isSubdropdownExpanded;
137
+ const isSecondlevelOptionAndAllowed = option.isSuboption && this.isSubdropdownExpanded;
138
+ return !option.disabled && (isToplevelOptionAndAllowed || isSecondlevelOptionAndAllowed);
139
+ }
140
+ }
141
+ OptionsDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionsDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
142
+ OptionsDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: OptionsDropdownComponent, selector: "lx-options-dropdown", inputs: { align: "align", closeOnScroll: "closeOnScroll", disabled: "disabled", maxHeight: "maxHeight", closeOnSelect: "closeOnSelect" }, queries: [{ propertyName: "trigger", first: true, predicate: KeyboardActionSourceDirective, descendants: true }, { propertyName: "_options", predicate: OptionComponent, descendants: true }], ngImport: i0, template: "<div (click)=\"open = !open\" class=\"triggerContainer\">\n <ng-content select=\"[lxKeyboardActionSource]\"></ng-content>\n</div>\n<ul\n *ngIf=\"open\"\n [class.left]=\"align === 'left'\"\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n lxAutoclose\n (autoclose)=\"closeDropdown()\"\n>\n <ng-content></ng-content>\n</ul>\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.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.AutocloseDirective, selector: "[lxAutoclose]", inputs: ["autocloseGroup"], outputs: ["autoclose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionsDropdownComponent, decorators: [{
144
+ type: Component,
145
+ args: [{ selector: 'lx-options-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div (click)=\"open = !open\" class=\"triggerContainer\">\n <ng-content select=\"[lxKeyboardActionSource]\"></ng-content>\n</div>\n<ul\n *ngIf=\"open\"\n [class.left]=\"align === 'left'\"\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n lxAutoclose\n (autoclose)=\"closeDropdown()\"\n>\n <ng-content></ng-content>\n</ul>\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"] }]
146
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { align: [{
147
+ type: Input
148
+ }], closeOnScroll: [{
149
+ type: Input
150
+ }], disabled: [{
151
+ type: Input
152
+ }], maxHeight: [{
153
+ type: Input
154
+ }], closeOnSelect: [{
155
+ type: Input
156
+ }], trigger: [{
157
+ type: ContentChild,
158
+ args: [KeyboardActionSourceDirective]
159
+ }], _options: [{
160
+ type: ContentChildren,
161
+ args: [OptionComponent, { descendants: true }]
162
+ }] } });
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL29wdGlvbnMtZHJvcGRvd24vb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL29wdGlvbnMtZHJvcGRvd24vb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLEtBQUssRUFHTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pJLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQVE3RCxNQUFNLE9BQU8sd0JBQXdCO0lBNENuQyxZQUFvQixlQUFrQztRQUFsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUEzQzdDLFNBQUksR0FBRywwQkFBMEIsQ0FBQztRQUVsQyxVQUFLLEdBQXFCLE9BQU8sQ0FBQztRQUNsQyxrQkFB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QjtJQUNILENBQUM7SUFFTyxRQUFRLENBQUMsWUFBb0IsRUFBRSxLQUF3QjtRQUM3RCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM5QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNMLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE1BQXVCO1FBQ25ELE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3RGLE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUM7UUFDdkYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQywwQkFBMEIsSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNGLENBQUM7O3FIQTNMVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwwT0E2QnJCLDZCQUE2Qiw4REFFMUIsZUFBZSxnREN0RGxDLGlYQWFBOzJGRFVhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTTt3R0FLdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBc0J1QyxPQUFPO3NCQUFuRCxZQUFZO3VCQUFDLDZCQUE2QjtnQkFHM0MsUUFBUTtzQkFEUCxlQUFlO3VCQUFDLGVBQWUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEtleWJvYXJkQWN0aW9uU291cmNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9rZXlib2FyZC1hY3Rpb24tc291cmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBLZXlib2FyZFNlbGVjdEFjdGlvbiB9IGZyb20gJy4uL2tleWJvYXJkLXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdseC1vcHRpb25zLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICdvcHRpb25zLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ29wdGlvbnMtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgT3B0aW9uc0Ryb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgTkFNRSA9ICdPcHRpb25zRHJvcGRvd25Db21wb25lbnQnO1xuXG4gIEBJbnB1dCgpIGFsaWduOiAncmlnaHQnIHwgJ2xlZnQnID0gJ3JpZ2h0JztcbiAgQElucHV0KCkgY2xvc2VPblNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXhIZWlnaHQ6IHN0cmluZyA9ICdub25lJztcbiAgQElucHV0KCkgY2xvc2VPblNlbGVjdDogYm9vbGVhbiA9IHRydWU7XG5cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29wZW4gPSB2YWx1ZTtcbiAgICBpZiAodGhpcy50cmlnZ2VyKSB7XG4gICAgICAvLyBEb24ndCBlbWl0IGtleWJvYXJkIGFjdGlvbnMgd2hpbGUgdGhlIGRyb3Bkb3duIGlzIG5vdCBvcGVuIHlldC5cbiAgICAgIHRoaXMudHJpZ2dlci5kb250RW1pdCA9ICF0aGlzLm9wZW47XG4gICAgfVxuICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldEluaXRpYWxIaWdobGlnaHRpbmdJbmRleCgpO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoS2V5Ym9hcmRBY3Rpb25Tb3VyY2VEaXJlY3RpdmUpIHRyaWdnZXIhOiBLZXlib2FyZEFjdGlvblNvdXJjZURpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkcmVuKE9wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBfb3B0aW9ucyE6IFF1ZXJ5TGlzdDxPcHRpb25Db21wb25lbnQ+O1xuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XG4gIHByaXZhdGUgX29wZW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSBmYWxzZTtcblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudHJpZ2dlci5kb250RW1pdCA9ICF0aGlzLm9wZW47XG5cbiAgICBjb25zdCBvcHRpb25zQ2hhbmdlcyQgPSB0aGlzLl9vcHRpb25zLmNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLl9vcHRpb25zKSxcbiAgICAgIG1hcCgob3B0aW9uczogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD4pID0+IG9wdGlvbnMudG9BcnJheSgpKVxuICAgICk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5ORVhUKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCwgb3B0aW9uc0NoYW5nZXMkLCAoXywgaW5kZXgsIG9wdGlvbnMpID0+IHRoaXMubmV4dChpbmRleCwgb3B0aW9ucykpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQpO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uUFJFViksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIG9wdGlvbnNDaGFuZ2VzJCwgKF8sIGluZGV4LCBvcHRpb25zKSA9PiB0aGlzLnByZXYoaW5kZXgsIG9wdGlvbnMpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkKTtcblxuICAgIHRoaXMudHJpZ2dlci5rZXlib2FyZEFjdGlvbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChrZXlib2FyZFNlbGVjdEFjdGlvbikgPT4ga2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLkxFRlQpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkLCBvcHRpb25zQ2hhbmdlcyQsIChfLCBpbmRleCwgb3B0aW9ucykgPT5cbiAgICAgICAgICB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZCA/IHRoaXMuY29sbGFwc2UoaW5kZXgsIG9wdGlvbnMpIDogdGhpcy5leHBhbmQoaW5kZXgsIG9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5SSUdIVCksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIG9wdGlvbnNDaGFuZ2VzJCwgKF8sIGluZGV4LCBvcHRpb25zKSA9PlxuICAgICAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID8gdGhpcy5jb2xsYXBzZShpbmRleCwgb3B0aW9ucykgOiB0aGlzLmV4cGFuZChpbmRleCwgb3B0aW9ucylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkKTtcblxuICAgIHRoaXMudHJpZ2dlci5rZXlib2FyZEFjdGlvbnMkXG4gICAgICAucGlwZShmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uQ0xPU0UpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlRHJvcGRvd24oKSk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5FWEVDVVRFKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCwgKF8sIGluZGV4KSA9PiBpbmRleClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc1tpbmRleF0/LnNlbGVjdE9wdGlvbigpO1xuICAgICAgfSk7XG5cbiAgICAvKiogQ29tYmluZWQgc3RyZWFtIG9mIGFsbCBvZiB0aGUgY2hpbGQgb3B0aW9ucycgc2VsZWN0IG91dHB1dHMuICovXG4gICAgdGhpcy5fb3B0aW9ucy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuX29wdGlvbnMpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5jbG9zZU9uU2VsZWN0KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IG1lcmdlKC4uLnRoaXMuX29wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3QpLCAuLi50aGlzLl9vcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uc2VsZWN0ZWRDbGljaykpKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChfdmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICB9KTtcblxuICAgIGNvbWJpbmVMYXRlc3Qob3B0aW9uc0NoYW5nZXMkLCB0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgICBtYXAoKFtvcHRpb25zLCBpbmRleF06IFtPcHRpb25Db21wb25lbnRbXSwgbnVtYmVyXSkgPT4gb3B0aW9uc1tpbmRleF0pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgob3B0aW9uVG9CZUhpZ2hsaWdodGVkKSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IG9wdGlvbi5zZXRIaWdobGlnaHRlZChvcHRpb25Ub0JlSGlnaGxpZ2h0ZWQgPT09IG9wdGlvbikpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY2xvc2VPblNjcm9sbCkge1xuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Njcm9sbCcpXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyLmJsdXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgfVxuXG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxIaWdobGlnaHRpbmdJbmRleCgpIHtcbiAgICBjb25zdCBmaXJzdEF2YWlsYWJsZUluZGV4ID0gdGhpcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiAhdGhpcy5vcHRpb25Jc0hpZ2hsaWdodGFibGUob3B0aW9uKSkuaW5kZXhPZihmYWxzZSwgMCk7XG4gICAgdGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JC5uZXh0KGZpcnN0QXZhaWxhYmxlSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmV2KGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogT3B0aW9uQ29tcG9uZW50W10pOiBudW1iZXIge1xuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBwcmV2RW5hYmxlZEluZGV4ID0gaXRlbXMubWFwKChvcHRpb24pID0+ICF0aGlzLm9wdGlvbklzSGlnaGxpZ2h0YWJsZShvcHRpb24pKS5sYXN0SW5kZXhPZihmYWxzZSwgY3VycmVudEluZGV4IC0gMSk7XG4gICAgICByZXR1cm4gcHJldkVuYWJsZWRJbmRleCAhPT0gLTEgPyBwcmV2RW5hYmxlZEluZGV4IDogY3VycmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV4dChjdXJyZW50SW5kZXg6IG51bWJlciwgaXRlbXM6IE9wdGlvbkNvbXBvbmVudFtdKTogbnVtYmVyIHtcbiAgICBpZiAoY3VycmVudEluZGV4IDwgaXRlbXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXh0RW5hYmxlZEluZGV4ID0gaXRlbXMubWFwKChvcHRpb24pID0+ICF0aGlzLm9wdGlvbklzSGlnaGxpZ2h0YWJsZShvcHRpb24pKS5pbmRleE9mKGZhbHNlLCBjdXJyZW50SW5kZXggKyAxKTtcbiAgICAgIHJldHVybiBuZXh0RW5hYmxlZEluZGV4ICE9PSAtMSA/IG5leHRFbmFibGVkSW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmQoY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW1zOiBPcHRpb25Db21wb25lbnRbXSkge1xuICAgIGlmIChpdGVtc1tjdXJyZW50SW5kZXhdIS5oYXNTdWJkcm9wZG93bikge1xuICAgICAgdGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMubmV4dChjdXJyZW50SW5kZXgsIGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbGxhcHNlKGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogT3B0aW9uQ29tcG9uZW50W10pIHtcbiAgICBpZiAodGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQpIHtcbiAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2KGN1cnJlbnRJbmRleCwgaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3B0aW9uSXNIaWdobGlnaHRhYmxlKG9wdGlvbjogT3B0aW9uQ29tcG9uZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNUb3BsZXZlbE9wdGlvbkFuZEFsbG93ZWQgPSAhb3B0aW9uLmlzU3Vib3B0aW9uICYmICF0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZDtcbiAgICBjb25zdCBpc1NlY29uZGxldmVsT3B0aW9uQW5kQWxsb3dlZCA9IG9wdGlvbi5pc1N1Ym9wdGlvbiAmJiB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZDtcbiAgICByZXR1cm4gIW9wdGlvbi5kaXNhYmxlZCAmJiAoaXNUb3BsZXZlbE9wdGlvbkFuZEFsbG93ZWQgfHwgaXNTZWNvbmRsZXZlbE9wdGlvbkFuZEFsbG93ZWQpO1xuICB9XG59XG4iLCI8ZGl2IChjbGljayk9XCJvcGVuID0gIW9wZW5cIiBjbGFzcz1cInRyaWdnZXJDb250YWluZXJcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2x4S2V5Ym9hcmRBY3Rpb25Tb3VyY2VdXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48dWxcbiAgKm5nSWY9XCJvcGVuXCJcbiAgW2NsYXNzLmxlZnRdPVwiYWxpZ24gPT09ICdsZWZ0J1wiXG4gIFtjbGFzcy5zaG93U2Nyb2xsYmFyXT1cIm1heEhlaWdodCAhPT0gJ25vbmUnXCJcbiAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgbHhBdXRvY2xvc2VcbiAgKGF1dG9jbG9zZSk9XCJjbG9zZURyb3Bkb3duKClcIlxuPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L3VsPlxuIl19
@@ -0,0 +1,92 @@
1
+ import { Component, ContentChildren, HostBinding, HostListener, Input } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, fromEvent, merge, Subject } from 'rxjs';
3
+ import { delay, map, startWith, switchMap, takeUntil } from 'rxjs/operators';
4
+ import { executeOnNextTick } from '../../../shared/misc-helpers';
5
+ import { OptionComponent } from '../option/option.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../../core-ui/directives/autoclose.directive";
8
+ import * as i2 from "@angular/common";
9
+ export class OptionsSubDropdownComponent {
10
+ constructor(changeDetection) {
11
+ this.changeDetection = changeDetection;
12
+ this.align = 'right';
13
+ this.hidden = true;
14
+ this.mouseInside$ = new BehaviorSubject(false);
15
+ this.destroyed$ = new Subject();
16
+ this.maxHeight$ = new BehaviorSubject('none');
17
+ }
18
+ mouseenter() {
19
+ this.mouseInside$.next(true);
20
+ }
21
+ mouseleave() {
22
+ this.mouseInside$.next(false);
23
+ }
24
+ ngOnDestroy() {
25
+ this.destroyed$.next();
26
+ }
27
+ ngAfterViewInit() {
28
+ // To avoid `Expression has changed after it was checked`
29
+ executeOnNextTick(() => {
30
+ this.trigger.hasSubdropdown = true;
31
+ });
32
+ merge(this.showByKeyboard(), this.showByMouse())
33
+ .pipe(takeUntil(this.destroyed$))
34
+ .subscribe((show) => {
35
+ this.hidden = !show;
36
+ this.changeDetection.markForCheck();
37
+ if (show) {
38
+ this.updateMaxHeight(this.trigger.elementRef);
39
+ }
40
+ });
41
+ }
42
+ updateMaxHeight(elementRef) {
43
+ const marginBottom = 8;
44
+ const optionTopPosition = elementRef.nativeElement.getBoundingClientRect().top;
45
+ const screenHeight = window.innerHeight;
46
+ const maxHeight = `${screenHeight - optionTopPosition - marginBottom}px`;
47
+ if (this.maxHeight$.getValue() !== maxHeight) {
48
+ this.maxHeight$.next(maxHeight);
49
+ }
50
+ }
51
+ showByKeyboard() {
52
+ const optionChange$ = this.options.changes.pipe(startWith(this.options), map((options) => options.toArray()), map((options) => options.map((option) => {
53
+ option.isSuboption = true;
54
+ return option;
55
+ })));
56
+ return combineLatest([this.trigger.highlight.asObservable(), optionChange$]).pipe(delay(0), // Need tick delay to get option highlighted and filter it out after
57
+ map(([isHighlighted, options]) => isHighlighted || options.some((option) => option.isHighlighted)));
58
+ }
59
+ showByMouse() {
60
+ const mouseEnterTrigger$ = fromEvent(this.trigger.elementRef.nativeElement, 'mouseenter');
61
+ const mouseLeaveTrigger$ = fromEvent(this.trigger.elementRef.nativeElement, 'mouseleave');
62
+ const showOnEnterMouse$ = mouseEnterTrigger$.pipe(map(() => true));
63
+ const showOnEnterSubmenu$ = mouseEnterTrigger$.pipe(switchMap(() => mouseLeaveTrigger$), switchMap(() => this.mouseInside$));
64
+ return merge(showOnEnterMouse$, showOnEnterSubmenu$);
65
+ }
66
+ closeDropdown() {
67
+ this.hidden = true;
68
+ }
69
+ }
70
+ OptionsSubDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionsSubDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
71
+ OptionsSubDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: OptionsSubDropdownComponent, selector: "lx-options-sub-dropdown", inputs: { trigger: "trigger", align: "align" }, host: { listeners: { "mouseenter": "mouseenter()", "mouseleave": "mouseleave()" }, properties: { "class.hidden": "this.hidden" } }, queries: [{ propertyName: "options", predicate: OptionComponent, descendants: true }], ngImport: i0, template: "<div #spacingContainer class=\"spacingContainer\" [class.left]=\"align === 'left'\">\n <ul\n #subDropdown\n class=\"sub-dropdown\"\n lxAutoclose\n [class.showScrollbar]=\"(maxHeight$ | async) !== 'none'\"\n [style.max-height]=\"(maxHeight$ | async) ?? 'none'\"\n (autoclose)=\"closeDropdown()\"\n >\n <ng-content></ng-content>\n </ul>\n</div>\n", styles: [":host{display:block}:host.hidden{display:none}.spacingContainer{position:absolute;left:100%;transform:translateY(-32px);padding:0 0 0 4px}.spacingContainer.left{left:auto;right:100%;padding:0 4px 0 0}.sub-dropdown{position:relative;padding:0;background-color:#fff;border:solid 1px #e1e5eb;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;text-align:left;list-style:none}.sub-dropdown::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}.sub-dropdown::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}.sub-dropdown::-webkit-scrollbar-track-piece{background-color:transparent}.sub-dropdown.showScrollbar{overflow-y:auto}\n"], directives: [{ type: i1.AutocloseDirective, selector: "[lxAutoclose]", inputs: ["autocloseGroup"], outputs: ["autoclose"] }], pipes: { "async": i2.AsyncPipe } });
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionsSubDropdownComponent, decorators: [{
73
+ type: Component,
74
+ args: [{ selector: 'lx-options-sub-dropdown', template: "<div #spacingContainer class=\"spacingContainer\" [class.left]=\"align === 'left'\">\n <ul\n #subDropdown\n class=\"sub-dropdown\"\n lxAutoclose\n [class.showScrollbar]=\"(maxHeight$ | async) !== 'none'\"\n [style.max-height]=\"(maxHeight$ | async) ?? 'none'\"\n (autoclose)=\"closeDropdown()\"\n >\n <ng-content></ng-content>\n </ul>\n</div>\n", styles: [":host{display:block}:host.hidden{display:none}.spacingContainer{position:absolute;left:100%;transform:translateY(-32px);padding:0 0 0 4px}.spacingContainer.left{left:auto;right:100%;padding:0 4px 0 0}.sub-dropdown{position:relative;padding:0;background-color:#fff;border:solid 1px #e1e5eb;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;text-align:left;list-style:none}.sub-dropdown::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}.sub-dropdown::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}.sub-dropdown::-webkit-scrollbar-track-piece{background-color:transparent}.sub-dropdown.showScrollbar{overflow-y:auto}\n"] }]
75
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { trigger: [{
76
+ type: Input
77
+ }], align: [{
78
+ type: Input
79
+ }], options: [{
80
+ type: ContentChildren,
81
+ args: [OptionComponent, { descendants: true }]
82
+ }], hidden: [{
83
+ type: HostBinding,
84
+ args: ['class.hidden']
85
+ }], mouseenter: [{
86
+ type: HostListener,
87
+ args: ['mouseenter']
88
+ }], mouseleave: [{
89
+ type: HostListener,
90
+ args: ['mouseleave']
91
+ }] } });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy1zdWItZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9vcHRpb25zLXN1Yi1kcm9wZG93bi9vcHRpb25zLXN1Yi1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL29wdGlvbnMtc3ViLWRyb3Bkb3duL29wdGlvbnMtc3ViLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBTzdELE1BQU0sT0FBTywyQkFBMkI7SUFhdEMsWUFBb0IsZUFBa0M7UUFBbEMsb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBWDdDLFVBQUssR0FBcUIsT0FBTyxDQUFDO1FBSTNDLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFFTixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRWxELGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FB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QyxDQUFDO1FBQ3RHLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV0RyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FDakQsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQ25DLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQ25DLENBQUM7UUFFRixPQUFPLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQzs7d0hBekZVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLDJRQUdyQixlQUFlLGdEQ3pCbEMsa1hBWUE7MkZEVWEsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLHlCQUF5Qjt3R0FLMUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDbUQsT0FBTztzQkFBL0QsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUd2RCxNQUFNO3NCQURMLFdBQVc7dUJBQUMsY0FBYztnQkFXM0IsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFlBQVk7Z0JBTTFCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBleGVjdXRlT25OZXh0VGljayB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9taXNjLWhlbHBlcnMnO1xuaW1wb3J0IHsgT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdseC1vcHRpb25zLXN1Yi1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnb3B0aW9ucy1zdWItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnb3B0aW9ucy1zdWItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPcHRpb25zU3ViRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB0cmlnZ2VyITogT3B0aW9uQ29tcG9uZW50O1xuICBASW5wdXQoKSBhbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdyaWdodCc7XG4gIEBDb250ZW50Q2hpbGRyZW4oT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbnMhOiBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhpZGRlbicpXG4gIGhpZGRlbiA9IHRydWU7XG5cbiAgcHJpdmF0ZSBtb3VzZUluc2lkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgbWF4SGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignbm9uZScpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgbW91c2VlbnRlcigpIHtcbiAgICB0aGlzLm1vdXNlSW5zaWRlJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIG1vdXNlbGVhdmUoKSB7XG4gICAgdGhpcy5tb3VzZUluc2lkZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFRvIGF2b2lkIGBFeHByZXNzaW9uIGhhcyBjaGFuZ2VkIGFmdGVyIGl0IHdhcyBjaGVja2VkYFxuICAgIGV4ZWN1dGVPbk5leHRUaWNrKCgpID0+IHtcbiAgICAgIHRoaXMudHJpZ2dlci5oYXNTdWJkcm9wZG93biA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBtZXJnZSh0aGlzLnNob3dCeUtleWJvYXJkKCksIHRoaXMuc2hvd0J5TW91c2UoKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZSgoc2hvdykgPT4ge1xuICAgICAgICB0aGlzLmhpZGRlbiA9ICFzaG93O1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdGlvbi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU1heEhlaWdodCh0aGlzLnRyaWdnZXIuZWxlbWVudFJlZik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXhIZWlnaHQoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IDg7XG4gICAgY29uc3Qgb3B0aW9uVG9wUG9zaXRpb24gPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgIGNvbnN0IHNjcmVlbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBgJHtzY3JlZW5IZWlnaHQgLSBvcHRpb25Ub3BQb3NpdGlvbiAtIG1hcmdpbkJvdHRvbX1weGA7XG4gICAgaWYgKHRoaXMubWF4SGVpZ2h0JC5nZXRWYWx1ZSgpICE9PSBtYXhIZWlnaHQpIHtcbiAgICAgIHRoaXMubWF4SGVpZ2h0JC5uZXh0KG1heEhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93QnlLZXlib2FyZCgpIHtcbiAgICBjb25zdCBvcHRpb25DaGFuZ2UkID0gdGhpcy5vcHRpb25zLmNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLm9wdGlvbnMpLFxuICAgICAgbWFwKChvcHRpb25zOiBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PikgPT4gb3B0aW9ucy50b0FycmF5KCkpLFxuICAgICAgbWFwKChvcHRpb25zKSA9PlxuICAgICAgICBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgb3B0aW9uLmlzU3Vib3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy50cmlnZ2VyLmhpZ2hsaWdodC5hc09ic2VydmFibGUoKSwgb3B0aW9uQ2hhbmdlJF0pLnBpcGUoXG4gICAgICBkZWxheSgwKSwgLy8gTmVlZCB0aWNrIGRlbGF5IHRvIGdldCBvcHRpb24gaGlnaGxpZ2h0ZWQgYW5kIGZpbHRlciBpdCBvdXQgYWZ0ZXJcbiAgICAgIG1hcCgoW2lzSGlnaGxpZ2h0ZWQsIG9wdGlvbnNdKSA9PiBpc0hpZ2hsaWdodGVkIHx8IG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24uaXNIaWdobGlnaHRlZCkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0J5TW91c2UoKSB7XG4gICAgY29uc3QgbW91c2VFbnRlclRyaWdnZXIkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudHJpZ2dlci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJyk7XG4gICAgY29uc3QgbW91c2VMZWF2ZVRyaWdnZXIkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudHJpZ2dlci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJyk7XG5cbiAgICBjb25zdCBzaG93T25FbnRlck1vdXNlJCA9IG1vdXNlRW50ZXJUcmlnZ2VyJC5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XG4gICAgY29uc3Qgc2hvd09uRW50ZXJTdWJtZW51JCA9IG1vdXNlRW50ZXJUcmlnZ2VyJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IG1vdXNlTGVhdmVUcmlnZ2VyJCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5tb3VzZUluc2lkZSQpXG4gICAgKTtcblxuICAgIHJldHVybiBtZXJnZShzaG93T25FbnRlck1vdXNlJCwgc2hvd09uRW50ZXJTdWJtZW51JCk7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgfVxufVxuIiwiPGRpdiAjc3BhY2luZ0NvbnRhaW5lciBjbGFzcz1cInNwYWNpbmdDb250YWluZXJcIiBbY2xhc3MubGVmdF09XCJhbGlnbiA9PT0gJ2xlZnQnXCI+XG4gIDx1bFxuICAgICNzdWJEcm9wZG93blxuICAgIGNsYXNzPVwic3ViLWRyb3Bkb3duXCJcbiAgICBseEF1dG9jbG9zZVxuICAgIFtjbGFzcy5zaG93U2Nyb2xsYmFyXT1cIihtYXhIZWlnaHQkIHwgYXN5bmMpICE9PSAnbm9uZSdcIlxuICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIihtYXhIZWlnaHQkIHwgYXN5bmMpID8/ICdub25lJ1wiXG4gICAgKGF1dG9jbG9zZSk9XCJjbG9zZURyb3Bkb3duKClcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3VsPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { Directive } from '@angular/core';
2
+ import { fromEvent, Subject } from 'rxjs';
3
+ import { filter, takeUntil } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ export class PickerTriggerDirective {
6
+ constructor(element) {
7
+ this.element = element;
8
+ this.focused = false;
9
+ this.allClickEvents$ = fromEvent(this.element.nativeElement, 'click');
10
+ this.focusEvent$ = fromEvent(this.element.nativeElement, 'focus');
11
+ this.blurEvent$ = fromEvent(this.element.nativeElement, 'blur');
12
+ this.clickEvent$ = this.allClickEvents$.pipe(filter(() => this.focused === true));
13
+ this.destroyed$ = new Subject();
14
+ this.focusEvent$.pipe(takeUntil(this.destroyed$)).subscribe(() => {
15
+ this.focused = true;
16
+ });
17
+ this.blurEvent$.pipe(takeUntil(this.destroyed$)).subscribe(() => {
18
+ this.focused = false;
19
+ });
20
+ }
21
+ get width() {
22
+ return this.element.nativeElement.offsetWidth;
23
+ }
24
+ ngOnDestroy() {
25
+ this.destroyed$.next();
26
+ }
27
+ }
28
+ PickerTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PickerTriggerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
29
+ PickerTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.5", type: PickerTriggerDirective, selector: "[lxPickerTrigger]", ngImport: i0 });
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PickerTriggerDirective, decorators: [{
31
+ type: Directive,
32
+ args: [{
33
+ selector: '[lxPickerTrigger]'
34
+ }]
35
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLXRyaWdnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9waWNrZXIvcGlja2VyLXRyaWdnZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS25ELE1BQU0sT0FBTyxzQkFBc0I7SUFjakMsWUFBb0IsT0FBZ0M7UUFBaEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFiNUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixvQkFBZSxHQUFHLFNBQVMsQ0FBYSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RSxnQkFBVyxHQUFHLFNBQVMsQ0FBYSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RSxlQUFVLEdBQUcsU0FBUyxDQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXhFLGdCQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztRQU0zRSxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUd4QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQWJELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO0lBQ2hELENBQUM7SUFhRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDOzttSEF6QlUsc0JBQXNCO3VHQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFIbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO2lCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbHhQaWNrZXJUcmlnZ2VyXSdcbn0pXG5leHBvcnQgY2xhc3MgUGlja2VyVHJpZ2dlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgZm9jdXNlZCA9IGZhbHNlO1xuICBwcml2YXRlIGFsbENsaWNrRXZlbnRzJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NsaWNrJyk7XG4gIHByaXZhdGUgZm9jdXNFdmVudCQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpO1xuICBwcml2YXRlIGJsdXJFdmVudCQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdibHVyJyk7XG5cbiAgcHVibGljIGNsaWNrRXZlbnQkID0gdGhpcy5hbGxDbGlja0V2ZW50cyQucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5mb2N1c2VkID09PSB0cnVlKSk7XG5cbiAgZ2V0IHdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICB0aGlzLmZvY3VzRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHRoaXMuYmx1ckV2ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG59XG4iXX0=