@elderbyte/ngx-starter 14.5.3 → 14.7.0

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 (317) hide show
  1. package/esm2020/lib/common/data/data-context/data-context-active-page.mjs +1 -1
  2. package/esm2020/lib/common/data/data-context/data-context-base.mjs +2 -2
  3. package/esm2020/lib/common/data/data-context/data-context-continuable-base.mjs +1 -1
  4. package/esm2020/lib/common/data/data-context/data-context.mjs +1 -1
  5. package/esm2020/lib/common/data/datasource/data-source-adapter.mjs +1 -1
  6. package/esm2020/lib/common/data/datasource/data-source-processor.mjs +1 -1
  7. package/esm2020/lib/common/data/datasource/data-source.mjs +1 -1
  8. package/esm2020/lib/common/data/datasource/fetcher/delegate-data-source.mjs +1 -1
  9. package/esm2020/lib/common/data/datasource/local/local-list-data-source.mjs +1 -1
  10. package/esm2020/lib/common/data/datasource/local/local-paged-data-source.mjs +1 -1
  11. package/esm2020/lib/common/data/datasource/rest/rest-client.mjs +2 -2
  12. package/esm2020/lib/common/data/filters/filter-context.mjs +141 -0
  13. package/esm2020/lib/common/data/filters/filter.mjs +109 -0
  14. package/esm2020/lib/common/data/http-params-builder.mjs +2 -2
  15. package/esm2020/lib/common/data/public_api.mjs +3 -3
  16. package/esm2020/lib/common/data/required-filter-evaluator.mjs +1 -1
  17. package/esm2020/lib/common/data/token-chunk-request.mjs +1 -1
  18. package/esm2020/lib/common/enums/elder-enum-translation.service.mjs +3 -3
  19. package/esm2020/lib/common/forms/elder-form-field-control-base.directive.mjs +3 -3
  20. package/esm2020/lib/common/forms/elder-from-field-base.mjs +3 -3
  21. package/esm2020/lib/common/forms/elder-from-field-entity-base.mjs +3 -3
  22. package/esm2020/lib/common/forms/elder-from-field-multi-entity-base.mjs +3 -3
  23. package/esm2020/lib/common/forms/form-field-base.component.mjs +3 -3
  24. package/esm2020/lib/common/forms/multi-model-base.component.mjs +3 -3
  25. package/esm2020/lib/common/forms/template-composite-control.mjs +3 -3
  26. package/esm2020/lib/common/forms/value-accessor-base.mjs +3 -3
  27. package/esm2020/lib/common/http/http-client-builder.service.mjs +3 -3
  28. package/esm2020/lib/common/http/http-client-pristine.mjs +3 -3
  29. package/esm2020/lib/common/http/transfer/data-transfer-factory.mjs +3 -3
  30. package/esm2020/lib/common/url/elder-url-fragment-params.service.mjs +3 -3
  31. package/esm2020/lib/common/utils/filter-util.mjs +1 -1
  32. package/esm2020/lib/components/access-denied/elder-access-denied.component.mjs +3 -3
  33. package/esm2020/lib/components/access-denied/elder-access-denied.module.mjs +4 -4
  34. package/esm2020/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +8 -5
  35. package/esm2020/lib/components/auditing/elder-audit.module.mjs +4 -4
  36. package/esm2020/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +3 -3
  37. package/esm2020/lib/components/button-group/elder-button-group.module.mjs +4 -4
  38. package/esm2020/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +3 -3
  39. package/esm2020/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +3 -3
  40. package/esm2020/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +3 -3
  41. package/esm2020/lib/components/card-organizer/elder-card-organizer.module.mjs +4 -4
  42. package/esm2020/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +3 -3
  43. package/esm2020/lib/components/cards/elder-card/elder-card.component.mjs +18 -18
  44. package/esm2020/lib/components/cards/elder-card/elder-card.module.mjs +4 -4
  45. package/esm2020/lib/components/connectivity/elder-connectivity.module.mjs +4 -4
  46. package/esm2020/lib/components/connectivity/elder-connectivity.service.mjs +3 -3
  47. package/esm2020/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +3 -3
  48. package/esm2020/lib/components/containers/elder-containers.module.mjs +4 -4
  49. package/esm2020/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +3 -3
  50. package/esm2020/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +4 -4
  51. package/esm2020/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +3 -3
  52. package/esm2020/lib/components/csv/elder-csv-stream-exporter.mjs +1 -1
  53. package/esm2020/lib/components/csv/elder-csv.module.mjs +4 -4
  54. package/esm2020/lib/components/currency/elder-currency.module.mjs +4 -4
  55. package/esm2020/lib/components/currency/elder-currency.pipe.mjs +3 -3
  56. package/esm2020/lib/components/data-transfer/elder-data-transfer.module.mjs +4 -4
  57. package/esm2020/lib/components/data-transfer/elder-data-transfer.service.mjs +3 -3
  58. package/esm2020/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +3 -3
  59. package/esm2020/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +3 -3
  60. package/esm2020/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +3 -3
  61. package/esm2020/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +3 -3
  62. package/esm2020/lib/components/data-view/base/elder-data-view-base.mjs +3 -3
  63. package/esm2020/lib/components/data-view/base/elder-data-view-options.mjs +1 -1
  64. package/esm2020/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +3 -3
  65. package/esm2020/lib/components/data-view/common/elder-data-common.module.mjs +4 -4
  66. package/esm2020/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +6 -6
  67. package/esm2020/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +3 -3
  68. package/esm2020/lib/components/data-view/common/selection/data-context-selection.directive.mjs +3 -3
  69. package/esm2020/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +3 -3
  70. package/esm2020/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +9 -9
  71. package/esm2020/lib/components/data-view/grid/elder-grid.module.mjs +4 -4
  72. package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +3 -3
  73. package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +4 -4
  74. package/esm2020/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +3 -3
  75. package/esm2020/lib/components/data-view/table/elder-number-cell.directive.mjs +3 -3
  76. package/esm2020/lib/components/data-view/table/elder-paginator-intl.mjs +3 -3
  77. package/esm2020/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +3 -3
  78. package/esm2020/lib/components/data-view/table/elder-table/elder-table.component.mjs +3 -3
  79. package/esm2020/lib/components/data-view/table/elder-table-column.directive.mjs +3 -3
  80. package/esm2020/lib/components/data-view/table/elder-table-extension.directive.mjs +3 -3
  81. package/esm2020/lib/components/data-view/table/elder-table-root.directive.mjs +3 -3
  82. package/esm2020/lib/components/data-view/table/elder-table-row.directive.mjs +3 -3
  83. package/esm2020/lib/components/data-view/table/elder-table-sort.directive.mjs +3 -3
  84. package/esm2020/lib/components/data-view/table/elder-table.module.mjs +4 -4
  85. package/esm2020/lib/components/data-view/table/model/elder-table-model.mjs +3 -3
  86. package/esm2020/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +3 -3
  87. package/esm2020/lib/components/dialogs/elder-dialog.module.mjs +7 -7
  88. package/esm2020/lib/components/dialogs/elder-dialog.service.mjs +3 -3
  89. package/esm2020/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +3 -3
  90. package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +3 -3
  91. package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +3 -3
  92. package/esm2020/lib/components/errors/elder-error.module.mjs +4 -4
  93. package/esm2020/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +3 -3
  94. package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +3 -3
  95. package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +4 -4
  96. package/esm2020/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +3 -3
  97. package/esm2020/lib/components/files/elder-file-drop-zone.directive.mjs +3 -3
  98. package/esm2020/lib/components/files/elder-file-select.directive.mjs +3 -3
  99. package/esm2020/lib/components/files/elder-file.module.mjs +4 -4
  100. package/esm2020/lib/components/files/file-select/file-select.component.mjs +3 -3
  101. package/esm2020/lib/components/files/file-upload/file-upload.component.mjs +3 -3
  102. package/esm2020/lib/components/forms/clipboard/elder-clipboard.service.mjs +3 -3
  103. package/esm2020/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +3 -3
  104. package/esm2020/lib/components/forms/directives/elder-clipboard-put.directive.mjs +3 -3
  105. package/esm2020/lib/components/forms/directives/elder-delayed-focus.directive.mjs +3 -3
  106. package/esm2020/lib/components/forms/directives/elder-form-field-dense.directive.mjs +3 -3
  107. package/esm2020/lib/components/forms/directives/elder-form-field-label.directive.mjs +3 -3
  108. package/esm2020/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +3 -3
  109. package/esm2020/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +3 -3
  110. package/esm2020/lib/components/forms/directives/elder-forms-directives.module.mjs +13 -13
  111. package/esm2020/lib/components/forms/directives/elder-input-pattern.directive.mjs +3 -3
  112. package/esm2020/lib/components/forms/directives/elder-key-event.directive.mjs +3 -3
  113. package/esm2020/lib/components/forms/directives/elder-max.directive.mjs +3 -3
  114. package/esm2020/lib/components/forms/directives/elder-min.directive.mjs +3 -3
  115. package/esm2020/lib/components/forms/directives/elder-next-focusable.directive.mjs +3 -3
  116. package/esm2020/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +3 -3
  117. package/esm2020/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +3 -3
  118. package/esm2020/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +3 -3
  119. package/esm2020/lib/components/forms/directives/elder-touched.directive.mjs +3 -3
  120. package/esm2020/lib/components/forms/directives/elder-triple-state-checkbox.directive.mjs +3 -3
  121. package/esm2020/lib/components/forms/directives/validation/elder-multiple-of.validator.mjs +3 -3
  122. package/esm2020/lib/components/forms/directives/validation/elder-required-ignore-zero.validator.mjs +3 -3
  123. package/esm2020/lib/components/forms/elder-forms.module.mjs +4 -4
  124. package/esm2020/lib/components/forms/search/elder-search-context.directive.mjs +35 -21
  125. package/esm2020/lib/components/forms/search/elder-search-input.directive.mjs +9 -15
  126. package/esm2020/lib/components/forms/search/elder-search.module.mjs +4 -4
  127. package/esm2020/lib/components/forms/search/search-box/elder-search-box.component.mjs +3 -3
  128. package/esm2020/lib/components/forms/search/search-box/elder-search-panel.component.mjs +3 -3
  129. package/esm2020/lib/components/global-search/elder-global-search.component.mjs +3 -3
  130. package/esm2020/lib/components/global-search/elder-global-search.module.mjs +4 -4
  131. package/esm2020/lib/components/global-search/elder-global-search.service.mjs +3 -3
  132. package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +3 -3
  133. package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +4 -4
  134. package/esm2020/lib/components/headers/elder-header/elder-header.component.mjs +3 -3
  135. package/esm2020/lib/components/headers/elder-header.module.mjs +4 -4
  136. package/esm2020/lib/components/http-support/elder-http-client.service.mjs +4 -4
  137. package/esm2020/lib/components/i18n/entities/elder-i18n-entities.module.mjs +4 -4
  138. package/esm2020/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +3 -3
  139. package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +3 -3
  140. package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +3 -3
  141. package/esm2020/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +3 -3
  142. package/esm2020/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +3 -3
  143. package/esm2020/lib/components/i18n/entities/elder-localized-texts.directive.mjs +3 -3
  144. package/esm2020/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +3 -3
  145. package/esm2020/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +3 -3
  146. package/esm2020/lib/components/i18n/entities/picker/localisation-picker.service.mjs +3 -3
  147. package/esm2020/lib/components/i18n/language/elder-language-interceptor.mjs +3 -3
  148. package/esm2020/lib/components/i18n/language/elder-language.module.mjs +4 -4
  149. package/esm2020/lib/components/i18n/language/elder-language.service.mjs +3 -3
  150. package/esm2020/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +3 -3
  151. package/esm2020/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +4 -4
  152. package/esm2020/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +3 -3
  153. package/esm2020/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +3 -3
  154. package/esm2020/lib/components/iframes/elder-iframe.module.mjs +4 -4
  155. package/esm2020/lib/components/iframes/iframe-close.directive.mjs +3 -3
  156. package/esm2020/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +3 -3
  157. package/esm2020/lib/components/iframes/iframe-host/iframe-host.component.mjs +3 -3
  158. package/esm2020/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +3 -3
  159. package/esm2020/lib/components/iframes/iframe.service.mjs +3 -3
  160. package/esm2020/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +3 -3
  161. package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +3 -3
  162. package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +7 -7
  163. package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.mjs +9 -0
  164. package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.mjs +42 -27
  165. package/esm2020/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +197 -0
  166. package/esm2020/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +12 -12
  167. package/esm2020/lib/components/input/autocomplete/elder-autocomplete.module.mjs +22 -11
  168. package/esm2020/lib/components/input/autocomplete/many/word-position-finder.mjs +58 -0
  169. package/esm2020/lib/components/labels/elder-labels.module.mjs +4 -4
  170. package/esm2020/lib/components/labels/labels-input/labels-input.component.mjs +3 -3
  171. package/esm2020/lib/components/measures/dimensions-input/elder-dimensions-input.component.mjs +3 -3
  172. package/esm2020/lib/components/measures/directives/elder-unit-select.directive.mjs +5 -5
  173. package/esm2020/lib/components/measures/elder-measures.module.mjs +8 -8
  174. package/esm2020/lib/components/measures/elder-quantity-transform.pipe.mjs +3 -3
  175. package/esm2020/lib/components/measures/elder-quantity.pipe.mjs +3 -3
  176. package/esm2020/lib/components/measures/elder-unit.service.mjs +3 -3
  177. package/esm2020/lib/components/measures/quantity-input/elder-quantity-input.component.mjs +3 -3
  178. package/esm2020/lib/components/measures/util/elder-quantity.service.mjs +3 -3
  179. package/esm2020/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +3 -3
  180. package/esm2020/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +4 -4
  181. package/esm2020/lib/components/navigation/nav/elder-nav.module.mjs +4 -4
  182. package/esm2020/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +3 -3
  183. package/esm2020/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +3 -3
  184. package/esm2020/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +3 -3
  185. package/esm2020/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +3 -3
  186. package/esm2020/lib/components/navigation/toolbar/elder-toolbar.module.mjs +4 -4
  187. package/esm2020/lib/components/navigation/toolbar/elder-toolbar.service.mjs +3 -3
  188. package/esm2020/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +3 -3
  189. package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +3 -3
  190. package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +3 -3
  191. package/esm2020/lib/components/overlays/elder-overlay-origin.directive.mjs +3 -3
  192. package/esm2020/lib/components/overlays/elder-overlay-trigger.directive.mjs +3 -3
  193. package/esm2020/lib/components/overlays/elder-overlay.component.mjs +3 -3
  194. package/esm2020/lib/components/overlays/elder-overlay.module.mjs +4 -4
  195. package/esm2020/lib/components/panels/card-panel/elder-card-panel.component.mjs +3 -3
  196. package/esm2020/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +3 -3
  197. package/esm2020/lib/components/panels/elder-panel.module.mjs +4 -4
  198. package/esm2020/lib/components/panels/flat/elder-panel.component.mjs +3 -3
  199. package/esm2020/lib/components/public_api.mjs +1 -2
  200. package/esm2020/lib/components/select/auto/elder-auto-select-first.directive.mjs +3 -3
  201. package/esm2020/lib/components/select/elder-select-base.mjs +5 -5
  202. package/esm2020/lib/components/select/elder-select-chip.directive.mjs +9 -9
  203. package/esm2020/lib/components/select/elder-select-on-tab.directive.mjs +3 -3
  204. package/esm2020/lib/components/select/elder-select-value.directive.mjs +3 -3
  205. package/esm2020/lib/components/select/elder-select.module.mjs +4 -4
  206. package/esm2020/lib/components/select/multi/elder-multi-select-base.mjs +3 -3
  207. package/esm2020/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +3 -3
  208. package/esm2020/lib/components/select/multi/elder-multi-select-form-field.mjs +3 -3
  209. package/esm2020/lib/components/select/popup/selection-model-popup.directive.mjs +4 -4
  210. package/esm2020/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +3 -3
  211. package/esm2020/lib/components/select/single/elder-clear-select.directive.mjs +3 -3
  212. package/esm2020/lib/components/select/single/elder-select/elder-select.component.mjs +10 -9
  213. package/esm2020/lib/components/select/single/elder-select-form-field.mjs +3 -3
  214. package/esm2020/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +3 -3
  215. package/esm2020/lib/components/select-chip-list/elder-chip-list-select.module.mjs +4 -4
  216. package/esm2020/lib/components/select-list/elder-select-list.module.mjs +4 -4
  217. package/esm2020/lib/components/select-list/select-list/elder-select-list.component.mjs +3 -3
  218. package/esm2020/lib/components/select-list/select-list-item/elder-select-list-item.component.mjs +3 -3
  219. package/esm2020/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +3 -3
  220. package/esm2020/lib/components/shell/drawers/elder-router-outlet.service.mjs +3 -3
  221. package/esm2020/lib/components/shell/elder-shell-slot.directive.mjs +3 -3
  222. package/esm2020/lib/components/shell/elder-shell.module.mjs +4 -4
  223. package/esm2020/lib/components/shell/elder-shell.service.mjs +3 -3
  224. package/esm2020/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +3 -3
  225. package/esm2020/lib/components/shell/shell/elder-shell.component.mjs +12 -12
  226. package/esm2020/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +3 -3
  227. package/esm2020/lib/components/tabs/elder-tab/elder-tab.directive.mjs +3 -3
  228. package/esm2020/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +3 -3
  229. package/esm2020/lib/components/tabs/elder-tab.module.mjs +4 -4
  230. package/esm2020/lib/components/theme/elder-theme-applier.directive.mjs +3 -3
  231. package/esm2020/lib/components/theme/elder-theme-preference.service.mjs +3 -3
  232. package/esm2020/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +3 -3
  233. package/esm2020/lib/components/theme/elder-theme.directive.mjs +3 -3
  234. package/esm2020/lib/components/theme/elder-theme.module.mjs +4 -4
  235. package/esm2020/lib/components/theme/elder-theme.service.mjs +3 -3
  236. package/esm2020/lib/components/time/date-adapters/custom-date-adapter.mjs +3 -3
  237. package/esm2020/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +3 -3
  238. package/esm2020/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +3 -3
  239. package/esm2020/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +3 -3
  240. package/esm2020/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +3 -3
  241. package/esm2020/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +3 -3
  242. package/esm2020/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +3 -3
  243. package/esm2020/lib/components/time/elder-time.module.mjs +8 -8
  244. package/esm2020/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +3 -3
  245. package/esm2020/lib/components/toasts/elder-toast.module.mjs +4 -4
  246. package/esm2020/lib/components/toasts/elder-toast.service.mjs +9 -9
  247. package/esm2020/lib/components/toasts/standard-toast/standard-toast.component.mjs +3 -3
  248. package/esm2020/lib/components/url-fragment/elder-url-fragment.module.mjs +4 -4
  249. package/esm2020/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +3 -3
  250. package/esm2020/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +3 -3
  251. package/esm2020/lib/components/viewers/elder-viewers.module.mjs +4 -4
  252. package/esm2020/lib/features/event-source/elder-event-source.service.mjs +3 -3
  253. package/esm2020/lib/features/kafent/access-token-provider.mjs +3 -3
  254. package/esm2020/lib/features/kafent/kafent-config.mjs +3 -3
  255. package/esm2020/lib/features/kafent/kafent-event-stream.mjs +3 -3
  256. package/esm2020/lib/features/kafent/kafent-event.service.mjs +3 -3
  257. package/esm2020/lib/features/kafent/kafent.module.mjs +4 -4
  258. package/esm2020/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +3 -3
  259. package/esm2020/lib/pipes/bytes.pipe.mjs +3 -3
  260. package/esm2020/lib/pipes/elder-pipes.module.mjs +10 -10
  261. package/esm2020/lib/pipes/elder-repeat.pipe.mjs +3 -3
  262. package/esm2020/lib/pipes/elder-round.pipe.mjs +3 -3
  263. package/esm2020/lib/pipes/elder-safe-url.pipe.mjs +3 -3
  264. package/esm2020/lib/pipes/elder-truncate.pipe.mjs +3 -3
  265. package/esm2020/lib/pipes/iso-duration.pipe.mjs +3 -3
  266. package/esm2020/lib/pipes/iso-interval-parse.pipe.mjs +3 -3
  267. package/esm2020/lib/pipes/iso-interval.pipe.mjs +3 -3
  268. package/esm2020/lib/pipes/time-ago.pipe.mjs +3 -3
  269. package/esm2020/lib/pipes/time-duration.pipe.mjs +3 -3
  270. package/esm2020/lib/pipes/weight.pipe.mjs +3 -3
  271. package/fesm2015/elderbyte-ngx-starter.mjs +1290 -1115
  272. package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
  273. package/fesm2020/elderbyte-ngx-starter.mjs +1287 -1115
  274. package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
  275. package/lib/common/data/data-context/data-context-active-page.d.ts +1 -1
  276. package/lib/common/data/data-context/data-context-base.d.ts +2 -2
  277. package/lib/common/data/data-context/data-context-continuable-base.d.ts +1 -1
  278. package/lib/common/data/data-context/data-context.d.ts +2 -2
  279. package/lib/common/data/datasource/data-source-adapter.d.ts +1 -1
  280. package/lib/common/data/datasource/data-source-processor.d.ts +1 -1
  281. package/lib/common/data/datasource/data-source.d.ts +1 -1
  282. package/lib/common/data/datasource/fetcher/delegate-data-source.d.ts +1 -1
  283. package/lib/common/data/datasource/local/local-list-data-source.d.ts +1 -1
  284. package/lib/common/data/datasource/local/local-paged-data-source.d.ts +1 -1
  285. package/lib/common/data/datasource/rest/rest-client.d.ts +1 -1
  286. package/lib/common/data/{filter-context.d.ts → filters/filter-context.d.ts} +3 -1
  287. package/lib/common/data/{filter.d.ts → filters/filter.d.ts} +15 -3
  288. package/lib/common/data/http-params-builder.d.ts +1 -1
  289. package/lib/common/data/public_api.d.ts +2 -2
  290. package/lib/common/data/required-filter-evaluator.d.ts +2 -2
  291. package/lib/common/data/token-chunk-request.d.ts +1 -1
  292. package/lib/common/utils/filter-util.d.ts +1 -1
  293. package/lib/components/auditing/audited-entity/elder-audited-entity.component.d.ts +2 -1
  294. package/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.d.ts +1 -1
  295. package/lib/components/csv/elder-csv-stream-exporter.d.ts +1 -1
  296. package/lib/components/data-view/base/elder-data-view-options.d.ts +1 -1
  297. package/lib/components/forms/search/elder-search-context.directive.d.ts +15 -12
  298. package/lib/components/forms/search/elder-search-input.directive.d.ts +6 -7
  299. package/lib/components/http-support/elder-http-client.service.d.ts +1 -1
  300. package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.d.ts +8 -0
  301. package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.d.ts +14 -14
  302. package/lib/components/{multi-autocomplete/elder-multi-autocomplete.component.d.ts → input/autocomplete/elder-autocomplete-many.directive.d.ts} +46 -27
  303. package/lib/components/input/autocomplete/elder-autocomplete.directive.d.ts +2 -2
  304. package/lib/components/input/autocomplete/elder-autocomplete.module.d.ts +11 -7
  305. package/lib/components/{multi-autocomplete/word-position.d.ts → input/autocomplete/many/word-position-finder.d.ts} +0 -0
  306. package/lib/components/public_api.d.ts +0 -1
  307. package/lib/components/select/elder-select-base.d.ts +1 -1
  308. package/lib/components/select/popup/selection-model-popup.directive.d.ts +1 -1
  309. package/lib/components/select/single/elder-select/elder-select.component.d.ts +2 -1
  310. package/package.json +1 -1
  311. package/esm2020/lib/common/data/filter-context.mjs +0 -129
  312. package/esm2020/lib/common/data/filter.mjs +0 -72
  313. package/esm2020/lib/components/multi-autocomplete/elder-multi-auto-complete.module.mjs +0 -30
  314. package/esm2020/lib/components/multi-autocomplete/elder-multi-autocomplete.component.mjs +0 -122
  315. package/esm2020/lib/components/multi-autocomplete/word-position.mjs +0 -38
  316. package/lib/components/multi-autocomplete/elder-multi-auto-complete.module.d.ts +0 -14
  317. package/src/lib/components/multi-autocomplete/elder-multi-autocomplete.component.scss +0 -0
