@radix-ng/primitives 0.16.0 → 0.18.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 (203) hide show
  1. package/checkbox/src/checkbox-input.directive.d.ts +2 -1
  2. package/compodoc/documentation.json +7419 -2200
  3. package/esm2022/accordion/index.mjs +4 -4
  4. package/esm2022/accordion/src/accordion-content.directive.mjs +3 -3
  5. package/esm2022/accordion/src/accordion-header.directive.mjs +3 -3
  6. package/esm2022/accordion/src/accordion-item.directive.mjs +3 -3
  7. package/esm2022/accordion/src/accordion-root.directive.mjs +3 -3
  8. package/esm2022/accordion/src/accordion-trigger.directive.mjs +3 -3
  9. package/esm2022/alert-dialog/index.mjs +4 -4
  10. package/esm2022/alert-dialog/src/alert-dialog-cancel.directive.mjs +3 -3
  11. package/esm2022/alert-dialog/src/alert-dialog-content.directive.mjs +3 -3
  12. package/esm2022/alert-dialog/src/alert-dialog-root.directive.mjs +3 -3
  13. package/esm2022/alert-dialog/src/alert-dialog-title.directive.mjs +3 -3
  14. package/esm2022/alert-dialog/src/alert-dialog-trigger.directive.mjs +3 -3
  15. package/esm2022/alert-dialog/src/alert-dialog.service.mjs +3 -3
  16. package/esm2022/aspect-ratio/src/aspect-ratio.directive.mjs +3 -3
  17. package/esm2022/avatar/src/avatar-fallback.directive.mjs +3 -3
  18. package/esm2022/avatar/src/avatar-image.directive.mjs +3 -3
  19. package/esm2022/avatar/src/avatar-root.directive.mjs +3 -3
  20. package/esm2022/checkbox/src/checkbox-button.directive.mjs +3 -3
  21. package/esm2022/checkbox/src/checkbox-indicator.directive.mjs +3 -3
  22. package/esm2022/checkbox/src/checkbox-input.directive.mjs +7 -4
  23. package/esm2022/checkbox/src/checkbox.directive.mjs +3 -3
  24. package/esm2022/collapsible/src/collapsible-content.directive.mjs +3 -3
  25. package/esm2022/collapsible/src/collapsible-root.directive.mjs +3 -3
  26. package/esm2022/collapsible/src/collapsible-trigger.directive.mjs +3 -3
  27. package/esm2022/context-menu/index.mjs +4 -4
  28. package/esm2022/context-menu/src/context-menu-content.directive.mjs +3 -3
  29. package/esm2022/context-menu/src/context-menu-item-checkbox.directive.mjs +3 -3
  30. package/esm2022/context-menu/src/context-menu-item-indicator.directive.mjs +3 -3
  31. package/esm2022/context-menu/src/context-menu-item-radio-group.directive.mjs +3 -3
  32. package/esm2022/context-menu/src/context-menu-item-radio.directive.mjs +3 -3
  33. package/esm2022/context-menu/src/context-menu-item-selectable.mjs +3 -3
  34. package/esm2022/context-menu/src/context-menu-item.directive.mjs +3 -3
  35. package/esm2022/context-menu/src/context-menu-label.directive.mjs +3 -3
  36. package/esm2022/context-menu/src/context-menu-separator.directive.mjs +3 -3
  37. package/esm2022/context-menu/src/context-menu-trigger.directive.mjs +3 -3
  38. package/esm2022/core/src/auto-focus.directive.mjs +3 -3
  39. package/esm2022/dialog/index.mjs +4 -4
  40. package/esm2022/dialog/src/dialog-close.directive.mjs +3 -3
  41. package/esm2022/dialog/src/dialog-content.directive.mjs +3 -3
  42. package/esm2022/dialog/src/dialog-description.directive.mjs +3 -3
  43. package/esm2022/dialog/src/dialog-dismiss.directive.mjs +3 -3
  44. package/esm2022/dialog/src/dialog-title.directive.mjs +3 -3
  45. package/esm2022/dialog/src/dialog-trigger.directive.mjs +3 -3
  46. package/esm2022/dialog/src/dialog.service.mjs +3 -3
  47. package/esm2022/dropdown-menu/index.mjs +4 -4
  48. package/esm2022/dropdown-menu/src/dropdown-menu-content.directive.mjs +3 -3
  49. package/esm2022/dropdown-menu/src/dropdown-menu-item-checkbox.directive.mjs +3 -3
  50. package/esm2022/dropdown-menu/src/dropdown-menu-item-indicator.directive.mjs +3 -3
  51. package/esm2022/dropdown-menu/src/dropdown-menu-item-radio-group.directive.mjs +3 -3
  52. package/esm2022/dropdown-menu/src/dropdown-menu-item-radio.directive.mjs +3 -3
  53. package/esm2022/dropdown-menu/src/dropdown-menu-item-selectable.mjs +3 -3
  54. package/esm2022/dropdown-menu/src/dropdown-menu-item.directive.mjs +3 -3
  55. package/esm2022/dropdown-menu/src/dropdown-menu-label.directive.mjs +3 -3
  56. package/esm2022/dropdown-menu/src/dropdown-menu-separator.directive.mjs +3 -3
  57. package/esm2022/dropdown-menu/src/dropdown-menu-trigger.directive.mjs +3 -3
  58. package/esm2022/label/src/label.directive.mjs +3 -3
  59. package/esm2022/menu/index.mjs +4 -4
  60. package/esm2022/menu/src/menu-content.directive.mjs +3 -3
  61. package/esm2022/menu/src/menu-directive.mjs +3 -3
  62. package/esm2022/menu/src/menu-group.directive.mjs +3 -3
  63. package/esm2022/menu/src/menu-item.directive.mjs +3 -3
  64. package/esm2022/menu/src/menu-label.directive.mjs +3 -3
  65. package/esm2022/menu/src/menu-separator.directive.mjs +3 -3
  66. package/esm2022/menubar/index.mjs +4 -4
  67. package/esm2022/menubar/src/menubar-content.directive.mjs +3 -3
  68. package/esm2022/menubar/src/menubar-item-checkbox.directive.mjs +3 -3
  69. package/esm2022/menubar/src/menubar-item-indicator.directive.mjs +3 -3
  70. package/esm2022/menubar/src/menubar-item-radio.directive.mjs +3 -3
  71. package/esm2022/menubar/src/menubar-item.directive.mjs +3 -3
  72. package/esm2022/menubar/src/menubar-radio-group.directive.mjs +3 -3
  73. package/esm2022/menubar/src/menubar-root.directive.mjs +3 -3
  74. package/esm2022/menubar/src/menubar-separator.directive.mjs +3 -3
  75. package/esm2022/menubar/src/menubar-trigger.directive.mjs +3 -3
  76. package/esm2022/progress/index.mjs +4 -4
  77. package/esm2022/progress/src/progress-indicator.directive.mjs +3 -3
  78. package/esm2022/progress/src/progress-root.directive.mjs +3 -3
  79. package/esm2022/radio/src/radio-indicator.directive.mjs +3 -3
  80. package/esm2022/radio/src/radio-item.directive.mjs +3 -3
  81. package/esm2022/radio/src/radio-root.directive.mjs +3 -3
  82. package/esm2022/select/index.mjs +65 -0
  83. package/esm2022/select/radix-ng-primitives-select.mjs +5 -0
  84. package/esm2022/select/src/select-content.directive.mjs +53 -0
  85. package/esm2022/select/src/select-group.directive.mjs +18 -0
  86. package/esm2022/select/src/select-icon.directive.mjs +18 -0
  87. package/esm2022/select/src/select-item-indicator.directive.mjs +23 -0
  88. package/esm2022/select/src/select-item.directive.mjs +116 -0
  89. package/esm2022/select/src/select-label.directive.mjs +15 -0
  90. package/esm2022/select/src/select-separator.directive.mjs +18 -0
  91. package/esm2022/select/src/select-trigger.directive.mjs +38 -0
  92. package/esm2022/select/src/select-value.directive.mjs +21 -0
  93. package/esm2022/select/src/select.component.mjs +234 -0
  94. package/esm2022/separator/src/separator.directive.mjs +3 -3
  95. package/esm2022/slider/index.mjs +28 -0
  96. package/esm2022/slider/radix-ng-primitives-slider.mjs +5 -0
  97. package/esm2022/slider/src/slider-horizontal.component.mjs +117 -0
  98. package/esm2022/slider/src/slider-impl.directive.mjs +89 -0
  99. package/esm2022/slider/src/slider-orientation-context.service.mjs +28 -0
  100. package/esm2022/slider/src/slider-range.component.mjs +41 -0
  101. package/esm2022/slider/src/slider-root.component.mjs +207 -0
  102. package/esm2022/slider/src/slider-thumb-impl.directive.mjs +102 -0
  103. package/esm2022/slider/src/slider-thumb.component.mjs +22 -0
  104. package/esm2022/slider/src/slider-track.component.mjs +27 -0
  105. package/esm2022/slider/src/slider-vertical.component.mjs +117 -0
  106. package/esm2022/slider/src/utils.mjs +94 -0
  107. package/esm2022/switch/index.mjs +4 -4
  108. package/esm2022/switch/src/switch-input.directive.mjs +3 -3
  109. package/esm2022/switch/src/switch-root.directive.mjs +3 -3
  110. package/esm2022/switch/src/switch-thumb.directive.mjs +3 -3
  111. package/esm2022/tabs/index.mjs +4 -4
  112. package/esm2022/tabs/src/tabs-content.directive.mjs +3 -3
  113. package/esm2022/tabs/src/tabs-context.service.mjs +3 -3
  114. package/esm2022/tabs/src/tabs-list.directive.mjs +3 -3
  115. package/esm2022/tabs/src/tabs-root.directive.mjs +3 -3
  116. package/esm2022/tabs/src/tabs-trigger.directive.mjs +3 -3
  117. package/esm2022/toggle/src/toggle-input.directive.mjs +3 -3
  118. package/esm2022/toggle/src/toggle.directive.mjs +3 -3
  119. package/esm2022/toggle-group/src/toggle-group-item.directive.mjs +3 -3
  120. package/esm2022/toggle-group/src/toggle-group-multiple.directive.mjs +3 -3
  121. package/esm2022/toggle-group/src/toggle-group.directive.mjs +3 -3
  122. package/esm2022/tooltip/index.mjs +41 -0
  123. package/esm2022/tooltip/radix-ng-primitives-tooltip.mjs +5 -0
  124. package/esm2022/tooltip/src/get-content-position.mjs +31 -0
  125. package/esm2022/tooltip/src/tooltip-arrow.directive.mjs +92 -0
  126. package/esm2022/tooltip/src/tooltip-arrow.token.mjs +3 -0
  127. package/esm2022/tooltip/src/tooltip-content-attributes.directive.mjs +24 -0
  128. package/esm2022/tooltip/src/tooltip-content.directive.mjs +48 -0
  129. package/esm2022/tooltip/src/tooltip-content.token.mjs +3 -0
  130. package/esm2022/tooltip/src/tooltip-root.directive.mjs +288 -0
  131. package/esm2022/tooltip/src/tooltip-trigger.directive.mjs +70 -0
  132. package/esm2022/tooltip/src/tooltip.config.mjs +18 -0
  133. package/esm2022/tooltip/src/tooltip.constants.mjs +84 -0
  134. package/esm2022/tooltip/src/tooltip.types.mjs +14 -0
  135. package/esm2022/visually-hidden/src/visually-hidden-input-bubble.directive.mjs +3 -3
  136. package/esm2022/visually-hidden/src/visually-hidden-input.directive.mjs +3 -3
  137. package/esm2022/visually-hidden/src/visually-hidden.directive.mjs +3 -3
  138. package/fesm2022/radix-ng-primitives-accordion.mjs +19 -19
  139. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +22 -22
  140. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +3 -3
  141. package/fesm2022/radix-ng-primitives-avatar.mjs +9 -9
  142. package/fesm2022/radix-ng-primitives-checkbox.mjs +15 -12
  143. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  144. package/fesm2022/radix-ng-primitives-collapsible.mjs +9 -9
  145. package/fesm2022/radix-ng-primitives-context-menu.mjs +34 -34
  146. package/fesm2022/radix-ng-primitives-core.mjs +3 -3
  147. package/fesm2022/radix-ng-primitives-dialog.mjs +25 -25
  148. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +34 -34
  149. package/fesm2022/radix-ng-primitives-label.mjs +3 -3
  150. package/fesm2022/radix-ng-primitives-menu.mjs +22 -22
  151. package/fesm2022/radix-ng-primitives-menubar.mjs +31 -31
  152. package/fesm2022/radix-ng-primitives-progress.mjs +10 -10
  153. package/fesm2022/radix-ng-primitives-radio.mjs +9 -9
  154. package/fesm2022/radix-ng-primitives-select.mjs +572 -0
  155. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -0
  156. package/fesm2022/radix-ng-primitives-separator.mjs +3 -3
  157. package/fesm2022/radix-ng-primitives-slider.mjs +830 -0
  158. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -0
  159. package/fesm2022/radix-ng-primitives-switch.mjs +13 -13
  160. package/fesm2022/radix-ng-primitives-tabs.mjs +19 -19
  161. package/fesm2022/radix-ng-primitives-toggle-group.mjs +9 -9
  162. package/fesm2022/radix-ng-primitives-toggle.mjs +6 -6
  163. package/fesm2022/radix-ng-primitives-tooltip.mjs +684 -0
  164. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -0
  165. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +9 -9
  166. package/package.json +19 -1
  167. package/select/README.md +1 -0
  168. package/select/index.d.ts +26 -0
  169. package/select/src/select-content.directive.d.ts +20 -0
  170. package/select/src/select-group.directive.d.ts +5 -0
  171. package/select/src/select-icon.directive.d.ts +5 -0
  172. package/select/src/select-item-indicator.directive.d.ts +7 -0
  173. package/select/src/select-item.directive.d.ts +47 -0
  174. package/select/src/select-label.directive.d.ts +5 -0
  175. package/select/src/select-separator.directive.d.ts +5 -0
  176. package/select/src/select-trigger.directive.d.ts +11 -0
  177. package/select/src/select-value.directive.d.ts +8 -0
  178. package/select/src/select.component.d.ts +81 -0
  179. package/slider/README.md +1 -0
  180. package/slider/index.d.ts +18 -0
  181. package/slider/src/slider-horizontal.component.d.ts +29 -0
  182. package/slider/src/slider-impl.directive.d.ts +18 -0
  183. package/slider/src/slider-orientation-context.service.d.ts +14 -0
  184. package/slider/src/slider-range.component.d.ts +13 -0
  185. package/slider/src/slider-root.component.d.ts +47 -0
  186. package/slider/src/slider-thumb-impl.directive.d.ts +26 -0
  187. package/slider/src/slider-thumb.component.d.ts +6 -0
  188. package/slider/src/slider-track.component.d.ts +7 -0
  189. package/slider/src/slider-vertical.component.d.ts +29 -0
  190. package/slider/src/utils.d.ts +52 -0
  191. package/tooltip/README.md +1 -0
  192. package/tooltip/index.d.ts +17 -0
  193. package/tooltip/src/get-content-position.d.ts +3 -0
  194. package/tooltip/src/tooltip-arrow.directive.d.ts +25 -0
  195. package/tooltip/src/tooltip-arrow.token.d.ts +3 -0
  196. package/tooltip/src/tooltip-content-attributes.directive.d.ts +8 -0
  197. package/tooltip/src/tooltip-content.directive.d.ts +36 -0
  198. package/tooltip/src/tooltip-content.token.d.ts +3 -0
  199. package/tooltip/src/tooltip-root.directive.d.ts +103 -0
  200. package/tooltip/src/tooltip-trigger.directive.d.ts +26 -0
  201. package/tooltip/src/tooltip.config.d.ts +6 -0
  202. package/tooltip/src/tooltip.constants.d.ts +9 -0
  203. package/tooltip/src/tooltip.types.d.ts +18 -0
