@leanix/components 0.4.21 → 0.4.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/{esm2020 → esm2022}/lib/core-ui/components/badge/badge.component.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/core-ui/components/button/button.component.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/core-ui/components/button-group/button-group.component.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/core-ui/components/card/card.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/core-ui/components/collapsible/collapsible.component.mjs +4 -4
  6. package/{esm2020 → esm2022}/lib/core-ui/components/colored-label/colored-label.component.mjs +4 -4
  7. package/esm2022/lib/core-ui/components/ellipsis/ellipsis.component.mjs +139 -0
  8. package/{esm2020 → esm2022}/lib/core-ui/components/file-download-button/file-download-button.component.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/core-ui/components/icon-scale/icon-scale.component.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/core-ui/components/spinner/spinner.component.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/core-ui/components/table/table-header/table-header.component.mjs +4 -4
  12. package/{esm2020 → esm2022}/lib/core-ui/components/table/table.component.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +4 -4
  14. package/{esm2020 → esm2022}/lib/core-ui/core-ui.module.mjs +72 -72
  15. package/{esm2020 → esm2022}/lib/core-ui/directives/after-view-init.directive.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/core-ui/directives/autoclose-group.service.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/core-ui/directives/autoclose.directive.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/core-ui/directives/autofocus.directive.mjs +4 -4
  19. package/{esm2020 → esm2022}/lib/core-ui/directives/html.directive.mjs +4 -4
  20. package/esm2022/lib/core-ui/linkify/linkify.pipe.mjs +144 -0
  21. package/{esm2020 → esm2022}/lib/core-ui/linkify/unlinkify.pipe.mjs +4 -4
  22. package/{esm2020 → esm2022}/lib/core-ui/pipes/br.pipe.mjs +4 -4
  23. package/{esm2020 → esm2022}/lib/core-ui/pipes/contrast-color.pipe.mjs +4 -4
  24. package/{esm2020 → esm2022}/lib/core-ui/pipes/custom-date.pipe.mjs +4 -4
  25. package/{esm2020 → esm2022}/lib/core-ui/pipes/highlight-range.pipe.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/core-ui/pipes/highlight-term.pipe.mjs +4 -4
  27. package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +4 -4
  28. package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-time-ago.pipe.mjs +4 -4
  29. package/{esm2020 → esm2022}/lib/core-ui/pipes/lx-translate.pipe.mjs +5 -5
  30. package/{esm2020 → esm2022}/lib/core-ui/pipes/markdown.pipe.mjs +4 -4
  31. package/{esm2020 → esm2022}/lib/core-ui/pipes/nbsp.pipe.mjs +4 -4
  32. package/{esm2020 → esm2022}/lib/core-ui/pipes/sort.pipe.mjs +4 -4
  33. package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-after.pipe.mjs +4 -4
  34. package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-before.pipe.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/core-ui/pipes/translation-between.pipe.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +4 -4
  37. package/{esm2020 → esm2022}/lib/core-ui/services/resize-observer.service.mjs +4 -4
  38. package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip.component.mjs +4 -4
  39. package/esm2022/lib/core-ui/tooltip/tooltip.directive.mjs +105 -0
  40. package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip.module.mjs +5 -5
  41. package/esm2022/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +120 -0
  42. package/{esm2020 → esm2022}/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +4 -4
  43. package/{esm2020 → esm2022}/lib/forms-ui/components/breadcrumb/breadcrumb.component.mjs +4 -4
  44. package/esm2022/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +216 -0
  45. package/{esm2020 → esm2022}/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +4 -4
  46. package/{esm2020 → esm2022}/lib/forms-ui/components/copy-button/copy-button.component.mjs +4 -4
  47. package/esm2022/lib/forms-ui/components/currency/currency-input.component.mjs +145 -0
  48. package/{esm2020 → esm2022}/lib/forms-ui/components/currency/currency-symbol.component.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/forms-ui/components/date-input/date-input.component.mjs +7 -7
  50. package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.mjs +6 -6
  51. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +27 -0
  52. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +205 -0
  53. package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/datepicker.config.mjs +4 -4
  54. package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/daypicker.component.mjs +6 -6
  55. package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/monthpicker.component.mjs +6 -6
  56. package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/yearpicker.component.mjs +6 -6
  57. package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +49 -0
  58. package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +4 -4
  59. package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +5 -5
  60. package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +134 -0
  61. package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/forms-ui/components/error-message/error-message.component.mjs +7 -7
  63. package/{esm2020 → esm2022}/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.mjs +4 -4
  64. package/{esm2020 → esm2022}/lib/forms-ui/components/form-error/form-error.component.mjs +4 -4
  65. package/{esm2020 → esm2022}/lib/forms-ui/components/icon/icon.component.mjs +4 -4
  66. package/{esm2020 → esm2022}/lib/forms-ui/components/input/input.component.mjs +4 -4
  67. package/{esm2020 → esm2022}/lib/forms-ui/components/keyboard-select.directive.mjs +4 -4
  68. package/esm2022/lib/forms-ui/components/multi-select/multi-select.component.mjs +255 -0
  69. package/esm2022/lib/forms-ui/components/option/option.component.mjs +84 -0
  70. package/{esm2020 → esm2022}/lib/forms-ui/components/option-group/option-group.component.mjs +4 -4
  71. package/{esm2020 → esm2022}/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +4 -4
  72. package/esm2022/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +185 -0
  73. package/{esm2020 → esm2022}/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +4 -4
  74. package/{esm2020 → esm2022}/lib/forms-ui/components/picker/picker-trigger.directive.mjs +7 -7
  75. package/{esm2020 → esm2022}/lib/forms-ui/components/picker/picker.component.mjs +19 -19
  76. package/esm2022/lib/forms-ui/components/picker-option/picker-option.component.mjs +118 -0
  77. package/{esm2020 → esm2022}/lib/forms-ui/components/pill-item/pill-item.component.mjs +4 -4
  78. package/{esm2020 → esm2022}/lib/forms-ui/components/pill-list/pill-list.component.mjs +4 -4
  79. package/esm2022/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +100 -0
  80. package/{esm2020 → esm2022}/lib/forms-ui/components/select-list/select-list.component.mjs +4 -4
  81. package/esm2022/lib/forms-ui/components/single-select/single-select.component.mjs +279 -0
  82. package/{esm2020 → esm2022}/lib/forms-ui/components/slider-toggle/slider-toggle.component.mjs +4 -4
  83. package/{esm2020 → esm2022}/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +4 -4
  84. package/{esm2020 → esm2022}/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +4 -4
  85. package/esm2022/lib/forms-ui/directives/contenteditable.directive.mjs +129 -0
  86. package/esm2022/lib/forms-ui/directives/form-error.directive.mjs +109 -0
  87. package/{esm2020 → esm2022}/lib/forms-ui/directives/form-submit.directive.mjs +4 -4
  88. package/{esm2020 → esm2022}/lib/forms-ui/directives/keyboard-action-source.directive.mjs +4 -4
  89. package/{esm2020 → esm2022}/lib/forms-ui/directives/mark-invalid.directive.mjs +4 -4
  90. package/{esm2020 → esm2022}/lib/forms-ui/directives/select-dropdown.directive.mjs +4 -4
  91. package/{esm2020 → esm2022}/lib/forms-ui/directives/selectable-item.directive.mjs +7 -7
  92. package/{esm2020 → esm2022}/lib/forms-ui/directives/selected-option.directive.mjs +4 -4
  93. package/{esm2020 → esm2022}/lib/forms-ui/forms-ui.module.mjs +102 -102
  94. package/{esm2020 → esm2022}/lib/forms-ui/models/base-select.directive.mjs +4 -4
  95. package/{esm2020 → esm2022}/lib/forms-ui/pipes/filter-selection.pipe.mjs +4 -4
  96. package/{esm2020 → esm2022}/lib/forms-ui/pipes/filter-term.pipe.mjs +4 -4
  97. package/{esm2020 → esm2022}/lib/forms-ui/pipes/format-number.pipe.mjs +4 -4
  98. package/esm2022/lib/modal-ui/components/modal/modal.component.mjs +213 -0
  99. package/{esm2020 → esm2022}/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +4 -4
  100. package/{esm2020 → esm2022}/lib/modal-ui/components/modal-header/modal-header.component.mjs +4 -4
  101. package/{esm2020 → esm2022}/lib/modal-ui/directives/modal-content.directive.mjs +4 -4
  102. package/{esm2020 → esm2022}/lib/modal-ui/modal.module.mjs +5 -5
  103. package/{esm2020 → esm2022}/lib/popover-ui/components/popover/popover.component.mjs +4 -4
  104. package/{esm2020 → esm2022}/lib/popover-ui/directives/popover-click.directive.mjs +4 -4
  105. package/{esm2020 → esm2022}/lib/popover-ui/directives/popover-content.directive.mjs +4 -4
  106. package/esm2022/lib/popover-ui/directives/popover-hover.directive.mjs +87 -0
  107. package/{esm2020 → esm2022}/lib/popover-ui/popover-ui.module.mjs +5 -5
  108. package/{esm2020 → esm2022}/lib/tab-ui/components/tab/tab.component.mjs +14 -14
  109. package/esm2022/lib/tab-ui/components/tab-group/tab-group.component.mjs +71 -0
  110. package/{esm2020 → esm2022}/lib/tab-ui/tab-ui.module.mjs +5 -5
  111. package/{fesm2020 → fesm2022}/leanix-components.mjs +767 -768
  112. package/fesm2022/leanix-components.mjs.map +1 -0
  113. package/lib/core-ui/components/badge/badge.component.d.ts +1 -1
  114. package/lib/core-ui/components/button/button.component.d.ts +1 -1
  115. package/lib/core-ui/components/button-group/button-group.component.d.ts +1 -1
  116. package/lib/core-ui/components/card/card.component.d.ts +1 -1
  117. package/lib/core-ui/components/collapsible/collapsible.component.d.ts +1 -1
  118. package/lib/core-ui/components/colored-label/colored-label.component.d.ts +1 -1
  119. package/lib/core-ui/components/ellipsis/ellipsis.component.d.ts +1 -1
  120. package/lib/core-ui/components/file-download-button/file-download-button.component.d.ts +1 -1
  121. package/lib/core-ui/components/icon-scale/icon-scale.component.d.ts +1 -1
  122. package/lib/core-ui/components/spinner/spinner.component.d.ts +1 -1
  123. package/lib/core-ui/components/table/table-header/table-header.component.d.ts +1 -1
  124. package/lib/core-ui/components/table/table.component.d.ts +1 -1
  125. package/lib/core-ui/directives/autoclose.directive.d.ts +1 -1
  126. package/lib/core-ui/directives/autofocus.directive.d.ts +1 -1
  127. package/lib/core-ui/directives/html.directive.d.ts +1 -1
  128. package/lib/core-ui/pipes/sort.pipe.d.ts +1 -1
  129. package/lib/core-ui/services/resize-observer.service.d.ts +1 -1
  130. package/lib/core-ui/tooltip/tooltip.component.d.ts +1 -1
  131. package/lib/core-ui/tooltip/tooltip.directive.d.ts +1 -1
  132. package/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.d.ts +1 -1
  133. package/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.d.ts +1 -1
  134. package/lib/forms-ui/components/breadcrumb/breadcrumb.component.d.ts +2 -2
  135. package/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.d.ts +1 -1
  136. package/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.d.ts +1 -1
  137. package/lib/forms-ui/components/copy-button/copy-button.component.d.ts +1 -1
  138. package/lib/forms-ui/components/currency/currency-input.component.d.ts +4 -4
  139. package/lib/forms-ui/components/currency/currency-symbol.component.d.ts +1 -1
  140. package/lib/forms-ui/components/date-input/date-input.component.d.ts +2 -2
  141. package/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.d.ts +1 -1
  142. package/lib/forms-ui/components/date-picker-ui/datepicker.component.d.ts +1 -1
  143. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.d.ts +1 -1
  144. package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.d.ts +1 -1
  145. package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.d.ts +1 -1
  146. package/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.d.ts +1 -1
  147. package/lib/forms-ui/components/error-message/error-message.component.d.ts +1 -1
  148. package/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.d.ts +1 -1
  149. package/lib/forms-ui/components/form-error/form-error.component.d.ts +1 -1
  150. package/lib/forms-ui/components/icon/icon.component.d.ts +2 -2
  151. package/lib/forms-ui/components/input/input.component.d.ts +1 -1
  152. package/lib/forms-ui/components/keyboard-select.directive.d.ts +1 -1
  153. package/lib/forms-ui/components/multi-select/multi-select.component.d.ts +3 -3
  154. package/lib/forms-ui/components/option/option.component.d.ts +1 -1
  155. package/lib/forms-ui/components/option-group/option-group.component.d.ts +1 -1
  156. package/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.d.ts +3 -3
  157. package/lib/forms-ui/components/options-dropdown/options-dropdown.component.d.ts +1 -1
  158. package/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.d.ts +1 -1
  159. package/lib/forms-ui/components/picker/picker.component.d.ts +1 -1
  160. package/lib/forms-ui/components/picker-option/picker-option.component.d.ts +1 -1
  161. package/lib/forms-ui/components/pill-item/pill-item.component.d.ts +1 -1
  162. package/lib/forms-ui/components/pill-list/pill-list.component.d.ts +1 -1
  163. package/lib/forms-ui/components/select-list/select-list.component.d.ts +1 -1
  164. package/lib/forms-ui/components/single-select/single-select.component.d.ts +2 -2
  165. package/lib/forms-ui/components/slider-toggle/slider-toggle.component.d.ts +1 -1
  166. package/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.d.ts +1 -1
  167. package/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.d.ts +1 -1
  168. package/lib/forms-ui/directives/contenteditable.directive.d.ts +2 -2
  169. package/lib/forms-ui/directives/form-error.directive.d.ts +2 -2
  170. package/lib/forms-ui/directives/mark-invalid.directive.d.ts +1 -1
  171. package/lib/forms-ui/directives/selectable-item.directive.d.ts +1 -1
  172. package/lib/forms-ui/models/base-select.directive.d.ts +1 -1
  173. package/lib/forms-ui/models/single-select-padding.interface.d.ts +1 -1
  174. package/lib/forms-ui/models/sorting.interface.d.ts +1 -1
  175. package/lib/modal-ui/components/modal/modal.component.d.ts +1 -1
  176. package/lib/modal-ui/components/modal-footer/modal-footer.component.d.ts +1 -1
  177. package/lib/modal-ui/components/modal-header/modal-header.component.d.ts +1 -1
  178. package/lib/popover-ui/components/popover/popover.component.d.ts +1 -1
  179. package/lib/popover-ui/directives/popover-click.directive.d.ts +1 -1
  180. package/lib/popover-ui/directives/popover-hover.directive.d.ts +1 -1
  181. package/lib/tab-ui/components/tab/tab.component.d.ts +1 -1
  182. package/lib/tab-ui/components/tab-group/tab-group.component.d.ts +1 -1
  183. package/package.json +13 -19
  184. package/esm2020/lib/core-ui/components/ellipsis/ellipsis.component.mjs +0 -139
  185. package/esm2020/lib/core-ui/linkify/linkify.pipe.mjs +0 -144
  186. package/esm2020/lib/core-ui/tooltip/tooltip.directive.mjs +0 -105
  187. package/esm2020/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +0 -120
  188. package/esm2020/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +0 -216
  189. package/esm2020/lib/forms-ui/components/currency/currency-input.component.mjs +0 -145
  190. package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +0 -28
  191. package/esm2020/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +0 -205
  192. package/esm2020/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +0 -49
  193. package/esm2020/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +0 -134
  194. package/esm2020/lib/forms-ui/components/multi-select/multi-select.component.mjs +0 -255
  195. package/esm2020/lib/forms-ui/components/option/option.component.mjs +0 -84
  196. package/esm2020/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +0 -185
  197. package/esm2020/lib/forms-ui/components/picker-option/picker-option.component.mjs +0 -118
  198. package/esm2020/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +0 -100
  199. package/esm2020/lib/forms-ui/components/single-select/single-select.component.mjs +0 -279
  200. package/esm2020/lib/forms-ui/directives/contenteditable.directive.mjs +0 -129
  201. package/esm2020/lib/forms-ui/directives/form-error.directive.mjs +0 -109
  202. package/esm2020/lib/modal-ui/components/modal/modal.component.mjs +0 -213
  203. package/esm2020/lib/popover-ui/directives/popover-hover.directive.mjs +0 -87
  204. package/esm2020/lib/tab-ui/components/tab-group/tab-group.component.mjs +0 -71
  205. package/fesm2015/leanix-components.mjs +0 -8448
  206. package/fesm2015/leanix-components.mjs.map +0 -1
  207. package/fesm2020/leanix-components.mjs.map +0 -1
  208. package/src/lib/forms-ui/components/date-picker-ui/README.md +0 -8
  209. /package/{esm2020 → esm2022}/index.mjs +0 -0
  210. /package/{esm2020 → esm2022}/leanix-components.mjs +0 -0
  211. /package/{esm2020 → esm2022}/lib/core-ui/annotations/required.mjs +0 -0
  212. /package/{esm2020 → esm2022}/lib/core-ui/core-ui.constants.mjs +0 -0
  213. /package/{esm2020 → esm2022}/lib/core-ui/functions/core-css.helpers.mjs +0 -0
  214. /package/{esm2020 → esm2022}/lib/core-ui/tooltip/to-cdk-position.function.mjs +0 -0
  215. /package/{esm2020 → esm2022}/lib/core-ui/tooltip/tooltip-position.interface.mjs +0 -0
  216. /package/{esm2020 → esm2022}/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +0 -0
  217. /package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/date-formatter.mjs +0 -0
  218. /package/{esm2020 → esm2022}/lib/forms-ui/components/date-picker-ui/isBs3.mjs +0 -0
  219. /package/{esm2020 → esm2022}/lib/forms-ui/components/drag-and-drop-list/constants.mjs +0 -0
  220. /package/{esm2020 → esm2022}/lib/forms-ui/helpers/key-codes.constants.mjs +0 -0
  221. /package/{esm2020 → esm2022}/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +0 -0
  222. /package/{esm2020 → esm2022}/lib/forms-ui/models/dropdown-item.interface.mjs +0 -0
  223. /package/{esm2020 → esm2022}/lib/forms-ui/models/single-select-padding.interface.mjs +0 -0
  224. /package/{esm2020 → esm2022}/lib/forms-ui/models/sorting.interface.mjs +0 -0
  225. /package/{esm2020 → esm2022}/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +0 -0
  226. /package/{esm2020 → esm2022}/lib/forms-ui/validators/string-not-in-array.validator.mjs +0 -0
  227. /package/{esm2020 → esm2022}/lib/modal-ui/modal.constants.mjs +0 -0
  228. /package/{esm2020 → esm2022}/lib/shared/date-helpers.mjs +0 -0
  229. /package/{esm2020 → esm2022}/lib/shared/html-helpers.function.mjs +0 -0
  230. /package/{esm2020 → esm2022}/lib/shared/misc-helpers.mjs +0 -0
  231. /package/{esm2020 → esm2022}/lib/shared/observe.mjs +0 -0
