@leanix/components 0.2.227 → 0.2.230

Sign up to get free protection for your applications and to get access to all the features.
Files changed (348) hide show
  1. package/esm2020/index.mjs +119 -0
  2. package/esm2020/leanix-components.mjs +5 -0
  3. package/esm2020/lib/core-ui/annotations/required.mjs +33 -0
  4. package/esm2020/lib/core-ui/components/badge/badge.component.mjs +25 -0
  5. package/esm2020/lib/core-ui/components/button/button.component.mjs +72 -0
  6. package/esm2020/lib/core-ui/components/button-group/button-group.component.mjs +28 -0
  7. package/esm2020/lib/core-ui/components/card/card.component.mjs +19 -0
  8. package/esm2020/lib/core-ui/components/collapsible/collapsible.component.mjs +53 -0
  9. package/esm2020/lib/core-ui/components/colored-label/colored-label.component.mjs +34 -0
  10. package/esm2020/lib/core-ui/components/ellipsis/ellipsis.component.mjs +70 -0
  11. package/esm2020/lib/core-ui/components/icon-scale/icon-scale.component.mjs +40 -0
  12. package/esm2020/lib/core-ui/components/spinner/spinner.component.mjs +26 -0
  13. package/esm2020/lib/core-ui/components/table/table-header/table-header.component.mjs +55 -0
  14. package/esm2020/lib/core-ui/components/table/table.component.mjs +69 -0
  15. package/esm2020/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +11 -0
  16. package/esm2020/lib/core-ui/core-ui.constants.mjs +13 -0
  17. package/esm2020/lib/core-ui/core-ui.module.mjs +177 -0
  18. package/esm2020/lib/core-ui/directives/after-view-init.directive.mjs +30 -0
  19. package/esm2020/lib/core-ui/directives/autoclose-group.service.mjs +38 -0
  20. package/esm2020/lib/core-ui/directives/autoclose.directive.mjs +40 -0
  21. package/esm2020/lib/core-ui/directives/autofocus.directive.mjs +27 -0
  22. package/esm2020/lib/core-ui/directives/html.directive.mjs +29 -0
  23. package/esm2020/lib/core-ui/functions/core-css.helpers.mjs +35 -0
  24. package/esm2020/lib/core-ui/pipes/br.pipe.mjs +23 -0
  25. package/esm2020/lib/core-ui/pipes/contrast-color.pipe.mjs +20 -0
  26. package/esm2020/lib/core-ui/pipes/custom-date.pipe.mjs +27 -0
  27. package/esm2020/lib/core-ui/pipes/highlight-range.pipe.mjs +21 -0
  28. package/esm2020/lib/core-ui/pipes/highlight-term.pipe.mjs +38 -0
  29. package/esm2020/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +21 -0
  30. package/esm2020/lib/core-ui/pipes/lx-time-ago.pipe.mjs +25 -0
  31. package/esm2020/lib/core-ui/pipes/lx-translate.pipe.mjs +45 -0
  32. package/esm2020/lib/core-ui/pipes/markdown.pipe.mjs +29 -0
  33. package/esm2020/lib/core-ui/pipes/nbsp.pipe.mjs +14 -0
  34. package/esm2020/lib/core-ui/pipes/sort.pipe.mjs +52 -0
  35. package/esm2020/lib/core-ui/pipes/translation-after.pipe.mjs +28 -0
  36. package/esm2020/lib/core-ui/pipes/translation-before.pipe.mjs +53 -0
  37. package/esm2020/lib/core-ui/pipes/translation-between.pipe.mjs +67 -0
  38. package/esm2020/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +16 -0
  39. package/esm2020/lib/core-ui/tooltip/to-cdk-position.function.mjs +74 -0
  40. package/esm2020/lib/core-ui/tooltip/tooltip-position.interface.mjs +7 -0
  41. package/esm2020/lib/core-ui/tooltip/tooltip.component.mjs +26 -0
  42. package/esm2020/lib/core-ui/tooltip/tooltip.directive.mjs +102 -0
  43. package/esm2020/lib/core-ui/tooltip/tooltip.module.mjs +21 -0
  44. package/esm2020/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +103 -0
  45. package/esm2020/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +33 -0
  46. package/esm2020/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +216 -0
  47. package/esm2020/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +136 -0
  48. package/esm2020/lib/forms-ui/components/currency/currency-input.component.mjs +141 -0
  49. package/esm2020/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +105 -0
  50. package/esm2020/lib/forms-ui/components/currency/currency-symbol.component.mjs +25 -0
  51. package/esm2020/lib/forms-ui/components/date-input/date-input.component.mjs +270 -0
  52. package/esm2020/lib/forms-ui/components/drag-and-drop-list/constants.mjs +5 -0
  53. package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +49 -0
  54. package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +102 -0
  55. package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +25 -0
  56. package/esm2020/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +133 -0
  57. package/esm2020/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +37 -0
  58. package/esm2020/lib/forms-ui/components/error-message/error-message.component.mjs +24 -0
  59. package/esm2020/lib/forms-ui/components/form-error/form-error.component.mjs +40 -0
  60. package/esm2020/lib/forms-ui/components/icon/icon.component.mjs +44 -0
  61. package/esm2020/lib/forms-ui/components/input/input.component.mjs +44 -0
  62. package/esm2020/lib/forms-ui/components/keyboard-select.directive.mjs +116 -0
  63. package/esm2020/lib/forms-ui/components/multi-select/multi-select.component.mjs +251 -0
  64. package/esm2020/lib/forms-ui/components/option/option.component.mjs +81 -0
  65. package/esm2020/lib/forms-ui/components/option-group/option-group.component.mjs +29 -0
  66. package/esm2020/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +100 -0
  67. package/esm2020/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +163 -0
  68. package/esm2020/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +92 -0
  69. package/esm2020/lib/forms-ui/components/picker/picker-trigger.directive.mjs +36 -0
  70. package/esm2020/lib/forms-ui/components/picker/picker.component.mjs +201 -0
  71. package/esm2020/lib/forms-ui/components/picker-option/picker-option.component.mjs +118 -0
  72. package/esm2020/lib/forms-ui/components/pill-item/pill-item.component.mjs +33 -0
  73. package/esm2020/lib/forms-ui/components/pill-list/pill-list.component.mjs +59 -0
  74. package/esm2020/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +97 -0
  75. package/esm2020/lib/forms-ui/components/single-select/single-select.component.mjs +274 -0
  76. package/esm2020/lib/forms-ui/components/slider-toggle/slider-toggle.component.mjs +42 -0
  77. package/esm2020/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +52 -0
  78. package/esm2020/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +21 -0
  79. package/esm2020/lib/forms-ui/directives/form-error.directive.mjs +109 -0
  80. package/esm2020/lib/forms-ui/directives/form-submit.directive.mjs +28 -0
  81. package/esm2020/lib/forms-ui/directives/keyboard-action-source.directive.mjs +53 -0
  82. package/esm2020/lib/forms-ui/directives/mark-invalid.directive.mjs +38 -0
  83. package/esm2020/lib/forms-ui/directives/select-dropdown.directive.mjs +31 -0
  84. package/esm2020/lib/forms-ui/directives/selectable-item.directive.mjs +33 -0
  85. package/esm2020/lib/forms-ui/directives/selected-option.directive.mjs +26 -0
  86. package/esm2020/lib/forms-ui/forms-ui.module.mjs +236 -0
  87. package/esm2020/lib/forms-ui/helpers/key-codes.constants.mjs +11 -0
  88. package/esm2020/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +38 -0
  89. package/esm2020/lib/forms-ui/models/base-select.directive.mjs +148 -0
  90. package/esm2020/lib/forms-ui/models/dropdown-item.interface.mjs +2 -0
  91. package/esm2020/lib/forms-ui/models/single-select-padding.interface.mjs +2 -0
  92. package/esm2020/lib/forms-ui/models/sorting.interface.mjs +7 -0
  93. package/esm2020/lib/forms-ui/pipes/filter-selection.pipe.mjs +30 -0
  94. package/esm2020/lib/forms-ui/pipes/filter-term.pipe.mjs +26 -0
  95. package/esm2020/lib/forms-ui/pipes/format-number.pipe.mjs +65 -0
  96. package/esm2020/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +26 -0
  97. package/esm2020/lib/modal-ui/components/modal/modal.component.mjs +205 -0
  98. package/esm2020/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +11 -0
  99. package/esm2020/lib/modal-ui/components/modal-header/modal-header.component.mjs +23 -0
  100. package/esm2020/lib/modal-ui/directives/modal-content.directive.mjs +13 -0
  101. package/esm2020/lib/modal-ui/modal.constants.mjs +3 -0
  102. package/esm2020/lib/modal-ui/modal.module.mjs +26 -0
  103. package/esm2020/lib/popover-ui/components/popover/popover.component.mjs +199 -0
  104. package/esm2020/lib/popover-ui/directives/popover-click.directive.mjs +51 -0
  105. package/esm2020/lib/popover-ui/directives/popover-content.directive.mjs +16 -0
  106. package/esm2020/lib/popover-ui/directives/popover-hover.directive.mjs +87 -0
  107. package/esm2020/lib/popover-ui/popover-ui.module.mjs +22 -0
  108. package/esm2020/lib/shared/date-helpers.mjs +35 -0
  109. package/esm2020/lib/shared/misc-helpers.mjs +34 -0
  110. package/esm2020/lib/shared/observe.mjs +40 -0
  111. package/esm2020/lib/tab-ui/components/tab/tab.component.mjs +70 -0
  112. package/esm2020/lib/tab-ui/components/tab-group/tab-group.component.mjs +71 -0
  113. package/esm2020/lib/tab-ui/tab-ui.module.mjs +22 -0
  114. package/fesm2015/{leanix-components.js → leanix-components.mjs} +681 -692
  115. package/fesm2015/leanix-components.mjs.map +1 -0
  116. package/fesm2020/leanix-components.mjs +6207 -0
  117. package/fesm2020/leanix-components.mjs.map +1 -0
  118. package/index.d.ts +1 -0
  119. package/lib/core-ui/functions/core-css.helpers.d.ts +7 -0
  120. package/lib/forms-ui/components/drag-and-drop-list/constants.d.ts +4 -0
  121. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.d.ts +7 -6
  122. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.d.ts +23 -17
  123. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.d.ts +14 -0
  124. package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.d.ts +36 -0
  125. package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.d.ts +14 -0
  126. package/lib/forms-ui/forms-ui.module.d.ts +41 -43
  127. package/package.json +23 -9
  128. package/bundles/leanix-components.umd.js +0 -7162
  129. package/bundles/leanix-components.umd.js.map +0 -1
  130. package/esm2015/index.js +0 -117
  131. package/esm2015/index.js.map +0 -1
  132. package/esm2015/leanix-components.js +0 -5
  133. package/esm2015/leanix-components.js.map +0 -1
  134. package/esm2015/lib/core-ui/annotations/required.js +0 -33
  135. package/esm2015/lib/core-ui/annotations/required.js.map +0 -1
  136. package/esm2015/lib/core-ui/components/badge/badge.component.js +0 -29
  137. package/esm2015/lib/core-ui/components/badge/badge.component.js.map +0 -1
  138. package/esm2015/lib/core-ui/components/button/button.component.js +0 -78
  139. package/esm2015/lib/core-ui/components/button/button.component.js.map +0 -1
  140. package/esm2015/lib/core-ui/components/button-group/button-group.component.js +0 -32
  141. package/esm2015/lib/core-ui/components/button-group/button-group.component.js.map +0 -1
  142. package/esm2015/lib/core-ui/components/card/card.component.js +0 -23
  143. package/esm2015/lib/core-ui/components/card/card.component.js.map +0 -1
  144. package/esm2015/lib/core-ui/components/collapsible/collapsible.component.js +0 -58
  145. package/esm2015/lib/core-ui/components/collapsible/collapsible.component.js.map +0 -1
  146. package/esm2015/lib/core-ui/components/colored-label/colored-label.component.js +0 -39
  147. package/esm2015/lib/core-ui/components/colored-label/colored-label.component.js.map +0 -1
  148. package/esm2015/lib/core-ui/components/ellipsis/ellipsis.component.js +0 -74
  149. package/esm2015/lib/core-ui/components/ellipsis/ellipsis.component.js.map +0 -1
  150. package/esm2015/lib/core-ui/components/icon-scale/icon-scale.component.js +0 -46
  151. package/esm2015/lib/core-ui/components/icon-scale/icon-scale.component.js.map +0 -1
  152. package/esm2015/lib/core-ui/components/spinner/spinner.component.js +0 -30
  153. package/esm2015/lib/core-ui/components/spinner/spinner.component.js.map +0 -1
  154. package/esm2015/lib/core-ui/components/table/table-header/table-header.component.js +0 -60
  155. package/esm2015/lib/core-ui/components/table/table-header/table-header.component.js.map +0 -1
  156. package/esm2015/lib/core-ui/components/table/table.component.js +0 -70
  157. package/esm2015/lib/core-ui/components/table/table.component.js.map +0 -1
  158. package/esm2015/lib/core-ui/components/tiny-spinner/tiny-spinner.component.js +0 -14
  159. package/esm2015/lib/core-ui/components/tiny-spinner/tiny-spinner.component.js.map +0 -1
  160. package/esm2015/lib/core-ui/core-ui.constants.js +0 -13
  161. package/esm2015/lib/core-ui/core-ui.constants.js.map +0 -1
  162. package/esm2015/lib/core-ui/core-ui.module.js +0 -177
  163. package/esm2015/lib/core-ui/core-ui.module.js.map +0 -1
  164. package/esm2015/lib/core-ui/directives/after-view-init.directive.js +0 -30
  165. package/esm2015/lib/core-ui/directives/after-view-init.directive.js.map +0 -1
  166. package/esm2015/lib/core-ui/directives/autoclose-group.service.js +0 -38
  167. package/esm2015/lib/core-ui/directives/autoclose-group.service.js.map +0 -1
  168. package/esm2015/lib/core-ui/directives/autoclose.directive.js +0 -40
  169. package/esm2015/lib/core-ui/directives/autoclose.directive.js.map +0 -1
  170. package/esm2015/lib/core-ui/directives/autofocus.directive.js +0 -27
  171. package/esm2015/lib/core-ui/directives/autofocus.directive.js.map +0 -1
  172. package/esm2015/lib/core-ui/directives/html.directive.js +0 -30
  173. package/esm2015/lib/core-ui/directives/html.directive.js.map +0 -1
  174. package/esm2015/lib/core-ui/functions/core-css.helpers.js +0 -23
  175. package/esm2015/lib/core-ui/functions/core-css.helpers.js.map +0 -1
  176. package/esm2015/lib/core-ui/pipes/br.pipe.js +0 -23
  177. package/esm2015/lib/core-ui/pipes/br.pipe.js.map +0 -1
  178. package/esm2015/lib/core-ui/pipes/contrast-color.pipe.js +0 -20
  179. package/esm2015/lib/core-ui/pipes/contrast-color.pipe.js.map +0 -1
  180. package/esm2015/lib/core-ui/pipes/custom-date.pipe.js +0 -27
  181. package/esm2015/lib/core-ui/pipes/custom-date.pipe.js.map +0 -1
  182. package/esm2015/lib/core-ui/pipes/highlight-range.pipe.js +0 -21
  183. package/esm2015/lib/core-ui/pipes/highlight-range.pipe.js.map +0 -1
  184. package/esm2015/lib/core-ui/pipes/highlight-term.pipe.js +0 -38
  185. package/esm2015/lib/core-ui/pipes/highlight-term.pipe.js.map +0 -1
  186. package/esm2015/lib/core-ui/pipes/lx-is-uuid.pipe.js +0 -21
  187. package/esm2015/lib/core-ui/pipes/lx-is-uuid.pipe.js.map +0 -1
  188. package/esm2015/lib/core-ui/pipes/lx-time-ago.pipe.js +0 -25
  189. package/esm2015/lib/core-ui/pipes/lx-time-ago.pipe.js.map +0 -1
  190. package/esm2015/lib/core-ui/pipes/lx-translate.pipe.js +0 -46
  191. package/esm2015/lib/core-ui/pipes/lx-translate.pipe.js.map +0 -1
  192. package/esm2015/lib/core-ui/pipes/markdown.pipe.js +0 -29
  193. package/esm2015/lib/core-ui/pipes/markdown.pipe.js.map +0 -1
  194. package/esm2015/lib/core-ui/pipes/nbsp.pipe.js +0 -14
  195. package/esm2015/lib/core-ui/pipes/nbsp.pipe.js.map +0 -1
  196. package/esm2015/lib/core-ui/pipes/sort.pipe.js +0 -52
  197. package/esm2015/lib/core-ui/pipes/sort.pipe.js.map +0 -1
  198. package/esm2015/lib/core-ui/pipes/translation-after.pipe.js +0 -28
  199. package/esm2015/lib/core-ui/pipes/translation-after.pipe.js.map +0 -1
  200. package/esm2015/lib/core-ui/pipes/translation-before.pipe.js +0 -53
  201. package/esm2015/lib/core-ui/pipes/translation-before.pipe.js.map +0 -1
  202. package/esm2015/lib/core-ui/pipes/translation-between.pipe.js +0 -67
  203. package/esm2015/lib/core-ui/pipes/translation-between.pipe.js.map +0 -1
  204. package/esm2015/lib/core-ui/pipes/unescape-curly-braces.pipe.js +0 -16
  205. package/esm2015/lib/core-ui/pipes/unescape-curly-braces.pipe.js.map +0 -1
  206. package/esm2015/lib/core-ui/tooltip/to-cdk-position.function.js +0 -74
  207. package/esm2015/lib/core-ui/tooltip/to-cdk-position.function.js.map +0 -1
  208. package/esm2015/lib/core-ui/tooltip/tooltip-position.interface.js +0 -7
  209. package/esm2015/lib/core-ui/tooltip/tooltip-position.interface.js.map +0 -1
  210. package/esm2015/lib/core-ui/tooltip/tooltip.component.js +0 -30
  211. package/esm2015/lib/core-ui/tooltip/tooltip.component.js.map +0 -1
  212. package/esm2015/lib/core-ui/tooltip/tooltip.directive.js +0 -107
  213. package/esm2015/lib/core-ui/tooltip/tooltip.directive.js.map +0 -1
  214. package/esm2015/lib/core-ui/tooltip/tooltip.module.js +0 -21
  215. package/esm2015/lib/core-ui/tooltip/tooltip.module.js.map +0 -1
  216. package/esm2015/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.js +0 -108
  217. package/esm2015/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.js.map +0 -1
  218. package/esm2015/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.js +0 -38
  219. package/esm2015/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.js.map +0 -1
  220. package/esm2015/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.js +0 -223
  221. package/esm2015/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.js.map +0 -1
  222. package/esm2015/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.js +0 -140
  223. package/esm2015/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.js.map +0 -1
  224. package/esm2015/lib/forms-ui/components/currency/currency-input.component.js +0 -147
  225. package/esm2015/lib/forms-ui/components/currency/currency-input.component.js.map +0 -1
  226. package/esm2015/lib/forms-ui/components/currency/currency-symbol-map.constant.js +0 -105
  227. package/esm2015/lib/forms-ui/components/currency/currency-symbol-map.constant.js.map +0 -1
  228. package/esm2015/lib/forms-ui/components/currency/currency-symbol.component.js +0 -28
  229. package/esm2015/lib/forms-ui/components/currency/currency-symbol.component.js.map +0 -1
  230. package/esm2015/lib/forms-ui/components/date-input/date-input.component.js +0 -276
  231. package/esm2015/lib/forms-ui/components/date-input/date-input.component.js.map +0 -1
  232. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.js +0 -57
  233. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.js.map +0 -1
  234. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.js +0 -99
  235. package/esm2015/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.js.map +0 -1
  236. package/esm2015/lib/forms-ui/components/error-message/error-message.component.js +0 -29
  237. package/esm2015/lib/forms-ui/components/error-message/error-message.component.js.map +0 -1
  238. package/esm2015/lib/forms-ui/components/form-error/form-error.component.js +0 -44
  239. package/esm2015/lib/forms-ui/components/form-error/form-error.component.js.map +0 -1
  240. package/esm2015/lib/forms-ui/components/icon/icon.component.js +0 -49
  241. package/esm2015/lib/forms-ui/components/icon/icon.component.js.map +0 -1
  242. package/esm2015/lib/forms-ui/components/input/input.component.js +0 -51
  243. package/esm2015/lib/forms-ui/components/input/input.component.js.map +0 -1
  244. package/esm2015/lib/forms-ui/components/keyboard-select.directive.js +0 -117
  245. package/esm2015/lib/forms-ui/components/keyboard-select.directive.js.map +0 -1
  246. package/esm2015/lib/forms-ui/components/multi-select/multi-select.component.js +0 -257
  247. package/esm2015/lib/forms-ui/components/multi-select/multi-select.component.js.map +0 -1
  248. package/esm2015/lib/forms-ui/components/option/option.component.js +0 -85
  249. package/esm2015/lib/forms-ui/components/option/option.component.js.map +0 -1
  250. package/esm2015/lib/forms-ui/components/option-group/option-group.component.js +0 -34
  251. package/esm2015/lib/forms-ui/components/option-group/option-group.component.js.map +0 -1
  252. package/esm2015/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.js +0 -105
  253. package/esm2015/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.js.map +0 -1
  254. package/esm2015/lib/forms-ui/components/options-dropdown/options-dropdown.component.js +0 -169
  255. package/esm2015/lib/forms-ui/components/options-dropdown/options-dropdown.component.js.map +0 -1
  256. package/esm2015/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.js +0 -96
  257. package/esm2015/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.js.map +0 -1
  258. package/esm2015/lib/forms-ui/components/picker/picker-trigger.directive.js +0 -36
  259. package/esm2015/lib/forms-ui/components/picker/picker-trigger.directive.js.map +0 -1
  260. package/esm2015/lib/forms-ui/components/picker/picker.component.js +0 -210
  261. package/esm2015/lib/forms-ui/components/picker/picker.component.js.map +0 -1
  262. package/esm2015/lib/forms-ui/components/picker-option/picker-option.component.js +0 -124
  263. package/esm2015/lib/forms-ui/components/picker-option/picker-option.component.js.map +0 -1
  264. package/esm2015/lib/forms-ui/components/pill-item/pill-item.component.js +0 -37
  265. package/esm2015/lib/forms-ui/components/pill-item/pill-item.component.js.map +0 -1
  266. package/esm2015/lib/forms-ui/components/pill-list/pill-list.component.js +0 -64
  267. package/esm2015/lib/forms-ui/components/pill-list/pill-list.component.js.map +0 -1
  268. package/esm2015/lib/forms-ui/components/responsive-input/responsive-input.component.js +0 -104
  269. package/esm2015/lib/forms-ui/components/responsive-input/responsive-input.component.js.map +0 -1
  270. package/esm2015/lib/forms-ui/components/single-select/single-select.component.js +0 -279
  271. package/esm2015/lib/forms-ui/components/single-select/single-select.component.js.map +0 -1
  272. package/esm2015/lib/forms-ui/components/slider-toggle/slider-toggle.component.js +0 -47
  273. package/esm2015/lib/forms-ui/components/slider-toggle/slider-toggle.component.js.map +0 -1
  274. package/esm2015/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.js +0 -56
  275. package/esm2015/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.js.map +0 -1
  276. package/esm2015/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.js +0 -25
  277. package/esm2015/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.js.map +0 -1
  278. package/esm2015/lib/forms-ui/directives/form-error.directive.js +0 -111
  279. package/esm2015/lib/forms-ui/directives/form-error.directive.js.map +0 -1
  280. package/esm2015/lib/forms-ui/directives/form-submit.directive.js +0 -28
  281. package/esm2015/lib/forms-ui/directives/form-submit.directive.js.map +0 -1
  282. package/esm2015/lib/forms-ui/directives/keyboard-action-source.directive.js +0 -53
  283. package/esm2015/lib/forms-ui/directives/keyboard-action-source.directive.js.map +0 -1
  284. package/esm2015/lib/forms-ui/directives/mark-invalid.directive.js +0 -38
  285. package/esm2015/lib/forms-ui/directives/mark-invalid.directive.js.map +0 -1
  286. package/esm2015/lib/forms-ui/directives/select-dropdown.directive.js +0 -31
  287. package/esm2015/lib/forms-ui/directives/select-dropdown.directive.js.map +0 -1
  288. package/esm2015/lib/forms-ui/directives/selectable-item.directive.js +0 -33
  289. package/esm2015/lib/forms-ui/directives/selectable-item.directive.js.map +0 -1
  290. package/esm2015/lib/forms-ui/directives/selected-option.directive.js +0 -26
  291. package/esm2015/lib/forms-ui/directives/selected-option.directive.js.map +0 -1
  292. package/esm2015/lib/forms-ui/forms-ui.module.js +0 -244
  293. package/esm2015/lib/forms-ui/forms-ui.module.js.map +0 -1
  294. package/esm2015/lib/forms-ui/helpers/key-codes.constants.js +0 -11
  295. package/esm2015/lib/forms-ui/helpers/key-codes.constants.js.map +0 -1
  296. package/esm2015/lib/forms-ui/helpers/keyboard-navigation.helpers.js +0 -38
  297. package/esm2015/lib/forms-ui/helpers/keyboard-navigation.helpers.js.map +0 -1
  298. package/esm2015/lib/forms-ui/models/base-select.directive.js +0 -148
  299. package/esm2015/lib/forms-ui/models/base-select.directive.js.map +0 -1
  300. package/esm2015/lib/forms-ui/models/dropdown-item.interface.js +0 -2
  301. package/esm2015/lib/forms-ui/models/dropdown-item.interface.js.map +0 -1
  302. package/esm2015/lib/forms-ui/models/single-select-padding.interface.js +0 -2
  303. package/esm2015/lib/forms-ui/models/single-select-padding.interface.js.map +0 -1
  304. package/esm2015/lib/forms-ui/models/sorting.interface.js +0 -7
  305. package/esm2015/lib/forms-ui/models/sorting.interface.js.map +0 -1
  306. package/esm2015/lib/forms-ui/pipes/filter-selection.pipe.js +0 -30
  307. package/esm2015/lib/forms-ui/pipes/filter-selection.pipe.js.map +0 -1
  308. package/esm2015/lib/forms-ui/pipes/filter-term.pipe.js +0 -26
  309. package/esm2015/lib/forms-ui/pipes/filter-term.pipe.js.map +0 -1
  310. package/esm2015/lib/forms-ui/pipes/format-number.pipe.js +0 -65
  311. package/esm2015/lib/forms-ui/pipes/format-number.pipe.js.map +0 -1
  312. package/esm2015/lib/forms-ui/validators/date-in-foreseeable-future.validator.js +0 -26
  313. package/esm2015/lib/forms-ui/validators/date-in-foreseeable-future.validator.js.map +0 -1
  314. package/esm2015/lib/modal-ui/components/modal/modal.component.js +0 -214
  315. package/esm2015/lib/modal-ui/components/modal/modal.component.js.map +0 -1
  316. package/esm2015/lib/modal-ui/components/modal-footer/modal-footer.component.js +0 -15
  317. package/esm2015/lib/modal-ui/components/modal-footer/modal-footer.component.js.map +0 -1
  318. package/esm2015/lib/modal-ui/components/modal-header/modal-header.component.js +0 -27
  319. package/esm2015/lib/modal-ui/components/modal-header/modal-header.component.js.map +0 -1
  320. package/esm2015/lib/modal-ui/directives/modal-content.directive.js +0 -13
  321. package/esm2015/lib/modal-ui/directives/modal-content.directive.js.map +0 -1
  322. package/esm2015/lib/modal-ui/modal.constants.js +0 -3
  323. package/esm2015/lib/modal-ui/modal.constants.js.map +0 -1
  324. package/esm2015/lib/modal-ui/modal.module.js +0 -26
  325. package/esm2015/lib/modal-ui/modal.module.js.map +0 -1
  326. package/esm2015/lib/popover-ui/components/popover/popover.component.js +0 -203
  327. package/esm2015/lib/popover-ui/components/popover/popover.component.js.map +0 -1
  328. package/esm2015/lib/popover-ui/directives/popover-click.directive.js +0 -51
  329. package/esm2015/lib/popover-ui/directives/popover-click.directive.js.map +0 -1
  330. package/esm2015/lib/popover-ui/directives/popover-content.directive.js +0 -16
  331. package/esm2015/lib/popover-ui/directives/popover-content.directive.js.map +0 -1
  332. package/esm2015/lib/popover-ui/directives/popover-hover.directive.js +0 -87
  333. package/esm2015/lib/popover-ui/directives/popover-hover.directive.js.map +0 -1
  334. package/esm2015/lib/popover-ui/popover-ui.module.js +0 -22
  335. package/esm2015/lib/popover-ui/popover-ui.module.js.map +0 -1
  336. package/esm2015/lib/shared/date-helpers.js +0 -35
  337. package/esm2015/lib/shared/date-helpers.js.map +0 -1
  338. package/esm2015/lib/shared/misc-helpers.js +0 -34
  339. package/esm2015/lib/shared/misc-helpers.js.map +0 -1
  340. package/esm2015/lib/shared/observe.js +0 -40
  341. package/esm2015/lib/shared/observe.js.map +0 -1
  342. package/esm2015/lib/tab-ui/components/tab/tab.component.js +0 -75
  343. package/esm2015/lib/tab-ui/components/tab/tab.component.js.map +0 -1
  344. package/esm2015/lib/tab-ui/components/tab-group/tab-group.component.js +0 -78
  345. package/esm2015/lib/tab-ui/components/tab-group/tab-group.component.js.map +0 -1
  346. package/esm2015/lib/tab-ui/tab-ui.module.js +0 -22
  347. package/esm2015/lib/tab-ui/tab-ui.module.js.map +0 -1
  348. package/fesm2015/leanix-components.js.map +0 -1