@@ -1,7 +1,6 @@
1
1
  export * from './theme/public_api';
2
2
  export * from './access-denied/elder-access-denied.module';
3
3
  export * from './expand-toggle-button/elder-expand-toggle-button.module';
4
- export * from './multi-autocomplete/elder-multi-auto-complete.module';
5
4
  export * from './labels/elder-labels.module';
6
5
  export * from './panels/elder-panel.module';
7
6
  export * from './files/elder-file.module';
@@ -2,7 +2,7 @@ import { ElementRef, EventEmitter, InjectionToken, NgZone, TemplateRef } from '@
2
2
  import { BehaviorSubject, Observable } from 'rxjs';
3
3
  import { IDataContext } from '../../common/data/data-context/data-context';
4
4
  import { IDataSource } from '../../common/data/datasource/data-source';
5
- import { Filter } from '../../common/data/filter';
5
+ import { Filter } from '../../common/data/filters/filter';
6
6
  import { Sort } from '../../common/data/sort';
7
7
  import { SelectionModelPopupDirective } from './popup/selection-model-popup.directive';
8
8
  import { DataContextStatus } from '../../common/data/data-context/data-context-status';
@@ -3,7 +3,7 @@ import { MatDialog } from '@angular/material/dialog';
3
3
  import { Observable } from 'rxjs';