@@ -28,5 +28,5 @@ export declare class PillListComponent extends KeyboardSelectDirective implement
28
28
  removePillViaKeyboard(pill: any): void;
29
29
  trackByProp(prop?: string): (index: number, pill: any) => any;
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<PillListComponent, never>;
31
- static ɵcmp: i0.ɵɵComponentDeclaration<PillListComponent, "lx-pill-list", never, { "pills": "pills"; "labelKey": "labelKey"; "itemKey": "itemKey"; "disabled": "disabled"; }, { "remove": "remove"; }, ["pillTemplate", "contentItems"], never, false, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<PillListComponent, "lx-pill-list", never, { "pills": { "alias": "pills"; "required": false; }; "labelKey": { "alias": "labelKey"; "required": false; }; "itemKey": { "alias": "itemKey"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "remove": "remove"; }, ["pillTemplate", "contentItems"], never, false, never>;
32
32
  }
@@ -25,5 +25,5 @@ export declare class SelectListComponent extends BaseSelectDirective implements
25
25
  searchKeyChanged(event: any): void;
26
26
  private determineHighlightIndex;
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectListComponent, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<SelectListComponent, "lx-select-list", never, { "searchPlaceholder": "searchPlaceholder"; "options": "options"; "selection": "selection"; }, { "selectionChange": "selectionChange"; "onChooseItem": "onChooseItem"; }, ["explicitDropdown", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectListComponent, "lx-select-list", never, { "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "options": { "alias": "options"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; }, { "selectionChange": "selectionChange"; "onChooseItem": "onChooseItem"; }, ["explicitDropdown", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
29
29
  }
@@ -5,7 +5,7 @@ import { BaseSelectDirective } from '../../models/base-select.directive';
5
5
  import { SingleSelectPadding } from '../../models/single-select-padding.interface';
6
6
  import { KeyboardSelectAction } from '../keyboard-select.directive';
7
7
  import * as i0 from "@angular/core";
8
- export declare type SingleSelectSize = 'default' | 'small' | 'select2' | 'large';
8
+ export type SingleSelectSize = 'default' | 'small' | 'select2' | 'large';
9
9
  export declare class SingleSelectComponent extends BaseSelectDirective implements OnDestroy, AfterViewInit, ControlValueAccessor {
10
10
  private cd;
11
11
  static calculateNewCursorPostionOnKeyboardNavigation(cursorPosition: number, keyCode: number): number;
@@ -48,5 +48,5 @@ export declare class SingleSelectComponent extends BaseSelectDirective implement
48
48
  focusedViaTab(): void;
49
49
  private determineHighlightIndex;
50
50
  static ɵfac: i0.ɵɵFactoryDeclaration<SingleSelectComponent, never>;
51
- static ɵcmp: i0.ɵɵComponentDeclaration<SingleSelectComponent, "lx-single-select", never, { "selection": "selection"; "selectionBackground": "selectionBackground"; "size": "size"; "dropdownWidthScale": "dropdownWidthScale"; "padding": "padding"; "allowClear": "allowClear"; "tabIndex": "tabIndex"; "markInvalid": "markInvalid"; }, { "selectionChange": "selectionChange"; "blur": "blur"; }, ["explicitDropdown", "explicitSelectedOption", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
51
+ static ɵcmp: i0.ɵɵComponentDeclaration<SingleSelectComponent, "lx-single-select", never, { "selection": { "alias": "selection"; "required": false; }; "selectionBackground": { "alias": "selectionBackground"; "required": false; }; "size": { "alias": "size"; "required": false; }; "dropdownWidthScale": { "alias": "dropdownWidthScale"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "allowClear": { "alias": "allowClear"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; "markInvalid": { "alias": "markInvalid"; "required": false; }; }, { "selectionChange": "selectionChange"; "blur": "blur"; }, ["explicitDropdown", "explicitSelectedOption", "dropdownComponent"], [".selectedOption", ".dropdownComponent"], false, never>;
52
52
  }
@@ -12,5 +12,5 @@ export declare class SliderToggleComponent {
12
12
  get id(): string | null;
13
13
  focus(checkbox: HTMLInputElement): void;
14
14
  static ɵfac: i0.ɵɵFactoryDeclaration<SliderToggleComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<SliderToggleComponent, "lx-slider-toggle", never, { "value": "value"; "size": "size"; "disabled": "disabled"; "label": "label"; "labelInFront": "labelInFront"; "elementId": "elementId"; }, { "toggle": "toggle"; }, never, never, false, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<SliderToggleComponent, "lx-slider-toggle", never, { "value": { "alias": "value"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "label": { "alias": "label"; "required": false; }; "labelInFront": { "alias": "labelInFront"; "required": false; }; "elementId": { "alias": "elementId"; "required": false; }; }, { "toggle": "toggle"; }, never, never, false, never>;
16
16
  }
@@ -19,5 +19,5 @@ export declare class SortingDropdownComponent implements OnInit {
19
19
  applySortingDirection(sortDirection: SortingOrder): void;
20
20
  getSortLabel(key: string | undefined): string;
21
21
  static ɵfac: i0.ɵɵFactoryDeclaration<SortingDropdownComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownComponent, "lx-sorting-dropdown", never, { "currentSorting": "currentSorting"; "sortingOptions": "sortingOptions"; "showDirectionOptions": "showDirectionOptions"; }, { "apply": "apply"; }, never, never, false, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownComponent, "lx-sorting-dropdown", never, { "currentSorting": { "alias": "currentSorting"; "required": false; }; "sortingOptions": { "alias": "sortingOptions"; "required": false; }; "showDirectionOptions": { "alias": "showDirectionOptions"; "required": false; }; }, { "apply": "apply"; }, never, never, false, never>;
23
23
  }
@@ -4,5 +4,5 @@ export declare class SortingDropdownTriggerComponent {
4
4
  currentSortingLabel: string;
5
5
  disabled: boolean;
6
6
  static ɵfac: i0.ɵɵFactoryDeclaration<SortingDropdownTriggerComponent, never>;
7
- static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownTriggerComponent, "lx-sorting-dropdown-trigger", never, { "label": "label"; "currentSortingLabel": "currentSortingLabel"; "disabled": "disabled"; }, {}, never, never, false, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<SortingDropdownTriggerComponent, "lx-sorting-dropdown-trigger", never, { "label": { "alias": "label"; "required": false; }; "currentSortingLabel": { "alias": "currentSortingLabel"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, false, never>;
8
8
  }
@@ -18,11 +18,11 @@ export declare class ContenteditableDirective implements OnChanges {
18
18
  * @param event {ClipboardEvent}
19
19
  */
20
20
  onPaste(event: any): void;
21
- onDrop(event: MouseEvent): false | undefined;
21
+ onDrop(event: MouseEvent): boolean;
22
22
  private cleanContent;
23
23
  private refreshView;
24
24
  private getProperty;
25
25
  private sanitize;
26
26
  static ɵfac: i0.ɵɵFactoryDeclaration<ContenteditableDirective, never>;
27
- static ɵdir: i0.ɵɵDirectiveDeclaration<ContenteditableDirective, "[lxContenteditableModel]", never, { "lxContenteditableModel": "lxContenteditableModel"; "lxContenteditableHtml": "lxContenteditableHtml"; "lxContenteditableHtmlPaste": "lxContenteditableHtmlPaste"; }, { "lxContenteditableModelChange": "lxContenteditableModelChange"; }, never, never, false, never>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ContenteditableDirective, "[lxContenteditableModel]", never, { "lxContenteditableModel": { "alias": "lxContenteditableModel"; "required": false; }; "lxContenteditableHtml": { "alias": "lxContenteditableHtml"; "required": false; }; "lxContenteditableHtmlPaste": { "alias": "lxContenteditableHtmlPaste"; "required": false; }; }, { "lxContenteditableModelChange": "lxContenteditableModelChange"; }, never, never, false, never>;
28
28
  }
@@ -2,7 +2,7 @@ import { ComponentFactoryResolver, InjectionToken, OnDestroy, OnInit, ViewContai
2
2
  import { AbstractControl, NgControl } from '@angular/forms';
3
3
  import { FormSubmitDirective } from './form-submit.directive';
4
4
  import * as i0 from "@angular/core";
5
- export declare type FormControlErrorDisplayStrategy = (obj: {
5
+ export type FormControlErrorDisplayStrategy = (obj: {
6
6
  control: AbstractControl;
7
7
  submitted?: boolean;
8
8
  }) => boolean;
@@ -36,5 +36,5 @@ export declare class FormErrorDirective implements OnInit, OnDestroy {
36
36
  private setError;
37
37
  ngOnDestroy(): void;
38
38
  static ɵfac: i0.ɵɵFactoryDeclaration<FormErrorDirective, [null, null, { optional: true; self: true; }, { optional: true; host: true; }, { optional: true; }, { optional: true; }]>;
39
- static ɵdir: i0.ɵɵDirectiveDeclaration<FormErrorDirective, "[lxFormError]", never, { "ctrl": "lxFormError"; "controlName": "controlName"; }, {}, never, never, false, never>;
39
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FormErrorDirective, "[lxFormError]", never, { "ctrl": { "alias": "lxFormError"; "required": false; }; "controlName": { "alias": "controlName"; "required": false; }; }, {}, never, never, false, never>;
40
40
  }
@@ -11,5 +11,5 @@ export declare class MarkInvalidDirective implements OnInit, OnDestroy {
11
11
  ngOnInit(): void;
12
12
  ngOnDestroy(): void;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<MarkInvalidDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<MarkInvalidDirective, "[lxMarkInvalid]", never, { "lxMarkInvalid": "lxMarkInvalid"; }, {}, never, never, false, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<MarkInvalidDirective, "[lxMarkInvalid]", never, { "lxMarkInvalid": { "alias": "lxMarkInvalid"; "required": false; }; }, {}, never, never, false, never>;
15
15
  }
@@ -11,5 +11,5 @@ export declare class SelectableItemDirective implements OnDestroy, DropdownItem
11
11
  ngOnDestroy(): void;
12
12
  scrollToItem(): void;
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectableItemDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<SelectableItemDirective, "[lxSelectableItem]", never, { "scrollInContainer": "scrollInContainer"; "lxSelectableItem": "lxSelectableItem"; }, { "select": "select"; }, never, never, false, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SelectableItemDirective, "[lxSelectableItem]", never, { "scrollInContainer": { "alias": "scrollInContainer"; "required": false; }; "lxSelectableItem": { "alias": "lxSelectableItem"; "required": false; }; }, { "select": "select"; }, never, never, false, never>;
15
15
  }
@@ -52,5 +52,5 @@ export declare abstract class BaseSelectDirective implements AfterViewInit, OnCh
52
52
  protected selectFirstOption(): void;
53
53
  private notifyDropdownBase;
54
54
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseSelectDirective, never>;
55
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseSelectDirective, never, never, { "placeholder": "placeholder"; "disabled": "disabled"; "focusOnInit": "focusOnInit"; "dropdownMaxHeight": "dropdownMaxHeight"; "allowQuery": "allowQuery"; }, { "query": "query"; "close": "close"; "open": "open"; }, ["dropdownBase"], never, false, never>;
55
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseSelectDirective, never, never, { "placeholder": { "alias": "placeholder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "focusOnInit": { "alias": "focusOnInit"; "required": false; }; "dropdownMaxHeight": { "alias": "dropdownMaxHeight"; "required": false; }; "allowQuery": { "alias": "allowQuery"; "required": false; }; }, { "query": "query"; "close": "close"; "open": "open"; }, ["dropdownBase"], never, false, never>;
56
56
  }
@@ -1 +1 @@
1
- export declare type SingleSelectPadding = 'default' | 'narrow';
1
+ export type SingleSelectPadding = 'default' | 'narrow';
@@ -1,4 +1,4 @@
1
- export declare type SortingOrder = 'asc' | 'desc';
1
+ export type SortingOrder = 'asc' | 'desc';
2
2
  export declare class Sorting {
3
3
  key: string;
4
4
  order: SortingOrder;
@@ -59,5 +59,5 @@ export declare class ModalComponent implements OnChanges, OnInit, OnDestroy, Aft
59
59
  closeModal(closeLocation: ModalCloseClickLocation | boolean): Promise<void>;
60
60
  private trapFocusInModal;
61
61
  static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, [null, null, { optional: true; }, null]>;
62
- static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "lx-modal", never, { "open": "open"; "showCloseButton": "showCloseButton"; "showBackButton": "showBackButton"; "verticalScroll": "verticalScroll"; "size": "size"; "minWidth": "minWidth"; "isFocusTrap": "isFocusTrap"; "canModalBeClosed": "canModalBeClosed"; }, { "close": "close"; "back": "back"; }, ["header", "footer", "explicitContent"], ["lx-modal-header", "lx-modal-footer", "*"], false, never>;
62
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "lx-modal", never, { "open": { "alias": "open"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "showBackButton": { "alias": "showBackButton"; "required": false; }; "verticalScroll": { "alias": "verticalScroll"; "required": false; }; "size": { "alias": "size"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "isFocusTrap": { "alias": "isFocusTrap"; "required": false; }; "canModalBeClosed": { "alias": "canModalBeClosed"; "required": false; }; }, { "close": "close"; "back": "back"; }, ["header", "footer", "explicitContent"], ["lx-modal-header", "lx-modal-footer", "*"], false, never>;
63
63
  }
@@ -2,5 +2,5 @@ import * as i0 from "@angular/core";
2
2
  export declare class ModalFooterComponent {
3
3
  border: boolean;
4
4
  static ɵfac: i0.ɵɵFactoryDeclaration<ModalFooterComponent, never>;
5
- static ɵcmp: i0.ɵɵComponentDeclaration<ModalFooterComponent, "lx-modal-footer", never, { "border": "border"; }, {}, never, ["*"], false, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModalFooterComponent, "lx-modal-footer", never, { "border": { "alias": "border"; "required": false; }; }, {}, never, ["*"], false, never>;
6
6
  }
@@ -3,5 +3,5 @@ export declare class ModalHeaderComponent {
3
3
  title: string;
4
4
  bottomBorder: boolean;
5
5
  static ɵfac: i0.ɵɵFactoryDeclaration<ModalHeaderComponent, never>;
6
- static ɵcmp: i0.ɵɵComponentDeclaration<ModalHeaderComponent, "lx-modal-header", never, { "title": "title"; "bottomBorder": "bottomBorder"; }, {}, never, ["*"], false, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModalHeaderComponent, "lx-modal-header", never, { "title": { "alias": "title"; "required": false; }; "bottomBorder": { "alias": "bottomBorder"; "required": false; }; }, {}, never, ["*"], false, never>;
7
7
  }
@@ -93,5 +93,5 @@ export declare class PopoverComponent implements OnChanges {
93
93
  private getMarginClassesForClassList;
94
94
  private getDefaultMarginClasses;
95
95
  static ɵfac: i0.ɵɵFactoryDeclaration<PopoverComponent, never>;
96
- static ɵcmp: i0.ɵɵComponentDeclaration<PopoverComponent, "lx-popover", never, { "trigger": "trigger"; "horizontalAlign": "horizontalAlign"; "verticalAlign": "verticalAlign"; "noMargin": "noMargin"; "allowOverflow": "allowOverflow"; "autoFocus": "autoFocus"; "restoreFocus": "restoreFocus"; "adaptMarginsForViewportAlignChange": "adaptMarginsForViewportAlignChange"; }, { "opened": "opened"; "closed": "closed"; }, ["explicitContent"], ["*"], false, never>;
96
+ static ɵcmp: i0.ɵɵComponentDeclaration<PopoverComponent, "lx-popover", never, { "trigger": { "alias": "trigger"; "required": false; }; "horizontalAlign": { "alias": "horizontalAlign"; "required": false; }; "verticalAlign": { "alias": "verticalAlign"; "required": false; }; "noMargin": { "alias": "noMargin"; "required": false; }; "allowOverflow": { "alias": "allowOverflow"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "restoreFocus": { "alias": "restoreFocus"; "required": false; }; "adaptMarginsForViewportAlignChange": { "alias": "adaptMarginsForViewportAlignChange"; "required": false; }; }, { "opened": "opened"; "closed": "closed"; }, ["explicitContent"], ["*"], false, never>;
97
97
  }
@@ -19,5 +19,5 @@ export declare class PopoverClickDirective implements PopoverTriggerDirective, A
19
19
  showPopover(): void;
20
20
  closePopover(): void;
21
21
  static ɵfac: i0.ɵɵFactoryDeclaration<PopoverClickDirective, never>;
22
- static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverClickDirective, "[lxPopoverClick]", ["clickAnchor"], { "lxPopoverPinned": "lxPopoverPinned"; }, {}, never, never, false, never>;
22
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverClickDirective, "[lxPopoverClick]", ["clickAnchor"], { "lxPopoverPinned": { "alias": "lxPopoverPinned"; "required": false; }; }, {}, never, never, false, never>;
23
23
  }
@@ -34,5 +34,5 @@ export declare class PopoverHoverDirective implements AfterViewInit, OnDestroy {
34
34
  showPopover(skipDelay?: boolean): void;
35
35
  closePopover(skipDelay?: boolean): void;
36
36
  static ɵfac: i0.ɵɵFactoryDeclaration<PopoverHoverDirective, never>;
37
- static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverHoverDirective, "[lxPopoverHover]", ["hoverAnchor"], { "lxPopoverHover": "lxPopoverHover"; "skipCloseDelay": "skipCloseDelay"; }, {}, never, never, false, never>;
37
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverHoverDirective, "[lxPopoverHover]", ["hoverAnchor"], { "lxPopoverHover": { "alias": "lxPopoverHover"; "required": false; }; "skipCloseDelay": { "alias": "skipCloseDelay"; "required": false; }; }, {}, never, never, false, never>;
38
38
  }
@@ -30,5 +30,5 @@ export declare class TabComponent {
30
30
  private _isActive;
31
31
  constructor(cd: ChangeDetectorRef);
32
32
  static ɵfac: i0.ɵɵFactoryDeclaration<TabComponent, never>;
33
- static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "lx-tab", never, { "icon": "icon"; "label": "label"; "title": "title"; "tabLink": "tabLink"; "counter": "counter"; "routerLinkActiveOptions": "routerLinkActiveOptions"; "counterBadgeSize": "counterBadgeSize"; "noMargin": "noMargin"; "noLeftMarginForFirstTab": "noLeftMarginForFirstTab"; "background": "background"; "disabled": "disabled"; }, { "switch": "switch"; }, never, ["*"], false, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabComponent, "lx-tab", never, { "icon": { "alias": "icon"; "required": false; }; "label": { "alias": "label"; "required": false; }; "title": { "alias": "title"; "required": false; }; "tabLink": { "alias": "tabLink"; "required": false; }; "counter": { "alias": "counter"; "required": false; }; "routerLinkActiveOptions": { "alias": "routerLinkActiveOptions"; "required": false; }; "counterBadgeSize": { "alias": "counterBadgeSize"; "required": false; }; "noMargin": { "alias": "noMargin"; "required": false; }; "noLeftMarginForFirstTab": { "alias": "noLeftMarginForFirstTab"; "required": false; }; "background": { "alias": "background"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "switch": "switch"; }, never, ["*"], false, never>;
34
34
  }
@@ -17,5 +17,5 @@ export declare class TabGroupComponent implements OnChanges, AfterContentInit, O
17
17
  ngOnDestroy(): void;
18
18
  switchTo(tab: TabComponent): void;
19
19
  static ɵfac: i0.ɵɵFactoryDeclaration<TabGroupComponent, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<TabGroupComponent, "lx-tab-group", never, { "isCentered": "isCentered"; "selectedIndex": "selectedIndex"; }, { "indexChange": "indexChange"; }, ["tabsQueryList"], ["*"], false, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabGroupComponent, "lx-tab-group", never, { "isCentered": { "alias": "isCentered"; "required": false; }; "selectedIndex": { "alias": "selectedIndex"; "required": false; }; }, { "indexChange": "indexChange"; }, ["tabsQueryList"], ["*"], false, never>;
21
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leanix/components",
3
- "version": "0.4.21",
3
+ "version": "0.4.23",
4
4
  "license": "Apache-2.0",
5
5
  "author": "LeanIX GmbH",
6
6
  "repository": {
@@ -18,26 +18,22 @@
18
18
  "tslib": "^2.3.0"
19
19
  },
20
20
  "peerDependencies": {
21
- "@angular/animations": "^15.1.1",
22
- "@angular/cdk": "^15.1.1",
23
- "@angular/common": "^15.1.1",
24
- "@angular/core": "^15.1.1",
25
- "@angular/forms": "^15.1.1",
26
- "@angular/platform-browser": "^15.1.1",
27
- "@angular/router": "^15.1.1",
21
+ "@angular/animations": "^16.1.5",
22
+ "@angular/cdk": "^16.1.5",
23
+ "@angular/common": "^16.1.5",
24
+ "@angular/core": "^16.1.5",
25
+ "@angular/forms": "^16.1.5",
26
+ "@angular/platform-browser": "^16.1.5",
27
+ "@angular/router": "^16.1.5",
28
28
  "@ngx-translate/core": "^11.0.1",
29
29
  "@types/marked": "4.0.2",
30
30
  "dompurify": "2.3.10",
31
31
  "rxjs": "^6.5.5",
32
32
  "lodash": "4.17.21",
33
33
  "lodash-es": "4.17.21",
34
- "@angular/platform-browser-dynamic": "15.1.1"
34
+ "@angular/platform-browser-dynamic": "16.1.5"
35
35
  },
36
- "module": "fesm2015/leanix-components.mjs",
37
- "es2020": "fesm2020/leanix-components.mjs",
38
- "esm2020": "esm2020/leanix-components.mjs",
39
- "fesm2020": "fesm2020/leanix-components.mjs",
40
- "fesm2015": "fesm2015/leanix-components.mjs",
36
+ "module": "fesm2022/leanix-components.mjs",
41
37
  "typings": "index.d.ts",
42
38
  "exports": {
43
39
  "./package.json": {
@@ -45,11 +41,9 @@
45
41
  },
46
42
  ".": {
47
43
  "types": "./index.d.ts",
48
- "esm2020": "./esm2020/leanix-components.mjs",
49
- "es2020": "./fesm2020/leanix-components.mjs",
50
- "es2015": "./fesm2015/leanix-components.mjs",
51
- "node": "./fesm2015/leanix-components.mjs",
52
- "default": "./fesm2020/leanix-components.mjs"
44
+ "esm2022": "./esm2022/leanix-components.mjs",
45
+ "esm": "./esm2022/leanix-components.mjs",
46
+ "default": "./fesm2022/leanix-components.mjs"
53
47
  }
54
48
  },
55
49
  "sideEffects": false
@@ -1,139 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { ChangeDetectionStrategy, Component, ElementRef, Inject, InjectionToken, Input, ViewChild } from '@angular/core';
3
- import { escape } from 'lodash/fp';
4
- import { BehaviorSubject, combineLatest, concat, merge, Subject } from 'rxjs';
5
- import { debounceTime, distinctUntilChanged, filter, map, pairwise, skip, startWith, switchMap, take, takeUntil, withLatestFrom } from 'rxjs/operators';
6
- import { Observe } from '../../../shared/observe';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../services/resize-observer.service";
9
- import * as i2 from "@ngx-translate/core";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "../button/button.component";
12
- export const LX_ELLIPSIS_DEBOUNCE_ON_RESIZE = new InjectionToken('LX_ELLIPSIS_DEBOUNCE_ON_RESIZE', {
13
- providedIn: 'root',
14
- factory: () => EllipsisComponent.DEFAULT_RESIZE_DEBOUNCE_MS
15
- });
16
- /**
17
- * You can set a custom max-width CSS property on your lx-ellipsis host element
18
- * if you want its content to never exceed a specific width,
19
- * e.g. <lx-ellipsis style="max-width: 300px" content="Hello World[..]"></lx-ellipsis>.
20
- */
21
- export class EllipsisComponent {
22
- constructor(debounceMsAfterResize, cdRef, hostEl, resizeObserverService, translateService) {
23
- this.debounceMsAfterResize = debounceMsAfterResize;
24
- this.cdRef = cdRef;
25
- this.hostEl = hostEl;
26
- this.resizeObserverService = resizeObserverService;
27
- this.translateService = translateService;
28
- this.content = '';
29
- /**
30
- * Only set this to false if the content is not a user provided string
31
- * or if you sanitize the provided content yourself.
32
- */
33
- this.escapeHtmlInContent = true;
34
- this.isShowingMore$ = new BehaviorSubject(false);
35
- this.destroyed$ = new Subject();
36
- }
37
- ngOnInit() {
38
- this.sanitizedContent$ = this.content$.pipe(map((content) => {
39
- if (this.escapeHtmlInContent && typeof content === 'string') {
40
- return escape(content);
41
- }
42
- return content;
43
- }));
44
- this.showMoreButtonLabel$ = this.isShowingMore$.pipe(switchMap((isShowingMore) => {
45
- const translationKey = isShowingMore ? 'common.showLess' : 'common.showMore';
46
- return this.translateService.get(translationKey);
47
- }));
48
- const newWidthOnResize$ = new Subject();
49
- const newHeightOnResize$ = new Subject();
50
- this.resizeObserverService.observe(this.hostEl.nativeElement, (resizedElement) => {
51
- newWidthOnResize$.next(resizedElement.contentRect.width);
52
- newHeightOnResize$.next(resizedElement.contentRect.height);
53
- });
54
- const containerWidthChangedSignificantlyAfterResize$ = newWidthOnResize$.pipe(startWith(0), pairwise(), filter(([previousWidth, newWidth]) => Math.abs(newWidth - previousWidth) > 1), map(([, newWidth]) => newWidth));
55
- const userTriggeredTriggeredShowLess$ = this.isShowingMore$.pipe(filter((isShowingMore) => !isShowingMore));
56
- const reevaluateIfContentIsOverflowing$ = combineLatest([
57
- this.contentSpanEl$,
58
- userTriggeredTriggeredShowLess$,
59
- containerWidthChangedSignificantlyAfterResize$
60
- ]);
61
- const isContentOverflowing$ = merge(concat(reevaluateIfContentIsOverflowing$.pipe(take(1)), // debounce all but the first output
62
- reevaluateIfContentIsOverflowing$.pipe(debounceTime(this.debounceMsAfterResize))), this.content$.pipe(skip(1)) // immediately reevaluate on subsequent content changes
63
- ).pipe(withLatestFrom(this.contentSpanEl$), map(([, contentSpanRef]) => this.isContentOverflowing(contentSpanRef)));
64
- const userTriggeredTriggeredShowMore$ = this.isShowingMore$.pipe(filter((isShowingMore) => isShowingMore));
65
- const buttonHeight$ = this.showMoreButtonEl$.pipe(filter((showMoreButtonEl) => !!showMoreButtonEl), map((showMoreButtonEl) => showMoreButtonEl.nativeElement.offsetHeight), distinctUntilChanged());
66
- const userIncreasedBrowserWindowSizeToThePointOfNoTruncationNecessary$ = combineLatest([
67
- buttonHeight$,
68
- newHeightOnResize$.pipe(distinctUntilChanged())
69
- ]).pipe(withLatestFrom(this.isShowingMore$), filter(([, isShowingMore]) => isShowingMore), map(([[buttonHeight, newHeight]]) => {
70
- const heightOfOneLine = buttonHeight;
71
- const showLessButtonMarginTop = 4;
72
- const heightOfSpanInShowMoreMode = newHeight - buttonHeight - showLessButtonMarginTop;
73
- const thresholdToDetectContentInSingleLine = 4;
74
- const differenceBetweenContentSpanAndButtonHeight = Math.abs(heightOfOneLine - heightOfSpanInShowMoreMode);
75
- const isSpanContentDisplayedInOneLineAgain = differenceBetweenContentSpanAndButtonHeight < thresholdToDetectContentInSingleLine;
76
- return isSpanContentDisplayedInOneLineAgain;
77
- }));
78
- const contentFitsInOneLineAgainWhileShowMoreIsEnabled$ = userIncreasedBrowserWindowSizeToThePointOfNoTruncationNecessary$.pipe(startWith(false), pairwise(), filter(([previousTextIsNowInOneLineAgain]) => !previousTextIsNowInOneLineAgain), map(([, textIsNowInOneLineAgain]) => !textIsNowInOneLineAgain));
79
- const contentIsOverflowingAndShowMoreIsNotEnabled$ = isContentOverflowing$.pipe(withLatestFrom(this.isShowingMore$), filter(([, isShowingMore]) => !isShowingMore), map(([isContentLongerThanContainerWidth]) => {
80
- return isContentLongerThanContainerWidth;
81
- }));
82
- this.showButton$ = merge(userTriggeredTriggeredShowMore$, contentFitsInOneLineAgainWhileShowMoreIsEnabled$, contentIsOverflowingAndShowMoreIsNotEnabled$);
83
- // As long as no parent component is listening on resize events,
84
- // the ChangeDetectorRef.markForCheck() call done by the async pipe
85
- // will not result in a change detection cycle in this component when its size changes.
86
- // This is the least amount of ChangeDetectorRef.detectChanges() calls
87
- // I was able to come up with. The Angular profiler shows acceptable numbers of change detection.
88
- this.detectChangesWhenObservableEmits(isContentOverflowing$);
89
- this.detectChangesWhenObservableEmits(this.showButton$);
90
- this.detectChangesWhenObservableEmits(this.content$);
91
- this.detectChangesWhenObservableEmits(contentIsOverflowingAndShowMoreIsNotEnabled$);
92
- this.detectChangesWhenObservableEmits(isContentOverflowing$);
93
- }
94
- onShowMoreToggle() {
95
- this.isShowingMore$.next(!this.isShowingMore$.getValue());
96
- this.cdRef.detectChanges();
97
- }
98
- ngOnDestroy() {
99
- this.resizeObserverService.unobserve(this.hostEl.nativeElement);
100
- }
101
- detectChangesWhenObservableEmits(observable$) {
102
- observable$.pipe(takeUntil(this.destroyed$)).subscribe(() => this.cdRef.detectChanges());
103
- }
104
- isContentOverflowing(contentSpanElRef) {
105
- const scrollWidth = contentSpanElRef.nativeElement.scrollWidth;
106
- const offsetWidth = contentSpanElRef.nativeElement.clientWidth;
107
- return offsetWidth < scrollWidth;
108
- }
109
- }
110
- EllipsisComponent.DEFAULT_RESIZE_DEBOUNCE_MS = 500;
111
- EllipsisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: EllipsisComponent, deps: [{ token: LX_ELLIPSIS_DEBOUNCE_ON_RESIZE }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.ResizeObserverService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
112
- EllipsisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: EllipsisComponent, selector: "lx-ellipsis", inputs: { content: "content", escapeHtmlInContent: "escapeHtmlInContent" }, viewQueries: [{ propertyName: "contentSpanEl", first: true, predicate: ["contentEl"], descendants: true }, { propertyName: "showMoreButtonEl", first: true, predicate: ["showMoreButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<span\n #contentEl\n [class.showMore]=\"isShowingMore$ | async\"\n class=\"content truncate lx-margin-right\"\n [innerHtml]=\"sanitizedContent$ | async\"\n></span>\n<button *ngIf=\"showButton$ | async\" (click)=\"onShowMoreToggle()\" lx-button #showMoreButton size=\"auto\" mode=\"link\" color=\"primary\">\n {{ showMoreButtonLabel$ | async }}\n</button>\n", styles: [":host{display:block}.content{display:inline-block;word-break:break-word}.truncate:not(.showMore){width:calc(100% - 140px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.content.showMore+button{margin-top:4px;display:block}button{white-space:nowrap;vertical-align:top}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[lx-button]", inputs: ["size", "color", "mode", "pressed", "selected", "square", "circle", "disabled", "showSpinner"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
113
- __decorate([
114
- Observe('contentSpanEl')
115
- ], EllipsisComponent.prototype, "contentSpanEl$", void 0);
116
- __decorate([
117
- Observe('showMoreButtonEl')
118
- ], EllipsisComponent.prototype, "showMoreButtonEl$", void 0);
119
- __decorate([
120
- Observe('content')
121
- ], EllipsisComponent.prototype, "content$", void 0);
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: EllipsisComponent, decorators: [{
123
- type: Component,
124
- args: [{ selector: 'lx-ellipsis', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span\n #contentEl\n [class.showMore]=\"isShowingMore$ | async\"\n class=\"content truncate lx-margin-right\"\n [innerHtml]=\"sanitizedContent$ | async\"\n></span>\n<button *ngIf=\"showButton$ | async\" (click)=\"onShowMoreToggle()\" lx-button #showMoreButton size=\"auto\" mode=\"link\" color=\"primary\">\n {{ showMoreButtonLabel$ | async }}\n</button>\n", styles: [":host{display:block}.content{display:inline-block;word-break:break-word}.truncate:not(.showMore){width:calc(100% - 140px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.content.showMore+button{margin-top:4px;display:block}button{white-space:nowrap;vertical-align:top}\n"] }]
125
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
126
- type: Inject,
127
- args: [LX_ELLIPSIS_DEBOUNCE_ON_RESIZE]
128
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.ResizeObserverService }, { type: i2.TranslateService }]; }, propDecorators: { content: [{
129
- type: Input
130
- }], escapeHtmlInContent: [{
131
- type: Input
132
- }], contentSpanEl$: [], contentSpanEl: [{
133
- type: ViewChild,
134
- args: ['contentEl']
135
- }], showMoreButtonEl$: [], showMoreButtonEl: [{
136
- type: ViewChild,
137
- args: ['showMoreButton', { read: ElementRef }]
138
- }], content$: [] } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzaXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvY29yZS11aS9jb21wb25lbnRzL2VsbGlwc2lzL2VsbGlwc2lzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUtdWkvY29tcG9uZW50cy9lbGxpcHNpcy9lbGxpcHNpcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFGLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixHQUFHLEVBQ0gsUUFBUSxFQUNSLElBQUksRUFDSixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsY0FBYyxFQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFHbEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBQVMsZ0NBQWdDLEVBQUU7SUFDekcsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLDBCQUEwQjtDQUM1RCxDQUFDLENBQUM7QUFFSDs7OztHQUlHO0FBT0gsTUFBTSxPQUFPLGlCQUFpQjtJ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aUJBQWlCLDJUQWFTLFVBQVUsNkJDNURqRCwyV0FTQTtBRGdENEI7SUFBekIsT0FBTyxDQUFDLGVBQWUsQ0FBQzt5REFBa0U7QUFFOUQ7SUFBNUIsT0FBTyxDQUFDLGtCQUFrQixDQUFDOzREQUF1RTtBQVVuRztJQURDLE9BQU8sQ0FBQyxTQUFTLENBQUM7bURBQ21COzJGQXRCM0IsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLGFBQWEsbUJBR04sdUJBQXVCLENBQUMsTUFBTTs7MEJBNkI1QyxNQUFNOzJCQUFDLDhCQUE4Qjt3S0F4Qi9CLE9BQU87c0JBQWYsS0FBSztnQkFLRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRTRCLGNBQWMsTUFDeEIsYUFBYTtzQkFBcEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNlLGlCQUFpQixNQUNILGdCQUFnQjtzQkFBbEUsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBU3pDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBlc2NhcGUgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBjb25jYXQsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgcGFpcndpc2UsXG4gIHNraXAsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHdpdGhMYXRlc3RGcm9tXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvb2JzZXJ2ZSc7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXNpemUtb2JzZXJ2ZXIuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCBMWF9FTExJUFNJU19ERUJPVU5DRV9PTl9SRVNJWkUgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPignTFhfRUxMSVBTSVNfREVCT1VOQ0VfT05fUkVTSVpFJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IEVsbGlwc2lzQ29tcG9uZW50LkRFRkFVTFRfUkVTSVpFX0RFQk9VTkNFX01TXG59KTtcblxuLyoqXG4gKiBZb3UgY2FuIHNldCBhIGN1c3RvbSBtYXgtd2lkdGggQ1NTIHByb3BlcnR5IG9uIHlvdXIgbHgtZWxsaXBzaXMgaG9zdCBlbGVtZW50XG4gKiBpZiB5b3Ugd2FudCBpdHMgY29udGVudCB0byBuZXZlciBleGNlZWQgYSBzcGVjaWZpYyB3aWR0aCxcbiAqIGUuZy4gPGx4LWVsbGlwc2lzIHN0eWxlPVwibWF4LXdpZHRoOiAzMDBweFwiIGNvbnRlbnQ9XCJIZWxsbyBXb3JsZFsuLl1cIj48L2x4LWVsbGlwc2lzPi5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHgtZWxsaXBzaXMnLFxuICB0ZW1wbGF0ZVVybDogJ2VsbGlwc2lzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbYGVsbGlwc2lzLmNvbXBvbmVudC5zY3NzYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEVsbGlwc2lzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzdGF0aWMgREVGQVVMVF9SRVNJWkVfREVCT1VOQ0VfTVMgPSA1MDA7XG5cbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nID0gJyc7XG4gIC8qKlxuICAgKiBPbmx5IHNldCB0aGlzIHRvIGZhbHNlIGlmIHRoZSBjb250ZW50IGlzIG5vdCBhIHVzZXIgcHJvdmlkZWQgc3RyaW5nXG4gICAqIG9yIGlmIHlvdSBzYW5pdGl6ZSB0aGUgcHJvdmlkZWQgY29udGVudCB5b3Vyc2VsZi5cbiAgICovXG4gIEBJbnB1dCgpIGVzY2FwZUh0bWxJbkNvbnRlbnQgPSB0cnVlO1xuXG4gIEBPYnNlcnZlKCdjb250ZW50U3BhbkVsJykgcHJpdmF0ZSBjb250ZW50U3BhbkVsJCE6IE9ic2VydmFibGU8RWxlbWVudFJlZjxIVE1MU3BhbkVsZW1lbnQ+PjtcbiAgQFZpZXdDaGlsZCgnY29udGVudEVsJykgY29udGVudFNwYW5FbCE6IEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50PjtcbiAgQE9ic2VydmUoJ3Nob3dNb3JlQnV0dG9uRWwnKSBwcml2YXRlIHNob3dNb3JlQnV0dG9uRWwkITogT2JzZXJ2YWJsZTxFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50Pj47XG4gIEBWaWV3Q2hpbGQoJ3Nob3dNb3JlQnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNob3dNb3JlQnV0dG9uRWwhOiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcblxuICBpc1Nob3dpbmdNb3JlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHNob3dCdXR0b24kITogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc2hvd01vcmVCdXR0b25MYWJlbCQhOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgc2FuaXRpemVkQ29udGVudCQhOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBPYnNlcnZlKCdjb250ZW50JylcbiAgcHJpdmF0ZSBjb250ZW50JCE6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTFhfRUxMSVBTSVNfREVCT1VOQ0VfT05fUkVTSVpFKVxuICAgIHByaXZhdGUgZGVib3VuY2VNc0FmdGVyUmVzaXplOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBob3N0RWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlclNlcnZpY2U6IFJlc2l6ZU9ic2VydmVyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2FuaXRpemVkQ29udGVudCQgPSB0aGlzLmNvbnRlbnQkLnBpcGUoXG4gICAgICBtYXAoKGNvbnRlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXNjYXBlSHRtbEluQ29udGVudCAmJiB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlKGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zaG93TW9yZUJ1dHRvbkxhYmVsJCA9IHRoaXMuaXNTaG93aW5nTW9yZSQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoaXNTaG93aW5nTW9yZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbktleSA9IGlzU2hvd2luZ01vcmUgPyAnY29tbW9uLnNob3dMZXNzJyA6ICdjb21tb24uc2hvd01vcmUnO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0cmFuc2xhdGlvbktleSk7XG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgbmV3V2lkdGhPblJlc2l6ZSQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgY29uc3QgbmV3SGVpZ2h0T25SZXNpemUkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLm9ic2VydmUodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCwgKHJlc2l6ZWRFbGVtZW50KSA9PiB7XG4gICAgICBuZXdXaWR0aE9uUmVzaXplJC5uZXh0KHJlc2l6ZWRFbGVtZW50LmNvbnRlbnRSZWN0LndpZHRoKTtcbiAgICAgIG5ld0hlaWdodE9uUmVzaXplJC5uZXh0KHJlc2l6ZWRFbGVtZW50LmNvbnRlbnRSZWN0LmhlaWdodCk7XG4gICAgfSk7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGhDaGFuZ2VkU2lnbmlmaWNhbnRseUFmdGVyUmVzaXplJCA9IG5ld1dpZHRoT25SZXNpemUkLnBpcGUoXG4gICAgICBzdGFydFdpdGgoMCksXG4gICAgICBwYWlyd2lzZSgpLFxuICAgICAgZmlsdGVyKChbcHJldmlvdXNXaWR0aCwgbmV3V2lkdGhdKSA9PiBNYXRoLmFicyhuZXdXaWR0aCAtIHByZXZpb3VzV2lkdGgpID4gMSksXG4gICAgICBtYXAoKFssIG5ld1dpZHRoXSkgPT4gbmV3V2lkdGgpXG4gICAgKTtcbiAgICBjb25zdCB1c2VyVHJpZ2dlcmVkVHJpZ2dlcmVkU2hvd0xlc3MkID0gdGhpcy5pc1Nob3dpbmdNb3JlJC5waXBlKGZpbHRlcigoaXNTaG93aW5nTW9yZSkgPT4gIWlzU2hvd2luZ01vcmUpKTtcblxuICAgIGNvbnN0IHJlZXZhbHVhdGVJZkNvbnRlbnRJc092ZXJmbG93aW5nJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5jb250ZW50U3BhbkVsJCxcbiAgICAgIHVzZXJUcmlnZ2VyZWRUcmlnZ2VyZWRTaG93TGVzcyQsXG4gICAgICBjb250YWluZXJXaWR0aENoYW5nZWRTaWduaWZpY2FudGx5QWZ0ZXJSZXNpemUkXG4gICAgXSk7XG5cbiAgICBjb25zdCBpc0NvbnRlbnRPdmVyZmxvd2luZyQgPSBtZXJnZShcbiAgICAgIGNvbmNhdChcbiAgICAgICAgcmVldmFsdWF0ZUlmQ29udGVudElzT3ZlcmZsb3dpbmckLnBpcGUodGFrZSgxKSksIC8vIGRlYm91bmNlIGFsbCBidXQgdGhlIGZpcnN0IG91dHB1dFxuICAgICAgICByZWV2YWx1YXRlSWZDb250ZW50SXNPdmVyZmxvd2luZyQucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZU1zQWZ0ZXJSZXNpemUpKVxuICAgICAgKSxcbiAgICAgIHRoaXMuY29udGVudCQucGlwZShza2lwKDEpKSAvLyBpbW1lZGlhdGVseSByZWV2YWx1YXRlIG9uIHN1YnNlcXVlbnQgY29udGVudCBjaGFuZ2VzXG4gICAgKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5jb250ZW50U3BhbkVsJCksXG4gICAgICBtYXAoKFssIGNvbnRlbnRTcGFuUmVmXSkgPT4gdGhpcy5pc0NvbnRlbnRPdmVyZmxvd2luZyhjb250ZW50U3BhblJlZikpXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZXJUcmlnZ2VyZWRUcmlnZ2VyZWRTaG93TW9yZSQgPSB0aGlzLmlzU2hvd2luZ01vcmUkLnBpcGUoZmlsdGVyKChpc1Nob3dpbmdNb3JlKSA9PiBpc1Nob3dpbmdNb3JlKSk7XG5cbiAgICBjb25zdCBidXR0b25IZWlnaHQkID0gdGhpcy5zaG93TW9yZUJ1dHRvbkVsJC5waXBlKFxuICAgICAgZmlsdGVyKChzaG93TW9yZUJ1dHRvbkVsKSA9PiAhIXNob3dNb3JlQnV0dG9uRWwpLFxuICAgICAgbWFwKChzaG93TW9yZUJ1dHRvbkVsKSA9PiBzaG93TW9yZUJ1dHRvbkVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbmNyZWFzZWRCcm93c2VyV2luZG93U2l6ZVRvVGhlUG9pbnRPZk5vVHJ1bmNhdGlvbk5lY2Vzc2FyeSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIGJ1dHRvbkhlaWdodCQsXG4gICAgICBuZXdIZWlnaHRPblJlc2l6ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgIF0pLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmlzU2hvd2luZ01vcmUkKSxcbiAgICAgIGZpbHRlcigoWywgaXNTaG93aW5nTW9yZV0pID0+IGlzU2hvd2luZ01vcmUpLFxuICAgICAgbWFwKChbW2J1dHRvbkhlaWdodCwgbmV3SGVpZ2h0XV0pID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0T2ZPbmVMaW5lID0gYnV0dG9uSGVpZ2h0O1xuICAgICAgICBjb25zdCBzaG93TGVzc0J1dHRvbk1hcmdpblRvcCA9IDQ7XG4gICAgICAgIGNvbnN0IGhlaWdodE9mU3BhbkluU2hvd01vcmVNb2RlID0gbmV3SGVpZ2h0IC0gYnV0dG9uSGVpZ2h0IC0gc2hvd0xlc3NCdXR0b25NYXJnaW5Ub3A7XG4gICAgICAgIGNvbnN0IHRocmVzaG9sZFRvRGV0ZWN0Q29udGVudEluU2luZ2xlTGluZSA9IDQ7XG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2VCZXR3ZWVuQ29udGVudFNwYW5BbmRCdXR0b25IZWlnaHQgPSBNYXRoLmFicyhoZWlnaHRPZk9uZUxpbmUgLSBoZWlnaHRPZlNwYW5JblNob3dNb3JlTW9kZSk7XG4gICAgICAgIGNvbnN0IGlzU3BhbkNvbnRlbnREaXNwbGF5ZWRJbk9uZUxpbmVBZ2FpbiA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29udGVudFNwYW5BbmRCdXR0b25IZWlnaHQgPCB0aHJlc2hvbGRUb0RldGVjdENvbnRlbnRJblNpbmdsZUxpbmU7XG4gICAgICAgIHJldHVybiBpc1NwYW5Db250ZW50RGlzcGxheWVkSW5PbmVMaW5lQWdhaW47XG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3QgY29udGVudEZpdHNJbk9uZUxpbmVBZ2FpbldoaWxlU2hvd01vcmVJc0VuYWJsZWQkID0gdXNlckluY3JlYXNlZEJyb3dzZXJXaW5kb3dTaXplVG9UaGVQb2ludE9mTm9UcnVuY2F0aW9uTmVjZXNzYXJ5JC5waXBlKFxuICAgICAgc3RhcnRXaXRoKGZhbHNlKSxcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBmaWx0ZXIoKFtwcmV2aW91c1RleHRJc05vd0luT25lTGluZUFnYWluXSkgPT4gIXByZXZpb3VzVGV4dElzTm93SW5PbmVMaW5lQWdhaW4pLFxuICAgICAgbWFwKChbLCB0ZXh0SXNOb3dJbk9uZUxpbmVBZ2Fpbl0pID0+ICF0ZXh0SXNOb3dJbk9uZUxpbmVBZ2FpbilcbiAgICApO1xuICAgIGNvbnN0IGNvbnRlbnRJc092ZXJmbG93aW5nQW5kU2hvd01vcmVJc05vdEVuYWJsZWQkID0gaXNDb250ZW50T3ZlcmZsb3dpbmckLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmlzU2hvd2luZ01vcmUkKSxcbiAgICAgIGZpbHRlcigoWywgaXNTaG93aW5nTW9yZV0pID0+ICFpc1Nob3dpbmdNb3JlKSxcbiAgICAgIG1hcCgoW2lzQ29udGVudExvbmdlclRoYW5Db250YWluZXJXaWR0aF0pID0+IHtcbiAgICAgICAgcmV0dXJuIGlzQ29udGVudExvbmdlclRoYW5Db250YWluZXJXaWR0aDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnNob3dCdXR0b24kID0gbWVyZ2UoXG4gICAgICB1c2VyVHJpZ2dlcmVkVHJpZ2dlcmVkU2hvd01vcmUkLFxuICAgICAgY29udGVudEZpdHNJbk9uZUxpbmVBZ2FpbldoaWxlU2hvd01vcmVJc0VuYWJsZWQkLFxuICAgICAgY29udGVudElzT3ZlcmZsb3dpbmdBbmRTaG93TW9yZUlzTm90RW5hYmxlZCRcbiAgICApO1xuXG4gICAgLy8gQXMgbG9uZyBhcyBubyBwYXJlbnQgY29tcG9uZW50IGlzIGxpc3RlbmluZyBvbiByZXNpemUgZXZlbnRzLFxuICAgIC8vIHRoZSBDaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSBjYWxsIGRvbmUgYnkgdGhlIGFzeW5jIHBpcGVcbiAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gYSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIGluIHRoaXMgY29tcG9uZW50IHdoZW4gaXRzIHNpemUgY2hhbmdlcy5cbiAgICAvLyBUaGlzIGlzIHRoZSBsZWFzdCBhbW91bnQgb2YgQ2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpIGNhbGxzXG4gICAgLy8gSSB3YXMgYWJsZSB0byBjb21lIHVwIHdpdGguIFRoZSBBbmd1bGFyIHByb2ZpbGVyIHNob3dzIGFjY2VwdGFibGUgbnVtYmVycyBvZiBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc1doZW5PYnNlcnZhYmxlRW1pdHMoaXNDb250ZW50T3ZlcmZsb3dpbmckKTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXNXaGVuT2JzZXJ2YWJsZUVtaXRzKHRoaXMuc2hvd0J1dHRvbiQpO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlc1doZW5PYnNlcnZhYmxlRW1pdHModGhpcy5jb250ZW50JCk7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzV2hlbk9ic2VydmFibGVFbWl0cyhjb250ZW50SXNPdmVyZmxvd2luZ0FuZFNob3dNb3JlSXNOb3RFbmFibGVkJCk7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzV2hlbk9ic2VydmFibGVFbWl0cyhpc0NvbnRlbnRPdmVyZmxvd2luZyQpO1xuICB9XG5cbiAgb25TaG93TW9yZVRvZ2dsZSgpIHtcbiAgICB0aGlzLmlzU2hvd2luZ01vcmUkLm5leHQoIXRoaXMuaXNTaG93aW5nTW9yZSQuZ2V0VmFsdWUoKSk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyU2VydmljZS51bm9ic2VydmUodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdENoYW5nZXNXaGVuT2JzZXJ2YWJsZUVtaXRzKG9ic2VydmFibGUkOiBPYnNlcnZhYmxlPGFueT4pIHtcbiAgICBvYnNlcnZhYmxlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbnRlbnRPdmVyZmxvd2luZyhjb250ZW50U3BhbkVsUmVmOiBFbGVtZW50UmVmPEhUTUxTcGFuRWxlbWVudD4pIHtcbiAgICBjb25zdCBzY3JvbGxXaWR0aCA9IGNvbnRlbnRTcGFuRWxSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICBjb25zdCBvZmZzZXRXaWR0aCA9IGNvbnRlbnRTcGFuRWxSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICByZXR1cm4gb2Zmc2V0V2lkdGggPCBzY3JvbGxXaWR0aDtcbiAgfVxufVxuIiwiPHNwYW5cbiAgI2NvbnRlbnRFbFxuICBbY2xhc3Muc2hvd01vcmVdPVwiaXNTaG93aW5nTW9yZSQgfCBhc3luY1wiXG4gIGNsYXNzPVwiY29udGVudCB0cnVuY2F0ZSBseC1tYXJnaW4tcmlnaHRcIlxuICBbaW5uZXJIdG1sXT1cInNhbml0aXplZENvbnRlbnQkIHwgYXN5bmNcIlxuPjwvc3Bhbj5cbjxidXR0b24gKm5nSWY9XCJzaG93QnV0dG9uJCB8IGFzeW5jXCIgKGNsaWNrKT1cIm9uU2hvd01vcmVUb2dnbGUoKVwiIGx4LWJ1dHRvbiAjc2hvd01vcmVCdXR0b24gc2l6ZT1cImF1dG9cIiBtb2RlPVwibGlua1wiIGNvbG9yPVwicHJpbWFyeVwiPlxuICB7eyBzaG93TW9yZUJ1dHRvbkxhYmVsJCB8IGFzeW5jIH19XG48L2J1dHRvbj5cbiJdfQ==