@fundamental-ngx/core 0.33.4-rc.6 → 0.33.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 (156) hide show
  1. package/README.md +1 -3
  2. package/action-bar/package.json +3 -3
  3. package/action-sheet/package.json +3 -3
  4. package/alert/package.json +3 -3
  5. package/avatar/avatar.component.d.ts +2 -0
  6. package/avatar/esm2020/avatar.component.mjs +8 -5
  7. package/avatar/fesm2015/fundamental-ngx-core-avatar.mjs +7 -4
  8. package/avatar/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  9. package/avatar/fesm2020/fundamental-ngx-core-avatar.mjs +7 -4
  10. package/avatar/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  11. package/avatar/package.json +3 -3
  12. package/avatar-group/package.json +3 -3
  13. package/bar/package.json +3 -3
  14. package/breadcrumb/package.json +3 -3
  15. package/busy-indicator/package.json +3 -3
  16. package/button/package.json +3 -3
  17. package/calendar/package.json +3 -3
  18. package/card/package.json +3 -3
  19. package/carousel/package.json +3 -3
  20. package/checkbox/checkbox/checkbox.component.d.ts +30 -35
  21. package/checkbox/esm2020/checkbox/checkbox.component.mjs +61 -80
  22. package/checkbox/fesm2015/fundamental-ngx-core-checkbox.mjs +59 -77
  23. package/checkbox/fesm2015/fundamental-ngx-core-checkbox.mjs.map +1 -1
  24. package/checkbox/fesm2020/fundamental-ngx-core-checkbox.mjs +59 -77
  25. package/checkbox/fesm2020/fundamental-ngx-core-checkbox.mjs.map +1 -1
  26. package/checkbox/package.json +3 -3
  27. package/combobox/package.json +3 -3
  28. package/date-picker/package.json +3 -3
  29. package/datetime/package.json +3 -3
  30. package/datetime-picker/package.json +3 -3
  31. package/dialog/package.json +3 -3
  32. package/dynamic-page/package.json +3 -3
  33. package/dynamic-side-content/package.json +3 -3
  34. package/esm2020/avatar/avatar.component.mjs +8 -5
  35. package/esm2020/checkbox/checkbox/checkbox.component.mjs +61 -80
  36. package/esm2020/input-group/input-group.component.mjs +2 -2
  37. package/esm2020/list/list-item/list-item.component.mjs +6 -2
  38. package/esm2020/multi-input/multi-input.component.mjs +38 -11
  39. package/esm2020/utils/helpers/range-selector.mjs +113 -0
  40. package/esm2020/utils/public_api.mjs +2 -1
  41. package/facets/package.json +3 -3
  42. package/feed-input/package.json +3 -3
  43. package/feed-list-item/package.json +3 -3
  44. package/fesm2015/fundamental-ngx-core-avatar.mjs +7 -4
  45. package/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  46. package/fesm2015/fundamental-ngx-core-checkbox.mjs +59 -77
  47. package/fesm2015/fundamental-ngx-core-checkbox.mjs.map +1 -1
  48. package/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
  49. package/fesm2015/fundamental-ngx-core-list.mjs +5 -1
  50. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  51. package/fesm2015/fundamental-ngx-core-multi-input.mjs +40 -11
  52. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  53. package/fesm2015/fundamental-ngx-core-utils.mjs +114 -1
  54. package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  55. package/fesm2020/fundamental-ngx-core-avatar.mjs +7 -4
  56. package/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  57. package/fesm2020/fundamental-ngx-core-checkbox.mjs +59 -77
  58. package/fesm2020/fundamental-ngx-core-checkbox.mjs.map +1 -1
  59. package/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
  60. package/fesm2020/fundamental-ngx-core-list.mjs +5 -1
  61. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  62. package/fesm2020/fundamental-ngx-core-multi-input.mjs +38 -11
  63. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  64. package/fesm2020/fundamental-ngx-core-utils.mjs +114 -1
  65. package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  66. package/file-uploader/package.json +3 -3
  67. package/fixed-card-layout/package.json +3 -3
  68. package/flexible-column-layout/package.json +3 -3
  69. package/form/package.json +3 -3
  70. package/formatted-text/package.json +3 -3
  71. package/grid-list/package.json +3 -3
  72. package/icon/package.json +3 -3
  73. package/illustrated-message/package.json +3 -3
  74. package/infinite-scroll/package.json +3 -3
  75. package/info-label/package.json +3 -3
  76. package/inline-help/package.json +3 -3
  77. package/input-group/esm2020/input-group.component.mjs +2 -2
  78. package/input-group/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
  79. package/input-group/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
  80. package/input-group/package.json +3 -3
  81. package/layout-grid/package.json +3 -3
  82. package/layout-panel/package.json +3 -3
  83. package/link/package.json +3 -3
  84. package/list/esm2020/list-item/list-item.component.mjs +6 -2
  85. package/list/fesm2015/fundamental-ngx-core-list.mjs +5 -1
  86. package/list/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  87. package/list/fesm2020/fundamental-ngx-core-list.mjs +5 -1
  88. package/list/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  89. package/list/package.json +3 -3
  90. package/menu/package.json +3 -3
  91. package/message-box/package.json +3 -3
  92. package/message-page/package.json +2 -2
  93. package/message-strip/package.json +3 -3
  94. package/message-toast/package.json +3 -3
  95. package/micro-process-flow/package.json +3 -3
  96. package/mobile-mode/package.json +3 -3
  97. package/multi-input/esm2020/multi-input.component.mjs +38 -11
  98. package/multi-input/fesm2015/fundamental-ngx-core-multi-input.mjs +40 -11
  99. package/multi-input/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  100. package/multi-input/fesm2020/fundamental-ngx-core-multi-input.mjs +38 -11
  101. package/multi-input/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  102. package/multi-input/multi-input.component.d.ts +8 -1
  103. package/multi-input/package.json +3 -3
  104. package/nested-list/package.json +3 -3
  105. package/notification/package.json +3 -3
  106. package/object-identifier/package.json +3 -3
  107. package/object-marker/package.json +3 -3
  108. package/object-number/package.json +3 -3
  109. package/object-status/package.json +3 -3
  110. package/package.json +7 -7
  111. package/pagination/package.json +3 -3
  112. package/panel/package.json +3 -3
  113. package/popover/package.json +3 -3
  114. package/product-switch/package.json +3 -3
  115. package/progress-indicator/package.json +1 -1
  116. package/quick-view/package.json +3 -3
  117. package/radio/package.json +3 -3
  118. package/rating-indicator/package.json +3 -3
  119. package/resizable-card-layout/package.json +3 -3
  120. package/scroll-spy/package.json +3 -3
  121. package/scrollbar/package.json +3 -3
  122. package/segmented-button/package.json +3 -3
  123. package/select/package.json +3 -3
  124. package/shared/package.json +3 -3
  125. package/shellbar/package.json +3 -3
  126. package/side-navigation/package.json +3 -3
  127. package/slider/package.json +3 -3
  128. package/split-button/package.json +3 -3
  129. package/splitter/package.json +3 -3
  130. package/status-indicator/package.json +3 -3
  131. package/step-input/package.json +3 -3
  132. package/switch/package.json +3 -3
  133. package/table/package.json +3 -3
  134. package/tabs/package.json +3 -3
  135. package/tests/package.json +2 -2
  136. package/text/package.json +3 -3
  137. package/tile/package.json +3 -3
  138. package/time/package.json +3 -3
  139. package/time-picker/package.json +3 -3
  140. package/timeline/package.json +3 -3
  141. package/title/package.json +3 -3
  142. package/token/package.json +3 -3
  143. package/toolbar/package.json +3 -3
  144. package/tree/package.json +3 -3
  145. package/upload-collection/package.json +3 -3
  146. package/utils/esm2020/helpers/range-selector.mjs +113 -0
  147. package/utils/esm2020/public_api.mjs +2 -1
  148. package/utils/fesm2015/fundamental-ngx-core-utils.mjs +114 -1
  149. package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  150. package/utils/fesm2020/fundamental-ngx-core-utils.mjs +114 -1
  151. package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  152. package/utils/helpers/range-selector.d.ts +84 -0
  153. package/utils/package.json +6 -6
  154. package/utils/public_api.d.ts +1 -0
  155. package/vertical-navigation/package.json +3 -3
  156. package/wizard/package.json +3 -3
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Utility type, that allows to track and select ranges of elements while using multi-selection.
3
+ *
4
+ * @usage
5
+ * Imagine we have a simple list of checkboxes:
6
+ * ```html
7
+ * <input
8
+ * #checkboxInput
9
+ * *ngFor="let o of options; let idx = index"
10
+ * type="checkbox"
11
+ * [checked]="selectionModel.checked(o)"
12
+ * (click)="toggle(idx, $event)"
13
+ * >
14
+ * ```
15
+ * With the given layout the logic should be as follows:
16
+ * ```typescript
17
+ * export class YourComponent {
18
+ * options = ['a', 'b', 'c'];
19
+ * readonly selectionModel = new SelectionModel(true);
20
+ *
21
+ * private readonly _rangeSelector = new RangeSelector();
22
+ *
23
+ *
24
+ * toggle(idx: number, event: PointerEvent): void {
25
+ * // getting the toggled value of the checkbox
26
+ * const toggledSelection = event.target.value;
27
+ *
28
+ * // registering the selection of current checkbox
29
+ * this._rangeSelector.onRangeElementToggled(idx, event);
30
+ *
31
+ * // Apply value to each element in range.
32
+ * // If checkbox was toggled without shift pressed or without previously selected one,
33
+ * // this method will select only it.
34
+ * this._rangeSelector.applyValueToEachInRange(idx => {
35
+ * if (toggledSelection) {
36
+ * this.selectionModel.select(options[idx]);
37
+ * } else {
38
+ * this.selectionModel.deselect(options[idx]);
39
+ * }
40
+ * });
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ export class RangeSelector {
46
+ constructor() {
47
+ /** @hidden */
48
+ this._previousSelectedIndex = null;
49
+ }
50
+ /**
51
+ * Last registered selection state (either multiple or single).
52
+ * Is updated on each `onRangeElementClicked` invokation. Will be `null` initially or once `reset()` is called.
53
+ */
54
+ get lastRangeSelectionState() {
55
+ return this._state ? { ...this._state } : null;
56
+ }
57
+ /**
58
+ * The method that should be used to register each checkbox toggle.
59
+ * Accepts two arguments: `index` and `event`. If none provided, will reset existing state.
60
+ * Otherwise will register current index as last checked.
61
+ *
62
+ * If toggling was done with "shift" pressed and there's a previously registered index, will register a range selection.
63
+ * At the same time if checkbox was toggled without shift pressed or without previously selected one, this method will select only it.
64
+ *
65
+ * After calling this method it's recommended to use `applyValueToEachInRange` to actually toggle each checkbox in range.
66
+ *
67
+ * See usage example on this class itself.
68
+ */
69
+ onRangeElementToggled(index, event) {
70
+ if (this._isNonNegativeInteger(this._previousSelectedIndex) &&
71
+ this._isNonNegativeInteger(index) &&
72
+ event?.shiftKey) {
73
+ this._state = {
74
+ isRangeSelection: true,
75
+ from: Math.min(this._previousSelectedIndex, index),
76
+ to: Math.max(this._previousSelectedIndex, index)
77
+ };
78
+ this._previousSelectedIndex = index;
79
+ }
80
+ else if (this._isNonNegativeInteger(index)) {
81
+ this._state = { isRangeSelection: false, from: index, to: index };
82
+ this._previousSelectedIndex = index;
83
+ }
84
+ else {
85
+ this.reset();
86
+ }
87
+ return this.lastRangeSelectionState;
88
+ }
89
+ /**
90
+ * Allows to apply selection to each item in selection range.
91
+ * Accepts a function to apply selection to each item by registered index.
92
+ *
93
+ * See usage example on this class itself.
94
+ */
95
+ applyValueToEachInRange(selectionMethod) {
96
+ const state = this.lastRangeSelectionState;
97
+ if (this._isNonNegativeInteger(state?.from) && this._isNonNegativeInteger(state.to)) {
98
+ for (let index = state.from; index <= state.to; index++) {
99
+ selectionMethod(index);
100
+ }
101
+ }
102
+ }
103
+ /** Resets selection state. Useful when the list of selectable items is changed (e.g. by filtering, sorting, page change) */
104
+ reset() {
105
+ this._state = null;
106
+ this._previousSelectedIndex = null;
107
+ }
108
+ /** @hidden */
109
+ _isNonNegativeInteger(num) {
110
+ return Number.isInteger(num) && num >= 0;
111
+ }
112
+ }
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2Utc2VsZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi91dGlscy9oZWxwZXJzL3JhbmdlLXNlbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFDSSxjQUFjO1FBQ04sMkJBQXNCLEdBQWtCLElBQUksQ0FBQztJQXdFekQsQ0FBQztJQXBFRzs7O09BR0c7SUFDSCxJQUFJLHVCQUF1QjtRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxxQkFBcUIsQ0FBQyxLQUFjLEVBQUUsS0FBK0M7UUFDakYsSUFDSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1lBQ3ZELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7WUFDakMsS0FBSyxFQUFFLFFBQVEsRUFDakI7WUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHO2dCQUNWLGdCQUFnQixFQUFFLElBQUk7Z0JBQ3RCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUM7Z0JBQ2xELEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUM7YUFDbkQsQ0FBQztZQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7U0FDdkM7YUFBTSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7U0FDdkM7YUFBTTtZQUNILElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoQjtRQUVELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFDLGVBQXdDO1FBQzVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNqRixLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3JELGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtTQUNKO0lBQ0wsQ0FBQztJQUVELDRIQUE0SDtJQUM1SCxLQUFLO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRUQsY0FBYztJQUNOLHFCQUFxQixDQUFDLEdBQVc7UUFDckMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVdGlsaXR5IHR5cGUsIHRoYXQgYWxsb3dzIHRvIHRyYWNrIGFuZCBzZWxlY3QgcmFuZ2VzIG9mIGVsZW1lbnRzIHdoaWxlIHVzaW5nIG11bHRpLXNlbGVjdGlvbi5cbiAqXG4gKiBAdXNhZ2VcbiAqIEltYWdpbmUgd2UgaGF2ZSBhIHNpbXBsZSBsaXN0IG9mIGNoZWNrYm94ZXM6XG4gKiBgYGBodG1sXG4gKiA8aW5wdXRcbiAqICAjY2hlY2tib3hJbnB1dFxuICogICpuZ0Zvcj1cImxldCBvIG9mIG9wdGlvbnM7IGxldCBpZHggPSBpbmRleFwiXG4gKiAgdHlwZT1cImNoZWNrYm94XCJcbiAqICBbY2hlY2tlZF09XCJzZWxlY3Rpb25Nb2RlbC5jaGVja2VkKG8pXCJcbiAqICAoY2xpY2spPVwidG9nZ2xlKGlkeCwgJGV2ZW50KVwiXG4gKiAgPlxuICogYGBgXG4gKiBXaXRoIHRoZSBnaXZlbiBsYXlvdXQgdGhlIGxvZ2ljIHNob3VsZCBiZSBhcyBmb2xsb3dzOlxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIFlvdXJDb21wb25lbnQge1xuICogIG9wdGlvbnMgPSBbJ2EnLCAnYicsICdjJ107XG4gKiAgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSk7XG4gKlxuICogIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuICpcbiAqXG4gKiAgdG9nZ2xlKGlkeDogbnVtYmVyLCBldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gKiAgICAgIC8vIGdldHRpbmcgdGhlIHRvZ2dsZWQgdmFsdWUgb2YgdGhlIGNoZWNrYm94XG4gKiAgICAgIGNvbnN0IHRvZ2dsZWRTZWxlY3Rpb24gPSBldmVudC50YXJnZXQudmFsdWU7XG4gKlxuICogICAgICAvLyByZWdpc3RlcmluZyB0aGUgc2VsZWN0aW9uIG9mIGN1cnJlbnQgY2hlY2tib3hcbiAqICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5vblJhbmdlRWxlbWVudFRvZ2dsZWQoaWR4LCBldmVudCk7XG4gKlxuICogICAgICAvLyBBcHBseSB2YWx1ZSB0byBlYWNoIGVsZW1lbnQgaW4gcmFuZ2UuXG4gKiAgICAgIC8vIElmIGNoZWNrYm94IHdhcyB0b2dnbGVkIHdpdGhvdXQgc2hpZnQgcHJlc3NlZCBvciB3aXRob3V0IHByZXZpb3VzbHkgc2VsZWN0ZWQgb25lLFxuICogICAgICAvLyB0aGlzIG1ldGhvZCB3aWxsIHNlbGVjdCBvbmx5IGl0LlxuICogICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKGlkeCA9PiB7XG4gKiAgICAgICAgICBpZiAodG9nZ2xlZFNlbGVjdGlvbikge1xuICogICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KG9wdGlvbnNbaWR4XSk7XG4gKiAgICAgICAgICB9IGVsc2Uge1xuICogICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3Qob3B0aW9uc1tpZHhdKTtcbiAqICAgICAgICAgIH1cbiAqICAgICAgfSk7XG4gKiAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW5nZVNlbGVjdG9yIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzU2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGF0ZTogUmFuZ2VTZWxlY3Rpb25TdGF0ZSB8IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBMYXN0IHJlZ2lzdGVyZWQgc2VsZWN0aW9uIHN0YXRlIChlaXRoZXIgbXVsdGlwbGUgb3Igc2luZ2xlKS5cbiAgICAgKiBJcyB1cGRhdGVkIG9uIGVhY2ggYG9uUmFuZ2VFbGVtZW50Q2xpY2tlZGAgaW52b2thdGlvbi4gV2lsbCBiZSBgbnVsbGAgaW5pdGlhbGx5IG9yIG9uY2UgYHJlc2V0KClgIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBnZXQgbGFzdFJhbmdlU2VsZWN0aW9uU3RhdGUoKTogUmFuZ2VTZWxlY3Rpb25TdGF0ZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGUgPyB7IC4uLnRoaXMuX3N0YXRlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdGhhdCBzaG91bGQgYmUgdXNlZCB0byByZWdpc3RlciBlYWNoIGNoZWNrYm94IHRvZ2dsZS5cbiAgICAgKiBBY2NlcHRzIHR3byBhcmd1bWVudHM6IGBpbmRleGAgYW5kIGBldmVudGAuIElmIG5vbmUgcHJvdmlkZWQsIHdpbGwgcmVzZXQgZXhpc3Rpbmcgc3RhdGUuXG4gICAgICogT3RoZXJ3aXNlIHdpbGwgcmVnaXN0ZXIgY3VycmVudCBpbmRleCBhcyBsYXN0IGNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBJZiB0b2dnbGluZyB3YXMgZG9uZSB3aXRoIFwic2hpZnRcIiBwcmVzc2VkIGFuZCB0aGVyZSdzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGluZGV4LCB3aWxsIHJlZ2lzdGVyIGEgcmFuZ2Ugc2VsZWN0aW9uLlxuICAgICAqIEF0IHRoZSBzYW1lIHRpbWUgaWYgY2hlY2tib3ggd2FzIHRvZ2dsZWQgd2l0aG91dCBzaGlmdCBwcmVzc2VkIG9yIHdpdGhvdXQgcHJldmlvdXNseSBzZWxlY3RlZCBvbmUsIHRoaXMgbWV0aG9kIHdpbGwgc2VsZWN0IG9ubHkgaXQuXG4gICAgICpcbiAgICAgKiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIGl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIGBhcHBseVZhbHVlVG9FYWNoSW5SYW5nZWAgdG8gYWN0dWFsbHkgdG9nZ2xlIGVhY2ggY2hlY2tib3ggaW4gcmFuZ2UuXG4gICAgICpcbiAgICAgKiBTZWUgdXNhZ2UgZXhhbXBsZSBvbiB0aGlzIGNsYXNzIGl0c2VsZi5cbiAgICAgKi9cbiAgICBvblJhbmdlRWxlbWVudFRvZ2dsZWQoaW5kZXg/OiBudW1iZXIsIGV2ZW50PzogS2V5Ym9hcmRFdmVudCB8IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogUmFuZ2VTZWxlY3Rpb25TdGF0ZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2lzTm9uTmVnYXRpdmVJbnRlZ2VyKHRoaXMuX3ByZXZpb3VzU2VsZWN0ZWRJbmRleCkgJiZcbiAgICAgICAgICAgIHRoaXMuX2lzTm9uTmVnYXRpdmVJbnRlZ2VyKGluZGV4KSAmJlxuICAgICAgICAgICAgZXZlbnQ/LnNoaWZ0S2V5XG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgaXNSYW5nZVNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBmcm9tOiBNYXRoLm1pbih0aGlzLl9wcmV2aW91c1NlbGVjdGVkSW5kZXgsIGluZGV4KSxcbiAgICAgICAgICAgICAgICB0bzogTWF0aC5tYXgodGhpcy5fcHJldmlvdXNTZWxlY3RlZEluZGV4LCBpbmRleClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9wcmV2aW91c1NlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pc05vbk5lZ2F0aXZlSW50ZWdlcihpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0geyBpc1JhbmdlU2VsZWN0aW9uOiBmYWxzZSwgZnJvbTogaW5kZXgsIHRvOiBpbmRleCB9O1xuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNTZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0UmFuZ2VTZWxlY3Rpb25TdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdG8gYXBwbHkgc2VsZWN0aW9uIHRvIGVhY2ggaXRlbSBpbiBzZWxlY3Rpb24gcmFuZ2UuXG4gICAgICogQWNjZXB0cyBhIGZ1bmN0aW9uIHRvIGFwcGx5IHNlbGVjdGlvbiB0byBlYWNoIGl0ZW0gYnkgcmVnaXN0ZXJlZCBpbmRleC5cbiAgICAgKlxuICAgICAqIFNlZSB1c2FnZSBleGFtcGxlIG9uIHRoaXMgY2xhc3MgaXRzZWxmLlxuICAgICAqL1xuICAgIGFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKHNlbGVjdGlvbk1ldGhvZDogKGluZGV4OiBudW1iZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmxhc3RSYW5nZVNlbGVjdGlvblN0YXRlO1xuXG4gICAgICAgIGlmICh0aGlzLl9pc05vbk5lZ2F0aXZlSW50ZWdlcihzdGF0ZT8uZnJvbSkgJiYgdGhpcy5faXNOb25OZWdhdGl2ZUludGVnZXIoc3RhdGUudG8pKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXRlLmZyb207IGluZGV4IDw9IHN0YXRlLnRvOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uTWV0aG9kKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXNldHMgc2VsZWN0aW9uIHN0YXRlLiBVc2VmdWwgd2hlbiB0aGUgbGlzdCBvZiBzZWxlY3RhYmxlIGl0ZW1zIGlzIGNoYW5nZWQgKGUuZy4gYnkgZmlsdGVyaW5nLCBzb3J0aW5nLCBwYWdlIGNoYW5nZSkgKi9cbiAgICByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1NlbGVjdGVkSW5kZXggPSBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNOb25OZWdhdGl2ZUludGVnZXIobnVtOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobnVtKSAmJiBudW0gPj0gMDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VTZWxlY3Rpb25TdGF0ZSB7XG4gICAgaXNSYW5nZVNlbGVjdGlvbjogYm9vbGVhbjtcbiAgICBmcm9tOiBudW1iZXI7XG4gICAgdG86IG51bWJlcjtcbn1cbiJdfQ==
@@ -42,6 +42,7 @@ export * from './dynamic-component/dynamic-component-config';
42
42
  export * from './dynamic-component/dynamic-component-injector';
43
43
  export * from './dynamic-component/dynamic-component.service';
44
44
  export * from './dynamic-component/dynamic-component-container';
45
+ export * from './helpers/range-selector';
45
46
  export * from './utils.module';
46
47
  export * from './datatypes/hash.datatype';
47
48
  export * from './datatypes/size.datatype';
@@ -56,4 +57,4 @@ export * from './abstract-fd-ngx-class';
56
57
  export * from './list-item/list-item-utils';
57
58
  export * from './mixins/apply-mixin';
58
59
  export * from './services/focus-trap.service';
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsaUVBQWlFLENBQUM7QUFFaEYsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYywrREFBK0QsQ0FBQztBQUU5RSxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhDQUE4QyxDQUFDO0FBRTdELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGlEQUFpRCxDQUFDO0FBRWhFLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxzREFBc0QsQ0FBQztBQUVyRSxjQUFjLGFBQWEsQ0FBQztBQUU1QixjQUFjLFVBQVUsQ0FBQztBQUV6QixjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3RlbXBsYXRlL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvdGVtcGxhdGUvdGVtcGxhdGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9vbmx5LWRpZ2l0cy9vbmx5LWRpZ2l0cy5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL29ubHktZGlnaXRzL29ubHktZGlnaXRzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXplL3Jlc2l6ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3Jlc2l6ZS9yZXNpemUtaGFuZGxlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXplL3Jlc2l6ZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2luaXRpYWwtZm9jdXMvaW5pdGlhbC1mb2N1cy5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2xpbmUtY2xhbXAvbGluZS1jbGFtcC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2xpbmUtY2xhbXAvbGluZS1jbGFtcC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2luaXRpYWwtZm9jdXMvaW5pdGlhbC1mb2N1cy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2F1dG8tY29tcGxldGUvYXV0by1jb21wbGV0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2F1dG8tY29tcGxldGUvYXV0by1jb21wbGV0ZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL292ZXJmbG93LWxpc3Qvb3ZlcmZsb3ctbGlzdC1pdGVtLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvb3ZlcmZsb3ctbGlzdC9vdmVyZmxvdy1saXN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvb3ZlcmZsb3ctbGlzdC9vdmVyZmxvdy1saXN0Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvdHJ1bmNhdGUvdHJ1bmNhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy90cnVuY2F0ZS90cnVuY2F0ZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2ZvY3VzLWtleS1tYW5hZ2VyL2ZvY3VzLWtleS1tYW5hZ2VyLWl0ZW0uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9mb2N1cy1rZXktbWFuYWdlci9mb2N1cy1rZXktbWFuYWdlci1saXN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvZm9jdXMta2V5LW1hbmFnZXIvZm9jdXMta2V5LW1hbmFnZXItaGVscGVycy5tb2R1bGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3BpcGUubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvbGlzdC1ncm91cC5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvZGlzcGxheUZuLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy90d28tZGlnaXRzLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9zZWFyY2gtaGlnaGxpZ2h0LnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9zYWZlLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9pcy1jb21wYWN0LnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy92YWx1ZS1ieS1wYXRoLnBpcGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RyYWctYW5kLWRyb3AvZHJhZy1hbmQtZHJvcC5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmFnLWFuZC1kcm9wL2RuZC1saXN0L2RuZC1saXN0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RyYWctYW5kLWRyb3AvZG5kLWl0ZW0vZG5kLWl0ZW0uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJhZy1hbmQtZHJvcC9kbmQta2V5Ym9hcmQtZ3JvdXAvZG5kLWtleWJvYXJkLWdyb3VwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RyYWctYW5kLWRyb3AvZG5kLWtleWJvYXJkLWl0ZW0vZG5kLWtleWJvYXJkLWl0ZW0uZGlyZWN0aXZlJztcblxuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2Nzcy1jbGFzcy1idWlsZGVyLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvY3NzLXN0eWxlLWJ1aWxkZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9oYXMtZWxlbWVudC1yZWYuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9rZXlib2FyZC1zdXBwb3J0LWl0ZW0uaW50ZXJmYWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2FwcGx5LWNzcy1jbGFzcy5kZWNvcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL2FwcGx5LWNzcy1zdHlsZS5kZWNvcmF0b3InO1xuXG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LWluamVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2R5bmFtaWMtY29tcG9uZW50L2R5bmFtaWMtY29tcG9uZW50LWNvbnRhaW5lcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMubW9kdWxlJztcblxuZXhwb3J0ICogZnJvbSAnLi9kYXRhdHlwZXMvaGFzaC5kYXRhdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGF0eXBlcy9zaXplLmRhdGF0eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YXR5cGVzL2NvbG9yLWFjY2VudC5kYXRhdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2NvbnRlbnQtZGVuc2l0eS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvcnRsLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy90aGVtZXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2tleWJvYXJkLXN1cHBvcnQva2V5Ym9hcmQtc3VwcG9ydC5zZXJ2aWNlJztcblxuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYWJzdHJhY3QtZmQtbmd4LWNsYXNzJztcblxuZXhwb3J0ICogZnJvbSAnLi9saXN0LWl0ZW0vbGlzdC1pdGVtLXV0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi9taXhpbnMvYXBwbHktbWl4aW4nO1xuXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL2ZvY3VzLXRyYXAuc2VydmljZSc7XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsaUVBQWlFLENBQUM7QUFFaEYsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDRCQUE0QixDQUFDO0FBRTNDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYywrREFBK0QsQ0FBQztBQUU5RSxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhDQUE4QyxDQUFDO0FBRTdELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGlEQUFpRCxDQUFDO0FBRWhFLGNBQWMsMEJBQTBCLENBQUM7QUFFekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUUvQixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHNEQUFzRCxDQUFDO0FBRXJFLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGNBQWMsVUFBVSxDQUFDO0FBRXpCLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxjQUFjLHNCQUFzQixDQUFDO0FBRXJDLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvdGVtcGxhdGUvdGVtcGxhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy90ZW1wbGF0ZS90ZW1wbGF0ZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL29ubHktZGlnaXRzL29ubHktZGlnaXRzLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvb25seS1kaWdpdHMvb25seS1kaWdpdHMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9yZXNpemUvcmVzaXplLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXplL3Jlc2l6ZS1oYW5kbGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9yZXNpemUvcmVzaXplLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvaW5pdGlhbC1mb2N1cy9pbml0aWFsLWZvY3VzLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvbGluZS1jbGFtcC9saW5lLWNsYW1wLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvbGluZS1jbGFtcC9saW5lLWNsYW1wLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvaW5pdGlhbC1mb2N1cy9pbml0aWFsLWZvY3VzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvYXV0by1jb21wbGV0ZS9hdXRvLWNvbXBsZXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvYXV0by1jb21wbGV0ZS9hdXRvLWNvbXBsZXRlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvb3ZlcmZsb3ctbGlzdC9vdmVyZmxvdy1saXN0LWl0ZW0uZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9vdmVyZmxvdy1saXN0L292ZXJmbG93LWxpc3QuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9vdmVyZmxvdy1saXN0L292ZXJmbG93LWxpc3QubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy90cnVuY2F0ZS90cnVuY2F0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL3RydW5jYXRlL3RydW5jYXRlLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvZm9jdXMta2V5LW1hbmFnZXIvZm9jdXMta2V5LW1hbmFnZXItaXRlbS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzL2ZvY3VzLWtleS1tYW5hZ2VyL2ZvY3VzLWtleS1tYW5hZ2VyLWxpc3QuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9mb2N1cy1rZXktbWFuYWdlci9mb2N1cy1rZXktbWFuYWdlci1oZWxwZXJzLm1vZHVsZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvcGlwZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9saXN0LWdyb3VwLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9kaXNwbGF5Rm4ucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3R3by1kaWdpdHMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3NlYXJjaC1oaWdobGlnaHQucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3NhZmUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL2lzLWNvbXBhY3QucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3ZhbHVlLWJ5LXBhdGgucGlwZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHJhZy1hbmQtZHJvcC9kcmFnLWFuZC1kcm9wLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RyYWctYW5kLWRyb3AvZG5kLWxpc3QvZG5kLWxpc3QuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJhZy1hbmQtZHJvcC9kbmQtaXRlbS9kbmQtaXRlbS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmFnLWFuZC1kcm9wL2RuZC1rZXlib2FyZC1ncm91cC9kbmQta2V5Ym9hcmQtZ3JvdXAuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vZHJhZy1hbmQtZHJvcC9kbmQta2V5Ym9hcmQtaXRlbS9kbmQta2V5Ym9hcmQtaXRlbS5kaXJlY3RpdmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvY3NzLWNsYXNzLWJ1aWxkZXIuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9jc3Mtc3R5bGUtYnVpbGRlci5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2hhcy1lbGVtZW50LXJlZi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2tleWJvYXJkLXN1cHBvcnQtaXRlbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvYXBwbHktY3NzLWNsYXNzLmRlY29yYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvYXBwbHktY3NzLXN0eWxlLmRlY29yYXRvcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQtaW5qZWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljLWNvbXBvbmVudC9keW5hbWljLWNvbXBvbmVudC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZHluYW1pYy1jb21wb25lbnQvZHluYW1pYy1jb21wb25lbnQtY29udGFpbmVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL3JhbmdlLXNlbGVjdG9yJztcblxuZXhwb3J0ICogZnJvbSAnLi91dGlscy5tb2R1bGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RhdGF0eXBlcy9oYXNoLmRhdGF0eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0YXR5cGVzL3NpemUuZGF0YXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRhdHlwZXMvY29sb3ItYWNjZW50LmRhdGF0eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvY29udGVudC1kZW5zaXR5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9ydGwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3RoZW1lcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMva2V5Ym9hcmQtc3VwcG9ydC9rZXlib2FyZC1zdXBwb3J0LnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vY29uc3RzJztcblxuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdC1mZC1uZ3gtY2xhc3MnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpc3QtaXRlbS9saXN0LWl0ZW0tdXRpbHMnO1xuXG5leHBvcnQgKiBmcm9tICcuL21peGlucy9hcHBseS1taXhpbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvZm9jdXMtdHJhcC5zZXJ2aWNlJztcbiJdfQ==
@@ -2623,6 +2623,119 @@ class DynamicComponentContainer {
2623
2623
  }
2624
2624
  }
2625
2625
 
2626
+ /**
2627
+ * Utility type, that allows to track and select ranges of elements while using multi-selection.
2628
+ *
2629
+ * @usage
2630
+ * Imagine we have a simple list of checkboxes:
2631
+ * ```html
2632
+ * <input
2633
+ * #checkboxInput
2634
+ * *ngFor="let o of options; let idx = index"
2635
+ * type="checkbox"
2636
+ * [checked]="selectionModel.checked(o)"
2637
+ * (click)="toggle(idx, $event)"
2638
+ * >
2639
+ * ```
2640
+ * With the given layout the logic should be as follows:
2641
+ * ```typescript
2642
+ * export class YourComponent {
2643
+ * options = ['a', 'b', 'c'];
2644
+ * readonly selectionModel = new SelectionModel(true);
2645
+ *
2646
+ * private readonly _rangeSelector = new RangeSelector();
2647
+ *
2648
+ *
2649
+ * toggle(idx: number, event: PointerEvent): void {
2650
+ * // getting the toggled value of the checkbox
2651
+ * const toggledSelection = event.target.value;
2652
+ *
2653
+ * // registering the selection of current checkbox
2654
+ * this._rangeSelector.onRangeElementToggled(idx, event);
2655
+ *
2656
+ * // Apply value to each element in range.
2657
+ * // If checkbox was toggled without shift pressed or without previously selected one,
2658
+ * // this method will select only it.
2659
+ * this._rangeSelector.applyValueToEachInRange(idx => {
2660
+ * if (toggledSelection) {
2661
+ * this.selectionModel.select(options[idx]);
2662
+ * } else {
2663
+ * this.selectionModel.deselect(options[idx]);
2664
+ * }
2665
+ * });
2666
+ * }
2667
+ * }
2668
+ * ```
2669
+ */
2670
+ class RangeSelector {
2671
+ constructor() {
2672
+ /** @hidden */
2673
+ this._previousSelectedIndex = null;
2674
+ }
2675
+ /**
2676
+ * Last registered selection state (either multiple or single).
2677
+ * Is updated on each `onRangeElementClicked` invokation. Will be `null` initially or once `reset()` is called.
2678
+ */
2679
+ get lastRangeSelectionState() {
2680
+ return this._state ? Object.assign({}, this._state) : null;
2681
+ }
2682
+ /**
2683
+ * The method that should be used to register each checkbox toggle.
2684
+ * Accepts two arguments: `index` and `event`. If none provided, will reset existing state.
2685
+ * Otherwise will register current index as last checked.
2686
+ *
2687
+ * If toggling was done with "shift" pressed and there's a previously registered index, will register a range selection.
2688
+ * At the same time if checkbox was toggled without shift pressed or without previously selected one, this method will select only it.
2689
+ *
2690
+ * After calling this method it's recommended to use `applyValueToEachInRange` to actually toggle each checkbox in range.
2691
+ *
2692
+ * See usage example on this class itself.
2693
+ */
2694
+ onRangeElementToggled(index, event) {
2695
+ if (this._isNonNegativeInteger(this._previousSelectedIndex) &&
2696
+ this._isNonNegativeInteger(index) &&
2697
+ (event === null || event === void 0 ? void 0 : event.shiftKey)) {
2698
+ this._state = {
2699
+ isRangeSelection: true,
2700
+ from: Math.min(this._previousSelectedIndex, index),
2701
+ to: Math.max(this._previousSelectedIndex, index)
2702
+ };
2703
+ this._previousSelectedIndex = index;
2704
+ }
2705
+ else if (this._isNonNegativeInteger(index)) {
2706
+ this._state = { isRangeSelection: false, from: index, to: index };
2707
+ this._previousSelectedIndex = index;
2708
+ }
2709
+ else {
2710
+ this.reset();
2711
+ }
2712
+ return this.lastRangeSelectionState;
2713
+ }
2714
+ /**
2715
+ * Allows to apply selection to each item in selection range.
2716
+ * Accepts a function to apply selection to each item by registered index.
2717
+ *
2718
+ * See usage example on this class itself.
2719
+ */
2720
+ applyValueToEachInRange(selectionMethod) {
2721
+ const state = this.lastRangeSelectionState;
2722
+ if (this._isNonNegativeInteger(state === null || state === void 0 ? void 0 : state.from) && this._isNonNegativeInteger(state.to)) {
2723
+ for (let index = state.from; index <= state.to; index++) {
2724
+ selectionMethod(index);
2725
+ }
2726
+ }
2727
+ }
2728
+ /** Resets selection state. Useful when the list of selectable items is changed (e.g. by filtering, sorting, page change) */
2729
+ reset() {
2730
+ this._state = null;
2731
+ this._previousSelectedIndex = null;
2732
+ }
2733
+ /** @hidden */
2734
+ _isNonNegativeInteger(num) {
2735
+ return Number.isInteger(num) && num >= 0;
2736
+ }
2737
+ }
2738
+
2626
2739
  var ContentDensityEnum;
2627
2740
  (function (ContentDensityEnum) {
2628
2741
  ContentDensityEnum["COMPACT"] = "compact";
@@ -3009,5 +3122,5 @@ function applyMixins(derivedCtor, baseCtors) {
3009
3122
  * Generated bundle index. Do not edit.
3010
3123
  */
3011
3124
 
3012
- export { ANY_LANGUAGE_LETTERS_GROUP_REGEX, ANY_LANGUAGE_LETTERS_REGEX, AbstractFdNgxClass, AutoCompleteDirective, AutoCompleteModule, ContentDensityEnum, ContentDensityService, DECIMAL_NUMBER_UNICODE_GROUP_REGEX, DECIMAL_NUMBER_UNICODE_RANGE, DECIMAL_NUMBER_UNICODE_REGEX, DEFAULT_CONTENT_DENSITY, DefaultTruncateCharCount, DisplayFnPipe, DndItemDirective, DndKeyboardGroupDirective, DndKeyboardItemDirective, DndListDirective, DragAndDropModule, DynamicComponentContainer, DynamicComponentInjector, DynamicComponentService, ELEMENT_REF_EXCEPTION, FocusKeyManagerHelpersModule, FocusKeyManagerItemDirective, FocusKeyManagerListDirective, FocusTrapService, INVALID_DATE_ERROR, InitialFocusDirective, InitialFocusModule, IsCompactDensityPipe, KeyUtil, KeyboardSupportService, LETTERS_UNICODE_RANGE, LIST_ITEM_COMPONENT, LineClampDirective, LineClampModule, LineClampTargetDirective, ListGroupPipe, MOBILE_CONFIG_ERROR, OVERFLOW_PRIORITY_SCORE, OnlyDigitsDirective, OnlyDigitsModule, OverflowListDirective, OverflowListItemDirective, OverflowListModule, PipeModule, RTL_LANGUAGE, ResizeDirective, ResizeHandleDirective, ResizeModule, RtlService, SafePipe, SearchHighlightPipe, THEME_SWITCHER_ROUTER_MISSING_ERROR, TemplateDirective, TemplateModule, ThemesService, TruncateDirective, TruncateModule, TwoDigitsPipe, UtilsModule, ValueByPathPipe, applyCssClass, applyCssStyle, applyMixins, getElementCapacity, getElementWidth, getRandomColorAccent, intersectionObservable, isCompactDensity, isValidContentDensity, parserFileSize, pxToNum, resizeObservable, scrollTop, toNativeElement, uuidv4 };
3125
+ export { ANY_LANGUAGE_LETTERS_GROUP_REGEX, ANY_LANGUAGE_LETTERS_REGEX, AbstractFdNgxClass, AutoCompleteDirective, AutoCompleteModule, ContentDensityEnum, ContentDensityService, DECIMAL_NUMBER_UNICODE_GROUP_REGEX, DECIMAL_NUMBER_UNICODE_RANGE, DECIMAL_NUMBER_UNICODE_REGEX, DEFAULT_CONTENT_DENSITY, DefaultTruncateCharCount, DisplayFnPipe, DndItemDirective, DndKeyboardGroupDirective, DndKeyboardItemDirective, DndListDirective, DragAndDropModule, DynamicComponentContainer, DynamicComponentInjector, DynamicComponentService, ELEMENT_REF_EXCEPTION, FocusKeyManagerHelpersModule, FocusKeyManagerItemDirective, FocusKeyManagerListDirective, FocusTrapService, INVALID_DATE_ERROR, InitialFocusDirective, InitialFocusModule, IsCompactDensityPipe, KeyUtil, KeyboardSupportService, LETTERS_UNICODE_RANGE, LIST_ITEM_COMPONENT, LineClampDirective, LineClampModule, LineClampTargetDirective, ListGroupPipe, MOBILE_CONFIG_ERROR, OVERFLOW_PRIORITY_SCORE, OnlyDigitsDirective, OnlyDigitsModule, OverflowListDirective, OverflowListItemDirective, OverflowListModule, PipeModule, RTL_LANGUAGE, RangeSelector, ResizeDirective, ResizeHandleDirective, ResizeModule, RtlService, SafePipe, SearchHighlightPipe, THEME_SWITCHER_ROUTER_MISSING_ERROR, TemplateDirective, TemplateModule, ThemesService, TruncateDirective, TruncateModule, TwoDigitsPipe, UtilsModule, ValueByPathPipe, applyCssClass, applyCssStyle, applyMixins, getElementCapacity, getElementWidth, getRandomColorAccent, intersectionObservable, isCompactDensity, isValidContentDensity, parserFileSize, pxToNum, resizeObservable, scrollTop, toNativeElement, uuidv4 };
3013
3126
  //# sourceMappingURL=fundamental-ngx-core-utils.mjs.map