@@ -0,0 +1,116 @@
1
+ import { Directive, EventEmitter, Input, Output, ViewChild, ViewChildren } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';
3
+ import { delay, distinctUntilChanged, filter, map, startWith, takeUntil, withLatestFrom } from 'rxjs/operators';
4
+ import { SelectableItemDirective } from '../directives/selectable-item.directive';
5
+ import * as i0 from "@angular/core";
6
+ export var KeyboardSelectAction;
7
+ (function (KeyboardSelectAction) {
8
+ KeyboardSelectAction["PREV"] = "PREV";
9
+ KeyboardSelectAction["NEXT"] = "NEXT";
10
+ KeyboardSelectAction["FIRST"] = "FIRST";
11
+ KeyboardSelectAction["LAST"] = "LAST";
12
+ KeyboardSelectAction["LEFT"] = "LEFT";
13
+ KeyboardSelectAction["RIGHT"] = "RIGHT";
14
+ KeyboardSelectAction["EXECUTE"] = "EXECUTE";
15
+ KeyboardSelectAction["UNSELECT"] = "UNSELECT";
16
+ KeyboardSelectAction["CLOSE"] = "CLOSE";
17
+ })(KeyboardSelectAction || (KeyboardSelectAction = {}));
18
+ export class KeyboardSelectDirective {
19
+ constructor() {
20
+ this.keyboardSelectAction = new Observable();
21
+ this.selectedItemIndexChange = new EventEmitter(true); // TODO: this is just index change from navigating (highlighting)
22
+ this.destroyed$ = new Subject();
23
+ // Beware: If the list of items is empty, there might not come a -1 because Angular only updates the ViewChildren lazily.
24
+ this.selectedItemIndex$ = new BehaviorSubject(-1);
25
+ this.selectedItemSubject$ = new BehaviorSubject(null);
26
+ }
27
+ get selectedItem$() {
28
+ return this.selectedItemSubject$.asObservable();
29
+ }
30
+ select(index) {
31
+ this.selectedItemIndex$.next(index);
32
+ }
33
+ ngAfterViewInit() {
34
+ const itemsChanges$ = this._items.changes.pipe(startWith(this._items));
35
+ this.keyboardSelectAction
36
+ .pipe(filter((action) => !!action), withLatestFrom(this.selectedItemIndex$, itemsChanges$), takeUntil(this.destroyed$))
37
+ .subscribe(([action, index, items]) => this.adaptSelectedIndexBasedOnKeyboardSelectAction(action, index, items));
38
+ this.keyboardSelectAction
39
+ .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.EXECUTE), withLatestFrom(this.selectedItem$, (_, item) => item), takeUntil(this.destroyed$))
40
+ .subscribe((item) => item?.select?.emit());
41
+ this.selectedItemIndex$.pipe(takeUntil(this.destroyed$)).subscribe((index) => {
42
+ this.selectedItemIndexChange.emit(index);
43
+ });
44
+ combineLatest([itemsChanges$, this.selectedItemIndex$])
45
+ .pipe(delay(0), map(([items, index]) => {
46
+ if (index > -1) {
47
+ return items.toArray()[index] ?? null;
48
+ }
49
+ else {
50
+ return null;
51
+ }
52
+ }), takeUntil(this.destroyed$))
53
+ .subscribe(this.selectedItemSubject$);
54
+ this.selectedItem$
55
+ .pipe(filter((item) => !!item), distinctUntilChanged(), takeUntil(this.destroyed$))
56
+ .subscribe((item) => item?.scrollToItem());
57
+ }
58
+ isItemSelected(item, selectedItem) {
59
+ return selectedItem && item === selectedItem.nativeElement;
60
+ }
61
+ adaptSelectedIndexBasedOnKeyboardSelectAction(keyboardSelectAction, currentIndex, items) {
62
+ if (keyboardSelectAction === KeyboardSelectAction.PREV) {
63
+ this.selectedItemIndex$.next(this.prev(currentIndex));
64
+ }
65
+ else if (keyboardSelectAction === KeyboardSelectAction.NEXT) {
66
+ this.selectedItemIndex$.next(this.next(currentIndex, items));
67
+ }
68
+ else if (keyboardSelectAction === KeyboardSelectAction.LAST) {
69
+ this.selectedItemIndex$.next(this.last(items));
70
+ }
71
+ else if (keyboardSelectAction === KeyboardSelectAction.FIRST) {
72
+ this.selectedItemIndex$.next(0);
73
+ }
74
+ else if (keyboardSelectAction === KeyboardSelectAction.UNSELECT) {
75
+ this.selectedItemIndex$.next(-1);
76
+ }
77
+ }
78
+ prev(index) {
79
+ if (index > -1) {
80
+ return index - 1;
81
+ }
82
+ else {
83
+ return index;
84
+ }
85
+ }
86
+ next(index, items) {
87
+ if (items.length - 1 > index) {
88
+ return index + 1;
89
+ }
90
+ else {
91
+ return index;
92
+ }
93
+ }
94
+ last(items) {
95
+ return items.length - 1;
96
+ }
97
+ ngOnDestroy() {
98
+ this.destroyed$.next();
99
+ }
100
+ }
101
+ KeyboardSelectDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: KeyboardSelectDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
102
+ KeyboardSelectDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.5", type: KeyboardSelectDirective, inputs: { keyboardSelectAction: "keyboardSelectAction" }, outputs: { selectedItemIndexChange: "selectedItemIndexChange" }, viewQueries: [{ propertyName: "keyboardSelectContainer", first: true, predicate: ["keyboardSelectContainer"], descendants: true, static: true }, { propertyName: "_items", predicate: SelectableItemDirective, descendants: true }], ngImport: i0 });
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: KeyboardSelectDirective, decorators: [{
104
+ type: Directive
105
+ }], propDecorators: { keyboardSelectAction: [{
106
+ type: Input
107
+ }], selectedItemIndexChange: [{
108
+ type: Output
109
+ }], _items: [{
110
+ type: ViewChildren,
111
+ args: [SelectableItemDirective]
112
+ }], keyboardSelectContainer: [{
113
+ type: ViewChild,
114
+ args: ['keyboardSelectContainer', { static: true }]
115
+ }] } });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtc2VsZWN0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2NvbXBvbmVudHMva2V5Ym9hcmQtc2VsZWN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFHbEYsTUFBTSxDQUFOLElBQVksb0JBVVg7QUFWRCxXQUFZLG9CQUFvQjtJQUM5QixxQ0FBYSxDQUFBO0lBQ2IscUNBQWEsQ0FBQTtJQUNiLHVDQUFlLENBQUE7SUFDZixxQ0FBYSxDQUFBO0lBQ2IscUNBQWEsQ0FBQTtJQUNiLHVDQUFlLENBQUE7SUFDZiwyQ0FBbUIsQ0FBQTtJQUNuQiw2Q0FBcUIsQ0FBQTtJQUNyQix1Q0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFWVyxvQkFBb0IsS0FBcEIsb0JBQW9CLFFBVS9CO0FBR0QsTUFBTSxPQUFPLHVCQUF1QjtJQURwQztRQUVXLHlCQUFvQixHQUFHLElBQUksVUFBVSxFQUErQixDQUFDO1FBQ3BFLDRCQUF1QixHQUFHLElBQUksWUFBWSxDQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsaUVBQWlFO1FBTTVILGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFB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QUNkO0lBQ0gsQ0FBQztJQUVPLElBQUksQ0FBQyxLQUFhLEVBQUUsS0FBOEI7UUFDeEQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUU7WUFDNUIsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVPLElBQUksQ0FBQyxLQUE4QjtRQUN6QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDOztvSEFoSFUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsbVRBSXBCLHVCQUF1QjsyRkFKMUIsdUJBQXVCO2tCQURuQyxTQUFTOzhCQUVDLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDSSx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBRWdDLE1BQU07c0JBQTVDLFlBQVk7dUJBQUMsdUJBQXVCO2dCQUVtQix1QkFBdUI7c0JBQTlFLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2VsZWN0YWJsZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3NlbGVjdGFibGUtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJvcGRvd25JdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2Ryb3Bkb3duLWl0ZW0uaW50ZXJmYWNlJztcblxuZXhwb3J0IGVudW0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24ge1xuICBQUkVWID0gJ1BSRVYnLFxuICBORVhUID0gJ05FWFQnLFxuICBGSVJTVCA9ICdGSVJTVCcsXG4gIExBU1QgPSAnTEFTVCcsXG4gIExFRlQgPSAnTEVGVCcsXG4gIFJJR0hUID0gJ1JJR0hUJyxcbiAgRVhFQ1VURSA9ICdFWEVDVVRFJyxcbiAgVU5TRUxFQ1QgPSAnVU5TRUxFQ1QnLFxuICBDTE9TRSA9ICdDTE9TRSdcbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgS2V5Ym9hcmRTZWxlY3REaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBrZXlib2FyZFNlbGVjdEFjdGlvbiA9IG5ldyBPYnNlcnZhYmxlPEtleWJvYXJkU2VsZWN0QWN0aW9uIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbUluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KHRydWUpOyAvLyBUT0RPOiB0aGlzIGlzIGp1c3QgaW5kZXggY2hhbmdlIGZyb20gbmF2aWdhdGluZyAoaGlnaGxpZ2h0aW5nKVxuXG4gIEBWaWV3Q2hpbGRyZW4oU2VsZWN0YWJsZUl0ZW1EaXJlY3RpdmUpIF9pdGVtcyE6IFF1ZXJ5TGlzdDxEcm9wZG93bkl0ZW0+O1xuXG4gIEBWaWV3Q2hpbGQoJ2tleWJvYXJkU2VsZWN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkga2V5Ym9hcmRTZWxlY3RDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXQgc2VsZWN0ZWRJdGVtJCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbVN1YmplY3QkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLy8gQmV3YXJlOiBJZiB0aGUgbGlzdCBvZiBpdGVtcyBpcyBlbXB0eSwgdGhlcmUgbWlnaHQgbm90IGNvbWUgYSAtMSBiZWNhdXNlIEFuZ3VsYXIgb25seSB1cGRhdGVzIHRoZSBWaWV3Q2hpbGRyZW4gbGF6aWx5LlxuICBwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGVkSXRlbUluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERyb3Bkb3duSXRlbSB8IG51bGw+KG51bGwpO1xuXG4gIHB1YmxpYyBzZWxlY3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgkLm5leHQoaW5kZXgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zQ2hhbmdlcyQgPSB0aGlzLl9pdGVtcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuX2l0ZW1zKSk7XG5cbiAgICB0aGlzLmtleWJvYXJkU2VsZWN0QWN0aW9uXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChhY3Rpb24pOiBhY3Rpb24gaXMgS2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT4gISFhY3Rpb24pLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnNlbGVjdGVkSXRlbUluZGV4JCwgaXRlbXNDaGFuZ2VzJCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChbYWN0aW9uLCBpbmRleCwgaXRlbXNdKSA9PiB0aGlzLmFkYXB0U2VsZWN0ZWRJbmRleEJhc2VkT25LZXlib2FyZFNlbGVjdEFjdGlvbihhY3Rpb24sIGluZGV4LCBpdGVtcykpO1xuXG4gICAgdGhpcy5rZXlib2FyZFNlbGVjdEFjdGlvblxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5FWEVDVVRFKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zZWxlY3RlZEl0ZW0kLCAoXywgaXRlbSkgPT4gaXRlbSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpdGVtKSA9PiBpdGVtPy5zZWxlY3Q/LmVtaXQoKSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4Q2hhbmdlLmVtaXQoaW5kZXgpO1xuICAgIH0pO1xuXG4gICAgY29tYmluZUxhdGVzdChbaXRlbXNDaGFuZ2VzJCwgdGhpcy5zZWxlY3RlZEl0ZW1JbmRleCRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgICBtYXAoKFtpdGVtcywgaW5kZXhdOiBbUXVlcnlMaXN0PERyb3Bkb3duSXRlbT4sIG51bWJlcl0pID0+IHtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLnRvQXJyYXkoKVtpbmRleF0gPz8gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5zZWxlY3RlZEl0ZW1TdWJqZWN0JCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbSRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChpdGVtKSA9PiBpdGVtPy5zY3JvbGxUb0l0ZW0oKSk7XG4gIH1cblxuICBwdWJsaWMgaXNJdGVtU2VsZWN0ZWQoaXRlbTogSFRNTEVsZW1lbnQsIHNlbGVjdGVkSXRlbTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHtcbiAgICByZXR1cm4gc2VsZWN0ZWRJdGVtICYmIGl0ZW0gPT09IHNlbGVjdGVkSXRlbS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGFwdFNlbGVjdGVkSW5kZXhCYXNlZE9uS2V5Ym9hcmRTZWxlY3RBY3Rpb24oXG4gICAga2V5Ym9hcmRTZWxlY3RBY3Rpb246IEtleWJvYXJkU2VsZWN0QWN0aW9uLFxuICAgIGN1cnJlbnRJbmRleDogbnVtYmVyLFxuICAgIGl0ZW1zOiBRdWVyeUxpc3Q8RHJvcGRvd25JdGVtPlxuICApIHtcbiAgICBpZiAoa2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLlBSRVYpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgkLm5leHQodGhpcy5wcmV2KGN1cnJlbnRJbmRleCkpO1xuICAgIH0gZWxzZSBpZiAoa2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLk5FWFQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgkLm5leHQodGhpcy5uZXh0KGN1cnJlbnRJbmRleCwgaXRlbXMpKTtcbiAgICB9IGVsc2UgaWYgKGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5MQVNUKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4JC5uZXh0KHRoaXMubGFzdChpdGVtcykpO1xuICAgIH0gZWxzZSBpZiAoa2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLkZJUlNUKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4JC5uZXh0KDApO1xuICAgIH0gZWxzZSBpZiAoa2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLlVOU0VMRUNUKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4JC5uZXh0KC0xKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXYoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5leHQoaW5kZXg6IG51bWJlciwgaXRlbXM6IFF1ZXJ5TGlzdDxEcm9wZG93bkl0ZW0+KTogbnVtYmVyIHtcbiAgICBpZiAoaXRlbXMubGVuZ3RoIC0gMSA+IGluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsYXN0KGl0ZW1zOiBRdWVyeUxpc3Q8RHJvcGRvd25JdGVtPik6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCAtIDE7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,251 @@
1
+ import { Component, ContentChild, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { filter as _filter, findIndex, includes, last } from 'lodash/fp';
4
+ import { fromEvent as observableFromEvent, Subject } from 'rxjs';
5
+ import { distinctUntilChanged, filter, map, takeUntil, tap } from 'rxjs/operators';
6
+ import { SelectDropdownDirective } from '../../directives/select-dropdown.directive';
7
+ import { ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, BACKSPACE, ENTER, ESCAPE, TAB } from '../../helpers/key-codes.constants';
8
+ import { BaseSelectDirective } from '../../models/base-select.directive';
9
+ import { KeyboardSelectAction } from '../keyboard-select.directive';
10
+ import { ResponsiveInputComponent } from '../responsive-input/responsive-input.component';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "../responsive-input/responsive-input.component";
13
+ import * as i2 from "@angular/common";
14
+ import * as i3 from "../../directives/mark-invalid.directive";
15
+ import * as i4 from "@angular/forms";
16
+ export class MultiSelectComponent extends BaseSelectDirective {
17
+ constructor(cd) {
18
+ super();
19
+ this.cd = cd;
20
+ this.markInvalid = false;
21
+ this.selection = [];
22
+ this.size = 'default';
23
+ this.dropdownWidthScale = '1x';
24
+ this.selectionChange = new EventEmitter();
25
+ this.blur = new EventEmitter();
26
+ this.destroyed$ = new Subject();
27
+ }
28
+ static isStillPossibleMoveToLeft(eventSet) {
29
+ return (!(eventSet.virtualCursorPosition === 0 &&
30
+ eventSet.inputCursorPosition === 0 &&
31
+ eventSet.event.keyCode === ARROW_LEFT &&
32
+ eventSet.selectionLength === 0) &&
33
+ !(eventSet.event.keyCode === ARROW_LEFT &&
34
+ typeof eventSet.selectionLength === 'number' &&
35
+ eventSet.selectionLength > 0 &&
36
+ Math.abs(eventSet.virtualCursorPosition) === eventSet.selectionLength));
37
+ }
38
+ static isMovingfromZeroToRight(eventSet) {
39
+ return eventSet.virtualCursorPosition === 0 && eventSet.inputCursorPosition === 0 && eventSet.event.keyCode === ARROW_RIGHT;
40
+ }
41
+ static calculateNewCursorPostionOnKeyboardNavigation(cursorPosition, keyCode) {
42
+ switch (keyCode) {
43
+ case ARROW_LEFT:
44
+ cursorPosition--;
45
+ break;
46
+ case ARROW_RIGHT:
47
+ cursorPosition++;
48
+ break;
49
+ }
50
+ return cursorPosition;
51
+ }
52
+ static getKeyboardSelectAction(cursorPosition, keyCode) {
53
+ if (cursorPosition <= -1 && keyCode === ARROW_RIGHT) {
54
+ return KeyboardSelectAction.NEXT;
55
+ }
56
+ if (cursorPosition === -1 && keyCode === ARROW_LEFT) {
57
+ return KeyboardSelectAction.LAST;
58
+ }
59
+ if (cursorPosition < -1 && keyCode === ARROW_LEFT) {
60
+ return KeyboardSelectAction.PREV;
61
+ }
62
+ if (cursorPosition <= -1 && keyCode === BACKSPACE) {
63
+ return KeyboardSelectAction.EXECUTE;
64
+ }
65
+ return undefined;
66
+ }
67
+ get dropdownTmpl() {
68
+ return this.explicitDropdown || this.implicitDropdown;
69
+ }
70
+ get dropdownWidth() {
71
+ switch (this.dropdownWidthScale) {
72
+ case '1x':
73
+ return undefined;
74
+ case '1.5x':
75
+ return '150%';
76
+ case '2x':
77
+ return '200%';
78
+ }
79
+ }
80
+ resetInput() {
81
+ this.queryInput.resetInput();
82
+ this.queryControl.setValue('');
83
+ }
84
+ focus() {
85
+ this.queryInput.focusInput();
86
+ }
87
+ focusAndOpen() {
88
+ this.queryInput.focusInput();
89
+ this.open.next(true);
90
+ }
91
+ ngAfterViewInit() {
92
+ super.ngAfterViewInit();
93
+ this.open
94
+ .pipe(distinctUntilChanged(), filter((open) => open), takeUntil(this.destroyed$))
95
+ .subscribe(() => {
96
+ this.selectFirstOption();
97
+ });
98
+ // keyboard event handling
99
+ const sourceElement = this.queryInput.responsiveInput.nativeElement;
100
+ observableFromEvent(sourceElement, 'keydown')
101
+ .pipe(filter((event) => includes(event.keyCode, [ARROW_DOWN])), takeUntil(this.destroyed$))
102
+ .subscribe(() => this.open.next(true));
103
+ // handle keyboard navigation for the selection
104
+ observableFromEvent(sourceElement, 'keydown')
105
+ .pipe(map((event) => this.mapToEventSet(event, this.queryInput.responsiveInput.nativeElement, this.virtualCursorPosition, this.selection ? this.selection.length : 0)), filter((eventSet) => {
106
+ return !MultiSelectComponent.isMovingfromZeroToRight(eventSet) && MultiSelectComponent.isStillPossibleMoveToLeft(eventSet);
107
+ }), tap((eventSet) => {
108
+ if (eventSet.virtualCursorPosition === 0 &&
109
+ eventSet.inputCursorPosition === 0 &&
110
+ eventSet.event.keyCode === BACKSPACE &&
111
+ typeof eventSet.selectionLength === 'number' &&
112
+ eventSet.selectionLength > 0) {
113
+ const lastItem = last(this.selection);
114
+ this.removeItem({ item: lastItem, isMouse: false });
115
+ eventSet.inputCursorPosition = undefined; // set to null to prevent continuing in the stream
116
+ }
117
+ if (typeof eventSet.inputCursorPosition === 'number' && eventSet.inputCursorPosition > 0) {
118
+ this.virtualCursorPosition = 0;
119
+ }
120
+ else if (eventSet.virtualCursorPosition === -1 && eventSet.event.keyCode === ARROW_RIGHT) {
121
+ eventSet.event.preventDefault();
122
+ this.selectionKeyboardSelectAction$.next(KeyboardSelectAction.UNSELECT);
123
+ this.virtualCursorPosition = 0;
124
+ eventSet.inputCursorPosition = undefined; // set to null to prevent continuing in the stream
125
+ }
126
+ }), filter((eventSet) => eventSet.inputCursorPosition === 0), map((eventSet) => eventSet.event), filter((event) => includes(event.keyCode, [ARROW_RIGHT, ARROW_LEFT, BACKSPACE])), map((event) => {
127
+ this.virtualCursorPosition = MultiSelectComponent.calculateNewCursorPostionOnKeyboardNavigation(this.virtualCursorPosition, event.keyCode);
128
+ return {
129
+ cursorPosition: this.virtualCursorPosition,
130
+ event
131
+ };
132
+ }), map((positionSet) => {
133
+ const action = MultiSelectComponent.getKeyboardSelectAction(positionSet.cursorPosition, positionSet.event.keyCode);
134
+ if (action === KeyboardSelectAction.NEXT) {
135
+ // prevent cursor from moving in the input field, while we are still in the selection items
136
+ positionSet.event.preventDefault();
137
+ }
138
+ return action;
139
+ }), takeUntil(this.destroyed$))
140
+ .subscribe(this.selectionKeyboardSelectAction$);
141
+ const inputKeyboardEvents$ = observableFromEvent(sourceElement, 'keydown');
142
+ inputKeyboardEvents$
143
+ .pipe(filter((event) => includes(event.keyCode, [ARROW_UP, ARROW_DOWN])), takeUntil(this.destroyed$))
144
+ .subscribe((event) => {
145
+ event.preventDefault();
146
+ });
147
+ inputKeyboardEvents$
148
+ .pipe(filter((event) => event.keyCode === ESCAPE || event.keyCode === TAB), takeUntil(this.destroyed$))
149
+ .subscribe((event) => {
150
+ if (event.keyCode === ESCAPE && this.dropdownOpen) {
151
+ event.preventDefault();
152
+ event.stopImmediatePropagation();
153
+ }
154
+ this.open.next(false);
155
+ });
156
+ inputKeyboardEvents$
157
+ .pipe(filter((event) => includes(event.keyCode, [ENTER, ARROW_UP, ARROW_DOWN])), map((event) => {
158
+ switch (event.keyCode) {
159
+ case ENTER:
160
+ return KeyboardSelectAction.EXECUTE;
161
+ case ARROW_UP:
162
+ return KeyboardSelectAction.PREV;
163
+ case ARROW_DOWN:
164
+ return KeyboardSelectAction.NEXT;
165
+ default:
166
+ return null;
167
+ }
168
+ }), takeUntil(this.destroyed$))
169
+ .subscribe(this.optionsKeyboardSelectAction$);
170
+ inputKeyboardEvents$
171
+ .pipe(filter((event) => includes(event.keyCode, [ENTER, ARROW_DOWN])), takeUntil(this.destroyed$))
172
+ .subscribe(() => this.open.next(true));
173
+ }
174
+ addItemToSelection(option) {
175
+ if (option !== null) {
176
+ this.selection = [...(this.selection || [])].concat(option);
177
+ this.selectionChange.emit([...this.selection]);
178
+ this.propagateChange([...this.selection]);
179
+ }
180
+ this.resetSelectState();
181
+ }
182
+ removeItem(optionToRemove) {
183
+ if (this.disabled) {
184
+ return;
185
+ }
186
+ const prevOptionIndex = findIndex((option) => option === optionToRemove.item, this.selection);
187
+ const prevSelectionLenght = this.selection?.length ?? 0;
188
+ this.selection = _filter((option) => option !== optionToRemove.item, this.selection);
189
+ this.cd.markForCheck();
190
+ this.cd.detectChanges();
191
+ this.selectionChange.emit([...this.selection]);
192
+ this.propagateChange([...this.selection]);
193
+ if (prevOptionIndex === prevSelectionLenght - 1 || optionToRemove.isMouse) {
194
+ this.resetSelectState();
195
+ }
196
+ else {
197
+ this.virtualCursorPosition++;
198
+ }
199
+ }
200
+ propagateChange(_value) { }
201
+ writeValue(value) {
202
+ this.selection = value;
203
+ }
204
+ registerOnChange(fn) {
205
+ this.propagateChange = fn;
206
+ }
207
+ registerOnTouched(_fn) { }
208
+ setDisabledState(isDisabled) {
209
+ this.disabled = isDisabled;
210
+ }
211
+ }
212
+ MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
213
+ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: MultiSelectComponent, selector: "lx-multi-select", inputs: { markInvalid: "markInvalid", selection: "selection", size: "size", dropdownWidthScale: "dropdownWidthScale" }, outputs: { selectionChange: "selectionChange", blur: "blur" }, providers: [
214
+ {
215
+ provide: NG_VALUE_ACCESSOR,
216
+ useExisting: forwardRef(() => MultiSelectComponent),
217
+ multi: true
218
+ }
219
+ ], queries: [{ propertyName: "explicitDropdown", first: true, predicate: SelectDropdownDirective, descendants: true, read: TemplateRef, static: true }], viewQueries: [{ propertyName: "queryInput", first: true, predicate: ResponsiveInputComponent, descendants: true, static: true }, { propertyName: "implicitDropdown", first: true, predicate: ["dropdown"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div *ngIf=\"dropdownOpen\" class=\"backdrop\" (click)=\"handleBackdropClick($event)\"></div>\n<div\n [lxMarkInvalid]=\"markInvalid\"\n class=\"selectContainer\"\n [class.open]=\"dropdownOpen\"\n [class.top]=\"(dropdownDirection$ | async) === 'TOP'\"\n [class.bottom]=\"(dropdownDirection$ | async) === 'BOTTOM'\"\n [class.focused]=\"isInputFocused\"\n [class.hasSelection]=\"selection && selection.length > 0\"\n [class.smallSize]=\"size === 'small'\"\n [class.disabled]=\"disabled\"\n (click)=\"handleClick($event.target === toggle)\"\n>\n <div class=\"selectedChoicesContainer\">\n <div *ngIf=\"(selection?.length === 0 || !selection) && !queryControl?.value\" class=\"placeholder\" [attr.title]=\"placeholder\">\n {{ placeholder }}\n </div>\n <div class=\"selection\">\n <ng-content select=\".pills\"></ng-content>\n </div>\n <lx-responsive-input\n (focus)=\"isInputFocused = true\"\n (blur)=\"isInputFocused = false; blur.emit()\"\n [formControl]=\"queryControl\"\n (keydown.enter)=\"$event.preventDefault()\"\n ></lx-responsive-input>\n <i #toggle [hidden]=\"disabled\" class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"optionsContainer\" [style.width]=\"dropdownWidth\" #optionsContainer>\n <ng-container *ngIf=\"dropdownOpen\">\n <ng-container *ngTemplateOutlet=\"dropdownTmpl\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #dropdown>\n <ng-content select=\".dropdownComponent\"></ng-content>\n</ng-template>\n", styles: [".selectContainer{position:relative;height:auto;cursor:text;padding:0;box-sizing:border-box;border:1px solid #99a5bb;box-shadow:inset 0 1px 1px #00000012;border-radius:3px;background:white}.selectContainer.smallSize .selectedChoicesContainer{min-height:22px}.selectContainer.smallSize .selectedChoicesContainer .placeholder{line-height:24px}.selectContainer.smallSize lx-responsive-input{height:22px}.selectContainer.disabled{background-color:#eaedf1;cursor:not-allowed}.selectContainer.disabled lx-responsive-input{display:none}.selectContainer:not(.hasSelection){padding-left:12px}.selectContainer.open{z-index:1052;background:#fff;border:1px solid #e1e5eb}.selectContainer.open.bottom{box-shadow:0 6px 6px #21252933;border-bottom-color:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0}.selectContainer.open.bottom .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 6px 6px #21252933;top:100%;border-top:0;margin-top:0}.selectContainer.open.top{box-shadow:0 -4px 6px #21252933;border-top-left-radius:0;border-top-right-radius:0}.selectContainer.open.top .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 -4px 6px #21252933;margin-bottom:0;border-bottom:0;top:none;bottom:100%}.selectContainer:not(.open).focused{outline:0;border:1px solid #5599ff}.selectContainer .selectedChoicesContainer{padding-right:25px;min-height:29px}.selectContainer .selectedChoicesContainer .placeholder{position:absolute;left:12px;right:25px;top:0;bottom:0;line-height:29px;color:#8594ad;overflow:hidden;word-break:break-all;white-space:nowrap;text-overflow:ellipsis;padding-left:4px}.selectContainer .selectedChoicesContainer>.fa-angle-down{position:absolute;right:10px;top:50%;transform:translateY(-50%);cursor:pointer}.selectContainer .selection{display:inline;cursor:default}.selectContainer .optionsContainer{position:absolute;left:-1px;right:-1px;padding:0;background:white;z-index:1}lx-responsive-input{height:29px;padding-left:4px}.backdrop{z-index:1051;position:fixed;top:0;bottom:0;left:0;right:0}\n"], components: [{ type: i1.ResponsiveInputComponent, selector: "lx-responsive-input", outputs: ["focus", "blur"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MarkInvalidDirective, selector: "[lxMarkInvalid]", inputs: ["lxMarkInvalid"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i2.AsyncPipe } });
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: MultiSelectComponent, decorators: [{
221
+ type: Component,
222
+ args: [{ selector: 'lx-multi-select', providers: [
223
+ {
224
+ provide: NG_VALUE_ACCESSOR,
225
+ useExisting: forwardRef(() => MultiSelectComponent),
226
+ multi: true
227
+ }
228
+ ], template: "<div *ngIf=\"dropdownOpen\" class=\"backdrop\" (click)=\"handleBackdropClick($event)\"></div>\n<div\n [lxMarkInvalid]=\"markInvalid\"\n class=\"selectContainer\"\n [class.open]=\"dropdownOpen\"\n [class.top]=\"(dropdownDirection$ | async) === 'TOP'\"\n [class.bottom]=\"(dropdownDirection$ | async) === 'BOTTOM'\"\n [class.focused]=\"isInputFocused\"\n [class.hasSelection]=\"selection && selection.length > 0\"\n [class.smallSize]=\"size === 'small'\"\n [class.disabled]=\"disabled\"\n (click)=\"handleClick($event.target === toggle)\"\n>\n <div class=\"selectedChoicesContainer\">\n <div *ngIf=\"(selection?.length === 0 || !selection) && !queryControl?.value\" class=\"placeholder\" [attr.title]=\"placeholder\">\n {{ placeholder }}\n </div>\n <div class=\"selection\">\n <ng-content select=\".pills\"></ng-content>\n </div>\n <lx-responsive-input\n (focus)=\"isInputFocused = true\"\n (blur)=\"isInputFocused = false; blur.emit()\"\n [formControl]=\"queryControl\"\n (keydown.enter)=\"$event.preventDefault()\"\n ></lx-responsive-input>\n <i #toggle [hidden]=\"disabled\" class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"optionsContainer\" [style.width]=\"dropdownWidth\" #optionsContainer>\n <ng-container *ngIf=\"dropdownOpen\">\n <ng-container *ngTemplateOutlet=\"dropdownTmpl\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #dropdown>\n <ng-content select=\".dropdownComponent\"></ng-content>\n</ng-template>\n", styles: [".selectContainer{position:relative;height:auto;cursor:text;padding:0;box-sizing:border-box;border:1px solid #99a5bb;box-shadow:inset 0 1px 1px #00000012;border-radius:3px;background:white}.selectContainer.smallSize .selectedChoicesContainer{min-height:22px}.selectContainer.smallSize .selectedChoicesContainer .placeholder{line-height:24px}.selectContainer.smallSize lx-responsive-input{height:22px}.selectContainer.disabled{background-color:#eaedf1;cursor:not-allowed}.selectContainer.disabled lx-responsive-input{display:none}.selectContainer:not(.hasSelection){padding-left:12px}.selectContainer.open{z-index:1052;background:#fff;border:1px solid #e1e5eb}.selectContainer.open.bottom{box-shadow:0 6px 6px #21252933;border-bottom-color:#fff;border-bottom-left-radius:0;border-bottom-right-radius:0}.selectContainer.open.bottom .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 6px 6px #21252933;top:100%;border-top:0;margin-top:0}.selectContainer.open.top{box-shadow:0 -4px 6px #21252933;border-top-left-radius:0;border-top-right-radius:0}.selectContainer.open.top .optionsContainer{border-bottom:solid 1px #e1e5eb;border-left:solid 1px #e1e5eb;border-right:solid 1px #e1e5eb;box-shadow:0 -4px 6px #21252933;margin-bottom:0;border-bottom:0;top:none;bottom:100%}.selectContainer:not(.open).focused{outline:0;border:1px solid #5599ff}.selectContainer .selectedChoicesContainer{padding-right:25px;min-height:29px}.selectContainer .selectedChoicesContainer .placeholder{position:absolute;left:12px;right:25px;top:0;bottom:0;line-height:29px;color:#8594ad;overflow:hidden;word-break:break-all;white-space:nowrap;text-overflow:ellipsis;padding-left:4px}.selectContainer .selectedChoicesContainer>.fa-angle-down{position:absolute;right:10px;top:50%;transform:translateY(-50%);cursor:pointer}.selectContainer .selection{display:inline;cursor:default}.selectContainer .optionsContainer{position:absolute;left:-1px;right:-1px;padding:0;background:white;z-index:1}lx-responsive-input{height:29px;padding-left:4px}.backdrop{z-index:1051;position:fixed;top:0;bottom:0;left:0;right:0}\n"] }]
229
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { markInvalid: [{
230
+ type: Input
231
+ }], selection: [{
232
+ type: Input
233
+ }], size: [{
234
+ type: Input
235
+ }], dropdownWidthScale: [{
236
+ type: Input
237
+ }], selectionChange: [{
238
+ type: Output
239
+ }], blur: [{
240
+ type: Output
241
+ }], explicitDropdown: [{
242
+ type: ContentChild,
243
+ args: [SelectDropdownDirective, { read: TemplateRef, static: true }]
244
+ }], queryInput: [{
245
+ type: ViewChild,
246
+ args: [ResponsiveInputComponent, { static: true }]
247
+ }], implicitDropdown: [{
248
+ type: ViewChild,
249
+ args: ['dropdown', { static: true }]
250
+ }] } });
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2NvbXBvbmVudHMvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLElBQUksbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxtQkFBbUIsRUFBWSxNQUFNLG9DQUFv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O2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFFcUUsZ0JBQWdCO3NCQUEzRixZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVuQixVQUFVO3NCQUFoRSxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDWixnQkFBZ0I7c0JBQXhELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZmlsdGVyIGFzIF9maWx0ZXIsIGZpbmRJbmRleCwgaW5jbHVkZXMsIGxhc3QgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IGFzIG9ic2VydmFibGVGcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3REcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2VsZWN0LWRyb3Bkb3duLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAsIEJBQ0tTUEFDRSwgRU5URVIsIEVTQ0FQRSwgVEFCIH0gZnJvbSAnLi4vLi4vaGVscGVycy9rZXktY29kZXMuY29uc3RhbnRzJztcbmltcG9ydCB7IEJhc2VTZWxlY3REaXJlY3RpdmUsIEV2ZW50U2V0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jhc2Utc2VsZWN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBLZXlib2FyZFNlbGVjdEFjdGlvbiB9IGZyb20gJy4uL2tleWJvYXJkLXNlbGVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmVzcG9uc2l2ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vcmVzcG9uc2l2ZS1pbnB1dC9yZXNwb25zaXZlLWlucHV0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIE11bHRpU2VsZWN0U2l6ZSA9ICdkZWZhdWx0JyB8ICdzbWFsbCc7XG5cbmV4cG9ydCB0eXBlIE11bHRpU2VsZWN0UmVtb3ZlSXRlbUV2ZW50ID0ge1xuICBpdGVtOiBhbnk7XG4gIC8qKlxuICAgKiBJcyB0cnVlIHdoZW4gdGhlIGl0ZW0gd2FzIG5vdCByZW1vdmVkIGJ5IHByZXNzaW5nIGJhY2tzcGFjZSBvbiB0aGUga2V5Ym9hcmQgcmF0aGVyIHRoYW4gY2xpY2tpbmcgdGhlICd4Jy5cbiAgICovXG4gIGlzTW91c2U6IGJvb2xlYW47XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdseC1tdWx0aS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJ211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydtdWx0aS1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aVNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdENvbXBvbmVudCBleHRlbmRzIEJhc2VTZWxlY3REaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHB1YmxpYyBzdGF0aWMgaXNTdGlsbFBvc3NpYmxlTW92ZVRvTGVmdChldmVudFNldDogRXZlbnRTZXQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIShcbiAgICAgICAgZXZlbnRTZXQudmlydHVhbEN1cnNvclBvc2l0aW9uID09PSAwICYmXG4gICAgICAgIGV2ZW50U2V0LmlucHV0Q3Vyc29yUG9zaXRpb24gPT09IDAgJiZcbiAgICAgICAgZXZlbnRTZXQuZXZlbnQua2V5Q29kZSA9PT0gQVJST1dfTEVGVCAmJlxuICAgICAgICBldmVudFNldC5zZWxlY3Rpb25MZW5ndGggPT09IDBcbiAgICAgICkgJiZcbiAgICAgICEoXG4gICAgICAgIGV2ZW50U2V0LmV2ZW50LmtleUNvZGUgPT09IEFSUk9XX0xFRlQgJiZcbiAgICAgICAgdHlwZW9mIGV2ZW50U2V0LnNlbGVjdGlvbkxlbmd0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgZXZlbnRTZXQuc2VsZWN0aW9uTGVuZ3RoID4gMCAmJlxuICAgICAgICBNYXRoLmFicyhldmVudFNldC52aXJ0dWFsQ3Vyc29yUG9zaXRpb24pID09PSBldmVudFNldC5zZWxlY3Rpb25MZW5ndGhcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc01vdmluZ2Zyb21aZXJvVG9SaWdodChldmVudFNldDogRXZlbnRTZXQpIHtcbiAgICByZXR1cm4gZXZlbnRTZXQudmlydHVhbEN1cnNvclBvc2l0aW9uID09PSAwICYmIGV2ZW50U2V0LmlucHV0Q3Vyc29yUG9zaXRpb24gPT09IDAgJiYgZXZlbnRTZXQuZXZlbnQua2V5Q29kZSA9PT0gQVJST1dfUklHSFQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNhbGN1bGF0ZU5ld0N1cnNvclBvc3Rpb25PbktleWJvYXJkTmF2aWdhdGlvbihjdXJzb3JQb3NpdGlvbjogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpIHtcbiAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgIGNhc2UgQVJST1dfTEVGVDpcbiAgICAgICAgY3Vyc29yUG9zaXRpb24tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFSUk9XX1JJR0hUOlxuICAgICAgICBjdXJzb3JQb3NpdGlvbisrO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGN1cnNvclBvc2l0aW9uO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRLZXlib2FyZFNlbGVjdEFjdGlvbihjdXJzb3JQb3NpdGlvbjogbnVtYmVyLCBrZXlDb2RlOiBudW1iZXIpOiBLZXlib2FyZFNlbGVjdEFjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGN1cnNvclBvc2l0aW9uIDw9IC0xICYmIGtleUNvZGUgPT09IEFSUk9XX1JJR0hUKSB7XG4gICAgICByZXR1cm4gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uTkVYVDtcbiAgICB9XG4gICAgaWYgKGN1cnNvclBvc2l0aW9uID09PSAtMSAmJiBrZXlDb2RlID09PSBBUlJPV19MRUZUKSB7XG4gICAgICByZXR1cm4gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uTEFTVDtcbiAgICB9XG4gICAgaWYgKGN1cnNvclBvc2l0aW9uIDwgLTEgJiYga2V5Q29kZSA9PT0gQVJST1dfTEVGVCkge1xuICAgICAgcmV0dXJuIEtleWJvYXJkU2VsZWN0QWN0aW9uLlBSRVY7XG4gICAgfVxuICAgIGlmIChjdXJzb3JQb3NpdGlvbiA8PSAtMSAmJiBrZXlDb2RlID09PSBCQUNLU1BBQ0UpIHtcbiAgICAgIHJldHVybiBLZXlib2FyZFNlbGVjdEFjdGlvbi5FWEVDVVRFO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgQElucHV0KCkgbWFya0ludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VsZWN0aW9uPzogYW55W10gfCBudWxsID0gW107XG4gIEBJbnB1dCgpIHNpemU6IE11bHRpU2VsZWN0U2l6ZSA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgZHJvcGRvd25XaWR0aFNjYWxlOiAnMXgnIHwgJzEuNXgnIHwgJzJ4JyA9ICcxeCc7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoU2VsZWN0RHJvcGRvd25EaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KSBleHBsaWNpdERyb3Bkb3duPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKFJlc3BvbnNpdmVJbnB1dENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgcXVlcnlJbnB1dCE6IFJlc3BvbnNpdmVJbnB1dENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbXBsaWNpdERyb3Bkb3duITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBnZXQgZHJvcGRvd25UbXBsKCkge1xuICAgIHJldHVybiB0aGlzLmV4cGxpY2l0RHJvcGRvd24gfHwgdGhpcy5pbXBsaWNpdERyb3Bkb3duO1xuICB9XG5cbiAgcmVhZG9ubHkgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IGRyb3Bkb3duV2lkdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHRoaXMuZHJvcGRvd25XaWR0aFNjYWxlKSB7XG4gICAgICBjYXNlICcxeCc6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjYXNlICcxLjV4JzpcbiAgICAgICAgcmV0dXJuICcxNTAlJztcbiAgICAgIGNhc2UgJzJ4JzpcbiAgICAgICAgcmV0dXJuICcyMDAlJztcbiAgICB9XG4gIH1cblxuICByZXNldElucHV0KCkge1xuICAgIHRoaXMucXVlcnlJbnB1dC5yZXNldElucHV0KCk7XG4gICAgdGhpcy5xdWVyeUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5xdWVyeUlucHV0LmZvY3VzSW5wdXQoKTtcbiAgfVxuXG4gIGZvY3VzQW5kT3BlbigpIHtcbiAgICB0aGlzLnF1ZXJ5SW5wdXQuZm9jdXNJbnB1dCgpO1xuICAgIHRoaXMub3Blbi5uZXh0KHRydWUpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgdGhpcy5vcGVuXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgZmlsdGVyKChvcGVuKSA9PiBvcGVuKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdEZpcnN0T3B0aW9uKCk7XG4gICAgICB9KTtcblxuICAgIC8vIGtleWJvYXJkIGV2ZW50IGhhbmRsaW5nXG4gICAgY29uc3Qgc291cmNlRWxlbWVudCA9IHRoaXMucXVlcnlJbnB1dC5yZXNwb25zaXZlSW5wdXQubmF0aXZlRWxlbWVudDtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oc291cmNlRWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGluY2x1ZGVzKGV2ZW50LmtleUNvZGUsIFtBUlJPV19ET1dOXSkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW4ubmV4dCh0cnVlKSk7XG5cbiAgICAvLyBoYW5kbGUga2V5Ym9hcmQgbmF2aWdhdGlvbiBmb3IgdGhlIHNlbGVjdGlvblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oc291cmNlRWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZXZlbnQpID0+XG4gICAgICAgICAgdGhpcy5tYXBUb0V2ZW50U2V0KFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5SW5wdXQucmVzcG9uc2l2ZUlucHV0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxDdXJzb3JQb3NpdGlvbixcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID8gdGhpcy5zZWxlY3Rpb24ubGVuZ3RoIDogMFxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmlsdGVyKChldmVudFNldCkgPT4ge1xuICAgICAgICAgIHJldHVybiAhTXVsdGlTZWxlY3RDb21wb25lbnQuaXNNb3Zpbmdmcm9tWmVyb1RvUmlnaHQoZXZlbnRTZXQpICYmIE11bHRpU2VsZWN0Q29tcG9uZW50LmlzU3RpbGxQb3NzaWJsZU1vdmVUb0xlZnQoZXZlbnRTZXQpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKChldmVudFNldCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGV2ZW50U2V0LnZpcnR1YWxDdXJzb3JQb3NpdGlvbiA9PT0gMCAmJlxuICAgICAgICAgICAgZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA9PT0gMCAmJlxuICAgICAgICAgICAgZXZlbnRTZXQuZXZlbnQua2V5Q29kZSA9PT0gQkFDS1NQQUNFICYmXG4gICAgICAgICAgICB0eXBlb2YgZXZlbnRTZXQuc2VsZWN0aW9uTGVuZ3RoID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgZXZlbnRTZXQuc2VsZWN0aW9uTGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBsYXN0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbSh7IGl0ZW06IGxhc3RJdGVtLCBpc01vdXNlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIGV2ZW50U2V0LmlucHV0Q3Vyc29yUG9zaXRpb24gPSB1bmRlZmluZWQ7IC8vIHNldCB0byBudWxsIHRvIHByZXZlbnQgY29udGludWluZyBpbiB0aGUgc3RyZWFtXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA9PT0gJ251bWJlcicgJiYgZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbEN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50U2V0LnZpcnR1YWxDdXJzb3JQb3NpdGlvbiA9PT0gLTEgJiYgZXZlbnRTZXQuZXZlbnQua2V5Q29kZSA9PT0gQVJST1dfUklHSFQpIHtcbiAgICAgICAgICAgIGV2ZW50U2V0LmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbktleWJvYXJkU2VsZWN0QWN0aW9uJC5uZXh0KEtleWJvYXJkU2VsZWN0QWN0aW9uLlVOU0VMRUNUKTtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbEN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgIGV2ZW50U2V0LmlucHV0Q3Vyc29yUG9zaXRpb24gPSB1bmRlZmluZWQ7IC8vIHNldCB0byBudWxsIHRvIHByZXZlbnQgY29udGludWluZyBpbiB0aGUgc3RyZWFtXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKChldmVudFNldCkgPT4gZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA9PT0gMCksXG4gICAgICAgIG1hcCgoZXZlbnRTZXQpID0+IGV2ZW50U2V0LmV2ZW50KSxcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gaW5jbHVkZXMoZXZlbnQua2V5Q29kZSwgW0FSUk9XX1JJR0hULCBBUlJPV19MRUZULCBCQUNLU1BBQ0VdKSksXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLnZpcnR1YWxDdXJzb3JQb3NpdGlvbiA9IE11bHRpU2VsZWN0Q29tcG9uZW50LmNhbGN1bGF0ZU5ld0N1cnNvclBvc3Rpb25PbktleWJvYXJkTmF2aWdhdGlvbihcbiAgICAgICAgICAgIHRoaXMudmlydHVhbEN1cnNvclBvc2l0aW9uLFxuICAgICAgICAgICAgZXZlbnQua2V5Q29kZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnNvclBvc2l0aW9uOiB0aGlzLnZpcnR1YWxDdXJzb3JQb3NpdGlvbixcbiAgICAgICAgICAgIGV2ZW50XG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgocG9zaXRpb25TZXQpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSBNdWx0aVNlbGVjdENvbXBvbmVudC5nZXRLZXlib2FyZFNlbGVjdEFjdGlvbihwb3NpdGlvblNldC5jdXJzb3JQb3NpdGlvbiwgcG9zaXRpb25TZXQuZXZlbnQua2V5Q29kZSk7XG4gICAgICAgICAgaWYgKGFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uTkVYVCkge1xuICAgICAgICAgICAgLy8gcHJldmVudCBjdXJzb3IgZnJvbSBtb3ZpbmcgaW4gdGhlIGlucHV0IGZpZWxkLCB3aGlsZSB3ZSBhcmUgc3RpbGwgaW4gdGhlIHNlbGVjdGlvbiBpdGVtc1xuICAgICAgICAgICAgcG9zaXRpb25TZXQuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuc2VsZWN0aW9uS2V5Ym9hcmRTZWxlY3RBY3Rpb24kKTtcblxuICAgIGNvbnN0IGlucHV0S2V5Ym9hcmRFdmVudHMkID0gb2JzZXJ2YWJsZUZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihzb3VyY2VFbGVtZW50LCAna2V5ZG93bicpO1xuXG4gICAgaW5wdXRLZXlib2FyZEV2ZW50cyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiBpbmNsdWRlcyhldmVudC5rZXlDb2RlLCBbQVJST1dfVVAsIEFSUk9XX0RPV05dKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSk7XG5cbiAgICBpbnB1dEtleWJvYXJkRXZlbnRzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSB8fCBldmVudC5rZXlDb2RlID09PSBUQUIpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJiB0aGlzLmRyb3Bkb3duT3Blbikge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuLm5leHQoZmFsc2UpO1xuICAgICAgfSk7XG5cbiAgICBpbnB1dEtleWJvYXJkRXZlbnRzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGluY2x1ZGVzKGV2ZW50LmtleUNvZGUsIFtFTlRFUiwgQVJST1dfVVAsIEFSUk9XX0RPV05dKSksXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgRU5URVI6XG4gICAgICAgICAgICAgIHJldHVybiBLZXlib2FyZFNlbGVjdEFjdGlvbi5FWEVDVVRFO1xuICAgICAgICAgICAgY2FzZSBBUlJPV19VUDpcbiAgICAgICAgICAgICAgcmV0dXJuIEtleWJvYXJkU2VsZWN0QWN0aW9uLlBSRVY7XG4gICAgICAgICAgICBjYXNlIEFSUk9XX0RPV046XG4gICAgICAgICAgICAgIHJldHVybiBLZXlib2FyZFNlbGVjdEFjdGlvbi5ORVhUO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5vcHRpb25zS2V5Ym9hcmRTZWxlY3RBY3Rpb24kKTtcblxuICAgIGlucHV0S2V5Ym9hcmRFdmVudHMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gaW5jbHVkZXMoZXZlbnQua2V5Q29kZSwgW0VOVEVSLCBBUlJPV19ET1dOXSkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW4ubmV4dCh0cnVlKSk7XG4gIH1cblxuICBhZGRJdGVtVG9TZWxlY3Rpb24ob3B0aW9uOiBhbnkpIHtcbiAgICBpZiAob3B0aW9uICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbiA9IFsuLi4odGhpcy5zZWxlY3Rpb24gfHwgW10pXS5jb25jYXQob3B0aW9uKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoWy4uLnRoaXMuc2VsZWN0aW9uXSk7XG4gICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShbLi4udGhpcy5zZWxlY3Rpb25dKTtcbiAgICB9XG4gICAgdGhpcy5yZXNldFNlbGVjdFN0YXRlKCk7XG4gIH1cblxuICByZW1vdmVJdGVtKG9wdGlvblRvUmVtb3ZlOiBNdWx0aVNlbGVjdFJlbW92ZUl0ZW1FdmVudCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZPcHRpb25JbmRleCA9IGZpbmRJbmRleCgob3B0aW9uKSA9PiBvcHRpb24gPT09IG9wdGlvblRvUmVtb3ZlLml0ZW0sIHRoaXMuc2VsZWN0aW9uKTtcbiAgICBjb25zdCBwcmV2U2VsZWN0aW9uTGVuZ2h0ID0gdGhpcy5zZWxlY3Rpb24/Lmxlbmd0aCA/PyAwO1xuICAgIHRoaXMuc2VsZWN0aW9uID0gX2ZpbHRlcigob3B0aW9uKSA9PiBvcHRpb24gIT09IG9wdGlvblRvUmVtb3ZlLml0ZW0sIHRoaXMuc2VsZWN0aW9uKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoWy4uLnRoaXMuc2VsZWN0aW9uXSk7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoWy4uLnRoaXMuc2VsZWN0aW9uXSk7XG5cbiAgICBpZiAocHJldk9wdGlvbkluZGV4ID09PSBwcmV2U2VsZWN0aW9uTGVuZ2h0IC0gMSB8fCBvcHRpb25Ub1JlbW92ZS5pc01vdXNlKSB7XG4gICAgICB0aGlzLnJlc2V0U2VsZWN0U3RhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aXJ0dWFsQ3Vyc29yUG9zaXRpb24rKztcbiAgICB9XG4gIH1cblxuICBwcm9wYWdhdGVDaGFuZ2UoX3ZhbHVlOiBhbnlbXSkge31cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoX2ZuOiBhbnkpIHt9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJkcm9wZG93bk9wZW5cIiBjbGFzcz1cImJhY2tkcm9wXCIgKGNsaWNrKT1cImhhbmRsZUJhY2tkcm9wQ2xpY2soJGV2ZW50KVwiPjwvZGl2PlxuPGRpdlxuICBbbHhNYXJrSW52YWxpZF09XCJtYXJrSW52YWxpZFwiXG4gIGNsYXNzPVwic2VsZWN0Q29udGFpbmVyXCJcbiAgW2NsYXNzLm9wZW5dPVwiZHJvcGRvd25PcGVuXCJcbiAgW2NsYXNzLnRvcF09XCIoZHJvcGRvd25EaXJlY3Rpb24kIHwgYXN5bmMpID09PSAnVE9QJ1wiXG4gIFtjbGFzcy5ib3R0b21dPVwiKGRyb3Bkb3duRGlyZWN0aW9uJCB8IGFzeW5jKSA9PT0gJ0JPVFRPTSdcIlxuICBbY2xhc3MuZm9jdXNlZF09XCJpc0lucHV0Rm9jdXNlZFwiXG4gIFtjbGFzcy5oYXNTZWxlY3Rpb25dPVwic2VsZWN0aW9uICYmIHNlbGVjdGlvbi5sZW5ndGggPiAwXCJcbiAgW2NsYXNzLnNtYWxsU2l6ZV09XCJzaXplID09PSAnc21hbGwnXCJcbiAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudC50YXJnZXQgPT09IHRvZ2dsZSlcIlxuPlxuICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRDaG9pY2VzQ29udGFpbmVyXCI+XG4gICAgPGRpdiAqbmdJZj1cIihzZWxlY3Rpb24/Lmxlbmd0aCA9PT0gMCB8fCAhc2VsZWN0aW9uKSAmJiAhcXVlcnlDb250cm9sPy52YWx1ZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIiBbYXR0ci50aXRsZV09XCJwbGFjZWhvbGRlclwiPlxuICAgICAge3sgcGxhY2Vob2xkZXIgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0aW9uXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIucGlsbHNcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGx4LXJlc3BvbnNpdmUtaW5wdXRcbiAgICAgIChmb2N1cyk9XCJpc0lucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgKGJsdXIpPVwiaXNJbnB1dEZvY3VzZWQgPSBmYWxzZTsgYmx1ci5lbWl0KClcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cInF1ZXJ5Q29udHJvbFwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgPjwvbHgtcmVzcG9uc2l2ZS1pbnB1dD5cbiAgICA8aSAjdG9nZ2xlIFtoaWRkZW5dPVwiZGlzYWJsZWRcIiBjbGFzcz1cImZhcyBmYS1hbmdsZS1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250YWluZXJcIiBbc3R5bGUud2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiICNvcHRpb25zQ29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcm9wZG93bk9wZW5cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blRtcGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNkcm9wZG93bj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmRyb3Bkb3duQ29tcG9uZW50XCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,81 @@
1
+ import { Component, EventEmitter, forwardRef, HostListener, Inject, Input, Optional, Output } from '@angular/core';
2
+ import { OptionGroupComponent } from '../option-group/option-group.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../option-group/option-group.component";
6
+ export class OptionComponent {
7
+ constructor(group, elementRef) {
8
+ this.group = group;
9
+ this.elementRef = elementRef;
10
+ this.selected = false;
11
+ this.isHighlighted = false;
12
+ this.disabled = false;
13
+ /**
14
+ * Is true when option has a selection nature like sorting.
15
+ * In this case we show a check icon on the left to indicate selection.
16
+ *
17
+ * Is false when option represents a one time action like printing.
18
+ * Cannot have selectedState when Option has dropdown
19
+ */
20
+ this.hasSelectedState = true;
21
+ this.select = new EventEmitter();
22
+ this.highlight = new EventEmitter();
23
+ this.selectedClick = new EventEmitter();
24
+ this.hasSubdropdown = false;
25
+ this.isSuboption = false;
26
+ }
27
+ selectOption(event) {
28
+ if (this.disabled || this.hasSubdropdown) {
29
+ if (event) {
30
+ event.stopImmediatePropagation();
31
+ }
32
+ }
33
+ else {
34
+ if (this.selected) {
35
+ return this.selectedClick.emit();
36
+ }
37
+ if (this.group) {
38
+ this.group.selectOption(this.value);
39
+ }
40
+ this.select.emit(this.value);
41
+ }
42
+ }
43
+ setSelected(value) {
44
+ this.selected = value;
45
+ }
46
+ setHighlighted(value) {
47
+ this.isHighlighted = value;
48
+ this.highlight.emit(this.isHighlighted);
49
+ }
50
+ }
51
+ OptionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionComponent, deps: [{ token: forwardRef(() => OptionGroupComponent), optional: true }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
52
+ OptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: OptionComponent, selector: "lx-option", inputs: { selected: "selected", isHighlighted: "isHighlighted", disabled: "disabled", value: "value", hasSelectedState: "hasSelectedState" }, outputs: { select: "select", highlight: "highlight", selectedClick: "selectedClick" }, host: { listeners: { "click": "selectOption($event)" } }, ngImport: i0, template: "<li\n class=\"option\"\n [class.selectedState]=\"hasSelectedState && !hasSubdropdown\"\n [class.highlighted]=\"isHighlighted\"\n [class.selected]=\"selected\"\n [class.disabled]=\"disabled\"\n [class.hasSubdropdown]=\"hasSubdropdown\"\n>\n <i *ngIf=\"hasSelectedState && selected\" class=\"far fa-check\"></i>\n <ng-content></ng-content>\n <i *ngIf=\"hasSubdropdown\" class=\"far fa-chevron-right\"></i>\n</li>\n", styles: [":host{display:block}.option{line-height:23px;padding:4px 12px;cursor:pointer;color:#2a303d}.option:hover{background-color:#e1e5eb}.option.selectedState{padding-left:28px}.option.selected{cursor:default;color:var(--lx-primarybutton-backgroundcolor)}.option.highlighted{background:#eaedf1}.option.disabled{opacity:.6}.option.hasSubdropdown{padding-right:28px}.fa-check{line-height:23px;position:absolute;left:8px}.fa-chevron-right{line-height:23px;position:absolute;right:8px;font-size:8px}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionComponent, decorators: [{
54
+ type: Component,
55
+ args: [{ selector: 'lx-option', template: "<li\n class=\"option\"\n [class.selectedState]=\"hasSelectedState && !hasSubdropdown\"\n [class.highlighted]=\"isHighlighted\"\n [class.selected]=\"selected\"\n [class.disabled]=\"disabled\"\n [class.hasSubdropdown]=\"hasSubdropdown\"\n>\n <i *ngIf=\"hasSelectedState && selected\" class=\"far fa-check\"></i>\n <ng-content></ng-content>\n <i *ngIf=\"hasSubdropdown\" class=\"far fa-chevron-right\"></i>\n</li>\n", styles: [":host{display:block}.option{line-height:23px;padding:4px 12px;cursor:pointer;color:#2a303d}.option:hover{background-color:#e1e5eb}.option.selectedState{padding-left:28px}.option.selected{cursor:default;color:var(--lx-primarybutton-backgroundcolor)}.option.highlighted{background:#eaedf1}.option.disabled{opacity:.6}.option.hasSubdropdown{padding-right:28px}.fa-check{line-height:23px;position:absolute;left:8px}.fa-chevron-right{line-height:23px;position:absolute;right:8px;font-size:8px}\n"] }]
56
+ }], ctorParameters: function () { return [{ type: i2.OptionGroupComponent, decorators: [{
57
+ type: Optional
58
+ }, {
59
+ type: Inject,
60
+ args: [forwardRef(() => OptionGroupComponent)]
61
+ }] }, { type: i0.ElementRef }]; }, propDecorators: { selected: [{
62
+ type: Input
63
+ }], isHighlighted: [{
64
+ type: Input
65
+ }], disabled: [{
66
+ type: Input
67
+ }], value: [{
68
+ type: Input
69
+ }], hasSelectedState: [{
70
+ type: Input
71
+ }], select: [{
72
+ type: Output
73
+ }], highlight: [{
74
+ type: Output
75
+ }], selectedClick: [{
76
+ type: Output
77
+ }], selectOption: [{
78
+ type: HostListener,
79
+ args: ['click', ['$event']]
80
+ }] } });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2NvbXBvbmVudHMvb3B0aW9uL29wdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL29wdGlvbi9vcHRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7QUFPOUUsTUFBTSxPQUFPLGVBQWU7SUFzQzFCLFlBQ3NFLEtBQTJCLEVBQ3hGLFVBQW1DO1FBRDBCLFVBQUssR0FBTCxLQUFLLENBQXNCO1FBQ3hGLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBdkNuQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFbkM7Ozs7OztXQU1HO1FBQ00scUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBRWhDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU3QyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztJQXNCMUIsQ0FBQztJQW5CSixZQUFZLENBQUMsS0FBa0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEMsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDbEM7U0FDRjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDbEM7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQU9ELFdBQVcsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7NEdBbERVLGVBQWUsa0JBdUNKLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztnR0F2Q2pELGVBQWUsZ1ZDUjVCLHVhQVlBOzJGREphLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsV0FBVzs7MEJBMkNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztxRUF0Q25ELFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFRRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFNUCxZQUFZO3NCQURYLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3B0aW9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9vcHRpb24tZ3JvdXAvb3B0aW9uLWdyb3VwLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LW9wdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnb3B0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ29wdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9wdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzSGlnaGxpZ2h0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdmFsdWU6IGFueTtcbiAgLyoqXG4gICAqIElzIHRydWUgd2hlbiBvcHRpb24gaGFzIGEgc2VsZWN0aW9uIG5hdHVyZSBsaWtlIHNvcnRpbmcuXG4gICAqIEluIHRoaXMgY2FzZSB3ZSBzaG93IGEgY2hlY2sgaWNvbiBvbiB0aGUgbGVmdCB0byBpbmRpY2F0ZSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIElzIGZhbHNlIHdoZW4gb3B0aW9uIHJlcHJlc2VudHMgYSBvbmUgdGltZSBhY3Rpb24gbGlrZSBwcmludGluZy5cbiAgICogQ2Fubm90IGhhdmUgc2VsZWN0ZWRTdGF0ZSB3aGVuIE9wdGlvbiBoYXMgZHJvcGRvd25cbiAgICovXG4gIEBJbnB1dCgpIGhhc1NlbGVjdGVkU3RhdGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoaWdobGlnaHQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3RlZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGhhc1N1YmRyb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3Vib3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBzZWxlY3RPcHRpb24oZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5oYXNTdWJkcm9wZG93bikge1xuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZENsaWNrLmVtaXQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAuc2VsZWN0T3B0aW9uKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3QuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT3B0aW9uR3JvdXBDb21wb25lbnQpKSBwcml2YXRlIGdyb3VwOiBPcHRpb25Hcm91cENvbXBvbmVudCxcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7fVxuXG4gIHNldFNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHZhbHVlO1xuICB9XG5cbiAgc2V0SGlnaGxpZ2h0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzSGlnaGxpZ2h0ZWQgPSB2YWx1ZTtcbiAgICB0aGlzLmhpZ2hsaWdodC5lbWl0KHRoaXMuaXNIaWdobGlnaHRlZCk7XG4gIH1cbn1cbiIsIjxsaVxuICBjbGFzcz1cIm9wdGlvblwiXG4gIFtjbGFzcy5zZWxlY3RlZFN0YXRlXT1cImhhc1NlbGVjdGVkU3RhdGUgJiYgIWhhc1N1YmRyb3Bkb3duXCJcbiAgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImlzSGlnaGxpZ2h0ZWRcIlxuICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0ZWRcIlxuICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbY2xhc3MuaGFzU3ViZHJvcGRvd25dPVwiaGFzU3ViZHJvcGRvd25cIlxuPlxuICA8aSAqbmdJZj1cImhhc1NlbGVjdGVkU3RhdGUgJiYgc2VsZWN0ZWRcIiBjbGFzcz1cImZhciBmYS1jaGVja1wiPjwvaT5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8aSAqbmdJZj1cImhhc1N1YmRyb3Bkb3duXCIgY2xhc3M9XCJmYXIgZmEtY2hldnJvbi1yaWdodFwiPjwvaT5cbjwvbGk+XG4iXX0=
@@ -0,0 +1,29 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class OptionGroupComponent {
5
+ constructor() {
6
+ /**
7
+ * Is true when option children have a selected state.
8
+ * In this case we want to align the padding of the group label with the lx-options'.
9
+ */
10
+ this.hasSelectedState = true;
11
+ this.select = new EventEmitter();
12
+ }
13
+ selectOption(value) {
14
+ this.select.emit(value);
15
+ }
16
+ }
17
+ OptionGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
+ OptionGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: OptionGroupComponent, selector: "lx-option-group", inputs: { hasSelectedState: "hasSelectedState", label: "label" }, outputs: { select: "select" }, ngImport: i0, template: "<li>\n <span *ngIf=\"label\" class=\"groupLabel\" [class.selectedState]=\"hasSelectedState\">{{ label }}</span>\n <ul>\n <ng-content></ng-content>\n </ul>\n</li>\n", styles: [":host{display:block}:host:not(:first-child){border-top:solid 1px #eaedf1}ul{list-style:none;margin:0;padding-left:0}.groupLabel{display:block;line-height:23px;padding:4px 12px;color:#99a5bb;letter-spacing:.5px;font-weight:700;text-transform:uppercase}.groupLabel.selectedState{padding-left:28px}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: OptionGroupComponent, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'lx-option-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<li>\n <span *ngIf=\"label\" class=\"groupLabel\" [class.selectedState]=\"hasSelectedState\">{{ label }}</span>\n <ul>\n <ng-content></ng-content>\n </ul>\n</li>\n", styles: [":host{display:block}:host:not(:first-child){border-top:solid 1px #eaedf1}ul{list-style:none;margin:0;padding-left:0}.groupLabel{display:block;line-height:23px;padding:4px 12px;color:#99a5bb;letter-spacing:.5px;font-weight:700;text-transform:uppercase}.groupLabel.selectedState{padding-left:28px}\n"] }]
22
+ }], propDecorators: { hasSelectedState: [{
23
+ type: Input
24
+ }], label: [{
25
+ type: Input
26
+ }], select: [{
27
+ type: Output
28
+ }] } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2NvbXBvbmVudHMvb3B0aW9uLWdyb3VwL29wdGlvbi1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL29wdGlvbi1ncm91cC9vcHRpb24tZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBUWhHLE1BQU0sT0FBTyxvQkFBb0I7SUFOakM7UUFPRTs7O1dBR0c7UUFDTSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFJaEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7S0FLdkM7SUFIQyxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDOztpSEFiVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix3SkNSakMsMktBTUE7MkZERWEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQU90QyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdseC1vcHRpb24tZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJ29wdGlvbi1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydvcHRpb24tZ3JvdXAuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgT3B0aW9uR3JvdXBDb21wb25lbnQge1xuICAvKipcbiAgICogSXMgdHJ1ZSB3aGVuIG9wdGlvbiBjaGlsZHJlbiBoYXZlIGEgc2VsZWN0ZWQgc3RhdGUuXG4gICAqIEluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIGFsaWduIHRoZSBwYWRkaW5nIG9mIHRoZSBncm91cCBsYWJlbCB3aXRoIHRoZSBseC1vcHRpb25zJy5cbiAgICovXG4gIEBJbnB1dCgpIGhhc1NlbGVjdGVkU3RhdGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIGxhYmVsITogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgc2VsZWN0T3B0aW9uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdC5lbWl0KHZhbHVlKTtcbiAgfVxufVxuIiwiPGxpPlxuICA8c3BhbiAqbmdJZj1cImxhYmVsXCIgY2xhc3M9XCJncm91cExhYmVsXCIgW2NsYXNzLnNlbGVjdGVkU3RhdGVdPVwiaGFzU2VsZWN0ZWRTdGF0ZVwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICA8dWw+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L3VsPlxuPC9saT5cbiJdfQ==