@radix-ng/primitives 0.17.0 → 0.18.1

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 (61) hide show
  1. package/compodoc/documentation.json +5304 -1427
  2. package/esm2022/select/src/select-trigger.directive.mjs +3 -3
  3. package/esm2022/select/src/select-value.directive.mjs +4 -9
  4. package/esm2022/select/src/select.component.mjs +6 -5
  5. package/esm2022/slider/index.mjs +28 -0
  6. package/esm2022/slider/radix-ng-primitives-slider.mjs +5 -0
  7. package/esm2022/slider/src/slider-horizontal.component.mjs +117 -0
  8. package/esm2022/slider/src/slider-impl.directive.mjs +89 -0
  9. package/esm2022/slider/src/slider-orientation-context.service.mjs +28 -0
  10. package/esm2022/slider/src/slider-range.component.mjs +41 -0
  11. package/esm2022/slider/src/slider-root.component.mjs +207 -0
  12. package/esm2022/slider/src/slider-thumb-impl.directive.mjs +106 -0
  13. package/esm2022/slider/src/slider-thumb.component.mjs +22 -0
  14. package/esm2022/slider/src/slider-track.component.mjs +27 -0
  15. package/esm2022/slider/src/slider-vertical.component.mjs +117 -0
  16. package/esm2022/slider/src/utils.mjs +94 -0
  17. package/esm2022/tooltip/index.mjs +41 -0
  18. package/esm2022/tooltip/radix-ng-primitives-tooltip.mjs +5 -0
  19. package/esm2022/tooltip/src/get-content-position.mjs +31 -0
  20. package/esm2022/tooltip/src/tooltip-arrow.directive.mjs +92 -0
  21. package/esm2022/tooltip/src/tooltip-arrow.token.mjs +3 -0
  22. package/esm2022/tooltip/src/tooltip-content-attributes.directive.mjs +24 -0
  23. package/esm2022/tooltip/src/tooltip-content.directive.mjs +48 -0
  24. package/esm2022/tooltip/src/tooltip-content.token.mjs +3 -0
  25. package/esm2022/tooltip/src/tooltip-root.directive.mjs +288 -0
  26. package/esm2022/tooltip/src/tooltip-trigger.directive.mjs +70 -0
  27. package/esm2022/tooltip/src/tooltip.config.mjs +18 -0
  28. package/esm2022/tooltip/src/tooltip.constants.mjs +84 -0
  29. package/esm2022/tooltip/src/tooltip.types.mjs +14 -0
  30. package/fesm2022/radix-ng-primitives-select.mjs +10 -14
  31. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-slider.mjs +833 -0
  33. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -0
  34. package/fesm2022/radix-ng-primitives-tooltip.mjs +684 -0
  35. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -0
  36. package/package.json +13 -1
  37. package/slider/README.md +1 -0
  38. package/slider/index.d.ts +18 -0
  39. package/slider/src/slider-horizontal.component.d.ts +29 -0
  40. package/slider/src/slider-impl.directive.d.ts +18 -0
  41. package/slider/src/slider-orientation-context.service.d.ts +14 -0
  42. package/slider/src/slider-range.component.d.ts +13 -0
  43. package/slider/src/slider-root.component.d.ts +47 -0
  44. package/slider/src/slider-thumb-impl.directive.d.ts +27 -0
  45. package/slider/src/slider-thumb.component.d.ts +6 -0
  46. package/slider/src/slider-track.component.d.ts +7 -0
  47. package/slider/src/slider-vertical.component.d.ts +29 -0
  48. package/slider/src/utils.d.ts +52 -0
  49. package/tooltip/README.md +1 -0
  50. package/tooltip/index.d.ts +17 -0
  51. package/tooltip/src/get-content-position.d.ts +3 -0
  52. package/tooltip/src/tooltip-arrow.directive.d.ts +25 -0
  53. package/tooltip/src/tooltip-arrow.token.d.ts +3 -0
  54. package/tooltip/src/tooltip-content-attributes.directive.d.ts +8 -0
  55. package/tooltip/src/tooltip-content.directive.d.ts +36 -0
  56. package/tooltip/src/tooltip-content.token.d.ts +3 -0
  57. package/tooltip/src/tooltip-root.directive.d.ts +103 -0
  58. package/tooltip/src/tooltip-trigger.directive.d.ts +26 -0
  59. package/tooltip/src/tooltip.config.d.ts +6 -0
  60. package/tooltip/src/tooltip.constants.d.ts +9 -0
  61. package/tooltip/src/tooltip.types.d.ts +18 -0
