@fundamental-ngx/cdk 0.38.3-rc.4

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 (399) hide show
  1. package/README.md +89 -0
  2. package/data-source/README.md +7 -0
  3. package/data-source/base/abstract-data-provider.class.d.ts +43 -0
  4. package/data-source/base/base-data-source.class.d.ts +57 -0
  5. package/data-source/data-source.directive.d.ts +47 -0
  6. package/data-source/data-source.module.d.ts +7 -0
  7. package/data-source/helpers/apply-datasource-directive.d.ts +6 -0
  8. package/data-source/helpers/common.d.ts +7 -0
  9. package/data-source/helpers/is-datasource.d.ts +5 -0
  10. package/data-source/index.d.ts +8 -0
  11. package/data-source/models/data-source-provider.d.ts +23 -0
  12. package/data-source/models/data-source.d.ts +16 -0
  13. package/data-source/models/index.d.ts +3 -0
  14. package/data-source/models/matching-strategy.d.ts +10 -0
  15. package/data-source/tokens.d.ts +6 -0
  16. package/esm2020/data-source/base/abstract-data-provider.class.mjs +126 -0
  17. package/esm2020/data-source/base/base-data-source.class.mjs +99 -0
  18. package/esm2020/data-source/data-source.directive.mjs +96 -0
  19. package/esm2020/data-source/data-source.module.mjs +16 -0
  20. package/esm2020/data-source/fundamental-ngx-cdk-data-source.mjs +5 -0
  21. package/esm2020/data-source/helpers/apply-datasource-directive.mjs +7 -0
  22. package/esm2020/data-source/helpers/common.mjs +17 -0
  23. package/esm2020/data-source/helpers/is-datasource.mjs +7 -0
  24. package/esm2020/data-source/index.mjs +9 -0
  25. package/esm2020/data-source/models/data-source-provider.mjs +2 -0
  26. package/esm2020/data-source/models/data-source.mjs +2 -0
  27. package/esm2020/data-source/models/index.mjs +4 -0
  28. package/esm2020/data-source/models/matching-strategy.mjs +7 -0
  29. package/esm2020/data-source/tokens.mjs +6 -0
  30. package/esm2020/forms/cva/cva-control.class.mjs +43 -0
  31. package/esm2020/forms/cva/cva.directive.mjs +309 -0
  32. package/esm2020/forms/forms.module.mjs +16 -0
  33. package/esm2020/forms/fundamental-ngx-cdk-forms.mjs +5 -0
  34. package/esm2020/forms/helpers/state.mjs +6 -0
  35. package/esm2020/forms/index.mjs +13 -0
  36. package/esm2020/forms/models/cva.mjs +2 -0
  37. package/esm2020/forms/models/form-error.mjs +2 -0
  38. package/esm2020/forms/models/form-field-control.mjs +2 -0
  39. package/esm2020/forms/models/form-field.mjs +9 -0
  40. package/esm2020/forms/models/form-state.mjs +2 -0
  41. package/esm2020/forms/models/select-item.mjs +14 -0
  42. package/esm2020/forms/tokens/form-field-control.token.mjs +3 -0
  43. package/esm2020/forms/tokens/form-field.token.mjs +3 -0
  44. package/esm2020/fundamental-ngx-cdk.mjs +5 -0
  45. package/esm2020/fundamental-ngx.module.mjs +19 -0
  46. package/esm2020/public_api.mjs +5 -0
  47. package/esm2020/utils/abstract-fd-ngx-class.mjs +56 -0
  48. package/esm2020/utils/coercion/array.mjs +7 -0
  49. package/esm2020/utils/consts/error-messages.mjs +6 -0
  50. package/esm2020/utils/consts/index.mjs +5 -0
  51. package/esm2020/utils/consts/overflow-priority-score.mjs +8 -0
  52. package/esm2020/utils/consts/unicode-letters.regex.mjs +11 -0
  53. package/esm2020/utils/consts/unicode-numbers.regex.mjs +8 -0
  54. package/esm2020/utils/datatypes/color-accent.datatype.mjs +2 -0
  55. package/esm2020/utils/datatypes/hash.datatype.mjs +2 -0
  56. package/esm2020/utils/datatypes/index.mjs +4 -0
  57. package/esm2020/utils/datatypes/size.datatype.mjs +2 -0
  58. package/esm2020/utils/decorators/apply-css-class.decorator.mjs +60 -0
  59. package/esm2020/utils/decorators/apply-css-style.decorator.mjs +28 -0
  60. package/esm2020/utils/decorators/coerce-boolean.mjs +7 -0
  61. package/esm2020/utils/decorators/coerce-css-pixel.mjs +4 -0
  62. package/esm2020/utils/decorators/index.mjs +6 -0
  63. package/esm2020/utils/decorators/setter-alternator.mjs +18 -0
  64. package/esm2020/utils/deprecated-selector.class.mjs +20 -0
  65. package/esm2020/utils/directives/auto-complete/auto-complete.directive.mjs +136 -0
  66. package/esm2020/utils/directives/auto-complete/auto-complete.module.mjs +17 -0
  67. package/esm2020/utils/directives/clicked/clicked-behavior.module.mjs +45 -0
  68. package/esm2020/utils/directives/clicked/clicked-event.plugin.mjs +74 -0
  69. package/esm2020/utils/directives/clicked/clicked.directive.mjs +52 -0
  70. package/esm2020/utils/directives/clicked/fdk-clicked-provider.service.mjs +49 -0
  71. package/esm2020/utils/directives/clicked/index.mjs +4 -0
  72. package/esm2020/utils/directives/disabled/default-disabled-view-modifier.mjs +12 -0
  73. package/esm2020/utils/directives/disabled/disabled-behavior.directive.mjs +102 -0
  74. package/esm2020/utils/directives/disabled/disabled-behavior.interface.mjs +2 -0
  75. package/esm2020/utils/directives/disabled/disabled-behavior.module.mjs +16 -0
  76. package/esm2020/utils/directives/disabled/disabled-view-modifier.interface.mjs +2 -0
  77. package/esm2020/utils/directives/disabled/disabled.observer.mjs +35 -0
  78. package/esm2020/utils/directives/disabled/fdk-disabled-provider.service.mjs +101 -0
  79. package/esm2020/utils/directives/disabled/fdk-disabled.token.mjs +3 -0
  80. package/esm2020/utils/directives/disabled/index.mjs +9 -0
  81. package/esm2020/utils/directives/disabled/set-disabled-state.mjs +16 -0
  82. package/esm2020/utils/directives/focus-key-manager/focus-key-manager-helpers.module.mjs +33 -0
  83. package/esm2020/utils/directives/focus-key-manager/focus-key-manager-item.directive.mjs +98 -0
  84. package/esm2020/utils/directives/focus-key-manager/focus-key-manager-list.directive.mjs +113 -0
  85. package/esm2020/utils/directives/focus-key-manager/focus-key-manager.tokens.mjs +3 -0
  86. package/esm2020/utils/directives/focus-key-manager/index.mjs +5 -0
  87. package/esm2020/utils/directives/focusable-item/default-focusable-item-view-modifier.mjs +14 -0
  88. package/esm2020/utils/directives/focusable-item/fdk-focusable-item-provider.service.mjs +97 -0
  89. package/esm2020/utils/directives/focusable-item/focusable-item-view-modifier.interface.mjs +2 -0
  90. package/esm2020/utils/directives/focusable-item/focusable-item.directive.mjs +106 -0
  91. package/esm2020/utils/directives/focusable-item/focusable-item.module.mjs +16 -0
  92. package/esm2020/utils/directives/focusable-item/focusable.observer.mjs +47 -0
  93. package/esm2020/utils/directives/focusable-item/focusable.tokens.mjs +3 -0
  94. package/esm2020/utils/directives/focusable-item/index.mjs +9 -0
  95. package/esm2020/utils/directives/focusable-item/is-element-focusable-by-default.mjs +32 -0
  96. package/esm2020/utils/directives/focusable-item/set-focusable.mjs +12 -0
  97. package/esm2020/utils/directives/focusable-list/focusable-list.directive.mjs +79 -0
  98. package/esm2020/utils/directives/focusable-list/focusable-list.module.mjs +17 -0
  99. package/esm2020/utils/directives/focusable-list/focusable-list.service.mjs +54 -0
  100. package/esm2020/utils/directives/focusable-list/index.mjs +4 -0
  101. package/esm2020/utils/directives/ignore-click-on-selection/ignore-click-on-selection.directive.mjs +79 -0
  102. package/esm2020/utils/directives/ignore-click-on-selection/ignore-click-on-selection.module.mjs +16 -0
  103. package/esm2020/utils/directives/ignore-click-on-selection/tokens.mjs +3 -0
  104. package/esm2020/utils/directives/index.mjs +31 -0
  105. package/esm2020/utils/directives/initial-focus/initial-focus.directive.mjs +117 -0
  106. package/esm2020/utils/directives/initial-focus/initial-focus.module.mjs +16 -0
  107. package/esm2020/utils/directives/line-clamp/line-clamp.directive.mjs +263 -0
  108. package/esm2020/utils/directives/line-clamp/line-clamp.module.mjs +32 -0
  109. package/esm2020/utils/directives/only-digits/only-digits.directive.mjs +218 -0
  110. package/esm2020/utils/directives/only-digits/only-digits.module.mjs +16 -0
  111. package/esm2020/utils/directives/overflow-list/overflow-list-item.directive.mjs +42 -0
  112. package/esm2020/utils/directives/overflow-list/overflow-list.directive.mjs +140 -0
  113. package/esm2020/utils/directives/overflow-list/overflow-list.module.mjs +33 -0
  114. package/esm2020/utils/directives/readonly/default-readonly-view-modifier.mjs +12 -0
  115. package/esm2020/utils/directives/readonly/fdk-readonly-provider.service.mjs +102 -0
  116. package/esm2020/utils/directives/readonly/fdk-readonly.token.mjs +3 -0
  117. package/esm2020/utils/directives/readonly/index.mjs +10 -0
  118. package/esm2020/utils/directives/readonly/readonly-behavior.directive.mjs +97 -0
  119. package/esm2020/utils/directives/readonly/readonly-behavior.interface.mjs +2 -0
  120. package/esm2020/utils/directives/readonly/readonly-behavior.module.mjs +16 -0
  121. package/esm2020/utils/directives/readonly/readonly-view-modifier.interface.mjs +2 -0
  122. package/esm2020/utils/directives/readonly/readonly.observer.mjs +33 -0
  123. package/esm2020/utils/directives/readonly/set-readonly-state.mjs +14 -0
  124. package/esm2020/utils/directives/repeat/repeat.directive.mjs +65 -0
  125. package/esm2020/utils/directives/repeat/repeat.module.mjs +16 -0
  126. package/esm2020/utils/directives/resize/resize-handle.directive.mjs +42 -0
  127. package/esm2020/utils/directives/resize/resize.directive.mjs +231 -0
  128. package/esm2020/utils/directives/resize/resize.module.mjs +17 -0
  129. package/esm2020/utils/directives/selectable-list/index.mjs +8 -0
  130. package/esm2020/utils/directives/selectable-list/select-component-root.token.mjs +3 -0
  131. package/esm2020/utils/directives/selectable-list/selectable-item.directive.mjs +147 -0
  132. package/esm2020/utils/directives/selectable-list/selectable-item.token.mjs +3 -0
  133. package/esm2020/utils/directives/selectable-list/selectable-list.directive.mjs +93 -0
  134. package/esm2020/utils/directives/selectable-list/selectable-list.module.mjs +17 -0
  135. package/esm2020/utils/directives/selectable-list/selectable-list.tokens.mjs +3 -0
  136. package/esm2020/utils/directives/selectable-list/selection.service.mjs +135 -0
  137. package/esm2020/utils/directives/template/template.directive.mjs +49 -0
  138. package/esm2020/utils/directives/template/template.module.mjs +16 -0
  139. package/esm2020/utils/directives/truncate/truncate.directive.mjs +96 -0
  140. package/esm2020/utils/directives/truncate/truncate.module.mjs +16 -0
  141. package/esm2020/utils/drag-and-drop/dnd-item/dnd-item.directive.mjs +255 -0
  142. package/esm2020/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.mjs +88 -0
  143. package/esm2020/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.mjs +83 -0
  144. package/esm2020/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +220 -0
  145. package/esm2020/utils/drag-and-drop/dnd.interfaces.mjs +2 -0
  146. package/esm2020/utils/drag-and-drop/drag-and-drop.module.mjs +22 -0
  147. package/esm2020/utils/drag-and-drop/index.mjs +8 -0
  148. package/esm2020/utils/drag-and-drop/tokens.mjs +4 -0
  149. package/esm2020/utils/dynamic-component/dynamic-component-config.mjs +2 -0
  150. package/esm2020/utils/dynamic-component/dynamic-component-container.mjs +21 -0
  151. package/esm2020/utils/dynamic-component/dynamic-component-injector.mjs +20 -0
  152. package/esm2020/utils/dynamic-component/dynamic-component.service.mjs +90 -0
  153. package/esm2020/utils/dynamic-component/index.mjs +5 -0
  154. package/esm2020/utils/functions/consumer-provider-factory.mjs +12 -0
  155. package/esm2020/utils/functions/element-size.mjs +23 -0
  156. package/esm2020/utils/functions/get-document-font-size.mjs +5 -0
  157. package/esm2020/utils/functions/index.mjs +13 -0
  158. package/esm2020/utils/functions/intersection-observable.mjs +26 -0
  159. package/esm2020/utils/functions/is-compact-density.mjs +11 -0
  160. package/esm2020/utils/functions/key-util.mjs +77 -0
  161. package/esm2020/utils/functions/module-deprecations-provider.mjs +18 -0
  162. package/esm2020/utils/functions/parser-file-size.mjs +37 -0
  163. package/esm2020/utils/functions/random-color-accent.mjs +5 -0
  164. package/esm2020/utils/functions/resize-observable.mjs +33 -0
  165. package/esm2020/utils/functions/scroll.mjs +19 -0
  166. package/esm2020/utils/functions/uuidv4-generator.mjs +12 -0
  167. package/esm2020/utils/fundamental-ngx-cdk-utils.mjs +5 -0
  168. package/esm2020/utils/helpers/get-native-element.mjs +18 -0
  169. package/esm2020/utils/helpers/index.mjs +3 -0
  170. package/esm2020/utils/helpers/range-selector.mjs +117 -0
  171. package/esm2020/utils/index.mjs +19 -0
  172. package/esm2020/utils/interfaces/content-density.mjs +2 -0
  173. package/esm2020/utils/interfaces/css-class-builder.interface.mjs +2 -0
  174. package/esm2020/utils/interfaces/css-style-builder.interface.mjs +2 -0
  175. package/esm2020/utils/interfaces/has-element-ref.interface.mjs +2 -0
  176. package/esm2020/utils/interfaces/index.mjs +8 -0
  177. package/esm2020/utils/interfaces/keyboard-support-item.interface.mjs +2 -0
  178. package/esm2020/utils/interfaces/module-deprecation.interface.mjs +2 -0
  179. package/esm2020/utils/interfaces/require.interface.mjs +2 -0
  180. package/esm2020/utils/list-item/list-item-utils.mjs +3 -0
  181. package/esm2020/utils/models/nullable.mjs +2 -0
  182. package/esm2020/utils/pipes/displayFn.pipe.mjs +17 -0
  183. package/esm2020/utils/pipes/filter-strings.pipe.mjs +30 -0
  184. package/esm2020/utils/pipes/index.mjs +10 -0
  185. package/esm2020/utils/pipes/is-compact.pipe.mjs +16 -0
  186. package/esm2020/utils/pipes/pipe.module.mjs +55 -0
  187. package/esm2020/utils/pipes/safe.pipe.mjs +36 -0
  188. package/esm2020/utils/pipes/search-highlight.pipe.mjs +31 -0
  189. package/esm2020/utils/pipes/truncate.pipe.mjs +17 -0
  190. package/esm2020/utils/pipes/two-digits.pipe.mjs +22 -0
  191. package/esm2020/utils/pipes/value-by-path.pipe.mjs +16 -0
  192. package/esm2020/utils/services/content-density.service.mjs +34 -0
  193. package/esm2020/utils/services/destroyed.service.mjs +20 -0
  194. package/esm2020/utils/services/focus-trap.service.mjs +92 -0
  195. package/esm2020/utils/services/index.mjs +11 -0
  196. package/esm2020/utils/services/keyboard-support/keyboard-support.service.mjs +73 -0
  197. package/esm2020/utils/services/local-storage.service.mjs +38 -0
  198. package/esm2020/utils/services/observers/attribute.observer.mjs +81 -0
  199. package/esm2020/utils/services/resize-observer.service.mjs +94 -0
  200. package/esm2020/utils/services/rtl.service.mjs +29 -0
  201. package/esm2020/utils/services/tabbable-element.service.mjs +43 -0
  202. package/esm2020/utils/services/themes.service.mjs +133 -0
  203. package/esm2020/utils/tokens/module-deprecations.token.mjs +3 -0
  204. package/esm2020/utils/typecheck.mjs +75 -0
  205. package/esm2020/utils/utils.module.mjs +136 -0
  206. package/fesm2015/fundamental-ngx-cdk-data-source.mjs +378 -0
  207. package/fesm2015/fundamental-ngx-cdk-data-source.mjs.map +1 -0
  208. package/fesm2015/fundamental-ngx-cdk-forms.mjs +404 -0
  209. package/fesm2015/fundamental-ngx-cdk-forms.mjs.map +1 -0
  210. package/fesm2015/fundamental-ngx-cdk-utils.mjs +5767 -0
  211. package/fesm2015/fundamental-ngx-cdk-utils.mjs.map +1 -0
  212. package/fesm2015/fundamental-ngx-cdk.mjs +30 -0
  213. package/fesm2015/fundamental-ngx-cdk.mjs.map +1 -0
  214. package/fesm2020/fundamental-ngx-cdk-data-source.mjs +374 -0
  215. package/fesm2020/fundamental-ngx-cdk-data-source.mjs.map +1 -0
  216. package/fesm2020/fundamental-ngx-cdk-forms.mjs +399 -0
  217. package/fesm2020/fundamental-ngx-cdk-forms.mjs.map +1 -0
  218. package/fesm2020/fundamental-ngx-cdk-utils.mjs +5724 -0
  219. package/fesm2020/fundamental-ngx-cdk-utils.mjs.map +1 -0
  220. package/fesm2020/fundamental-ngx-cdk.mjs +30 -0
  221. package/fesm2020/fundamental-ngx-cdk.mjs.map +1 -0
  222. package/forms/README.md +7 -0
  223. package/forms/cva/cva-control.class.d.ts +26 -0
  224. package/forms/cva/cva.directive.d.ts +178 -0
  225. package/forms/forms.module.d.ts +7 -0
  226. package/forms/helpers/state.d.ts +3 -0
  227. package/forms/index.d.ts +12 -0
  228. package/forms/models/cva.d.ts +4 -0
  229. package/forms/models/form-error.d.ts +31 -0
  230. package/forms/models/form-field-control.d.ts +61 -0
  231. package/forms/models/form-field.d.ts +30 -0
  232. package/forms/models/form-state.d.ts +1 -0
  233. package/forms/models/select-item.d.ts +47 -0
  234. package/forms/tokens/form-field-control.token.d.ts +3 -0
  235. package/forms/tokens/form-field.token.d.ts +3 -0
  236. package/fundamental-ngx-cdk-v0.38.3-rc.4.tgz +0 -0
  237. package/fundamental-ngx.module.d.ts +9 -0
  238. package/index.d.ts +5 -0
  239. package/package.json +80 -0
  240. package/public_api.d.ts +4 -0
  241. package/utils/README.md +7 -0
  242. package/utils/abstract-fd-ngx-class.d.ts +27 -0
  243. package/utils/coercion/array.d.ts +2 -0
  244. package/utils/consts/error-messages.d.ts +3 -0
  245. package/utils/consts/index.d.ts +4 -0
  246. package/utils/consts/overflow-priority-score.d.ts +2 -0
  247. package/utils/consts/unicode-letters.regex.d.ts +7 -0
  248. package/utils/consts/unicode-numbers.regex.d.ts +6 -0
  249. package/utils/datatypes/color-accent.datatype.d.ts +1 -0
  250. package/utils/datatypes/hash.datatype.d.ts +3 -0
  251. package/utils/datatypes/index.d.ts +3 -0
  252. package/utils/datatypes/size.datatype.d.ts +1 -0
  253. package/utils/decorators/apply-css-class.decorator.d.ts +10 -0
  254. package/utils/decorators/apply-css-style.decorator.d.ts +10 -0
  255. package/utils/decorators/coerce-boolean.d.ts +4 -0
  256. package/utils/decorators/coerce-css-pixel.d.ts +1 -0
  257. package/utils/decorators/index.d.ts +5 -0
  258. package/utils/decorators/setter-alternator.d.ts +4 -0
  259. package/utils/deprecated-selector.class.d.ts +14 -0
  260. package/utils/directives/auto-complete/auto-complete.directive.d.ts +58 -0
  261. package/utils/directives/auto-complete/auto-complete.module.d.ts +7 -0
  262. package/utils/directives/clicked/clicked-behavior.module.d.ts +12 -0
  263. package/utils/directives/clicked/clicked-event.plugin.d.ts +22 -0
  264. package/utils/directives/clicked/clicked.directive.d.ts +21 -0
  265. package/utils/directives/clicked/fdk-clicked-provider.service.d.ts +24 -0
  266. package/utils/directives/clicked/index.d.ts +3 -0
  267. package/utils/directives/disabled/default-disabled-view-modifier.d.ts +9 -0
  268. package/utils/directives/disabled/disabled-behavior.directive.d.ts +35 -0
  269. package/utils/directives/disabled/disabled-behavior.interface.d.ts +7 -0
  270. package/utils/directives/disabled/disabled-behavior.module.d.ts +7 -0
  271. package/utils/directives/disabled/disabled-view-modifier.interface.d.ts +3 -0
  272. package/utils/directives/disabled/disabled.observer.d.ts +18 -0
  273. package/utils/directives/disabled/fdk-disabled-provider.service.d.ts +35 -0
  274. package/utils/directives/disabled/fdk-disabled.token.d.ts +3 -0
  275. package/utils/directives/disabled/index.d.ts +8 -0
  276. package/utils/directives/disabled/set-disabled-state.d.ts +4 -0
  277. package/utils/directives/focus-key-manager/focus-key-manager-helpers.module.d.ts +8 -0
  278. package/utils/directives/focus-key-manager/focus-key-manager-item.directive.d.ts +37 -0
  279. package/utils/directives/focus-key-manager/focus-key-manager-list.directive.d.ts +42 -0
  280. package/utils/directives/focus-key-manager/focus-key-manager.tokens.d.ts +3 -0
  281. package/utils/directives/focus-key-manager/index.d.ts +4 -0
  282. package/utils/directives/focusable-item/default-focusable-item-view-modifier.d.ts +11 -0
  283. package/utils/directives/focusable-item/fdk-focusable-item-provider.service.d.ts +43 -0
  284. package/utils/directives/focusable-item/focusable-item-view-modifier.interface.d.ts +3 -0
  285. package/utils/directives/focusable-item/focusable-item.directive.d.ts +37 -0
  286. package/utils/directives/focusable-item/focusable-item.module.d.ts +7 -0
  287. package/utils/directives/focusable-item/focusable.observer.d.ts +18 -0
  288. package/utils/directives/focusable-item/focusable.tokens.d.ts +2 -0
  289. package/utils/directives/focusable-item/index.d.ts +8 -0
  290. package/utils/directives/focusable-item/is-element-focusable-by-default.d.ts +4 -0
  291. package/utils/directives/focusable-item/set-focusable.d.ts +4 -0
  292. package/utils/directives/focusable-list/focusable-list.directive.d.ts +25 -0
  293. package/utils/directives/focusable-list/focusable-list.module.d.ts +8 -0
  294. package/utils/directives/focusable-list/focusable-list.service.d.ts +35 -0
  295. package/utils/directives/focusable-list/index.d.ts +3 -0
  296. package/utils/directives/ignore-click-on-selection/ignore-click-on-selection.directive.d.ts +22 -0
  297. package/utils/directives/ignore-click-on-selection/ignore-click-on-selection.module.d.ts +7 -0
  298. package/utils/directives/ignore-click-on-selection/tokens.d.ts +2 -0
  299. package/utils/directives/index.d.ts +30 -0
  300. package/utils/directives/initial-focus/initial-focus.directive.d.ts +43 -0
  301. package/utils/directives/initial-focus/initial-focus.module.d.ts +7 -0
  302. package/utils/directives/line-clamp/line-clamp.directive.d.ts +101 -0
  303. package/utils/directives/line-clamp/line-clamp.module.d.ts +7 -0
  304. package/utils/directives/only-digits/only-digits.directive.d.ts +44 -0
  305. package/utils/directives/only-digits/only-digits.module.d.ts +7 -0
  306. package/utils/directives/overflow-list/overflow-list-item.directive.d.ts +14 -0
  307. package/utils/directives/overflow-list/overflow-list.directive.d.ts +62 -0
  308. package/utils/directives/overflow-list/overflow-list.module.d.ts +8 -0
  309. package/utils/directives/readonly/default-readonly-view-modifier.d.ts +9 -0
  310. package/utils/directives/readonly/fdk-readonly-provider.service.d.ts +35 -0
  311. package/utils/directives/readonly/fdk-readonly.token.d.ts +2 -0
  312. package/utils/directives/readonly/index.d.ts +9 -0
  313. package/utils/directives/readonly/readonly-behavior.directive.d.ts +32 -0
  314. package/utils/directives/readonly/readonly-behavior.interface.d.ts +7 -0
  315. package/utils/directives/readonly/readonly-behavior.module.d.ts +7 -0
  316. package/utils/directives/readonly/readonly-view-modifier.interface.d.ts +3 -0
  317. package/utils/directives/readonly/readonly.observer.d.ts +18 -0
  318. package/utils/directives/readonly/set-readonly-state.d.ts +4 -0
  319. package/utils/directives/repeat/repeat.directive.d.ts +28 -0
  320. package/utils/directives/repeat/repeat.module.d.ts +7 -0
  321. package/utils/directives/resize/resize-handle.directive.d.ts +14 -0
  322. package/utils/directives/resize/resize.directive.d.ts +57 -0
  323. package/utils/directives/resize/resize.module.d.ts +8 -0
  324. package/utils/directives/selectable-list/index.d.ts +7 -0
  325. package/utils/directives/selectable-list/select-component-root.token.d.ts +10 -0
  326. package/utils/directives/selectable-list/selectable-item.directive.d.ts +47 -0
  327. package/utils/directives/selectable-list/selectable-item.token.d.ts +11 -0
  328. package/utils/directives/selectable-list/selectable-list.directive.d.ts +33 -0
  329. package/utils/directives/selectable-list/selectable-list.module.d.ts +8 -0
  330. package/utils/directives/selectable-list/selectable-list.tokens.d.ts +2 -0
  331. package/utils/directives/selectable-list/selection.service.d.ts +65 -0
  332. package/utils/directives/template/template.directive.d.ts +18 -0
  333. package/utils/directives/template/template.module.d.ts +7 -0
  334. package/utils/directives/truncate/truncate.directive.d.ts +51 -0
  335. package/utils/directives/truncate/truncate.module.d.ts +7 -0
  336. package/utils/drag-and-drop/dnd-item/dnd-item.directive.d.ts +86 -0
  337. package/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.d.ts +32 -0
  338. package/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.d.ts +61 -0
  339. package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +65 -0
  340. package/utils/drag-and-drop/dnd.interfaces.d.ts +33 -0
  341. package/utils/drag-and-drop/drag-and-drop.module.d.ts +12 -0
  342. package/utils/drag-and-drop/index.d.ts +7 -0
  343. package/utils/drag-and-drop/tokens.d.ts +3 -0
  344. package/utils/dynamic-component/dynamic-component-config.d.ts +6 -0
  345. package/utils/dynamic-component/dynamic-component-container.d.ts +19 -0
  346. package/utils/dynamic-component/dynamic-component-injector.d.ts +13 -0
  347. package/utils/dynamic-component/dynamic-component.service.d.ts +46 -0
  348. package/utils/dynamic-component/index.d.ts +4 -0
  349. package/utils/functions/consumer-provider-factory.d.ts +5 -0
  350. package/utils/functions/element-size.d.ts +12 -0
  351. package/utils/functions/get-document-font-size.d.ts +2 -0
  352. package/utils/functions/index.d.ts +12 -0
  353. package/utils/functions/intersection-observable.d.ts +8 -0
  354. package/utils/functions/is-compact-density.d.ts +7 -0
  355. package/utils/functions/key-util.d.ts +16 -0
  356. package/utils/functions/module-deprecations-provider.d.ts +5 -0
  357. package/utils/functions/parser-file-size.d.ts +2 -0
  358. package/utils/functions/random-color-accent.d.ts +3 -0
  359. package/utils/functions/resize-observable.d.ts +8 -0
  360. package/utils/functions/scroll.d.ts +7 -0
  361. package/utils/functions/uuidv4-generator.d.ts +2 -0
  362. package/utils/helpers/get-native-element.d.ts +13 -0
  363. package/utils/helpers/index.d.ts +2 -0
  364. package/utils/helpers/range-selector.d.ts +84 -0
  365. package/utils/index.d.ts +18 -0
  366. package/utils/interfaces/content-density.d.ts +1 -0
  367. package/utils/interfaces/css-class-builder.interface.d.ts +6 -0
  368. package/utils/interfaces/css-style-builder.interface.d.ts +5 -0
  369. package/utils/interfaces/has-element-ref.interface.d.ts +5 -0
  370. package/utils/interfaces/index.d.ts +7 -0
  371. package/utils/interfaces/keyboard-support-item.interface.d.ts +6 -0
  372. package/utils/interfaces/module-deprecation.interface.d.ts +8 -0
  373. package/utils/interfaces/require.interface.d.ts +6 -0
  374. package/utils/list-item/list-item-utils.d.ts +7 -0
  375. package/utils/models/nullable.d.ts +6 -0
  376. package/utils/pipes/displayFn.pipe.d.ts +8 -0
  377. package/utils/pipes/filter-strings.pipe.d.ts +16 -0
  378. package/utils/pipes/index.d.ts +9 -0
  379. package/utils/pipes/is-compact.pipe.d.ts +9 -0
  380. package/utils/pipes/pipe.module.d.ts +14 -0
  381. package/utils/pipes/safe.pipe.d.ts +12 -0
  382. package/utils/pipes/search-highlight.pipe.d.ts +8 -0
  383. package/utils/pipes/truncate.pipe.d.ts +8 -0
  384. package/utils/pipes/two-digits.pipe.d.ts +8 -0
  385. package/utils/pipes/value-by-path.pipe.d.ts +8 -0
  386. package/utils/services/content-density.service.d.ts +19 -0
  387. package/utils/services/destroyed.service.d.ts +11 -0
  388. package/utils/services/focus-trap.service.d.ts +43 -0
  389. package/utils/services/index.d.ts +10 -0
  390. package/utils/services/keyboard-support/keyboard-support.service.d.ts +34 -0
  391. package/utils/services/local-storage.service.d.ts +13 -0
  392. package/utils/services/observers/attribute.observer.d.ts +26 -0
  393. package/utils/services/resize-observer.service.d.ts +34 -0
  394. package/utils/services/rtl.service.d.ts +12 -0
  395. package/utils/services/tabbable-element.service.d.ts +12 -0
  396. package/utils/services/themes.service.d.ts +43 -0
  397. package/utils/tokens/module-deprecations.token.d.ts +3 -0
  398. package/utils/typecheck.d.ts +47 -0
  399. package/utils/utils.module.d.ts +23 -0