@@ -0,0 +1,117 @@
1
+ import { booleanAttribute, Component, EventEmitter, inject, input, Input, Output, signal, viewChild } from '@angular/core';
2
+ import { RdxSliderImplDirective } from './slider-impl.directive';
3
+ import { RdxSliderRootComponent } from './slider-root.component';
4
+ import { BACK_KEYS, linearScale } from './utils';
5
+ import * as i0 from "@angular/core";
6
+ export class RdxSliderHorizontalComponent {
7
+ constructor() {
8
+ this.rootContext = inject(RdxSliderRootComponent);
9
+ this.dir = 'ltr';
10
+ this.inverted = input(false, { transform: booleanAttribute });
11
+ this.min = 0;
12
+ this.max = 100;
13
+ this.className = '';
14
+ this.slideStart = new EventEmitter();
15
+ this.slideMove = new EventEmitter();
16
+ this.slideEnd = new EventEmitter();
17
+ this.stepKeyDown = new EventEmitter();
18
+ this.endKeyDown = new EventEmitter();
19
+ this.homeKeyDown = new EventEmitter();
20
+ this.sliderElement = viewChild('sliderElement');
21
+ this.rect = signal(undefined);
22
+ }
23
+ onSlideStart(event) {
24
+ const value = this.getValueFromPointer(event.clientX);
25
+ this.slideStart.emit(value);
26
+ }
27
+ onSlideMove(event) {
28
+ const value = this.getValueFromPointer(event.clientX);
29
+ this.slideMove.emit(value);
30
+ }
31
+ onSlideEnd() {
32
+ this.rect.set(undefined);
33
+ this.slideEnd.emit();
34
+ }
35
+ onStepKeyDown(event) {
36
+ const slideDirection = this.rootContext.isSlidingFromLeft() ? 'from-left' : 'from-right';
37
+ const isBackKey = BACK_KEYS[slideDirection].includes(event.key);
38
+ this.stepKeyDown.emit({ event, direction: isBackKey ? -1 : 1 });
39
+ }
40
+ getValueFromPointer(pointerPosition) {
41
+ this.rect.set(this.sliderElement()?.nativeElement.getBoundingClientRect());
42
+ const rect = this.rect();
43
+ if (!rect)
44
+ return 0;
45
+ const input = [0, rect.width];
46
+ const output = this.rootContext.isSlidingFromLeft()
47
+ ? [this.min, this.max]
48
+ : [this.max, this.min];
49
+ const value = linearScale(input, output);
50
+ this.rect.set(rect);
51
+ return value(pointerPosition - rect.left);
52
+ }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderHorizontalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: RdxSliderHorizontalComponent, isStandalone: true, selector: "rdx-slider-horizontal", inputs: { dir: { classPropertyName: "dir", publicName: "dir", isSignal: false, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { slideStart: "slideStart", slideMove: "slideMove", slideEnd: "slideEnd", stepKeyDown: "stepKeyDown", endKeyDown: "endKeyDown", homeKeyDown: "homeKeyDown" }, viewQueries: [{ propertyName: "sliderElement", first: true, predicate: ["sliderElement"], descendants: true, isSignal: true }], ngImport: i0, template: `
55
+ <span
56
+ #sliderElement
57
+ [class]="className"
58
+ [attr.data-orientation]="'horizontal'"
59
+ [style]="{ '--rdx-slider-thumb-transform': 'translateX(-50%)' }"
60
+ (slideStart)="onSlideStart($event)"
61
+ (slideMove)="onSlideMove($event)"
62
+ (slideEnd)="onSlideEnd()"
63
+ (stepKeyDown)="onStepKeyDown($event)"
64
+ (endKeyDown)="endKeyDown.emit($event)"
65
+ (homeKeyDown)="homeKeyDown.emit($event)"
66
+ rdxSliderImpl
67
+ >
68
+ <ng-content />
69
+ </span>
70
+ `, isInline: true, dependencies: [{ kind: "directive", type: RdxSliderImplDirective, selector: "[rdxSliderImpl]", outputs: ["slideStart", "slideMove", "slideEnd", "homeKeyDown", "endKeyDown", "stepKeyDown"] }] }); }
71
+ }
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderHorizontalComponent, decorators: [{
73
+ type: Component,
74
+ args: [{
75
+ selector: 'rdx-slider-horizontal',
76
+ standalone: true,
77
+ imports: [RdxSliderImplDirective],
78
+ template: `
79
+ <span
80
+ #sliderElement
81
+ [class]="className"
82
+ [attr.data-orientation]="'horizontal'"
83
+ [style]="{ '--rdx-slider-thumb-transform': 'translateX(-50%)' }"
84
+ (slideStart)="onSlideStart($event)"
85
+ (slideMove)="onSlideMove($event)"
86
+ (slideEnd)="onSlideEnd()"
87
+ (stepKeyDown)="onStepKeyDown($event)"
88
+ (endKeyDown)="endKeyDown.emit($event)"
89
+ (homeKeyDown)="homeKeyDown.emit($event)"
90
+ rdxSliderImpl
91
+ >
92
+ <ng-content />
93
+ </span>
94
+ `
95
+ }]
96
+ }], propDecorators: { dir: [{
97
+ type: Input
98
+ }], min: [{
99
+ type: Input
100
+ }], max: [{
101
+ type: Input
102
+ }], className: [{
103
+ type: Input
104
+ }], slideStart: [{
105
+ type: Output
106
+ }], slideMove: [{
107
+ type: Output
108
+ }], slideEnd: [{
109
+ type: Output
110
+ }], stepKeyDown: [{
111
+ type: Output
112
+ }], endKeyDown: [{
113
+ type: Output
114
+ }], homeKeyDown: [{
115
+ type: Output
116
+ }] } });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWhvcml6b250YWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zbGlkZXIvc3JjL3NsaWRlci1ob3Jpem9udGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBd0JqRCxNQUFNLE9BQU8sNEJBQTRCO0lBdEJ6QztRQXVCcUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVyRCxRQUFHLEdBQWtCLEtBQUssQ0FBQztRQUUzQixhQUFRLEdBQUcsS0FBSyxDQUF3QixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRWhGLFFBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixRQUFHLEdBQUcsR0FBRyxDQUFDO1FBRVYsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVkLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3hDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQStDLENBQUM7UUFDOUUsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQy9DLGdCQUFXLEdBQUcs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QUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhTbGlkZXJJbXBsRGlyZWN0aXZlIH0gZnJvbSAnLi9zbGlkZXItaW1wbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmR4U2xpZGVyUm9vdENvbXBvbmVudCB9IGZyb20gJy4vc2xpZGVyLXJvb3QuY29tcG9uZW50JztcbmltcG9ydCB7IEJBQ0tfS0VZUywgbGluZWFyU2NhbGUgfSBmcm9tICcuL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyZHgtc2xpZGVyLWhvcml6b250YWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1JkeFNsaWRlckltcGxEaXJlY3RpdmVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjc2xpZGVyRWxlbWVudFxuICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW9yaWVudGF0aW9uXT1cIidob3Jpem9udGFsJ1wiXG4gICAgICAgICAgICBbc3R5bGVdPVwieyAnLS1yZHgtc2xpZGVyLXRodW1iLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKC01MCUpJyB9XCJcbiAgICAgICAgICAgIChzbGlkZVN0YXJ0KT1cIm9uU2xpZGVTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzbGlkZU1vdmUpPVwib25TbGlkZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2xpZGVFbmQpPVwib25TbGlkZUVuZCgpXCJcbiAgICAgICAgICAgIChzdGVwS2V5RG93bik9XCJvblN0ZXBLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGVuZEtleURvd24pPVwiZW5kS2V5RG93bi5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGhvbWVLZXlEb3duKT1cImhvbWVLZXlEb3duLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICByZHhTbGlkZXJJbXBsXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFJkeFNsaWRlckhvcml6b250YWxDb21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm9vdENvbnRleHQgPSBpbmplY3QoUmR4U2xpZGVyUm9vdENvbXBvbmVudCk7XG5cbiAgICBASW5wdXQoKSBkaXI6ICdsdHInIHwgJ3J0bCcgPSAnbHRyJztcblxuICAgIHJlYWRvbmx5IGludmVydGVkID0gaW5wdXQ8Ym9vbGVhbiwgQm9vbGVhbklucHV0PihmYWxzZSwgeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSk7XG5cbiAgICBASW5wdXQoKSBtaW4gPSAwO1xuICAgIEBJbnB1dCgpIG1heCA9IDEwMDtcblxuICAgIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICcnO1xuXG4gICAgQE91dHB1dCgpIHNsaWRlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCkgc2xpZGVNb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgQE91dHB1dCgpIHNsaWRlRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBzdGVwS2V5RG93biA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogS2V5Ym9hcmRFdmVudDsgZGlyZWN0aW9uOiBudW1iZXIgfT4oKTtcbiAgICBAT3V0cHV0KCkgZW5kS2V5RG93biA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgaG9tZUtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNsaWRlckVsZW1lbnQgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3NsaWRlckVsZW1lbnQnKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVjdCA9IHNpZ25hbDxET01SZWN0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgb25TbGlkZVN0YXJ0KGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVBvaW50ZXIoZXZlbnQuY2xpZW50WCk7XG4gICAgICAgIHRoaXMuc2xpZGVTdGFydC5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBvblNsaWRlTW92ZShldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21Qb2ludGVyKGV2ZW50LmNsaWVudFgpO1xuICAgICAgICB0aGlzLnNsaWRlTW92ZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBvblNsaWRlRW5kKCkge1xuICAgICAgICB0aGlzLnJlY3Quc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuc2xpZGVFbmQuZW1pdCgpO1xuICAgIH1cblxuICAgIG9uU3RlcEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc2xpZGVEaXJlY3Rpb24gPSB0aGlzLnJvb3RDb250ZXh0LmlzU2xpZGluZ0Zyb21MZWZ0KCkgPyAnZnJvbS1sZWZ0JyA6ICdmcm9tLXJpZ2h0JztcbiAgICAgICAgY29uc3QgaXNCYWNrS2V5ID0gQkFDS19LRVlTW3NsaWRlRGlyZWN0aW9uXS5pbmNsdWRlcyhldmVudC5rZXkpO1xuXG4gICAgICAgIHRoaXMuc3RlcEtleURvd24uZW1pdCh7IGV2ZW50LCBkaXJlY3Rpb246IGlzQmFja0tleSA/IC0xIDogMSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlRnJvbVBvaW50ZXIocG9pbnRlclBvc2l0aW9uOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICB0aGlzLnJlY3Quc2V0KHRoaXMuc2xpZGVyRWxlbWVudCgpPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMucmVjdCgpO1xuICAgICAgICBpZiAoIXJlY3QpIHJldHVybiAwO1xuXG4gICAgICAgIGNvbnN0IGlucHV0OiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIHJlY3Qud2lkdGhdO1xuICAgICAgICBjb25zdCBvdXRwdXQ6IFtudW1iZXIsIG51bWJlcl0gPSB0aGlzLnJvb3RDb250ZXh0LmlzU2xpZGluZ0Zyb21MZWZ0KClcbiAgICAgICAgICAgID8gW3RoaXMubWluLCB0aGlzLm1heF1cbiAgICAgICAgICAgIDogW3RoaXMubWF4LCB0aGlzLm1pbl07XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBsaW5lYXJTY2FsZShpbnB1dCwgb3V0cHV0KTtcbiAgICAgICAgdGhpcy5yZWN0LnNldChyZWN0KTtcblxuICAgICAgICByZXR1cm4gdmFsdWUocG9pbnRlclBvc2l0aW9uIC0gcmVjdC5sZWZ0KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,89 @@
1
+ import { Directive, EventEmitter, inject, Output } from '@angular/core';
2
+ import { RdxSliderRootComponent } from './slider-root.component';
3
+ import { ARROW_KEYS, PAGE_KEYS } from './utils';
4
+ import * as i0 from "@angular/core";
5
+ export class RdxSliderImplDirective {
6
+ constructor() {
7
+ this.rootContext = inject(RdxSliderRootComponent);
8
+ this.slideStart = new EventEmitter();
9
+ this.slideMove = new EventEmitter();
10
+ this.slideEnd = new EventEmitter();
11
+ this.homeKeyDown = new EventEmitter();
12
+ this.endKeyDown = new EventEmitter();
13
+ this.stepKeyDown = new EventEmitter();
14
+ }
15
+ onKeyDown(event) {
16
+ if (event.key === 'Home') {
17
+ this.homeKeyDown.emit(event);
18
+ // Prevent scrolling to page start
19
+ event.preventDefault();
20
+ }
21
+ else if (event.key === 'End') {
22
+ this.endKeyDown.emit(event);
23
+ // Prevent scrolling to page end
24
+ event.preventDefault();
25
+ }
26
+ else if (PAGE_KEYS.concat(ARROW_KEYS).includes(event.key)) {
27
+ this.stepKeyDown.emit(event);
28
+ // Prevent scrolling for directional key presses
29
+ event.preventDefault();
30
+ }
31
+ }
32
+ onPointerDown(event) {
33
+ const target = event.target;
34
+ target.setPointerCapture(event.pointerId);
35
+ // Prevent browser focus behaviour because we focus a thumb manually when values change.
36
+ event.preventDefault();
37
+ // Touch devices have a delay before focusing so won't focus if touch immediately moves
38
+ // away from target (sliding). We want thumb to focus regardless.
39
+ if (this.rootContext.thumbElements.includes(target)) {
40
+ target.focus();
41
+ }
42
+ else {
43
+ this.slideStart.emit(event);
44
+ }
45
+ }
46
+ onPointerMove(event) {
47
+ const target = event.target;
48
+ if (target.hasPointerCapture(event.pointerId)) {
49
+ this.slideMove.emit(event);
50
+ }
51
+ }
52
+ onPointerUp(event) {
53
+ const target = event.target;
54
+ if (target.hasPointerCapture(event.pointerId)) {
55
+ target.releasePointerCapture(event.pointerId);
56
+ this.slideEnd.emit(event);
57
+ }
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderImplDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
60
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxSliderImplDirective, isStandalone: true, selector: "[rdxSliderImpl]", outputs: { slideStart: "slideStart", slideMove: "slideMove", slideEnd: "slideEnd", homeKeyDown: "homeKeyDown", endKeyDown: "endKeyDown", stepKeyDown: "stepKeyDown" }, host: { attributes: { "role": "slider", "tabindex": "0" }, listeners: { "keydown": "onKeyDown($event)", "pointerdown": "onPointerDown($event)", "pointermove": "onPointerMove($event)", "pointerup": "onPointerUp($event)" } }, ngImport: i0 }); }
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderImplDirective, decorators: [{
63
+ type: Directive,
64
+ args: [{
65
+ selector: '[rdxSliderImpl]',
66
+ standalone: true,
67
+ host: {
68
+ role: 'slider',
69
+ tabindex: '0',
70
+ '(keydown)': 'onKeyDown($event)',
71
+ '(pointerdown)': 'onPointerDown($event)',
72
+ '(pointermove)': 'onPointerMove($event)',
73
+ '(pointerup)': 'onPointerUp($event)'
74
+ }
75
+ }]
76
+ }], propDecorators: { slideStart: [{
77
+ type: Output
78
+ }], slideMove: [{
79
+ type: Output
80
+ }], slideEnd: [{
81
+ type: Output
82
+ }], homeKeyDown: [{
83
+ type: Output
84
+ }], endKeyDown: [{
85
+ type: Output
86
+ }], stepKeyDown: [{
87
+ type: Output
88
+ }] } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWltcGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zbGlkZXIvc3JjL3NsaWRlci1pbXBsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQWNoRCxNQUFNLE9BQU8sc0JBQXNCO0lBWm5DO1FBYXVCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFdEQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQzlDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUM3QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDNUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUNoRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztLQWdEN0Q7SUE5Q0csU0FBUyxDQUFDLEtBQW9CO1FBQzFCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixrQ0FBa0M7WUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsZ0NBQWdDO1lBQ2hDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixnREFBZ0Q7WUFDaEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW1CO1FBQzdCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQzNDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUMsd0ZBQXdGO1FBQ3hGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2Qix1RkFBdUY7UUFDdkYsaUVBQWlFO1FBQ2pFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBbUI7UUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBbUI7UUFDM0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0wsQ0FBQzsrR0F2RFEsc0JBQXNCO21HQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBWmxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsUUFBUTt3QkFDZCxRQUFRLEVBQUUsR0FBRzt3QkFDYixXQUFXLEVBQUUsbUJBQW1CO3dCQUNoQyxlQUFlLEVBQUUsdUJBQXVCO3dCQUN4QyxlQUFlLEVBQUUsdUJBQXVCO3dCQUN4QyxhQUFhLEVBQUUscUJBQXFCO3FCQUN2QztpQkFDSjs4QkFJYSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4U2xpZGVyUm9vdENvbXBvbmVudCB9IGZyb20gJy4vc2xpZGVyLXJvb3QuY29tcG9uZW50JztcbmltcG9ydCB7IEFSUk9XX0tFWVMsIFBBR0VfS0VZUyB9IGZyb20gJy4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhTbGlkZXJJbXBsXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgIHJvbGU6ICdzbGlkZXInLFxuICAgICAgICB0YWJpbmRleDogJzAnLFxuICAgICAgICAnKGtleWRvd24pJzogJ29uS2V5RG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhwb2ludGVyZG93biknOiAnb25Qb2ludGVyRG93bigkZXZlbnQpJyxcbiAgICAgICAgJyhwb2ludGVybW92ZSknOiAnb25Qb2ludGVyTW92ZSgkZXZlbnQpJyxcbiAgICAgICAgJyhwb2ludGVydXApJzogJ29uUG9pbnRlclVwKCRldmVudCknXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSZHhTbGlkZXJJbXBsRGlyZWN0aXZlIHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm9vdENvbnRleHQgPSBpbmplY3QoUmR4U2xpZGVyUm9vdENvbXBvbmVudCk7XG5cbiAgICBAT3V0cHV0KCkgc2xpZGVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8UG9pbnRlckV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBzbGlkZU1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPFBvaW50ZXJFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgc2xpZGVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPFBvaW50ZXJFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgaG9tZUtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIGVuZEtleURvd24gPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgpIHN0ZXBLZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdIb21lJykge1xuICAgICAgICAgICAgdGhpcy5ob21lS2V5RG93bi5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIC8vIFByZXZlbnQgc2Nyb2xsaW5nIHRvIHBhZ2Ugc3RhcnRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xuICAgICAgICAgICAgdGhpcy5lbmRLZXlEb3duLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmcgdG8gcGFnZSBlbmRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoUEFHRV9LRVlTLmNvbmNhdChBUlJPV19LRVlTKS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBLZXlEb3duLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgLy8gUHJldmVudCBzY3JvbGxpbmcgZm9yIGRpcmVjdGlvbmFsIGtleSBwcmVzc2VzXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qb2ludGVyRG93bihldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgdGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XG5cbiAgICAgICAgLy8gUHJldmVudCBicm93c2VyIGZvY3VzIGJlaGF2aW91ciBiZWNhdXNlIHdlIGZvY3VzIGEgdGh1bWIgbWFudWFsbHkgd2hlbiB2YWx1ZXMgY2hhbmdlLlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIC8vIFRvdWNoIGRldmljZXMgaGF2ZSBhIGRlbGF5IGJlZm9yZSBmb2N1c2luZyBzbyB3b24ndCBmb2N1cyBpZiB0b3VjaCBpbW1lZGlhdGVseSBtb3Zlc1xuICAgICAgICAvLyBhd2F5IGZyb20gdGFyZ2V0IChzbGlkaW5nKS4gV2Ugd2FudCB0aHVtYiB0byBmb2N1cyByZWdhcmRsZXNzLlxuICAgICAgICBpZiAodGhpcy5yb290Q29udGV4dC50aHVtYkVsZW1lbnRzLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zbGlkZVN0YXJ0LmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qb2ludGVyTW92ZShldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRhcmdldC5oYXNQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpKSB7XG4gICAgICAgICAgICB0aGlzLnNsaWRlTW92ZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUG9pbnRlclVwKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodGFyZ2V0Lmhhc1BvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVFbmQuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { Injectable, signal } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class RdxSliderOrientationContextService {
4
+ constructor() {
5
+ this.contextSignal = signal({
6
+ startEdge: 'left',
7
+ endEdge: 'right',
8
+ direction: 1,
9
+ size: 'width'
10
+ });
11
+ }
12
+ get context() {
13
+ return this.contextSignal();
14
+ }
15
+ updateContext(context) {
16
+ this.contextSignal.update((current) => ({
17
+ ...current,
18
+ ...context
19
+ }));
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderOrientationContextService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderOrientationContextService, providedIn: 'root' }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderOrientationContextService, decorators: [{
25
+ type: Injectable,
26
+ args: [{ providedIn: 'root' }]
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLW9yaWVudGF0aW9uLWNvbnRleHQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc2xpZGVyL3NyYy9zbGlkZXItb3JpZW50YXRpb24tY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVVuRCxNQUFNLE9BQU8sa0NBQWtDO0lBRC9DO1FBRVksa0JBQWEsR0FBRyxNQUFNLENBQXFCO1lBQy9DLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDO0tBWU47SUFWRyxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQW9DO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsT0FBTztZQUNWLEdBQUcsT0FBTztTQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzsrR0FqQlEsa0NBQWtDO21IQUFsQyxrQ0FBa0MsY0FEckIsTUFBTTs7NEZBQ25CLGtDQUFrQztrQkFEOUMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBPcmllbnRhdGlvbkNvbnRleHQge1xuICAgIHN0YXJ0RWRnZTogc3RyaW5nO1xuICAgIGVuZEVkZ2U6IHN0cmluZztcbiAgICBkaXJlY3Rpb246IG51bWJlcjtcbiAgICBzaXplOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmR4U2xpZGVyT3JpZW50YXRpb25Db250ZXh0U2VydmljZSB7XG4gICAgcHJpdmF0ZSBjb250ZXh0U2lnbmFsID0gc2lnbmFsPE9yaWVudGF0aW9uQ29udGV4dD4oe1xuICAgICAgICBzdGFydEVkZ2U6ICdsZWZ0JyxcbiAgICAgICAgZW5kRWRnZTogJ3JpZ2h0JyxcbiAgICAgICAgZGlyZWN0aW9uOiAxLFxuICAgICAgICBzaXplOiAnd2lkdGgnXG4gICAgfSk7XG5cbiAgICBnZXQgY29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dFNpZ25hbCgpO1xuICAgIH1cblxuICAgIHVwZGF0ZUNvbnRleHQoY29udGV4dDogUGFydGlhbDxPcmllbnRhdGlvbkNvbnRleHQ+KSB7XG4gICAgICAgIHRoaXMuY29udGV4dFNpZ25hbC51cGRhdGUoKGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAuLi5jdXJyZW50LFxuICAgICAgICAgICAgLi4uY29udGV4dFxuICAgICAgICB9KSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,41 @@
1
+ import { Component, computed, inject } from '@angular/core';
2
+ import { RdxSliderRootComponent } from './slider-root.component';
3
+ import { convertValueToPercentage } from './utils';
4
+ import * as i0 from "@angular/core";
5
+ export class RdxSliderRangeComponent {
6
+ constructor() {
7
+ this.rootContext = inject(RdxSliderRootComponent);
8
+ this.percentages = computed(() => this.rootContext
9
+ .modelValue()
10
+ ?.map((value) => convertValueToPercentage(value, this.rootContext.min(), this.rootContext.max())));
11
+ this.offsetStart = computed(() => (this.rootContext.modelValue().length > 1 ? Math.min(...this.percentages()) : 0));
12
+ this.offsetEnd = computed(() => 100 - Math.max(...this.percentages()));
13
+ this.rangeStyles = computed(() => {
14
+ const context = this.rootContext.orientationContext.context;
15
+ return {
16
+ [context.startEdge]: `${this.offsetStart()}%`,
17
+ [context.endEdge]: `${this.offsetEnd()}%`
18
+ };
19
+ });
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: RdxSliderRangeComponent, isStandalone: true, selector: "rdx-slider-range", host: { properties: { "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "attr.data-orientation": "rootContext.orientation()", "style": "rangeStyles()" } }, ngImport: i0, template: `
23
+ <ng-content />
24
+ `, isInline: true }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderRangeComponent, decorators: [{
27
+ type: Component,
28
+ args: [{
29
+ selector: 'rdx-slider-range',
30
+ standalone: true,
31
+ host: {
32
+ '[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
33
+ '[attr.data-orientation]': 'rootContext.orientation()',
34
+ '[style]': 'rangeStyles()'
35
+ },
36
+ template: `
37
+ <ng-content />
38
+ `
39
+ }]
40
+ }] });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc2xpZGVyL3NyYy9zbGlkZXItcmFuZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBY25ELE1BQU0sT0FBTyx1QkFBdUI7SUFacEM7UUFhdUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVoRSxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDeEIsSUFBSSxDQUFDLFdBQVc7YUFDWCxVQUFVLEVBQUU7WUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQ3hHLENBQUM7UUFFRixnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pILGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFHLENBQUMsQ0FBQyxDQUFDO1FBRW5FLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztZQUU1RCxPQUFPO2dCQUNILENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHO2dCQUM3QyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRzthQUM1QyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7S0FDTjsrR0FwQlksdUJBQXVCO21HQUF2Qix1QkFBdUIseVBBSnRCOztLQUVUOzs0RkFFUSx1QkFBdUI7a0JBWm5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixzQkFBc0IsRUFBRSx5Q0FBeUM7d0JBQ2pFLHlCQUF5QixFQUFFLDJCQUEyQjt3QkFDdEQsU0FBUyxFQUFFLGVBQWU7cUJBQzdCO29CQUNELFFBQVEsRUFBRTs7S0FFVDtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4U2xpZGVyUm9vdENvbXBvbmVudCB9IGZyb20gJy4vc2xpZGVyLXJvb3QuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbnZlcnRWYWx1ZVRvUGVyY2VudGFnZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JkeC1zbGlkZXItcmFuZ2UnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAncm9vdENvbnRleHQuZGlzYWJsZWQoKSA/IFwiXCIgOiB1bmRlZmluZWQnLFxuICAgICAgICAnW2F0dHIuZGF0YS1vcmllbnRhdGlvbl0nOiAncm9vdENvbnRleHQub3JpZW50YXRpb24oKScsXG4gICAgICAgICdbc3R5bGVdJzogJ3JhbmdlU3R5bGVzKCknXG4gICAgfSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudCAvPlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgUmR4U2xpZGVyUmFuZ2VDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb290Q29udGV4dCA9IGluamVjdChSZHhTbGlkZXJSb290Q29tcG9uZW50KTtcblxuICAgIHBlcmNlbnRhZ2VzID0gY29tcHV0ZWQoKCkgPT5cbiAgICAgICAgdGhpcy5yb290Q29udGV4dFxuICAgICAgICAgICAgLm1vZGVsVmFsdWUoKVxuICAgICAgICAgICAgPy5tYXAoKHZhbHVlKSA9PiBjb252ZXJ0VmFsdWVUb1BlcmNlbnRhZ2UodmFsdWUsIHRoaXMucm9vdENvbnRleHQubWluKCksIHRoaXMucm9vdENvbnRleHQubWF4KCkpKVxuICAgICk7XG5cbiAgICBvZmZzZXRTdGFydCA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnJvb3RDb250ZXh0Lm1vZGVsVmFsdWUoKSEubGVuZ3RoID4gMSA/IE1hdGgubWluKC4uLnRoaXMucGVyY2VudGFnZXMoKSEpIDogMCkpO1xuICAgIG9mZnNldEVuZCA9IGNvbXB1dGVkKCgpID0+IDEwMCAtIE1hdGgubWF4KC4uLnRoaXMucGVyY2VudGFnZXMoKSEpKTtcblxuICAgIHJhbmdlU3R5bGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5yb290Q29udGV4dC5vcmllbnRhdGlvbkNvbnRleHQuY29udGV4dDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW2NvbnRleHQuc3RhcnRFZGdlXTogYCR7dGhpcy5vZmZzZXRTdGFydCgpfSVgLFxuICAgICAgICAgICAgW2NvbnRleHQuZW5kRWRnZV06IGAke3RoaXMub2Zmc2V0RW5kKCl9JWBcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,207 @@
1
+ import { NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { booleanAttribute, Component, computed, EventEmitter, inject, input, Input, model, numberAttribute, Output } from '@angular/core';
3
+ import { RdxSliderHorizontalComponent } from './slider-horizontal.component';
4
+ import { RdxSliderOrientationContextService } from './slider-orientation-context.service';
5
+ import { RdxSliderVerticalComponent } from './slider-vertical.component';
6
+ import { clamp, getClosestValueIndex, getDecimalCount, getNextSortedValues, hasMinStepsBetweenValues, roundValue } from './utils';
7
+ import * as i0 from "@angular/core";
8
+ export class RdxSliderRootComponent {
9
+ constructor() {
10
+ /** @ignore */
11
+ this.orientationContext = inject(RdxSliderOrientationContextService);
12
+ this.min = input(0, { transform: numberAttribute });
13
+ this.max = input(100, { transform: numberAttribute });
14
+ this.step = input(1, { transform: numberAttribute });
15
+ this.minStepsBetweenThumbs = input(0, { transform: numberAttribute });
16
+ this.orientation = input('horizontal');
17
+ this.disabled = input(false, { transform: booleanAttribute });
18
+ this.inverted = input(false, { transform: booleanAttribute });
19
+ this.dir = input('ltr');
20
+ this.className = '';
21
+ this.valueChange = new EventEmitter();
22
+ this.valueCommit = new EventEmitter();
23
+ this.modelValue = model([0]);
24
+ /** @ignore */
25
+ this.valueIndexToChange = model(0);
26
+ /** @ignore */
27
+ this.valuesBeforeSlideStart = model([]);
28
+ this.isSlidingFromLeft = computed(() => (this.dir() === 'ltr' && !this.inverted()) || (this.dir() !== 'ltr' && this.inverted()));
29
+ this.isSlidingFromBottom = computed(() => !this.inverted());
30
+ /** @ignore */
31
+ this.thumbElements = [];
32
+ }
33
+ /** @ignore */
34
+ ngOnInit() {
35
+ const isHorizontal = this.orientation() === 'horizontal';
36
+ if (isHorizontal) {
37
+ this.orientationContext.updateContext({
38
+ direction: this.isSlidingFromLeft() ? 1 : -1,
39
+ size: 'width',
40
+ startEdge: this.isSlidingFromLeft() ? 'left' : 'right',
41
+ endEdge: this.isSlidingFromLeft() ? 'right' : 'left'
42
+ });
43
+ }
44
+ else {
45
+ this.orientationContext.updateContext({
46
+ direction: this.isSlidingFromBottom() ? -1 : 1,
47
+ size: 'height',
48
+ startEdge: this.isSlidingFromBottom() ? 'bottom' : 'top',
49
+ endEdge: this.isSlidingFromBottom() ? 'top' : 'bottom'
50
+ });
51
+ }
52
+ }
53
+ /** @ignore */
54
+ onPointerDown() {
55
+ this.valuesBeforeSlideStart.set([...this.modelValue()]);
56
+ }
57
+ /** @ignore */
58
+ handleSlideStart(value) {
59
+ const closestIndex = getClosestValueIndex(this.modelValue(), value);
60
+ this.updateValues(value, closestIndex);
61
+ }
62
+ /** @ignore */
63
+ handleSlideMove(value) {
64
+ this.updateValues(value, this.valueIndexToChange());
65
+ }
66
+ /** @ignore */
67
+ handleSlideEnd() {
68
+ const prevValue = this.valuesBeforeSlideStart()[this.valueIndexToChange()];
69
+ const nextValue = this.modelValue()[this.valueIndexToChange()];
70
+ const hasChanged = nextValue !== prevValue;
71
+ if (hasChanged) {
72
+ this.valueCommit.emit([...this.modelValue()]);
73
+ }
74
+ }
75
+ /** @ignore */
76
+ handleStepKeyDown(event) {
77
+ const stepInDirection = this.step() * event.direction;
78
+ const atIndex = this.valueIndexToChange();
79
+ const currentValue = this.modelValue()[atIndex];
80
+ this.updateValues(currentValue + stepInDirection, atIndex, true);
81
+ }
82
+ /** @ignore */
83
+ updateValues(value, atIndex, commit = false) {
84
+ const decimalCount = getDecimalCount(this.step());
85
+ const snapToStep = roundValue(Math.round((value - this.min()) / this.step()) * this.step() + this.min(), decimalCount);
86
+ const nextValue = clamp(snapToStep, this.min(), this.max());
87
+ const nextValues = getNextSortedValues(this.modelValue(), nextValue, atIndex);
88
+ if (hasMinStepsBetweenValues(nextValues, this.minStepsBetweenThumbs() * this.step())) {
89
+ this.valueIndexToChange.set(nextValues.indexOf(nextValue));
90
+ const hasChanged = String(nextValues) !== String(this.modelValue());
91
+ if (hasChanged) {
92
+ this.modelValue.set(nextValues);
93
+ this.valueChange.emit([...this.modelValue()]);
94
+ this.thumbElements[this.valueIndexToChange()]?.focus();
95
+ if (commit) {
96
+ this.valueCommit.emit([...this.modelValue()]);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderRootComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.11", type: RdxSliderRootComponent, isStandalone: true, selector: "rdx-slider", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, minStepsBetweenThumbs: { classPropertyName: "minStepsBetweenThumbs", publicName: "minStepsBetweenThumbs", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: false, isRequired: false, transformFunction: null }, modelValue: { classPropertyName: "modelValue", publicName: "modelValue", isSignal: true, isRequired: false, transformFunction: null }, valueIndexToChange: { classPropertyName: "valueIndexToChange", publicName: "valueIndexToChange", isSignal: true, isRequired: false, transformFunction: null }, valuesBeforeSlideStart: { classPropertyName: "valuesBeforeSlideStart", publicName: "valuesBeforeSlideStart", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", valueCommit: "valueCommit", modelValue: "modelValueChange", valueIndexToChange: "valueIndexToChangeChange", valuesBeforeSlideStart: "valuesBeforeSlideStartChange" }, ngImport: i0, template: `
103
+ <ng-template #transclude><ng-content /></ng-template>
104
+
105
+ <ng-container *ngIf="orientation() === 'horizontal'">
106
+ <rdx-slider-horizontal
107
+ [className]="className"
108
+ [min]="min()"
109
+ [max]="max()"
110
+ [dir]="dir()"
111
+ [inverted]="inverted()"
112
+ [attr.aria-disabled]="disabled()"
113
+ [attr.data-disabled]="disabled() ? '' : undefined"
114
+ (pointerdown)="onPointerDown()"
115
+ (slideStart)="handleSlideStart($event)"
116
+ (slideMove)="handleSlideMove($event)"
117
+ (slideEnd)="handleSlideEnd()"
118
+ (homeKeyDown)="updateValues(min(), 0, true)"
119
+ (endKeyDown)="updateValues(max(), modelValue().length - 1, true)"
120
+ (stepKeyDown)="handleStepKeyDown($event)"
121
+ >
122
+ <ng-container *ngTemplateOutlet="transclude" />
123
+ </rdx-slider-horizontal>
124
+ </ng-container>
125
+
126
+ <ng-container *ngIf="orientation() === 'vertical'">
127
+ <rdx-slider-vertical
128
+ [className]="className"
129
+ [min]="min()"
130
+ [max]="max()"
131
+ [dir]="dir()"
132
+ [inverted]="inverted()"
133
+ [attr.aria-disabled]="disabled()"
134
+ [attr.data-disabled]="disabled() ? '' : undefined"
135
+ (pointerdown)="onPointerDown()"
136
+ (slideStart)="handleSlideStart($event)"
137
+ (slideMove)="handleSlideMove($event)"
138
+ (slideEnd)="handleSlideEnd()"
139
+ (homeKeyDown)="updateValues(min(), 0, true)"
140
+ (endKeyDown)="updateValues(max(), modelValue().length - 1, true)"
141
+ (stepKeyDown)="handleStepKeyDown($event)"
142
+ >
143
+ <ng-container *ngTemplateOutlet="transclude" />
144
+ </rdx-slider-vertical>
145
+ </ng-container>
146
+ `, isInline: true, dependencies: [{ kind: "component", type: RdxSliderHorizontalComponent, selector: "rdx-slider-horizontal", inputs: ["dir", "inverted", "min", "max", "className"], outputs: ["slideStart", "slideMove", "slideEnd", "stepKeyDown", "endKeyDown", "homeKeyDown"] }, { kind: "component", type: RdxSliderVerticalComponent, selector: "rdx-slider-vertical", inputs: ["dir", "inverted", "min", "max", "className"], outputs: ["slideStart", "slideMove", "slideEnd", "stepKeyDown", "endKeyDown", "homeKeyDown"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
147
+ }
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderRootComponent, decorators: [{
149
+ type: Component,
150
+ args: [{
151
+ selector: 'rdx-slider',
152
+ standalone: true,
153
+ imports: [RdxSliderHorizontalComponent, RdxSliderVerticalComponent, NgIf, NgTemplateOutlet],
154
+ template: `
155
+ <ng-template #transclude><ng-content /></ng-template>
156
+
157
+ <ng-container *ngIf="orientation() === 'horizontal'">
158
+ <rdx-slider-horizontal
159
+ [className]="className"
160
+ [min]="min()"
161
+ [max]="max()"
162
+ [dir]="dir()"
163
+ [inverted]="inverted()"
164
+ [attr.aria-disabled]="disabled()"
165
+ [attr.data-disabled]="disabled() ? '' : undefined"
166
+ (pointerdown)="onPointerDown()"
167
+ (slideStart)="handleSlideStart($event)"
168
+ (slideMove)="handleSlideMove($event)"
169
+ (slideEnd)="handleSlideEnd()"
170
+ (homeKeyDown)="updateValues(min(), 0, true)"
171
+ (endKeyDown)="updateValues(max(), modelValue().length - 1, true)"
172
+ (stepKeyDown)="handleStepKeyDown($event)"
173
+ >
174
+ <ng-container *ngTemplateOutlet="transclude" />
175
+ </rdx-slider-horizontal>
176
+ </ng-container>
177
+
178
+ <ng-container *ngIf="orientation() === 'vertical'">
179
+ <rdx-slider-vertical
180
+ [className]="className"
181
+ [min]="min()"
182
+ [max]="max()"
183
+ [dir]="dir()"
184
+ [inverted]="inverted()"
185
+ [attr.aria-disabled]="disabled()"
186
+ [attr.data-disabled]="disabled() ? '' : undefined"
187
+ (pointerdown)="onPointerDown()"
188
+ (slideStart)="handleSlideStart($event)"
189
+ (slideMove)="handleSlideMove($event)"
190
+ (slideEnd)="handleSlideEnd()"
191
+ (homeKeyDown)="updateValues(min(), 0, true)"
192
+ (endKeyDown)="updateValues(max(), modelValue().length - 1, true)"
193
+ (stepKeyDown)="handleStepKeyDown($event)"
194
+ >
195
+ <ng-container *ngTemplateOutlet="transclude" />
196
+ </rdx-slider-vertical>
197
+ </ng-container>
198
+ `
199
+ }]
200
+ }], propDecorators: { className: [{
201
+ type: Input
202
+ }], valueChange: [{
203
+ type: Output
204
+ }], valueCommit: [{
205
+ type: Output
206
+ }] } });
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXJvb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zbGlkZXIvc3JjL3NsaWRlci1yb290LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBQ0wsZUFBZSxFQUVmLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQ0gsS0FBSyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4QixVQUFVLEVBQ2IsTUFBTSxTQUFTLENBQUM7O0FBb0RqQixNQUFNLE9BQU8sc0JBQXNCO0lBbERuQztRQW1ESSxjQUFjO1FBQ0wsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFFaEUsUUFBRyxHQUFHLEtBQUssQ0FBc0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFcEUsUUFBRyxHQUFHLEtBQUssQ0FBc0IsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFdEUsU0FBSSxHQUFHLEtBQUssQ0FBc0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFckUsMEJBQXFCLEdBQUcsS0FBSyxDQUFzQixDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUV0RixnQkFBVyxHQUFHLEtBQUssQ0FBNEIsWUFBWSxDQUFDLENBQUM7UUFFN0QsYUFBUSxHQUFHLEtBQUssQ0FBd0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUVoRixhQUFRLEdBQUcsS0FBSyxDQUF3QixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRWhGLFFBQUcsR0FBRyxLQUFLLENBQWdCLEtBQUssQ0FBQyxDQUFDO1FBRWxDLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBQzNDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUU1QyxlQUFVLEdBQUcsS0FBSyxDQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzQyxjQUFjO1FBQ0wsdUJBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLGNBQWM7UUFDTCwyQkFBc0IsR0FBRyxLQUFLLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFN0Msc0JBQWlCLEdBQUcsUUFBUSxDQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQ2hHLENBQUM7UUFFTyx3QkFBbUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUVoRSxjQUFjO1FBQ2Qsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO0tBb0ZyQztJQWxGRyxjQUFjO0lBQ2QsUUFBUTtRQUNKLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxZQUFZLENBQUM7UUFFekQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksRUFBRSxPQUFPO2dCQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUN0RCxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTTthQUN2RCxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLElBQUksRUFBRSxRQUFRO2dCQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUN4RCxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUTthQUN6RCxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxhQUFhO1FBQ1QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsY0FBYztJQUNkLGdCQUFnQixDQUFDLEtBQWE7UUFDMUIsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxjQUFjO0lBQ2QsZUFBZSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWM7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLFNBQVMsS0FBSyxTQUFTLENBQUM7UUFFM0MsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixDQUFDLEtBQWtEO1FBQ2hFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksR0FBRyxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxjQUFjO0lBQ2QsWUFBWSxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDdkQsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUN6RSxZQUFZLENBQ2YsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTVELE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFOUUsSUFBSSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuRixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBRXBFLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBRXZELElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7K0dBM0hRLHNCQUFzQjttR0FBdEIsc0JBQXNCLG8zREE5Q3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTRDVCw0REE3Q1MsNEJBQTRCLHdOQUFFLDBCQUEwQixzTkFBRSxJQUFJLDZGQUFFLGdCQUFnQjs7NEZBK0NqRixzQkFBc0I7a0JBbERsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDO29CQUMzRixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBNENUO2lCQUNKOzhCQXFCWSxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgSW5wdXQsXG4gICAgbW9kZWwsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhTbGlkZXJIb3Jpem9udGFsQ29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZXItaG9yaXpvbnRhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmR4U2xpZGVyT3JpZW50YXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4vc2xpZGVyLW9yaWVudGF0aW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBSZHhTbGlkZXJWZXJ0aWNhbENvbXBvbmVudCB9IGZyb20gJy4vc2xpZGVyLXZlcnRpY2FsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIGNsYW1wLFxuICAgIGdldENsb3Nlc3RWYWx1ZUluZGV4LFxuICAgIGdldERlY2ltYWxDb3VudCxcbiAgICBnZXROZXh0U29ydGVkVmFsdWVzLFxuICAgIGhhc01pblN0ZXBzQmV0d2VlblZhbHVlcyxcbiAgICByb3VuZFZhbHVlXG59IGZyb20gJy4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JkeC1zbGlkZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1JkeFNsaWRlckhvcml6b250YWxDb21wb25lbnQsIFJkeFNsaWRlclZlcnRpY2FsQ29tcG9uZW50LCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0XSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctdGVtcGxhdGUgI3RyYW5zY2x1ZGU+PG5nLWNvbnRlbnQgLz48L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCdcIj5cbiAgICAgICAgICAgIDxyZHgtc2xpZGVyLWhvcml6b250YWxcbiAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW4oKVwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXgoKVwiXG4gICAgICAgICAgICAgICAgW2Rpcl09XCJkaXIoKVwiXG4gICAgICAgICAgICAgICAgW2ludmVydGVkXT1cImludmVydGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1kaXNhYmxlZF09XCJkaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKClcIlxuICAgICAgICAgICAgICAgIChzbGlkZVN0YXJ0KT1cImhhbmRsZVNsaWRlU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlTW92ZSk9XCJoYW5kbGVTbGlkZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlRW5kKT1cImhhbmRsZVNsaWRlRW5kKClcIlxuICAgICAgICAgICAgICAgIChob21lS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWluKCksIDAsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoZW5kS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWF4KCksIG1vZGVsVmFsdWUoKS5sZW5ndGggLSAxLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKHN0ZXBLZXlEb3duKT1cImhhbmRsZVN0ZXBLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmFuc2NsdWRlXCIgLz5cbiAgICAgICAgICAgIDwvcmR4LXNsaWRlci1ob3Jpem9udGFsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1wiPlxuICAgICAgICAgICAgPHJkeC1zbGlkZXItdmVydGljYWxcbiAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW4oKVwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXgoKVwiXG4gICAgICAgICAgICAgICAgW2Rpcl09XCJkaXIoKVwiXG4gICAgICAgICAgICAgICAgW2ludmVydGVkXT1cImludmVydGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1kaXNhYmxlZF09XCJkaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKClcIlxuICAgICAgICAgICAgICAgIChzbGlkZVN0YXJ0KT1cImhhbmRsZVNsaWRlU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlTW92ZSk9XCJoYW5kbGVTbGlkZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlRW5kKT1cImhhbmRsZVNsaWRlRW5kKClcIlxuICAgICAgICAgICAgICAgIChob21lS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWluKCksIDAsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoZW5kS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWF4KCksIG1vZGVsVmFsdWUoKS5sZW5ndGggLSAxLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKHN0ZXBLZXlEb3duKT1cImhhbmRsZVN0ZXBLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmFuc2NsdWRlXCIgLz5cbiAgICAgICAgICAgIDwvcmR4LXNsaWRlci12ZXJ0aWNhbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBSZHhTbGlkZXJSb290Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IG9yaWVudGF0aW9uQ29udGV4dCA9IGluamVjdChSZHhTbGlkZXJPcmllbnRhdGlvbkNvbnRleHRTZXJ2aWNlKTtcblxuICAgIHJlYWRvbmx5IG1pbiA9IGlucHV0PG51bWJlciwgTnVtYmVySW5wdXQ+KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICByZWFkb25seSBtYXggPSBpbnB1dDxudW1iZXIsIE51bWJlcklucHV0PigxMDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICByZWFkb25seSBzdGVwID0gaW5wdXQ8bnVtYmVyLCBOdW1iZXJJbnB1dD4oMSwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcblxuICAgIHJlYWRvbmx5IG1pblN0ZXBzQmV0d2VlblRodW1icyA9IGlucHV0PG51bWJlciwgTnVtYmVySW5wdXQ+KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICByZWFkb25seSBvcmllbnRhdGlvbiA9IGlucHV0PCdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc+KCdob3Jpem9udGFsJyk7XG5cbiAgICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIEJvb2xlYW5JbnB1dD4oZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gICAgcmVhZG9ubHkgaW52ZXJ0ZWQgPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIHJlYWRvbmx5IGRpciA9IGlucHV0PCdsdHInIHwgJ3J0bCc+KCdsdHInKTtcblxuICAgIEBJbnB1dCgpIGNsYXNzTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNvbW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyW10+KCk7XG5cbiAgICByZWFkb25seSBtb2RlbFZhbHVlID0gbW9kZWw8bnVtYmVyW10+KFswXSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHZhbHVlSW5kZXhUb0NoYW5nZSA9IG1vZGVsKDApO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSB2YWx1ZXNCZWZvcmVTbGlkZVN0YXJ0ID0gbW9kZWw8bnVtYmVyW10+KFtdKTtcblxuICAgIHJlYWRvbmx5IGlzU2xpZGluZ0Zyb21MZWZ0ID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+ICh0aGlzLmRpcigpID09PSAnbHRyJyAmJiAhdGhpcy5pbnZlcnRlZCgpKSB8fCAodGhpcy5kaXIoKSAhPT0gJ2x0cicgJiYgdGhpcy5pbnZlcnRlZCgpKVxuICAgICk7XG5cbiAgICByZWFkb25seSBpc1NsaWRpbmdGcm9tQm90dG9tID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaW52ZXJ0ZWQoKSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHRodW1iRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb25Db250ZXh0LnVwZGF0ZUNvbnRleHQoe1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5pc1NsaWRpbmdGcm9tTGVmdCgpID8gMSA6IC0xLFxuICAgICAgICAgICAgICAgIHNpemU6ICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgc3RhcnRFZGdlOiB0aGlzLmlzU2xpZGluZ0Zyb21MZWZ0KCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgIGVuZEVkZ2U6IHRoaXMuaXNTbGlkaW5nRnJvbUxlZnQoKSA/ICdyaWdodCcgOiAnbGVmdCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNvbnRleHQudXBkYXRlQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmlzU2xpZGluZ0Zyb21Cb3R0b20oKSA/IC0xIDogMSxcbiAgICAgICAgICAgICAgICBzaXplOiAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICBzdGFydEVkZ2U6IHRoaXMuaXNTbGlkaW5nRnJvbUJvdHRvbSgpID8gJ2JvdHRvbScgOiAndG9wJyxcbiAgICAgICAgICAgICAgICBlbmRFZGdlOiB0aGlzLmlzU2xpZGluZ0Zyb21Cb3R0b20oKSA/ICd0b3AnIDogJ2JvdHRvbSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBvblBvaW50ZXJEb3duKCkge1xuICAgICAgICB0aGlzLnZhbHVlc0JlZm9yZVNsaWRlU3RhcnQuc2V0KFsuLi50aGlzLm1vZGVsVmFsdWUoKV0pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlU2xpZGVTdGFydCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJbmRleCA9IGdldENsb3Nlc3RWYWx1ZUluZGV4KHRoaXMubW9kZWxWYWx1ZSgpLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVzKHZhbHVlLCBjbG9zZXN0SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlU2xpZGVNb3ZlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZXModmFsdWUsIHRoaXMudmFsdWVJbmRleFRvQ2hhbmdlKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlU2xpZGVFbmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IHRoaXMudmFsdWVzQmVmb3JlU2xpZGVTdGFydCgpW3RoaXMudmFsdWVJbmRleFRvQ2hhbmdlKCldO1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLm1vZGVsVmFsdWUoKVt0aGlzLnZhbHVlSW5kZXhUb0NoYW5nZSgpXTtcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5leHRWYWx1ZSAhPT0gcHJldlZhbHVlO1xuXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29tbWl0LmVtaXQoWy4uLnRoaXMubW9kZWxWYWx1ZSgpXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGhhbmRsZVN0ZXBLZXlEb3duKGV2ZW50OiB7IGV2ZW50OiBLZXlib2FyZEV2ZW50OyBkaXJlY3Rpb246IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXBJbkRpcmVjdGlvbiA9IHRoaXMuc3RlcCgpICogZXZlbnQuZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBhdEluZGV4ID0gdGhpcy52YWx1ZUluZGV4VG9DaGFuZ2UoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5tb2RlbFZhbHVlKClbYXRJbmRleF07XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVzKGN1cnJlbnRWYWx1ZSArIHN0ZXBJbkRpcmVjdGlvbiwgYXRJbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICB1cGRhdGVWYWx1ZXModmFsdWU6IG51bWJlciwgYXRJbmRleDogbnVtYmVyLCBjb21taXQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZWNpbWFsQ291bnQgPSBnZXREZWNpbWFsQ291bnQodGhpcy5zdGVwKCkpO1xuICAgICAgICBjb25zdCBzbmFwVG9TdGVwID0gcm91bmRWYWx1ZShcbiAgICAgICAgICAgIE1hdGgucm91bmQoKHZhbHVlIC0gdGhpcy5taW4oKSkgLyB0aGlzLnN0ZXAoKSkgKiB0aGlzLnN0ZXAoKSArIHRoaXMubWluKCksXG4gICAgICAgICAgICBkZWNpbWFsQ291bnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gY2xhbXAoc25hcFRvU3RlcCwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XG5cbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IGdldE5leHRTb3J0ZWRWYWx1ZXModGhpcy5tb2RlbFZhbHVlKCksIG5leHRWYWx1ZSwgYXRJbmRleCk7XG5cbiAgICAgICAgaWYgKGhhc01pblN0ZXBzQmV0d2VlblZhbHVlcyhuZXh0VmFsdWVzLCB0aGlzLm1pblN0ZXBzQmV0d2VlblRodW1icygpICogdGhpcy5zdGVwKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlSW5kZXhUb0NoYW5nZS5zZXQobmV4dFZhbHVlcy5pbmRleE9mKG5leHRWYWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlZCA9IFN0cmluZyhuZXh0VmFsdWVzKSAhPT0gU3RyaW5nKHRoaXMubW9kZWxWYWx1ZSgpKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUuc2V0KG5leHRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChbLi4udGhpcy5tb2RlbFZhbHVlKCldKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRodW1iRWxlbWVudHNbdGhpcy52YWx1ZUluZGV4VG9DaGFuZ2UoKV0/LmZvY3VzKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDb21taXQuZW1pdChbLi4udGhpcy5tb2RlbFZhbHVlKCldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=