@@ -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=
@@ -0,0 +1,106 @@
1
+ import { isPlatformBrowser } from '@angular/common';
2
+ import { computed, Directive, ElementRef, inject, PLATFORM_ID, signal } from '@angular/core';
3
+ import { RdxSliderRootComponent } from './slider-root.component';
4
+ import { convertValueToPercentage, getThumbInBoundsOffset } from './utils';
5
+ import * as i0 from "@angular/core";
6
+ export class RdxSliderThumbImplDirective {
7
+ constructor() {
8
+ this.rootContext = inject(RdxSliderRootComponent);
9
+ this.elementRef = inject(ElementRef);
10
+ this.platformId = inject(PLATFORM_ID);
11
+ this.isMounted = signal(false);
12
+ this.thumbIndex = computed(() => {
13
+ const thumbElement = this.elementRef.nativeElement;
14
+ const index = this.rootContext.thumbElements.indexOf(thumbElement);
15
+ return index >= 0 ? index : null;
16
+ });
17
+ this.value = computed(() => {
18
+ const index = this.thumbIndex();
19
+ if (index === null)
20
+ return undefined;
21
+ return this.rootContext.modelValue()?.[index];
22
+ });
23
+ this.percent = computed(() => {
24
+ const val = this.value();
25
+ if (val === undefined)
26
+ return 0;
27
+ return convertValueToPercentage(val, this.rootContext.min(), this.rootContext.max());
28
+ });
29
+ this.transform = computed(() => {
30
+ const percent = this.percent();
31
+ const offset = this.thumbInBoundsOffset();
32
+ return `calc(${percent}% + ${offset}px)`;
33
+ });
34
+ this.orientationSize = signal(0);
35
+ this.thumbInBoundsOffset = computed(() => {
36
+ const context = this.rootContext.orientationContext.context;
37
+ const size = this.orientationSize();
38
+ const percent = this.percent();
39
+ const direction = context.direction;
40
+ return size ? getThumbInBoundsOffset(size, percent, direction) : 0;
41
+ });
42
+ this.combinedStyles = computed(() => {
43
+ const context = this.rootContext.orientationContext.context;
44
+ const startEdge = context.startEdge;
45
+ const percent = this.percent();
46
+ const offset = this.thumbInBoundsOffset();
47
+ return {
48
+ position: 'absolute',
49
+ transform: 'var(--rdx-slider-thumb-transform)',
50
+ display: (this.isMounted() && this.value()) === false ? 'none' : undefined,
51
+ [startEdge]: `calc(${percent}% + ${offset}px)`
52
+ };
53
+ });
54
+ }
55
+ onFocus() {
56
+ if (this.thumbIndex() !== null) {
57
+ this.rootContext.valueIndexToChange.set(this.thumbIndex());
58
+ }
59
+ }
60
+ ngOnInit() {
61
+ if (isPlatformBrowser(this.platformId)) {
62
+ const thumbElement = this.elementRef.nativeElement;
63
+ this.rootContext.thumbElements.push(thumbElement);
64
+ this.resizeObserver = new ResizeObserver(() => {
65
+ const rect = thumbElement.getBoundingClientRect();
66
+ const context = this.rootContext.orientationContext.context;
67
+ const size = context.size === 'width' ? rect.width : rect.height;
68
+ this.orientationSize.set(size);
69
+ });
70
+ this.resizeObserver.observe(thumbElement);
71
+ this.isMounted.set(true);
72
+ }
73
+ }
74
+ ngOnDestroy() {
75
+ const thumbElement = this.elementRef.nativeElement;
76
+ const index = this.rootContext.thumbElements.indexOf(thumbElement);
77
+ if (index >= 0)
78
+ this.rootContext.thumbElements.splice(index, 1);
79
+ if (this.resizeObserver) {
80
+ this.resizeObserver.unobserve(thumbElement);
81
+ }
82
+ this.isMounted.set(false);
83
+ }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderThumbImplDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
85
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.11", type: RdxSliderThumbImplDirective, isStandalone: true, selector: "[rdxSliderThumbImpl]", host: { attributes: { "role": "slider" }, listeners: { "focus": "onFocus()" }, properties: { "tabindex": "rootContext.disabled() ? undefined : 0", "attr.aria-valuenow": "rootContext.modelValue()", "attr.aria-valuemin": "rootContext.min()", "attr.aria-valuemax": "rootContext.max()", "attr.aria-orientation": "rootContext.orientation()", "attr.data-orientation": "rootContext.orientation()", "attr.data-disabled": "rootContext.disabled() ? \"\" : undefined", "style": "combinedStyles()" } }, ngImport: i0 }); }
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderThumbImplDirective, decorators: [{
88
+ type: Directive,
89
+ args: [{
90
+ selector: '[rdxSliderThumbImpl]',
91
+ standalone: true,
92
+ host: {
93
+ role: 'slider',
94
+ '[tabindex]': 'rootContext.disabled() ? undefined : 0',
95
+ '[attr.aria-valuenow]': 'rootContext.modelValue()',
96
+ '[attr.aria-valuemin]': 'rootContext.min()',
97
+ '[attr.aria-valuemax]': 'rootContext.max()',
98
+ '[attr.aria-orientation]': 'rootContext.orientation()',
99
+ '[attr.data-orientation]': 'rootContext.orientation()',
100
+ '[attr.data-disabled]': 'rootContext.disabled() ? "" : undefined',
101
+ '[style]': 'combinedStyles()',
102
+ '(focus)': 'onFocus()'
103
+ }
104
+ }]
105
+ }] });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXRodW1iLWltcGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zbGlkZXIvc3JjL3NsaWRlci10aHVtYi1pbXBsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFzQjNFLE1BQU0sT0FBTywyQkFBMkI7SUFwQnhDO1FBcUJ1QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQy9DLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUdsRCxjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRSxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBSyxHQUFHLFFBQVEsQ0FBQyxH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QyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDOytHQTdGUSwyQkFBMkI7bUdBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFwQnZDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsUUFBUTt3QkFDZCxZQUFZLEVBQUUsd0NBQXdDO3dCQUV0RCxzQkFBc0IsRUFBRSwwQkFBMEI7d0JBQ2xELHNCQUFzQixFQUFFLG1CQUFtQjt3QkFDM0Msc0JBQXNCLEVBQUUsbUJBQW1CO3dCQUMzQyx5QkFBeUIsRUFBRSwyQkFBMkI7d0JBRXRELHlCQUF5QixFQUFFLDJCQUEyQjt3QkFDdEQsc0JBQXNCLEVBQUUseUNBQXlDO3dCQUVqRSxTQUFTLEVBQUUsa0JBQWtCO3dCQUU3QixTQUFTLEVBQUUsV0FBVztxQkFDekI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb21wdXRlZCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBQTEFURk9STV9JRCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZHhTbGlkZXJSb290Q29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZXItcm9vdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY29udmVydFZhbHVlVG9QZXJjZW50YWdlLCBnZXRUaHVtYkluQm91bmRzT2Zmc2V0IH0gZnJvbSAnLi91dGlscyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3JkeFNsaWRlclRodW1iSW1wbF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdDoge1xuICAgICAgICByb2xlOiAnc2xpZGVyJyxcbiAgICAgICAgJ1t0YWJpbmRleF0nOiAncm9vdENvbnRleHQuZGlzYWJsZWQoKSA/IHVuZGVmaW5lZCA6IDAnLFxuXG4gICAgICAgICdbYXR0ci5hcmlhLXZhbHVlbm93XSc6ICdyb290Q29udGV4dC5tb2RlbFZhbHVlKCknLFxuICAgICAgICAnW2F0dHIuYXJpYS12YWx1ZW1pbl0nOiAncm9vdENvbnRleHQubWluKCknLFxuICAgICAgICAnW2F0dHIuYXJpYS12YWx1ZW1heF0nOiAncm9vdENvbnRleHQubWF4KCknLFxuICAgICAgICAnW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0nOiAncm9vdENvbnRleHQub3JpZW50YXRpb24oKScsXG5cbiAgICAgICAgJ1thdHRyLmRhdGEtb3JpZW50YXRpb25dJzogJ3Jvb3RDb250ZXh0Lm9yaWVudGF0aW9uKCknLFxuICAgICAgICAnW2F0dHIuZGF0YS1kaXNhYmxlZF0nOiAncm9vdENvbnRleHQuZGlzYWJsZWQoKSA/IFwiXCIgOiB1bmRlZmluZWQnLFxuXG4gICAgICAgICdbc3R5bGVdJzogJ2NvbWJpbmVkU3R5bGVzKCknLFxuXG4gICAgICAgICcoZm9jdXMpJzogJ29uRm9jdXMoKSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIFJkeFNsaWRlclRodW1iSW1wbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm9vdENvbnRleHQgPSBpbmplY3QoUmR4U2xpZGVyUm9vdENvbXBvbmVudCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xuXG4gICAgaXNNb3VudGVkID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIHRodW1iSW5kZXggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRodW1iRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucm9vdENvbnRleHQudGh1bWJFbGVtZW50cy5pbmRleE9mKHRodW1iRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBpbmRleCA+PSAwID8gaW5kZXggOiBudWxsO1xuICAgIH0pO1xuXG4gICAgdmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50aHVtYkluZGV4KCk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdENvbnRleHQubW9kZWxWYWx1ZSgpPy5baW5kZXhdO1xuICAgIH0pO1xuXG4gICAgcGVyY2VudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICAgICAgICByZXR1cm4gY29udmVydFZhbHVlVG9QZXJjZW50YWdlKHZhbCwgdGhpcy5yb290Q29udGV4dC5taW4oKSwgdGhpcy5yb290Q29udGV4dC5tYXgoKSk7XG4gICAgfSk7XG5cbiAgICB0cmFuc2Zvcm0gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSB0aGlzLnBlcmNlbnQoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy50aHVtYkluQm91bmRzT2Zmc2V0KCk7XG4gICAgICAgIHJldHVybiBgY2FsYygke3BlcmNlbnR9JSArICR7b2Zmc2V0fXB4KWA7XG4gICAgfSk7XG5cbiAgICBvcmllbnRhdGlvblNpemUgPSBzaWduYWwoMCk7XG5cbiAgICB0aHVtYkluQm91bmRzT2Zmc2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5yb290Q29udGV4dC5vcmllbnRhdGlvbkNvbnRleHQuY29udGV4dDtcblxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5vcmllbnRhdGlvblNpemUoKTtcbiAgICAgICAgY29uc3QgcGVyY2VudCA9IHRoaXMucGVyY2VudCgpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBjb250ZXh0LmRpcmVjdGlvbjtcblxuICAgICAgICByZXR1cm4gc2l6ZSA/IGdldFRodW1iSW5Cb3VuZHNPZmZzZXQoc2l6ZSwgcGVyY2VudCwgZGlyZWN0aW9uKSA6IDA7XG4gICAgfSk7XG5cbiAgICBjb21iaW5lZFN0eWxlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucm9vdENvbnRleHQub3JpZW50YXRpb25Db250ZXh0LmNvbnRleHQ7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRFZGdlID0gY29udGV4dC5zdGFydEVkZ2U7XG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSB0aGlzLnBlcmNlbnQoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy50aHVtYkluQm91bmRzT2Zmc2V0KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiAndmFyKC0tcmR4LXNsaWRlci10aHVtYi10cmFuc2Zvcm0pJyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICh0aGlzLmlzTW91bnRlZCgpICYmIHRoaXMudmFsdWUoKSkgPT09IGZhbHNlID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgW3N0YXJ0RWRnZV06IGBjYWxjKCR7cGVyY2VudH0lICsgJHtvZmZzZXR9cHgpYFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMudGh1bWJJbmRleCgpICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnZhbHVlSW5kZXhUb0NoYW5nZS5zZXQodGhpcy50aHVtYkluZGV4KCkhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgY29uc3QgdGh1bWJFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0LnRodW1iRWxlbWVudHMucHVzaCh0aHVtYkVsZW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGh1bWJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnJvb3RDb250ZXh0Lm9yaWVudGF0aW9uQ29udGV4dC5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemUgPSBjb250ZXh0LnNpemUgPT09ICd3aWR0aCcgPyByZWN0LndpZHRoIDogcmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5vcmllbnRhdGlvblNpemUuc2V0KHNpemUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aHVtYkVsZW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLmlzTW91bnRlZC5zZXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgY29uc3QgdGh1bWJFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yb290Q29udGV4dC50aHVtYkVsZW1lbnRzLmluZGV4T2YodGh1bWJFbGVtZW50KTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHRoaXMucm9vdENvbnRleHQudGh1bWJFbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aHVtYkVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc01vdW50ZWQuc2V0KGZhbHNlKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ import { Component } from '@angular/core';
2
+ import { RdxSliderThumbImplDirective } from './slider-thumb-impl.directive';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./slider-thumb-impl.directive";
5
+ export class RdxSliderThumbComponent {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderThumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: RdxSliderThumbComponent, isStandalone: true, selector: "rdx-slider-thumb", hostDirectives: [{ directive: i1.RdxSliderThumbImplDirective }], ngImport: i0, template: `
8
+ <ng-content />
9
+ `, isInline: true }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderThumbComponent, decorators: [{
12
+ type: Component,
13
+ args: [{
14
+ selector: 'rdx-slider-thumb',
15
+ standalone: true,
16
+ hostDirectives: [RdxSliderThumbImplDirective],
17
+ template: `
18
+ <ng-content />
19
+ `
20
+ }]
21
+ }] });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXRodW1iLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc2xpZGVyL3NyYy9zbGlkZXItdGh1bWIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQVU1RSxNQUFNLE9BQU8sdUJBQXVCOytHQUF2Qix1QkFBdUI7bUdBQXZCLHVCQUF1Qiw2SUFKdEI7O0tBRVQ7OzRGQUVRLHVCQUF1QjtrQkFSbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsY0FBYyxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQzdDLFFBQVEsRUFBRTs7S0FFVDtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4U2xpZGVyVGh1bWJJbXBsRGlyZWN0aXZlIH0gZnJvbSAnLi9zbGlkZXItdGh1bWItaW1wbC5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JkeC1zbGlkZXItdGh1bWInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtSZHhTbGlkZXJUaHVtYkltcGxEaXJlY3RpdmVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBSZHhTbGlkZXJUaHVtYkNvbXBvbmVudCB7fVxuIl19
@@ -0,0 +1,27 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { RdxSliderRootComponent } from './slider-root.component';
3
+ import * as i0 from "@angular/core";
4
+ export class RdxSliderTrackComponent {
5
+ constructor() {
6
+ this.rootContext = inject(RdxSliderRootComponent);
7
+ }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderTrackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: RdxSliderTrackComponent, isStandalone: true, selector: "rdx-slider-track", host: { properties: { "attr.data-disabled": "rootContext.disabled() ? '' : undefined", "attr.data-orientation": "rootContext.orientation()" } }, ngImport: i0, template: `
10
+ <ng-content />
11
+ `, isInline: true }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderTrackComponent, decorators: [{
14
+ type: Component,
15
+ args: [{
16
+ selector: 'rdx-slider-track',
17
+ standalone: true,
18
+ host: {
19
+ '[attr.data-disabled]': "rootContext.disabled() ? '' : undefined",
20
+ '[attr.data-orientation]': 'rootContext.orientation()'
21
+ },
22
+ template: `
23
+ <ng-content />
24
+ `
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXRyYWNrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc2xpZGVyL3NyYy9zbGlkZXItdHJhY2suY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWFqRSxNQUFNLE9BQU8sdUJBQXVCO0lBWHBDO1FBWXVCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7S0FDbkU7K0dBRlksdUJBQXVCO21HQUF2Qix1QkFBdUIsNk5BSnRCOztLQUVUOzs0RkFFUSx1QkFBdUI7a0JBWG5DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDRixzQkFBc0IsRUFBRSx5Q0FBeUM7d0JBQ2pFLHlCQUF5QixFQUFFLDJCQUEyQjtxQkFDekQ7b0JBQ0QsUUFBUSxFQUFFOztLQUVUO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeFNsaWRlclJvb3RDb21wb25lbnQgfSBmcm9tICcuL3NsaWRlci1yb290LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncmR4LXNsaWRlci10cmFjaycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5kYXRhLWRpc2FibGVkXSc6IFwicm9vdENvbnRleHQuZGlzYWJsZWQoKSA/ICcnIDogdW5kZWZpbmVkXCIsXG4gICAgICAgICdbYXR0ci5kYXRhLW9yaWVudGF0aW9uXSc6ICdyb290Q29udGV4dC5vcmllbnRhdGlvbigpJ1xuICAgIH0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIFJkeFNsaWRlclRyYWNrQ29tcG9uZW50IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcm9vdENvbnRleHQgPSBpbmplY3QoUmR4U2xpZGVyUm9vdENvbXBvbmVudCk7XG59XG4iXX0=
@@ -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 RdxSliderVerticalComponent {
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.clientY);
25
+ this.slideStart.emit(value);
26
+ }
27
+ onSlideMove(event) {
28
+ const value = this.getValueFromPointer(event.clientY);
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.isSlidingFromBottom() ? 'from-bottom' : 'from-top';
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.height];
46
+ const output = this.rootContext.isSlidingFromBottom()
47
+ ? [this.max, this.min]
48
+ : [this.min, this.max];
49
+ const value = linearScale(input, output);
50
+ this.rect.set(rect);
51
+ return value(pointerPosition - rect.top);
52
+ }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxSliderVerticalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: RdxSliderVerticalComponent, isStandalone: true, selector: "rdx-slider-vertical", 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]="'vertical'"
59
+ [style]="{ '--rdx-slider-thumb-transform': 'translateY(-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: RdxSliderVerticalComponent, decorators: [{
73
+ type: Component,
74
+ args: [{
75
+ selector: 'rdx-slider-vertical',
76
+ standalone: true,
77
+ imports: [RdxSliderImplDirective],
78
+ template: `
79
+ <span
80
+ #sliderElement
81
+ [class]="className"
82
+ [attr.data-orientation]="'vertical'"
83
+ [style]="{ '--rdx-slider-thumb-transform': 'translateY(-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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLXZlcnRpY2FsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc2xpZGVyL3NyYy9zbGlkZXItdmVydGljYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUF3QmpELE1BQU0sT0FBTywwQkFBMEI7SUF0QnZDO1FBdUJxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRXJELFFBQUcsR0FBa0IsS0FBSyxDQUFDO1FBRTNCLGFBQVEsR0FBRyxLQUFLLENBQXdCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFaEYsUUFBRyxHQUFHLENBQUMsQ0FBQztRQUNSLFFBQUcsR0FBRyxHQUFHLENBQUM7UUFFVixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBRWQsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdkMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDcEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUM5RSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDL0MsZ0JBQVcsR0FBRyxJQUFJ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QkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeFNsaWRlckltcGxEaXJlY3RpdmUgfSBmcm9tICcuL3NsaWRlci1pbXBsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBSZHhTbGlkZXJSb290Q29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZXItcm9vdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQkFDS19LRVlTLCBsaW5lYXJTY2FsZSB9IGZyb20gJy4vdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3JkeC1zbGlkZXItdmVydGljYWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1JkeFNsaWRlckltcGxEaXJlY3RpdmVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAjc2xpZGVyRWxlbWVudFxuICAgICAgICAgICAgW2NsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW9yaWVudGF0aW9uXT1cIid2ZXJ0aWNhbCdcIlxuICAgICAgICAgICAgW3N0eWxlXT1cInsgJy0tcmR4LXNsaWRlci10aHVtYi10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgtNTAlKScgfVwiXG4gICAgICAgICAgICAoc2xpZGVTdGFydCk9XCJvblNsaWRlU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2xpZGVNb3ZlKT1cIm9uU2xpZGVNb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgKHNsaWRlRW5kKT1cIm9uU2xpZGVFbmQoKVwiXG4gICAgICAgICAgICAoc3RlcEtleURvd24pPVwib25TdGVwS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChlbmRLZXlEb3duKT1cImVuZEtleURvd24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChob21lS2V5RG93bik9XCJob21lS2V5RG93bi5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgcmR4U2xpZGVySW1wbFxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgYFxufSlcbmV4cG9ydCBjbGFzcyBSZHhTbGlkZXJWZXJ0aWNhbENvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb290Q29udGV4dCA9IGluamVjdChSZHhTbGlkZXJSb290Q29tcG9uZW50KTtcblxuICAgIEBJbnB1dCgpIGRpcjogJ2x0cicgfCAncnRsJyA9ICdsdHInO1xuXG4gICAgcmVhZG9ubHkgaW52ZXJ0ZWQgPSBpbnB1dDxib29sZWFuLCBCb29sZWFuSW5wdXQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICAgIEBJbnB1dCgpIG1pbiA9IDA7XG4gICAgQElucHV0KCkgbWF4ID0gMTAwO1xuXG4gICAgQElucHV0KCkgY2xhc3NOYW1lID0gJyc7XG5cbiAgICBAT3V0cHV0KCkgc2xpZGVTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIEBPdXRwdXQoKSBzbGlkZU1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCkgc2xpZGVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgQE91dHB1dCgpIHN0ZXBLZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBLZXlib2FyZEV2ZW50OyBkaXJlY3Rpb246IG51bWJlciB9PigpO1xuICAgIEBPdXRwdXQoKSBlbmRLZXlEb3duID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuICAgIEBPdXRwdXQoKSBob21lS2V5RG93biA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2xpZGVyRWxlbWVudCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignc2xpZGVyRWxlbWVudCcpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWN0ID0gc2lnbmFsPERPTVJlY3QgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICBvblNsaWRlU3RhcnQoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tUG9pbnRlcihldmVudC5jbGllbnRZKTtcbiAgICAgICAgdGhpcy5zbGlkZVN0YXJ0LmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIG9uU2xpZGVNb3ZlKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVBvaW50ZXIoZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIHRoaXMuc2xpZGVNb3ZlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIG9uU2xpZGVFbmQoKSB7XG4gICAgICAgIHRoaXMucmVjdC5zZXQodW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5zbGlkZUVuZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgb25TdGVwS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBzbGlkZURpcmVjdGlvbiA9IHRoaXMucm9vdENvbnRleHQuaXNTbGlkaW5nRnJvbUJvdHRvbSgpID8gJ2Zyb20tYm90dG9tJyA6ICdmcm9tLXRvcCc7XG4gICAgICAgIGNvbnN0IGlzQmFja0tleSA9IEJBQ0tfS0VZU1tzbGlkZURpcmVjdGlvbl0uaW5jbHVkZXMoZXZlbnQua2V5KTtcblxuICAgICAgICB0aGlzLnN0ZXBLZXlEb3duLmVtaXQoeyBldmVudCwgZGlyZWN0aW9uOiBpc0JhY2tLZXkgPyAtMSA6IDEgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUZyb21Qb2ludGVyKHBvaW50ZXJQb3NpdGlvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgdGhpcy5yZWN0LnNldCh0aGlzLnNsaWRlckVsZW1lbnQoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnJlY3QoKTtcbiAgICAgICAgaWYgKCFyZWN0KSByZXR1cm4gMDtcblxuICAgICAgICBjb25zdCBpbnB1dDogW251bWJlciwgbnVtYmVyXSA9IFswLCByZWN0LmhlaWdodF07XG4gICAgICAgIGNvbnN0IG91dHB1dDogW251bWJlciwgbnVtYmVyXSA9IHRoaXMucm9vdENvbnRleHQuaXNTbGlkaW5nRnJvbUJvdHRvbSgpXG4gICAgICAgICAgICA/IFt0aGlzLm1heCwgdGhpcy5taW5dXG4gICAgICAgICAgICA6IFt0aGlzLm1pbiwgdGhpcy5tYXhdO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gbGluZWFyU2NhbGUoaW5wdXQsIG91dHB1dCk7XG4gICAgICAgIHRoaXMucmVjdC5zZXQocmVjdCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlKHBvaW50ZXJQb3NpdGlvbiAtIHJlY3QudG9wKTtcbiAgICB9XG59XG4iXX0=