@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.
- package/checkbox/src/checkbox-input.directive.d.ts +2 -1
- package/compodoc/documentation.json +7419 -2200
- package/esm2022/accordion/index.mjs +4 -4
- package/esm2022/accordion/src/accordion-content.directive.mjs +3 -3
- package/esm2022/accordion/src/accordion-header.directive.mjs +3 -3
- package/esm2022/accordion/src/accordion-item.directive.mjs +3 -3
- package/esm2022/accordion/src/accordion-root.directive.mjs +3 -3
- package/esm2022/accordion/src/accordion-trigger.directive.mjs +3 -3
- package/esm2022/alert-dialog/index.mjs +4 -4
- package/esm2022/alert-dialog/src/alert-dialog-cancel.directive.mjs +3 -3
- package/esm2022/alert-dialog/src/alert-dialog-content.directive.mjs +3 -3
- package/esm2022/alert-dialog/src/alert-dialog-root.directive.mjs +3 -3
- package/esm2022/alert-dialog/src/alert-dialog-title.directive.mjs +3 -3
- package/esm2022/alert-dialog/src/alert-dialog-trigger.directive.mjs +3 -3
- package/esm2022/alert-dialog/src/alert-dialog.service.mjs +3 -3
- package/esm2022/aspect-ratio/src/aspect-ratio.directive.mjs +3 -3
- package/esm2022/avatar/src/avatar-fallback.directive.mjs +3 -3
- package/esm2022/avatar/src/avatar-image.directive.mjs +3 -3
- package/esm2022/avatar/src/avatar-root.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox-button.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox-indicator.directive.mjs +3 -3
- package/esm2022/checkbox/src/checkbox-input.directive.mjs +7 -4
- package/esm2022/checkbox/src/checkbox.directive.mjs +3 -3
- package/esm2022/collapsible/src/collapsible-content.directive.mjs +3 -3
- package/esm2022/collapsible/src/collapsible-root.directive.mjs +3 -3
- package/esm2022/collapsible/src/collapsible-trigger.directive.mjs +3 -3
- package/esm2022/context-menu/index.mjs +4 -4
- package/esm2022/context-menu/src/context-menu-content.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-item-checkbox.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-item-indicator.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-item-radio-group.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-item-radio.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-item-selectable.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-item.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-label.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-separator.directive.mjs +3 -3
- package/esm2022/context-menu/src/context-menu-trigger.directive.mjs +3 -3
- package/esm2022/core/src/auto-focus.directive.mjs +3 -3
- package/esm2022/dialog/index.mjs +4 -4
- package/esm2022/dialog/src/dialog-close.directive.mjs +3 -3
- package/esm2022/dialog/src/dialog-content.directive.mjs +3 -3
- package/esm2022/dialog/src/dialog-description.directive.mjs +3 -3
- package/esm2022/dialog/src/dialog-dismiss.directive.mjs +3 -3
- package/esm2022/dialog/src/dialog-title.directive.mjs +3 -3
- package/esm2022/dialog/src/dialog-trigger.directive.mjs +3 -3
- package/esm2022/dialog/src/dialog.service.mjs +3 -3
- package/esm2022/dropdown-menu/index.mjs +4 -4
- package/esm2022/dropdown-menu/src/dropdown-menu-content.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-item-checkbox.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-item-indicator.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-item-radio-group.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-item-radio.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-item-selectable.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-item.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-label.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-separator.directive.mjs +3 -3
- package/esm2022/dropdown-menu/src/dropdown-menu-trigger.directive.mjs +3 -3
- package/esm2022/label/src/label.directive.mjs +3 -3
- package/esm2022/menu/index.mjs +4 -4
- package/esm2022/menu/src/menu-content.directive.mjs +3 -3
- package/esm2022/menu/src/menu-directive.mjs +3 -3
- package/esm2022/menu/src/menu-group.directive.mjs +3 -3
- package/esm2022/menu/src/menu-item.directive.mjs +3 -3
- package/esm2022/menu/src/menu-label.directive.mjs +3 -3
- package/esm2022/menu/src/menu-separator.directive.mjs +3 -3
- package/esm2022/menubar/index.mjs +4 -4
- package/esm2022/menubar/src/menubar-content.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-item-checkbox.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-item-indicator.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-item-radio.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-item.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-radio-group.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-root.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-separator.directive.mjs +3 -3
- package/esm2022/menubar/src/menubar-trigger.directive.mjs +3 -3
- package/esm2022/progress/index.mjs +4 -4
- package/esm2022/progress/src/progress-indicator.directive.mjs +3 -3
- package/esm2022/progress/src/progress-root.directive.mjs +3 -3
- package/esm2022/radio/src/radio-indicator.directive.mjs +3 -3
- package/esm2022/radio/src/radio-item.directive.mjs +3 -3
- package/esm2022/radio/src/radio-root.directive.mjs +3 -3
- package/esm2022/select/index.mjs +65 -0
- package/esm2022/select/radix-ng-primitives-select.mjs +5 -0
- package/esm2022/select/src/select-content.directive.mjs +53 -0
- package/esm2022/select/src/select-group.directive.mjs +18 -0
- package/esm2022/select/src/select-icon.directive.mjs +18 -0
- package/esm2022/select/src/select-item-indicator.directive.mjs +23 -0
- package/esm2022/select/src/select-item.directive.mjs +116 -0
- package/esm2022/select/src/select-label.directive.mjs +15 -0
- package/esm2022/select/src/select-separator.directive.mjs +18 -0
- package/esm2022/select/src/select-trigger.directive.mjs +38 -0
- package/esm2022/select/src/select-value.directive.mjs +21 -0
- package/esm2022/select/src/select.component.mjs +234 -0
- package/esm2022/separator/src/separator.directive.mjs +3 -3
- package/esm2022/slider/index.mjs +28 -0
- package/esm2022/slider/radix-ng-primitives-slider.mjs +5 -0
- package/esm2022/slider/src/slider-horizontal.component.mjs +117 -0
- package/esm2022/slider/src/slider-impl.directive.mjs +89 -0
- package/esm2022/slider/src/slider-orientation-context.service.mjs +28 -0
- package/esm2022/slider/src/slider-range.component.mjs +41 -0
- package/esm2022/slider/src/slider-root.component.mjs +207 -0
- package/esm2022/slider/src/slider-thumb-impl.directive.mjs +102 -0
- package/esm2022/slider/src/slider-thumb.component.mjs +22 -0
- package/esm2022/slider/src/slider-track.component.mjs +27 -0
- package/esm2022/slider/src/slider-vertical.component.mjs +117 -0
- package/esm2022/slider/src/utils.mjs +94 -0
- package/esm2022/switch/index.mjs +4 -4
- package/esm2022/switch/src/switch-input.directive.mjs +3 -3
- package/esm2022/switch/src/switch-root.directive.mjs +3 -3
- package/esm2022/switch/src/switch-thumb.directive.mjs +3 -3
- package/esm2022/tabs/index.mjs +4 -4
- package/esm2022/tabs/src/tabs-content.directive.mjs +3 -3
- package/esm2022/tabs/src/tabs-context.service.mjs +3 -3
- package/esm2022/tabs/src/tabs-list.directive.mjs +3 -3
- package/esm2022/tabs/src/tabs-root.directive.mjs +3 -3
- package/esm2022/tabs/src/tabs-trigger.directive.mjs +3 -3
- package/esm2022/toggle/src/toggle-input.directive.mjs +3 -3
- package/esm2022/toggle/src/toggle.directive.mjs +3 -3
- package/esm2022/toggle-group/src/toggle-group-item.directive.mjs +3 -3
- package/esm2022/toggle-group/src/toggle-group-multiple.directive.mjs +3 -3
- package/esm2022/toggle-group/src/toggle-group.directive.mjs +3 -3
- package/esm2022/tooltip/index.mjs +41 -0
- package/esm2022/tooltip/radix-ng-primitives-tooltip.mjs +5 -0
- package/esm2022/tooltip/src/get-content-position.mjs +31 -0
- package/esm2022/tooltip/src/tooltip-arrow.directive.mjs +92 -0
- package/esm2022/tooltip/src/tooltip-arrow.token.mjs +3 -0
- package/esm2022/tooltip/src/tooltip-content-attributes.directive.mjs +24 -0
- package/esm2022/tooltip/src/tooltip-content.directive.mjs +48 -0
- package/esm2022/tooltip/src/tooltip-content.token.mjs +3 -0
- package/esm2022/tooltip/src/tooltip-root.directive.mjs +288 -0
- package/esm2022/tooltip/src/tooltip-trigger.directive.mjs +70 -0
- package/esm2022/tooltip/src/tooltip.config.mjs +18 -0
- package/esm2022/tooltip/src/tooltip.constants.mjs +84 -0
- package/esm2022/tooltip/src/tooltip.types.mjs +14 -0
- package/esm2022/visually-hidden/src/visually-hidden-input-bubble.directive.mjs +3 -3
- package/esm2022/visually-hidden/src/visually-hidden-input.directive.mjs +3 -3
- package/esm2022/visually-hidden/src/visually-hidden.directive.mjs +3 -3
- package/fesm2022/radix-ng-primitives-accordion.mjs +19 -19
- package/fesm2022/radix-ng-primitives-alert-dialog.mjs +22 -22
- package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +3 -3
- package/fesm2022/radix-ng-primitives-avatar.mjs +9 -9
- package/fesm2022/radix-ng-primitives-checkbox.mjs +15 -12
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +9 -9
- package/fesm2022/radix-ng-primitives-context-menu.mjs +34 -34
- package/fesm2022/radix-ng-primitives-core.mjs +3 -3
- package/fesm2022/radix-ng-primitives-dialog.mjs +25 -25
- package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +34 -34
- package/fesm2022/radix-ng-primitives-label.mjs +3 -3
- package/fesm2022/radix-ng-primitives-menu.mjs +22 -22
- package/fesm2022/radix-ng-primitives-menubar.mjs +31 -31
- package/fesm2022/radix-ng-primitives-progress.mjs +10 -10
- package/fesm2022/radix-ng-primitives-radio.mjs +9 -9
- package/fesm2022/radix-ng-primitives-select.mjs +572 -0
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-separator.mjs +3 -3
- package/fesm2022/radix-ng-primitives-slider.mjs +830 -0
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-switch.mjs +13 -13
- package/fesm2022/radix-ng-primitives-tabs.mjs +19 -19
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +9 -9
- package/fesm2022/radix-ng-primitives-toggle.mjs +6 -6
- package/fesm2022/radix-ng-primitives-tooltip.mjs +684 -0
- package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-visually-hidden.mjs +9 -9
- package/package.json +19 -1
- package/select/README.md +1 -0
- package/select/index.d.ts +26 -0
- package/select/src/select-content.directive.d.ts +20 -0
- package/select/src/select-group.directive.d.ts +5 -0
- package/select/src/select-icon.directive.d.ts +5 -0
- package/select/src/select-item-indicator.directive.d.ts +7 -0
- package/select/src/select-item.directive.d.ts +47 -0
- package/select/src/select-label.directive.d.ts +5 -0
- package/select/src/select-separator.directive.d.ts +5 -0
- package/select/src/select-trigger.directive.d.ts +11 -0
- package/select/src/select-value.directive.d.ts +8 -0
- package/select/src/select.component.d.ts +81 -0
- package/slider/README.md +1 -0
- package/slider/index.d.ts +18 -0
- package/slider/src/slider-horizontal.component.d.ts +29 -0
- package/slider/src/slider-impl.directive.d.ts +18 -0
- package/slider/src/slider-orientation-context.service.d.ts +14 -0
- package/slider/src/slider-range.component.d.ts +13 -0
- package/slider/src/slider-root.component.d.ts +47 -0
- package/slider/src/slider-thumb-impl.directive.d.ts +26 -0
- package/slider/src/slider-thumb.component.d.ts +6 -0
- package/slider/src/slider-track.component.d.ts +7 -0
- package/slider/src/slider-vertical.component.d.ts +29 -0
- package/slider/src/utils.d.ts +52 -0
- package/tooltip/README.md +1 -0
- package/tooltip/index.d.ts +17 -0
- package/tooltip/src/get-content-position.d.ts +3 -0
- package/tooltip/src/tooltip-arrow.directive.d.ts +25 -0
- package/tooltip/src/tooltip-arrow.token.d.ts +3 -0
- package/tooltip/src/tooltip-content-attributes.directive.d.ts +8 -0
- package/tooltip/src/tooltip-content.directive.d.ts +36 -0
- package/tooltip/src/tooltip-content.token.d.ts +3 -0
- package/tooltip/src/tooltip-root.directive.d.ts +103 -0
- package/tooltip/src/tooltip-trigger.directive.d.ts +26 -0
- package/tooltip/src/tooltip.config.d.ts +6 -0
- package/tooltip/src/tooltip.constants.d.ts +9 -0
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXJvb3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zbGlkZXIvc3JjL3NsaWRlci1yb290LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUNILGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxLQUFLLEVBQ0wsZUFBZSxFQUVmLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RSxPQUFPLEVBQ0gsS0FBSyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4QixVQUFVLEVBQ2IsTUFBTSxTQUFTLENBQUM7O0FBb0RqQixNQUFNLE9BQU8sc0JBQXNCO0lBbERuQztRQW1ESSxjQUFjO1FBQ0wsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFFaEUsUUFBRyxHQUFHLEtBQUssQ0FBc0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFcEUsUUFBRyxHQUFHLEtBQUssQ0FBc0IsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFdEUsU0FBSSxHQUFHLEtBQUssQ0FBc0IsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFF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QUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBRXZELElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7K0dBM0hRLHNCQUFzQjttR0FBdEIsc0JBQXNCLG8zREE5Q3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTRDVCw0REE3Q1MsNEJBQTRCLHdOQUFFLDBCQUEwQixzTkFBRSxJQUFJLDZGQUFFLGdCQUFnQjs7NEZBK0NqRixzQkFBc0I7a0JBbERsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsMEJBQTBCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDO29CQUMzRixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBNENUO2lCQUNKOzhCQXFCWSxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgSW5wdXQsXG4gICAgbW9kZWwsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhTbGlkZXJIb3Jpem9udGFsQ29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZXItaG9yaXpvbnRhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmR4U2xpZGVyT3JpZW50YXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4vc2xpZGVyLW9yaWVudGF0aW9uLWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBSZHhTbGlkZXJWZXJ0aWNhbENvbXBvbmVudCB9IGZyb20gJy4vc2xpZGVyLXZlcnRpY2FsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIGNsYW1wLFxuICAgIGdldENsb3Nlc3RWYWx1ZUluZGV4LFxuICAgIGdldERlY2ltYWxDb3VudCxcbiAgICBnZXROZXh0U29ydGVkVmFsdWVzLFxuICAgIGhhc01pblN0ZXBzQmV0d2VlblZhbHVlcyxcbiAgICByb3VuZFZhbHVlXG59IGZyb20gJy4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JkeC1zbGlkZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1JkeFNsaWRlckhvcml6b250YWxDb21wb25lbnQsIFJkeFNsaWRlclZlcnRpY2FsQ29tcG9uZW50LCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0XSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctdGVtcGxhdGUgI3RyYW5zY2x1ZGU+PG5nLWNvbnRlbnQgLz48L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcmllbnRhdGlvbigpID09PSAnaG9yaXpvbnRhbCdcIj5cbiAgICAgICAgICAgIDxyZHgtc2xpZGVyLWhvcml6b250YWxcbiAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW4oKVwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXgoKVwiXG4gICAgICAgICAgICAgICAgW2Rpcl09XCJkaXIoKVwiXG4gICAgICAgICAgICAgICAgW2ludmVydGVkXT1cImludmVydGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1kaXNhYmxlZF09XCJkaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKClcIlxuICAgICAgICAgICAgICAgIChzbGlkZVN0YXJ0KT1cImhhbmRsZVNsaWRlU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlTW92ZSk9XCJoYW5kbGVTbGlkZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlRW5kKT1cImhhbmRsZVNsaWRlRW5kKClcIlxuICAgICAgICAgICAgICAgIChob21lS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWluKCksIDAsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoZW5kS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWF4KCksIG1vZGVsVmFsdWUoKS5sZW5ndGggLSAxLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKHN0ZXBLZXlEb3duKT1cImhhbmRsZVN0ZXBLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmFuc2NsdWRlXCIgLz5cbiAgICAgICAgICAgIDwvcmR4LXNsaWRlci1ob3Jpem9udGFsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3JpZW50YXRpb24oKSA9PT0gJ3ZlcnRpY2FsJ1wiPlxuICAgICAgICAgICAgPHJkeC1zbGlkZXItdmVydGljYWxcbiAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW4oKVwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXgoKVwiXG4gICAgICAgICAgICAgICAgW2Rpcl09XCJkaXIoKVwiXG4gICAgICAgICAgICAgICAgW2ludmVydGVkXT1cImludmVydGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1kaXNhYmxlZF09XCJkaXNhYmxlZCgpID8gJycgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJvblBvaW50ZXJEb3duKClcIlxuICAgICAgICAgICAgICAgIChzbGlkZVN0YXJ0KT1cImhhbmRsZVNsaWRlU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlTW92ZSk9XCJoYW5kbGVTbGlkZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNsaWRlRW5kKT1cImhhbmRsZVNsaWRlRW5kKClcIlxuICAgICAgICAgICAgICAgIChob21lS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWluKCksIDAsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAoZW5kS2V5RG93bik9XCJ1cGRhdGVWYWx1ZXMobWF4KCksIG1vZGVsVmFsdWUoKS5sZW5ndGggLSAxLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgKHN0ZXBLZXlEb3duKT1cImhhbmRsZVN0ZXBLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0cmFuc2NsdWRlXCIgLz5cbiAgICAgICAgICAgIDwvcmR4LXNsaWRlci12ZXJ0aWNhbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBSZHhTbGlkZXJSb290Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IG9yaWVudGF0aW9uQ29udGV4dCA9IGluamVjdChSZHhTbGlkZXJPcmllbnRhdGlvbkNvbnRleHRTZXJ2aWNlKTtcblxuICAgIHJlYWRvbmx5IG1pbiA9IGlucHV0PG51bWJlciwgTnVtYmVySW5wdXQ+KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICByZWFkb25seSBtYXggPSBpbnB1dDxudW1iZXIsIE51bWJlcklucHV0PigxMDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICByZWFkb25seSBzdGVwID0gaW5wdXQ8bnVtYmVyLCBOdW1iZXJJbnB1dD4oMSwgeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KTtcblxuICAgIHJlYWRvbmx5IG1pblN0ZXBzQmV0d2VlblRodW1icyA9IGlucHV0PG51bWJlciwgTnVtYmVySW5wdXQ+KDAsIHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSk7XG5cbiAgICByZWFkb25seSBvcmllbnRhdGlvbiA9IGlucHV0PCdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCc+KCdob3Jpem9udGFsJyk7XG5cbiAgICByZWFkb25seSBkaXNhYmxlZCA9IGlucHV0PGJvb2xlYW4sIEJvb2xlYW5JbnB1dD4oZmFsc2UsIHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pO1xuXG4gICAgcmVhZG9ubHkgaW52ZXJ0ZWQgPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIHJlYWRvbmx5IGRpciA9IGlucHV0PCdsdHInIHwgJ3J0bCc+KCdsdHInKTtcblxuICAgIEBJbnB1dCgpIGNsYXNzTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcltdPigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNvbW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyW10+KCk7XG5cbiAgICByZWFkb25seSBtb2RlbFZhbHVlID0gbW9kZWw8bnVtYmVyW10+KFswXSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHJlYWRvbmx5IHZhbHVlSW5kZXhUb0NoYW5nZSA9IG1vZGVsKDApO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSB2YWx1ZXNCZWZvcmVTbGlkZVN0YXJ0ID0gbW9kZWw8bnVtYmVyW10+KFtdKTtcblxuICAgIHJlYWRvbmx5IGlzU2xpZGluZ0Zyb21MZWZ0ID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+ICh0aGlzLmRpcigpID09PSAnbHRyJyAmJiAhdGhpcy5pbnZlcnRlZCgpKSB8fCAodGhpcy5kaXIoKSAhPT0gJ2x0cicgJiYgdGhpcy5pbnZlcnRlZCgpKVxuICAgICk7XG5cbiAgICByZWFkb25seSBpc1NsaWRpbmdGcm9tQm90dG9tID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaW52ZXJ0ZWQoKSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHRodW1iRWxlbWVudHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZW50YXRpb25Db250ZXh0LnVwZGF0ZUNvbnRleHQoe1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5pc1NsaWRpbmdGcm9tTGVmdCgpID8gMSA6IC0xLFxuICAgICAgICAgICAgICAgIHNpemU6ICd3aWR0aCcsXG4gICAgICAgICAgICAgICAgc3RhcnRFZGdlOiB0aGlzLmlzU2xpZGluZ0Zyb21MZWZ0KCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICAgICAgICAgICAgICAgIGVuZEVkZ2U6IHRoaXMuaXNTbGlkaW5nRnJvbUxlZnQoKSA/ICdyaWdodCcgOiAnbGVmdCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvbkNvbnRleHQudXBkYXRlQ29udGV4dCh7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmlzU2xpZGluZ0Zyb21Cb3R0b20oKSA/IC0xIDogMSxcbiAgICAgICAgICAgICAgICBzaXplOiAnaGVpZ2h0JyxcbiAgICAgICAgICAgICAgICBzdGFydEVkZ2U6IHRoaXMuaXNTbGlkaW5nRnJvbUJvdHRvbSgpID8gJ2JvdHRvbScgOiAndG9wJyxcbiAgICAgICAgICAgICAgICBlbmRFZGdlOiB0aGlzLmlzU2xpZGluZ0Zyb21Cb3R0b20oKSA/ICd0b3AnIDogJ2JvdHRvbSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBvblBvaW50ZXJEb3duKCkge1xuICAgICAgICB0aGlzLnZhbHVlc0JlZm9yZVNsaWRlU3RhcnQuc2V0KFsuLi50aGlzLm1vZGVsVmFsdWUoKV0pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlU2xpZGVTdGFydCh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJbmRleCA9IGdldENsb3Nlc3RWYWx1ZUluZGV4KHRoaXMubW9kZWxWYWx1ZSgpLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVzKHZhbHVlLCBjbG9zZXN0SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlU2xpZGVNb3ZlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZXModmFsdWUsIHRoaXMudmFsdWVJbmRleFRvQ2hhbmdlKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgaGFuZGxlU2xpZGVFbmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZWYWx1ZSA9IHRoaXMudmFsdWVzQmVmb3JlU2xpZGVTdGFydCgpW3RoaXMudmFsdWVJbmRleFRvQ2hhbmdlKCldO1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLm1vZGVsVmFsdWUoKVt0aGlzLnZhbHVlSW5kZXhUb0NoYW5nZSgpXTtcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5leHRWYWx1ZSAhPT0gcHJldlZhbHVlO1xuXG4gICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ29tbWl0LmVtaXQoWy4uLnRoaXMubW9kZWxWYWx1ZSgpXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGhhbmRsZVN0ZXBLZXlEb3duKGV2ZW50OiB7IGV2ZW50OiBLZXlib2FyZEV2ZW50OyBkaXJlY3Rpb246IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXBJbkRpcmVjdGlvbiA9IHRoaXMuc3RlcCgpICogZXZlbnQuZGlyZWN0aW9uO1xuICAgICAgICBjb25zdCBhdEluZGV4ID0gdGhpcy52YWx1ZUluZGV4VG9DaGFuZ2UoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5tb2RlbFZhbHVlKClbYXRJbmRleF07XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVzKGN1cnJlbnRWYWx1ZSArIHN0ZXBJbkRpcmVjdGlvbiwgYXRJbmRleCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICB1cGRhdGVWYWx1ZXModmFsdWU6IG51bWJlciwgYXRJbmRleDogbnVtYmVyLCBjb21taXQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBkZWNpbWFsQ291bnQgPSBnZXREZWNpbWFsQ291bnQodGhpcy5zdGVwKCkpO1xuICAgICAgICBjb25zdCBzbmFwVG9TdGVwID0gcm91bmRWYWx1ZShcbiAgICAgICAgICAgIE1hdGgucm91bmQoKHZhbHVlIC0gdGhpcy5taW4oKSkgLyB0aGlzLnN0ZXAoKSkgKiB0aGlzLnN0ZXAoKSArIHRoaXMubWluKCksXG4gICAgICAgICAgICBkZWNpbWFsQ291bnRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gY2xhbXAoc25hcFRvU3RlcCwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XG5cbiAgICAgICAgY29uc3QgbmV4dFZhbHVlcyA9IGdldE5leHRTb3J0ZWRWYWx1ZXModGhpcy5tb2RlbFZhbHVlKCksIG5leHRWYWx1ZSwgYXRJbmRleCk7XG5cbiAgICAgICAgaWYgKGhhc01pblN0ZXBzQmV0d2VlblZhbHVlcyhuZXh0VmFsdWVzLCB0aGlzLm1pblN0ZXBzQmV0d2VlblRodW1icygpICogdGhpcy5zdGVwKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlSW5kZXhUb0NoYW5nZS5zZXQobmV4dFZhbHVlcy5pbmRleE9mKG5leHRWYWx1ZSkpO1xuICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlZCA9IFN0cmluZyhuZXh0VmFsdWVzKSAhPT0gU3RyaW5nKHRoaXMubW9kZWxWYWx1ZSgpKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUuc2V0KG5leHRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChbLi4udGhpcy5tb2RlbFZhbHVlKCldKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRodW1iRWxlbWVudHNbdGhpcy52YWx1ZUluZGV4VG9DaGFuZ2UoKV0/LmZvY3VzKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDb21taXQuZW1pdChbLi4udGhpcy5tb2RlbFZhbHVlKCldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|