4
4
  import { KeyGetterFn, SelectionModel } from '../../../common/selection/selection-model';
5
5
  import { Sort } from '../../../common/data/sort';
6
- import { Filter } from '../../../common/data/filter';
6
+ import { Filter } from '../../../common/data/filters/filter';
7
7
  import { ElderDataViewOptionsProvider } from '../../data-view/base/elder-data-view-options-provider';
8
8
  import * as i0 from "@angular/core";
9
9
  export declare function createSelectionModel(): SelectionModel<any>;
@@ -8,6 +8,7 @@ import { IElderEntityValueAccessor } from '../../../../common/forms/elder-entity
8
8
  import { NgControl } from '@angular/forms';
9
9
  import { FocusMonitor } from '@angular/cdk/a11y';
10
10
  import { TranslateService } from '@ngx-translate/core';
11
+ import { ElderAutocompleteOptionSelected } from '../../../input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected';
11
12
  import * as i0 from "@angular/core";
12
13
  declare class EntityContext<T> {
13
14
  readonly value: T;
@@ -114,7 +115,7 @@ export declare class ElderSelectComponent<TEntity = any, TId = any, TValue = TEn
114
115
  togglePanel(autoTrigger: MatAutocompleteTrigger): void;
115
116
  openPanel(autoTrigger: MatAutocompleteTrigger): void;
116
117
  onInputClicked(autoTrigger: MatAutocompleteTrigger): void;
117
- onOptionSelected(selectedValue: TEntity): void;
118
+ onOptionSelected(optionSelected: ElderAutocompleteOptionSelected<TEntity, TId>): void;
118
119
  openSelectionPopup(event: Event): void;
119
120
  clear(event?: Event): void;
120
121
  forceReloadFirst(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elderbyte/ngx-starter",
3
- "version": "14.5.3",
3
+ "version": "14.7.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0",
@@ -1,129 +0,0 @@
1
- import { Filter } from './filter';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { distinctUntilChanged } from 'rxjs/operators';
4
- export class FilterContext {
5
- constructor() {
6
- /***************************************************************************
7
- * *
8
- * Fields *
9
- * *
10
- **************************************************************************/
11
- this._filters = new BehaviorSubject([]);
12
- }
13
- /***************************************************************************
14
- * *
15
- * Static Utilities *
16
- * *
17
- **************************************************************************/
18
- /**
19
- * Update the given filters with new ones, merging the two.
20
- * The updated filters take precedence.
21
- * @param filters
22
- * @param updatedFilters
23
- */
24
- static updateFilters(filters, updatedFilters) {
25
- const filterMap = new Map();
26
- if (filters) {
27
- filters.forEach(f => filterMap.set(f.key, f));
28
- }
29
- if (updatedFilters) {
30
- updatedFilters.forEach(f => {
31
- if (Filter.hasValue(f)) {
32
- filterMap.set(f.key, f);
33
- }
34
- else {
35
- if (filterMap.has(f.key)) {
36
- filterMap.delete(f.key);
37
- }
38
- }
39
- });
40
- }
41
- return Array.from(filterMap.values());
42
- }
43
- /***************************************************************************
44
- * *
45
- * Read API *
46
- * *
47
- **************************************************************************/
48
- get filters() {
49
- return this._filters.asObservable().pipe(distinctUntilChanged((a, b) => this.equals(a, b)));
50
- }
51
- get filtersSnapshot() {
52
- return this._filters.getValue();
53
- }
54
- findFilterValue(key) {
55
- const f = this.findFilter(key);
56
- return f ? f.value : undefined;
57
- }
58
- findFilter(key) {
59
- return this.filtersSnapshot
60
- .filter(f => f.key === key)
61
- .find(first => true);
62
- }
63
- /***************************************************************************
64
- * *
65
- * Public API *
66
- * *
67
- **************************************************************************/
68
- removeFilter(key) {
69
- const current = this.filtersSnapshot;
70
- const newFilters = current.filter(f => f.key !== key);
71
- if (current.length !== newFilters.length) {
72
- this.replaceFilters(newFilters);
73
- }
74
- }
75
- /**
76
- * This method updatees / adds the given filter, leaving
77
- * existing ones untouched.
78
- * @param updatedFilter
79
- */
80
- updateFilter(updatedFilter) {
81
- if (updatedFilter) {
82
- this.updateFilters([updatedFilter]);
83
- }
84
- }
85
- /**
86
- * This method updates / adds the given filters, leaving
87
- * existing ones untouched.
88
- * @param updatedFilters
89
- */
90
- updateFilters(updatedFilters) {
91
- if (updatedFilters && updatedFilters.length > 0) {
92
- this.replaceFilters(FilterContext.updateFilters(this.filtersSnapshot, updatedFilters));
93
- }
94
- }
95
- /**
96
- * Replace all existing filters with the given new ones.
97
- * @param newFilters
98
- */
99
- replaceFilters(newFilters) {
100
- this._filters.next(newFilters || []);
101
- }
102
- clear() {
103
- this.replaceFilters([]);
104
- }
105
- /***************************************************************************
106
- * *
107
- * Private methods *
108
- * *
109
- **************************************************************************/
110
- equals(aFilters, bFilters) {
111
- if (aFilters.length !== bFilters.length) {
112
- return false;
113
- }
114
- if (aFilters.length === 0 && bFilters.length === 0) {
115
- return true;
116
- }
117
- // The both filter arrays have the same length, so we must compare them by value
118
- const bIndex = new Map();
119
- bFilters.forEach(f => bIndex.set(f.key, f));
120
- for (const fa of aFilters) {
121
- const bFilter = bIndex.get(fa.key);
122
- if (!Filter.equals(bFilter, fa)) {
123
- return false;
124
- }
125
- }
126
- return true;
127
- }
128
- }
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9maWx0ZXItY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxlQUFlLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFFRTs7OztvRkFJNEU7UUFFM0QsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFXLEVBQUUsQ0FBQyxDQUFDO0lBeUloRSxDQUFDO0lBdklDOzs7O2dGQUk0RTtJQUU1RTs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBaUIsRUFBRSxjQUF3QjtRQUNyRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU1QyxJQUFJLE9BQU8sRUFBRTtZQUNYLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQztRQUVELElBQUksY0FBYyxFQUFFO1lBQ2xCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDdEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDTCxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUN4QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDekI7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUUsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ3RDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBVztRQUNoQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUM7YUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxZQUFZLENBQUMsR0FBVztRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVksQ0FBQyxhQUFzQjtRQUN4QyxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUNyQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLGNBQXlCO1FBQzVDLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQ2pCLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FDbEUsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxVQUFxQjtRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsTUFBTSxDQUFDLFFBQWtCLEVBQUUsUUFBa0I7UUFFbkQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBQzFELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztTQUFFO1FBRXBFLGdGQUFnRjtRQUVoRixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN6QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxRQUFRLEVBQUU7WUFDekIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmlsdGVyfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb250ZXh0IHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJbXT4oW10pO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBTdGF0aWMgVXRpbGl0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGdpdmVuIGZpbHRlcnMgd2l0aCBuZXcgb25lcywgbWVyZ2luZyB0aGUgdHdvLlxuICAgKiBUaGUgdXBkYXRlZCBmaWx0ZXJzIHRha2UgcHJlY2VkZW5jZS5cbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogQHBhcmFtIHVwZGF0ZWRGaWx0ZXJzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHVwZGF0ZUZpbHRlcnMoZmlsdGVyczogRmlsdGVyW10sIHVwZGF0ZWRGaWx0ZXJzOiBGaWx0ZXJbXSk6IEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgRmlsdGVyPigpO1xuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIGZpbHRlcnMuZm9yRWFjaChmID0+IGZpbHRlck1hcC5zZXQoZi5rZXksIGYpKTtcbiAgICB9XG5cbiAgICBpZiAodXBkYXRlZEZpbHRlcnMpIHtcbiAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgICAgIGlmIChGaWx0ZXIuaGFzVmFsdWUoZikpIHtcbiAgICAgICAgICBmaWx0ZXJNYXAuc2V0KGYua2V5LCBmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlsdGVyTWFwLmhhcyhmLmtleSkpIHtcbiAgICAgICAgICAgIGZpbHRlck1hcC5kZWxldGUoZi5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZmlsdGVyTWFwLnZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBSZWFkIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgZmlsdGVycygpOiBPYnNlcnZhYmxlPEZpbHRlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiB0aGlzLmVxdWFscyhhLCBiKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJzU25hcHNob3QoKTogRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZmluZEZpbHRlclZhbHVlKGtleTogc3RyaW5nKTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGYgPSB0aGlzLmZpbmRGaWx0ZXIoa2V5KTtcbiAgICByZXR1cm4gZiA/IGYudmFsdWUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZmluZEZpbHRlcihrZXk6IHN0cmluZyk6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyc1NuYXBzaG90XG4gICAgICAuZmlsdGVyKGYgPT4gZi5rZXkgPT09IGtleSlcbiAgICAgIC5maW5kKGZpcnN0ID0+IHRydWUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHJlbW92ZUZpbHRlcihrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmZpbHRlcnNTbmFwc2hvdDtcbiAgICBjb25zdCBuZXdGaWx0ZXJzID0gY3VycmVudC5maWx0ZXIoZiA9PiBmLmtleSAhPT0ga2V5KTtcbiAgICBpZiAoY3VycmVudC5sZW5ndGggIT09IG5ld0ZpbHRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWx0ZXJzKG5ld0ZpbHRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB1cGRhdGVlcyAvIGFkZHMgdGhlIGdpdmVuIGZpbHRlciwgbGVhdmluZ1xuICAgKiBleGlzdGluZyBvbmVzIHVudG91Y2hlZC5cbiAgICogQHBhcmFtIHVwZGF0ZWRGaWx0ZXJcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVGaWx0ZXIodXBkYXRlZEZpbHRlcj86IEZpbHRlcik6IHZvaWQge1xuICAgIGlmICh1cGRhdGVkRmlsdGVyKSB7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcnMoW3VwZGF0ZWRGaWx0ZXJdKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgdXBkYXRlcyAvIGFkZHMgdGhlIGdpdmVuIGZpbHRlcnMsIGxlYXZpbmdcbiAgICogZXhpc3Rpbmcgb25lcyB1bnRvdWNoZWQuXG4gICAqIEBwYXJhbSB1cGRhdGVkRmlsdGVyc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUZpbHRlcnModXBkYXRlZEZpbHRlcnM/OiBGaWx0ZXJbXSk6IHZvaWQge1xuICAgIGlmICh1cGRhdGVkRmlsdGVycyAmJiB1cGRhdGVkRmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWx0ZXJzKFxuICAgICAgICBGaWx0ZXJDb250ZXh0LnVwZGF0ZUZpbHRlcnModGhpcy5maWx0ZXJzU25hcHNob3QsIHVwZGF0ZWRGaWx0ZXJzKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhbGwgZXhpc3RpbmcgZmlsdGVycyB3aXRoIHRoZSBnaXZlbiBuZXcgb25lcy5cbiAgICogQHBhcmFtIG5ld0ZpbHRlcnNcbiAgICovXG4gIHB1YmxpYyByZXBsYWNlRmlsdGVycyhuZXdGaWx0ZXJzPzogRmlsdGVyW10pIHtcbiAgICB0aGlzLl9maWx0ZXJzLm5leHQobmV3RmlsdGVycyB8fCBbXSk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZXBsYWNlRmlsdGVycyhbXSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGVxdWFscyhhRmlsdGVyczogRmlsdGVyW10sIGJGaWx0ZXJzOiBGaWx0ZXJbXSk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKGFGaWx0ZXJzLmxlbmd0aCAhPT0gYkZpbHRlcnMubGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmIChhRmlsdGVycy5sZW5ndGggPT09IDAgJiYgYkZpbHRlcnMubGVuZ3RoID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG5cbiAgICAvLyBUaGUgYm90aCBmaWx0ZXIgYXJyYXlzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLCBzbyB3ZSBtdXN0IGNvbXBhcmUgdGhlbSBieSB2YWx1ZVxuXG4gICAgY29uc3QgYkluZGV4ID0gbmV3IE1hcDxzdHJpbmcsIEZpbHRlcj4oKTtcbiAgICBiRmlsdGVycy5mb3JFYWNoKGYgPT4gYkluZGV4LnNldChmLmtleSwgZikpO1xuXG4gICAgZm9yIChjb25zdCBmYSBvZiBhRmlsdGVycykge1xuICAgICAgY29uc3QgYkZpbHRlciA9IGJJbmRleC5nZXQoZmEua2V5KTtcbiAgICAgIGlmICghRmlsdGVyLmVxdWFscyhiRmlsdGVyLCBmYSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
@@ -1,72 +0,0 @@
1
- import { Objects } from '../objects';
2
- import { CollectionUtil } from '../utils/collection-util';
3
- export class Filter {
4
- /***************************************************************************
5
- * *
6
- * Constructor *
7
- * *
8
- **************************************************************************/
9
- constructor(key, value) {
10
- if (!key) {
11
- throw new Error('ArgumentNull: Filter.key can not be null!');
12
- }
13
- this.key = key;
14
- this.value = value;
15
- }
16
- /***************************************************************************
17
- * *
18
- * Properties *
19
- * *
20
- **************************************************************************/
21
- /**
22
- * Checks if this filter has a value.
23
- * This is the case when the value is non null and
24
- * in case its an array, also non empty.
25
- */
26
- static hasValue(self) {
27
- if (!self) {
28
- return false;
29
- }
30
- if (Objects.nonNull(self.value)) {
31
- if (self.value instanceof Array) {
32
- return self.value.length > 0;
33
- }
34
- else {
35
- return true;
36
- }
37
- }
38
- return false;
39
- }
40
- /**
41
- * Checks this filter has the same value as the other given filter.
42
- * @param self
43
- * @param other
44
- */
45
- static equals(self, other) {
46
- if (self === other) {
47
- return true;
48
- } // Same obj reference
49
- if (!self) {
50
- return false;
51
- }
52
- if (!other) {
53
- return false;
54
- }
55
- if (self.key !== other.key) {
56
- return false;
57
- }
58
- if (self.value === other.value) {
59
- return true;
60
- } // Same key and same value reference
61
- // In case the filter has a multi value array, we need to compare those by value
62
- if (self.value instanceof Array || other.value instanceof Array) {
63
- const valueArr = self.value instanceof Array ? self.value : [self.value];
64
- const otherArr = other instanceof Array ? other : [other];
65
- return CollectionUtil.equalSetDeep(new Set(valueArr), new Set(otherArr));
66
- }
67
- else {
68
- return false; // Otherwise, they are not equal
69
- }
70
- }
71
- }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tbW9uL2RhdGEvZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE1BQU0sT0FBTyxNQUFNO0lBb0JqQjs7OztnRkFJNEU7SUFFNUUsWUFDSSxHQUFXLEVBQ1gsS0FBK0I7UUFFakMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztTQUFFO1FBRTNFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFZO1FBRWpDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBRTVCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxZQUFZLEtBQUssRUFBRTtnQkFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNIO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFFOUMsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7U0FBRSxDQUFDLHFCQUFxQjtRQUUxRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUFFLE9BQU8sS0FBSyxDQUFDO1NBQUU7UUFDN0MsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQztTQUFFLENBQUMsb0NBQW9DO1FBRXJGLGdGQUFnRjtRQUVoRixJQUFJLElBQUksQ0FBQyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksS0FBSyxFQUFFO1lBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RSxNQUFNLFFBQVEsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUQsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDMUU7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDLENBQUMsZ0NBQWdDO1NBQy9DO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vb2JqZWN0cyc7XG5pbXBvcnQge0NvbGxlY3Rpb25VdGlsfSBmcm9tICcuLi91dGlscy9jb2xsZWN0aW9uLXV0aWwnO1xuXG5leHBvcnQgY2xhc3MgRmlsdGVyIHtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogVGhlIGZpbHRlciBrZXkuXG4gICAqIFVuaXF1ZSBpbnNpZGUgYSBGaWx0ZXJDb250ZXh0IG9yIEZpbHRlciByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsdGVyIHZhbHVlIGFzIHN0cmluZy5cbiAgICogTXVsdGlwbGUgc3RyaW5nIHZhbHVlcyBhcmUgc3VwcG9ydGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBrZXk6IHN0cmluZyxcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpIHtcblxuICAgIGlmICgha2V5KSB7IHRocm93IG5ldyBFcnJvcignQXJndW1lbnROdWxsOiBGaWx0ZXIua2V5IGNhbiBub3QgYmUgbnVsbCEnKTsgfVxuXG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGZpbHRlciBoYXMgYSB2YWx1ZS5cbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSB2YWx1ZSBpcyBub24gbnVsbCBhbmRcbiAgICogaW4gY2FzZSBpdHMgYW4gYXJyYXksIGFsc28gbm9uIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBoYXNWYWx1ZShzZWxmOiBGaWx0ZXIpOiBib29sZWFuIHtcblxuICAgIGlmICghc2VsZikgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIGlmIChPYmplY3RzLm5vbk51bGwoc2VsZi52YWx1ZSkpIHtcbiAgICAgICBpZiAoc2VsZi52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICByZXR1cm4gc2VsZi52YWx1ZS5sZW5ndGggPiAwO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhpcyBmaWx0ZXIgaGFzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBvdGhlciBnaXZlbiBmaWx0ZXIuXG4gICAqIEBwYXJhbSBzZWxmXG4gICAqIEBwYXJhbSBvdGhlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlcXVhbHMoc2VsZjogRmlsdGVyLCBvdGhlcjogRmlsdGVyKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoc2VsZiA9PT0gb3RoZXIpIHsgcmV0dXJuIHRydWU7IH0gLy8gU2FtZSBvYmogcmVmZXJlbmNlXG5cbiAgICBpZiAoIXNlbGYpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgaWYgKCFvdGhlcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAoc2VsZi5rZXkgIT09IG90aGVyLmtleSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAoc2VsZi52YWx1ZSA9PT0gb3RoZXIudmFsdWUpIHsgcmV0dXJuIHRydWU7IH0gLy8gU2FtZSBrZXkgYW5kIHNhbWUgdmFsdWUgcmVmZXJlbmNlXG5cbiAgICAvLyBJbiBjYXNlIHRoZSBmaWx0ZXIgaGFzIGEgbXVsdGkgdmFsdWUgYXJyYXksIHdlIG5lZWQgdG8gY29tcGFyZSB0aG9zZSBieSB2YWx1ZVxuXG4gICAgaWYgKHNlbGYudmFsdWUgaW5zdGFuY2VvZiBBcnJheSB8fCBvdGhlci52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBjb25zdCB2YWx1ZUFyciA9IHNlbGYudmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHNlbGYudmFsdWUgOiBbc2VsZi52YWx1ZV07XG4gICAgICBjb25zdCBvdGhlckFyciA9IG90aGVyIGluc3RhbmNlb2YgQXJyYXkgPyBvdGhlciA6IFtvdGhlcl07XG4gICAgICByZXR1cm4gQ29sbGVjdGlvblV0aWwuZXF1YWxTZXREZWVwKG5ldyBTZXQodmFsdWVBcnIpLCBuZXcgU2V0KG90aGVyQXJyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gT3RoZXJ3aXNlLCB0aGV5IGFyZSBub3QgZXF1YWxcbiAgICB9XG4gIH1cbn1cblxuIl19
@@ -1,30 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { ElderMultiAutocompleteComponent } from './elder-multi-autocomplete.component';
3
- import { CommonModule } from '@angular/common';
4
- import { FlexLayoutModule } from '@angular/flex-layout';
5
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
6
- import { MatInputModule } from '@angular/material/input';
7
- import { ReactiveFormsModule } from '@angular/forms';
8
- import * as i0 from "@angular/core";
9
- export { ElderMultiAutocompleteComponent } from './elder-multi-autocomplete.component';
10
- export * from './word-position';
11
- export class ElderMultiAutoCompleteModule {
12
- }
13
- ElderMultiAutoCompleteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- ElderMultiAutoCompleteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, declarations: [ElderMultiAutocompleteComponent], imports: [CommonModule, ReactiveFormsModule, MatInputModule, MatAutocompleteModule, FlexLayoutModule], exports: [ElderMultiAutocompleteComponent] });
15
- ElderMultiAutoCompleteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, imports: [CommonModule, ReactiveFormsModule, MatInputModule, MatAutocompleteModule, FlexLayoutModule] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutoCompleteModule, decorators: [{
17
- type: NgModule,
18
- args: [{
19
- imports: [
20
- CommonModule, ReactiveFormsModule, MatInputModule, MatAutocompleteModule, FlexLayoutModule
21
- ],
22
- declarations: [
23
- ElderMultiAutocompleteComponent
24
- ],
25
- exports: [
26
- ElderMultiAutocompleteComponent
27
- ]
28
- }]
29
- }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktYXV0by1jb21wbGV0ZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL211bHRpLWF1dG9jb21wbGV0ZS9lbGRlci1tdWx0aS1hdXRvLWNvbXBsZXRlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBRW5ELE9BQU8sRUFBQywrQkFBK0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JGLGNBQWMsaUJBQWlCLENBQUM7QUFjaEMsTUFBTSxPQUFPLDRCQUE0Qjs7eUhBQTVCLDRCQUE0QjswSEFBNUIsNEJBQTRCLGlCQU5qQywrQkFBK0IsYUFIL0IsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsYUFNMUYsK0JBQStCOzBIQUcxQiw0QkFBNEIsWUFUakMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0I7MkZBU3JGLDRCQUE0QjtrQkFYeEMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0I7cUJBQzdGO29CQUNELFlBQVksRUFBRTt3QkFDViwrQkFBK0I7cUJBQ2xDO29CQUNELE9BQU8sRUFBRzt3QkFDTiwrQkFBK0I7cUJBQ2xDO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RWxkZXJNdWx0aUF1dG9jb21wbGV0ZUNvbXBvbmVudH0gZnJvbSAnLi9lbGRlci1tdWx0aS1hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGbGV4TGF5b3V0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9mbGV4LWxheW91dCc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge1JlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuZXhwb3J0IHtFbGRlck11bHRpQXV0b2NvbXBsZXRlQ29tcG9uZW50fSBmcm9tICcuL2VsZGVyLW11bHRpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi93b3JkLXBvc2l0aW9uJztcblxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRJbnB1dE1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLCBGbGV4TGF5b3V0TW9kdWxlXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgRWxkZXJNdWx0aUF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0cyA6IFtcbiAgICAgICAgRWxkZXJNdWx0aUF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJNdWx0aUF1dG9Db21wbGV0ZU1vZHVsZSB7XG5cbn1cbiJdfQ==
@@ -1,122 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { UntypedFormControl } from '@angular/forms';
3
- import { WordPositionFinder } from './word-position';
4
- import { LoggerFactory } from '@elderbyte/ts-logger';
5
- import { EMPTY, of } from 'rxjs';
6
- import { debounceTime, switchMap } from 'rxjs/operators';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/forms";
10
- import * as i3 from "@angular/material/form-field";
11
- import * as i4 from "@angular/material/input";
12
- import * as i5 from "@angular/material/autocomplete";
13
- import * as i6 from "@angular/material/core";
14
- import * as i7 from "@angular/flex-layout/flex";
15
- export class ElderMultiAutocompleteComponent {
16
- /***************************************************************************
17
- * *
18
- * Constructor *
19
- * *
20
- **************************************************************************/
21
- constructor() {
22
- /***************************************************************************
23
- * *
24
- * Fields *
25
- * *
26
- **************************************************************************/
27
- this.logger = LoggerFactory.getLogger(this.constructor.name);
28
- /**
29
- * Occurs when the value has been changed and committed
30
- */
31
- this.valueChanged = new EventEmitter();
32
- this.formControl = new UntypedFormControl();
33
- this.wordFinder = new WordPositionFinder();
34
- }
35
- /***************************************************************************
36
- * *
37
- * Life-Cycle *
38
- * *
39
- **************************************************************************/
40
- ngOnInit() {
41
- this.availableSuggestions = this.formControl.valueChanges.pipe(debounceTime(150), switchMap((value) => {
42
- if (this.cursorPosition) {
43
- const cursor = this.cursorPosition;
44
- const word = this.extractWordFrom(value, cursor);
45
- return this.getSuggestions(word);
46
- }
47
- else {
48
- return EMPTY;
49
- }
50
- }));
51
- this._sub = this.formControl.valueChanges.
52
- subscribe(value => this.onValueChanged(value));
53
- }
54
- ngOnDestroy() {
55
- this._sub.unsubscribe();
56
- }
57
- /***************************************************************************
58
- * *
59
- * Properties *
60
- * *
61
- **************************************************************************/
62
- /***************************************************************************
63
- * *
64
- * Public API *
65
- * *
66
- **************************************************************************/
67
- onValueChanged(value) {
68
- this.logger.debug('value changed', value);
69
- this.valueChanged.next(value);
70
- }
71
- insertSuggestion(suggestion) {
72
- const full = this.formControl.value != null ? this.formControl.value : '';
73
- if (this.cursorPosition) {
74
- const cursor = this.cursorPosition;
75
- const replacement = this.wordFinder.replaceWord(full, cursor, suggestion + ' ');
76
- return replacement.newText;
77
- }
78
- else {
79
- this.logger.warn('Insert not possible as no cursor-position was available!');
80
- }
81
- }
82
- /***************************************************************************
83
- * *
84
- * Private methods *
85
- * *
86
- **************************************************************************/
87
- getSuggestions(input) {
88
- if (this.suggestionProvider) {
89
- return this.suggestionProvider.loadSuggestions(input);
90
- }
91
- else {
92
- return of([]);
93
- }
94
- }
95
- get cursorPosition() {
96
- if (this.suggestionInput) {
97
- return this.suggestionInput.nativeElement.selectionStart;
98
- }
99
- return null;
100
- }
101
- extractWordFrom(text, position) {
102
- const word = this.wordFinder.findWord(text, position);
103
- return word.value;
104
- }
105
- }
106
- ElderMultiAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
107
- ElderMultiAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: ElderMultiAutocompleteComponent, selector: "elder-multi-autocomplete", inputs: { placeholder: "placeholder", suggestionProvider: "suggestionProvider" }, outputs: { valueChanged: "modify" }, viewQueries: [{ propertyName: "suggestionInput", first: true, predicate: ["suggestionInput"], descendants: true, static: true }], ngImport: i0, template: "\n<!--\n TODO This should probably be refactored to a directive\n-->\n\n<mat-form-field fxFlex\n\n>\n\n\n <input matInput\n #suggestionInput\n type=\"text\"\n [matAutocomplete]=\"auto\"\n [formControl]=\"formControl\"\n name=\"multiinput\" [placeholder]=\"placeholder\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" >\n <mat-option *ngFor=\"let suggestion of availableSuggestions | async\" [value]=\"insertSuggestion(suggestion)\">\n {{ suggestion }}\n </mat-option>\n </mat-autocomplete>\n</mat-form-field>\n\n\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
108
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultiAutocompleteComponent, decorators: [{
109
- type: Component,
110
- args: [{ selector: 'elder-multi-autocomplete', template: "\n<!--\n TODO This should probably be refactored to a directive\n-->\n\n<mat-form-field fxFlex\n\n>\n\n\n <input matInput\n #suggestionInput\n type=\"text\"\n [matAutocomplete]=\"auto\"\n [formControl]=\"formControl\"\n name=\"multiinput\" [placeholder]=\"placeholder\">\n\n <mat-autocomplete #auto=\"matAutocomplete\" >\n <mat-option *ngFor=\"let suggestion of availableSuggestions | async\" [value]=\"insertSuggestion(suggestion)\">\n {{ suggestion }}\n </mat-option>\n </mat-autocomplete>\n</mat-form-field>\n\n\n\n\n" }]
111
- }], ctorParameters: function () { return []; }, propDecorators: { placeholder: [{
112
- type: Input
113
- }], suggestionProvider: [{
114
- type: Input
115
- }], valueChanged: [{
116
- type: Output,
117
- args: ['modify']
118
- }], suggestionInput: [{
119
- type: ViewChild,
120
- args: ['suggestionInput', { static: true }]
121
- }] } });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItbXVsdGktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktYXV0b2NvbXBsZXRlL2VsZGVyLW11bHRpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL211bHRpLWF1dG9jb21wbGV0ZS9lbGRlci1tdWx0aS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsS0FBSyxFQUE0QixFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFDLFlBQVksRUFBVyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBU2hFLE1BQU0sT0FBTywrQkFBK0I7SUFpQ3hDOzs7O2dGQUk0RTtJQUU1RTtRQXJDQTs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQVd6RTs7V0FFRztRQUVJLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUsxQyxnQkFBVyxHQUF1QixJ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QStCO2tCQUwzQyxTQUFTOytCQUNJLDBCQUEwQjswRUFrQjdCLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQU9DLFlBQVk7c0JBRGxCLE1BQU07dUJBQUMsUUFBUTtnQkFJVCxlQUFlO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7V29yZFBvc2l0aW9uRmluZGVyfSBmcm9tICcuL3dvcmQtcG9zaXRpb24nO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0VNUFRZLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmbGF0TWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SVN1Z2dlc3Rpb25Qcm92aWRlcn0gZnJvbSAnLi4vLi4vY29tbW9uL3N1Z2dlc3Rpb24tcHJvdmlkZXInO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZWxkZXItbXVsdGktYXV0b2NvbXBsZXRlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWxkZXItbXVsdGktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lbGRlci1tdWx0aS1hdXRvY29tcGxldGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFbGRlck11bHRpQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICAgIHByaXZhdGUgX3N1YjogU3Vic2NyaXB0aW9uO1xuXG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3VnZ2VzdGlvblByb3ZpZGVyOiBJU3VnZ2VzdGlvblByb3ZpZGVyPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBPY2N1cnMgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhbmQgY29tbWl0dGVkXG4gICAgICovXG4gICAgQE91dHB1dCgnbW9kaWZ5JylcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdzdWdnZXN0aW9uSW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBzdWdnZXN0aW9uSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBwdWJsaWMgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgICBwdWJsaWMgYXZhaWxhYmxlU3VnZ2VzdGlvbnM6IE9ic2VydmFibGU8c3RyaW5nW10+O1xuXG4gICAgcHJpdmF0ZSB3b3JkRmluZGVyOiBXb3JkUG9zaXRpb25GaW5kZXI7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMud29yZEZpbmRlciA9IG5ldyBXb3JkUG9zaXRpb25GaW5kZXIoKTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqIExpZmUtQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVN1Z2dlc3Rpb25zID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSgxNTApLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3Vyc29yID0gdGhpcy5jdXJzb3JQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZCA9IHRoaXMuZXh0cmFjdFdvcmRGcm9tKHZhbHVlLCAgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VnZ2VzdGlvbnMod29yZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YiA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLlxuICAgICAgICBzdWJzY3JpYmUodmFsdWUgPT4gdGhpcy5vblZhbHVlQ2hhbmdlZCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gICAgcHVibGljIG9uVmFsdWVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3ZhbHVlIGNoYW5nZWQnLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnNlcnRTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBmdWxsID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSAhPSBudWxsID8gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA6ICcnO1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yID0gdGhpcy5jdXJzb3JQb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gdGhpcy53b3JkRmluZGVyLnJlcGxhY2VXb3JkKGZ1bGwsIGN1cnNvciwgc3VnZ2VzdGlvbiArICcgJyk7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQubmV3VGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0luc2VydCBub3QgcG9zc2libGUgYXMgbm8gY3Vyc29yLXBvc2l0aW9uIHdhcyBhdmFpbGFibGUhJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgcHJpdmF0ZSBnZXRTdWdnZXN0aW9ucyhpbnB1dDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuXG4gICAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Qcm92aWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvblByb3ZpZGVyLmxvYWRTdWdnZXN0aW9ucyhpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY3Vyc29yUG9zaXRpb24oKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdGlvbklucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RXb3JkRnJvbSh0ZXh0OiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB3b3JkID0gdGhpcy53b3JkRmluZGVyLmZpbmRXb3JkKHRleHQsIHBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHdvcmQudmFsdWU7XG4gICAgfVxuXG59XG4iLCJcbjwhLS1cbiAgICAgICAgICAgICAgICBUT0RPIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHJlZmFjdG9yZWQgdG8gYSBkaXJlY3RpdmVcbi0tPlxuXG48bWF0LWZvcm0tZmllbGQgZnhGbGV4XG5cbj5cblxuXG4gIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgI3N1Z2dlc3Rpb25JbnB1dFxuICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICBuYW1lPVwibXVsdGlpbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiPlxuXG4gIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgPlxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdWdnZXN0aW9uIG9mIGF2YWlsYWJsZVN1Z2dlc3Rpb25zIHwgYXN5bmNcIiBbdmFsdWVdPVwiaW5zZXJ0U3VnZ2VzdGlvbihzdWdnZXN0aW9uKVwiPlxuICAgICAge3sgc3VnZ2VzdGlvbiB9fVxuICAgIDwvbWF0LW9wdGlvbj5cbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuPC9tYXQtZm9ybS1maWVsZD5cblxuXG5cblxuIl19
@@ -1,38 +0,0 @@
1
- export class TextRange {
2
- constructor(start, end, value) {
3
- this.start = start;
4
- this.end = end;
5
- this.value = value;
6
- }
7
- }
8
- export class ReplacementResult {
9
- constructor(newText, replaced) {
10
- this.newText = newText;
11
- this.replaced = replaced;
12
- }
13
- }
14
- export class WordPositionFinder {
15
- findWord(text, position) {
16
- // Search for the word's beginning and end.
17
- const left = text.slice(0, position).search(/\S+$/);
18
- let right = text.slice(position).search(/\s/);
19
- // The last word in the string is a special case.
20
- if (right < 0) {
21
- right = text.length;
22
- }
23
- else {
24
- right += position;
25
- }
26
- const word = text.substring(left, right);
27
- return new TextRange(left, right, word);
28
- }
29
- replaceWord(text, position, replacement) {
30
- const current = this.findWord(text, position);
31
- const beforePos = current.start;
32
- const before = text.substring(0, beforePos);
33
- const after = text.substring(current.end, text.length);
34
- const newText = before + replacement + after;
35
- return new ReplacementResult(newText, new TextRange(beforePos, beforePos + replacement.length, replacement));
36
- }
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yZC1wb3NpdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGktYXV0b2NvbXBsZXRlL3dvcmQtcG9zaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFNBQVM7SUFDcEIsWUFDUyxLQUFhLEVBQ2IsR0FBVyxFQUNYLEtBQWE7UUFGYixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsUUFBRyxHQUFILEdBQUcsQ0FBUTtRQUNYLFVBQUssR0FBTCxLQUFLLENBQVE7SUFFdEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUNTLE9BQWUsRUFDZixRQUFtQjtRQURuQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUU1QixDQUFDO0NBQ0Y7QUFJRCxNQUFNLE9BQU8sa0JBQWtCO0lBRXRCLFFBQVEsQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7UUFFNUMsMkNBQTJDO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QyxpREFBaUQ7UUFDakQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDckI7YUFBTTtZQUNMLEtBQUssSUFBSSxRQUFRLENBQUM7U0FDbkI7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUdNLFdBQVcsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxXQUFtQjtRQUVwRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkQsTUFBTSxPQUFPLEdBQUcsTUFBTSxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFN0MsT0FBTyxJQUFJLGlCQUFpQixDQUMxQixPQUFPLEVBQ1AsSUFBSSxTQUFTLENBQ1gsU0FBUyxFQUNULFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FDNUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmV4cG9ydCBjbGFzcyBUZXh0UmFuZ2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhcnQ6IG51bWJlcixcbiAgICBwdWJsaWMgZW5kOiBudW1iZXIsXG4gICAgcHVibGljIHZhbHVlOiBzdHJpbmdcbiAgKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcGxhY2VtZW50UmVzdWx0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5ld1RleHQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVwbGFjZWQ6IFRleHRSYW5nZVxuICApIHtcbiAgfVxufVxuXG5cblxuZXhwb3J0IGNsYXNzIFdvcmRQb3NpdGlvbkZpbmRlciB7XG5cbiAgcHVibGljIGZpbmRXb3JkKHRleHQ6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IFRleHRSYW5nZSB7XG5cbiAgICAvLyBTZWFyY2ggZm9yIHRoZSB3b3JkJ3MgYmVnaW5uaW5nIGFuZCBlbmQuXG4gICAgY29uc3QgbGVmdCA9IHRleHQuc2xpY2UoMCwgcG9zaXRpb24pLnNlYXJjaCgvXFxTKyQvKTtcbiAgICBsZXQgcmlnaHQgPSB0ZXh0LnNsaWNlKHBvc2l0aW9uKS5zZWFyY2goL1xccy8pO1xuXG4gICAgLy8gVGhlIGxhc3Qgd29yZCBpbiB0aGUgc3RyaW5nIGlzIGEgc3BlY2lhbCBjYXNlLlxuICAgIGlmIChyaWdodCA8IDApIHtcbiAgICAgIHJpZ2h0ID0gdGV4dC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0ICs9IHBvc2l0aW9uO1xuICAgIH1cbiAgICBjb25zdCB3b3JkID0gdGV4dC5zdWJzdHJpbmcobGVmdCwgcmlnaHQpO1xuICAgIHJldHVybiBuZXcgVGV4dFJhbmdlKGxlZnQsIHJpZ2h0LCB3b3JkKTtcbiAgfVxuXG5cbiAgcHVibGljIHJlcGxhY2VXb3JkKHRleHQ6IHN0cmluZywgcG9zaXRpb246IG51bWJlciwgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IFJlcGxhY2VtZW50UmVzdWx0IHtcblxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmZpbmRXb3JkKHRleHQsIHBvc2l0aW9uKTtcbiAgICBjb25zdCBiZWZvcmVQb3MgPSBjdXJyZW50LnN0YXJ0O1xuICAgIGNvbnN0IGJlZm9yZSA9IHRleHQuc3Vic3RyaW5nKDAsIGJlZm9yZVBvcyk7XG4gICAgY29uc3QgYWZ0ZXIgPSB0ZXh0LnN1YnN0cmluZyhjdXJyZW50LmVuZCwgdGV4dC5sZW5ndGgpO1xuXG4gICAgY29uc3QgbmV3VGV4dCA9IGJlZm9yZSArIHJlcGxhY2VtZW50ICsgYWZ0ZXI7XG5cbiAgICByZXR1cm4gbmV3IFJlcGxhY2VtZW50UmVzdWx0KFxuICAgICAgbmV3VGV4dCxcbiAgICAgIG5ldyBUZXh0UmFuZ2UoXG4gICAgICAgIGJlZm9yZVBvcyxcbiAgICAgICAgYmVmb3JlUG9zICsgcmVwbGFjZW1lbnQubGVuZ3RoLCByZXBsYWNlbWVudFxuICAgICAgKVxuICAgICk7XG4gIH1cblxufVxuIl19
@@ -1,14 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- import * as i1 from "./elder-multi-autocomplete.component";
3
- import * as i2 from "@angular/common";
4
- import * as i3 from "@angular/forms";
5
- import * as i4 from "@angular/material/input";
6
- import * as i5 from "@angular/material/autocomplete";
7
- import * as i6 from "@angular/flex-layout";
8
- export { ElderMultiAutocompleteComponent } from './elder-multi-autocomplete.component';
9
- export * from './word-position';
10
- export declare class ElderMultiAutoCompleteModule {
11
- static ɵfac: i0.ɵɵFactoryDeclaration<ElderMultiAutoCompleteModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<ElderMultiAutoCompleteModule, [typeof i1.ElderMultiAutocompleteComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule, typeof i4.MatInputModule, typeof i5.MatAutocompleteModule, typeof i6.FlexLayoutModule], [typeof i1.ElderMultiAutocompleteComponent]>;
13
- static ɵinj: i0.ɵɵInjectorDeclaration<ElderMultiAutoCompleteModule>;
14
- }