ng-primitives 0.115.0 → 0.115.2
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.
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, computed, Directive,
|
|
2
|
+
import { inject, signal, computed, Directive, Injector, output, input, numberAttribute, booleanAttribute } from '@angular/core';
|
|
3
3
|
import { injectElementRef } from 'ng-primitives/internal';
|
|
4
|
-
import { createPrimitive, controlled, emitter, attrBinding, dataBinding, deprecatedSetter, styleBinding,
|
|
4
|
+
import { createPrimitive, controlled, emitter, attrBinding, dataBinding, deprecatedSetter, styleBinding, onDestroy, listener } from 'ng-primitives/state';
|
|
5
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
5
6
|
import { ngpFormControl } from 'ng-primitives/form-field';
|
|
6
7
|
import { uniqueId } from 'ng-primitives/utils';
|
|
7
8
|
import { DOCUMENT } from '@angular/common';
|
|
@@ -9,11 +10,13 @@ import { ngpInteractions } from 'ng-primitives/interactions';
|
|
|
9
10
|
|
|
10
11
|
const [NgpSliderStateToken, ngpSlider, injectSliderState, provideSliderState] = createPrimitive('NgpSlider', ({ id = signal(uniqueId('ngp-slider')), value: _value = signal(0), min = signal(0), max = signal(100), step = signal(1), orientation: _orientation = signal('horizontal'), disabled: _disabled = signal(false), onValueChange, }) => {
|
|
11
12
|
const element = injectElementRef();
|
|
13
|
+
const focusMonitor = inject(FocusMonitor);
|
|
12
14
|
const value = controlled(_value);
|
|
13
15
|
const disabled = controlled(_disabled);
|
|
14
16
|
const orientation = controlled(_orientation);
|
|
15
17
|
const valueChange = emitter();
|
|
16
18
|
const track = signal(undefined, ...(ngDevMode ? [{ debugName: "track" }] : []));
|
|
19
|
+
const thumb = signal(undefined, ...(ngDevMode ? [{ debugName: "thumb" }] : []));
|
|
17
20
|
// Form control integration
|
|
18
21
|
const status = ngpFormControl({ id, disabled });
|
|
19
22
|
const percentage = computed(() => {
|
|
@@ -31,6 +34,15 @@ const [NgpSliderStateToken, ngpSlider, injectSliderState, provideSliderState] =
|
|
|
31
34
|
function setTrack(newTrack) {
|
|
32
35
|
track.set(newTrack);
|
|
33
36
|
}
|
|
37
|
+
function setThumb(newThumb) {
|
|
38
|
+
thumb.set(newThumb);
|
|
39
|
+
}
|
|
40
|
+
function focusThumb(origin) {
|
|
41
|
+
const el = thumb();
|
|
42
|
+
if (el) {
|
|
43
|
+
focusMonitor.focusVia(el, origin, { preventScroll: true });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
34
46
|
function setValue(newValue) {
|
|
35
47
|
const clamped = Math.min(max(), Math.max(min(), newValue));
|
|
36
48
|
const stepped = Math.round((clamped - min()) / step()) * step() + min();
|
|
@@ -56,8 +68,11 @@ const [NgpSliderStateToken, ngpSlider, injectSliderState, provideSliderState] =
|
|
|
56
68
|
valueChange: valueChange.asObservable(),
|
|
57
69
|
percentage,
|
|
58
70
|
track,
|
|
71
|
+
thumb,
|
|
59
72
|
setValue,
|
|
60
73
|
setTrack,
|
|
74
|
+
setThumb,
|
|
75
|
+
focusThumb,
|
|
61
76
|
setDisabled,
|
|
62
77
|
setOrientation,
|
|
63
78
|
};
|
|
@@ -97,6 +112,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
97
112
|
const [NgpSliderThumbStateToken, ngpSliderThumb, injectSliderThumbState, provideSliderThumbState,] = createPrimitive('NgpSliderThumb', ({ onDragStart, onDragEnd }) => {
|
|
98
113
|
const elementRef = injectElementRef();
|
|
99
114
|
const slider = injectSliderState();
|
|
115
|
+
const focusMonitor = inject(FocusMonitor);
|
|
100
116
|
const injector = inject(Injector);
|
|
101
117
|
const document = inject(DOCUMENT);
|
|
102
118
|
let dragging = false;
|
|
@@ -121,6 +137,9 @@ const [NgpSliderThumbStateToken, ngpSliderThumb, injectSliderThumbState, provide
|
|
|
121
137
|
press: true,
|
|
122
138
|
disabled: slider().disabled,
|
|
123
139
|
});
|
|
140
|
+
// Register thumb with parent slider
|
|
141
|
+
slider().setThumb(elementRef);
|
|
142
|
+
onDestroy(() => slider().setThumb(undefined));
|
|
124
143
|
// Pointer interactions
|
|
125
144
|
listener(elementRef, 'pointerdown', (event) => {
|
|
126
145
|
event.preventDefault();
|
|
@@ -130,6 +149,8 @@ const [NgpSliderThumbStateToken, ngpSliderThumb, injectSliderThumbState, provide
|
|
|
130
149
|
dragging = true;
|
|
131
150
|
activePointerId = event.pointerId;
|
|
132
151
|
onDragStart?.();
|
|
152
|
+
// Focus the thumb when clicked/dragged
|
|
153
|
+
focus(event.pointerType === 'touch' ? 'touch' : 'mouse');
|
|
133
154
|
// Clean up any existing listeners
|
|
134
155
|
cleanupDocumentListeners.forEach(cleanup => cleanup());
|
|
135
156
|
// Set up document-level listeners to handle pointer events anywhere
|
|
@@ -216,8 +237,8 @@ const [NgpSliderThumbStateToken, ngpSliderThumb, injectSliderThumbState, provide
|
|
|
216
237
|
/**
|
|
217
238
|
* Moves keyboard focus to the host element without scrolling the page.
|
|
218
239
|
*/
|
|
219
|
-
function focus() {
|
|
220
|
-
|
|
240
|
+
function focus(origin = 'program') {
|
|
241
|
+
focusMonitor.focusVia(elementRef, origin, { preventScroll: true });
|
|
221
242
|
}
|
|
222
243
|
return {
|
|
223
244
|
dragging: computed(() => dragging),
|
|
@@ -283,6 +304,14 @@ const [NgpSliderTrackStateToken, ngpSliderTrack, injectSliderTrackState, provide
|
|
|
283
304
|
const percentage = isHorizontal ? rawPercentage : 1 - rawPercentage;
|
|
284
305
|
const value = slider().min() + (slider().max() - slider().min()) * Math.max(0, Math.min(1, percentage));
|
|
285
306
|
slider().setValue(value);
|
|
307
|
+
slider().focusThumb(event.pointerType === 'touch' ? 'touch' : 'mouse');
|
|
308
|
+
});
|
|
309
|
+
// Prevent mousedown default to stop the browser from stealing focus
|
|
310
|
+
// from the thumb after a pointerdown-initiated focusVia call.
|
|
311
|
+
listener(element, 'mousedown', (event) => {
|
|
312
|
+
if (!slider().disabled()) {
|
|
313
|
+
event.preventDefault();
|
|
314
|
+
}
|
|
286
315
|
});
|
|
287
316
|
return {};
|
|
288
317
|
});
|
|
@@ -414,6 +443,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
414
443
|
|
|
415
444
|
const [NgpRangeSliderStateToken, ngpRangeSlider, injectRangeSliderState, provideRangeSliderState,] = createPrimitive('NgpRangeSlider', ({ id = signal(uniqueId('ngp-range-slider')), low: _low = signal(0), high: _high = signal(100), min = signal(0), max = signal(100), step = signal(1), orientation: _orientation = signal('horizontal'), disabled: _disabled = signal(false), onLowChange, onHighChange, }) => {
|
|
416
445
|
const element = injectElementRef();
|
|
446
|
+
const focusMonitor = inject(FocusMonitor);
|
|
417
447
|
const low = controlled(_low);
|
|
418
448
|
const high = controlled(_high);
|
|
419
449
|
const disabled = controlled(_disabled);
|
|
@@ -467,6 +497,13 @@ const [NgpRangeSliderStateToken, ngpRangeSlider, injectRangeSliderState, provide
|
|
|
467
497
|
function removeThumb(thumb) {
|
|
468
498
|
thumbs.update(t => t.filter(existing => existing !== thumb));
|
|
469
499
|
}
|
|
500
|
+
function focusThumb(thumb, origin) {
|
|
501
|
+
const index = thumb === 'low' ? 0 : 1;
|
|
502
|
+
const el = thumbs()[index];
|
|
503
|
+
if (el) {
|
|
504
|
+
focusMonitor.focusVia(el, origin, { preventScroll: true });
|
|
505
|
+
}
|
|
506
|
+
}
|
|
470
507
|
function setDisabled(isDisabled) {
|
|
471
508
|
disabled.set(isDisabled);
|
|
472
509
|
}
|
|
@@ -497,6 +534,7 @@ const [NgpRangeSliderStateToken, ngpRangeSlider, injectRangeSliderState, provide
|
|
|
497
534
|
getClosestThumb,
|
|
498
535
|
addThumb,
|
|
499
536
|
removeThumb,
|
|
537
|
+
focusThumb,
|
|
500
538
|
setDisabled,
|
|
501
539
|
setOrientation,
|
|
502
540
|
setTrack,
|
|
@@ -539,6 +577,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
539
577
|
const [NgpRangeSliderThumbStateToken, ngpRangeSliderThumb, injectRangeSliderThumbState, provideRangeSliderThumbState,] = createPrimitive('NgpRangeSliderThumb', ({ onDragStart, onDragEnd }) => {
|
|
540
578
|
const element = injectElementRef();
|
|
541
579
|
const rangeSlider = injectRangeSliderState();
|
|
580
|
+
const focusMonitor = inject(FocusMonitor);
|
|
542
581
|
const injector = inject(Injector);
|
|
543
582
|
const document = inject(DOCUMENT);
|
|
544
583
|
// Store dragging state
|
|
@@ -583,6 +622,8 @@ const [NgpRangeSliderThumbStateToken, ngpRangeSliderThumb, injectRangeSliderThum
|
|
|
583
622
|
dragging = true;
|
|
584
623
|
activePointerId = event.pointerId;
|
|
585
624
|
onDragStart?.();
|
|
625
|
+
// Focus the thumb when clicked/dragged
|
|
626
|
+
focus(event.pointerType === 'touch' ? 'touch' : 'mouse');
|
|
586
627
|
// Clean up any existing listeners
|
|
587
628
|
cleanupDocumentListeners.forEach(cleanup => cleanup());
|
|
588
629
|
// Set up document-level listeners to handle pointer events anywhere
|
|
@@ -689,6 +730,9 @@ const [NgpRangeSliderThumbStateToken, ngpRangeSliderThumb, injectRangeSliderThum
|
|
|
689
730
|
}
|
|
690
731
|
event.preventDefault();
|
|
691
732
|
}
|
|
733
|
+
function focus(origin = 'program') {
|
|
734
|
+
focusMonitor.focusVia(element, origin, { preventScroll: true });
|
|
735
|
+
}
|
|
692
736
|
// Event listeners
|
|
693
737
|
listener(element, 'pointerdown', handlePointerDown);
|
|
694
738
|
listener(element, 'keydown', handleKeydown);
|
|
@@ -775,9 +819,17 @@ const [NgpRangeSliderTrackStateToken, ngpRangeSliderTrack, injectRangeSliderTrac
|
|
|
775
819
|
else {
|
|
776
820
|
rangeSlider().setHighValue(value);
|
|
777
821
|
}
|
|
822
|
+
rangeSlider().focusThumb(closestThumb, event.pointerType === 'touch' ? 'touch' : 'mouse');
|
|
778
823
|
}
|
|
779
824
|
// Event listener
|
|
780
825
|
listener(element, 'pointerdown', handlePointerDown);
|
|
826
|
+
// Prevent mousedown default to stop the browser from stealing focus
|
|
827
|
+
// from the thumb after a pointerdown-initiated focusVia call.
|
|
828
|
+
listener(element, 'mousedown', (event) => {
|
|
829
|
+
if (!rangeSlider().disabled()) {
|
|
830
|
+
event.preventDefault();
|
|
831
|
+
}
|
|
832
|
+
});
|
|
781
833
|
// Register track with parent
|
|
782
834
|
rangeSlider().setTrack(element);
|
|
783
835
|
return {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-slider.mjs","sources":["../../../../packages/ng-primitives/slider/src/slider/slider-state.ts","../../../../packages/ng-primitives/slider/src/slider-range/slider-range-state.ts","../../../../packages/ng-primitives/slider/src/slider-range/slider-range.ts","../../../../packages/ng-primitives/slider/src/slider-thumb/slider-thumb-state.ts","../../../../packages/ng-primitives/slider/src/slider-thumb/slider-thumb.ts","../../../../packages/ng-primitives/slider/src/slider-track/slider-track-state.ts","../../../../packages/ng-primitives/slider/src/slider-track/slider-track.ts","../../../../packages/ng-primitives/slider/src/slider/slider.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider/range-slider-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-range/range-slider-range-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-range/range-slider-range.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-thumb/range-slider-thumb-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-thumb/range-slider-thumb.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-track/range-slider-track-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-track/range-slider-track.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider/range-slider.ts","../../../../packages/ng-primitives/slider/src/ng-primitives-slider.ts"],"sourcesContent":["import { computed, ElementRef, Signal, signal, WritableSignal } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the Slider primitive.\n */\nexport interface NgpSliderState {\n /**\n * The id of the slider.\n */\n readonly id: Signal<string>;\n /**\n * The slider value.\n */\n readonly value: WritableSignal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation: WritableSignal<NgpOrientation>;\n /**\n * Whether the slider is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * The percentage position of the thumb.\n */\n readonly percentage: Signal<number>;\n /**\n * The minimum value of the slider.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value of the slider.\n */\n readonly max: Signal<number>;\n /**\n * The step value of the slider.\n */\n readonly step: Signal<number>;\n /**\n * @internal The track element reference.\n */\n readonly track: Signal<ElementRef<HTMLElement> | undefined>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Observable<number>;\n /**\n * Set the current value (clamped).\n */\n setValue(value: number): void;\n /**\n * Register the track element.\n */\n setTrack(track: ElementRef<HTMLElement> | undefined): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void;\n}\n\n/**\n * Inputs for configuring the Slider primitive.\n */\nexport interface NgpSliderProps {\n /**\n * The id of the slider.\n */\n readonly id?: Signal<string>;\n /**\n * The slider value.\n */\n readonly value?: Signal<number>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation?: Signal<NgpOrientation>;\n /**\n * Whether the slider is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number) => void;\n}\n\nexport const [NgpSliderStateToken, ngpSlider, injectSliderState, provideSliderState] =\n createPrimitive(\n 'NgpSlider',\n ({\n id = signal(uniqueId('ngp-slider')),\n value: _value = signal(0),\n min = signal(0),\n max = signal(100),\n step = signal(1),\n orientation: _orientation = signal<NgpOrientation>('horizontal'),\n disabled: _disabled = signal(false),\n onValueChange,\n }: NgpSliderProps): NgpSliderState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const disabled = controlled(_disabled);\n const orientation = controlled(_orientation);\n\n const valueChange = emitter<number>();\n const track = signal<ElementRef<HTMLElement> | undefined>(undefined);\n\n // Form control integration\n const status = ngpFormControl({ id, disabled });\n\n const percentage = computed(() => {\n const range = max() - min();\n if (range <= 0) {\n return 0;\n }\n const pct = ((value() - min()) / range) * 100;\n return Math.min(100, Math.max(0, pct));\n });\n\n // Host bindings\n attrBinding(element, 'id', id);\n dataBinding(element, 'data-orientation', orientation);\n dataBinding(element, 'data-disabled', () => status().disabled);\n\n function setTrack(newTrack: ElementRef<HTMLElement> | undefined): void {\n track.set(newTrack);\n }\n\n function setValue(newValue: number): void {\n const clamped = Math.min(max(), Math.max(min(), newValue));\n const stepped = Math.round((clamped - min()) / step()) * step() + min();\n const finalValue = Math.min(max(), Math.max(min(), stepped));\n value.set(finalValue);\n onValueChange?.(finalValue);\n valueChange.emit(finalValue);\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setOrientation(newOrientation: NgpOrientation): void {\n orientation.set(newOrientation);\n }\n\n return {\n id,\n value,\n min,\n max,\n step,\n orientation: deprecatedSetter(orientation, 'setOrientation'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n valueChange: valueChange.asObservable(),\n percentage,\n track,\n setValue,\n setTrack,\n setDisabled,\n setOrientation,\n } satisfies NgpSliderState;\n },\n );\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, styleBinding } from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\n/**\n * Public state surface for the Slider Range primitive.\n */\nexport interface NgpSliderRangeState {}\n\n/**\n * Inputs for configuring the Slider Range primitive.\n */\nexport interface NgpSliderRangeProps {}\n\nexport const [\n NgpSliderRangeStateToken,\n ngpSliderRange,\n injectSliderRangeState,\n provideSliderRangeState,\n] = createPrimitive('NgpSliderRange', ({}: NgpSliderRangeProps): NgpSliderRangeState => {\n const element = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => slider().orientation());\n dataBinding(element, 'data-disabled', () => slider().disabled());\n styleBinding(element, 'width.%', () =>\n slider().orientation() === 'horizontal' ? slider().percentage() : null,\n );\n styleBinding(element, 'height.%', () =>\n slider().orientation() === 'vertical' ? slider().percentage() : null,\n );\n styleBinding(element, 'inset-block-end.%', () =>\n slider().orientation() === 'vertical' ? 0 : null,\n );\n\n return {} satisfies NgpSliderRangeState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpSliderRange, provideSliderRangeState } from './slider-range-state';\n\n/**\n * Apply the `ngpSliderRange` directive to an element that represents the range of the slider.\n */\n@Directive({\n selector: '[ngpSliderRange]',\n exportAs: 'ngpSliderRange',\n providers: [provideSliderRangeState()],\n})\nexport class NgpSliderRange {\n constructor() {\n ngpSliderRange({});\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, Injector, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n createPrimitive,\n dataBinding,\n listener,\n styleBinding,\n} from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\ntype SliderKey = 'ArrowLeft' | 'ArrowDown' | 'ArrowRight' | 'ArrowUp' | 'Home' | 'End';\n\n/**\n * Public state surface for the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbState {\n /**\n * Whether the thumb is currently dragging.\n */\n readonly dragging: Signal<boolean>;\n /**\n * Focus the thumb element.\n */\n focus(): void;\n}\n\n/**\n * Inputs for configuring the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbProps {\n /**\n * Callback fired when dragging starts.\n */\n readonly onDragStart?: () => void;\n /**\n * Callback fired when dragging ends.\n */\n readonly onDragEnd?: () => void;\n}\n\nexport const [\n NgpSliderThumbStateToken,\n ngpSliderThumb,\n injectSliderThumbState,\n provideSliderThumbState,\n] = createPrimitive(\n 'NgpSliderThumb',\n ({ onDragStart, onDragEnd }: NgpSliderThumbProps): NgpSliderThumbState => {\n const elementRef = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n const injector = inject(Injector);\n const document = inject(DOCUMENT);\n\n let dragging = false;\n let activePointerId: number | null = null;\n let cleanupDocumentListeners: (() => void)[] = [];\n\n const ariaValueNow = computed(() => slider().value());\n const tabindex = computed(() => (slider().disabled() ? -1 : 0));\n\n // Host bindings\n attrBinding(elementRef, 'role', 'slider');\n attrBinding(elementRef, 'aria-valuemin', () => slider().min().toString());\n attrBinding(elementRef, 'aria-valuemax', () => slider().max().toString());\n attrBinding(elementRef, 'aria-valuenow', () => ariaValueNow().toString());\n attrBinding(elementRef, 'aria-orientation', () => slider().orientation());\n attrBinding(elementRef, 'tabindex', () => tabindex().toString());\n dataBinding(elementRef, 'data-orientation', () => slider().orientation());\n dataBinding(elementRef, 'data-disabled', () => slider().disabled());\n styleBinding(elementRef, 'inset-inline-start.%', () =>\n slider().orientation() === 'horizontal' ? slider().percentage() : null,\n );\n styleBinding(elementRef, 'inset-block-start.%', () =>\n slider().orientation() === 'vertical' ? 100 - slider().percentage() : null,\n );\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: slider().disabled,\n });\n\n // Pointer interactions\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (slider().disabled()) {\n return;\n }\n\n dragging = true;\n activePointerId = event.pointerId;\n onDragStart?.();\n\n // Clean up any existing listeners\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n\n // Set up document-level listeners to handle pointer events anywhere\n const pointerMoveCleanup = listener(document, 'pointermove', onPointerMove, {\n config: false,\n injector,\n });\n\n const pointerUpCleanup = listener(document, 'pointerup', onPointerEnd, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', onPointerEnd, {\n config: false,\n injector,\n });\n\n cleanupDocumentListeners = [pointerMoveCleanup, pointerUpCleanup, pointerCancelCleanup];\n });\n\n function onPointerMove(event: PointerEvent): void {\n if (slider().disabled() || !dragging || event.pointerId !== activePointerId) {\n return;\n }\n\n const track = slider().track();\n const rect = track?.nativeElement.getBoundingClientRect();\n if (!rect) {\n return;\n }\n\n const percentage =\n slider().orientation() === 'horizontal'\n ? (event.clientX - rect.left) / rect.width\n : 1 - (event.clientY - rect.top) / rect.height;\n\n const value =\n slider().min() + (slider().max() - slider().min()) * Math.max(0, Math.min(1, percentage));\n\n slider().setValue(value);\n }\n\n function onPointerEnd(event: PointerEvent): void {\n if (event.pointerId !== activePointerId) {\n return;\n }\n\n dragging = false;\n activePointerId = null;\n onDragEnd?.();\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n cleanupDocumentListeners = [];\n }\n\n // Keyboard interactions\n listener(elementRef, 'keydown', (event: KeyboardEvent) => {\n const multiplier = event.shiftKey ? 10 : 1;\n const step = slider().step() * multiplier;\n const currentValue = slider().value();\n\n // determine the document direction\n const isRTL = getComputedStyle(elementRef.nativeElement).direction === 'rtl';\n\n let newValue: number;\n\n switch (event.key as SliderKey) {\n case 'ArrowLeft':\n newValue = isRTL\n ? Math.min(currentValue + step, slider().max())\n : Math.max(currentValue - step, slider().min());\n break;\n case 'ArrowDown':\n newValue = Math.max(currentValue - step, slider().min());\n break;\n case 'ArrowRight':\n newValue = isRTL\n ? Math.max(currentValue - step, slider().min())\n : Math.min(currentValue + step, slider().max());\n break;\n case 'ArrowUp':\n newValue = Math.min(currentValue + step, slider().max());\n break;\n case 'Home':\n newValue = isRTL ? slider().max() : slider().min();\n break;\n case 'End':\n newValue = isRTL ? slider().min() : slider().max();\n break;\n default:\n return;\n }\n\n // prevent the default action to prevent the page from scrolling\n event.preventDefault();\n\n if (newValue === currentValue) {\n return;\n }\n\n slider().setValue(newValue);\n });\n\n /**\n * Moves keyboard focus to the host element without scrolling the page.\n */\n function focus(): void {\n elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n return {\n dragging: computed(() => dragging),\n focus,\n } satisfies NgpSliderThumbState;\n },\n);\n","import { Directive, output } from '@angular/core';\nimport { ngpSliderThumb, provideSliderThumbState } from './slider-thumb-state';\n\n/**\n * Apply the `ngpSliderThumb` directive to an element that represents the thumb of the slider.\n */\n@Directive({\n selector: '[ngpSliderThumb]',\n exportAs: 'ngpSliderThumb',\n providers: [provideSliderThumbState()],\n})\nexport class NgpSliderThumb {\n /**\n * Emits when the thumb drag starts.\n */\n readonly dragStart = output<void>({\n alias: 'ngpSliderThumbDragStart',\n });\n\n /**\n * Emits when the thumb drag ends.\n */\n readonly dragEnd = output<void>({\n alias: 'ngpSliderThumbDragEnd',\n });\n\n constructor() {\n ngpSliderThumb({\n onDragStart: () => this.dragStart.emit(),\n onDragEnd: () => this.dragEnd.emit(),\n });\n }\n}\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\n/**\n * Public state surface for the Slider Track primitive.\n */\nexport interface NgpSliderTrackState {}\n\n/**\n * Inputs for configuring the Slider Track primitive.\n */\nexport interface NgpSliderTrackProps {}\n\nexport const [\n NgpSliderTrackStateToken,\n ngpSliderTrack,\n injectSliderTrackState,\n provideSliderTrackState,\n] = createPrimitive('NgpSliderTrack', ({}: NgpSliderTrackProps): NgpSliderTrackState => {\n const element = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => slider().orientation());\n dataBinding(element, 'data-disabled', () => slider().disabled());\n\n // Register track for thumb measurements\n slider().setTrack(element);\n\n // Listener for pointer interactions to set value\n listener(element, 'pointerdown', (event: PointerEvent) => {\n if (slider().disabled()) {\n return;\n }\n\n // prevent text selection\n event.preventDefault();\n\n const rect = element.nativeElement.getBoundingClientRect();\n const isHorizontal = slider().orientation() === 'horizontal';\n const position = isHorizontal ? event.clientX - rect.left : event.clientY - rect.top;\n const size = isHorizontal ? rect.width : rect.height;\n const rawPercentage = size === 0 ? 0 : position / size;\n // Invert percentage for vertical sliders so bottom = min, top = max\n const percentage = isHorizontal ? rawPercentage : 1 - rawPercentage;\n const value =\n slider().min() + (slider().max() - slider().min()) * Math.max(0, Math.min(1, percentage));\n\n slider().setValue(value);\n });\n\n return {} satisfies NgpSliderTrackState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpSliderTrack, provideSliderTrackState } from './slider-track-state';\n\n/**\n * Apply the `ngpSliderTrack` directive to an element that represents the track of the slider.\n */\n@Directive({\n selector: '[ngpSliderTrack]',\n exportAs: 'ngpSliderTrack',\n providers: [provideSliderTrackState()],\n})\nexport class NgpSliderTrack {\n constructor() {\n ngpSliderTrack({});\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpSlider, provideSliderState } from './slider-state';\n\n/**\n * Apply the `ngpSlider` directive to an element that represents the slider and contains the track, range, and thumb.\n */\n@Directive({\n selector: '[ngpSlider]',\n exportAs: 'ngpSlider',\n providers: [provideSliderState()],\n})\nexport class NgpSlider {\n /**\n * The id of the slider. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-slider'));\n\n /**\n * The value of the slider.\n */\n readonly value = input<number, NumberInput>(0, {\n alias: 'ngpSliderValue',\n transform: numberAttribute,\n });\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange = output<number>({\n alias: 'ngpSliderValueChange',\n });\n\n /**\n * The minimum value of the slider.\n */\n readonly min = input<number, NumberInput>(0, {\n alias: 'ngpSliderMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value of the slider.\n */\n readonly max = input<number, NumberInput>(100, {\n alias: 'ngpSliderMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value of the slider.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpSliderStep',\n transform: numberAttribute,\n });\n\n /**\n * The orientation of the slider.\n */\n readonly orientation = input<NgpOrientation>('horizontal', {\n alias: 'ngpSliderOrientation',\n });\n\n /**\n * The disabled state of the slider.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSliderDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The state of the slider. We use this for the slider state rather than relying on the inputs.\n * @internal\n */\n protected readonly state = ngpSlider({\n id: this.id,\n value: this.value,\n min: this.min,\n max: this.max,\n step: this.step,\n orientation: this.orientation,\n disabled: this.disabled,\n onValueChange: value => this.valueChange.emit(value),\n });\n\n /**\n * Set the value of the slider.\n */\n setValue(value: number): void {\n this.state.setValue(value);\n }\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void {\n this.state.setDisabled(disabled);\n }\n\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void {\n this.state.setOrientation(orientation);\n }\n}\n","import { computed, ElementRef, Signal, signal, WritableSignal } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Inputs for configuring the RangeSlider primitive.\n */\nexport interface NgpRangeSliderProps {\n /**\n * The id of the range slider.\n */\n readonly id?: Signal<string>;\n /**\n * The low value of the range slider.\n */\n readonly low?: Signal<number>;\n /**\n * The high value of the range slider.\n */\n readonly high?: Signal<number>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The range slider orientation.\n */\n readonly orientation?: Signal<NgpOrientation>;\n /**\n * Whether the range slider is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the low value changes.\n */\n readonly onLowChange?: (value: number) => void;\n /**\n * Callback fired when the high value changes.\n */\n readonly onHighChange?: (value: number) => void;\n}\n\n/**\n * Public state surface for the RangeSlider primitive.\n */\nexport interface NgpRangeSliderState {\n /**\n * The id of the range slider.\n */\n readonly id: Signal<string>;\n /**\n * The low value of the range slider.\n */\n readonly low: WritableSignal<number>;\n /**\n * The high value of the range slider.\n */\n readonly high: WritableSignal<number>;\n /**\n * The minimum value of the range slider.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value of the range slider.\n */\n readonly max: Signal<number>;\n /**\n * The step value of the range slider.\n */\n readonly step: Signal<number>;\n /**\n * The orientation of the range slider.\n */\n readonly orientation: WritableSignal<NgpOrientation>;\n /**\n * Whether the range slider is disabled.\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * The low value as a percentage based on the min and max values.\n * @internal\n */\n readonly lowPercentage: Signal<number>;\n /**\n * The high value as a percentage based on the min and max values.\n * @internal\n */\n readonly highPercentage: Signal<number>;\n /**\n * The range between low and high values as a percentage.\n * @internal\n */\n readonly rangePercentage: Signal<number>;\n /**\n * @internal The track element reference.\n */\n readonly track: Signal<ElementRef<HTMLElement> | undefined>;\n /**\n * @internal The thumbs array.\n */\n readonly thumbs: Signal<ElementRef<HTMLElement>[]>;\n /**\n * Emit when the low value changes.\n */\n readonly lowChange: Observable<number>;\n /**\n * Emit when the high value changes.\n */\n readonly highChange: Observable<number>;\n /**\n * Updates the low value, ensuring it doesn't exceed the high value.\n */\n setLowValue(value: number): void;\n /**\n * Updates the high value, ensuring it doesn't go below the low value.\n */\n setHighValue(value: number): void;\n /**\n * Determines which thumb should be moved based on the position clicked.\n */\n getClosestThumb(percentage: number): 'low' | 'high';\n /**\n * Updates the thumbs array when a new thumb is added.\n */\n addThumb(thumb: ElementRef<HTMLElement>): void;\n /**\n * Removes a thumb from the thumbs array.\n */\n removeThumb(thumb: ElementRef<HTMLElement>): void;\n /**\n * Set the track element reference.\n */\n setTrack(track: ElementRef<HTMLElement>): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void;\n}\n\nexport const [\n NgpRangeSliderStateToken,\n ngpRangeSlider,\n injectRangeSliderState,\n provideRangeSliderState,\n] = createPrimitive(\n 'NgpRangeSlider',\n ({\n id = signal(uniqueId('ngp-range-slider')),\n low: _low = signal(0),\n high: _high = signal(100),\n min = signal(0),\n max = signal(100),\n step = signal(1),\n orientation: _orientation = signal<NgpOrientation>('horizontal'),\n disabled: _disabled = signal(false),\n onLowChange,\n onHighChange,\n }: NgpRangeSliderProps): NgpRangeSliderState => {\n const element = injectElementRef();\n const low = controlled(_low);\n const high = controlled(_high);\n const disabled = controlled(_disabled);\n const orientation = controlled(_orientation);\n\n const lowChange = emitter<number>();\n const highChange = emitter<number>();\n const track = signal<ElementRef<HTMLElement> | undefined>(undefined);\n const thumbs = signal<ElementRef<HTMLElement>[]>([]);\n\n // Form control integration\n const status = ngpFormControl({ id, disabled });\n\n const lowPercentage = computed(() => {\n const range = max() - min();\n if (range <= 0) return 0;\n return ((low() - min()) / range) * 100;\n });\n\n const highPercentage = computed(() => {\n const range = max() - min();\n if (range <= 0) return 100;\n return ((high() - min()) / range) * 100;\n });\n\n const rangePercentage = computed(() => highPercentage() - lowPercentage());\n\n // Host bindings\n attrBinding(element, 'id', id);\n dataBinding(element, 'data-orientation', orientation);\n dataBinding(element, 'data-disabled', status().disabled);\n\n function setLowValue(value: number): void {\n const clampedValue = Math.max(min(), Math.min(value, high()));\n const steppedValue = Math.round((clampedValue - min()) / step()) * step() + min();\n low.set(steppedValue);\n onLowChange?.(steppedValue);\n lowChange.emit(steppedValue);\n }\n\n function setHighValue(value: number): void {\n const clampedValue = Math.min(max(), Math.max(value, low()));\n const steppedValue = Math.round((clampedValue - min()) / step()) * step() + min();\n high.set(steppedValue);\n onHighChange?.(steppedValue);\n highChange.emit(steppedValue);\n }\n\n function getClosestThumb(percentage: number): 'low' | 'high' {\n const value = min() + (max() - min()) * (percentage / 100);\n const distanceToLow = Math.abs(value - low());\n const distanceToHigh = Math.abs(value - high());\n return distanceToLow <= distanceToHigh ? 'low' : 'high';\n }\n\n function addThumb(thumb: ElementRef<HTMLElement>): void {\n thumbs.update(t => [...t, thumb]);\n }\n\n function removeThumb(thumb: ElementRef<HTMLElement>): void {\n thumbs.update(t => t.filter(existing => existing !== thumb));\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setOrientation(newOrientation: NgpOrientation): void {\n orientation.set(newOrientation);\n }\n\n function setTrack(newTrack: ElementRef<HTMLElement>): void {\n track.set(newTrack);\n }\n\n return {\n id,\n low,\n high,\n min,\n max,\n step,\n orientation: deprecatedSetter(orientation, 'setOrientation'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n lowPercentage,\n highPercentage,\n rangePercentage,\n track,\n thumbs,\n lowChange: lowChange.asObservable(),\n highChange: highChange.asObservable(),\n setLowValue,\n setHighValue,\n getClosestThumb,\n addThumb,\n removeThumb,\n setDisabled,\n setOrientation,\n setTrack,\n } satisfies NgpRangeSliderState;\n },\n);\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, styleBinding } from 'ng-primitives/state';\nimport { injectRangeSliderState } from '../range-slider/range-slider-state';\n\n/**\n * Public state surface for the RangeSliderRange primitive.\n */\nexport interface NgpRangeSliderRangeState {}\n\n/**\n * Inputs for configuring the RangeSliderRange primitive.\n */\nexport interface NgpRangeSliderRangeProps {}\n\nexport const [\n NgpRangeSliderRangeStateToken,\n ngpRangeSliderRange,\n injectRangeSliderRangeState,\n provideRangeSliderRangeState,\n] = createPrimitive('NgpRangeSliderRange', ({}: NgpRangeSliderRangeProps) => {\n const element = injectElementRef();\n const rangeSlider = injectRangeSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => rangeSlider().orientation());\n dataBinding(element, 'data-disabled', () => rangeSlider().disabled());\n\n // Horizontal\n styleBinding(element, 'width.%', () =>\n rangeSlider().orientation() === 'horizontal' ? rangeSlider().rangePercentage() : null,\n );\n styleBinding(element, 'inset-inline-start.%', () =>\n rangeSlider().orientation() === 'horizontal' ? rangeSlider().lowPercentage() : null,\n );\n\n // Vertical - position from top: 100% - highPercentage places the top of the range at the high thumb\n styleBinding(element, 'height.%', () =>\n rangeSlider().orientation() === 'vertical' ? rangeSlider().rangePercentage() : null,\n );\n styleBinding(element, 'inset-block-start.%', () =>\n rangeSlider().orientation() === 'vertical' ? 100 - rangeSlider().highPercentage() : null,\n );\n\n return {} satisfies NgpRangeSliderRangeState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpRangeSliderRange } from './range-slider-range-state';\n\n/**\n * Apply the `ngpRangeSliderRange` directive to an element that represents the range between the low and high values.\n */\n@Directive({\n selector: '[ngpRangeSliderRange]',\n exportAs: 'ngpRangeSliderRange',\n})\nexport class NgpRangeSliderRange {\n constructor() {\n ngpRangeSliderRange({});\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { computed, inject, Injector, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n createPrimitive,\n dataBinding,\n listener,\n onDestroy,\n styleBinding,\n} from 'ng-primitives/state';\nimport { injectRangeSliderState } from '../range-slider/range-slider-state';\n\n/**\n * Public state surface for the RangeSliderThumb primitive.\n */\nexport interface NgpRangeSliderThumbState {\n /**\n * Which value this thumb controls ('low' or 'high').\n */\n readonly thumb: Signal<'low' | 'high'>;\n /**\n * The current value for this thumb.\n */\n readonly value: Signal<number>;\n /**\n * The current percentage for this thumb.\n */\n readonly percentage: Signal<number>;\n}\n\n/**\n * Inputs for configuring the RangeSliderThumb primitive.\n */\nexport interface NgpRangeSliderThumbProps {\n /**\n * Callback fired when dragging starts.\n */\n readonly onDragStart?: () => void;\n /**\n * Callback fired when dragging ends.\n */\n readonly onDragEnd?: () => void;\n}\n\nexport const [\n NgpRangeSliderThumbStateToken,\n ngpRangeSliderThumb,\n injectRangeSliderThumbState,\n provideRangeSliderThumbState,\n] = createPrimitive(\n 'NgpRangeSliderThumb',\n ({ onDragStart, onDragEnd }: NgpRangeSliderThumbProps) => {\n const element = injectElementRef();\n const rangeSlider = injectRangeSliderState();\n const injector = inject(Injector);\n const document = inject(DOCUMENT);\n\n // Store dragging state\n let dragging = false;\n let activePointerId: number | null = null;\n let cleanupDocumentListeners: (() => void)[] = [];\n\n // Determine which thumb this is based on registration order\n const thumb = computed(() => (rangeSlider().thumbs().indexOf(element) === 0 ? 'low' : 'high'));\n\n const value = computed(() => (thumb() === 'low' ? rangeSlider().low() : rangeSlider().high()));\n\n const percentage = computed(() =>\n thumb() === 'low' ? rangeSlider().lowPercentage() : rangeSlider().highPercentage(),\n );\n\n // Setup interactions\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: rangeSlider().disabled,\n });\n\n // Host bindings\n attrBinding(element, 'role', 'slider');\n attrBinding(element, 'aria-valuemin', () => rangeSlider().min());\n attrBinding(element, 'aria-valuemax', () => rangeSlider().max());\n attrBinding(element, 'aria-valuenow', value);\n attrBinding(element, 'aria-orientation', () => rangeSlider().orientation());\n attrBinding(element, 'tabindex', () => (rangeSlider().disabled() ? -1 : 0));\n dataBinding(element, 'data-orientation', () => rangeSlider().orientation());\n dataBinding(element, 'data-disabled', () => rangeSlider().disabled());\n dataBinding(element, 'data-thumb', thumb);\n styleBinding(element, 'inset-inline-start.%', () =>\n rangeSlider().orientation() === 'horizontal' ? percentage() : null,\n );\n styleBinding(element, 'inset-block-start.%', () =>\n rangeSlider().orientation() === 'vertical' ? 100 - percentage() : null,\n );\n\n /**\n * Initiates a thumb drag: prevents default, marks dragging active, calls `onDragStart`, and attaches document-level pointer listeners.\n *\n * If the parent slider is disabled, the function no-ops after preventing the default event. Otherwise it replaces any existing document listeners with new move/up/cancel listeners and stores their cleanup functions.\n *\n * @param event - The pointerdown event that started the drag\n */\n function handlePointerDown(event: PointerEvent): void {\n event.preventDefault();\n\n if (rangeSlider().disabled()) {\n return;\n }\n\n dragging = true;\n activePointerId = event.pointerId;\n onDragStart?.();\n\n // Clean up any existing listeners\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n\n // Set up document-level listeners to handle pointer events anywhere\n const pointerMoveCleanup = listener(document, 'pointermove', handlePointerMove, {\n config: false,\n injector,\n });\n\n const pointerUpCleanup = listener(document, 'pointerup', handlePointerEnd, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', handlePointerEnd, {\n config: false,\n injector,\n });\n\n cleanupDocumentListeners = [pointerMoveCleanup, pointerUpCleanup, pointerCancelCleanup];\n }\n\n function handlePointerEnd(event: PointerEvent): void {\n if (event.pointerId !== activePointerId) {\n return;\n }\n\n dragging = false;\n activePointerId = null;\n onDragEnd?.();\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n cleanupDocumentListeners = [];\n }\n\n /**\n * Update the thumb's value from a pointer event while dragging.\n *\n * Computes the pointer position relative to the slider track (inverting vertical coordinates so bottom = 0%, top = 100%), clamps it to [0, 100], maps it into the slider's value range, and sets the corresponding low or high value on the parent slider.\n *\n * @param event - The pointer event used to compute the new thumb position and value\n */\n function handlePointerMove(event: PointerEvent): void {\n if (rangeSlider().disabled() || !dragging || event.pointerId !== activePointerId) {\n return;\n }\n\n const track = rangeSlider().track();\n if (!track) {\n return;\n }\n\n const rect = track.nativeElement.getBoundingClientRect();\n\n // Calculate the pointer position as a percentage of the track\n // p.ex. for horizontal: (pointerX - trackLeft) / trackWidth\n // For vertical, invert so bottom = 0%, top = 100%\n const isHorizontal = rangeSlider().orientation() === 'horizontal';\n const rawPercentage = isHorizontal\n ? ((event.clientX - rect.left) / rect.width) * 100\n : ((event.clientY - rect.top) / rect.height) * 100;\n const percentage = isHorizontal ? rawPercentage : 100 - rawPercentage;\n\n const min = rangeSlider().min();\n const max = rangeSlider().max();\n const rangeSize = max - min;\n\n const clampedPercentage = Math.max(0, Math.min(100, percentage));\n const computedValue = min + rangeSize * (clampedPercentage / 100);\n\n // Update the appropriate value based on thumb type\n if (thumb() === 'low') {\n rangeSlider().setLowValue(computedValue);\n } else {\n rangeSlider().setHighValue(computedValue);\n }\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n const multiplier = event.shiftKey ? 10 : 1;\n const currentValue = value();\n const step = rangeSlider().step() * multiplier;\n\n // determine the document direction\n const isRTL = getComputedStyle(element.nativeElement).direction === 'rtl';\n\n let newValue: number;\n\n switch (event.key) {\n case 'ArrowLeft':\n newValue = isRTL\n ? Math.min(currentValue - step, rangeSlider().max())\n : Math.max(currentValue - step, rangeSlider().min());\n break;\n case 'ArrowDown':\n newValue = Math.max(currentValue - step, rangeSlider().min());\n break;\n case 'ArrowRight':\n newValue = isRTL\n ? Math.max(currentValue + step, rangeSlider().min())\n : Math.min(currentValue + step, rangeSlider().max());\n break;\n case 'ArrowUp':\n newValue = Math.min(currentValue + step, rangeSlider().max());\n break;\n case 'Home':\n newValue = isRTL ? rangeSlider().max() : rangeSlider().min();\n break;\n case 'End':\n newValue = isRTL ? rangeSlider().min() : rangeSlider().max();\n break;\n default:\n return;\n }\n\n // Update the appropriate value based on thumb type\n if (thumb() === 'low') {\n rangeSlider().setLowValue(newValue);\n } else {\n rangeSlider().setHighValue(newValue);\n }\n\n event.preventDefault();\n }\n\n // Event listeners\n listener(element, 'pointerdown', handlePointerDown);\n listener(element, 'keydown', handleKeydown);\n\n // Register thumb with parent\n rangeSlider().addThumb(element);\n\n // Cleanup on destroy\n onDestroy(() => rangeSlider().removeThumb(element));\n\n return {\n thumb,\n value,\n percentage,\n } satisfies NgpRangeSliderThumbState;\n },\n);\n","import { Directive, output } from '@angular/core';\nimport { ngpRangeSliderThumb } from './range-slider-thumb-state';\n\n/**\n * Apply the `ngpRangeSliderThumb` directive to an element that represents a thumb of the range slider.\n * Each thumb can be configured to control either the 'low' or 'high' value.\n */\n@Directive({\n selector: '[ngpRangeSliderThumb]',\n exportAs: 'ngpRangeSliderThumb',\n})\nexport class NgpRangeSliderThumb {\n /**\n * Emits when the thumb drag starts.\n */\n readonly dragStart = output<void>({\n alias: 'ngpRangeSliderThumbDragStart',\n });\n\n /**\n * Emits when the thumb drag ends.\n */\n readonly dragEnd = output<void>({\n alias: 'ngpRangeSliderThumbDragEnd',\n });\n\n constructor() {\n ngpRangeSliderThumb({\n onDragStart: () => this.dragStart.emit(),\n onDragEnd: () => this.dragEnd.emit(),\n });\n }\n}\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectRangeSliderState } from '../range-slider/range-slider-state';\n\n/**\n * Public state surface for the RangeSliderTrack primitive.\n */\nexport interface NgpRangeSliderTrackState {}\n\n/**\n * Inputs for configuring the RangeSliderTrack primitive.\n */\nexport interface NgpRangeSliderTrackProps {}\n\nexport const [\n NgpRangeSliderTrackStateToken,\n ngpRangeSliderTrack,\n injectRangeSliderTrackState,\n provideRangeSliderTrackState,\n] = createPrimitive('NgpRangeSliderTrack', ({}: NgpRangeSliderTrackProps) => {\n const element = injectElementRef<HTMLElement>();\n const rangeSlider = injectRangeSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => rangeSlider().orientation());\n dataBinding(element, 'data-disabled', () => rangeSlider().disabled());\n\n /**\n * Convert a pointer down on the track into a slider value and move the nearest thumb to that value.\n *\n * If the slider is disabled the function returns without action. For vertical orientation the pointer-to-value mapping is inverted so the bottom of the track corresponds to the minimum value. The nearest thumb (\"low\" or \"high\") is updated to the computed value.\n *\n * @param event - The pointer event originating from the user interaction\n */\n function handlePointerDown(event: PointerEvent): void {\n if (rangeSlider().disabled()) {\n return;\n }\n\n // get the position the click occurred within the slider track\n const isHorizontal = rangeSlider().orientation() === 'horizontal';\n const max = rangeSlider().max();\n const min = rangeSlider().min();\n const position = isHorizontal ? event.clientX : event.clientY;\n const rect = element.nativeElement.getBoundingClientRect();\n\n const start = isHorizontal ? rect.left : rect.top;\n const size = isHorizontal ? rect.width : rect.height;\n const rawPercentage = (position - start) / size;\n // Invert percentage for vertical sliders so bottom = min, top = max\n const percentage = isHorizontal ? rawPercentage : 1 - rawPercentage;\n\n // calculate the value based on the position\n const value = min + (max - min) * percentage;\n\n // determine which thumb to move based on proximity\n const closestThumb = rangeSlider().getClosestThumb(percentage * 100);\n\n if (closestThumb === 'low') {\n rangeSlider().setLowValue(value);\n } else {\n rangeSlider().setHighValue(value);\n }\n }\n\n // Event listener\n listener(element, 'pointerdown', handlePointerDown);\n\n // Register track with parent\n rangeSlider().setTrack(element);\n\n return {} satisfies NgpRangeSliderTrackState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpRangeSliderTrack } from './range-slider-track-state';\n\n/**\n * Apply the `ngpRangeSliderTrack` directive to an element that represents the track of the range slider.\n */\n@Directive({\n selector: '[ngpRangeSliderTrack]',\n exportAs: 'ngpRangeSliderTrack',\n})\nexport class NgpRangeSliderTrack {\n constructor() {\n ngpRangeSliderTrack({});\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpRangeSlider, provideRangeSliderState } from './range-slider-state';\n\n/**\n * Apply the `ngpRangeSlider` directive to an element that represents the range slider and contains the track, range, and thumbs.\n */\n@Directive({\n selector: '[ngpRangeSlider]',\n exportAs: 'ngpRangeSlider',\n providers: [provideRangeSliderState()],\n})\nexport class NgpRangeSlider {\n /**\n * The id of the range slider. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-range-slider'));\n\n /**\n * The low value of the range slider.\n */\n readonly low = input<number, NumberInput>(0, {\n alias: 'ngpRangeSliderLow',\n transform: numberAttribute,\n });\n\n /**\n * Emits when the low value changes.\n */\n readonly lowChange = output<number>({\n alias: 'ngpRangeSliderLowChange',\n });\n\n /**\n * The high value of the range slider.\n */\n readonly high = input<number, NumberInput>(100, {\n alias: 'ngpRangeSliderHigh',\n transform: numberAttribute,\n });\n\n /**\n * Emits when the high value changes.\n */\n readonly highChange = output<number>({\n alias: 'ngpRangeSliderHighChange',\n });\n\n /**\n * The minimum value of the range slider.\n */\n readonly min = input<number, NumberInput>(0, {\n alias: 'ngpRangeSliderMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value of the range slider.\n */\n readonly max = input<number, NumberInput>(100, {\n alias: 'ngpRangeSliderMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value of the range slider.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpRangeSliderStep',\n transform: numberAttribute,\n });\n\n /**\n * The orientation of the range slider.\n */\n readonly orientation = input<NgpOrientation>('horizontal', {\n alias: 'ngpRangeSliderOrientation',\n });\n\n /**\n * The disabled state of the range slider.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpRangeSliderDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The state of the range slider.\n */\n private readonly state = ngpRangeSlider({\n id: this.id,\n low: this.low,\n high: this.high,\n min: this.min,\n max: this.max,\n step: this.step,\n orientation: this.orientation,\n disabled: this.disabled,\n onLowChange: value => this.lowChange.emit(value),\n onHighChange: value => this.highChange.emit(value),\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-primitives-slider.mjs","sources":["../../../../packages/ng-primitives/slider/src/slider/slider-state.ts","../../../../packages/ng-primitives/slider/src/slider-range/slider-range-state.ts","../../../../packages/ng-primitives/slider/src/slider-range/slider-range.ts","../../../../packages/ng-primitives/slider/src/slider-thumb/slider-thumb-state.ts","../../../../packages/ng-primitives/slider/src/slider-thumb/slider-thumb.ts","../../../../packages/ng-primitives/slider/src/slider-track/slider-track-state.ts","../../../../packages/ng-primitives/slider/src/slider-track/slider-track.ts","../../../../packages/ng-primitives/slider/src/slider/slider.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider/range-slider-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-range/range-slider-range-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-range/range-slider-range.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-thumb/range-slider-thumb-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-thumb/range-slider-thumb.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-track/range-slider-track-state.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider-track/range-slider-track.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider/range-slider.ts","../../../../packages/ng-primitives/slider/src/ng-primitives-slider.ts"],"sourcesContent":["import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { computed, ElementRef, inject, Signal, signal, WritableSignal } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the Slider primitive.\n */\nexport interface NgpSliderState {\n /**\n * The id of the slider.\n */\n readonly id: Signal<string>;\n /**\n * The slider value.\n */\n readonly value: WritableSignal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation: WritableSignal<NgpOrientation>;\n /**\n * Whether the slider is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * The percentage position of the thumb.\n */\n readonly percentage: Signal<number>;\n /**\n * The minimum value of the slider.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value of the slider.\n */\n readonly max: Signal<number>;\n /**\n * The step value of the slider.\n */\n readonly step: Signal<number>;\n /**\n * @internal The track element reference.\n */\n readonly track: Signal<ElementRef<HTMLElement> | undefined>;\n /**\n * @internal The thumb element reference.\n */\n readonly thumb: Signal<ElementRef<HTMLElement> | undefined>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Observable<number>;\n /**\n * Set the current value (clamped).\n */\n setValue(value: number): void;\n /**\n * Register the track element.\n */\n setTrack(track: ElementRef<HTMLElement> | undefined): void;\n /**\n * Register the thumb element.\n */\n setThumb(thumb: ElementRef<HTMLElement> | undefined): void;\n /**\n * Focus the thumb element.\n */\n focusThumb(origin: FocusOrigin): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void;\n}\n\n/**\n * Inputs for configuring the Slider primitive.\n */\nexport interface NgpSliderProps {\n /**\n * The id of the slider.\n */\n readonly id?: Signal<string>;\n /**\n * The slider value.\n */\n readonly value?: Signal<number>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation?: Signal<NgpOrientation>;\n /**\n * Whether the slider is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number) => void;\n}\n\nexport const [NgpSliderStateToken, ngpSlider, injectSliderState, provideSliderState] =\n createPrimitive(\n 'NgpSlider',\n ({\n id = signal(uniqueId('ngp-slider')),\n value: _value = signal(0),\n min = signal(0),\n max = signal(100),\n step = signal(1),\n orientation: _orientation = signal<NgpOrientation>('horizontal'),\n disabled: _disabled = signal(false),\n onValueChange,\n }: NgpSliderProps): NgpSliderState => {\n const element = injectElementRef();\n const focusMonitor = inject(FocusMonitor);\n const value = controlled(_value);\n const disabled = controlled(_disabled);\n const orientation = controlled(_orientation);\n\n const valueChange = emitter<number>();\n const track = signal<ElementRef<HTMLElement> | undefined>(undefined);\n const thumb = signal<ElementRef<HTMLElement> | undefined>(undefined);\n\n // Form control integration\n const status = ngpFormControl({ id, disabled });\n\n const percentage = computed(() => {\n const range = max() - min();\n if (range <= 0) {\n return 0;\n }\n const pct = ((value() - min()) / range) * 100;\n return Math.min(100, Math.max(0, pct));\n });\n\n // Host bindings\n attrBinding(element, 'id', id);\n dataBinding(element, 'data-orientation', orientation);\n dataBinding(element, 'data-disabled', () => status().disabled);\n\n function setTrack(newTrack: ElementRef<HTMLElement> | undefined): void {\n track.set(newTrack);\n }\n\n function setThumb(newThumb: ElementRef<HTMLElement> | undefined): void {\n thumb.set(newThumb);\n }\n\n function focusThumb(origin: FocusOrigin): void {\n const el = thumb();\n if (el) {\n focusMonitor.focusVia(el, origin, { preventScroll: true });\n }\n }\n\n function setValue(newValue: number): void {\n const clamped = Math.min(max(), Math.max(min(), newValue));\n const stepped = Math.round((clamped - min()) / step()) * step() + min();\n const finalValue = Math.min(max(), Math.max(min(), stepped));\n value.set(finalValue);\n onValueChange?.(finalValue);\n valueChange.emit(finalValue);\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setOrientation(newOrientation: NgpOrientation): void {\n orientation.set(newOrientation);\n }\n\n return {\n id,\n value,\n min,\n max,\n step,\n orientation: deprecatedSetter(orientation, 'setOrientation'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n valueChange: valueChange.asObservable(),\n percentage,\n track,\n thumb,\n setValue,\n setTrack,\n setThumb,\n focusThumb,\n setDisabled,\n setOrientation,\n } satisfies NgpSliderState;\n },\n );\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, styleBinding } from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\n/**\n * Public state surface for the Slider Range primitive.\n */\nexport interface NgpSliderRangeState {}\n\n/**\n * Inputs for configuring the Slider Range primitive.\n */\nexport interface NgpSliderRangeProps {}\n\nexport const [\n NgpSliderRangeStateToken,\n ngpSliderRange,\n injectSliderRangeState,\n provideSliderRangeState,\n] = createPrimitive('NgpSliderRange', ({}: NgpSliderRangeProps): NgpSliderRangeState => {\n const element = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => slider().orientation());\n dataBinding(element, 'data-disabled', () => slider().disabled());\n styleBinding(element, 'width.%', () =>\n slider().orientation() === 'horizontal' ? slider().percentage() : null,\n );\n styleBinding(element, 'height.%', () =>\n slider().orientation() === 'vertical' ? slider().percentage() : null,\n );\n styleBinding(element, 'inset-block-end.%', () =>\n slider().orientation() === 'vertical' ? 0 : null,\n );\n\n return {} satisfies NgpSliderRangeState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpSliderRange, provideSliderRangeState } from './slider-range-state';\n\n/**\n * Apply the `ngpSliderRange` directive to an element that represents the range of the slider.\n */\n@Directive({\n selector: '[ngpSliderRange]',\n exportAs: 'ngpSliderRange',\n providers: [provideSliderRangeState()],\n})\nexport class NgpSliderRange {\n constructor() {\n ngpSliderRange({});\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { DOCUMENT } from '@angular/common';\nimport { computed, inject, Injector, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n createPrimitive,\n dataBinding,\n listener,\n onDestroy,\n styleBinding,\n} from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\ntype SliderKey = 'ArrowLeft' | 'ArrowDown' | 'ArrowRight' | 'ArrowUp' | 'Home' | 'End';\n\n/**\n * Public state surface for the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbState {\n /**\n * Whether the thumb is currently dragging.\n */\n readonly dragging: Signal<boolean>;\n /**\n * Focus the thumb element.\n */\n focus(origin?: FocusOrigin): void;\n}\n\n/**\n * Inputs for configuring the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbProps {\n /**\n * Callback fired when dragging starts.\n */\n readonly onDragStart?: () => void;\n /**\n * Callback fired when dragging ends.\n */\n readonly onDragEnd?: () => void;\n}\n\nexport const [\n NgpSliderThumbStateToken,\n ngpSliderThumb,\n injectSliderThumbState,\n provideSliderThumbState,\n] = createPrimitive(\n 'NgpSliderThumb',\n ({ onDragStart, onDragEnd }: NgpSliderThumbProps): NgpSliderThumbState => {\n const elementRef = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n const focusMonitor = inject(FocusMonitor);\n const injector = inject(Injector);\n const document = inject(DOCUMENT);\n\n let dragging = false;\n let activePointerId: number | null = null;\n let cleanupDocumentListeners: (() => void)[] = [];\n\n const ariaValueNow = computed(() => slider().value());\n const tabindex = computed(() => (slider().disabled() ? -1 : 0));\n\n // Host bindings\n attrBinding(elementRef, 'role', 'slider');\n attrBinding(elementRef, 'aria-valuemin', () => slider().min().toString());\n attrBinding(elementRef, 'aria-valuemax', () => slider().max().toString());\n attrBinding(elementRef, 'aria-valuenow', () => ariaValueNow().toString());\n attrBinding(elementRef, 'aria-orientation', () => slider().orientation());\n attrBinding(elementRef, 'tabindex', () => tabindex().toString());\n dataBinding(elementRef, 'data-orientation', () => slider().orientation());\n dataBinding(elementRef, 'data-disabled', () => slider().disabled());\n styleBinding(elementRef, 'inset-inline-start.%', () =>\n slider().orientation() === 'horizontal' ? slider().percentage() : null,\n );\n styleBinding(elementRef, 'inset-block-start.%', () =>\n slider().orientation() === 'vertical' ? 100 - slider().percentage() : null,\n );\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: slider().disabled,\n });\n\n // Register thumb with parent slider\n slider().setThumb(elementRef);\n onDestroy(() => slider().setThumb(undefined));\n\n // Pointer interactions\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (slider().disabled()) {\n return;\n }\n\n dragging = true;\n activePointerId = event.pointerId;\n onDragStart?.();\n\n // Focus the thumb when clicked/dragged\n focus(event.pointerType === 'touch' ? 'touch' : 'mouse');\n\n // Clean up any existing listeners\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n\n // Set up document-level listeners to handle pointer events anywhere\n const pointerMoveCleanup = listener(document, 'pointermove', onPointerMove, {\n config: false,\n injector,\n });\n\n const pointerUpCleanup = listener(document, 'pointerup', onPointerEnd, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', onPointerEnd, {\n config: false,\n injector,\n });\n\n cleanupDocumentListeners = [pointerMoveCleanup, pointerUpCleanup, pointerCancelCleanup];\n });\n\n function onPointerMove(event: PointerEvent): void {\n if (slider().disabled() || !dragging || event.pointerId !== activePointerId) {\n return;\n }\n\n const track = slider().track();\n const rect = track?.nativeElement.getBoundingClientRect();\n if (!rect) {\n return;\n }\n\n const percentage =\n slider().orientation() === 'horizontal'\n ? (event.clientX - rect.left) / rect.width\n : 1 - (event.clientY - rect.top) / rect.height;\n\n const value =\n slider().min() + (slider().max() - slider().min()) * Math.max(0, Math.min(1, percentage));\n\n slider().setValue(value);\n }\n\n function onPointerEnd(event: PointerEvent): void {\n if (event.pointerId !== activePointerId) {\n return;\n }\n\n dragging = false;\n activePointerId = null;\n onDragEnd?.();\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n cleanupDocumentListeners = [];\n }\n\n // Keyboard interactions\n listener(elementRef, 'keydown', (event: KeyboardEvent) => {\n const multiplier = event.shiftKey ? 10 : 1;\n const step = slider().step() * multiplier;\n const currentValue = slider().value();\n\n // determine the document direction\n const isRTL = getComputedStyle(elementRef.nativeElement).direction === 'rtl';\n\n let newValue: number;\n\n switch (event.key as SliderKey) {\n case 'ArrowLeft':\n newValue = isRTL\n ? Math.min(currentValue + step, slider().max())\n : Math.max(currentValue - step, slider().min());\n break;\n case 'ArrowDown':\n newValue = Math.max(currentValue - step, slider().min());\n break;\n case 'ArrowRight':\n newValue = isRTL\n ? Math.max(currentValue - step, slider().min())\n : Math.min(currentValue + step, slider().max());\n break;\n case 'ArrowUp':\n newValue = Math.min(currentValue + step, slider().max());\n break;\n case 'Home':\n newValue = isRTL ? slider().max() : slider().min();\n break;\n case 'End':\n newValue = isRTL ? slider().min() : slider().max();\n break;\n default:\n return;\n }\n\n // prevent the default action to prevent the page from scrolling\n event.preventDefault();\n\n if (newValue === currentValue) {\n return;\n }\n\n slider().setValue(newValue);\n });\n\n /**\n * Moves keyboard focus to the host element without scrolling the page.\n */\n function focus(origin: FocusOrigin = 'program'): void {\n focusMonitor.focusVia(elementRef, origin, { preventScroll: true });\n }\n\n return {\n dragging: computed(() => dragging),\n focus,\n } satisfies NgpSliderThumbState;\n },\n);\n","import { Directive, output } from '@angular/core';\nimport { ngpSliderThumb, provideSliderThumbState } from './slider-thumb-state';\n\n/**\n * Apply the `ngpSliderThumb` directive to an element that represents the thumb of the slider.\n */\n@Directive({\n selector: '[ngpSliderThumb]',\n exportAs: 'ngpSliderThumb',\n providers: [provideSliderThumbState()],\n})\nexport class NgpSliderThumb {\n /**\n * Emits when the thumb drag starts.\n */\n readonly dragStart = output<void>({\n alias: 'ngpSliderThumbDragStart',\n });\n\n /**\n * Emits when the thumb drag ends.\n */\n readonly dragEnd = output<void>({\n alias: 'ngpSliderThumbDragEnd',\n });\n\n constructor() {\n ngpSliderThumb({\n onDragStart: () => this.dragStart.emit(),\n onDragEnd: () => this.dragEnd.emit(),\n });\n }\n}\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\n/**\n * Public state surface for the Slider Track primitive.\n */\nexport interface NgpSliderTrackState {}\n\n/**\n * Inputs for configuring the Slider Track primitive.\n */\nexport interface NgpSliderTrackProps {}\n\nexport const [\n NgpSliderTrackStateToken,\n ngpSliderTrack,\n injectSliderTrackState,\n provideSliderTrackState,\n] = createPrimitive('NgpSliderTrack', ({}: NgpSliderTrackProps): NgpSliderTrackState => {\n const element = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => slider().orientation());\n dataBinding(element, 'data-disabled', () => slider().disabled());\n\n // Register track for thumb measurements\n slider().setTrack(element);\n\n // Listener for pointer interactions to set value\n listener(element, 'pointerdown', (event: PointerEvent) => {\n if (slider().disabled()) {\n return;\n }\n\n // prevent text selection\n event.preventDefault();\n\n const rect = element.nativeElement.getBoundingClientRect();\n const isHorizontal = slider().orientation() === 'horizontal';\n const position = isHorizontal ? event.clientX - rect.left : event.clientY - rect.top;\n const size = isHorizontal ? rect.width : rect.height;\n const rawPercentage = size === 0 ? 0 : position / size;\n // Invert percentage for vertical sliders so bottom = min, top = max\n const percentage = isHorizontal ? rawPercentage : 1 - rawPercentage;\n const value =\n slider().min() + (slider().max() - slider().min()) * Math.max(0, Math.min(1, percentage));\n\n slider().setValue(value);\n slider().focusThumb(event.pointerType === 'touch' ? 'touch' : 'mouse');\n });\n\n // Prevent mousedown default to stop the browser from stealing focus\n // from the thumb after a pointerdown-initiated focusVia call.\n listener(element, 'mousedown', (event: MouseEvent) => {\n if (!slider().disabled()) {\n event.preventDefault();\n }\n });\n\n return {} satisfies NgpSliderTrackState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpSliderTrack, provideSliderTrackState } from './slider-track-state';\n\n/**\n * Apply the `ngpSliderTrack` directive to an element that represents the track of the slider.\n */\n@Directive({\n selector: '[ngpSliderTrack]',\n exportAs: 'ngpSliderTrack',\n providers: [provideSliderTrackState()],\n})\nexport class NgpSliderTrack {\n constructor() {\n ngpSliderTrack({});\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpSlider, provideSliderState } from './slider-state';\n\n/**\n * Apply the `ngpSlider` directive to an element that represents the slider and contains the track, range, and thumb.\n */\n@Directive({\n selector: '[ngpSlider]',\n exportAs: 'ngpSlider',\n providers: [provideSliderState()],\n})\nexport class NgpSlider {\n /**\n * The id of the slider. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-slider'));\n\n /**\n * The value of the slider.\n */\n readonly value = input<number, NumberInput>(0, {\n alias: 'ngpSliderValue',\n transform: numberAttribute,\n });\n\n /**\n * Emits when the value changes.\n */\n readonly valueChange = output<number>({\n alias: 'ngpSliderValueChange',\n });\n\n /**\n * The minimum value of the slider.\n */\n readonly min = input<number, NumberInput>(0, {\n alias: 'ngpSliderMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value of the slider.\n */\n readonly max = input<number, NumberInput>(100, {\n alias: 'ngpSliderMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value of the slider.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpSliderStep',\n transform: numberAttribute,\n });\n\n /**\n * The orientation of the slider.\n */\n readonly orientation = input<NgpOrientation>('horizontal', {\n alias: 'ngpSliderOrientation',\n });\n\n /**\n * The disabled state of the slider.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpSliderDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The state of the slider. We use this for the slider state rather than relying on the inputs.\n * @internal\n */\n protected readonly state = ngpSlider({\n id: this.id,\n value: this.value,\n min: this.min,\n max: this.max,\n step: this.step,\n orientation: this.orientation,\n disabled: this.disabled,\n onValueChange: value => this.valueChange.emit(value),\n });\n\n /**\n * Set the value of the slider.\n */\n setValue(value: number): void {\n this.state.setValue(value);\n }\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void {\n this.state.setDisabled(disabled);\n }\n\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void {\n this.state.setOrientation(orientation);\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { computed, ElementRef, inject, Signal, signal, WritableSignal } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Inputs for configuring the RangeSlider primitive.\n */\nexport interface NgpRangeSliderProps {\n /**\n * The id of the range slider.\n */\n readonly id?: Signal<string>;\n /**\n * The low value of the range slider.\n */\n readonly low?: Signal<number>;\n /**\n * The high value of the range slider.\n */\n readonly high?: Signal<number>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The range slider orientation.\n */\n readonly orientation?: Signal<NgpOrientation>;\n /**\n * Whether the range slider is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the low value changes.\n */\n readonly onLowChange?: (value: number) => void;\n /**\n * Callback fired when the high value changes.\n */\n readonly onHighChange?: (value: number) => void;\n}\n\n/**\n * Public state surface for the RangeSlider primitive.\n */\nexport interface NgpRangeSliderState {\n /**\n * The id of the range slider.\n */\n readonly id: Signal<string>;\n /**\n * The low value of the range slider.\n */\n readonly low: WritableSignal<number>;\n /**\n * The high value of the range slider.\n */\n readonly high: WritableSignal<number>;\n /**\n * The minimum value of the range slider.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value of the range slider.\n */\n readonly max: Signal<number>;\n /**\n * The step value of the range slider.\n */\n readonly step: Signal<number>;\n /**\n * The orientation of the range slider.\n */\n readonly orientation: WritableSignal<NgpOrientation>;\n /**\n * Whether the range slider is disabled.\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * The low value as a percentage based on the min and max values.\n * @internal\n */\n readonly lowPercentage: Signal<number>;\n /**\n * The high value as a percentage based on the min and max values.\n * @internal\n */\n readonly highPercentage: Signal<number>;\n /**\n * The range between low and high values as a percentage.\n * @internal\n */\n readonly rangePercentage: Signal<number>;\n /**\n * @internal The track element reference.\n */\n readonly track: Signal<ElementRef<HTMLElement> | undefined>;\n /**\n * @internal The thumbs array.\n */\n readonly thumbs: Signal<ElementRef<HTMLElement>[]>;\n /**\n * Emit when the low value changes.\n */\n readonly lowChange: Observable<number>;\n /**\n * Emit when the high value changes.\n */\n readonly highChange: Observable<number>;\n /**\n * Updates the low value, ensuring it doesn't exceed the high value.\n */\n setLowValue(value: number): void;\n /**\n * Updates the high value, ensuring it doesn't go below the low value.\n */\n setHighValue(value: number): void;\n /**\n * Determines which thumb should be moved based on the position clicked.\n */\n getClosestThumb(percentage: number): 'low' | 'high';\n /**\n * Updates the thumbs array when a new thumb is added.\n */\n addThumb(thumb: ElementRef<HTMLElement>): void;\n /**\n * Removes a thumb from the thumbs array.\n */\n removeThumb(thumb: ElementRef<HTMLElement>): void;\n /**\n * Focus the specified thumb element.\n */\n focusThumb(thumb: 'low' | 'high', origin: FocusOrigin): void;\n /**\n * Set the track element reference.\n */\n setTrack(track: ElementRef<HTMLElement>): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void;\n}\n\nexport const [\n NgpRangeSliderStateToken,\n ngpRangeSlider,\n injectRangeSliderState,\n provideRangeSliderState,\n] = createPrimitive(\n 'NgpRangeSlider',\n ({\n id = signal(uniqueId('ngp-range-slider')),\n low: _low = signal(0),\n high: _high = signal(100),\n min = signal(0),\n max = signal(100),\n step = signal(1),\n orientation: _orientation = signal<NgpOrientation>('horizontal'),\n disabled: _disabled = signal(false),\n onLowChange,\n onHighChange,\n }: NgpRangeSliderProps): NgpRangeSliderState => {\n const element = injectElementRef();\n const focusMonitor = inject(FocusMonitor);\n const low = controlled(_low);\n const high = controlled(_high);\n const disabled = controlled(_disabled);\n const orientation = controlled(_orientation);\n\n const lowChange = emitter<number>();\n const highChange = emitter<number>();\n const track = signal<ElementRef<HTMLElement> | undefined>(undefined);\n const thumbs = signal<ElementRef<HTMLElement>[]>([]);\n\n // Form control integration\n const status = ngpFormControl({ id, disabled });\n\n const lowPercentage = computed(() => {\n const range = max() - min();\n if (range <= 0) return 0;\n return ((low() - min()) / range) * 100;\n });\n\n const highPercentage = computed(() => {\n const range = max() - min();\n if (range <= 0) return 100;\n return ((high() - min()) / range) * 100;\n });\n\n const rangePercentage = computed(() => highPercentage() - lowPercentage());\n\n // Host bindings\n attrBinding(element, 'id', id);\n dataBinding(element, 'data-orientation', orientation);\n dataBinding(element, 'data-disabled', status().disabled);\n\n function setLowValue(value: number): void {\n const clampedValue = Math.max(min(), Math.min(value, high()));\n const steppedValue = Math.round((clampedValue - min()) / step()) * step() + min();\n low.set(steppedValue);\n onLowChange?.(steppedValue);\n lowChange.emit(steppedValue);\n }\n\n function setHighValue(value: number): void {\n const clampedValue = Math.min(max(), Math.max(value, low()));\n const steppedValue = Math.round((clampedValue - min()) / step()) * step() + min();\n high.set(steppedValue);\n onHighChange?.(steppedValue);\n highChange.emit(steppedValue);\n }\n\n function getClosestThumb(percentage: number): 'low' | 'high' {\n const value = min() + (max() - min()) * (percentage / 100);\n const distanceToLow = Math.abs(value - low());\n const distanceToHigh = Math.abs(value - high());\n return distanceToLow <= distanceToHigh ? 'low' : 'high';\n }\n\n function addThumb(thumb: ElementRef<HTMLElement>): void {\n thumbs.update(t => [...t, thumb]);\n }\n\n function removeThumb(thumb: ElementRef<HTMLElement>): void {\n thumbs.update(t => t.filter(existing => existing !== thumb));\n }\n\n function focusThumb(thumb: 'low' | 'high', origin: FocusOrigin): void {\n const index = thumb === 'low' ? 0 : 1;\n const el = thumbs()[index];\n if (el) {\n focusMonitor.focusVia(el, origin, { preventScroll: true });\n }\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabled.set(isDisabled);\n }\n\n function setOrientation(newOrientation: NgpOrientation): void {\n orientation.set(newOrientation);\n }\n\n function setTrack(newTrack: ElementRef<HTMLElement>): void {\n track.set(newTrack);\n }\n\n return {\n id,\n low,\n high,\n min,\n max,\n step,\n orientation: deprecatedSetter(orientation, 'setOrientation'),\n disabled: deprecatedSetter(disabled, 'setDisabled'),\n lowPercentage,\n highPercentage,\n rangePercentage,\n track,\n thumbs,\n lowChange: lowChange.asObservable(),\n highChange: highChange.asObservable(),\n setLowValue,\n setHighValue,\n getClosestThumb,\n addThumb,\n removeThumb,\n focusThumb,\n setDisabled,\n setOrientation,\n setTrack,\n } satisfies NgpRangeSliderState;\n },\n);\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, styleBinding } from 'ng-primitives/state';\nimport { injectRangeSliderState } from '../range-slider/range-slider-state';\n\n/**\n * Public state surface for the RangeSliderRange primitive.\n */\nexport interface NgpRangeSliderRangeState {}\n\n/**\n * Inputs for configuring the RangeSliderRange primitive.\n */\nexport interface NgpRangeSliderRangeProps {}\n\nexport const [\n NgpRangeSliderRangeStateToken,\n ngpRangeSliderRange,\n injectRangeSliderRangeState,\n provideRangeSliderRangeState,\n] = createPrimitive('NgpRangeSliderRange', ({}: NgpRangeSliderRangeProps) => {\n const element = injectElementRef();\n const rangeSlider = injectRangeSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => rangeSlider().orientation());\n dataBinding(element, 'data-disabled', () => rangeSlider().disabled());\n\n // Horizontal\n styleBinding(element, 'width.%', () =>\n rangeSlider().orientation() === 'horizontal' ? rangeSlider().rangePercentage() : null,\n );\n styleBinding(element, 'inset-inline-start.%', () =>\n rangeSlider().orientation() === 'horizontal' ? rangeSlider().lowPercentage() : null,\n );\n\n // Vertical - position from top: 100% - highPercentage places the top of the range at the high thumb\n styleBinding(element, 'height.%', () =>\n rangeSlider().orientation() === 'vertical' ? rangeSlider().rangePercentage() : null,\n );\n styleBinding(element, 'inset-block-start.%', () =>\n rangeSlider().orientation() === 'vertical' ? 100 - rangeSlider().highPercentage() : null,\n );\n\n return {} satisfies NgpRangeSliderRangeState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpRangeSliderRange } from './range-slider-range-state';\n\n/**\n * Apply the `ngpRangeSliderRange` directive to an element that represents the range between the low and high values.\n */\n@Directive({\n selector: '[ngpRangeSliderRange]',\n exportAs: 'ngpRangeSliderRange',\n})\nexport class NgpRangeSliderRange {\n constructor() {\n ngpRangeSliderRange({});\n }\n}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { DOCUMENT } from '@angular/common';\nimport { computed, inject, Injector, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n createPrimitive,\n dataBinding,\n listener,\n onDestroy,\n styleBinding,\n} from 'ng-primitives/state';\nimport { injectRangeSliderState } from '../range-slider/range-slider-state';\n\n/**\n * Public state surface for the RangeSliderThumb primitive.\n */\nexport interface NgpRangeSliderThumbState {\n /**\n * Which value this thumb controls ('low' or 'high').\n */\n readonly thumb: Signal<'low' | 'high'>;\n /**\n * The current value for this thumb.\n */\n readonly value: Signal<number>;\n /**\n * The current percentage for this thumb.\n */\n readonly percentage: Signal<number>;\n}\n\n/**\n * Inputs for configuring the RangeSliderThumb primitive.\n */\nexport interface NgpRangeSliderThumbProps {\n /**\n * Callback fired when dragging starts.\n */\n readonly onDragStart?: () => void;\n /**\n * Callback fired when dragging ends.\n */\n readonly onDragEnd?: () => void;\n}\n\nexport const [\n NgpRangeSliderThumbStateToken,\n ngpRangeSliderThumb,\n injectRangeSliderThumbState,\n provideRangeSliderThumbState,\n] = createPrimitive(\n 'NgpRangeSliderThumb',\n ({ onDragStart, onDragEnd }: NgpRangeSliderThumbProps) => {\n const element = injectElementRef();\n const rangeSlider = injectRangeSliderState();\n const focusMonitor = inject(FocusMonitor);\n const injector = inject(Injector);\n const document = inject(DOCUMENT);\n\n // Store dragging state\n let dragging = false;\n let activePointerId: number | null = null;\n let cleanupDocumentListeners: (() => void)[] = [];\n\n // Determine which thumb this is based on registration order\n const thumb = computed(() => (rangeSlider().thumbs().indexOf(element) === 0 ? 'low' : 'high'));\n\n const value = computed(() => (thumb() === 'low' ? rangeSlider().low() : rangeSlider().high()));\n\n const percentage = computed(() =>\n thumb() === 'low' ? rangeSlider().lowPercentage() : rangeSlider().highPercentage(),\n );\n\n // Setup interactions\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: rangeSlider().disabled,\n });\n\n // Host bindings\n attrBinding(element, 'role', 'slider');\n attrBinding(element, 'aria-valuemin', () => rangeSlider().min());\n attrBinding(element, 'aria-valuemax', () => rangeSlider().max());\n attrBinding(element, 'aria-valuenow', value);\n attrBinding(element, 'aria-orientation', () => rangeSlider().orientation());\n attrBinding(element, 'tabindex', () => (rangeSlider().disabled() ? -1 : 0));\n dataBinding(element, 'data-orientation', () => rangeSlider().orientation());\n dataBinding(element, 'data-disabled', () => rangeSlider().disabled());\n dataBinding(element, 'data-thumb', thumb);\n styleBinding(element, 'inset-inline-start.%', () =>\n rangeSlider().orientation() === 'horizontal' ? percentage() : null,\n );\n styleBinding(element, 'inset-block-start.%', () =>\n rangeSlider().orientation() === 'vertical' ? 100 - percentage() : null,\n );\n\n /**\n * Initiates a thumb drag: prevents default, marks dragging active, calls `onDragStart`, and attaches document-level pointer listeners.\n *\n * If the parent slider is disabled, the function no-ops after preventing the default event. Otherwise it replaces any existing document listeners with new move/up/cancel listeners and stores their cleanup functions.\n *\n * @param event - The pointerdown event that started the drag\n */\n function handlePointerDown(event: PointerEvent): void {\n event.preventDefault();\n\n if (rangeSlider().disabled()) {\n return;\n }\n\n dragging = true;\n activePointerId = event.pointerId;\n onDragStart?.();\n\n // Focus the thumb when clicked/dragged\n focus(event.pointerType === 'touch' ? 'touch' : 'mouse');\n\n // Clean up any existing listeners\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n\n // Set up document-level listeners to handle pointer events anywhere\n const pointerMoveCleanup = listener(document, 'pointermove', handlePointerMove, {\n config: false,\n injector,\n });\n\n const pointerUpCleanup = listener(document, 'pointerup', handlePointerEnd, {\n config: false,\n injector,\n });\n\n const pointerCancelCleanup = listener(document, 'pointercancel', handlePointerEnd, {\n config: false,\n injector,\n });\n\n cleanupDocumentListeners = [pointerMoveCleanup, pointerUpCleanup, pointerCancelCleanup];\n }\n\n function handlePointerEnd(event: PointerEvent): void {\n if (event.pointerId !== activePointerId) {\n return;\n }\n\n dragging = false;\n activePointerId = null;\n onDragEnd?.();\n cleanupDocumentListeners.forEach(cleanup => cleanup());\n cleanupDocumentListeners = [];\n }\n\n /**\n * Update the thumb's value from a pointer event while dragging.\n *\n * Computes the pointer position relative to the slider track (inverting vertical coordinates so bottom = 0%, top = 100%), clamps it to [0, 100], maps it into the slider's value range, and sets the corresponding low or high value on the parent slider.\n *\n * @param event - The pointer event used to compute the new thumb position and value\n */\n function handlePointerMove(event: PointerEvent): void {\n if (rangeSlider().disabled() || !dragging || event.pointerId !== activePointerId) {\n return;\n }\n\n const track = rangeSlider().track();\n if (!track) {\n return;\n }\n\n const rect = track.nativeElement.getBoundingClientRect();\n\n // Calculate the pointer position as a percentage of the track\n // p.ex. for horizontal: (pointerX - trackLeft) / trackWidth\n // For vertical, invert so bottom = 0%, top = 100%\n const isHorizontal = rangeSlider().orientation() === 'horizontal';\n const rawPercentage = isHorizontal\n ? ((event.clientX - rect.left) / rect.width) * 100\n : ((event.clientY - rect.top) / rect.height) * 100;\n const percentage = isHorizontal ? rawPercentage : 100 - rawPercentage;\n\n const min = rangeSlider().min();\n const max = rangeSlider().max();\n const rangeSize = max - min;\n\n const clampedPercentage = Math.max(0, Math.min(100, percentage));\n const computedValue = min + rangeSize * (clampedPercentage / 100);\n\n // Update the appropriate value based on thumb type\n if (thumb() === 'low') {\n rangeSlider().setLowValue(computedValue);\n } else {\n rangeSlider().setHighValue(computedValue);\n }\n }\n\n function handleKeydown(event: KeyboardEvent): void {\n const multiplier = event.shiftKey ? 10 : 1;\n const currentValue = value();\n const step = rangeSlider().step() * multiplier;\n\n // determine the document direction\n const isRTL = getComputedStyle(element.nativeElement).direction === 'rtl';\n\n let newValue: number;\n\n switch (event.key) {\n case 'ArrowLeft':\n newValue = isRTL\n ? Math.min(currentValue - step, rangeSlider().max())\n : Math.max(currentValue - step, rangeSlider().min());\n break;\n case 'ArrowDown':\n newValue = Math.max(currentValue - step, rangeSlider().min());\n break;\n case 'ArrowRight':\n newValue = isRTL\n ? Math.max(currentValue + step, rangeSlider().min())\n : Math.min(currentValue + step, rangeSlider().max());\n break;\n case 'ArrowUp':\n newValue = Math.min(currentValue + step, rangeSlider().max());\n break;\n case 'Home':\n newValue = isRTL ? rangeSlider().max() : rangeSlider().min();\n break;\n case 'End':\n newValue = isRTL ? rangeSlider().min() : rangeSlider().max();\n break;\n default:\n return;\n }\n\n // Update the appropriate value based on thumb type\n if (thumb() === 'low') {\n rangeSlider().setLowValue(newValue);\n } else {\n rangeSlider().setHighValue(newValue);\n }\n\n event.preventDefault();\n }\n\n function focus(origin: FocusOrigin = 'program'): void {\n focusMonitor.focusVia(element, origin, { preventScroll: true });\n }\n\n // Event listeners\n listener(element, 'pointerdown', handlePointerDown);\n listener(element, 'keydown', handleKeydown);\n\n // Register thumb with parent\n rangeSlider().addThumb(element);\n\n // Cleanup on destroy\n onDestroy(() => rangeSlider().removeThumb(element));\n\n return {\n thumb,\n value,\n percentage,\n } satisfies NgpRangeSliderThumbState;\n },\n);\n","import { Directive, output } from '@angular/core';\nimport { ngpRangeSliderThumb } from './range-slider-thumb-state';\n\n/**\n * Apply the `ngpRangeSliderThumb` directive to an element that represents a thumb of the range slider.\n * Each thumb can be configured to control either the 'low' or 'high' value.\n */\n@Directive({\n selector: '[ngpRangeSliderThumb]',\n exportAs: 'ngpRangeSliderThumb',\n})\nexport class NgpRangeSliderThumb {\n /**\n * Emits when the thumb drag starts.\n */\n readonly dragStart = output<void>({\n alias: 'ngpRangeSliderThumbDragStart',\n });\n\n /**\n * Emits when the thumb drag ends.\n */\n readonly dragEnd = output<void>({\n alias: 'ngpRangeSliderThumbDragEnd',\n });\n\n constructor() {\n ngpRangeSliderThumb({\n onDragStart: () => this.dragStart.emit(),\n onDragEnd: () => this.dragEnd.emit(),\n });\n }\n}\n","import { injectElementRef } from 'ng-primitives/internal';\nimport { createPrimitive, dataBinding, listener } from 'ng-primitives/state';\nimport { injectRangeSliderState } from '../range-slider/range-slider-state';\n\n/**\n * Public state surface for the RangeSliderTrack primitive.\n */\nexport interface NgpRangeSliderTrackState {}\n\n/**\n * Inputs for configuring the RangeSliderTrack primitive.\n */\nexport interface NgpRangeSliderTrackProps {}\n\nexport const [\n NgpRangeSliderTrackStateToken,\n ngpRangeSliderTrack,\n injectRangeSliderTrackState,\n provideRangeSliderTrackState,\n] = createPrimitive('NgpRangeSliderTrack', ({}: NgpRangeSliderTrackProps) => {\n const element = injectElementRef<HTMLElement>();\n const rangeSlider = injectRangeSliderState();\n\n // Host bindings\n dataBinding(element, 'data-orientation', () => rangeSlider().orientation());\n dataBinding(element, 'data-disabled', () => rangeSlider().disabled());\n\n /**\n * Convert a pointer down on the track into a slider value and move the nearest thumb to that value.\n *\n * If the slider is disabled the function returns without action. For vertical orientation the pointer-to-value mapping is inverted so the bottom of the track corresponds to the minimum value. The nearest thumb (\"low\" or \"high\") is updated to the computed value.\n *\n * @param event - The pointer event originating from the user interaction\n */\n function handlePointerDown(event: PointerEvent): void {\n if (rangeSlider().disabled()) {\n return;\n }\n\n // get the position the click occurred within the slider track\n const isHorizontal = rangeSlider().orientation() === 'horizontal';\n const max = rangeSlider().max();\n const min = rangeSlider().min();\n const position = isHorizontal ? event.clientX : event.clientY;\n const rect = element.nativeElement.getBoundingClientRect();\n\n const start = isHorizontal ? rect.left : rect.top;\n const size = isHorizontal ? rect.width : rect.height;\n const rawPercentage = (position - start) / size;\n // Invert percentage for vertical sliders so bottom = min, top = max\n const percentage = isHorizontal ? rawPercentage : 1 - rawPercentage;\n\n // calculate the value based on the position\n const value = min + (max - min) * percentage;\n\n // determine which thumb to move based on proximity\n const closestThumb = rangeSlider().getClosestThumb(percentage * 100);\n\n if (closestThumb === 'low') {\n rangeSlider().setLowValue(value);\n } else {\n rangeSlider().setHighValue(value);\n }\n\n rangeSlider().focusThumb(closestThumb, event.pointerType === 'touch' ? 'touch' : 'mouse');\n }\n\n // Event listener\n listener(element, 'pointerdown', handlePointerDown);\n\n // Prevent mousedown default to stop the browser from stealing focus\n // from the thumb after a pointerdown-initiated focusVia call.\n listener(element, 'mousedown', (event: MouseEvent) => {\n if (!rangeSlider().disabled()) {\n event.preventDefault();\n }\n });\n\n // Register track with parent\n rangeSlider().setTrack(element);\n\n return {} satisfies NgpRangeSliderTrackState;\n});\n","import { Directive } from '@angular/core';\nimport { ngpRangeSliderTrack } from './range-slider-track-state';\n\n/**\n * Apply the `ngpRangeSliderTrack` directive to an element that represents the track of the range slider.\n */\n@Directive({\n selector: '[ngpRangeSliderTrack]',\n exportAs: 'ngpRangeSliderTrack',\n})\nexport class NgpRangeSliderTrack {\n constructor() {\n ngpRangeSliderTrack({});\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, booleanAttribute, input, numberAttribute, output } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { ngpRangeSlider, provideRangeSliderState } from './range-slider-state';\n\n/**\n * Apply the `ngpRangeSlider` directive to an element that represents the range slider and contains the track, range, and thumbs.\n */\n@Directive({\n selector: '[ngpRangeSlider]',\n exportAs: 'ngpRangeSlider',\n providers: [provideRangeSliderState()],\n})\nexport class NgpRangeSlider {\n /**\n * The id of the range slider. If not provided, a unique id will be generated.\n */\n readonly id = input<string>(uniqueId('ngp-range-slider'));\n\n /**\n * The low value of the range slider.\n */\n readonly low = input<number, NumberInput>(0, {\n alias: 'ngpRangeSliderLow',\n transform: numberAttribute,\n });\n\n /**\n * Emits when the low value changes.\n */\n readonly lowChange = output<number>({\n alias: 'ngpRangeSliderLowChange',\n });\n\n /**\n * The high value of the range slider.\n */\n readonly high = input<number, NumberInput>(100, {\n alias: 'ngpRangeSliderHigh',\n transform: numberAttribute,\n });\n\n /**\n * Emits when the high value changes.\n */\n readonly highChange = output<number>({\n alias: 'ngpRangeSliderHighChange',\n });\n\n /**\n * The minimum value of the range slider.\n */\n readonly min = input<number, NumberInput>(0, {\n alias: 'ngpRangeSliderMin',\n transform: numberAttribute,\n });\n\n /**\n * The maximum value of the range slider.\n */\n readonly max = input<number, NumberInput>(100, {\n alias: 'ngpRangeSliderMax',\n transform: numberAttribute,\n });\n\n /**\n * The step value of the range slider.\n */\n readonly step = input<number, NumberInput>(1, {\n alias: 'ngpRangeSliderStep',\n transform: numberAttribute,\n });\n\n /**\n * The orientation of the range slider.\n */\n readonly orientation = input<NgpOrientation>('horizontal', {\n alias: 'ngpRangeSliderOrientation',\n });\n\n /**\n * The disabled state of the range slider.\n */\n readonly disabled = input<boolean, BooleanInput>(false, {\n alias: 'ngpRangeSliderDisabled',\n transform: booleanAttribute,\n });\n\n /**\n * The state of the range slider.\n */\n private readonly state = ngpRangeSlider({\n id: this.id,\n low: this.low,\n high: this.high,\n min: this.min,\n max: this.max,\n step: this.step,\n orientation: this.orientation,\n disabled: this.disabled,\n onLowChange: value => this.lowChange.emit(value),\n onHighChange: value => this.highChange.emit(value),\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "ng-primitives",
|
|
3
3
|
"description": "Angular Primitives is a low-level headless UI component library with a focus on accessibility, customization, and developer experience. ",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
|
-
"version": "0.115.
|
|
5
|
+
"version": "0.115.2",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"angular",
|
|
8
8
|
"primitives",
|
package/slider/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { Signal, WritableSignal, ElementRef } from '@angular/core';
|
|
3
|
+
import { FocusOrigin } from '@angular/cdk/a11y';
|
|
3
4
|
import { NgpOrientation } from 'ng-primitives/common';
|
|
4
5
|
import { Observable } from 'rxjs';
|
|
5
6
|
import { NumberInput, BooleanInput } from '@angular/cdk/coercion';
|
|
@@ -69,7 +70,7 @@ interface NgpSliderThumbState {
|
|
|
69
70
|
/**
|
|
70
71
|
* Focus the thumb element.
|
|
71
72
|
*/
|
|
72
|
-
focus(): void;
|
|
73
|
+
focus(origin?: FocusOrigin): void;
|
|
73
74
|
}
|
|
74
75
|
/**
|
|
75
76
|
* Inputs for configuring the Slider Thumb primitive.
|
|
@@ -179,6 +180,10 @@ interface NgpSliderState {
|
|
|
179
180
|
* @internal The track element reference.
|
|
180
181
|
*/
|
|
181
182
|
readonly track: Signal<ElementRef<HTMLElement> | undefined>;
|
|
183
|
+
/**
|
|
184
|
+
* @internal The thumb element reference.
|
|
185
|
+
*/
|
|
186
|
+
readonly thumb: Signal<ElementRef<HTMLElement> | undefined>;
|
|
182
187
|
/**
|
|
183
188
|
* Emit when the value changes.
|
|
184
189
|
*/
|
|
@@ -191,6 +196,14 @@ interface NgpSliderState {
|
|
|
191
196
|
* Register the track element.
|
|
192
197
|
*/
|
|
193
198
|
setTrack(track: ElementRef<HTMLElement> | undefined): void;
|
|
199
|
+
/**
|
|
200
|
+
* Register the thumb element.
|
|
201
|
+
*/
|
|
202
|
+
setThumb(thumb: ElementRef<HTMLElement> | undefined): void;
|
|
203
|
+
/**
|
|
204
|
+
* Focus the thumb element.
|
|
205
|
+
*/
|
|
206
|
+
focusThumb(origin: FocusOrigin): void;
|
|
194
207
|
/**
|
|
195
208
|
* Set the disabled state.
|
|
196
209
|
*/
|
|
@@ -656,6 +669,10 @@ interface NgpRangeSliderState {
|
|
|
656
669
|
* Removes a thumb from the thumbs array.
|
|
657
670
|
*/
|
|
658
671
|
removeThumb(thumb: ElementRef<HTMLElement>): void;
|
|
672
|
+
/**
|
|
673
|
+
* Focus the specified thumb element.
|
|
674
|
+
*/
|
|
675
|
+
focusThumb(thumb: 'low' | 'high', origin: FocusOrigin): void;
|
|
659
676
|
/**
|
|
660
677
|
* Set the track element reference.
|
|
661
678
|
*/
|