@leanix/components 0.4.20 → 0.4.22

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
@@ -1,279 +0,0 @@
1
- import { Component, ContentChild, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { get, includes, isEqual } from 'lodash/fp';
4
- import { fromEvent, Subject } from 'rxjs';
5
- import { distinctUntilChanged, filter, map, takeUntil, tap } from 'rxjs/operators';
6
- import { SelectDropdownDirective } from '../../directives/select-dropdown.directive';
7
- import { SelectedOptionDirective } from '../../directives/selected-option.directive';
8
- import { ARROW_LEFT, ARROW_RIGHT, BACKSPACE, ESCAPE, TAB } from '../../helpers/key-codes.constants';
9
- import { getKeyboardNavigationEvents } from '../../helpers/keyboard-navigation.helpers';
10
- import { BaseSelectDirective } from '../../models/base-select.directive';
11
- import { BasicDropdownComponent } from '../basic-dropdown/basic-dropdown.component';
12
- import { KeyboardSelectAction } from '../keyboard-select.directive';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/common";
15
- import * as i2 from "@angular/forms";
16
- import * as i3 from "../../directives/mark-invalid.directive";
17
- export class SingleSelectComponent extends BaseSelectDirective {
18
- constructor(cd) {
19
- super();
20
- this.cd = cd;
21
- this.selectionBackground = 'white';
22
- this.size = 'default';
23
- this.dropdownWidthScale = '1x';
24
- this.padding = 'default';
25
- this.selectionChange = new EventEmitter();
26
- this.blur = new EventEmitter();
27
- this.allowClear = true;
28
- this.tabIndex = 0;
29
- this.markInvalid = false;
30
- this.destroyed$ = new Subject();
31
- this.isInputFocusedViaTab = false;
32
- }
33
- static calculateNewCursorPostionOnKeyboardNavigation(cursorPosition, keyCode) {
34
- switch (keyCode) {
35
- case ARROW_LEFT:
36
- cursorPosition--;
37
- break;
38
- case ARROW_RIGHT:
39
- cursorPosition++;
40
- break;
41
- }
42
- return cursorPosition;
43
- }
44
- static getKeyboardSelectAction(cursorPosition, keyCode) {
45
- if (cursorPosition <= -1 && keyCode === ARROW_RIGHT) {
46
- return KeyboardSelectAction.NEXT;
47
- }
48
- if (cursorPosition === -1 && keyCode === ARROW_LEFT) {
49
- return KeyboardSelectAction.LAST;
50
- }
51
- if (cursorPosition < -1 && keyCode === ARROW_LEFT) {
52
- return KeyboardSelectAction.PREV;
53
- }
54
- if (cursorPosition <= -1 && keyCode === BACKSPACE) {
55
- return KeyboardSelectAction.EXECUTE;
56
- }
57
- return null;
58
- }
59
- get selectedOptionTmpl() {
60
- return this.explicitSelectedOption || this.implicitSelectedOption;
61
- }
62
- get dropdownTmpl() {
63
- return this.explicitDropdown || this.implicitDropdown;
64
- }
65
- get cursorStyle() {
66
- if (this.disabled) {
67
- return 'default';
68
- }
69
- else if (this.allowQuery) {
70
- return 'text';
71
- }
72
- else {
73
- return 'pointer';
74
- }
75
- }
76
- get dropdownWidth() {
77
- switch (this.dropdownWidthScale) {
78
- case '1x':
79
- return undefined;
80
- case '1.5x':
81
- return '150%';
82
- case '2x':
83
- return '200%';
84
- }
85
- }
86
- resetInput() {
87
- this.queryControl.reset('', { emitEvent: false });
88
- }
89
- focus() {
90
- this.queryInput.nativeElement.focus();
91
- }
92
- focusAndOpen() {
93
- this.queryInput.nativeElement.focus();
94
- this.open.next(true);
95
- }
96
- ngOnDestroy() {
97
- super.ngOnDestroy();
98
- this.destroyed$.next();
99
- }
100
- ngAfterViewInit() {
101
- super.ngAfterViewInit();
102
- this.open
103
- .pipe(distinctUntilChanged(), filter((open) => open && !!this.dropdownComponent), map(() => this.selection), takeUntil(this.destroyed$))
104
- .subscribe((selection) => {
105
- if (selection) {
106
- const index = this.determineHighlightIndex(this.dropdownComponent.options, selection, this.dropdownComponent.itemKey);
107
- if (index > -1) {
108
- this.dropdownComponent.select(index);
109
- }
110
- else {
111
- this.selectFirstOption();
112
- }
113
- }
114
- else {
115
- this.selectFirstOption();
116
- }
117
- });
118
- // keyboard event handling
119
- const sourceElement = this.queryInput.nativeElement;
120
- // handle keyboard navigation for the selection
121
- fromEvent(sourceElement, 'keydown')
122
- .pipe(map((event) => this.mapToEventSet(event, sourceElement, this.virtualCursorPosition)), tap((eventSet) => {
123
- if (!this.allowQuery && eventSet.event.keyCode !== BACKSPACE) {
124
- // additional check for even.code for userEvent API compatibility
125
- if (eventSet.event.keyCode !== TAB && eventSet.event.code !== 'Tab') {
126
- // if querying is disabled, only the tab key press event will be propagated, so that you can still defocus.
127
- eventSet.event.preventDefault();
128
- }
129
- return;
130
- }
131
- if (eventSet.virtualCursorPosition === 0 &&
132
- eventSet.inputCursorPosition === 0 &&
133
- eventSet.event.keyCode === BACKSPACE &&
134
- this.selection &&
135
- this.allowClear) {
136
- this.removeSelection();
137
- eventSet.inputCursorPosition = undefined; // set to null to prevent continuing in the stream
138
- }
139
- if (typeof eventSet.inputCursorPosition === 'number' && eventSet.inputCursorPosition > 0) {
140
- this.virtualCursorPosition = 0;
141
- }
142
- else if (eventSet.virtualCursorPosition === -1 && eventSet.event.keyCode === ARROW_RIGHT) {
143
- eventSet.event.preventDefault();
144
- this.selectionKeyboardSelectAction$.next(KeyboardSelectAction.UNSELECT);
145
- this.virtualCursorPosition = 0;
146
- eventSet.inputCursorPosition = undefined; // set to null to prevent continuing in the stream
147
- }
148
- }), filter((eventSet) => this.allowQuery && eventSet.inputCursorPosition === 0), map((eventSet) => eventSet.event), filter((event) => includes(event.keyCode, [ARROW_RIGHT, ARROW_LEFT, BACKSPACE])), map((event) => {
149
- this.virtualCursorPosition = SingleSelectComponent.calculateNewCursorPostionOnKeyboardNavigation(this.virtualCursorPosition, event.keyCode);
150
- return {
151
- cursorPosition: this.virtualCursorPosition,
152
- event
153
- };
154
- }), map((positionSet) => {
155
- const action = SingleSelectComponent.getKeyboardSelectAction(positionSet.cursorPosition, positionSet.event.keyCode);
156
- if (action === KeyboardSelectAction.NEXT) {
157
- // prevent cursor from moving in the input field, while we are still in the selection items
158
- positionSet.event.preventDefault();
159
- }
160
- return action;
161
- }), takeUntil(this.destroyed$))
162
- .subscribe(this.selectionKeyboardSelectAction$);
163
- const keyboardEvents = getKeyboardNavigationEvents(sourceElement, this.destroyed$);
164
- keyboardEvents.verticalNavigation$.subscribe((event) => {
165
- event.preventDefault();
166
- });
167
- keyboardEvents.close$.subscribe((event) => {
168
- if (event.keyCode === ESCAPE && this.dropdownOpen) {
169
- event.preventDefault();
170
- event.stopImmediatePropagation();
171
- }
172
- this.open.next(false);
173
- });
174
- keyboardEvents.dropdownKeyboardEvent$.subscribe(this.optionsKeyboardSelectAction$);
175
- keyboardEvents.enter$.subscribe(() => this.open.next(!this.dropdownOpen));
176
- keyboardEvents.space$.pipe(filter(() => !this.allowQuery)).subscribe(() => {
177
- if (this.dropdownOpen) {
178
- this.optionsKeyboardSelectAction$.next(KeyboardSelectAction.EXECUTE);
179
- }
180
- this.open.next(!this.dropdownOpen);
181
- });
182
- keyboardEvents.openOnArrowDown$.subscribe(() => this.open.next(true));
183
- }
184
- selectOption(option) {
185
- this.selection = option;
186
- this.selectionChange.emit(option);
187
- this.propagateChange(option);
188
- this.resetSelectState();
189
- // This timeout makes sure that the dropdown will be closed at the end
190
- // of all the callbacks in the open subscriptions.
191
- setTimeout(() => {
192
- this.open.next(false);
193
- });
194
- }
195
- removeSelection() {
196
- this.selection = null;
197
- this.cd.markForCheck();
198
- this.cd.detectChanges();
199
- this.selectionChange.emit(this.selection);
200
- this.propagateChange(this.selection);
201
- this.resetSelectState();
202
- }
203
- propagateChange(_value) { }
204
- writeValue(newSelection) {
205
- this.selection = newSelection;
206
- }
207
- setDisabledState(isDisabled) {
208
- this.disabled = isDisabled;
209
- }
210
- registerOnChange(fn) {
211
- this.propagateChange = fn;
212
- }
213
- registerOnTouched(_fn) { }
214
- focusedViaTab() {
215
- this.isInputFocusedViaTab = true;
216
- }
217
- determineHighlightIndex(options, selection, itemKey) {
218
- return itemKey
219
- ? options.findIndex((option) => isEqual(get(itemKey, selection), get(itemKey, option)) || isEqual(selection, get(itemKey, option)))
220
- : options.findIndex((option) => isEqual(selection, option));
221
- }
222
- }
223
- SingleSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: SingleSelectComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
224
- SingleSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: SingleSelectComponent, selector: "lx-single-select", inputs: { selection: "selection", selectionBackground: "selectionBackground", size: "size", dropdownWidthScale: "dropdownWidthScale", padding: "padding", allowClear: "allowClear", tabIndex: "tabIndex", markInvalid: "markInvalid" }, outputs: { selectionChange: "selectionChange", blur: "blur" }, providers: [
225
- {
226
- provide: NG_VALUE_ACCESSOR,
227
- multi: true,
228
- useExisting: forwardRef(() => SingleSelectComponent)
229
- }
230
- ], queries: [{ propertyName: "explicitDropdown", first: true, predicate: SelectDropdownDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "explicitSelectedOption", first: true, predicate: SelectedOptionDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "dropdownComponent", first: true, predicate: BasicDropdownComponent, descendants: true }], viewQueries: [{ propertyName: "implicitSelectedOption", first: true, predicate: ["selectedOption"], descendants: true, static: true }, { propertyName: "implicitDropdown", first: true, predicate: ["dropdown"], descendants: true, static: true }, { propertyName: "queryInput", first: true, predicate: ["queryInput"], 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 {{ padding }}Padding\"\n [class.open]=\"dropdownOpen\"\n [class.top]=\"(dropdownDirection$ | async) === 'TOP'\"\n [class.bottom]=\"(dropdownDirection$ | async) === 'BOTTOM'\"\n [class.disabled]=\"disabled\"\n [class.grayBackground]=\"selectionBackground === 'gray'\"\n [class.defaultSize]=\"size === 'default'\"\n [class.smallSize]=\"size === 'small'\"\n [class.select2Size]=\"size === 'select2'\"\n [class.largeSize]=\"size === 'large'\"\n [style.cursor]=\"cursorStyle\"\n [class.focused]=\"isInputFocused\"\n [class.focusedVisible]=\"isInputFocusedViaTab\"\n (click)=\"handleClick($event.target === toggle)\"\n>\n <div class=\"selectionContainer\">\n <div class=\"inputContainer\">\n <div *ngIf=\"!selection && selection !== 0 && !queryInput?.value\" class=\"placeholder\" [attr.title]=\"placeholder\">\n {{ placeholder }}\n </div>\n <div\n *ngIf=\"!allowQuery || !queryInput?.value\"\n class=\"selection\"\n [class.lowerOpacity]=\"allowQuery && !queryInput?.value && dropdownOpen\"\n [class.lightgrayColor]=\"!allowQuery && dropdownOpen\"\n (click)=\"$event.stopPropagation(); focus()\"\n >\n <ng-container *ngTemplateOutlet=\"selectedOptionTmpl\"></ng-container>\n </div>\n <input\n #queryInput\n class=\"queryInput\"\n type=\"text\"\n [class.isHidden]=\"!allowQuery\"\n (keydown.enter)=\"$event.preventDefault()\"\n (focus)=\"isInputFocused = true\"\n (blur)=\"isInputFocused = false; isInputFocusedViaTab = false; blur.emit($event)\"\n (keyup.tab)=\"focusedViaTab()\"\n (keyup.shift.tab)=\"focusedViaTab()\"\n [tabIndex]=\"disabled ? -1 : tabIndex\"\n [formControl]=\"queryControl\"\n [readOnly]=\"!allowQuery\"\n />\n </div>\n <div class=\"iconContainer\">\n <i *ngIf=\"(selection || selection === 0) && allowClear && !disabled\" class=\"far fa-times\" (click)=\"removeSelection()\"></i>\n <i #toggle class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\n </div>\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 #selectedOption>\n <ng-content select=\".selectedOption\"></ng-content>\n</ng-template>\n<ng-template #dropdown>\n <ng-content select=\".dropdownComponent\"></ng-content>\n</ng-template>\n", styles: [":host ::ng-deep .selectedOption{overflow:hidden;text-overflow:ellipsis}.selectContainer{position:relative;height:auto;padding:0;box-sizing:border-box;background:#fff;border:1px solid #99a5bb;box-shadow:inset 0 1px 1px #00000012;border-radius:3px}.selectContainer.grayBackground{background:#eaedf1;border-color:#eaedf1;box-shadow:none}.selectContainer.open{z-index:1049;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;border-top-left-radius:0;border-top-right-radius:0}.selectContainer.open.top{box-shadow:0 -4px 6px #21252933;border-top:0;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;border-bottom-left-radius:0;border-bottom-right-radius:0;top:none;bottom:100%}.selectContainer:not(.open).focused{outline:0;border:1px solid #5599ff}.selectContainer:not(.open).focusedVisible{outline:1px auto Highlight;outline:1px auto -webkit-focus-ring-color}.selectContainer.disabled{background-color:#eaedf1;cursor:not-allowed!important}.selectContainer.defaultPadding .selectionContainer{padding-left:12px}.selectContainer.narrowPadding .selectionContainer{padding-left:4px}.selectContainer .lightgrayColor{color:#8594ad}.selectionContainer{display:flex}.inputContainer{flex:1;position:relative;white-space:nowrap}.queryInput{width:100%;-webkit-appearance:none;appearance:none;border:0;padding-left:0;background:transparent;position:relative;cursor:inherit}.queryInput::-ms-clear{display:none}.queryInput:focus{outline:0}.queryInput.isHidden{opacity:0}.placeholder{position:absolute;width:100%;text-align:left;color:#8594ad;overflow:hidden;word-break:break-all;white-space:nowrap;text-overflow:ellipsis}.iconContainer{display:flex;align-items:center;text-align:center}.iconContainer .far,.iconContainer .fas{width:10px;cursor:pointer}.disabled .iconContainer .far,.disabled .iconContainer .fas{cursor:inherit;color:#8594ad}.iconContainer .fa-angle-down{margin:0 12px}.iconContainer .fa-times{margin-left:4px}.selection{width:100%;position:absolute;display:flex;align-items:center}.selection.lowerOpacity{opacity:.7}.backdrop{position:fixed;inset:0;z-index:1048}.optionsContainer{position:absolute;left:-1px;right:-1px;padding:0;border-radius:3px;background:#fff;z-index:1001}.defaultSize .inputContainer,.defaultSize .queryInput,.defaultSize .selection,.defaultSize .iconContainer{height:29px}.defaultSize .inputContainer{line-height:29px}.defaultSize .selectionContainer{min-height:29px}.smallSize .inputContainer,.smallSize .queryInput,.smallSize .selection,.smallSize .iconContainer{height:22px}.smallSize .inputContainer{line-height:22px}.smallSize .selectionContainer{min-height:22px}.select2Size .inputContainer,.select2Size .queryInput,.select2Size .selection,.select2Size .iconContainer{height:26px}.select2Size .inputContainer{line-height:26px}.select2Size .selectionContainer{min-height:26px}.largeSize .inputContainer,.largeSize .queryInput,.largeSize .selection,.largeSize .iconContainer{height:40px}.largeSize .inputContainer{line-height:40px}.largeSize .selectionContainer{min-height:40px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MarkInvalidDirective, selector: "[lxMarkInvalid]", inputs: ["lxMarkInvalid"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
231
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: SingleSelectComponent, decorators: [{
232
- type: Component,
233
- args: [{ selector: 'lx-single-select', providers: [
234
- {
235
- provide: NG_VALUE_ACCESSOR,
236
- multi: true,
237
- useExisting: forwardRef(() => SingleSelectComponent)
238
- }
239
- ], template: "<div *ngIf=\"dropdownOpen\" class=\"backdrop\" (click)=\"handleBackdropClick($event)\"></div>\n<div\n [lxMarkInvalid]=\"markInvalid\"\n class=\"selectContainer {{ padding }}Padding\"\n [class.open]=\"dropdownOpen\"\n [class.top]=\"(dropdownDirection$ | async) === 'TOP'\"\n [class.bottom]=\"(dropdownDirection$ | async) === 'BOTTOM'\"\n [class.disabled]=\"disabled\"\n [class.grayBackground]=\"selectionBackground === 'gray'\"\n [class.defaultSize]=\"size === 'default'\"\n [class.smallSize]=\"size === 'small'\"\n [class.select2Size]=\"size === 'select2'\"\n [class.largeSize]=\"size === 'large'\"\n [style.cursor]=\"cursorStyle\"\n [class.focused]=\"isInputFocused\"\n [class.focusedVisible]=\"isInputFocusedViaTab\"\n (click)=\"handleClick($event.target === toggle)\"\n>\n <div class=\"selectionContainer\">\n <div class=\"inputContainer\">\n <div *ngIf=\"!selection && selection !== 0 && !queryInput?.value\" class=\"placeholder\" [attr.title]=\"placeholder\">\n {{ placeholder }}\n </div>\n <div\n *ngIf=\"!allowQuery || !queryInput?.value\"\n class=\"selection\"\n [class.lowerOpacity]=\"allowQuery && !queryInput?.value && dropdownOpen\"\n [class.lightgrayColor]=\"!allowQuery && dropdownOpen\"\n (click)=\"$event.stopPropagation(); focus()\"\n >\n <ng-container *ngTemplateOutlet=\"selectedOptionTmpl\"></ng-container>\n </div>\n <input\n #queryInput\n class=\"queryInput\"\n type=\"text\"\n [class.isHidden]=\"!allowQuery\"\n (keydown.enter)=\"$event.preventDefault()\"\n (focus)=\"isInputFocused = true\"\n (blur)=\"isInputFocused = false; isInputFocusedViaTab = false; blur.emit($event)\"\n (keyup.tab)=\"focusedViaTab()\"\n (keyup.shift.tab)=\"focusedViaTab()\"\n [tabIndex]=\"disabled ? -1 : tabIndex\"\n [formControl]=\"queryControl\"\n [readOnly]=\"!allowQuery\"\n />\n </div>\n <div class=\"iconContainer\">\n <i *ngIf=\"(selection || selection === 0) && allowClear && !disabled\" class=\"far fa-times\" (click)=\"removeSelection()\"></i>\n <i #toggle class=\"fas fa-angle-down\" aria-hidden=\"true\"></i>\n </div>\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 #selectedOption>\n <ng-content select=\".selectedOption\"></ng-content>\n</ng-template>\n<ng-template #dropdown>\n <ng-content select=\".dropdownComponent\"></ng-content>\n</ng-template>\n", styles: [":host ::ng-deep .selectedOption{overflow:hidden;text-overflow:ellipsis}.selectContainer{position:relative;height:auto;padding:0;box-sizing:border-box;background:#fff;border:1px solid #99a5bb;box-shadow:inset 0 1px 1px #00000012;border-radius:3px}.selectContainer.grayBackground{background:#eaedf1;border-color:#eaedf1;box-shadow:none}.selectContainer.open{z-index:1049;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;border-top-left-radius:0;border-top-right-radius:0}.selectContainer.open.top{box-shadow:0 -4px 6px #21252933;border-top:0;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;border-bottom-left-radius:0;border-bottom-right-radius:0;top:none;bottom:100%}.selectContainer:not(.open).focused{outline:0;border:1px solid #5599ff}.selectContainer:not(.open).focusedVisible{outline:1px auto Highlight;outline:1px auto -webkit-focus-ring-color}.selectContainer.disabled{background-color:#eaedf1;cursor:not-allowed!important}.selectContainer.defaultPadding .selectionContainer{padding-left:12px}.selectContainer.narrowPadding .selectionContainer{padding-left:4px}.selectContainer .lightgrayColor{color:#8594ad}.selectionContainer{display:flex}.inputContainer{flex:1;position:relative;white-space:nowrap}.queryInput{width:100%;-webkit-appearance:none;appearance:none;border:0;padding-left:0;background:transparent;position:relative;cursor:inherit}.queryInput::-ms-clear{display:none}.queryInput:focus{outline:0}.queryInput.isHidden{opacity:0}.placeholder{position:absolute;width:100%;text-align:left;color:#8594ad;overflow:hidden;word-break:break-all;white-space:nowrap;text-overflow:ellipsis}.iconContainer{display:flex;align-items:center;text-align:center}.iconContainer .far,.iconContainer .fas{width:10px;cursor:pointer}.disabled .iconContainer .far,.disabled .iconContainer .fas{cursor:inherit;color:#8594ad}.iconContainer .fa-angle-down{margin:0 12px}.iconContainer .fa-times{margin-left:4px}.selection{width:100%;position:absolute;display:flex;align-items:center}.selection.lowerOpacity{opacity:.7}.backdrop{position:fixed;inset:0;z-index:1048}.optionsContainer{position:absolute;left:-1px;right:-1px;padding:0;border-radius:3px;background:#fff;z-index:1001}.defaultSize .inputContainer,.defaultSize .queryInput,.defaultSize .selection,.defaultSize .iconContainer{height:29px}.defaultSize .inputContainer{line-height:29px}.defaultSize .selectionContainer{min-height:29px}.smallSize .inputContainer,.smallSize .queryInput,.smallSize .selection,.smallSize .iconContainer{height:22px}.smallSize .inputContainer{line-height:22px}.smallSize .selectionContainer{min-height:22px}.select2Size .inputContainer,.select2Size .queryInput,.select2Size .selection,.select2Size .iconContainer{height:26px}.select2Size .inputContainer{line-height:26px}.select2Size .selectionContainer{min-height:26px}.largeSize .inputContainer,.largeSize .queryInput,.largeSize .selection,.largeSize .iconContainer{height:40px}.largeSize .inputContainer{line-height:40px}.largeSize .selectionContainer{min-height:40px}\n"] }]
240
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { selection: [{
241
- type: Input
242
- }], selectionBackground: [{
243
- type: Input
244
- }], size: [{
245
- type: Input
246
- }], dropdownWidthScale: [{
247
- type: Input
248
- }], padding: [{
249
- type: Input
250
- }], selectionChange: [{
251
- type: Output
252
- }], blur: [{
253
- type: Output
254
- }], explicitDropdown: [{
255
- type: ContentChild,
256
- args: [SelectDropdownDirective, { read: TemplateRef, static: true }]
257
- }], explicitSelectedOption: [{
258
- type: ContentChild,
259
- args: [SelectedOptionDirective, { read: TemplateRef, static: true }]
260
- }], dropdownComponent: [{
261
- type: ContentChild,
262
- args: [BasicDropdownComponent, { static: false }]
263
- }], implicitSelectedOption: [{
264
- type: ViewChild,
265
- args: ['selectedOption', { static: true }]
266
- }], implicitDropdown: [{
267
- type: ViewChild,
268
- args: ['dropdown', { static: true }]
269
- }], allowClear: [{
270
- type: Input
271
- }], tabIndex: [{
272
- type: Input
273
- }], markInvalid: [{
274
- type: Input
275
- }], queryInput: [{
276
- type: ViewChild,
277
- args: ['queryInput', { static: true }]
278
- }] } });
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL3NpbmdsZS1zZWxlY3Qvc2luZ2xlLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL3NpbmdsZS1zZWxlY3Qvc2luZ2xlLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3hG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c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVxQyxVQUFVO3NCQUFwRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0LCBpbmNsdWRlcywgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3REcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2VsZWN0LWRyb3Bkb3duLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTZWxlY3RlZE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc2VsZWN0ZWQtb3B0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQkFDS1NQQUNFLCBFU0NBUEUsIFRBQiB9IGZyb20gJy4uLy4uL2hlbHBlcnMva2V5LWNvZGVzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRLZXlib2FyZE5hdmlnYXRpb25FdmVudHMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2tleWJvYXJkLW5hdmlnYXRpb24uaGVscGVycyc7XG5pbXBvcnQgeyBCYXNlU2VsZWN0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Jhc2Utc2VsZWN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTaW5nbGVTZWxlY3RQYWRkaW5nIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NpbmdsZS1zZWxlY3QtcGFkZGluZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFzaWNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2ljLWRyb3Bkb3duL2Jhc2ljLWRyb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBLZXlib2FyZFNlbGVjdEFjdGlvbiB9IGZyb20gJy4uL2tleWJvYXJkLXNlbGVjdC5kaXJlY3RpdmUnO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVTZWxlY3RTaXplID0gJ2RlZmF1bHQnIHwgJ3NtYWxsJyB8ICdzZWxlY3QyJyB8ICdsYXJnZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LXNpbmdsZS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJ3NpbmdsZS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnc2luZ2xlLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2luZ2xlU2VsZWN0Q29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaW5nbGVTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlU2VsZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlTmV3Q3Vyc29yUG9zdGlvbk9uS2V5Ym9hcmROYXZpZ2F0aW9uKGN1cnNvclBvc2l0aW9uOiBudW1iZXIsIGtleUNvZGU6IG51bWJlcikge1xuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSBBUlJPV19MRUZUOlxuICAgICAgICBjdXJzb3JQb3NpdGlvbi0tO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQVJST1dfUklHSFQ6XG4gICAgICAgIGN1cnNvclBvc2l0aW9uKys7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gY3Vyc29yUG9zaXRpb247XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEtleWJvYXJkU2VsZWN0QWN0aW9uKGN1cnNvclBvc2l0aW9uOiBudW1iZXIsIGtleUNvZGU6IG51bWJlcik6IEtleWJvYXJkU2VsZWN0QWN0aW9uIHwgbnVsbCB7XG4gICAgaWYgKGN1cnNvclBvc2l0aW9uIDw9IC0xICYmIGtleUNvZGUgPT09IEFSUk9XX1JJR0hUKSB7XG4gICAgICByZXR1cm4gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uTkVYVDtcbiAgICB9XG4gICAgaWYgKGN1cnNvclBvc2l0aW9uID09PSAtMSAmJiBrZXlDb2RlID09PSBBUlJPV19MRUZUKSB7XG4gICAgICByZXR1cm4gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uTEFTVDtcbiAgICB9XG4gICAgaWYgKGN1cnNvclBvc2l0aW9uIDwgLTEgJiYga2V5Q29kZSA9PT0gQVJST1dfTEVGVCkge1xuICAgICAgcmV0dXJuIEtleWJvYXJkU2VsZWN0QWN0aW9uLlBSRVY7XG4gICAgfVxuICAgIGlmIChjdXJzb3JQb3NpdGlvbiA8PSAtMSAmJiBrZXlDb2RlID09PSBCQUNLU1BBQ0UpIHtcbiAgICAgIHJldHVybiBLZXlib2FyZFNlbGVjdEFjdGlvbi5FWEVDVVRFO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNlbGVjdGlvbjogYW55O1xuICBASW5wdXQoKSBzZWxlY3Rpb25CYWNrZ3JvdW5kOiAnd2hpdGUnIHwgJ2dyYXknID0gJ3doaXRlJztcbiAgQElucHV0KCkgc2l6ZTogU2luZ2xlU2VsZWN0U2l6ZSA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgZHJvcGRvd25XaWR0aFNjYWxlOiAnMXgnIHwgJzEuNXgnIHwgJzJ4JyA9ICcxeCc7XG4gIEBJbnB1dCgpIHBhZGRpbmc/OiBTaW5nbGVTZWxlY3RQYWRkaW5nID0gJ2RlZmF1bHQnO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChTZWxlY3REcm9wZG93bkRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pIGV4cGxpY2l0RHJvcGRvd24/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKFNlbGVjdGVkT3B0aW9uRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSkgZXhwbGljaXRTZWxlY3RlZE9wdGlvbj86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoQmFzaWNEcm9wZG93bkNvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIHByaXZhdGUgZHJvcGRvd25Db21wb25lbnQ/OiBCYXNpY0Ryb3Bkb3duQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdGVkT3B0aW9uJywgeyBzdGF0aWM6IHRydWUgfSkgaW1wbGljaXRTZWxlY3RlZE9wdGlvbiE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJywgeyBzdGF0aWM6IHRydWUgfSkgaW1wbGljaXREcm9wZG93biE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgZ2V0IHNlbGVjdGVkT3B0aW9uVG1wbCgpIHtcbiAgICByZXR1cm4gdGhpcy5leHBsaWNpdFNlbGVjdGVkT3B0aW9uIHx8IHRoaXMuaW1wbGljaXRTZWxlY3RlZE9wdGlvbjtcbiAgfVxuXG4gIGdldCBkcm9wZG93blRtcGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwbGljaXREcm9wZG93biB8fCB0aGlzLmltcGxpY2l0RHJvcGRvd247XG4gIH1cblxuICBASW5wdXQoKSBhbGxvd0NsZWFyID0gdHJ1ZTtcbiAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIG1hcmtJbnZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgncXVlcnlJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIHF1ZXJ5SW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIG92ZXJyaWRlIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBpc0lucHV0Rm9jdXNlZFZpYVRhYiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBjdXJzb3JTdHlsZSgpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuICdkZWZhdWx0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxsb3dRdWVyeSkge1xuICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdwb2ludGVyJztcbiAgICB9XG4gIH1cblxuICBnZXQgZHJvcGRvd25XaWR0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAodGhpcy5kcm9wZG93bldpZHRoU2NhbGUpIHtcbiAgICAgIGNhc2UgJzF4JzpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgJzEuNXgnOlxuICAgICAgICByZXR1cm4gJzE1MCUnO1xuICAgICAgY2FzZSAnMngnOlxuICAgICAgICByZXR1cm4gJzIwMCUnO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SW5wdXQoKSB7XG4gICAgdGhpcy5xdWVyeUNvbnRyb2wucmVzZXQoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMucXVlcnlJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBmb2N1c0FuZE9wZW4oKSB7XG4gICAgdGhpcy5xdWVyeUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLm9wZW4ubmV4dCh0cnVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLm9wZW5cbiAgICAgIC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBmaWx0ZXIoKG9wZW4pID0+IG9wZW4gJiYgISF0aGlzLmRyb3Bkb3duQ29tcG9uZW50KSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuc2VsZWN0aW9uKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRldGVybWluZUhpZ2hsaWdodEluZGV4KHRoaXMuZHJvcGRvd25Db21wb25lbnQhLm9wdGlvbnMsIHNlbGVjdGlvbiwgdGhpcy5kcm9wZG93bkNvbXBvbmVudCEuaXRlbUtleSk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQhLnNlbGVjdChpbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Rmlyc3RPcHRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdE9wdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIGtleWJvYXJkIGV2ZW50IGhhbmRsaW5nXG4gICAgY29uc3Qgc291cmNlRWxlbWVudCA9IHRoaXMucXVlcnlJbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIC8vIGhhbmRsZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGZvciB0aGUgc2VsZWN0aW9uXG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHNvdXJjZUVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGV2ZW50KSA9PiB0aGlzLm1hcFRvRXZlbnRTZXQoZXZlbnQsIHNvdXJjZUVsZW1lbnQsIHRoaXMudmlydHVhbEN1cnNvclBvc2l0aW9uKSksXG4gICAgICAgIHRhcCgoZXZlbnRTZXQpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dRdWVyeSAmJiBldmVudFNldC5ldmVudC5rZXlDb2RlICE9PSBCQUNLU1BBQ0UpIHtcbiAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgY2hlY2sgZm9yIGV2ZW4uY29kZSBmb3IgdXNlckV2ZW50IEFQSSBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICBpZiAoZXZlbnRTZXQuZXZlbnQua2V5Q29kZSAhPT0gVEFCICYmIGV2ZW50U2V0LmV2ZW50LmNvZGUgIT09ICdUYWInKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHF1ZXJ5aW5nIGlzIGRpc2FibGVkLCBvbmx5IHRoZSB0YWIga2V5IHByZXNzIGV2ZW50IHdpbGwgYmUgcHJvcGFnYXRlZCwgc28gdGhhdCB5b3UgY2FuIHN0aWxsIGRlZm9jdXMuXG4gICAgICAgICAgICAgIGV2ZW50U2V0LmV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGV2ZW50U2V0LnZpcnR1YWxDdXJzb3JQb3NpdGlvbiA9PT0gMCAmJlxuICAgICAgICAgICAgZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA9PT0gMCAmJlxuICAgICAgICAgICAgZXZlbnRTZXQuZXZlbnQua2V5Q29kZSA9PT0gQkFDS1NQQUNFICYmXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgdGhpcy5hbGxvd0NsZWFyXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA9IHVuZGVmaW5lZDsgLy8gc2V0IHRvIG51bGwgdG8gcHJldmVudCBjb250aW51aW5nIGluIHRoZSBzdHJlYW1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBldmVudFNldC5pbnB1dEN1cnNvclBvc2l0aW9uID09PSAnbnVtYmVyJyAmJiBldmVudFNldC5pbnB1dEN1cnNvclBvc2l0aW9uID4gMCkge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsQ3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnRTZXQudmlydHVhbEN1cnNvclBvc2l0aW9uID09PSAtMSAmJiBldmVudFNldC5ldmVudC5rZXlDb2RlID09PSBBUlJPV19SSUdIVCkge1xuICAgICAgICAgICAgZXZlbnRTZXQuZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5Ym9hcmRTZWxlY3RBY3Rpb24kLm5leHQoS2V5Ym9hcmRTZWxlY3RBY3Rpb24uVU5TRUxFQ1QpO1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsQ3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA9IHVuZGVmaW5lZDsgLy8gc2V0IHRvIG51bGwgdG8gcHJldmVudCBjb250aW51aW5nIGluIHRoZSBzdHJlYW1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBmaWx0ZXIoKGV2ZW50U2V0KSA9PiB0aGlzLmFsbG93UXVlcnkgJiYgZXZlbnRTZXQuaW5wdXRDdXJzb3JQb3NpdGlvbiA9PT0gMCksXG4gICAgICAgIG1hcCgoZXZlbnRTZXQpID0+IGV2ZW50U2V0LmV2ZW50KSxcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gaW5jbHVkZXMoZXZlbnQua2V5Q29kZSwgW0FSUk9XX1JJR0hULCBBUlJPV19MRUZULCBCQUNLU1BBQ0VdKSksXG4gICAgICAgIG1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLnZpcnR1YWxDdXJzb3JQb3NpdGlvbiA9IFNpbmdsZVNlbGVjdENvbXBvbmVudC5jYWxjdWxhdGVOZXdDdXJzb3JQb3N0aW9uT25LZXlib2FyZE5hdmlnYXRpb24oXG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxDdXJzb3JQb3NpdGlvbixcbiAgICAgICAgICAgIGV2ZW50LmtleUNvZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJzb3JQb3NpdGlvbjogdGhpcy52aXJ0dWFsQ3Vyc29yUG9zaXRpb24sXG4gICAgICAgICAgICBldmVudFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKHBvc2l0aW9uU2V0KSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gU2luZ2xlU2VsZWN0Q29tcG9uZW50LmdldEtleWJvYXJkU2VsZWN0QWN0aW9uKHBvc2l0aW9uU2V0LmN1cnNvclBvc2l0aW9uLCBwb3NpdGlvblNldC5ldmVudC5rZXlDb2RlKTtcbiAgICAgICAgICBpZiAoYWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGN1cnNvciBmcm9tIG1vdmluZyBpbiB0aGUgaW5wdXQgZmllbGQsIHdoaWxlIHdlIGFyZSBzdGlsbCBpbiB0aGUgc2VsZWN0aW9uIGl0ZW1zXG4gICAgICAgICAgICBwb3NpdGlvblNldC5ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5zZWxlY3Rpb25LZXlib2FyZFNlbGVjdEFjdGlvbiQpO1xuXG4gICAgY29uc3Qga2V5Ym9hcmRFdmVudHMgPSBnZXRLZXlib2FyZE5hdmlnYXRpb25FdmVudHMoc291cmNlRWxlbWVudCwgdGhpcy5kZXN0cm95ZWQkKTtcblxuICAgIGtleWJvYXJkRXZlbnRzLnZlcnRpY2FsTmF2aWdhdGlvbiQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcblxuICAgIGtleWJvYXJkRXZlbnRzLmNsb3NlJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFICYmIHRoaXMuZHJvcGRvd25PcGVuKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGVuLm5leHQoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAga2V5Ym9hcmRFdmVudHMuZHJvcGRvd25LZXlib2FyZEV2ZW50JC5zdWJzY3JpYmUodGhpcy5vcHRpb25zS2V5Ym9hcmRTZWxlY3RBY3Rpb24kKTtcblxuICAgIGtleWJvYXJkRXZlbnRzLmVudGVyJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vcGVuLm5leHQoIXRoaXMuZHJvcGRvd25PcGVuKSk7XG4gICAga2V5Ym9hcmRFdmVudHMuc3BhY2UkLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLmFsbG93UXVlcnkpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZHJvcGRvd25PcGVuKSB7XG4gICAgICAgIHRoaXMub3B0aW9uc0tleWJvYXJkU2VsZWN0QWN0aW9uJC5uZXh0KEtleWJvYXJkU2VsZWN0QWN0aW9uLkVYRUNVVEUpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGVuLm5leHQoIXRoaXMuZHJvcGRvd25PcGVuKTtcbiAgICB9KTtcblxuICAgIGtleWJvYXJkRXZlbnRzLm9wZW5PbkFycm93RG93biQuc3Vic2NyaWJlKCgpID0+IHRoaXMub3Blbi5uZXh0KHRydWUpKTtcbiAgfVxuXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IGFueSkge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gb3B0aW9uO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChvcHRpb24pO1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG9wdGlvbik7XG5cbiAgICB0aGlzLnJlc2V0U2VsZWN0U3RhdGUoKTtcblxuICAgIC8vIFRoaXMgdGltZW91dCBtYWtlcyBzdXJlIHRoYXQgdGhlIGRyb3Bkb3duIHdpbGwgYmUgY2xvc2VkIGF0IHRoZSBlbmRcbiAgICAvLyBvZiBhbGwgdGhlIGNhbGxiYWNrcyBpbiB0aGUgb3BlbiBzdWJzY3JpcHRpb25zLlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vcGVuLm5leHQoZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5zZWxlY3Rpb24pO1xuXG4gICAgdGhpcy5yZXNldFNlbGVjdFN0YXRlKCk7XG4gIH1cblxuICBwcm9wYWdhdGVDaGFuZ2UoX3ZhbHVlOiBhbnkpIHt9XG5cbiAgd3JpdGVWYWx1ZShuZXdTZWxlY3Rpb246IGFueSkge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoX2ZuOiBhbnkpIHt9XG5cbiAgZm9jdXNlZFZpYVRhYigpIHtcbiAgICB0aGlzLmlzSW5wdXRGb2N1c2VkVmlhVGFiID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lSGlnaGxpZ2h0SW5kZXgob3B0aW9uczogYW55W10sIHNlbGVjdGlvbjogYW55LCBpdGVtS2V5Pzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW1LZXlcbiAgICAgID8gb3B0aW9ucy5maW5kSW5kZXgoKG9wdGlvbikgPT4gaXNFcXVhbChnZXQoaXRlbUtleSwgc2VsZWN0aW9uKSwgZ2V0KGl0ZW1LZXksIG9wdGlvbikpIHx8IGlzRXF1YWwoc2VsZWN0aW9uLCBnZXQoaXRlbUtleSwgb3B0aW9uKSkpXG4gICAgICA6IG9wdGlvbnMuZmluZEluZGV4KChvcHRpb24pID0+IGlzRXF1YWwoc2VsZWN0aW9uLCBvcHRpb24pKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImRyb3Bkb3duT3BlblwiIGNsYXNzPVwiYmFja2Ryb3BcIiAoY2xpY2spPVwiaGFuZGxlQmFja2Ryb3BDbGljaygkZXZlbnQpXCI+PC9kaXY+XG48ZGl2XG4gIFtseE1hcmtJbnZhbGlkXT1cIm1hcmtJbnZhbGlkXCJcbiAgY2xhc3M9XCJzZWxlY3RDb250YWluZXIge3sgcGFkZGluZyB9fVBhZGRpbmdcIlxuICBbY2xhc3Mub3Blbl09XCJkcm9wZG93bk9wZW5cIlxuICBbY2xhc3MudG9wXT1cIihkcm9wZG93bkRpcmVjdGlvbiQgfCBhc3luYykgPT09ICdUT1AnXCJcbiAgW2NsYXNzLmJvdHRvbV09XCIoZHJvcGRvd25EaXJlY3Rpb24kIHwgYXN5bmMpID09PSAnQk9UVE9NJ1wiXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtjbGFzcy5ncmF5QmFja2dyb3VuZF09XCJzZWxlY3Rpb25CYWNrZ3JvdW5kID09PSAnZ3JheSdcIlxuICBbY2xhc3MuZGVmYXVsdFNpemVdPVwic2l6ZSA9PT0gJ2RlZmF1bHQnXCJcbiAgW2NsYXNzLnNtYWxsU2l6ZV09XCJzaXplID09PSAnc21hbGwnXCJcbiAgW2NsYXNzLnNlbGVjdDJTaXplXT1cInNpemUgPT09ICdzZWxlY3QyJ1wiXG4gIFtjbGFzcy5sYXJnZVNpemVdPVwic2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gIFtzdHlsZS5jdXJzb3JdPVwiY3Vyc29yU3R5bGVcIlxuICBbY2xhc3MuZm9jdXNlZF09XCJpc0lucHV0Rm9jdXNlZFwiXG4gIFtjbGFzcy5mb2N1c2VkVmlzaWJsZV09XCJpc0lucHV0Rm9jdXNlZFZpYVRhYlwiXG4gIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQudGFyZ2V0ID09PSB0b2dnbGUpXCJcbj5cbiAgPGRpdiBjbGFzcz1cInNlbGVjdGlvbkNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dENvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdJZj1cIiFzZWxlY3Rpb24gJiYgc2VsZWN0aW9uICE9PSAwICYmICFxdWVyeUlucHV0Py52YWx1ZVwiIGNsYXNzPVwicGxhY2Vob2xkZXJcIiBbYXR0ci50aXRsZV09XCJwbGFjZWhvbGRlclwiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWFsbG93UXVlcnkgfHwgIXF1ZXJ5SW5wdXQ/LnZhbHVlXCJcbiAgICAgICAgY2xhc3M9XCJzZWxlY3Rpb25cIlxuICAgICAgICBbY2xhc3MubG93ZXJPcGFjaXR5XT1cImFsbG93UXVlcnkgJiYgIXF1ZXJ5SW5wdXQ/LnZhbHVlICYmIGRyb3Bkb3duT3BlblwiXG4gICAgICAgIFtjbGFzcy5saWdodGdyYXlDb2xvcl09XCIhYWxsb3dRdWVyeSAmJiBkcm9wZG93bk9wZW5cIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmb2N1cygpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdGVkT3B0aW9uVG1wbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI3F1ZXJ5SW5wdXRcbiAgICAgICAgY2xhc3M9XCJxdWVyeUlucHV0XCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbY2xhc3MuaXNIaWRkZW5dPVwiIWFsbG93UXVlcnlcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgIChmb2N1cyk9XCJpc0lucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgICAoYmx1cik9XCJpc0lucHV0Rm9jdXNlZCA9IGZhbHNlOyBpc0lucHV0Rm9jdXNlZFZpYVRhYiA9IGZhbHNlOyBibHVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChrZXl1cC50YWIpPVwiZm9jdXNlZFZpYVRhYigpXCJcbiAgICAgICAgKGtleXVwLnNoaWZ0LnRhYik9XCJmb2N1c2VkVmlhVGFiKClcIlxuICAgICAgICBbdGFiSW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4XCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cInF1ZXJ5Q29udHJvbFwiXG4gICAgICAgIFtyZWFkT25seV09XCIhYWxsb3dRdWVyeVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpY29uQ29udGFpbmVyXCI+XG4gICAgICA8aSAqbmdJZj1cIihzZWxlY3Rpb24gfHwgc2VsZWN0aW9uID09PSAwKSAmJiBhbGxvd0NsZWFyICYmICFkaXNhYmxlZFwiIGNsYXNzPVwiZmFyIGZhLXRpbWVzXCIgKGNsaWNrKT1cInJlbW92ZVNlbGVjdGlvbigpXCI+PC9pPlxuICAgICAgPGkgI3RvZ2dsZSBjbGFzcz1cImZhcyBmYS1hbmdsZS1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm9wdGlvbnNDb250YWluZXJcIiBbc3R5bGUud2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiICNvcHRpb25zQ29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcm9wZG93bk9wZW5cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blRtcGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzZWxlY3RlZE9wdGlvbj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnNlbGVjdGVkT3B0aW9uXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd24+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5kcm9wZG93bkNvbXBvbmVudFwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,129 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output, SecurityContext } from '@angular/core';
2
- import { intersection, isNil } from 'lodash-es';
3
- import { NbspPipe } from '../../core-ui/pipes/nbsp.pipe';
4
- import { trimHtml } from '../../shared/html-helpers.function';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/platform-browser";
7
- // First version based on https://stackoverflow.com/a/41253897/6813271
8
- export class ContenteditableDirective {
9
- constructor(elRef, sanitizer) {
10
- this.elRef = elRef;
11
- this.sanitizer = sanitizer;
12
- this.lxContenteditableModelChange = new EventEmitter();
13
- /** Allow (sanitized) html */
14
- this.lxContenteditableHtml = false;
15
- this.lxContenteditableHtmlPaste = true;
16
- this.emittedValue = null;
17
- }
18
- ngOnChanges(changes) {
19
- if (changes['lxContenteditableModel']) {
20
- // On init: if lxContenteditableModel is empty, read from DOM in case the element has content
21
- if (changes['lxContenteditableModel'].isFirstChange() && !this.lxContenteditableModel) {
22
- // Prevent Exp.HasChanged: Don't read and emit value from DOM during change detection
23
- setTimeout(() => {
24
- this.onInput(true);
25
- });
26
- }
27
- this.refreshView();
28
- }
29
- }
30
- onInput(initialInlineData = false) {
31
- let value = this.elRef.nativeElement[this.getProperty()];
32
- value = this.cleanContent(value, initialInlineData);
33
- this.emittedValue = value;
34
- this.lxContenteditableModelChange.emit(value);
35
- }
36
- /**
37
- * @param event {ClipboardEvent}
38
- */
39
- onPaste(event) {
40
- const clipboardEvent = event;
41
- this.onInput();
42
- // For text-only contenteditable, remove pasted HTML.
43
- if (!this.lxContenteditableHtml || !this.lxContenteditableHtmlPaste) {
44
- let isHtml = true;
45
- // TODO: Use beforepaste event. See https://www.lucidchart.com/techblog/2014/12/02/definitive-guide-copying-pasting-javascript/.
46
- if (clipboardEvent.clipboardData && clipboardEvent.clipboardData.types) {
47
- const types = [].slice.apply(clipboardEvent.clipboardData.types);
48
- isHtml = intersection(types, ['text/html', 'com.apple.webarchive']).length > 0;
49
- }
50
- if (isHtml) {
51
- // 1 tick wait is required for DOM update
52
- setTimeout(() => {
53
- // Cursor will be lost
54
- // The lint disabling here should be clearified. See if and how this directive is needed.
55
- this.elRef.nativeElement.innerHTML = this.sanitizer.sanitize(SecurityContext.HTML, this.elRef.nativeElement.innerText.replace(/\n/g, '<br />'));
56
- });
57
- }
58
- }
59
- }
60
- onDrop(event) {
61
- this.onInput();
62
- // For text-only contenteditable, don't allow drop content.
63
- if (!this.lxContenteditableHtml || !this.lxContenteditableHtmlPaste) {
64
- event.preventDefault();
65
- event.stopPropagation();
66
- return false;
67
- }
68
- return;
69
- }
70
- cleanContent(value, initialInlineData = false) {
71
- if (this.lxContenteditableHtml === 'trim' || (this.lxContenteditableHtml && initialInlineData)) {
72
- value = trimHtml(value);
73
- }
74
- else if (initialInlineData && !this.lxContenteditableHtml && value) {
75
- value = value.replace(/^[\n\s]+/, '');
76
- value = value.replace(/[\n\s]+$/, '');
77
- }
78
- // Some browsers like Chrome insert nbsp; when using contentEditable attribute
79
- return new NbspPipe().transform(value);
80
- }
81
- refreshView() {
82
- if (!isNil(this.lxContenteditableModel)) {
83
- const newContent = this.cleanContent(this.lxContenteditableModel);
84
- // Only refresh if content changed to avoid cursor loss
85
- // (as ngOnChanges can be triggered an additional time by onInput())
86
- if (this.emittedValue === null || this.emittedValue !== newContent) {
87
- this.elRef.nativeElement[this.getProperty()] = this.sanitize(newContent);
88
- }
89
- }
90
- }
91
- getProperty() {
92
- return this.lxContenteditableHtml ? 'innerHTML' : 'innerText';
93
- }
94
- sanitize(content) {
95
- return this.lxContenteditableHtml ? this.sanitizer.sanitize(SecurityContext.HTML, content) : content;
96
- }
97
- }
98
- ContenteditableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ContenteditableDirective, deps: [{ token: i0.ElementRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Directive });
99
- ContenteditableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: ContenteditableDirective, selector: "[lxContenteditableModel]", inputs: { lxContenteditableModel: "lxContenteditableModel", lxContenteditableHtml: "lxContenteditableHtml", lxContenteditableHtmlPaste: "lxContenteditableHtmlPaste" }, outputs: { lxContenteditableModelChange: "lxContenteditableModelChange" }, host: { listeners: { "input": "onInput()", "blur": "onInput()", "keyup": "onInput()", "paste": "onPaste($event)", "drop": "onDrop($event)" } }, usesOnChanges: true, ngImport: i0 });
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ContenteditableDirective, decorators: [{
101
- type: Directive,
102
- args: [{
103
- selector: '[lxContenteditableModel]'
104
- }]
105
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DomSanitizer }]; }, propDecorators: { lxContenteditableModel: [{
106
- type: Input
107
- }], lxContenteditableModelChange: [{
108
- type: Output
109
- }], lxContenteditableHtml: [{
110
- type: Input
111
- }], lxContenteditableHtmlPaste: [{
112
- type: Input
113
- }], onInput: [{
114
- type: HostListener,
115
- args: ['input']
116
- }, {
117
- type: HostListener,
118
- args: ['blur']
119
- }, {
120
- type: HostListener,
121
- args: ['keyup']
122
- }], onPaste: [{
123
- type: HostListener,
124
- args: ['paste', ['$event']]
125
- }], onDrop: [{
126
- type: HostListener,
127
- args: ['drop', ['$event']]
128
- }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2RpcmVjdGl2ZXMvY29udGVudGVkaXRhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxlQUFlLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTVJLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7OztBQUU5RCxzRUFBc0U7QUFJdEUsTUFBTSxPQUFPLHdCQUF3QjtJQVVuQyxZQUFvQixLQUE4QixFQUFVLFNBQXVCO1FBQS9ELFVBQUssR0FBTCxLQUFLLENBQXlCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQVB6RSxpQ0FBNEIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3BFLDZCQUE2QjtRQUNwQiwwQkFBcUIsR0FBcUIsS0FBSyxDQUFDO1FBQ2hELCtCQUEwQixHQUFZLElBQUksQ0FBQztRQUU1QyxpQkFBWSxHQUFrQixJQUFJLENBQUM7SUFFMkMsQ0FBQztJQUV2RixXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFBRTtZQUNyQyw2RkFBNkY7WUFDN0YsSUFBSSxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtnQkFDckYscUZBQXFGO2dCQUNyRixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FB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T0FBTztnQkFXYyxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF5QkMsTUFBTTtzQkFBdkMsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNlY3VyaXR5Q29udGV4dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBpbnRlcnNlY3Rpb24sIGlzTmlsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE5ic3BQaXBlIH0gZnJvbSAnLi4vLi4vY29yZS11aS9waXBlcy9uYnNwLnBpcGUnO1xuaW1wb3J0IHsgdHJpbUh0bWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvaHRtbC1oZWxwZXJzLmZ1bmN0aW9uJztcblxuLy8gRmlyc3QgdmVyc2lvbiBiYXNlZCBvbiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDEyNTM4OTcvNjgxMzI3MVxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2x4Q29udGVudGVkaXRhYmxlTW9kZWxdJ1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50ZWRpdGFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKiogTW9kZWwgKi9cbiAgQElucHV0KCkgbHhDb250ZW50ZWRpdGFibGVNb2RlbCE6IHN0cmluZztcbiAgQE91dHB1dCgpIGx4Q29udGVudGVkaXRhYmxlTW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEFsbG93IChzYW5pdGl6ZWQpIGh0bWwgKi9cbiAgQElucHV0KCkgbHhDb250ZW50ZWRpdGFibGVIdG1sOiBib29sZWFuIHwgJ3RyaW0nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGx4Q29udGVudGVkaXRhYmxlSHRtbFBhc3RlOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcml2YXRlIGVtaXR0ZWRWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydseENvbnRlbnRlZGl0YWJsZU1vZGVsJ10pIHtcbiAgICAgIC8vIE9uIGluaXQ6IGlmIGx4Q29udGVudGVkaXRhYmxlTW9kZWwgaXMgZW1wdHksIHJlYWQgZnJvbSBET00gaW4gY2FzZSB0aGUgZWxlbWVudCBoYXMgY29udGVudFxuICAgICAgaWYgKGNoYW5nZXNbJ2x4Q29udGVudGVkaXRhYmxlTW9kZWwnXS5pc0ZpcnN0Q2hhbmdlKCkgJiYgIXRoaXMubHhDb250ZW50ZWRpdGFibGVNb2RlbCkge1xuICAgICAgICAvLyBQcmV2ZW50IEV4cC5IYXNDaGFuZ2VkOiBEb24ndCByZWFkIGFuZCBlbWl0IHZhbHVlIGZyb20gRE9NIGR1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25JbnB1dCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAnKVxuICBvbklucHV0KGluaXRpYWxJbmxpbmVEYXRhID0gZmFsc2UpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRbdGhpcy5nZXRQcm9wZXJ0eSgpXSBhcyBzdHJpbmc7XG4gICAgdmFsdWUgPSB0aGlzLmNsZWFuQ29udGVudCh2YWx1ZSwgaW5pdGlhbElubGluZURhdGEpO1xuICAgIHRoaXMuZW1pdHRlZFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5seENvbnRlbnRlZGl0YWJsZU1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBldmVudCB7Q2xpcGJvYXJkRXZlbnR9XG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pIG9uUGFzdGUoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNsaXBib2FyZEV2ZW50ID0gZXZlbnQgYXMgQ2xpcGJvYXJkRXZlbnQ7XG4gICAgdGhpcy5vbklucHV0KCk7XG4gICAgLy8gRm9yIHRleHQtb25seSBjb250ZW50ZWRpdGFibGUsIHJlbW92ZSBwYXN0ZWQgSFRNTC5cbiAgICBpZiAoIXRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sIHx8ICF0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbFBhc3RlKSB7XG4gICAgICBsZXQgaXNIdG1sOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgIC8vIFRPRE86IFVzZSBiZWZvcmVwYXN0ZSBldmVudC4gU2VlIGh0dHBzOi8vd3d3Lmx1Y2lkY2hhcnQuY29tL3RlY2hibG9nLzIwMTQvMTIvMDIvZGVmaW5pdGl2ZS1ndWlkZS1jb3B5aW5nLXBhc3RpbmctamF2YXNjcmlwdC8uXG4gICAgICBpZiAoY2xpcGJvYXJkRXZlbnQuY2xpcGJvYXJkRGF0YSAmJiBjbGlwYm9hcmRFdmVudC5jbGlwYm9hcmREYXRhLnR5cGVzKSB7XG4gICAgICAgIGNvbnN0IHR5cGVzID0gW10uc2xpY2UuYXBwbHkoY2xpcGJvYXJkRXZlbnQuY2xpcGJvYXJkRGF0YS50eXBlcyk7XG4gICAgICAgIGlzSHRtbCA9IGludGVyc2VjdGlvbih0eXBlcywgWyd0ZXh0L2h0bWwnLCAnY29tLmFwcGxlLndlYmFyY2hpdmUnXSkubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0h0bWwpIHtcbiAgICAgICAgLy8gMSB0aWNrIHdhaXQgaXMgcmVxdWlyZWQgZm9yIERPTSB1cGRhdGVcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gQ3Vyc29yIHdpbGwgYmUgbG9zdFxuICAgICAgICAgIC8vIFRoZSBsaW50IGRpc2FibGluZyBoZXJlIHNob3VsZCBiZSBjbGVhcmlmaWVkLiBTZWUgaWYgYW5kIGhvdyB0aGlzIGRpcmVjdGl2ZSBpcyBuZWVkZWQuXG4gICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMuc2FuaXRpemVyLnNhbml0aXplKFxuICAgICAgICAgICAgU2VjdXJpdHlDb250ZXh0LkhUTUwsXG4gICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0LnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+JylcbiAgICAgICAgICApITtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pIG9uRHJvcChldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMub25JbnB1dCgpO1xuICAgIC8vIEZvciB0ZXh0LW9ubHkgY29udGVudGVkaXRhYmxlLCBkb24ndCBhbGxvdyBkcm9wIGNvbnRlbnQuXG4gICAgaWYgKCF0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbCB8fCAhdGhpcy5seENvbnRlbnRlZGl0YWJsZUh0bWxQYXN0ZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5Db250ZW50KHZhbHVlOiBzdHJpbmcsIGluaXRpYWxJbmxpbmVEYXRhID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbCA9PT0gJ3RyaW0nIHx8ICh0aGlzLmx4Q29udGVudGVkaXRhYmxlSHRtbCAmJiBpbml0aWFsSW5saW5lRGF0YSkpIHtcbiAgICAgIHZhbHVlID0gdHJpbUh0bWwodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbElubGluZURhdGEgJiYgIXRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sICYmIHZhbHVlKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15bXFxuXFxzXSsvLCAnJyk7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1tcXG5cXHNdKyQvLCAnJyk7XG4gICAgfVxuICAgIC8vIFNvbWUgYnJvd3NlcnMgbGlrZSBDaHJvbWUgaW5zZXJ0IG5ic3A7IHdoZW4gdXNpbmcgY29udGVudEVkaXRhYmxlIGF0dHJpYnV0ZVxuICAgIHJldHVybiBuZXcgTmJzcFBpcGUoKS50cmFuc2Zvcm0odmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoVmlldygpIHtcbiAgICBpZiAoIWlzTmlsKHRoaXMubHhDb250ZW50ZWRpdGFibGVNb2RlbCkpIHtcbiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSB0aGlzLmNsZWFuQ29udGVudCh0aGlzLmx4Q29udGVudGVkaXRhYmxlTW9kZWwpO1xuICAgICAgLy8gT25seSByZWZyZXNoIGlmIGNvbnRlbnQgY2hhbmdlZCB0byBhdm9pZCBjdXJzb3IgbG9zc1xuICAgICAgLy8gKGFzIG5nT25DaGFuZ2VzIGNhbiBiZSB0cmlnZ2VyZWQgYW4gYWRkaXRpb25hbCB0aW1lIGJ5IG9uSW5wdXQoKSlcbiAgICAgIGlmICh0aGlzLmVtaXR0ZWRWYWx1ZSA9PT0gbnVsbCB8fCB0aGlzLmVtaXR0ZWRWYWx1ZSAhPT0gbmV3Q29udGVudCkge1xuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnRbdGhpcy5nZXRQcm9wZXJ0eSgpXSA9IHRoaXMuc2FuaXRpemUobmV3Q29udGVudCkhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvcGVydHkoKTogJ2lubmVySFRNTCcgfCAnaW5uZXJUZXh0JyB7XG4gICAgcmV0dXJuIHRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sID8gJ2lubmVySFRNTCcgOiAnaW5uZXJUZXh0JztcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemUoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMubHhDb250ZW50ZWRpdGFibGVIdG1sID8gdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGNvbnRlbnQpIDogY29udGVudDtcbiAgfVxufVxuIl19