@fundamental-ngx/cdk 0.54.2 → 0.55.0-rc.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 (256) hide show
  1. package/fesm2022/fundamental-ngx-cdk-data-source.mjs +7 -7
  2. package/fesm2022/fundamental-ngx-cdk-forms.mjs +21 -14
  3. package/fesm2022/fundamental-ngx-cdk-forms.mjs.map +1 -1
  4. package/fesm2022/fundamental-ngx-cdk-utils.mjs +361 -312
  5. package/fesm2022/fundamental-ngx-cdk-utils.mjs.map +1 -1
  6. package/fesm2022/fundamental-ngx-cdk.mjs +4 -4
  7. package/forms/cva/cva.directive.d.ts +7 -3
  8. package/package.json +8 -16
  9. package/utils/abstract-fd-ngx-class.d.ts +1 -1
  10. package/utils/directives/overflow-list/overflow-list.directive.d.ts +7 -0
  11. package/utils/drag-and-drop/dnd-item/dnd-item.directive.d.ts +1 -1
  12. package/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.d.ts +1 -1
  13. package/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.d.ts +1 -1
  14. package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +1 -1
  15. package/utils/drag-and-drop/drag-and-drop.module.d.ts +7 -7
  16. package/utils/toast/base-toast-positions.d.ts +16 -16
  17. package/utils/toast/classes/base-toast-animated-container.component.d.ts +1 -1
  18. package/utils/toast/classes/base-toast-container.component.d.ts +1 -1
  19. package/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-container.component.d.ts +1 -1
  20. package/esm2022/data-source/base/abstract-data-provider.class.mjs +0 -142
  21. package/esm2022/data-source/base/base-data-source.class.mjs +0 -112
  22. package/esm2022/data-source/data-source.directive.mjs +0 -95
  23. package/esm2022/data-source/data-source.module.mjs +0 -16
  24. package/esm2022/data-source/fundamental-ngx-cdk-data-source.mjs +0 -5
  25. package/esm2022/data-source/helpers/apply-datasource-directive.mjs +0 -7
  26. package/esm2022/data-source/helpers/common.mjs +0 -17
  27. package/esm2022/data-source/helpers/is-datasource.mjs +0 -7
  28. package/esm2022/data-source/index.mjs +0 -9
  29. package/esm2022/data-source/models/data-source-provider.mjs +0 -2
  30. package/esm2022/data-source/models/data-source.mjs +0 -2
  31. package/esm2022/data-source/models/index.mjs +0 -4
  32. package/esm2022/data-source/models/matching-strategy.mjs +0 -7
  33. package/esm2022/data-source/tokens.mjs +0 -6
  34. package/esm2022/forms/cva/cva-control.class.mjs +0 -42
  35. package/esm2022/forms/cva/cva.directive.mjs +0 -321
  36. package/esm2022/forms/forms.module.mjs +0 -16
  37. package/esm2022/forms/fundamental-ngx-cdk-forms.mjs +0 -5
  38. package/esm2022/forms/helpers/state.mjs +0 -7
  39. package/esm2022/forms/index.mjs +0 -13
  40. package/esm2022/forms/models/control-type.model.mjs +0 -2
  41. package/esm2022/forms/models/cva.mjs +0 -2
  42. package/esm2022/forms/models/form-error.mjs +0 -2
  43. package/esm2022/forms/models/form-field.mjs +0 -9
  44. package/esm2022/forms/models/form-state.mjs +0 -2
  45. package/esm2022/forms/models/select-item.mjs +0 -14
  46. package/esm2022/forms/tokens/form-field-control.token.mjs +0 -3
  47. package/esm2022/forms/tokens/form-field.token.mjs +0 -3
  48. package/esm2022/fundamental-ngx-cdk.mjs +0 -5
  49. package/esm2022/fundamental-ngx.module.mjs +0 -19
  50. package/esm2022/index.mjs +0 -5
  51. package/esm2022/utils/abstract-fd-ngx-class.mjs +0 -61
  52. package/esm2022/utils/async-strategy/function-strategy.class.mjs +0 -12
  53. package/esm2022/utils/async-strategy/index.mjs +0 -7
  54. package/esm2022/utils/async-strategy/observable-strategy.class.mjs +0 -13
  55. package/esm2022/utils/async-strategy/promise-strategy.class.mjs +0 -12
  56. package/esm2022/utils/async-strategy/select-strategy.class.mjs +0 -23
  57. package/esm2022/utils/async-strategy/subscription-strategy.interface.mjs +0 -2
  58. package/esm2022/utils/async-strategy/value-strategy.class.mjs +0 -10
  59. package/esm2022/utils/coercion/array.mjs +0 -7
  60. package/esm2022/utils/components/dynamic-portal/dynamic-portal.component.mjs +0 -98
  61. package/esm2022/utils/components/index.mjs +0 -2
  62. package/esm2022/utils/consts/error-messages.mjs +0 -6
  63. package/esm2022/utils/consts/index.mjs +0 -5
  64. package/esm2022/utils/consts/overflow-priority-score.mjs +0 -8
  65. package/esm2022/utils/consts/unicode-letters.regex.mjs +0 -11
  66. package/esm2022/utils/consts/unicode-numbers.regex.mjs +0 -8
  67. package/esm2022/utils/datatypes/color-accent.datatype.mjs +0 -2
  68. package/esm2022/utils/datatypes/hash.datatype.mjs +0 -2
  69. package/esm2022/utils/datatypes/index.mjs +0 -5
  70. package/esm2022/utils/datatypes/object-nesting.types.mjs +0 -2
  71. package/esm2022/utils/datatypes/size.datatype.mjs +0 -2
  72. package/esm2022/utils/decorators/apply-css-class.decorator.mjs +0 -61
  73. package/esm2022/utils/decorators/apply-css-style.decorator.mjs +0 -26
  74. package/esm2022/utils/decorators/coerce-boolean.mjs +0 -7
  75. package/esm2022/utils/decorators/coerce-css-pixel.mjs +0 -4
  76. package/esm2022/utils/decorators/index.mjs +0 -6
  77. package/esm2022/utils/decorators/setter-alternator.mjs +0 -18
  78. package/esm2022/utils/deprecated-selector.class.mjs +0 -35
  79. package/esm2022/utils/directives/auto-complete/auto-complete.directive.mjs +0 -135
  80. package/esm2022/utils/directives/auto-complete/auto-complete.module.mjs +0 -17
  81. package/esm2022/utils/directives/breakpoints/breakpoint.directive.mjs +0 -156
  82. package/esm2022/utils/directives/breakpoints/responsive-breakpoints.mjs +0 -19
  83. package/esm2022/utils/directives/clicked/clicked-behavior.module.mjs +0 -35
  84. package/esm2022/utils/directives/clicked/clicked-event.plugin.mjs +0 -79
  85. package/esm2022/utils/directives/clicked/clicked.directive.mjs +0 -36
  86. package/esm2022/utils/directives/clicked/element-click.observable.mjs +0 -21
  87. package/esm2022/utils/directives/clicked/fdk-clicked-provider.service.mjs +0 -48
  88. package/esm2022/utils/directives/clicked/index.mjs +0 -6
  89. package/esm2022/utils/directives/clicked/provide-fdk-clicked.mjs +0 -29
  90. package/esm2022/utils/directives/disabled/default-disabled-view-modifier.mjs +0 -12
  91. package/esm2022/utils/directives/disabled/disabled-behavior.directive.mjs +0 -84
  92. package/esm2022/utils/directives/disabled/disabled-behavior.interface.mjs +0 -2
  93. package/esm2022/utils/directives/disabled/disabled-behavior.module.mjs +0 -16
  94. package/esm2022/utils/directives/disabled/disabled-view-modifier.interface.mjs +0 -2
  95. package/esm2022/utils/directives/disabled/disabled.observer.mjs +0 -35
  96. package/esm2022/utils/directives/disabled/fdk-disabled-provider.service.mjs +0 -101
  97. package/esm2022/utils/directives/disabled/fdk-disabled.token.mjs +0 -3
  98. package/esm2022/utils/directives/disabled/index.mjs +0 -9
  99. package/esm2022/utils/directives/disabled/set-disabled-state.mjs +0 -18
  100. package/esm2022/utils/directives/focus-key-manager/focus-key-manager-helpers.module.mjs +0 -17
  101. package/esm2022/utils/directives/focus-key-manager/focus-key-manager-item.directive.mjs +0 -67
  102. package/esm2022/utils/directives/focus-key-manager/focus-key-manager-list.directive.mjs +0 -88
  103. package/esm2022/utils/directives/focus-key-manager/focus-key-manager.tokens.mjs +0 -3
  104. package/esm2022/utils/directives/focus-key-manager/index.mjs +0 -5
  105. package/esm2022/utils/directives/focusable-grid/focusable-grid.directive.mjs +0 -164
  106. package/esm2022/utils/directives/focusable-grid/focusable-grid.module.mjs +0 -17
  107. package/esm2022/utils/directives/focusable-grid/focusable-grid.tokens.mjs +0 -3
  108. package/esm2022/utils/directives/focusable-grid/index.mjs +0 -4
  109. package/esm2022/utils/directives/focusable-item/focusable-item.directive.mjs +0 -198
  110. package/esm2022/utils/directives/focusable-item/focusable-item.module.mjs +0 -16
  111. package/esm2022/utils/directives/focusable-item/focusable-item.tokens.mjs +0 -3
  112. package/esm2022/utils/directives/focusable-item/focusable-list.position.mjs +0 -2
  113. package/esm2022/utils/directives/focusable-item/focusable.item.mjs +0 -2
  114. package/esm2022/utils/directives/focusable-item/focusable.observer.mjs +0 -46
  115. package/esm2022/utils/directives/focusable-item/get-item-element.mjs +0 -14
  116. package/esm2022/utils/directives/focusable-item/index.mjs +0 -9
  117. package/esm2022/utils/directives/focusable-item/indirect-focusable-item.directive.mjs +0 -44
  118. package/esm2022/utils/directives/focusable-item/is-element-focusable-by-default.mjs +0 -32
  119. package/esm2022/utils/directives/focusable-item/is-item-focusable.mjs +0 -8
  120. package/esm2022/utils/directives/focusable-list/focusable-list.directive.mjs +0 -300
  121. package/esm2022/utils/directives/focusable-list/focusable-list.module.mjs +0 -17
  122. package/esm2022/utils/directives/focusable-list/focusable-list.tokens.mjs +0 -3
  123. package/esm2022/utils/directives/focusable-list/index.mjs +0 -6
  124. package/esm2022/utils/directives/focusable-list/indirect-focusable-list.directive.mjs +0 -59
  125. package/esm2022/utils/directives/focusable-list/scroll.mjs +0 -43
  126. package/esm2022/utils/directives/ignore-click-on-selection/ignore-click-on-selection.directive.mjs +0 -55
  127. package/esm2022/utils/directives/ignore-click-on-selection/ignore-click-on-selection.module.mjs +0 -16
  128. package/esm2022/utils/directives/ignore-click-on-selection/tokens.mjs +0 -3
  129. package/esm2022/utils/directives/index.mjs +0 -35
  130. package/esm2022/utils/directives/initial-focus/initial-focus.directive.mjs +0 -99
  131. package/esm2022/utils/directives/initial-focus/initial-focus.module.mjs +0 -16
  132. package/esm2022/utils/directives/intersection-spy/intersection-spy.directive.mjs +0 -42
  133. package/esm2022/utils/directives/line-clamp/line-clamp.directive.mjs +0 -213
  134. package/esm2022/utils/directives/line-clamp/line-clamp.module.mjs +0 -16
  135. package/esm2022/utils/directives/only-digits/only-digits.directive.mjs +0 -206
  136. package/esm2022/utils/directives/only-digits/only-digits.module.mjs +0 -16
  137. package/esm2022/utils/directives/overflow-list/overflow-list-item.directive.mjs +0 -18
  138. package/esm2022/utils/directives/overflow-list/overflow-list.directive.mjs +0 -114
  139. package/esm2022/utils/directives/overflow-list/overflow-list.module.mjs +0 -17
  140. package/esm2022/utils/directives/readonly/default-readonly-view-modifier.mjs +0 -12
  141. package/esm2022/utils/directives/readonly/fdk-readonly-provider.service.mjs +0 -101
  142. package/esm2022/utils/directives/readonly/fdk-readonly.token.mjs +0 -3
  143. package/esm2022/utils/directives/readonly/index.mjs +0 -10
  144. package/esm2022/utils/directives/readonly/readonly-behavior.directive.mjs +0 -67
  145. package/esm2022/utils/directives/readonly/readonly-behavior.interface.mjs +0 -2
  146. package/esm2022/utils/directives/readonly/readonly-behavior.module.mjs +0 -16
  147. package/esm2022/utils/directives/readonly/readonly-view-modifier.interface.mjs +0 -2
  148. package/esm2022/utils/directives/readonly/readonly.observer.mjs +0 -33
  149. package/esm2022/utils/directives/readonly/set-readonly-state.mjs +0 -14
  150. package/esm2022/utils/directives/repeat/repeat.directive.mjs +0 -34
  151. package/esm2022/utils/directives/repeat/repeat.module.mjs +0 -16
  152. package/esm2022/utils/directives/resize/resize-handle.directive.mjs +0 -18
  153. package/esm2022/utils/directives/resize/resize.directive.mjs +0 -241
  154. package/esm2022/utils/directives/resize/resize.module.mjs +0 -17
  155. package/esm2022/utils/directives/resize-observer/index.mjs +0 -2
  156. package/esm2022/utils/directives/resize-observer/resize-observer.directive.mjs +0 -29
  157. package/esm2022/utils/directives/selectable-list/index.mjs +0 -8
  158. package/esm2022/utils/directives/selectable-list/select-component-root.token.mjs +0 -3
  159. package/esm2022/utils/directives/selectable-list/selectable-item.directive.mjs +0 -147
  160. package/esm2022/utils/directives/selectable-list/selectable-item.token.mjs +0 -3
  161. package/esm2022/utils/directives/selectable-list/selectable-list.directive.mjs +0 -85
  162. package/esm2022/utils/directives/selectable-list/selectable-list.module.mjs +0 -17
  163. package/esm2022/utils/directives/selectable-list/selectable-list.tokens.mjs +0 -3
  164. package/esm2022/utils/directives/selectable-list/selection.service.mjs +0 -138
  165. package/esm2022/utils/directives/template/template.directive.mjs +0 -25
  166. package/esm2022/utils/directives/template/template.module.mjs +0 -16
  167. package/esm2022/utils/directives/truncate/truncate.directive.mjs +0 -94
  168. package/esm2022/utils/directives/truncate/truncate.module.mjs +0 -16
  169. package/esm2022/utils/drag-and-drop/dnd-item/dnd-item.directive.mjs +0 -274
  170. package/esm2022/utils/drag-and-drop/dnd-keyboard-group/dnd-keyboard-group.directive.mjs +0 -88
  171. package/esm2022/utils/drag-and-drop/dnd-keyboard-item/dnd-keyboard-item.directive.mjs +0 -83
  172. package/esm2022/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +0 -378
  173. package/esm2022/utils/drag-and-drop/dnd.interfaces.mjs +0 -2
  174. package/esm2022/utils/drag-and-drop/drag-and-drop.module.mjs +0 -22
  175. package/esm2022/utils/drag-and-drop/index.mjs +0 -8
  176. package/esm2022/utils/drag-and-drop/tokens.mjs +0 -4
  177. package/esm2022/utils/dynamic-component/dynamic-component-config.mjs +0 -2
  178. package/esm2022/utils/dynamic-component/dynamic-component-container.mjs +0 -32
  179. package/esm2022/utils/dynamic-component/dynamic-component-injector.mjs +0 -20
  180. package/esm2022/utils/dynamic-component/dynamic-component.service.mjs +0 -100
  181. package/esm2022/utils/dynamic-component/index.mjs +0 -5
  182. package/esm2022/utils/functions/consumer-provider-factory.mjs +0 -12
  183. package/esm2022/utils/functions/element-size.mjs +0 -23
  184. package/esm2022/utils/functions/get-document-font-size.mjs +0 -9
  185. package/esm2022/utils/functions/index.mjs +0 -14
  186. package/esm2022/utils/functions/intersection-observable.mjs +0 -26
  187. package/esm2022/utils/functions/is-compact-density.mjs +0 -11
  188. package/esm2022/utils/functions/is-odd.mjs +0 -9
  189. package/esm2022/utils/functions/key-util.mjs +0 -90
  190. package/esm2022/utils/functions/module-deprecations-provider.mjs +0 -18
  191. package/esm2022/utils/functions/parser-file-size.mjs +0 -37
  192. package/esm2022/utils/functions/random-color-accent.mjs +0 -5
  193. package/esm2022/utils/functions/resize-observable.mjs +0 -33
  194. package/esm2022/utils/functions/scroll.mjs +0 -19
  195. package/esm2022/utils/functions/uuidv4-generator.mjs +0 -12
  196. package/esm2022/utils/fundamental-ngx-cdk-utils.mjs +0 -5
  197. package/esm2022/utils/helpers/destroy-observable.mjs +0 -12
  198. package/esm2022/utils/helpers/dfs.mjs +0 -47
  199. package/esm2022/utils/helpers/get-native-element.mjs +0 -19
  200. package/esm2022/utils/helpers/index.mjs +0 -6
  201. package/esm2022/utils/helpers/range-selector.mjs +0 -117
  202. package/esm2022/utils/helpers/warn-once.mjs +0 -9
  203. package/esm2022/utils/index.mjs +0 -25
  204. package/esm2022/utils/interfaces/content-density.mjs +0 -2
  205. package/esm2022/utils/interfaces/css-class-builder.interface.mjs +0 -2
  206. package/esm2022/utils/interfaces/css-style-builder.interface.mjs +0 -2
  207. package/esm2022/utils/interfaces/has-element-ref.interface.mjs +0 -2
  208. package/esm2022/utils/interfaces/index.mjs +0 -8
  209. package/esm2022/utils/interfaces/keyboard-support-item.interface.mjs +0 -2
  210. package/esm2022/utils/interfaces/module-deprecation.interface.mjs +0 -2
  211. package/esm2022/utils/interfaces/require.interface.mjs +0 -2
  212. package/esm2022/utils/list-item/list-item-utils.mjs +0 -3
  213. package/esm2022/utils/models/nullable.mjs +0 -2
  214. package/esm2022/utils/pipes/async-or-sync.pipe.mjs +0 -35
  215. package/esm2022/utils/pipes/displayFn.pipe.mjs +0 -18
  216. package/esm2022/utils/pipes/filter-strings.pipe.mjs +0 -31
  217. package/esm2022/utils/pipes/index.mjs +0 -12
  218. package/esm2022/utils/pipes/is-compact.pipe.mjs +0 -16
  219. package/esm2022/utils/pipes/make-async.pipe.mjs +0 -24
  220. package/esm2022/utils/pipes/pipe.module.mjs +0 -65
  221. package/esm2022/utils/pipes/safe.pipe.mjs +0 -37
  222. package/esm2022/utils/pipes/search-highlight.pipe.mjs +0 -40
  223. package/esm2022/utils/pipes/truncate.pipe.mjs +0 -18
  224. package/esm2022/utils/pipes/two-digits.pipe.mjs +0 -23
  225. package/esm2022/utils/pipes/value-by-path.pipe.mjs +0 -16
  226. package/esm2022/utils/services/content-density.service.mjs +0 -35
  227. package/esm2022/utils/services/destroyed.service.mjs +0 -26
  228. package/esm2022/utils/services/focus-trap.service.mjs +0 -92
  229. package/esm2022/utils/services/index.mjs +0 -10
  230. package/esm2022/utils/services/keyboard-support/keyboard-support.service.mjs +0 -73
  231. package/esm2022/utils/services/local-storage.service.mjs +0 -38
  232. package/esm2022/utils/services/observers/attribute.observer.mjs +0 -81
  233. package/esm2022/utils/services/resize-observer.service.mjs +0 -92
  234. package/esm2022/utils/services/rtl.service.mjs +0 -32
  235. package/esm2022/utils/services/tabbable-element.service.mjs +0 -43
  236. package/esm2022/utils/toast/base-toast-animations.mjs +0 -22
  237. package/esm2022/utils/toast/base-toast-positions.mjs +0 -108
  238. package/esm2022/utils/toast/base-toast.service.mjs +0 -261
  239. package/esm2022/utils/toast/classes/action-dismissible/base-toast-action-dismissible-ref.mjs +0 -36
  240. package/esm2022/utils/toast/classes/base-toast-animated-container.component.mjs +0 -87
  241. package/esm2022/utils/toast/classes/base-toast-config.mjs +0 -23
  242. package/esm2022/utils/toast/classes/base-toast-container.component.mjs +0 -72
  243. package/esm2022/utils/toast/classes/base-toast-overlay-container.mjs +0 -25
  244. package/esm2022/utils/toast/classes/base-toast-ref.mjs +0 -45
  245. package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-config.mjs +0 -19
  246. package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-container.component.mjs +0 -39
  247. package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible-ref.mjs +0 -23
  248. package/esm2022/utils/toast/classes/duration-dismissible/base-toast-duration-dismissible.service.mjs +0 -25
  249. package/esm2022/utils/toast/index.mjs +0 -16
  250. package/esm2022/utils/toast/interfaces/toast-container-component.interface.mjs +0 -2
  251. package/esm2022/utils/toast/interfaces/toast-duration-dismissible-container-component.interface.mjs +0 -2
  252. package/esm2022/utils/toast/interfaces/toast-text-component.interface.mjs +0 -2
  253. package/esm2022/utils/tokens/module-deprecations.token.mjs +0 -3
  254. package/esm2022/utils/tokens/viewport-size.observable.mjs +0 -20
  255. package/esm2022/utils/typecheck.mjs +0 -75
  256. package/esm2022/utils/utils.module.mjs +0 -131