package/README.md ADDED
@@ -0,0 +1,89 @@
1
+ # @Fundamental-NGX/CDK
2
+
3
+ [![npm version](https://badge.fury.io/js/%40fundamental-ngx%2Fcdk.svg)](//www.npmjs.com/package/@fundamental-ngx/cdk)
4
+ ![Build Status](https://github.com/SAP/fundamental-ngx/actions/workflows/on-push-or-pull.yml/badge.svg?branch=main)
5
+ ![npm](https://img.shields.io/npm/dm/@fundamental-ngx/cdk?label=npm%20downloads)
6
+ [![Slack](https://img.shields.io/badge/slack-ui--fundamentals-blue.svg?logo=slack)](https://ui-fundamentals.slack.com)
7
+ [![REUSE status](https://api.reuse.software/badge/github.com/SAP/fundamental-ngx)](https://api.reuse.software/info/github.com/SAP/fundamental-ngx)
8
+
9
+ ## Content
10
+
11
+ - [1. Description](#1)
12
+ - [2. Requirements](#2)
13
+ - [3. Versioning](#3)
14
+ - [4. Getting Started](#4)
15
+ - [5. Known Issues](#5)
16
+ - [6. Support](#6)
17
+ - [7. Contributing](#7)
18
+ - [8. License](https://github.com/SAP/fundamental-ngx/blob/main/LICENSE.txt)
19
+ - [9. Similar Projects](#8)
20
+
21
+ ## <a name="1"></a>1. Description
22
+
23
+ The `@fundamental-ngx/cdk` library is a set of utilities and [Angular](https://angular.io/) directives aimed to help developers build custom UI components with common interaction patterns.
24
+
25
+ It includes common behaviour for working with `DataSources` and `ControlValueAccessors`.
26
+ Additionally, it contains injectable helpers to easily control the `rxjs` subscriptions in your components, focusable/selectable list helpers and many more.
27
+
28
+ See [Component Documentation](https://sap.github.io/fundamental-ngx/docs/home) for examples and API details.
29
+
30
+ ## <a name="2"></a>2. Requirements
31
+
32
+ To download and use Fundamental Library for Angular, you will first need to install the [node package manager](https://www.npmjs.com/get-npm).
33
+
34
+ Fundamental Library for Angular is intended for use with Angular 15 or newer.
35
+
36
+ Prior knowledge of Angular is recommended, to use the fundamental-ngx library.
37
+
38
+ ## <a name="3"></a>3. Versioning
39
+
40
+ Check the [Breaking Changes](https://github.com/SAP/fundamental-ngx/wiki#breaking-changes) for the latest patches changes.
41
+
42
+ ## <a name="4"></a>4. Getting Started
43
+
44
+ For an existing Angular CLI application,
45
+
46
+ 0. **Video tutorial**
47
+ [How to use the Fundamental Core Library](https://www.youtube.com/watch?v=i4VIiuzD2Fg)
48
+
49
+ 1. **Install Fundamental-NGX CDK.**
50
+ `ng add @fundamental-ngx/cdk`
51
+ For versions prior to 0.10 use `fundamental-ngx`
52
+
53
+ _If you do not use the Angular CLI or if this command does not work for you, please see the [full installation guide](https://github.com/SAP/fundamental-ngx/wiki/Full-Installation-Guide)._
54
+
55
+ 2. **Import the modules you want to use.**
56
+
57
+ To add the entire library, add the following import to your main application module.
58
+
59
+ ```typescript
60
+ import { FundamentalNgxCDKModule } from '@fundamental-ngx/cdk';
61
+
62
+ @NgModule({
63
+ ...
64
+ imports: [FundamentalNgxCDKModule],
65
+ })
66
+ export class DemoModule { }
67
+ ```
68
+
69
+ To include an individual Angular Fundamental component in your application, you only need to import the relevant module.
70
+
71
+ For example, to use Drag&Drop directive, add the following import to your main application module.
72
+
73
+ ```typescript
74
+ import { DragAndDropModule } from '@fundamental-ngx/cdk/utils';
75
+ ```
76
+
77
+ ## <a name="5"></a>5. Known Issues
78
+
79
+ Please see [Issues](https://github.com/SAP/fundamental-ngx/issues).
80
+
81
+ ## <a name="6"></a>6. Support
82
+
83
+ If you encounter an issue, you can [create a ticket](https://github.com/SAP/fundamental-ngx/issues).
84
+
85
+ ## <a name="7"></a>7. Contributing
86
+
87
+ If you want to contribute, please check the [CONTRIBUTING.md](https://github.com/SAP/fundamental-ngx/blob/main/CONTRIBUTING.md) documentation for contribution guidelines. Please follow the [Angular commit message guidelines](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit).
88
+
89
+ Check out the [NEW_COMPONENT.md](https://github.com/SAP/fundamental-ngx/blob/main/NEW_COMPONENT.md) guide on building a new component for the library and creating the necessary documentation for your new component.
@@ -0,0 +1,7 @@
1
+ # cdk-src-lib-data-source
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test cdk-src-lib-data-source` to execute the unit tests.
@@ -0,0 +1,43 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ProviderParams } from '../helpers/common';
3
+ import { MatchBy, MatchingBy, MatchingStrategy } from '../models/matching-strategy';
4
+ /**
5
+ * Base data provider class.
6
+ */
7
+ export declare abstract class AbstractDataProvider<T> {
8
+ /** @hidden */
9
+ protected _keyPath: string;
10
+ /** @hidden */
11
+ protected _matchingStrategy: MatchingStrategy;
12
+ /** @hidden */
13
+ protected _matchingBy: MatchingBy | null;
14
+ abstract fetch(params: ProviderParams, start?: number, end?: number): Observable<T[]>;
15
+ /** @hidden */
16
+ setLookupKey(key: string): void;
17
+ /** @hidden */
18
+ setMatchingBy(matchingBy: MatchingBy): void;
19
+ /** @hidden */
20
+ setMatchingStrategy(strategy: MatchingStrategy): void;
21
+ }
22
+ /**
23
+ * Default data provider class used for other components to extend from.
24
+ */
25
+ export declare class DataProvider<T> extends AbstractDataProvider<T> {
26
+ protected values: Observable<T[]> | T[];
27
+ /** @hidden */
28
+ constructor(values: Observable<T[]> | T[]);
29
+ /** @hidden */
30
+ fetch(params: Map<string, any>): Observable<T[]>;
31
+ /**
32
+ * Warning: If you don't supply search Key and you want fulltext search, and you use this
33
+ * default implementation be aware that it can perform poorly as it is naive implementation
34
+ * that does not do deep compare.
35
+ */
36
+ matches(item: T, pattern: string): boolean;
37
+ /** @hidden */
38
+ matchesBy(item: any, pattern: string, matchingBy: MatchBy): boolean;
39
+ /** @hidden */
40
+ protected hasObjectValue(obj: any, pattern: string): boolean;
41
+ /** @hidden */
42
+ private withLimit;
43
+ }
@@ -0,0 +1,57 @@
1
+ import { BehaviorSubject, Observable, Subject } from 'rxjs';
2
+ import { DataSourceProvider } from '../models';
3
+ import { AbstractDataProvider } from './abstract-data-provider.class';
4
+ export declare abstract class BaseDataSource<T> implements DataSourceProvider<T> {
5
+ dataProvider: AbstractDataProvider<any>;
6
+ /**
7
+ * Max limit of items to be returned.
8
+ */
9
+ static readonly MaxLimit = 5;
10
+ /**
11
+ * Whether to enable limit of max items.
12
+ */
13
+ limitless: boolean;
14
+ /** @hidden */
15
+ protected readonly _dataChanges$: BehaviorSubject<T[]>;
16
+ /** @hidden */
17
+ protected readonly _dataRequested$: Subject<void>;
18
+ /** @hidden */
19
+ protected readonly _dataReceived$: Subject<void>;
20
+ /** @hidden */
21
+ protected readonly _destroy$: Subject<void>;
22
+ /** @hidden */
23
+ protected readonly _dataLoading$: BehaviorSubject<boolean>;
24
+ /**
25
+ * Emitted when new data has been requested.
26
+ * @returns Observable
27
+ */
28
+ get dataRequested(): Observable<void>;
29
+ /**
30
+ * Emitted when new data has been received.
31
+ * @returns Observable
32
+ */
33
+ get dataReceived(): Observable<void>;
34
+ /**
35
+ * Emitted when loading state has been changed.
36
+ * @returns Observable.
37
+ */
38
+ get dataLoading(): Observable<boolean>;
39
+ /**
40
+ * Emits when data from the provides has been changed.
41
+ * @returns Observable of data source objects.
42
+ */
43
+ get dataChanges(): Observable<T[]>;
44
+ /** @hidden */
45
+ protected constructor(dataProvider: AbstractDataProvider<any>);
46
+ /**
47
+ * Searches through the data source with defined parameters.
48
+ * @param predicate Search query.
49
+ * @param start start index.
50
+ * @param end end index.
51
+ */
52
+ match(predicate?: string | Map<string, string>, start?: number, end?: number): void;
53
+ /**
54
+ * Closes the stream
55
+ */
56
+ unsubscribe(): void;
57
+ }
@@ -0,0 +1,47 @@
1
+ import { EventEmitter, OnDestroy } from '@angular/core';
2
+ import { DestroyedService } from '@fundamental-ngx/cdk/utils';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { DataSource, DataSourceParser, DataSourceProvider } from './models';
5
+ import * as i0 from "@angular/core";
6
+ export declare class DataSourceDirective<T = any, P extends DataSourceProvider<T> = DataSourceProvider<T>> implements OnDestroy {
7
+ private readonly _destroyed$;
8
+ private readonly _dataSourceTransformer;
9
+ /**
10
+ * Data source.
11
+ * @param source
12
+ */
13
+ set dataSource(source: DataSource<T>);
14
+ get dataSource(): DataSource<T>;
15
+ /** @hidden */
16
+ private _dataSource;
17
+ /** @hidden */
18
+ dataSourceProvider: P | undefined;
19
+ /** @hidden */
20
+ private _dsSubscription;
21
+ /**
22
+ * Data stream. Emits when new data retrieved.
23
+ */
24
+ readonly dataChanged$: BehaviorSubject<T[]>;
25
+ /**
26
+ * Emits when the data source object has been changed.
27
+ */
28
+ readonly dataSourceChanged: EventEmitter<void>;
29
+ /**
30
+ * Event emitted when datasource content has been changed.
31
+ */
32
+ readonly dataChanged: EventEmitter<T[]>;
33
+ /**
34
+ * Event emitted when data provider loading state has been changed.
35
+ */
36
+ readonly isLoading: EventEmitter<boolean>;
37
+ /** @hidden */
38
+ constructor(_destroyed$: DestroyedService, _dataSourceTransformer: DataSourceParser<T, P>);
39
+ /** @hidden */
40
+ private _initializeDataSource;
41
+ /** @hidden */
42
+ ngOnDestroy(): void;
43
+ /** @Hidden */
44
+ private _toDataStream;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceDirective<any, any>, never>;
46
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DataSourceDirective<any, any>, "[fdkDataSource]", never, { "dataSource": "dataSource"; }, { "dataSourceChanged": "dataSourceChanged"; "dataChanged": "dataChanged"; "isLoading": "isLoading"; }, never, never, true, never>;
47
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./data-source.directive";
3
+ export declare class DataSourceModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<DataSourceModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DataSourceModule, never, [typeof i1.DataSourceDirective], [typeof i1.DataSourceDirective]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<DataSourceModule>;
7
+ }
@@ -0,0 +1,6 @@
1
+ import { Type } from '@angular/core';
2
+ export declare const applyDatasourceDirective: Type<unknown> | {
3
+ directive: Type<unknown>;
4
+ inputs?: string[];
5
+ outputs?: string[];
6
+ };
@@ -0,0 +1,7 @@
1
+ export declare type ProviderParams = ReadonlyMap<string, any>;
2
+ /** @Hidden */
3
+ export declare function getMatchingStrategyStartsWithPerTermReqexp(value: string): RegExp;
4
+ /** @hidden */
5
+ export declare function objectValues(obj: any): any[];
6
+ /** @hidden */
7
+ export declare function objectToName(target: any): string;
@@ -0,0 +1,5 @@
1
+ import { DataSourceProvider } from '../models/data-source-provider';
2
+ /**
3
+ * Checks whether passed value is a valid data source.
4
+ */
5
+ export declare function isDataSource<T = any>(value: any): value is DataSourceProvider<T>;
@@ -0,0 +1,8 @@
1
+ export * from './data-source.module';
2
+ export * from './data-source.directive';
3
+ export * from './models';
4
+ export * from './base/base-data-source.class';
5
+ export * from './base/abstract-data-provider.class';
6
+ export * from './tokens';
7
+ export * from './helpers/apply-datasource-directive';
8
+ export * from './helpers/is-datasource';
@@ -0,0 +1,23 @@
1
+ import { Observable } from 'rxjs';
2
+ /**
3
+ * Data source provider class controls the data stream.
4
+ */
5
+ export interface DataSourceProvider<T = any> {
6
+ /**
7
+ * Closes the data stream.
8
+ */
9
+ unsubscribe(): void;
10
+ /**
11
+ * Stream emits when new data has been requested.
12
+ */
13
+ dataRequested: Observable<void>;
14
+ /**
15
+ * Stream emits when new data has been loaded.
16
+ */
17
+ dataReceived: Observable<void>;
18
+ /**
19
+ * Stream emits when loading state has been changed.
20
+ */
21
+ dataLoading: Observable<boolean>;
22
+ dataChanges: Observable<T[]>;
23
+ }
@@ -0,0 +1,16 @@
1
+ import { Observable } from 'rxjs';
2
+ import { DataSourceProvider } from './data-source-provider';
3
+ /**
4
+ * Acceptable data source types.
5
+ */
6
+ export declare type DataSource<T = any> = DataSourceProvider<T> | Observable<T[]> | T[];
7
+ /**
8
+ * Data source parser is a special class that parses incoming data into appropriate data source provider.
9
+ */
10
+ export interface DataSourceParser<T = any, P extends DataSourceProvider<T> = DataSourceProvider<T>> {
11
+ /**
12
+ * Defines which data provider class to initiate.
13
+ * @param source data source to be parsed.
14
+ */
15
+ parse(source: DataSource<T>): P | undefined;
16
+ }
@@ -0,0 +1,3 @@
1
+ export * from './data-source';
2
+ export * from './data-source-provider';
3
+ export * from './matching-strategy';
@@ -0,0 +1,10 @@
1
+ export declare enum MatchingStrategy {
2
+ STARTS_WITH_PER_TERM = "starts with per term",
3
+ STARTS_WITH = "starts with",
4
+ CONTAINS = "contains"
5
+ }
6
+ export declare type MatchBy = (item: any) => any;
7
+ export interface MatchingBy {
8
+ firstBy: MatchBy;
9
+ secondaryBy?: MatchBy;
10
+ }
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { DataSourceParser } from './models/data-source';
3
+ /**
4
+ * Injection token used for passing custom datasource transformer into DataSourceProvider.
5
+ */
6
+ export declare const FD_DATA_SOURCE_TRANSFORMER: InjectionToken<DataSourceParser<any, import("@fundamental-ngx/cdk/data-source").DataSourceProvider<any>>>;
@@ -0,0 +1,126 @@
1
+ import { isFunction, isJsObject } from '@fundamental-ngx/cdk/utils';
2
+ import { isObservable, of } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { getMatchingStrategyStartsWithPerTermReqexp, objectToName, objectValues } from '../helpers/common';
5
+ import { MatchingStrategy } from '../models/matching-strategy';
6
+ /**
7
+ * Base data provider class.
8
+ */
9
+ export class AbstractDataProvider {
10
+ constructor() {
11
+ /** @hidden */
12
+ this._matchingStrategy = MatchingStrategy.STARTS_WITH;
13
+ /** @hidden */
14
+ this._matchingBy = null;
15
+ }
16
+ /** @hidden */
17
+ setLookupKey(key) {
18
+ this._keyPath = key;
19
+ }
20
+ /** @hidden */
21
+ setMatchingBy(matchingBy) {
22
+ this._matchingBy = matchingBy;
23
+ }
24
+ /** @hidden */
25
+ setMatchingStrategy(strategy) {
26
+ this._matchingStrategy = strategy;
27
+ }
28
+ }
29
+ /**
30
+ * Default data provider class used for other components to extend from.
31
+ */
32
+ export class DataProvider extends AbstractDataProvider {
33
+ /** @hidden */
34
+ constructor(values) {
35
+ super();
36
+ this.values = values;
37
+ }
38
+ /** @hidden */
39
+ fetch(params) {
40
+ const observable = isObservable(this.values) ? this.values : of(this.values);
41
+ const queryString = params.get('query');
42
+ const limit = params.get('limit') || 50;
43
+ if (!queryString || queryString === '*') {
44
+ return observable.pipe(map((items) => this.withLimit(items, limit)));
45
+ }
46
+ const toLowerPattern = queryString.toLowerCase();
47
+ return observable.pipe(map((items) => {
48
+ const result = [];
49
+ for (let i = 0; i < items.length; i++) {
50
+ const item = items[i];
51
+ if (this.matches(item, toLowerPattern)) {
52
+ result.push(item);
53
+ if (result.length >= limit) {
54
+ break;
55
+ }
56
+ }
57
+ }
58
+ return result;
59
+ }));
60
+ }
61
+ /**
62
+ * Warning: If you don't supply search Key and you want fulltext search, and you use this
63
+ * default implementation be aware that it can perform poorly as it is naive implementation
64
+ * that does not do deep compare.
65
+ */
66
+ matches(item, pattern) {
67
+ if (!this._matchingBy) {
68
+ return false;
69
+ }
70
+ const { firstBy, secondaryBy } = this._matchingBy;
71
+ let matched = this.matchesBy(item, pattern, firstBy);
72
+ if (!matched && secondaryBy) {
73
+ matched = this.matchesBy(item, pattern, secondaryBy);
74
+ }
75
+ return matched;
76
+ }
77
+ /** @hidden */
78
+ matchesBy(item, pattern, matchingBy) {
79
+ const value = isJsObject(item) && matchingBy ? matchingBy(item) : item;
80
+ if (isFunction(value)) {
81
+ return value.call(item);
82
+ }
83
+ else if (isJsObject(value)) {
84
+ return this.hasObjectValue(item, pattern);
85
+ }
86
+ else if (this._matchingStrategy === MatchingStrategy.STARTS_WITH_PER_TERM) {
87
+ const reqexp = getMatchingStrategyStartsWithPerTermReqexp(pattern);
88
+ return !!pattern && !!value && !!value.match(reqexp);
89
+ }
90
+ else if (this._matchingStrategy === MatchingStrategy.STARTS_WITH) {
91
+ return !!pattern && !!value && value.toString().toLowerCase().startsWith(pattern.toLowerCase());
92
+ }
93
+ else if (this._matchingStrategy === MatchingStrategy.CONTAINS) {
94
+ return !!pattern && !!value && value.toString().toLowerCase().indexOf(pattern) > -1;
95
+ }
96
+ else {
97
+ return !!pattern && !!value && value.toString().toLowerCase() === pattern;
98
+ }
99
+ }
100
+ /** @hidden */
101
+ hasObjectValue(obj, pattern) {
102
+ const values = objectValues(obj);
103
+ const parentObj = objectToName(obj);
104
+ const length2 = values.filter((value) => {
105
+ if (!value || Array.isArray(value)) {
106
+ return false;
107
+ }
108
+ else if (!isJsObject(value) && !isFunction(value)) {
109
+ return value.toString().toLowerCase().indexOf(pattern) !== -1;
110
+ }
111
+ else if (isJsObject(value) && objectToName(value) !== parentObj) {
112
+ return this.hasObjectValue(value, pattern);
113
+ }
114
+ return false;
115
+ }).length;
116
+ return length2 > 0;
117
+ }
118
+ /** @hidden */
119
+ withLimit(data, limit) {
120
+ if (limit && data.length > limit) {
121
+ return data.slice(0, limit);
122
+ }
123
+ return data;
124
+ }
125
+ }
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGF0YS1wcm92aWRlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvZGF0YS1zb3VyY2UvYmFzZS9hYnN0cmFjdC1kYXRhLXByb3ZpZGVyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFDSCwwQ0FBMEMsRUFDMUMsWUFBWSxFQUNaLFlBQVksRUFFZixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBdUIsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVwRjs7R0FFRztBQUNILE1BQU0sT0FBZ0Isb0JBQW9CO0lBQTFDO1FBSUksY0FBYztRQUNKLHNCQUFpQixHQUFxQixnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7UUFFN0UsY0FBYztRQUNKLGdCQUFXLEdBQXNCLElBQUksQ0FBQztJQWtCcEQsQ0FBQztJQWRHLGNBQWM7SUFDZCxZQUFZLENBQUMsR0FBVztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYztJQUNkLGFBQWEsQ0FBQyxVQUFzQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNkLG1CQUFtQixDQUFDLFFBQTBCO1FBQzFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7SUFDdEMsQ0FBQztDQUNKO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBZ0IsU0FBUSxvQkFBdUI7SUFDeEQsY0FBYztJQUNkLFlBQXNCLE1B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LEVBQUU7Z0JBQ2hDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO2lCQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNqRTtpQkFBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUMvRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzlDO1lBRUQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1YsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxjQUFjO0lBQ04sU0FBUyxDQUFDLElBQWMsRUFBRSxLQUFjO1FBQzVDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc0pzT2JqZWN0IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgICBnZXRNYXRjaGluZ1N0cmF0ZWd5U3RhcnRzV2l0aFBlclRlcm1SZXFleHAsXG4gICAgb2JqZWN0VG9OYW1lLFxuICAgIG9iamVjdFZhbHVlcyxcbiAgICBQcm92aWRlclBhcmFtc1xufSBmcm9tICcuLi9oZWxwZXJzL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRjaEJ5LCBNYXRjaGluZ0J5LCBNYXRjaGluZ1N0cmF0ZWd5IH0gZnJvbSAnLi4vbW9kZWxzL21hdGNoaW5nLXN0cmF0ZWd5JztcblxuLyoqXG4gKiBCYXNlIGRhdGEgcHJvdmlkZXIgY2xhc3MuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERhdGFQcm92aWRlcjxUPiB7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2tleVBhdGg6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9tYXRjaGluZ1N0cmF0ZWd5OiBNYXRjaGluZ1N0cmF0ZWd5ID0gTWF0Y2hpbmdTdHJhdGVneS5TVEFSVFNfV0lUSDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9tYXRjaGluZ0J5OiBNYXRjaGluZ0J5IHwgbnVsbCA9IG51bGw7XG5cbiAgICBhYnN0cmFjdCBmZXRjaChwYXJhbXM6IFByb3ZpZGVyUGFyYW1zLCBzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyKTogT2JzZXJ2YWJsZTxUW10+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXRMb29rdXBLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5UGF0aCA9IGtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldE1hdGNoaW5nQnkobWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXRjaGluZ0J5ID0gbWF0Y2hpbmdCeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldE1hdGNoaW5nU3RyYXRlZ3koc3RyYXRlZ3k6IE1hdGNoaW5nU3RyYXRlZ3kpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWF0Y2hpbmdTdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IGRhdGEgcHJvdmlkZXIgY2xhc3MgdXNlZCBmb3Igb3RoZXIgY29tcG9uZW50cyB0byBleHRlbmQgZnJvbS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFQcm92aWRlcjxUPiBleHRlbmRzIEFic3RyYWN0RGF0YVByb3ZpZGVyPFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2YWx1ZXM6IE9ic2VydmFibGU8VFtdPiB8IFRbXSkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZmV0Y2gocGFyYW1zOiBNYXA8c3RyaW5nLCBhbnk+KTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IGlzT2JzZXJ2YWJsZSh0aGlzLnZhbHVlcykgPyB0aGlzLnZhbHVlcyA6IG9mKHRoaXMudmFsdWVzKTtcblxuICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHBhcmFtcy5nZXQoJ3F1ZXJ5Jyk7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gcGFyYW1zLmdldCgnbGltaXQnKSB8fCA1MDtcblxuICAgICAgICBpZiAoIXF1ZXJ5U3RyaW5nIHx8IHF1ZXJ5U3RyaW5nID09PSAnKicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUobWFwKChpdGVtcykgPT4gdGhpcy53aXRoTGltaXQoaXRlbXMsIGxpbWl0KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9Mb3dlclBhdHRlcm4gPSBxdWVyeVN0cmluZy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdGNoZXMoaXRlbSwgdG9Mb3dlclBhdHRlcm4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID49IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXYXJuaW5nOiBJZiB5b3UgZG9uJ3Qgc3VwcGx5IHNlYXJjaCBLZXkgYW5kIHlvdSB3YW50IGZ1bGx0ZXh0IHNlYXJjaCwgYW5kIHlvdSB1c2UgdGhpc1xuICAgICAqIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYmUgYXdhcmUgdGhhdCBpdCBjYW4gIHBlcmZvcm0gcG9vcmx5IGFzIGl0IGlzIG5haXZlIGltcGxlbWVudGF0aW9uXG4gICAgICogdGhhdCBkb2VzIG5vdCBkbyBkZWVwIGNvbXBhcmUuXG4gICAgICovXG4gICAgbWF0Y2hlcyhpdGVtOiBULCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXRjaGluZ0J5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBmaXJzdEJ5LCBzZWNvbmRhcnlCeSB9ID0gdGhpcy5fbWF0Y2hpbmdCeTtcblxuICAgICAgICBsZXQgbWF0Y2hlZCA9IHRoaXMubWF0Y2hlc0J5KGl0ZW0sIHBhdHRlcm4sIGZpcnN0QnkpO1xuICAgICAgICBpZiAoIW1hdGNoZWQgJiYgc2Vjb25kYXJ5QnkpIHtcbiAgICAgICAgICAgIG1hdGNoZWQgPSB0aGlzLm1hdGNoZXNCeShpdGVtLCBwYXR0ZXJuLCBzZWNvbmRhcnlCeSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG1hdGNoZXNCeShpdGVtOiBhbnksIHBhdHRlcm46IHN0cmluZywgbWF0Y2hpbmdCeTogTWF0Y2hCeSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzSnNPYmplY3QoaXRlbSkgJiYgbWF0Y2hpbmdCeSA/IG1hdGNoaW5nQnkoaXRlbSkgOiBpdGVtO1xuXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmNhbGwoaXRlbSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNKc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc09iamVjdFZhbHVlKGl0ZW0sIHBhdHRlcm4pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX21hdGNoaW5nU3RyYXRlZ3kgPT09IE1hdGNoaW5nU3RyYXRlZ3kuU1RBUlRTX1dJVEhfUEVSX1RFUk0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcWV4cCA9IGdldE1hdGNoaW5nU3RyYXRlZ3lTdGFydHNXaXRoUGVyVGVybVJlcWV4cChwYXR0ZXJuKTtcbiAgICAgICAgICAgIHJldHVybiAhIXBhdHRlcm4gJiYgISF2YWx1ZSAmJiAhIXZhbHVlLm1hdGNoKHJlcWV4cCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbWF0Y2hpbmdTdHJhdGVneSA9PT0gTWF0Y2hpbmdTdHJhdGVneS5TVEFSVFNfV0lUSCkge1xuICAgICAgICAgICAgcmV0dXJuICEhcGF0dGVybiAmJiAhIXZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHBhdHRlcm4udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbWF0Y2hpbmdTdHJhdGVneSA9PT0gTWF0Y2hpbmdTdHJhdGVneS5DT05UQUlOUykge1xuICAgICAgICAgICAgcmV0dXJuICEhcGF0dGVybiAmJiAhIXZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHBhdHRlcm4pID4gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gISFwYXR0ZXJuICYmICEhdmFsdWUgJiYgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSBwYXR0ZXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgaGFzT2JqZWN0VmFsdWUob2JqOiBhbnksIHBhdHRlcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBvYmplY3RWYWx1ZXMob2JqKTtcbiAgICAgICAgY29uc3QgcGFyZW50T2JqID0gb2JqZWN0VG9OYW1lKG9iaik7XG4gICAgICAgIGNvbnN0IGxlbmd0aDIgPSB2YWx1ZXMuZmlsdGVyKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaXNKc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHBhdHRlcm4pICE9PSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNKc09iamVjdCh2YWx1ZSkgJiYgb2JqZWN0VG9OYW1lKHZhbHVlKSAhPT0gcGFyZW50T2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzT2JqZWN0VmFsdWUodmFsdWUsIHBhdHRlcm4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGxlbmd0aDIgPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSB3aXRoTGltaXQoZGF0YTogQXJyYXk8VD4sIGxpbWl0PzogbnVtYmVyKTogQXJyYXk8VD4ge1xuICAgICAgICBpZiAobGltaXQgJiYgZGF0YS5sZW5ndGggPiBsaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgbGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,99 @@
1
+ import { BehaviorSubject, Subject } from 'rxjs';
2
+ import { takeUntil } from 'rxjs/operators';
3
+ export class BaseDataSource {
4
+ /** @hidden */
5
+ constructor(dataProvider) {
6
+ this.dataProvider = dataProvider;
7
+ /**
8
+ * Whether to enable limit of max items.
9
+ */
10
+ this.limitless = false;
11
+ /** @hidden */
12
+ this._dataChanges$ = new BehaviorSubject([]);
13
+ /** @hidden */
14
+ this._dataRequested$ = new Subject();
15
+ /** @hidden */
16
+ this._dataReceived$ = new Subject();
17
+ /** @hidden */
18
+ this._destroy$ = new Subject();
19
+ /** @hidden */
20
+ this._dataLoading$ = new BehaviorSubject(false);
21
+ }
22
+ /**
23
+ * Emitted when new data has been requested.
24
+ * @returns Observable
25
+ */
26
+ get dataRequested() {
27
+ return this._dataRequested$.asObservable();
28
+ }
29
+ /**
30
+ * Emitted when new data has been received.
31
+ * @returns Observable
32
+ */
33
+ get dataReceived() {
34
+ return this._dataReceived$.asObservable();
35
+ }
36
+ /**
37
+ * Emitted when loading state has been changed.
38
+ * @returns Observable.
39
+ */
40
+ get dataLoading() {
41
+ return this._dataLoading$.asObservable();
42
+ }
43
+ /**
44
+ * Emits when data from the provides has been changed.
45
+ * @returns Observable of data source objects.
46
+ */
47
+ get dataChanges() {
48
+ return this._dataChanges$.asObservable().pipe(takeUntil(this._destroy$));
49
+ }
50
+ /**
51
+ * Searches through the data source with defined parameters.
52
+ * @param predicate Search query.
53
+ * @param start start index.
54
+ * @param end end index.
55
+ */
56
+ match(predicate = new Map(), start = 0, end = Infinity) {
57
+ this._dataRequested$.next();
58
+ this._dataLoading$.next(true);
59
+ const searchParam = new Map();
60
+ if (typeof predicate === 'string') {
61
+ searchParam.set('query', predicate);
62
+ }
63
+ else if (predicate instanceof Map) {
64
+ predicate.forEach((v, k) => searchParam.set(k, v));
65
+ }
66
+ else {
67
+ throw new Error('DataSource.match() predicate can only accepts string and Map');
68
+ }
69
+ if (!searchParam.has('limit') && !this.limitless) {
70
+ searchParam.set('limit', BaseDataSource.MaxLimit);
71
+ }
72
+ this.dataProvider
73
+ .fetch(searchParam, start, end)
74
+ .pipe(takeUntil(this._destroy$))
75
+ .subscribe({
76
+ next: (result) => {
77
+ this._dataReceived$.next();
78
+ this._dataLoading$.next(false);
79
+ this._dataChanges$.next(result);
80
+ },
81
+ error: () => {
82
+ this._dataReceived$.next();
83
+ this._dataLoading$.next(false);
84
+ }
85
+ });
86
+ }
87
+ /**
88
+ * Closes the stream
89
+ */
90
+ unsubscribe() {
91
+ this._destroy$.next();
92
+ this._destroy$.complete();
93
+ }
94
+ }
95
+ /**
96
+ * Max limit of items to be returned.
97
+ */
98
+ BaseDataSource.MaxLimit = 5;
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL3NyYy9saWIvZGF0YS1zb3VyY2UvYmFzZS9iYXNlLWRhdGEtc291cmNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzQyxNQUFNLE9BQWdCLGNBQWM7SUF1RGhDLGNBQWM7SUFDZCxZQUE2QixZQUF1QztRQUF2QyxpQkFBWSxHQUFaLFlBQVksQ0FBMkI7UUFsRHBFOztXQUVHO1FBQ0gsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixjQUFjO1FBQ0ssa0JBQWEsR0FBeUIsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDdEYsY0FBYztRQUNLLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN6RCxjQUFjO1FBQ0ssbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3hELGNBQWM7UUFDSyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVuRCxjQUFjO1FBQ0ssa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQW1DQSxDQUFDO0lBakN4RTs7O09BR0c7SUFDSCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBS0Q7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsWUFBMEMsSUFBSSxHQUFHLEVBQWtCLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsUUFBUTtRQUNoRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFFOUIsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDL0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDdkM7YUFBTSxJQUFJLFNBQVMsWUFBWSxHQUFHLEVBQUU7WUFDakMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEQ7YUFBTTtZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztTQUNuRjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM5QyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLENBQUMsWUFBWTthQUNaLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQixTQUFTLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLENBQUM7U0FDSixDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7O0FBdEdEOztHQUVHO0FBQ2EsdUJBQVEsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFTb3VyY2VQcm92aWRlciB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFQcm92aWRlciB9IGZyb20gJy4vYWJzdHJhY3QtZGF0YS1wcm92aWRlci5jbGFzcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YVNvdXJjZTxUPiBpbXBsZW1lbnRzIERhdGFTb3VyY2VQcm92aWRlcjxUPiB7XG4gICAgLyoqXG4gICAgICogTWF4IGxpbWl0IG9mIGl0ZW1zIHRvIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyByZWFkb25seSBNYXhMaW1pdCA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBsaW1pdCBvZiBtYXggaXRlbXMuXG4gICAgICovXG4gICAgbGltaXRsZXNzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGF0YUNoYW5nZXMkOiBCZWhhdmlvclN1YmplY3Q8VFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPihbXSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFSZXF1ZXN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGF0YVJlY2VpdmVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kYXRhTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBuZXcgZGF0YSBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIGdldCBkYXRhUmVxdWVzdGVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVJlcXVlc3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIG5ldyBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBnZXQgZGF0YVJlY2VpdmVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVJlY2VpdmVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gbG9hZGluZyBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUuXG4gICAgICovXG4gICAgZ2V0IGRhdGFMb2FkaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YUxvYWRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHdoZW4gZGF0YSBmcm9tIHRoZSBwcm92aWRlcyBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgZGF0YSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKi9cbiAgICBnZXQgZGF0YUNoYW5nZXMoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFDaGFuZ2VzJC5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhUHJvdmlkZXI6IEFic3RyYWN0RGF0YVByb3ZpZGVyPGFueT4pIHt9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2hlcyB0aHJvdWdoIHRoZSBkYXRhIHNvdXJjZSB3aXRoIGRlZmluZWQgcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gcHJlZGljYXRlIFNlYXJjaCBxdWVyeS5cbiAgICAgKiBAcGFyYW0gc3RhcnQgc3RhcnQgaW5kZXguXG4gICAgICogQHBhcmFtIGVuZCBlbmQgaW5kZXguXG4gICAgICovXG4gICAgbWF0Y2gocHJlZGljYXRlOiBzdHJpbmcgfCBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSwgc3RhcnQgPSAwLCBlbmQgPSBJbmZpbml0eSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhUmVxdWVzdGVkJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2RhdGFMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgICBjb25zdCBzZWFyY2hQYXJhbSA9IG5ldyBNYXAoKTtcblxuICAgICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHNlYXJjaFBhcmFtLnNldCgncXVlcnknLCBwcmVkaWNhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHByZWRpY2F0ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgcHJlZGljYXRlLmZvckVhY2goKHYsIGspID0+IHNlYXJjaFBhcmFtLnNldChrLCB2KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGFTb3VyY2UubWF0Y2goKSBwcmVkaWNhdGUgY2FuIG9ubHkgYWNjZXB0cyBzdHJpbmcgYW5kIE1hcCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZWFyY2hQYXJhbS5oYXMoJ2xpbWl0JykgJiYgIXRoaXMubGltaXRsZXNzKSB7XG4gICAgICAgICAgICBzZWFyY2hQYXJhbS5zZXQoJ2xpbWl0JywgQmFzZURhdGFTb3VyY2UuTWF4TGltaXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJcbiAgICAgICAgICAgIC5mZXRjaChzZWFyY2hQYXJhbSwgc3RhcnQsIGVuZClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAocmVzdWx0OiBUW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVJlY2VpdmVkJC5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUNoYW5nZXMkLm5leHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFSZWNlaXZlZCQubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBzdHJlYW1cbiAgICAgKi9cbiAgICB1bnN1YnNjcmliZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiJdfQ==