ng-primitives 0.115.1 → 0.116.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ng-primitives-slider.mjs +8 -0
- package/fesm2022/ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/ng-primitives-state.mjs +56 -10
- package/fesm2022/ng-primitives-state.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle-group.mjs +49 -32
- package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle.mjs +36 -21
- package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/ng-generate/templates/toggle/toggle.__fileSuffix@dasherize__.ts.template +1 -1
- package/schematics/ng-generate/templates/toggle-group/toggle-group.__fileSuffix@dasherize__.ts.template +1 -1
- package/state/index.d.ts +33 -2
- package/toggle/index.d.ts +23 -6
- package/toggle-group/index.d.ts +24 -6
|
@@ -149,6 +149,8 @@ const [NgpSliderThumbStateToken, ngpSliderThumb, injectSliderThumbState, provide
|
|
|
149
149
|
dragging = true;
|
|
150
150
|
activePointerId = event.pointerId;
|
|
151
151
|
onDragStart?.();
|
|
152
|
+
// Focus the thumb when clicked/dragged
|
|
153
|
+
focus(event.pointerType === 'touch' ? 'touch' : 'mouse');
|
|
152
154
|
// Clean up any existing listeners
|
|
153
155
|
cleanupDocumentListeners.forEach(cleanup => cleanup());
|
|
154
156
|
// Set up document-level listeners to handle pointer events anywhere
|
|
@@ -575,6 +577,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
575
577
|
const [NgpRangeSliderThumbStateToken, ngpRangeSliderThumb, injectRangeSliderThumbState, provideRangeSliderThumbState,] = createPrimitive('NgpRangeSliderThumb', ({ onDragStart, onDragEnd }) => {
|
|
576
578
|
const element = injectElementRef();
|
|
577
579
|
const rangeSlider = injectRangeSliderState();
|
|
580
|
+
const focusMonitor = inject(FocusMonitor);
|
|
578
581
|
const injector = inject(Injector);
|
|
579
582
|
const document = inject(DOCUMENT);
|
|
580
583
|
// Store dragging state
|
|
@@ -619,6 +622,8 @@ const [NgpRangeSliderThumbStateToken, ngpRangeSliderThumb, injectRangeSliderThum
|
|
|
619
622
|
dragging = true;
|
|
620
623
|
activePointerId = event.pointerId;
|
|
621
624
|
onDragStart?.();
|
|
625
|
+
// Focus the thumb when clicked/dragged
|
|
626
|
+
focus(event.pointerType === 'touch' ? 'touch' : 'mouse');
|
|
622
627
|
// Clean up any existing listeners
|
|
623
628
|
cleanupDocumentListeners.forEach(cleanup => cleanup());
|
|
624
629
|
// Set up document-level listeners to handle pointer events anywhere
|
|
@@ -725,6 +730,9 @@ const [NgpRangeSliderThumbStateToken, ngpRangeSliderThumb, injectRangeSliderThum
|
|
|
725
730
|
}
|
|
726
731
|
event.preventDefault();
|
|
727
732
|
}
|
|
733
|
+
function focus(origin = 'program') {
|
|
734
|
+
focusMonitor.focusVia(element, origin, { preventScroll: true });
|
|
735
|
+
}
|
|
728
736
|
// Event listeners
|
|
729
737
|
listener(element, 'pointerdown', handlePointerDown);
|
|
730
738
|
listener(element, 'keydown', handleKeydown);
|
|
@@ -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 { 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 // 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 { 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 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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"}
|
|
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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"}
|
|
@@ -176,8 +176,42 @@ function createPrimitive(name, fn, options = {}) {
|
|
|
176
176
|
};
|
|
177
177
|
return [token, factory, injectFn, provideFn];
|
|
178
178
|
}
|
|
179
|
-
function controlled(value) {
|
|
180
|
-
return linkedSignal(() => value());
|
|
179
|
+
function controlled(value, defaultValue) {
|
|
180
|
+
return value ? linkedSignal(() => value()) : signal(defaultValue);
|
|
181
|
+
}
|
|
182
|
+
function controlledState({ value, onChange, defaultValue, }) {
|
|
183
|
+
const change = emitter();
|
|
184
|
+
const UNSET = Symbol('UNSET');
|
|
185
|
+
const userValue = signal(UNSET, ...(ngDevMode ? [{ debugName: "userValue" }] : []));
|
|
186
|
+
// Latching flag: once the controlled value has been defined, the component
|
|
187
|
+
// is permanently controlled and set() must not update internal state.
|
|
188
|
+
// This is intentionally mutated inside `resolved` — it must latch
|
|
189
|
+
// synchronously during signal evaluation so that set() sees the correct
|
|
190
|
+
// state. A pure computation cannot express "once true, always true" without
|
|
191
|
+
// external state.
|
|
192
|
+
let isControlled = value() !== undefined;
|
|
193
|
+
const resolved = linkedSignal(() => {
|
|
194
|
+
const v = value();
|
|
195
|
+
if (v !== undefined) {
|
|
196
|
+
isControlled = true;
|
|
197
|
+
return v;
|
|
198
|
+
}
|
|
199
|
+
const uv = userValue();
|
|
200
|
+
return uv !== UNSET ? uv : defaultValue?.();
|
|
201
|
+
}, ...(ngDevMode ? [{ debugName: "resolved" }] : []));
|
|
202
|
+
function set(newValue, options) {
|
|
203
|
+
if (resolved() === newValue && options?.emit !== false) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
if (!isControlled) {
|
|
207
|
+
userValue.set(newValue);
|
|
208
|
+
}
|
|
209
|
+
if (options?.emit !== false) {
|
|
210
|
+
onChange?.(newValue);
|
|
211
|
+
change.emit(newValue);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return [resolved.asReadonly(), set, change.asObservable()];
|
|
181
215
|
}
|
|
182
216
|
function setAttribute(element, attr, value) {
|
|
183
217
|
// if the attribute is "disabled" and the value is 'false', we need to remove the attribute
|
|
@@ -281,18 +315,30 @@ function onDestroy(callback) {
|
|
|
281
315
|
const destroyRef = inject(DestroyRef);
|
|
282
316
|
destroyRef.onDestroy(callback);
|
|
283
317
|
}
|
|
284
|
-
|
|
285
|
-
* Previously, with our state approach, we allowed signals to be written directly using their setters.
|
|
286
|
-
* However, with our new approach, we want people to use the appropriate set method instead. This function takes in a writable
|
|
287
|
-
* signal and returns a proxy that warns the user when set is called directly.
|
|
288
|
-
*/
|
|
289
|
-
function deprecatedSetter(signal, methodName) {
|
|
318
|
+
function deprecatedSetter(signal, methodName, setter) {
|
|
290
319
|
return new Proxy(signal, {
|
|
291
320
|
get(target, prop) {
|
|
292
321
|
if (prop === 'set') {
|
|
293
322
|
return (value) => {
|
|
294
323
|
console.warn(`Deprecation warning: Use ${methodName}() instead of setting the value directly.`);
|
|
295
|
-
|
|
324
|
+
if (setter) {
|
|
325
|
+
setter(value);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
target.set(value);
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
if (prop === 'update') {
|
|
333
|
+
return (updateFn) => {
|
|
334
|
+
console.warn(`Deprecation warning: Use ${methodName}() instead of setting the value directly.`);
|
|
335
|
+
const newValue = updateFn(target());
|
|
336
|
+
if (setter) {
|
|
337
|
+
setter(newValue);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
target.set(newValue);
|
|
341
|
+
}
|
|
296
342
|
};
|
|
297
343
|
}
|
|
298
344
|
return target[prop];
|
|
@@ -345,5 +391,5 @@ function isomorphicEffect(callback) {
|
|
|
345
391
|
* Generated bundle index. Do not edit.
|
|
346
392
|
*/
|
|
347
393
|
|
|
348
|
-
export { attrBinding, controlled, createPrimitive, createState, createStateInjector, createStateProvider, createStateToken, dataBinding, deprecatedSetter, emitter, injectInheritedState, listener, onDestroy, onMount, styleBinding };
|
|
394
|
+
export { attrBinding, controlled, controlledState, createPrimitive, createState, createStateInjector, createStateProvider, createStateToken, dataBinding, deprecatedSetter, emitter, injectInheritedState, listener, onDestroy, onMount, styleBinding };
|
|
349
395
|
//# sourceMappingURL=ng-primitives-state.mjs.map
|