@@ -8,11 +8,11 @@ import * as i0 from '@angular/core';
8
8
  import { NgModule } from '@angular/core';
9
9
 
10
10
  class FundamentalNgxCdkModule {
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FundamentalNgxCdkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.3", ngImport: i0, type: FundamentalNgxCdkModule, exports: [FormsModule, DataSourceModule, UtilsModule] }); }
13
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FundamentalNgxCdkModule, imports: [FormsModule, DataSourceModule, UtilsModule] }); }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FundamentalNgxCdkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: FundamentalNgxCdkModule, exports: [FormsModule, DataSourceModule, UtilsModule] }); }
13
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FundamentalNgxCdkModule, imports: [FormsModule, DataSourceModule, UtilsModule] }); }
14
14
  }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FundamentalNgxCdkModule, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FundamentalNgxCdkModule, decorators: [{
16
16
  type: NgModule,
17
17
  args: [{
18
18
  imports: [],
@@ -82,12 +82,16 @@ export declare class CvaDirective<T = any> implements HasElementRef, BaseCVA, Fo
82
82
  readonly ngForm: NgForm | null;
83
83
  /** @hidden */
84
84
  readonly normalizedState$: import("@angular/core").Signal<"success" | "error" | "warning" | "default" | "information">;
85
+ /** @hidden */
86
+ protected _subscriptions: Subscription;
87
+ /**
88
+ * A private property to hold the ElementRef which might be null
89
+ */
90
+ private _elementRefOrNull;
85
91
  /**
86
92
  * Element reference.
87
93
  */
88
- readonly elementRef: ElementRef<any>;
89
- /** @hidden */
90
- protected _subscriptions: Subscription;
94
+ get elementRef(): ElementRef;
91
95
  /** @hidden */
92
96
  private _defaultId;
93
97
  /** ID for the Element */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/cdk",
3
- "version": "0.54.2",
3
+ "version": "0.55.0-rc.0",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "description": "Fundamental Library for Angular - CDK",
6
6
  "license": "Apache-2.0",
@@ -13,13 +13,13 @@
13
13
  "node": ">= 10"
14
14
  },
15
15
  "peerDependencies": {
16
- "@angular/animations": "^18.0.0",
17
- "@angular/cdk": "^18.0.0",
18
- "@angular/common": "^18.0.0",
19
- "@angular/core": "^18.0.0",
20
- "@angular/forms": "^18.0.0",
21
- "@angular/platform-browser": "^18.0.0",
22
- "@angular/router": "^18.0.0",
16
+ "@angular/animations": "^19.0.0",
17
+ "@angular/cdk": "^19.0.0",
18
+ "@angular/common": "^19.0.0",
19
+ "@angular/core": "^19.0.0",
20
+ "@angular/forms": "^19.0.0",
21
+ "@angular/platform-browser": "^19.0.0",
22
+ "@angular/router": "^19.0.0",
23
23
  "rxjs": "^7.8.0"
24
24
  },
25
25
  "dependencies": {
@@ -43,26 +43,18 @@
43
43
  },
44
44
  ".": {
45
45
  "types": "./index.d.ts",
46
- "esm2022": "./esm2022/fundamental-ngx-cdk.mjs",
47
- "esm": "./esm2022/fundamental-ngx-cdk.mjs",
48
46
  "default": "./fesm2022/fundamental-ngx-cdk.mjs"
49
47
  },
50
48
  "./data-source": {
51
49
  "types": "./data-source/index.d.ts",
52
- "esm2022": "./esm2022/data-source/fundamental-ngx-cdk-data-source.mjs",
53
- "esm": "./esm2022/data-source/fundamental-ngx-cdk-data-source.mjs",
54
50
  "default": "./fesm2022/fundamental-ngx-cdk-data-source.mjs"
55
51
  },
56
52
  "./forms": {
57
53
  "types": "./forms/index.d.ts",
58
- "esm2022": "./esm2022/forms/fundamental-ngx-cdk-forms.mjs",
59
- "esm": "./esm2022/forms/fundamental-ngx-cdk-forms.mjs",
60
54
  "default": "./fesm2022/fundamental-ngx-cdk-forms.mjs"
61
55
  },
62
56
  "./utils": {
63
57
  "types": "./utils/index.d.ts",
64
- "esm2022": "./esm2022/utils/fundamental-ngx-cdk-utils.mjs",
65
- "esm": "./esm2022/utils/fundamental-ngx-cdk-utils.mjs",
66
58
  "default": "./fesm2022/fundamental-ngx-cdk-utils.mjs"
67
59
  }
68
60
  },
@@ -24,5 +24,5 @@ export declare abstract class AbstractFdNgxClass implements HasElementRef, OnIni
24
24
  /** @hidden */
25
25
  ngOnInit(): void;
26
26
  static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFdNgxClass, never>;
27
- static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFdNgxClass, never, never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, false, never>;
27
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFdNgxClass, never, never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
28
28
  }
@@ -27,6 +27,8 @@ export declare class OverflowListDirective implements AfterViewInit {
27
27
  /** @hidden */
28
28
  private readonly _destroyRef;
29
29
  /** @hidden */
30
+ private observer;
31
+ /** @hidden */
30
32
  constructor(_el: ElementRef, _ngZone: NgZone);
31
33
  /** @hidden */
32
34
  ngAfterViewInit(): void;
@@ -34,6 +36,11 @@ export declare class OverflowListDirective implements AfterViewInit {
34
36
  * @description Get amount of extra items in current list
35
37
  * */
36
38
  getAmountOfExtraItems(): number;
39
+ /**
40
+ * @description Ensuring that calculations run in the Angular zone
41
+ */
42
+ calculateOverflow(): void;
43
+ private initResizeObserver;
37
44
  /** @hidden */
38
45
  private _calculateAmountOfOverflowedItems;
39
46
  /**
@@ -91,5 +91,5 @@ export declare class DndItemDirective<T = any> implements DndItem, AfterContentI
91
91
  /** @hidden */
92
92
  private _listenElementEvents;
93
93
  static ɵfac: i0.ɵɵFactoryDeclaration<DndItemDirective<any>, never>;
94
- static ɵdir: i0.ɵɵDirectiveDeclaration<DndItemDirective<any>, "[fdkDndItem], [fd-dnd-item]", never, { "item": { "alias": "fdkDndItem"; "required": false; }; "applyDragItemClass": { "alias": "applyDragItemClass"; "required": false; }; "containerSelector": { "alias": "containerSelector"; "required": false; }; "stickInPlace": { "alias": "stickInPlace"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "classWhenElementDragged": { "alias": "classWhenElementDragged"; "required": false; }; }, { "moved": "moved"; "released": "released"; "started": "started"; }, never, never, false, never>;
94
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DndItemDirective<any>, "[fdkDndItem], [fd-dnd-item]", never, { "item": { "alias": "fdkDndItem"; "required": false; }; "applyDragItemClass": { "alias": "applyDragItemClass"; "required": false; }; "containerSelector": { "alias": "containerSelector"; "required": false; }; "stickInPlace": { "alias": "stickInPlace"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "classWhenElementDragged": { "alias": "classWhenElementDragged"; "required": false; }; }, { "moved": "moved"; "released": "released"; "started": "started"; }, never, never, true, never>;
95
95
  }
@@ -28,5 +28,5 @@ export declare class DndKeyboardGroupDirective {
28
28
  /** @hidden Focus after moving elements with keyboard */
29
29
  private _focusDndItem;
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<DndKeyboardGroupDirective, [null, { optional: true; }]>;
31
- static ɵdir: i0.ɵɵDirectiveDeclaration<DndKeyboardGroupDirective, "[fdkDndKeyboardGroup], [fdDndKeyboardGroup]", never, { "groups": { "alias": "groups"; "required": false; }; "disableKeyboardDragDrop": { "alias": "disableKeyboardDragDrop"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "customMoveFn": { "alias": "customMoveFn"; "required": false; }; "customTransferFn": { "alias": "customTransferFn"; "required": false; }; }, {}, never, never, false, never>;
31
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DndKeyboardGroupDirective, "[fdkDndKeyboardGroup], [fdDndKeyboardGroup]", never, { "groups": { "alias": "groups"; "required": false; }; "disableKeyboardDragDrop": { "alias": "disableKeyboardDragDrop"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "customMoveFn": { "alias": "customMoveFn"; "required": false; }; "customTransferFn": { "alias": "customTransferFn"; "required": false; }; }, {}, never, never, true, never>;
32
32
  }
@@ -57,5 +57,5 @@ export declare class DndKeyboardItemDirective implements OnInit, OnDestroy {
57
57
  /** @hidden */
58
58
  ngOnDestroy(): void;
59
59
  static ɵfac: i0.ɵɵFactoryDeclaration<DndKeyboardItemDirective, never>;
60
- static ɵdir: i0.ɵɵDirectiveDeclaration<DndKeyboardItemDirective, "[fdkDndKeyboardItem], [fdDndKeyboardItem]", never, { "itemIndex": { "alias": "itemIndex"; "required": false; }; "groupIndex": { "alias": "groupIndex"; "required": false; }; }, {}, never, never, false, never>;
60
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DndKeyboardItemDirective, "[fdkDndKeyboardItem], [fdDndKeyboardItem]", never, { "itemIndex": { "alias": "itemIndex"; "required": false; }; "groupIndex": { "alias": "groupIndex"; "required": false; }; }, {}, never, never, true, never>;
61
61
  }
@@ -109,5 +109,5 @@ export declare class DndListDirective<T> implements AfterContentInit, OnDestroy
109
109
  /** @hidden */
110
110
  private _changeDraggableState;
111
111
  static ɵfac: i0.ɵɵFactoryDeclaration<DndListDirective<any>, never>;
112
- static ɵdir: i0.ɵɵDirectiveDeclaration<DndListDirective<any>, "[fdkDndList], [fd-dnd-list]", never, { "gridMode": { "alias": "gridMode"; "required": false; }; "dropMode": { "alias": "dropMode"; "required": false; }; "threshold": { "alias": "threshold"; "required": false; }; "items": { "alias": "items"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "dropPredicate": { "alias": "dropPredicate"; "required": false; }; "dragoverPredicate": { "alias": "dragoverPredicate"; "required": false; }; }, { "dropPredicateCalculating": "dropPredicateCalculating"; "itemsChange": "itemsChange"; "itemDropped": "itemDropped"; "dropCancelled": "dropCancelled"; }, ["dndItems"], never, false, never>;
112
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DndListDirective<any>, "[fdkDndList], [fd-dnd-list]", never, { "gridMode": { "alias": "gridMode"; "required": false; }; "dropMode": { "alias": "dropMode"; "required": false; }; "threshold": { "alias": "threshold"; "required": false; }; "items": { "alias": "items"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "dropPredicate": { "alias": "dropPredicate"; "required": false; }; "dragoverPredicate": { "alias": "dragoverPredicate"; "required": false; }; }, { "dropPredicateCalculating": "dropPredicateCalculating"; "itemsChange": "itemsChange"; "itemDropped": "itemDropped"; "dropCancelled": "dropCancelled"; }, ["dndItems"], never, true, never>;
113
113
  }
@@ -1,12 +1,12 @@
1
1
  import * as i0 from "@angular/core";
2
- import * as i1 from "./dnd-item/dnd-item.directive";
3
- import * as i2 from "./dnd-list/dnd-list.directive";
4
- import * as i3 from "./dnd-keyboard-group/dnd-keyboard-group.directive";
5
- import * as i4 from "./dnd-keyboard-item/dnd-keyboard-item.directive";
6
- import * as i5 from "@angular/common";
7
- import * as i6 from "@angular/cdk/drag-drop";
2
+ import * as i1 from "@angular/common";
3
+ import * as i2 from "@angular/cdk/drag-drop";
4
+ import * as i3 from "./dnd-item/dnd-item.directive";
5
+ import * as i4 from "./dnd-list/dnd-list.directive";
6
+ import * as i5 from "./dnd-keyboard-group/dnd-keyboard-group.directive";
7
+ import * as i6 from "./dnd-keyboard-item/dnd-keyboard-item.directive";
8
8
  export declare class DragAndDropModule {
9
9
  static ɵfac: i0.ɵɵFactoryDeclaration<DragAndDropModule, never>;
10
- static ɵmod: i0.ɵɵNgModuleDeclaration<DragAndDropModule, [typeof i1.DndItemDirective, typeof i2.DndListDirective, typeof i3.DndKeyboardGroupDirective, typeof i4.DndKeyboardItemDirective], [typeof i5.CommonModule, typeof i6.DragDropModule], [typeof i1.DndItemDirective, typeof i2.DndListDirective, typeof i3.DndKeyboardGroupDirective, typeof i4.DndKeyboardItemDirective]>;
10
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DragAndDropModule, never, [typeof i1.CommonModule, typeof i2.DragDropModule, typeof i3.DndItemDirective, typeof i4.DndListDirective, typeof i5.DndKeyboardGroupDirective, typeof i6.DndKeyboardItemDirective], [typeof i3.DndItemDirective, typeof i4.DndListDirective, typeof i5.DndKeyboardGroupDirective, typeof i6.DndKeyboardItemDirective]>;
11
11
  static ɵinj: i0.ɵɵInjectorDeclaration<DragAndDropModule>;
12
12
  }
@@ -65,10 +65,10 @@ export declare class ToastTopLeftPosition extends ToastTopCenterPosition {
65
65
  static global: {
66
66
  left: string;
67
67
  center: boolean;
68
- right?: string | undefined;
69
- bottom?: string | undefined;
70
- top?: string | undefined;
71
- centerVertically?: boolean | undefined;
68
+ right?: string;
69
+ bottom?: string;
70
+ top?: string;
71
+ centerVertically?: boolean;
72
72
  };
73
73
  /** @hidden */
74
74
  static connected: ConnectedPosition;
@@ -83,10 +83,10 @@ export declare class ToastTopRightPosition extends ToastTopCenterPosition {
83
83
  static global: {
84
84
  right: string;
85
85
  center: boolean;
86
- left?: string | undefined;
87
- bottom?: string | undefined;
88
- top?: string | undefined;
89
- centerVertically?: boolean | undefined;
86
+ left?: string;
87
+ bottom?: string;
88
+ top?: string;
89
+ centerVertically?: boolean;
90
90
  };
91
91
  /** @hidden */
92
92
  static connected: ConnectedPosition;
@@ -101,10 +101,10 @@ export declare class ToastBottomLeftPosition extends ToastBottomCenterPosition {
101
101
  static global: {
102
102
  left: string;
103
103
  center: boolean;
104
- right?: string | undefined;
105
- bottom?: string | undefined;
106
- top?: string | undefined;
107
- centerVertically?: boolean | undefined;
104
+ right?: string;
105
+ bottom?: string;
106
+ top?: string;
107
+ centerVertically?: boolean;
108
108
  };
109
109
  /** @hidden */
110
110
  static connected: ConnectedPosition;
@@ -119,10 +119,10 @@ export declare class ToastBottomRightPosition extends ToastBottomCenterPosition
119
119
  static global: {
120
120
  right: string;
121
121
  center: boolean;
122
- left?: string | undefined;
123
- bottom?: string | undefined;
124
- top?: string | undefined;
125
- centerVertically?: boolean | undefined;
122
+ left?: string;
123
+ bottom?: string;
124
+ top?: string;
125
+ centerVertically?: boolean;
126
126
  };
127
127
  /** @hidden */
128
128
  static connected: ConnectedPosition;
@@ -37,5 +37,5 @@ export declare abstract class BaseToastAnimatedContainerComponent<P extends Base
37
37
  */
38
38
  private _completeExit;
39
39
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseToastAnimatedContainerComponent<any>, never>;
40
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseToastAnimatedContainerComponent<any>, never, never, {}, {}, never, never, false, never>;
40
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseToastAnimatedContainerComponent<any>, never, never, {}, {}, never, never, true, never>;
41
41
  }
@@ -51,5 +51,5 @@ export declare abstract class BaseToastContainerComponent<P extends BaseToastCon
51
51
  */
52
52
  attachTemplatePortal<T>(portal: TemplatePortal<T>): EmbeddedViewRef<T>;
53
53
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseToastContainerComponent<any>, never>;
54
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseToastContainerComponent<any>, never, never, {}, {}, never, never, false, never>;
54
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseToastContainerComponent<any>, never, never, {}, {}, never, never, true, never>;
55
55
  }
@@ -16,5 +16,5 @@ export declare abstract class BaseToastDurationDismissibleContainerComponent<P e
16
16
  /** @Hidden */
17
17
  ngOnDestroy(): void;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseToastDurationDismissibleContainerComponent<any>, never>;
19
- static ɵdir: i0.ɵɵDirectiveDeclaration<BaseToastDurationDismissibleContainerComponent<any>, never, never, {}, {}, never, never, false, never>;
19
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseToastDurationDismissibleContainerComponent<any>, never, never, {}, {}, never, never, true, never>;
20
20
  }
@@ -1,142 +0,0 @@
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
- /** Default limit for the pagination. */
38
- this.defaultLimit = 50;
39
- }
40
- /** @hidden */
41
- fetch(params) {
42
- const observable = isObservable(this.values) ? this.values : of(this.values);
43
- const queryString = params.get('query');
44
- const limit = params.get('limit') || this.defaultLimit;
45
- if (!queryString || queryString === '*') {
46
- return observable.pipe(map((items) => this.withLimit(items, limit)));
47
- }
48
- const toLowerPattern = queryString.toLowerCase();
49
- return observable.pipe(map((items) => {
50
- const result = [];
51
- for (let i = 0; i < items.length; i++) {
52
- const item = items[i];
53
- if (this.matches(item, toLowerPattern)) {
54
- result.push(item);
55
- if (result.length >= limit) {
56
- break;
57
- }
58
- }
59
- }
60
- return result;
61
- }));
62
- }
63
- /**
64
- * Returns observable with the number of total items that satisfy the search query.
65
- * Warning: this is a naive implementation of the number of the filtered items.
66
- * For real-world scenarios, it is recommended to override this method with its own logic.
67
- */
68
- getTotalItems(params) {
69
- const observable = isObservable(this.values) ? this.values : of(this.values);
70
- const queryString = params.get('query');
71
- if (!queryString) {
72
- return observable.pipe(map((items) => items.length));
73
- }
74
- const toLowerPattern = queryString.toLowerCase();
75
- return observable.pipe(map((items) => items.filter((item) => this.matches(item, toLowerPattern)).length));
76
- }
77
- /**
78
- * Warning: If you don't supply search Key and you want fulltext search, and you use this
79
- * default implementation, be aware that it can perform poorly as it is a naive implementation
80
- * that does not do deep compare.
81
- */
82
- matches(item, pattern) {
83
- if (!this._matchingBy) {
84
- return false;
85
- }
86
- const { firstBy, secondaryBy } = this._matchingBy;
87
- let matched = this.matchesBy(item, pattern, firstBy);
88
- if (!matched && secondaryBy) {
89
- matched = this.matchesBy(item, pattern, secondaryBy);
90
- }
91
- return matched;
92
- }
93
- /** @hidden */
94
- matchesBy(item, pattern, matchingBy) {
95
- const value = isJsObject(item) && matchingBy ? matchingBy(item) : item;
96
- if (isFunction(value)) {
97
- return value.call(item);
98
- }
99
- else if (isJsObject(value)) {
100
- return this.hasObjectValue(item, pattern);
101
- }
102
- else if (this._matchingStrategy === MatchingStrategy.STARTS_WITH_PER_TERM) {
103
- const reqexp = getMatchingStrategyStartsWithPerTermReqexp(pattern);
104
- return !!pattern && !!value && !!value.match(reqexp);
105
- }
106
- else if (this._matchingStrategy === MatchingStrategy.STARTS_WITH) {
107
- return !!pattern && !!value && value.toString().toLowerCase().startsWith(pattern.toLowerCase());
108
- }
109
- else if (this._matchingStrategy === MatchingStrategy.CONTAINS) {
110
- return !!pattern && !!value && value.toString().toLowerCase().indexOf(pattern) > -1;
111
- }
112
- else {
113
- return !!pattern && !!value && value.toString().toLowerCase() === pattern;
114
- }
115
- }
116
- /** @hidden */
117
- hasObjectValue(obj, pattern) {
118
- const values = objectValues(obj);
119
- const parentObj = objectToName(obj);
120
- const length2 = values.filter((value) => {
121
- if (!value || Array.isArray(value)) {
122
- return false;
123
- }
124
- else if (!isJsObject(value) && !isFunction(value)) {
125
- return value.toString().toLowerCase().indexOf(pattern) !== -1;
126
- }
127
- else if (isJsObject(value) && objectToName(value) !== parentObj) {
128
- return this.hasObjectValue(value, pattern);
129
- }
130
- return false;
131
- }).length;
132
- return length2 > 0;
133
- }
134
- /** @hidden */
135
- withLimit(data, limit) {
136
- if (limit && data.length > limit) {
137
- return data.slice(0, limit);
138
- }
139
- return data;
140
- }
141
- }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZGF0YS1wcm92aWRlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL2RhdGEtc291cmNlL2Jhc2UvYWJzdHJhY3QtZGF0YS1wcm92aWRlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBYyxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBRUgsMENBQTBDLEVBQzFDLFlBQVksRUFDWixZQUFZLEVBQ2YsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQXVCLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFcEY7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG9CQUFvQjtJQUExQztRQVVJLGNBQWM7UUFDSixzQkFBaUIsR0FBcUIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1FBRTdFLGNBQWM7UUFDSixnQkFBVyxHQUFzQixJQUFJLENBQUM7SUFnQnBELENBQUM7SUFkRyxjQUFjO0lBQ2QsWUFBWSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUVELGNBQWM7SUFDZCxhQUFhLENBQUMsVUFBc0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxtQkFBbUIsQ0FBQyxRQUEwQjtRQUMxQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO0lBQ3RDLENBQUM7Q0FDSjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQWdCLFNBQVEsb0JBQXVCO0lBR3hELGNBQWM7SUFDZCxZQUFzQixNQUE2QjtRQUMv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QUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEUsQ0FBQztpQkFBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2hFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNWLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYztJQUNOLFNBQVMsQ0FBQyxJQUFjLEVBQUUsS0FBYztRQUM1QyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzSnNPYmplY3QgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBpc09ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICAgIFByb3ZpZGVyUGFyYW1zLFxuICAgIGdldE1hdGNoaW5nU3RyYXRlZ3lTdGFydHNXaXRoUGVyVGVybVJlcWV4cCxcbiAgICBvYmplY3RUb05hbWUsXG4gICAgb2JqZWN0VmFsdWVzXG59IGZyb20gJy4uL2hlbHBlcnMvY29tbW9uJztcbmltcG9ydCB7IE1hdGNoQnksIE1hdGNoaW5nQnksIE1hdGNoaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi9tb2RlbHMvbWF0Y2hpbmctc3RyYXRlZ3knO1xuXG4vKipcbiAqIEJhc2UgZGF0YSBwcm92aWRlciBjbGFzcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RGF0YVByb3ZpZGVyPFQ+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFic3RyYWN0IGZldGNoKHBhcmFtczogUHJvdmlkZXJQYXJhbXMsIHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFRbXT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFic3RyYWN0IGdldFRvdGFsSXRlbXMocGFyYW1zPzogTWFwPHN0cmluZywgYW55Pik6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9rZXlQYXRoOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfbWF0Y2hpbmdTdHJhdGVneTogTWF0Y2hpbmdTdHJhdGVneSA9IE1hdGNoaW5nU3RyYXRlZ3kuU1RBUlRTX1dJVEg7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfbWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXRMb29rdXBLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5UGF0aCA9IGtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldE1hdGNoaW5nQnkobWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tYXRjaGluZ0J5ID0gbWF0Y2hpbmdCeTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldE1hdGNoaW5nU3RyYXRlZ3koc3RyYXRlZ3k6IE1hdGNoaW5nU3RyYXRlZ3kpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWF0Y2hpbmdTdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgIH1cbn1cblxuLyoqXG4gKiBEZWZhdWx0IGRhdGEgcHJvdmlkZXIgY2xhc3MgdXNlZCBmb3Igb3RoZXIgY29tcG9uZW50cyB0byBleHRlbmQgZnJvbS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFQcm92aWRlcjxUPiBleHRlbmRzIEFic3RyYWN0RGF0YVByb3ZpZGVyPFQ+IHtcbiAgICAvKiogRGVmYXVsdCBsaW1pdCBmb3IgdGhlIHBhZ2luYXRpb24uICovXG4gICAgcHVibGljIGRlZmF1bHRMaW1pdCA9IDUwO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHZhbHVlczogT2JzZXJ2YWJsZTxUW10+IHwgVFtdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBmZXRjaChwYXJhbXM6IE1hcDxzdHJpbmcsIGFueT4pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlID0gaXNPYnNlcnZhYmxlKHRoaXMudmFsdWVzKSA/IHRoaXMudmFsdWVzIDogb2YodGhpcy52YWx1ZXMpO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGFyYW1zLmdldCgncXVlcnknKTtcbiAgICAgICAgY29uc3QgbGltaXQgPSBwYXJhbXMuZ2V0KCdsaW1pdCcpIHx8IHRoaXMuZGVmYXVsdExpbWl0O1xuXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcgfHwgcXVlcnlTdHJpbmcgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShtYXAoKGl0ZW1zKSA9PiB0aGlzLndpdGhMaW1pdChpdGVtcywgbGltaXQpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b0xvd2VyUGF0dGVybiA9IHF1ZXJ5U3RyaW5nLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShcbiAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueVtdID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWF0Y2hlcyhpdGVtLCB0b0xvd2VyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPj0gbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgb2JzZXJ2YWJsZSB3aXRoIHRoZSBudW1iZXIgb2YgdG90YWwgaXRlbXMgdGhhdCBzYXRpc2Z5IHRoZSBzZWFyY2ggcXVlcnkuXG4gICAgICogV2FybmluZzogdGhpcyBpcyBhIG5haXZlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBudW1iZXIgb2YgdGhlIGZpbHRlcmVkIGl0ZW1zLlxuICAgICAqIEZvciByZWFsLXdvcmxkIHNjZW5hcmlvcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2Qgd2l0aCBpdHMgb3duIGxvZ2ljLlxuICAgICAqL1xuICAgIGdldFRvdGFsSXRlbXMocGFyYW1zOiBNYXA8c3RyaW5nLCBhbnk+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IGlzT2JzZXJ2YWJsZSh0aGlzLnZhbHVlcykgPyB0aGlzLnZhbHVlcyA6IG9mKHRoaXMudmFsdWVzKTtcbiAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSBwYXJhbXMuZ2V0KCdxdWVyeScpO1xuXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUobWFwKChpdGVtcykgPT4gaXRlbXMubGVuZ3RoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b0xvd2VyUGF0dGVybiA9IHF1ZXJ5U3RyaW5nLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUucGlwZShtYXAoKGl0ZW1zKSA9PiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHRoaXMubWF0Y2hlcyhpdGVtLCB0b0xvd2VyUGF0dGVybikpLmxlbmd0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhcm5pbmc6IElmIHlvdSBkb24ndCBzdXBwbHkgc2VhcmNoIEtleSBhbmQgeW91IHdhbnQgZnVsbHRleHQgc2VhcmNoLCBhbmQgeW91IHVzZSB0aGlzXG4gICAgICogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgYmUgYXdhcmUgdGhhdCBpdCBjYW4gcGVyZm9ybSBwb29ybHkgYXMgaXQgaXMgYSBuYWl2ZSBpbXBsZW1lbnRhdGlvblxuICAgICAqIHRoYXQgZG9lcyBub3QgZG8gZGVlcCBjb21wYXJlLlxuICAgICAqL1xuICAgIG1hdGNoZXMoaXRlbTogVCwgcGF0dGVybjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5fbWF0Y2hpbmdCeSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZmlyc3RCeSwgc2Vjb25kYXJ5QnkgfSA9IHRoaXMuX21hdGNoaW5nQnk7XG5cbiAgICAgICAgbGV0IG1hdGNoZWQgPSB0aGlzLm1hdGNoZXNCeShpdGVtLCBwYXR0ZXJuLCBmaXJzdEJ5KTtcbiAgICAgICAgaWYgKCFtYXRjaGVkICYmIHNlY29uZGFyeUJ5KSB7XG4gICAgICAgICAgICBtYXRjaGVkID0gdGhpcy5tYXRjaGVzQnkoaXRlbSwgcGF0dGVybiwgc2Vjb25kYXJ5QnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtYXRjaGVzQnkoaXRlbTogYW55LCBwYXR0ZXJuOiBzdHJpbmcsIG1hdGNoaW5nQnk6IE1hdGNoQnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0pzT2JqZWN0KGl0ZW0pICYmIG1hdGNoaW5nQnkgPyBtYXRjaGluZ0J5KGl0ZW0pIDogaXRlbTtcblxuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5jYWxsKGl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSnNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNPYmplY3RWYWx1ZShpdGVtLCBwYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9tYXRjaGluZ1N0cmF0ZWd5ID09PSBNYXRjaGluZ1N0cmF0ZWd5LlNUQVJUU19XSVRIX1BFUl9URVJNKSB7XG4gICAgICAgICAgICBjb25zdCByZXFleHAgPSBnZXRNYXRjaGluZ1N0cmF0ZWd5U3RhcnRzV2l0aFBlclRlcm1SZXFleHAocGF0dGVybik7XG4gICAgICAgICAgICByZXR1cm4gISFwYXR0ZXJuICYmICEhdmFsdWUgJiYgISF2YWx1ZS5tYXRjaChyZXFleHApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX21hdGNoaW5nU3RyYXRlZ3kgPT09IE1hdGNoaW5nU3RyYXRlZ3kuU1RBUlRTX1dJVEgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXBhdHRlcm4gJiYgISF2YWx1ZSAmJiB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwYXR0ZXJuLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX21hdGNoaW5nU3RyYXRlZ3kgPT09IE1hdGNoaW5nU3RyYXRlZ3kuQ09OVEFJTlMpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXBhdHRlcm4gJiYgISF2YWx1ZSAmJiB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihwYXR0ZXJuKSA+IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICEhcGF0dGVybiAmJiAhIXZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gcGF0dGVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGhhc09iamVjdFZhbHVlKG9iajogYW55LCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gb2JqZWN0VmFsdWVzKG9iaik7XG4gICAgICAgIGNvbnN0IHBhcmVudE9iaiA9IG9iamVjdFRvTmFtZShvYmopO1xuICAgICAgICBjb25zdCBsZW5ndGgyID0gdmFsdWVzLmZpbHRlcigodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzSnNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihwYXR0ZXJuKSAhPT0gLTE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzSnNPYmplY3QodmFsdWUpICYmIG9iamVjdFRvTmFtZSh2YWx1ZSkgIT09IHBhcmVudE9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc09iamVjdFZhbHVlKHZhbHVlLCBwYXR0ZXJuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBsZW5ndGgyID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgd2l0aExpbWl0KGRhdGE6IEFycmF5PFQ+LCBsaW1pdD86IG51bWJlcik6IEFycmF5PFQ+IHtcbiAgICAgICAgaWYgKGxpbWl0ICYmIGRhdGEubGVuZ3RoID4gbGltaXQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnNsaWNlKDAsIGxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG4iXX0=
@@ -1,112 +0,0 @@
1
- import { BehaviorSubject, Subject } from 'rxjs';
2
- import { takeUntil } from 'rxjs/operators';
3
- export class BaseDataSource {
4
- /**
5
- * Max limit of items to be returned.
6
- */
7
- static { this.MaxLimit = 5; }
8
- /**
9
- * Emitted when new data has been requested.
10
- * @returns Observable
11
- */
12
- get dataRequested() {
13
- return this._dataRequested$.asObservable();
14
- }
15
- /**
16
- * Emitted when new data has been received.
17
- * @returns Observable
18
- */
19
- get dataReceived() {
20
- return this._dataReceived$.asObservable();
21
- }
22
- /**
23
- * Emitted when loading state has been changed.
24
- * @returns Observable.
25
- */
26
- get dataLoading() {
27
- return this._dataLoading$.asObservable();
28
- }
29
- /**
30
- * Emits when the data from the provider has been changed.
31
- * @returns Observable of data source objects.
32
- */
33
- get dataChanges() {
34
- return this._dataChanges$.asObservable().pipe(takeUntil(this._destroy$));
35
- }
36
- /** @hidden */
37
- constructor(dataProvider) {
38
- this.dataProvider = dataProvider;
39
- /**
40
- * Whether to enable limit of max items.
41
- */
42
- this.limitless = false;
43
- /** @hidden */
44
- this._dataChanges$ = new BehaviorSubject([]);
45
- /** @hidden */
46
- this._dataRequested$ = new BehaviorSubject(false);
47
- /** @hidden */
48
- this._dataReceived$ = new BehaviorSubject(false);
49
- /** @hidden */
50
- this._destroy$ = new Subject();
51
- /** @hidden */
52
- this._dataLoading$ = new BehaviorSubject(false);
53
- }
54
- /**
55
- * Searches through the data source with defined parameters.
56
- * @param predicate Search query.
57
- * @param start start index.
58
- * @param end end index.
59
- */
60
- match(predicate = new Map(), start = 0, end = Infinity) {
61
- this._dataRequested$.next(true);
62
- this._dataLoading$.next(true);
63
- const searchParam = this._getSearchParams(predicate);
64
- this.dataProvider
65
- .fetch(searchParam, start, end)
66
- .pipe(takeUntil(this._destroy$))
67
- .subscribe({
68
- next: (result) => {
69
- this._dataReceived$.next(true);
70
- this._dataLoading$.next(false);
71
- this._dataChanges$.next(result);
72
- },
73
- error: () => {
74
- this._dataReceived$.next(false);
75
- this._dataLoading$.next(false);
76
- }
77
- });
78
- }
79
- /**
80
- * Returns the Observable of a total items number filtered by the `predicate` param.
81
- * @param predicate Search query.
82
- */
83
- getTotalItems(predicate = new Map()) {
84
- const searchParam = this._getSearchParams(predicate);
85
- return this.dataProvider.getTotalItems(searchParam);
86
- }
87
- /**
88
- * Closes the stream
89
- */
90
- unsubscribe() {
91
- this._destroy$.next();
92
- this._destroy$.complete();
93
- }
94
- /** @hidden */
95
- _getSearchParams(predicate) {
96
- const searchParam = new Map();
97
- if (typeof predicate === 'string') {
98
- searchParam.set('query', predicate);
99
- }
100
- else if (predicate instanceof Map) {
101
- predicate.forEach((v, k) => searchParam.set(k, v));
102
- }
103
- else {
104
- throw new Error('DataSource.match() predicate can only accepts string and Map');
105
- }
106
- if (!searchParam.has('limit') && !this.limitless) {
107
- searchParam.set('limit', BaseDataSource.MaxLimit);
108
- }
109
- return searchParam;
110
- }
111
- }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRhLXNvdXJjZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2RrL2RhdGEtc291cmNlL2Jhc2UvYmFzZS1kYXRhLXNvdXJjZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsTUFBTSxPQUFnQixjQUFjO0lBQ2hDOztPQUVHO2FBQ2EsYUFBUSxHQUFHLENBQUMsQUFBSixDQUFLO0lBbUI3Qjs7O09BR0c7SUFDSCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsY0FBYztJQUNkLFlBQTZCLFlBQXVDO1FBQXZDLGlCQUFZLEdBQVosWUFBWSxDQUEyQjtRQWxEcEU7O1dBRUc7UUFDSCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGNBQWM7UUFDSyxrQkFBYSxHQUF5QixJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUN0RixjQUFjO1FBQ0ssb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN6RSxjQUFjO1FBQ0ssbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN4RSxjQUFjO1FBQ0ssY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbkQsY0FBYztRQUNLLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFtQ0EsQ0FBQztJQUV4RTs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxZQUEwQyxJQUFJLEdBQUcsRUFBa0IsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxRQUFRO1FBQ2hHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsWUFBWTthQUNaLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQzthQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQixTQUFTLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDUixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7O09BR0c7SUFDSCxhQUFhLENBQUMsWUFBMEMsSUFBSSxHQUFHLEVBQWtCO1FBQzdFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7SUFDTixnQkFBZ0IsQ0FBQyxTQUF1QztRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBRTNDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQUksU0FBUyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFTb3VyY2VQcm92aWRlciB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBBYnN0cmFjdERhdGFQcm92aWRlciB9IGZyb20gJy4vYWJzdHJhY3QtZGF0YS1wcm92aWRlci5jbGFzcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YVNvdXJjZTxUPiBpbXBsZW1lbnRzIERhdGFTb3VyY2VQcm92aWRlcjxUPiB7XG4gICAgLyoqXG4gICAgICogTWF4IGxpbWl0IG9mIGl0ZW1zIHRvIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHN0YXRpYyByZWFkb25seSBNYXhMaW1pdCA9IDU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBsaW1pdCBvZiBtYXggaXRlbXMuXG4gICAgICovXG4gICAgbGltaXRsZXNzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGF0YUNoYW5nZXMkOiBCZWhhdmlvclN1YmplY3Q8VFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFtdPihbXSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFSZXF1ZXN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFSZWNlaXZlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIG5ldyBkYXRhIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgZ2V0IGRhdGFSZXF1ZXN0ZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUmVxdWVzdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gbmV3IGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQuXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIGdldCBkYXRhUmVjZWl2ZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUmVjZWl2ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiBsb2FkaW5nIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZS5cbiAgICAgKi9cbiAgICBnZXQgZGF0YUxvYWRpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhTG9hZGluZyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiB0aGUgZGF0YSBmcm9tIHRoZSBwcm92aWRlciBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgZGF0YSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKi9cbiAgICBnZXQgZGF0YUNoYW5nZXMoKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFDaGFuZ2VzJC5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhUHJvdmlkZXI6IEFic3RyYWN0RGF0YVByb3ZpZGVyPGFueT4pIHt9XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2hlcyB0aHJvdWdoIHRoZSBkYXRhIHNvdXJjZSB3aXRoIGRlZmluZWQgcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gcHJlZGljYXRlIFNlYXJjaCBxdWVyeS5cbiAgICAgKiBAcGFyYW0gc3RhcnQgc3RhcnQgaW5kZXguXG4gICAgICogQHBhcmFtIGVuZCBlbmQgaW5kZXguXG4gICAgICovXG4gICAgbWF0Y2gocHJlZGljYXRlOiBzdHJpbmcgfCBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSwgc3RhcnQgPSAwLCBlbmQgPSBJbmZpbml0eSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhUmVxdWVzdGVkJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9kYXRhTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW0gPSB0aGlzLl9nZXRTZWFyY2hQYXJhbXMocHJlZGljYXRlKTtcblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlclxuICAgICAgICAgICAgLmZldGNoKHNlYXJjaFBhcmFtLCBzdGFydCwgZW5kKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChyZXN1bHQ6IFRbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhUmVjZWl2ZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YUNoYW5nZXMkLm5leHQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFSZWNlaXZlZCQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBPYnNlcnZhYmxlIG9mIGEgdG90YWwgaXRlbXMgbnVtYmVyIGZpbHRlcmVkIGJ5IHRoZSBgcHJlZGljYXRlYCBwYXJhbS5cbiAgICAgKiBAcGFyYW0gcHJlZGljYXRlIFNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICBnZXRUb3RhbEl0ZW1zKHByZWRpY2F0ZTogc3RyaW5nIHwgTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCkpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzZWFyY2hQYXJhbSA9IHRoaXMuX2dldFNlYXJjaFBhcmFtcyhwcmVkaWNhdGUpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlci5nZXRUb3RhbEl0ZW1zKHNlYXJjaFBhcmFtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIHN0cmVhbVxuICAgICAqL1xuICAgIHVuc3Vic2NyaWJlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRTZWFyY2hQYXJhbXMocHJlZGljYXRlOiBzdHJpbmcgfCBNYXA8c3RyaW5nLCBzdHJpbmc+KTogTWFwPHN0cmluZywgYW55PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICAgICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHNlYXJjaFBhcmFtLnNldCgncXVlcnknLCBwcmVkaWNhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHByZWRpY2F0ZSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgcHJlZGljYXRlLmZvckVhY2goKHYsIGspID0+IHNlYXJjaFBhcmFtLnNldChrLCB2KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RhdGFTb3VyY2UubWF0Y2goKSBwcmVkaWNhdGUgY2FuIG9ubHkgYWNjZXB0cyBzdHJpbmcgYW5kIE1hcCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzZWFyY2hQYXJhbS5oYXMoJ2xpbWl0JykgJiYgIXRoaXMubGltaXRsZXNzKSB7XG4gICAgICAgICAgICBzZWFyY2hQYXJhbS5zZXQoJ2xpbWl0JywgQmFzZURhdGFTb3VyY2UuTWF4TGltaXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaFBhcmFtO1xuICAgIH1cbn1cbiJdfQ==