ng-primitives 0.91.2 → 0.93.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/a11y/index.d.ts +3 -1
- package/accordion/index.d.ts +8 -1
- package/autofill/index.d.ts +4 -0
- package/avatar/index.d.ts +11 -2
- package/breadcrumbs/index.d.ts +21 -7
- package/button/index.d.ts +3 -1
- package/checkbox/index.d.ts +3 -1
- package/fesm2022/ng-primitives-checkbox.mjs +7 -8
- package/fesm2022/ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-file-upload.mjs +209 -202
- package/fesm2022/ng-primitives-file-upload.mjs.map +1 -1
- package/fesm2022/ng-primitives-focus-trap.mjs +107 -138
- package/fesm2022/ng-primitives-focus-trap.mjs.map +1 -1
- package/fesm2022/ng-primitives-form-field.mjs +323 -399
- package/fesm2022/ng-primitives-form-field.mjs.map +1 -1
- package/fesm2022/ng-primitives-interactions.mjs +57 -58
- package/fesm2022/ng-primitives-interactions.mjs.map +1 -1
- package/fesm2022/ng-primitives-listbox.mjs +2 -2
- package/fesm2022/ng-primitives-listbox.mjs.map +1 -1
- package/fesm2022/ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/ng-primitives-portal.mjs +5 -1
- package/fesm2022/ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/ng-primitives-slider.mjs +4 -5
- package/fesm2022/ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/ng-primitives-state.mjs +36 -8
- package/fesm2022/ng-primitives-state.mjs.map +1 -1
- package/fesm2022/ng-primitives-switch.mjs +4 -5
- package/fesm2022/ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/ng-primitives-tabs.mjs +194 -192
- package/fesm2022/ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle-group.mjs +4 -5
- package/fesm2022/ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/ng-primitives-toggle.mjs +4 -5
- package/fesm2022/ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/ng-primitives-tooltip.mjs +4 -4
- package/fesm2022/ng-primitives-tooltip.mjs.map +1 -1
- package/fesm2022/ng-primitives-utils.mjs +23 -14
- package/fesm2022/ng-primitives-utils.mjs.map +1 -1
- package/file-upload/index.d.ts +100 -52
- package/focus-trap/index.d.ts +33 -75
- package/form-field/index.d.ts +320 -123
- package/input/index.d.ts +6 -0
- package/interactions/index.d.ts +16 -16
- package/package.json +1 -1
- package/roving-focus/index.d.ts +6 -2
- package/schematics/ng-generate/templates/tabs/tabs.__fileSuffix@dasherize__.ts.template +2 -2
- package/slider/index.d.ts +14 -6
- package/state/index.d.ts +23 -8
- package/switch/index.d.ts +8 -4
- package/tabs/index.d.ts +333 -84
- package/textarea/index.d.ts +6 -0
- package/toggle/index.d.ts +5 -3
- package/toggle-group/index.d.ts +6 -2
- package/toolbar/index.d.ts +5 -0
- package/utils/index.d.ts +1 -1
|
@@ -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.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.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider/range-slider.ts","../../../../packages/ng-primitives/slider/src/ng-primitives-slider.ts"],"sourcesContent":["import { computed, ElementRef, Signal, signal, WritableSignal } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Subject } from 'rxjs';\n\n/**\n * Public state surface for the Slider primitive.\n */\nexport interface NgpSliderState {\n /**\n * The id of the slider.\n */\n readonly id: Signal<string>;\n /**\n * The slider value.\n */\n readonly value: WritableSignal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation: WritableSignal<NgpOrientation>;\n /**\n * Whether the slider is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * The percentage position of the thumb.\n */\n readonly percentage: Signal<number>;\n /**\n * The minimum value of the slider.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value of the slider.\n */\n readonly max: Signal<number>;\n /**\n * The step value of the slider.\n */\n readonly step: Signal<number>;\n /**\n * @internal The track element reference.\n */\n readonly track: Signal<ElementRef<HTMLElement> | undefined>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Subject<number>;\n /**\n * Set the current value (clamped).\n */\n setValue(value: number): void;\n /**\n * Register the track element.\n */\n setTrack(track: ElementRef<HTMLElement> | undefined): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void;\n}\n\n/**\n * Inputs for configuring the Slider primitive.\n */\nexport interface NgpSliderProps {\n /**\n * The id of the slider.\n */\n readonly id?: Signal<string>;\n /**\n * The slider value.\n */\n readonly value?: Signal<number>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation?: Signal<NgpOrientation>;\n /**\n * Whether the slider is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number) => void;\n}\n\nexport const [NgpSliderStateToken, ngpSlider, injectSliderState, provideSliderState] =\n createPrimitive(\n 'NgpSlider',\n ({\n id = signal(uniqueId('ngp-slider')),\n value: _value = signal(0),\n min = signal(0),\n max = signal(100),\n step = signal(1),\n orientation: _orientation = signal<NgpOrientation>('horizontal'),\n disabled: _disabled = signal(false),\n onValueChange,\n }: NgpSliderProps): NgpSliderState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const disabledInput = controlled(_disabled);\n const orientation = controlled(_orientation);\n\n const valueChange = new Subject<number>();\n const track = signal<ElementRef<HTMLElement> | undefined>(undefined);\n\n // Form control integration\n const status = ngpFormControl({ id, disabled: disabledInput });\n\n const percentage = computed(() => {\n const range = max() - min();\n if (range <= 0) {\n return 0;\n }\n const pct = ((value() - min()) / range) * 100;\n return Math.min(100, Math.max(0, pct));\n });\n\n // Host bindings\n attrBinding(element, 'id', id);\n dataBinding(element, 'data-orientation', orientation);\n dataBinding(element, 'data-disabled', () => status().disabled);\n\n function setTrack(newTrack: ElementRef<HTMLElement> | undefined): void {\n track.set(newTrack);\n }\n\n function setValue(newValue: number): void {\n const clamped = Math.min(max(), Math.max(min(), newValue));\n value.set(clamped);\n onValueChange?.(clamped);\n valueChange.next(clamped);\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabledInput.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(disabledInput, 'setDisabled'),\n valueChange,\n percentage,\n track,\n setValue,\n setTrack,\n setDisabled,\n setOrientation,\n };\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\n return {};\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 { computed, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n createPrimitive,\n dataBinding,\n listener,\n styleBinding,\n} from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\ntype SliderKey = 'ArrowLeft' | 'ArrowDown' | 'ArrowRight' | 'ArrowUp' | 'Home' | 'End';\n\n/**\n * Public state surface for the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbState {\n /**\n * Whether the thumb is currently dragging.\n */\n readonly dragging: Signal<boolean>;\n /**\n * Focus the thumb element.\n */\n focus(): void;\n}\n\n/**\n * Inputs for configuring the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbProps {}\n\nexport const [\n NgpSliderThumbStateToken,\n ngpSliderThumb,\n injectSliderThumbState,\n provideSliderThumbState,\n] = createPrimitive('NgpSliderThumb', ({}: NgpSliderThumbProps): NgpSliderThumbState => {\n const elementRef = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n\n let dragging = false;\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' ? slider().percentage() : null,\n );\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: slider().disabled,\n });\n\n // Pointer interactions\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (slider().disabled()) {\n return;\n }\n\n dragging = true;\n elementRef.nativeElement.setPointerCapture(event.pointerId);\n });\n\n listener(elementRef, 'pointerup', (event: PointerEvent) => {\n if (slider().disabled()) {\n return;\n }\n dragging = false;\n if (elementRef.nativeElement.hasPointerCapture(event.pointerId)) {\n elementRef.nativeElement.releasePointerCapture(event.pointerId);\n }\n });\n\n listener(elementRef, 'pointermove', (event: PointerEvent) => {\n if (slider().disabled() || !dragging) {\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 // 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 if (newValue === currentValue) {\n return;\n }\n\n slider().setValue(newValue);\n event.preventDefault();\n });\n\n function focus(): void {\n elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n return {\n dragging: computed(() => dragging),\n focus,\n };\n});\n","import { Directive } 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 constructor() {\n ngpSliderThumb({});\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 position =\n slider().orientation() === 'horizontal'\n ? event.clientX - rect.left\n : event.clientY - rect.top;\n const size = slider().orientation() === 'horizontal' ? rect.width : rect.height;\n const percentage = size === 0 ? 0 : position / size;\n const value =\n slider().min() + (slider().max() - slider().min()) * Math.max(0, Math.min(1, percentage));\n\n slider().setValue(value);\n });\n\n return {};\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","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpRangeSlider } from './range-slider';\n\n/**\n * The state token for the Range Slider primitive.\n */\nexport const NgpRangeSliderStateToken = createStateToken<NgpRangeSlider>('RangeSlider');\n\n/**\n * Provides the Range Slider state.\n */\nexport const provideRangeSliderState = createStateProvider(NgpRangeSliderStateToken);\n\n/**\n * Injects the Range Slider state.\n */\nexport const injectRangeSliderState = createStateInjector<NgpRangeSlider>(NgpRangeSliderStateToken);\n\n/**\n * The Range Slider state registration function.\n */\nexport const rangeSliderState = createState(NgpRangeSliderStateToken);\n","import { Directive } from '@angular/core';\nimport { injectRangeSliderState } from '../range-slider/range-slider-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 host: {\n '[attr.data-orientation]': 'rangeSliderState().orientation()',\n '[attr.data-disabled]': 'rangeSliderState().disabled() ? \"\" : null',\n '[style.width.%]':\n 'rangeSliderState().orientation() === \"horizontal\" ? rangeSliderState().rangePercentage() : undefined',\n '[style.height.%]':\n 'rangeSliderState().orientation() === \"vertical\" ? rangeSliderState().rangePercentage() : undefined',\n '[style.inset-inline-start.%]':\n 'rangeSliderState().orientation() === \"horizontal\" ? rangeSliderState().lowPercentage() : undefined',\n '[style.inset-block-start.%]':\n 'rangeSliderState().orientation() === \"vertical\" ? rangeSliderState().lowPercentage() : undefined',\n },\n})\nexport class NgpRangeSliderRange {\n /**\n * Access the range slider state.\n */\n protected readonly rangeSliderState = injectRangeSliderState();\n}\n","import { computed, Directive, HostListener, OnDestroy } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectRangeSliderState } from '../range-slider/range-slider-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 host: {\n role: 'slider',\n '[attr.aria-valuemin]': 'state().min()',\n '[attr.aria-valuemax]': 'state().max()',\n '[attr.aria-valuenow]': 'value()',\n '[attr.aria-orientation]': 'state().orientation()',\n '[tabindex]': 'state().disabled() ? -1 : 0',\n '[attr.data-orientation]': 'state().orientation()',\n '[attr.data-disabled]': 'state().disabled() ? \"\" : null',\n '[attr.data-thumb]': 'thumb()',\n '[style.inset-inline-start.%]':\n 'state().orientation() === \"horizontal\" ? percentage() : undefined',\n '[style.inset-block-start.%]':\n 'state().orientation() === \"vertical\" ? percentage() : undefined',\n },\n})\nexport class NgpRangeSliderThumb implements OnDestroy {\n /**\n * Access the range slider state.\n */\n protected readonly state = injectRangeSliderState();\n\n /**\n * Access the thumb element.\n */\n private readonly elementRef = injectElementRef();\n\n /**\n * Determines which value this thumb controls ('low' or 'high').\n */\n protected readonly thumb = computed(() =>\n this.state().thumbs().indexOf(this) === 0 ? 'low' : 'high',\n );\n\n /**\n * Store the dragging state.\n */\n protected dragging = false;\n\n /**\n * Get the current value for this thumb.\n */\n protected readonly value = computed(() =>\n this.thumb() === 'low' ? this.state().low() : this.state().high(),\n );\n\n /**\n * Get the current percentage for this thumb.\n */\n protected readonly percentage = computed(() =>\n this.thumb() === 'low' ? this.state().lowPercentage() : this.state().highPercentage(),\n );\n\n constructor() {\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: this.state().disabled,\n });\n\n this.state().addThumb(this);\n }\n\n ngOnDestroy(): void {\n this.state().removeThumb(this);\n }\n\n @HostListener('pointerdown', ['$event'])\n protected handlePointerDown(event: PointerEvent): void {\n event.preventDefault();\n\n if (this.state().disabled()) {\n return;\n }\n\n this.dragging = true;\n }\n\n @HostListener('document:pointerup')\n protected handlePointerUp(): void {\n if (this.state().disabled()) {\n return;\n }\n\n this.dragging = false;\n }\n\n @HostListener('document:pointermove', ['$event'])\n protected handlePointerMove(event: PointerEvent): void {\n if (this.state().disabled() || !this.dragging) {\n return;\n }\n\n const rect = this.state().track()?.element.nativeElement.getBoundingClientRect();\n\n if (!rect) {\n return;\n }\n\n const percentage =\n this.state().orientation() === 'horizontal'\n ? (event.clientX - rect.left) / rect.width\n : (event.clientY - rect.top) / rect.height;\n\n const value =\n this.state().min() +\n (this.state().max() - this.state().min()) * Math.max(0, Math.min(1, percentage));\n\n // Update the appropriate value based on thumb type\n if (this.thumb() === 'low') {\n this.state().setLowValue(value);\n } else {\n this.state().setHighValue(value);\n }\n }\n\n /**\n * Handle keyboard events.\n * @param event\n */\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n const multiplier = event.shiftKey ? 10 : 1;\n const currentValue = this.value();\n const step = this.state().step() * multiplier;\n\n // determine the document direction\n const isRTL = getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\n\n let newValue: number;\n\n switch (event.key) {\n case 'ArrowLeft':\n newValue = isRTL\n ? Math.min(currentValue - step, this.state().max())\n : Math.max(currentValue - step, this.state().min());\n break;\n case 'ArrowDown':\n newValue = Math.max(currentValue - step, this.state().min());\n break;\n case 'ArrowRight':\n newValue = isRTL\n ? Math.max(currentValue + step, this.state().min())\n : Math.min(currentValue + step, this.state().max());\n break;\n case 'ArrowUp':\n newValue = Math.min(currentValue + step, this.state().max());\n break;\n case 'Home':\n newValue = isRTL ? this.state().max() : this.state().min();\n break;\n case 'End':\n newValue = isRTL ? this.state().min() : this.state().max();\n break;\n default:\n return;\n }\n\n // Update the appropriate value based on thumb type\n if (this.thumb() === 'low') {\n this.state().setLowValue(newValue);\n } else {\n this.state().setHighValue(newValue);\n }\n\n event.preventDefault();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectRangeSliderState } from '../range-slider/range-slider-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 host: {\n '[attr.data-orientation]': 'rangeSliderState().orientation()',\n '[attr.data-disabled]': 'rangeSliderState().disabled() ? \"\" : null',\n },\n})\nexport class NgpRangeSliderTrack {\n /**\n * Access the range slider state.\n */\n protected readonly rangeSliderState = injectRangeSliderState();\n\n /**\n * The element that represents the slider track.\n */\n readonly element = injectElementRef<HTMLElement>();\n\n constructor() {\n this.rangeSliderState().track.set(this);\n }\n\n /**\n * When the slider track is clicked, update the closest thumb value.\n * @param event The click event.\n */\n @HostListener('pointerdown', ['$event'])\n protected handlePointerDown(event: PointerEvent): void {\n if (this.rangeSliderState().disabled()) {\n return;\n }\n\n // get the position the click occurred within the slider track\n const position =\n this.rangeSliderState().orientation() === 'horizontal' ? event.clientX : event.clientY;\n const rect = this.element.nativeElement.getBoundingClientRect();\n const percentage =\n (position - (this.rangeSliderState().orientation() === 'horizontal' ? rect.left : rect.top)) /\n (this.rangeSliderState().orientation() === 'horizontal' ? rect.width : rect.height);\n\n // calculate the value based on the position\n const value =\n this.rangeSliderState().min() +\n (this.rangeSliderState().max() - this.rangeSliderState().min()) * percentage;\n\n // determine which thumb to move based on proximity\n const closestThumb = this.rangeSliderState().getClosestThumb(percentage * 100);\n\n if (closestThumb === 'low') {\n this.rangeSliderState().setLowValue(value);\n } else {\n this.rangeSliderState().setHighValue(value);\n }\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n Directive,\n booleanAttribute,\n computed,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { NgpRangeSliderThumb } from '../range-slider-thumb/range-slider-thumb';\nimport type { NgpRangeSliderTrack } from '../range-slider-track/range-slider-track';\nimport { provideRangeSliderState, rangeSliderState } 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 host: {\n '[id]': 'id()',\n '[attr.data-orientation]': 'state.orientation()',\n },\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 * Access the slider track.\n * @internal\n */\n readonly track = signal<NgpRangeSliderTrack | undefined>(undefined);\n\n /**\n * The thumbs of the range slider.\n * @internal\n */\n readonly thumbs = signal<NgpRangeSliderThumb[]>([]);\n\n /**\n * The low value as a percentage based on the min and max values.\n * @internal\n */\n readonly lowPercentage = computed(\n () => ((this.state.low() - this.state.min()) / (this.state.max() - this.state.min())) * 100,\n );\n\n /**\n * The high value as a percentage based on the min and max values.\n * @internal\n */\n readonly highPercentage = computed(\n () => ((this.state.high() - this.state.min()) / (this.state.max() - this.state.min())) * 100,\n );\n\n /**\n * The range between low and high values as a percentage.\n * @internal\n */\n readonly rangePercentage = computed(() => this.highPercentage() - this.lowPercentage());\n\n /**\n * The state of the range slider. We use this for the range slider state rather than relying on the inputs.\n * @internal\n */\n protected readonly state = rangeSliderState<NgpRangeSlider>(this);\n\n constructor() {\n ngpFormControl({ id: this.state.id, disabled: this.state.disabled });\n }\n\n /**\n * Updates the low value, ensuring it doesn't exceed the high value.\n * @param value The new low value\n * @internal\n */\n setLowValue(value: number): void {\n const clampedValue = Math.max(this.state.min(), Math.min(value, this.state.high()));\n this.state.low.set(clampedValue);\n this.lowChange.emit(clampedValue);\n }\n\n /**\n * Updates the high value, ensuring it doesn't go below the low value.\n * @param value The new high value\n * @internal\n */\n setHighValue(value: number): void {\n const clampedValue = Math.min(this.state.max(), Math.max(value, this.state.low()));\n this.state.high.set(clampedValue);\n this.highChange.emit(clampedValue);\n }\n\n /**\n * Determines which thumb should be moved based on the position clicked.\n * @param percentage The percentage position of the click\n * @returns 'low' or 'high' indicating which thumb should move\n *\n * @internal\n */\n getClosestThumb(percentage: number): 'low' | 'high' {\n const value = this.state.min() + (this.state.max() - this.state.min()) * (percentage / 100);\n const distanceToLow = Math.abs(value - this.state.low());\n const distanceToHigh = Math.abs(value - this.state.high());\n\n return distanceToLow <= distanceToHigh ? 'low' : 'high';\n }\n\n /**\n * Updates the thumbs array when a new thumb is added.\n * @param thumb The new thumb to add\n * @internal\n */\n addThumb(thumb: NgpRangeSliderThumb): void {\n this.thumbs.update(thumbs => [...thumbs, thumb]);\n }\n\n /**\n * Removes a thumb from the thumbs array.\n * @param thumb The thumb to remove\n * @internal\n */\n removeThumb(thumb: NgpRangeSliderThumb): void {\n this.thumbs.update(thumbs => thumbs.filter(t => t !== thumb));\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.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.ts","../../../../packages/ng-primitives/slider/src/range-slider/range-slider/range-slider.ts","../../../../packages/ng-primitives/slider/src/ng-primitives-slider.ts"],"sourcesContent":["import { computed, ElementRef, Signal, signal, WritableSignal } from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n controlled,\n createPrimitive,\n dataBinding,\n deprecatedSetter,\n emitter,\n} from 'ng-primitives/state';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { Observable } from 'rxjs';\n\n/**\n * Public state surface for the Slider primitive.\n */\nexport interface NgpSliderState {\n /**\n * The id of the slider.\n */\n readonly id: Signal<string>;\n /**\n * The slider value.\n */\n readonly value: WritableSignal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation: WritableSignal<NgpOrientation>;\n /**\n * Whether the slider is disabled (includes form control state).\n */\n readonly disabled: WritableSignal<boolean>;\n /**\n * The percentage position of the thumb.\n */\n readonly percentage: Signal<number>;\n /**\n * The minimum value of the slider.\n */\n readonly min: Signal<number>;\n /**\n * The maximum value of the slider.\n */\n readonly max: Signal<number>;\n /**\n * The step value of the slider.\n */\n readonly step: Signal<number>;\n /**\n * @internal The track element reference.\n */\n readonly track: Signal<ElementRef<HTMLElement> | undefined>;\n /**\n * Emit when the value changes.\n */\n readonly valueChange: Observable<number>;\n /**\n * Set the current value (clamped).\n */\n setValue(value: number): void;\n /**\n * Register the track element.\n */\n setTrack(track: ElementRef<HTMLElement> | undefined): void;\n /**\n * Set the disabled state.\n */\n setDisabled(disabled: boolean): void;\n /**\n * Set the orientation.\n */\n setOrientation(orientation: NgpOrientation): void;\n}\n\n/**\n * Inputs for configuring the Slider primitive.\n */\nexport interface NgpSliderProps {\n /**\n * The id of the slider.\n */\n readonly id?: Signal<string>;\n /**\n * The slider value.\n */\n readonly value?: Signal<number>;\n /**\n * The minimum value.\n */\n readonly min?: Signal<number>;\n /**\n * The maximum value.\n */\n readonly max?: Signal<number>;\n /**\n * The step value.\n */\n readonly step?: Signal<number>;\n /**\n * The slider orientation.\n */\n readonly orientation?: Signal<NgpOrientation>;\n /**\n * Whether the slider is disabled.\n */\n readonly disabled?: Signal<boolean>;\n /**\n * Callback fired when the value changes.\n */\n readonly onValueChange?: (value: number) => void;\n}\n\nexport const [NgpSliderStateToken, ngpSlider, injectSliderState, provideSliderState] =\n createPrimitive(\n 'NgpSlider',\n ({\n id = signal(uniqueId('ngp-slider')),\n value: _value = signal(0),\n min = signal(0),\n max = signal(100),\n step = signal(1),\n orientation: _orientation = signal<NgpOrientation>('horizontal'),\n disabled: _disabled = signal(false),\n onValueChange,\n }: NgpSliderProps): NgpSliderState => {\n const element = injectElementRef();\n const value = controlled(_value);\n const disabledInput = controlled(_disabled);\n const orientation = controlled(_orientation);\n\n const valueChange = emitter<number>();\n const track = signal<ElementRef<HTMLElement> | undefined>(undefined);\n\n // Form control integration\n const status = ngpFormControl({ id, disabled: disabledInput });\n\n const percentage = computed(() => {\n const range = max() - min();\n if (range <= 0) {\n return 0;\n }\n const pct = ((value() - min()) / range) * 100;\n return Math.min(100, Math.max(0, pct));\n });\n\n // Host bindings\n attrBinding(element, 'id', id);\n dataBinding(element, 'data-orientation', orientation);\n dataBinding(element, 'data-disabled', () => status().disabled);\n\n function setTrack(newTrack: ElementRef<HTMLElement> | undefined): void {\n track.set(newTrack);\n }\n\n function setValue(newValue: number): void {\n const clamped = Math.min(max(), Math.max(min(), newValue));\n value.set(clamped);\n onValueChange?.(clamped);\n valueChange.emit(clamped);\n }\n\n function setDisabled(isDisabled: boolean): void {\n disabledInput.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(disabledInput, 'setDisabled'),\n valueChange: valueChange.asObservable(),\n percentage,\n track,\n setValue,\n setTrack,\n setDisabled,\n setOrientation,\n };\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\n return {};\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 { computed, Signal } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport {\n attrBinding,\n createPrimitive,\n dataBinding,\n listener,\n styleBinding,\n} from 'ng-primitives/state';\nimport { injectSliderState } from '../slider/slider-state';\n\ntype SliderKey = 'ArrowLeft' | 'ArrowDown' | 'ArrowRight' | 'ArrowUp' | 'Home' | 'End';\n\n/**\n * Public state surface for the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbState {\n /**\n * Whether the thumb is currently dragging.\n */\n readonly dragging: Signal<boolean>;\n /**\n * Focus the thumb element.\n */\n focus(): void;\n}\n\n/**\n * Inputs for configuring the Slider Thumb primitive.\n */\nexport interface NgpSliderThumbProps {}\n\nexport const [\n NgpSliderThumbStateToken,\n ngpSliderThumb,\n injectSliderThumbState,\n provideSliderThumbState,\n] = createPrimitive('NgpSliderThumb', ({}: NgpSliderThumbProps): NgpSliderThumbState => {\n const elementRef = injectElementRef<HTMLElement>();\n const slider = injectSliderState();\n\n let dragging = false;\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' ? slider().percentage() : null,\n );\n\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: slider().disabled,\n });\n\n // Pointer interactions\n listener(elementRef, 'pointerdown', (event: PointerEvent) => {\n event.preventDefault();\n\n if (slider().disabled()) {\n return;\n }\n\n dragging = true;\n elementRef.nativeElement.setPointerCapture(event.pointerId);\n });\n\n listener(elementRef, 'pointerup', (event: PointerEvent) => {\n if (slider().disabled()) {\n return;\n }\n dragging = false;\n if (elementRef.nativeElement.hasPointerCapture(event.pointerId)) {\n elementRef.nativeElement.releasePointerCapture(event.pointerId);\n }\n });\n\n listener(elementRef, 'pointermove', (event: PointerEvent) => {\n if (slider().disabled() || !dragging) {\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 // 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 if (newValue === currentValue) {\n return;\n }\n\n slider().setValue(newValue);\n event.preventDefault();\n });\n\n function focus(): void {\n elementRef.nativeElement.focus({ preventScroll: true });\n }\n\n return {\n dragging: computed(() => dragging),\n focus,\n };\n});\n","import { Directive } 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 constructor() {\n ngpSliderThumb({});\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 position =\n slider().orientation() === 'horizontal'\n ? event.clientX - rect.left\n : event.clientY - rect.top;\n const size = slider().orientation() === 'horizontal' ? rect.width : rect.height;\n const percentage = size === 0 ? 0 : position / size;\n const value =\n slider().min() + (slider().max() - slider().min()) * Math.max(0, Math.min(1, percentage));\n\n slider().setValue(value);\n });\n\n return {};\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","import {\n createState,\n createStateInjector,\n createStateProvider,\n createStateToken,\n} from 'ng-primitives/state';\nimport type { NgpRangeSlider } from './range-slider';\n\n/**\n * The state token for the Range Slider primitive.\n */\nexport const NgpRangeSliderStateToken = createStateToken<NgpRangeSlider>('RangeSlider');\n\n/**\n * Provides the Range Slider state.\n */\nexport const provideRangeSliderState = createStateProvider(NgpRangeSliderStateToken);\n\n/**\n * Injects the Range Slider state.\n */\nexport const injectRangeSliderState = createStateInjector<NgpRangeSlider>(NgpRangeSliderStateToken);\n\n/**\n * The Range Slider state registration function.\n */\nexport const rangeSliderState = createState(NgpRangeSliderStateToken);\n","import { Directive } from '@angular/core';\nimport { injectRangeSliderState } from '../range-slider/range-slider-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 host: {\n '[attr.data-orientation]': 'rangeSliderState().orientation()',\n '[attr.data-disabled]': 'rangeSliderState().disabled() ? \"\" : null',\n '[style.width.%]':\n 'rangeSliderState().orientation() === \"horizontal\" ? rangeSliderState().rangePercentage() : undefined',\n '[style.height.%]':\n 'rangeSliderState().orientation() === \"vertical\" ? rangeSliderState().rangePercentage() : undefined',\n '[style.inset-inline-start.%]':\n 'rangeSliderState().orientation() === \"horizontal\" ? rangeSliderState().lowPercentage() : undefined',\n '[style.inset-block-start.%]':\n 'rangeSliderState().orientation() === \"vertical\" ? rangeSliderState().lowPercentage() : undefined',\n },\n})\nexport class NgpRangeSliderRange {\n /**\n * Access the range slider state.\n */\n protected readonly rangeSliderState = injectRangeSliderState();\n}\n","import { computed, Directive, HostListener, OnDestroy } from '@angular/core';\nimport { ngpInteractions } from 'ng-primitives/interactions';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectRangeSliderState } from '../range-slider/range-slider-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 host: {\n role: 'slider',\n '[attr.aria-valuemin]': 'state().min()',\n '[attr.aria-valuemax]': 'state().max()',\n '[attr.aria-valuenow]': 'value()',\n '[attr.aria-orientation]': 'state().orientation()',\n '[tabindex]': 'state().disabled() ? -1 : 0',\n '[attr.data-orientation]': 'state().orientation()',\n '[attr.data-disabled]': 'state().disabled() ? \"\" : null',\n '[attr.data-thumb]': 'thumb()',\n '[style.inset-inline-start.%]':\n 'state().orientation() === \"horizontal\" ? percentage() : undefined',\n '[style.inset-block-start.%]':\n 'state().orientation() === \"vertical\" ? percentage() : undefined',\n },\n})\nexport class NgpRangeSliderThumb implements OnDestroy {\n /**\n * Access the range slider state.\n */\n protected readonly state = injectRangeSliderState();\n\n /**\n * Access the thumb element.\n */\n private readonly elementRef = injectElementRef();\n\n /**\n * Determines which value this thumb controls ('low' or 'high').\n */\n protected readonly thumb = computed(() =>\n this.state().thumbs().indexOf(this) === 0 ? 'low' : 'high',\n );\n\n /**\n * Store the dragging state.\n */\n protected dragging = false;\n\n /**\n * Get the current value for this thumb.\n */\n protected readonly value = computed(() =>\n this.thumb() === 'low' ? this.state().low() : this.state().high(),\n );\n\n /**\n * Get the current percentage for this thumb.\n */\n protected readonly percentage = computed(() =>\n this.thumb() === 'low' ? this.state().lowPercentage() : this.state().highPercentage(),\n );\n\n constructor() {\n ngpInteractions({\n hover: true,\n focusVisible: true,\n press: true,\n disabled: this.state().disabled,\n });\n\n this.state().addThumb(this);\n }\n\n ngOnDestroy(): void {\n this.state().removeThumb(this);\n }\n\n @HostListener('pointerdown', ['$event'])\n protected handlePointerDown(event: PointerEvent): void {\n event.preventDefault();\n\n if (this.state().disabled()) {\n return;\n }\n\n this.dragging = true;\n }\n\n @HostListener('document:pointerup')\n protected handlePointerUp(): void {\n if (this.state().disabled()) {\n return;\n }\n\n this.dragging = false;\n }\n\n @HostListener('document:pointermove', ['$event'])\n protected handlePointerMove(event: PointerEvent): void {\n if (this.state().disabled() || !this.dragging) {\n return;\n }\n\n const rect = this.state().track()?.element.nativeElement.getBoundingClientRect();\n\n if (!rect) {\n return;\n }\n\n const percentage =\n this.state().orientation() === 'horizontal'\n ? (event.clientX - rect.left) / rect.width\n : (event.clientY - rect.top) / rect.height;\n\n const value =\n this.state().min() +\n (this.state().max() - this.state().min()) * Math.max(0, Math.min(1, percentage));\n\n // Update the appropriate value based on thumb type\n if (this.thumb() === 'low') {\n this.state().setLowValue(value);\n } else {\n this.state().setHighValue(value);\n }\n }\n\n /**\n * Handle keyboard events.\n * @param event\n */\n @HostListener('keydown', ['$event'])\n protected handleKeydown(event: KeyboardEvent): void {\n const multiplier = event.shiftKey ? 10 : 1;\n const currentValue = this.value();\n const step = this.state().step() * multiplier;\n\n // determine the document direction\n const isRTL = getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\n\n let newValue: number;\n\n switch (event.key) {\n case 'ArrowLeft':\n newValue = isRTL\n ? Math.min(currentValue - step, this.state().max())\n : Math.max(currentValue - step, this.state().min());\n break;\n case 'ArrowDown':\n newValue = Math.max(currentValue - step, this.state().min());\n break;\n case 'ArrowRight':\n newValue = isRTL\n ? Math.max(currentValue + step, this.state().min())\n : Math.min(currentValue + step, this.state().max());\n break;\n case 'ArrowUp':\n newValue = Math.min(currentValue + step, this.state().max());\n break;\n case 'Home':\n newValue = isRTL ? this.state().max() : this.state().min();\n break;\n case 'End':\n newValue = isRTL ? this.state().min() : this.state().max();\n break;\n default:\n return;\n }\n\n // Update the appropriate value based on thumb type\n if (this.thumb() === 'low') {\n this.state().setLowValue(newValue);\n } else {\n this.state().setHighValue(newValue);\n }\n\n event.preventDefault();\n }\n}\n","import { Directive, HostListener } from '@angular/core';\nimport { injectElementRef } from 'ng-primitives/internal';\nimport { injectRangeSliderState } from '../range-slider/range-slider-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 host: {\n '[attr.data-orientation]': 'rangeSliderState().orientation()',\n '[attr.data-disabled]': 'rangeSliderState().disabled() ? \"\" : null',\n },\n})\nexport class NgpRangeSliderTrack {\n /**\n * Access the range slider state.\n */\n protected readonly rangeSliderState = injectRangeSliderState();\n\n /**\n * The element that represents the slider track.\n */\n readonly element = injectElementRef<HTMLElement>();\n\n constructor() {\n this.rangeSliderState().track.set(this);\n }\n\n /**\n * When the slider track is clicked, update the closest thumb value.\n * @param event The click event.\n */\n @HostListener('pointerdown', ['$event'])\n protected handlePointerDown(event: PointerEvent): void {\n if (this.rangeSliderState().disabled()) {\n return;\n }\n\n // get the position the click occurred within the slider track\n const position =\n this.rangeSliderState().orientation() === 'horizontal' ? event.clientX : event.clientY;\n const rect = this.element.nativeElement.getBoundingClientRect();\n const percentage =\n (position - (this.rangeSliderState().orientation() === 'horizontal' ? rect.left : rect.top)) /\n (this.rangeSliderState().orientation() === 'horizontal' ? rect.width : rect.height);\n\n // calculate the value based on the position\n const value =\n this.rangeSliderState().min() +\n (this.rangeSliderState().max() - this.rangeSliderState().min()) * percentage;\n\n // determine which thumb to move based on proximity\n const closestThumb = this.rangeSliderState().getClosestThumb(percentage * 100);\n\n if (closestThumb === 'low') {\n this.rangeSliderState().setLowValue(value);\n } else {\n this.rangeSliderState().setHighValue(value);\n }\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n Directive,\n booleanAttribute,\n computed,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { NgpOrientation } from 'ng-primitives/common';\nimport { ngpFormControl } from 'ng-primitives/form-field';\nimport { uniqueId } from 'ng-primitives/utils';\nimport { NgpRangeSliderThumb } from '../range-slider-thumb/range-slider-thumb';\nimport type { NgpRangeSliderTrack } from '../range-slider-track/range-slider-track';\nimport { provideRangeSliderState, rangeSliderState } 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 host: {\n '[id]': 'id()',\n '[attr.data-orientation]': 'state.orientation()',\n },\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 * Access the slider track.\n * @internal\n */\n readonly track = signal<NgpRangeSliderTrack | undefined>(undefined);\n\n /**\n * The thumbs of the range slider.\n * @internal\n */\n readonly thumbs = signal<NgpRangeSliderThumb[]>([]);\n\n /**\n * The low value as a percentage based on the min and max values.\n * @internal\n */\n readonly lowPercentage = computed(\n () => ((this.state.low() - this.state.min()) / (this.state.max() - this.state.min())) * 100,\n );\n\n /**\n * The high value as a percentage based on the min and max values.\n * @internal\n */\n readonly highPercentage = computed(\n () => ((this.state.high() - this.state.min()) / (this.state.max() - this.state.min())) * 100,\n );\n\n /**\n * The range between low and high values as a percentage.\n * @internal\n */\n readonly rangePercentage = computed(() => this.highPercentage() - this.lowPercentage());\n\n /**\n * The state of the range slider. We use this for the range slider state rather than relying on the inputs.\n * @internal\n */\n protected readonly state = rangeSliderState<NgpRangeSlider>(this);\n\n constructor() {\n ngpFormControl({ id: this.state.id, disabled: this.state.disabled });\n }\n\n /**\n * Updates the low value, ensuring it doesn't exceed the high value.\n * @param value The new low value\n * @internal\n */\n setLowValue(value: number): void {\n const clampedValue = Math.max(this.state.min(), Math.min(value, this.state.high()));\n this.state.low.set(clampedValue);\n this.lowChange.emit(clampedValue);\n }\n\n /**\n * Updates the high value, ensuring it doesn't go below the low value.\n * @param value The new high value\n * @internal\n */\n setHighValue(value: number): void {\n const clampedValue = Math.min(this.state.max(), Math.max(value, this.state.low()));\n this.state.high.set(clampedValue);\n this.highChange.emit(clampedValue);\n }\n\n /**\n * Determines which thumb should be moved based on the position clicked.\n * @param percentage The percentage position of the click\n * @returns 'low' or 'high' indicating which thumb should move\n *\n * @internal\n */\n getClosestThumb(percentage: number): 'low' | 'high' {\n const value = this.state.min() + (this.state.max() - this.state.min()) * (percentage / 100);\n const distanceToLow = Math.abs(value - this.state.low());\n const distanceToHigh = Math.abs(value - this.state.high());\n\n return distanceToLow <= distanceToHigh ? 'low' : 'high';\n }\n\n /**\n * Updates the thumbs array when a new thumb is added.\n * @param thumb The new thumb to add\n * @internal\n */\n addThumb(thumb: NgpRangeSliderThumb): void {\n this.thumbs.update(thumbs => [...thumbs, thumb]);\n }\n\n /**\n * Removes a thumb from the thumbs array.\n * @param thumb The thumb to remove\n * @internal\n */\n removeThumb(thumb: NgpRangeSliderThumb): void {\n this.thumbs.update(thumbs => thumbs.filter(t => t !== thumb));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { coerceElement } from '@angular/cdk/coercion';
|
|
2
|
-
import { InjectionToken, signal, inject, computed, linkedSignal, isSignal, Injector, ElementRef, runInInjectionContext, afterRenderEffect, NgZone, DestroyRef, forwardRef } from '@angular/core';
|
|
3
|
-
import {
|
|
2
|
+
import { InjectionToken, signal, inject, computed, linkedSignal, isSignal, Injector, ElementRef, runInInjectionContext, afterRenderEffect, NgZone, DestroyRef, forwardRef, ChangeDetectorRef } from '@angular/core';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
4
|
|
|
5
|
+
/* eslint-disable @angular-eslint/no-uncalled-signals */
|
|
5
6
|
/**
|
|
6
7
|
* Create a new injection token for the state.
|
|
7
8
|
* @param description The description of the token
|
|
@@ -66,7 +67,7 @@ function createState(token) {
|
|
|
66
67
|
if (descriptor?.get || descriptor?.set) {
|
|
67
68
|
Object.defineProperty(obj, key, descriptor);
|
|
68
69
|
}
|
|
69
|
-
else if (
|
|
70
|
+
else if (typeof prototype[key] === 'function') {
|
|
70
71
|
obj[key] = prototype[key].bind(state);
|
|
71
72
|
}
|
|
72
73
|
else {
|
|
@@ -86,7 +87,9 @@ function createControlledInput(property) {
|
|
|
86
87
|
const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');
|
|
87
88
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
88
89
|
const inputDefinition = symbol ? property[symbol] : undefined;
|
|
89
|
-
if (!symbol ||
|
|
90
|
+
if (!symbol ||
|
|
91
|
+
!inputDefinition ||
|
|
92
|
+
typeof inputDefinition.applyValueToInputSignal !== 'function') {
|
|
90
93
|
console.warn('Angular has changed its internal Input implementation, report this issue to ng-primitives.');
|
|
91
94
|
// fallback to a linked signal which is partially controlled
|
|
92
95
|
return linkedSignal(() => property());
|
|
@@ -149,9 +152,13 @@ function createPrimitive(name, fn, options = {}) {
|
|
|
149
152
|
});
|
|
150
153
|
function injectFn(options) {
|
|
151
154
|
const hoisted = options?.hoisted ?? false;
|
|
155
|
+
const optional = options?.optional ?? false;
|
|
152
156
|
if (hoisted) {
|
|
153
157
|
return (inject(token, { optional: true }) ?? signal(null));
|
|
154
158
|
}
|
|
159
|
+
if (optional) {
|
|
160
|
+
return (inject(token, { optional: true }) ?? signal(null));
|
|
161
|
+
}
|
|
155
162
|
return inject(token);
|
|
156
163
|
}
|
|
157
164
|
// create a function to provide the state
|
|
@@ -257,14 +264,20 @@ function dataBinding(element, attr, value) {
|
|
|
257
264
|
});
|
|
258
265
|
}
|
|
259
266
|
function listener(element, event, handler, options) {
|
|
260
|
-
runInInjectionContext(options?.injector ?? inject(Injector), () => {
|
|
267
|
+
return runInInjectionContext(options?.injector ?? inject(Injector), () => {
|
|
261
268
|
const ngZone = inject(NgZone);
|
|
262
269
|
const destroyRef = inject(DestroyRef);
|
|
263
270
|
const nativeElement = coerceElement(element);
|
|
264
|
-
|
|
265
|
-
destroyRef.onDestroy(
|
|
271
|
+
const removeListener = () => nativeElement.removeEventListener(event, handler, options?.config);
|
|
272
|
+
destroyRef.onDestroy(removeListener);
|
|
273
|
+
ngZone.runOutsideAngular(() => nativeElement.addEventListener(event, handler, options?.config));
|
|
274
|
+
return removeListener;
|
|
266
275
|
});
|
|
267
276
|
}
|
|
277
|
+
function onMount(callback) {
|
|
278
|
+
const injector = inject(Injector);
|
|
279
|
+
afterRenderEffect(() => runInInjectionContext(injector, callback), { injector });
|
|
280
|
+
}
|
|
268
281
|
function onDestroy(callback) {
|
|
269
282
|
const destroyRef = inject(DestroyRef);
|
|
270
283
|
destroyRef.onDestroy(callback);
|
|
@@ -295,10 +308,25 @@ function deprecatedSetter(signal, methodName) {
|
|
|
295
308
|
function injectInheritedState(token, injectOptions = {}) {
|
|
296
309
|
return (inject(forwardRef(() => token()), { optional: true, skipSelf: true, ...injectOptions }) ?? null);
|
|
297
310
|
}
|
|
311
|
+
function emitter({ injector = inject(Injector), } = {}) {
|
|
312
|
+
return runInInjectionContext(injector, () => {
|
|
313
|
+
const eventEmitter = new Subject();
|
|
314
|
+
const changeDetector = inject(ChangeDetectorRef);
|
|
315
|
+
return {
|
|
316
|
+
emit(value) {
|
|
317
|
+
eventEmitter.next(value);
|
|
318
|
+
changeDetector.markForCheck();
|
|
319
|
+
},
|
|
320
|
+
asObservable() {
|
|
321
|
+
return eventEmitter.asObservable();
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
});
|
|
325
|
+
}
|
|
298
326
|
|
|
299
327
|
/**
|
|
300
328
|
* Generated bundle index. Do not edit.
|
|
301
329
|
*/
|
|
302
330
|
|
|
303
|
-
export { attrBinding, controlled, createPrimitive, createState, createStateInjector, createStateProvider, createStateToken, dataBinding, deprecatedSetter, injectInheritedState, listener, onDestroy, styleBinding };
|
|
331
|
+
export { attrBinding, controlled, createPrimitive, createState, createStateInjector, createStateProvider, createStateToken, dataBinding, deprecatedSetter, emitter, injectInheritedState, listener, onDestroy, onMount, styleBinding };
|
|
304
332
|
//# sourceMappingURL=ng-primitives-state.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-primitives-state.mjs","sources":["../../../../packages/ng-primitives/state/src/index.ts","../../../../packages/ng-primitives/state/src/ng-primitives-state.ts"],"sourcesContent":["import { coerceElement } from '@angular/cdk/coercion';\nimport {\n afterRenderEffect,\n computed,\n DestroyRef,\n ElementRef,\n FactoryProvider,\n forwardRef,\n inject,\n InjectionToken,\n InjectOptions,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n isSignal,\n linkedSignal,\n NgZone,\n ProviderToken,\n runInInjectionContext,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { isFunction } from 'ng-primitives/utils';\n\n/**\n * This converts the state object to a writable state object.\n * This means that inputs become signals which are writable.\n */\nexport type State<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : T[K];\n};\n\n/**\n * This is similar to the state object, but we don't expose properties that are not\n * inputs.\n */\nexport type CreatedState<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : never;\n};\n\nexport type InjectedState<T> = Signal<State<T>>;\n\n/**\n * Create a new injection token for the state.\n * @param description The description of the token\n */\nexport function createStateToken<T>(description: string): InjectionToken<T> {\n return new InjectionToken<Signal<State<T>>>(`Ngp${description}StateToken`);\n}\n\nexport interface CreateStateProviderOptions {\n /**\n * Whether we should check for the state in the parent injector.\n */\n inherit?: boolean;\n}\n\n/**\n * Create a new provider for the state. It first tries to inject the state from the parent injector,\n * as this allows for the state to be hoisted to a higher level in the component tree. This can\n * be useful to avoid issues where the injector can't be shared in some cases when ng-content is used.\n * @param token The token for the state\n */\nexport function createStateProvider<T>(\n token: ProviderToken<T>,\n): (options?: CreateStateProviderOptions) => FactoryProvider {\n return ({ inherit }: CreateStateProviderOptions = {}) => ({\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n // if we are not checking the parent, we want to create a new state\n return signal({});\n }\n // if we are checking the parent, we want to check if the state is already defined\n return inject(token, { optional: true, skipSelf: true }) ?? signal({});\n },\n });\n}\n\ntype CreateStateInjectorOptions = {\n /**\n * Whether the state may not be immediately available. This can happen when the child is instantiated before the parent.\n */\n deferred?: boolean;\n};\n\n/**\n * Create a new state injector for the state.\n * @param token The token for the state\n */\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: { deferred: true },\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options?: CreateStateInjectorOptions,\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U>>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: CreateStateInjectorOptions = {},\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined> {\n return <U = T>(injectOptions: InjectOptions = {}) => {\n const value = inject(token, injectOptions) as Signal<State<U> | undefined> | null;\n\n if (options.deferred) {\n return computed(() =>\n value && Object.keys(value() ?? {}).length === 0 ? undefined : value?.(),\n ) as Signal<State<U> | undefined>;\n }\n\n return (value as Signal<State<U>>) ?? signal(undefined);\n };\n}\n\n/**\n * Convert the original state object into a writable state object.\n * @param token The token for the state\n */\nexport function createState(token: ProviderToken<WritableSignal<State<unknown>>>) {\n return <U>(state: U): CreatedState<U> => {\n const internalState = inject(token);\n\n internalState.update(obj => {\n // Iterating over properties\n for (const key in state) {\n const value = state[key as keyof U];\n\n // We want to make this a controlled input if it is an InputSignal or InputSignalWithTransform\n if (isSignalInput(value)) {\n // @ts-ignore\n obj[key] = createControlledInput(value);\n } else {\n // @ts-ignore\n obj[key] = value;\n }\n }\n\n // Iterating over prototype methods\n const prototype = Object.getPrototypeOf(state);\n\n for (const key of Object.getOwnPropertyNames(prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, key);\n\n // if this is a getter or setter, we need to define it on the object\n if (descriptor?.get || descriptor?.set) {\n Object.defineProperty(obj, key, descriptor);\n } else if (isFunction(prototype[key as keyof U])) {\n (obj as Record<string, unknown>)[key] = prototype[key as keyof U].bind(state);\n } else {\n // @ts-ignore\n obj[key] = prototype[key as keyof U];\n }\n }\n\n return { ...obj };\n });\n\n return internalState() as unknown as CreatedState<U>;\n };\n}\n\n// this is a bit hacky, but we need to do it to track whether this is controlled\nfunction createControlledInput(\n property: InputSignal<unknown> | InputSignalWithTransform<unknown, unknown>,\n): WritableSignal<unknown> {\n const value = signal(property());\n let isControlled = false;\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (!symbol || !inputDefinition || !isFunction(inputDefinition.applyValueToInputSignal)) {\n console.warn(\n 'Angular has changed its internal Input implementation, report this issue to ng-primitives.',\n );\n // fallback to a linked signal which is partially controlled\n return linkedSignal(() => property());\n }\n\n const originalApply = inputDefinition.applyValueToInputSignal.bind(inputDefinition);\n const originalSet = value.set.bind(value);\n const originalUpdate = value.update.bind(value);\n\n inputDefinition.applyValueToInputSignal = (inputSignalNode: unknown, newValue: unknown) => {\n isControlled = true;\n originalSet(newValue);\n originalApply(inputSignalNode, newValue);\n };\n\n value.set = (newValue: unknown) => {\n if (!isControlled) {\n originalSet(newValue);\n }\n };\n\n value.update = (updateFn: (value: unknown) => unknown) => {\n if (!isControlled) {\n originalUpdate(updateFn);\n }\n };\n\n return value;\n}\n\nfunction isSignalInput(\n property: unknown,\n): property is InputSignal<unknown> | InputSignalWithTransform<unknown, unknown> {\n if (!isSignal(property)) {\n return false;\n }\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n\n if (!symbol) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (!inputDefinition) {\n return false;\n }\n\n return 'transformFn' in inputDefinition || 'applyValueToInputSignal' in inputDefinition;\n}\n\nexport interface CreatePrimitiveOptions {\n injector?: Injector;\n elementRef?: ElementRef<HTMLElement>;\n}\n\ntype PrimitiveState<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? R\n : TFactory extends (...args: any[]) => infer R\n ? R\n : never;\n\ntype BasePrimitiveInjectionFn<TState> = {\n (): Signal<TState>;\n (options: { hoisted: true }): Signal<TState | null>;\n (options?: { hoisted?: boolean }): Signal<TState | null>;\n};\n\ntype PrimitiveInjectionFn<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? {\n (): Signal<R>;\n (options: { hoisted: true }): Signal<R | null>;\n (options?: { hoisted?: boolean }): Signal<R | null>;\n }\n : BasePrimitiveInjectionFn<PrimitiveState<TFactory>>;\n\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options?: CreatePrimitiveOptions,\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n];\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options: CreatePrimitiveOptions = {},\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n] {\n // Create a unique injection token for the primitive's state signal\n const token = new InjectionToken<WritableSignal<PrimitiveState<TFactory>>>(`Primitive: ${name}`);\n\n // Create the state signal within the appropriate injection context\n const factory = ((props: Parameters<TFactory>[0]) => {\n // determine the injector to use\n let injector = options.injector ?? inject(Injector);\n\n // If an ElementRef is provided in options, create a child injector\n if (options.elementRef) {\n injector = Injector.create({\n providers: [{ provide: ElementRef, useValue: options.elementRef }],\n parent: injector,\n });\n }\n\n return runInInjectionContext(injector, () => {\n const state = inject(token, { optional: true });\n const instance = fn(props);\n state?.set(instance as PrimitiveState<TFactory>);\n return instance;\n });\n }) as TFactory;\n\n // create an injection function that provides the state signal\n function injectFn<T = PrimitiveState<TFactory>>(): Signal<T>;\n function injectFn<T = PrimitiveState<TFactory>>(options: { hoisted: true }): Signal<T | null>;\n function injectFn<T = PrimitiveState<TFactory>>(options?: {\n hoisted?: boolean;\n }): Signal<T | null> {\n const hoisted = options?.hoisted ?? false;\n\n if (hoisted) {\n return (inject(token, { optional: true }) ?? signal(null)) as unknown as Signal<T | null>;\n }\n\n return inject(token) as unknown as Signal<T>;\n }\n\n // create a function to provide the state\n const provideFn = (opts?: { inherit?: boolean }): FactoryProvider => {\n const inherit = opts?.inherit ?? true;\n return {\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n return signal(null);\n }\n\n return inject(token, { optional: true, skipSelf: true }) ?? signal(null);\n },\n };\n };\n\n return [token, factory as TFactory, injectFn as PrimitiveInjectionFn<TFactory>, provideFn];\n}\n\nexport function controlled<T>(value: Signal<T>): WritableSignal<T> {\n return linkedSignal(() => value());\n}\n\nfunction setAttribute(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: string | null | undefined,\n): void {\n // if the attribute is \"disabled\" and the value is 'false', we need to remove the attribute\n if (attr === 'disabled' && value === 'false') {\n element.nativeElement.removeAttribute(attr);\n return;\n }\n\n if (value !== null && value !== undefined) {\n element.nativeElement.setAttribute(attr, value);\n } else {\n element.nativeElement.removeAttribute(attr);\n }\n}\n\nexport function attrBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value:\n | (() => string | number | boolean | null | undefined)\n | string\n | number\n | boolean\n | null\n | undefined,\n): void {\n afterRenderEffect({\n write: () => {\n const valueResult = typeof value === 'function' ? value() : value;\n\n setAttribute(element, attr, valueResult?.toString() ?? null);\n },\n });\n}\n\nfunction getStyleUnit(style: string): string {\n const parts = style.split('.');\n\n if (parts.length > 1) {\n const unit = parts[parts.length - 1];\n\n switch (unit) {\n case 'px':\n case 'em':\n case 'rem':\n case '%':\n case 'vh':\n case 'vw':\n case 'vmin':\n case 'vmax':\n case 'cm':\n case 'mm':\n case 'in':\n case 'pt':\n case 'pc':\n case 'ex':\n case 'ch':\n return unit;\n default:\n return '';\n }\n }\n\n return '';\n}\n\nexport function styleBinding(\n element: ElementRef<HTMLElement>,\n style: string,\n value: (() => string | number | null) | string | number | null,\n): void {\n afterRenderEffect({\n write: () => {\n const styleValue = typeof value === 'function' ? value() : value;\n // we should look for units in the style name, just like Angular does e.g. width.px\n const styleUnit = getStyleUnit(style);\n const styleName = styleUnit ? style.replace(`.${styleUnit}`, '') : style;\n\n if (styleValue !== null) {\n element.nativeElement.style.setProperty(styleName, styleValue + styleUnit);\n } else {\n element.nativeElement.style.removeProperty(styleName);\n }\n },\n });\n}\n\nexport function dataBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: (() => string | boolean | null) | string | boolean | null,\n): void {\n if (!attr.startsWith('data-')) {\n throw new Error(`dataBinding: attribute \"${attr}\" must start with \"data-\"`);\n }\n\n afterRenderEffect({\n write: () => {\n let valueResult = typeof value === 'function' ? value() : value;\n\n if (valueResult === false) {\n valueResult = null;\n } else if (valueResult === true) {\n valueResult = '';\n } else if (valueResult !== null && typeof valueResult !== 'string') {\n valueResult = String(valueResult);\n }\n\n setAttribute(element, attr, valueResult);\n },\n });\n}\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement>,\n event: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: { injector?: Injector },\n): void;\nexport function listener(\n element: HTMLElement | ElementRef<HTMLElement>,\n event: string,\n handler: (event: Event) => void,\n options?: { injector?: Injector },\n): void;\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement>,\n event: K | string,\n handler: (event: HTMLElementEventMap[K] | Event) => void,\n options?: { injector?: Injector },\n): void {\n runInInjectionContext(options?.injector ?? inject(Injector), () => {\n const ngZone = inject(NgZone);\n const destroyRef = inject(DestroyRef);\n const nativeElement = coerceElement(element);\n ngZone.runOutsideAngular(() => nativeElement.addEventListener(event, handler as EventListener));\n destroyRef.onDestroy(() => nativeElement.removeEventListener(event, handler as EventListener));\n });\n}\n\nexport function onDestroy(callback: () => void): void {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(callback);\n}\n\n/**\n * Previously, with our state approach, we allowed signals to be written directly using their setters.\n * However, with our new approach, we want people to use the appropriate set method instead. This function takes in a writable\n * signal and returns a proxy that warns the user when set is called directly.\n */\nexport function deprecatedSetter<T>(\n signal: WritableSignal<T>,\n methodName: string,\n): WritableSignal<T> {\n return new Proxy(signal, {\n get(target, prop) {\n if (prop === 'set') {\n return (value: T) => {\n console.warn(\n `Deprecation warning: Use ${methodName}() instead of setting the value directly.`,\n );\n target.set(value);\n };\n }\n return target[prop as keyof WritableSignal<T>];\n },\n });\n}\n\n/**\n * A utility function to inject an inherited state from a parent injector. This is useful for cases\n * where a primitive needs to inherit state from a parent primitive, such as in roving focus groups.\n * We could use inject with a forwardRef, but forwardRef returns an any - no thanks...\n */\nexport function injectInheritedState<T>(\n token: () => InjectionToken<T>,\n injectOptions: InjectOptions = {},\n): T | null {\n return (\n inject<T>(\n forwardRef(() => token()),\n { optional: true, skipSelf: true, ...injectOptions },\n ) ?? null\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-state.mjs","sources":["../../../../packages/ng-primitives/state/src/index.ts","../../../../packages/ng-primitives/state/src/ng-primitives-state.ts"],"sourcesContent":["/* eslint-disable @angular-eslint/no-uncalled-signals */\nimport { coerceElement } from '@angular/cdk/coercion';\nimport {\n afterRenderEffect,\n ChangeDetectorRef,\n computed,\n DestroyRef,\n ElementRef,\n FactoryProvider,\n forwardRef,\n inject,\n InjectionToken,\n InjectOptions,\n Injector,\n InputSignal,\n InputSignalWithTransform,\n isSignal,\n linkedSignal,\n NgZone,\n ProviderToken,\n runInInjectionContext,\n signal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n/**\n * This converts the state object to a writable state object.\n * This means that inputs become signals which are writable.\n */\nexport type State<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : T[K];\n};\n\n/**\n * This is similar to the state object, but we don't expose properties that are not\n * inputs.\n */\nexport type CreatedState<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [K in keyof T]: T[K] extends InputSignalWithTransform<infer U, any>\n ? WritableSignal<U>\n : T[K] extends InputSignal<infer R>\n ? WritableSignal<R>\n : never;\n};\n\nexport type InjectedState<T> = Signal<State<T>>;\n\n/**\n * Create a new injection token for the state.\n * @param description The description of the token\n */\nexport function createStateToken<T>(description: string): InjectionToken<T> {\n return new InjectionToken<Signal<State<T>>>(`Ngp${description}StateToken`);\n}\n\nexport interface CreateStateProviderOptions {\n /**\n * Whether we should check for the state in the parent injector.\n */\n inherit?: boolean;\n}\n\n/**\n * Create a new provider for the state. It first tries to inject the state from the parent injector,\n * as this allows for the state to be hoisted to a higher level in the component tree. This can\n * be useful to avoid issues where the injector can't be shared in some cases when ng-content is used.\n * @param token The token for the state\n */\nexport function createStateProvider<T>(\n token: ProviderToken<T>,\n): (options?: CreateStateProviderOptions) => FactoryProvider {\n return ({ inherit }: CreateStateProviderOptions = {}) => ({\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n // if we are not checking the parent, we want to create a new state\n return signal({});\n }\n // if we are checking the parent, we want to check if the state is already defined\n return inject(token, { optional: true, skipSelf: true }) ?? signal({});\n },\n });\n}\n\ntype CreateStateInjectorOptions = {\n /**\n * Whether the state may not be immediately available. This can happen when the child is instantiated before the parent.\n */\n deferred?: boolean;\n};\n\n/**\n * Create a new state injector for the state.\n * @param token The token for the state\n */\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: { deferred: true },\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options?: CreateStateInjectorOptions,\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U>>;\nexport function createStateInjector<T>(\n token: ProviderToken<State<T>>,\n options: CreateStateInjectorOptions = {},\n): <U = T>(injectOptions?: InjectOptions) => Signal<State<U> | undefined> {\n return <U = T>(injectOptions: InjectOptions = {}) => {\n const value = inject(token, injectOptions) as Signal<State<U> | undefined> | null;\n\n if (options.deferred) {\n return computed(() =>\n value && Object.keys(value() ?? {}).length === 0 ? undefined : value?.(),\n ) as Signal<State<U> | undefined>;\n }\n\n return (value as Signal<State<U>>) ?? signal(undefined);\n };\n}\n\n/**\n * Convert the original state object into a writable state object.\n * @param token The token for the state\n */\nexport function createState(token: ProviderToken<WritableSignal<State<unknown>>>) {\n return <U>(state: U): CreatedState<U> => {\n const internalState = inject(token);\n\n internalState.update(obj => {\n // Iterating over properties\n for (const key in state) {\n const value = state[key as keyof U];\n\n // We want to make this a controlled input if it is an InputSignal or InputSignalWithTransform\n if (isSignalInput(value)) {\n // @ts-ignore\n obj[key] = createControlledInput(value);\n } else {\n // @ts-ignore\n obj[key] = value;\n }\n }\n\n // Iterating over prototype methods\n const prototype = Object.getPrototypeOf(state);\n\n for (const key of Object.getOwnPropertyNames(prototype)) {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, key);\n\n // if this is a getter or setter, we need to define it on the object\n if (descriptor?.get || descriptor?.set) {\n Object.defineProperty(obj, key, descriptor);\n } else if (typeof prototype[key as keyof U] === 'function') {\n (obj as Record<string, unknown>)[key] = prototype[key as keyof U].bind(state);\n } else {\n // @ts-ignore\n obj[key] = prototype[key as keyof U];\n }\n }\n\n return { ...obj };\n });\n\n return internalState() as unknown as CreatedState<U>;\n };\n}\n\n// this is a bit hacky, but we need to do it to track whether this is controlled\nfunction createControlledInput(\n property: InputSignal<unknown> | InputSignalWithTransform<unknown, unknown>,\n): WritableSignal<unknown> {\n const value = signal(property());\n let isControlled = false;\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (\n !symbol ||\n !inputDefinition ||\n typeof inputDefinition.applyValueToInputSignal !== 'function'\n ) {\n console.warn(\n 'Angular has changed its internal Input implementation, report this issue to ng-primitives.',\n );\n // fallback to a linked signal which is partially controlled\n return linkedSignal(() => property());\n }\n\n const originalApply = inputDefinition.applyValueToInputSignal.bind(inputDefinition);\n const originalSet = value.set.bind(value);\n const originalUpdate = value.update.bind(value);\n\n inputDefinition.applyValueToInputSignal = (inputSignalNode: unknown, newValue: unknown) => {\n isControlled = true;\n originalSet(newValue);\n originalApply(inputSignalNode, newValue);\n };\n\n value.set = (newValue: unknown) => {\n if (!isControlled) {\n originalSet(newValue);\n }\n };\n\n value.update = (updateFn: (value: unknown) => unknown) => {\n if (!isControlled) {\n originalUpdate(updateFn);\n }\n };\n\n return value;\n}\n\nfunction isSignalInput(\n property: unknown,\n): property is InputSignal<unknown> | InputSignalWithTransform<unknown, unknown> {\n if (!isSignal(property)) {\n return false;\n }\n\n const symbol = Object.getOwnPropertySymbols(property).find(s => s.description === 'SIGNAL');\n\n if (!symbol) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const inputDefinition = symbol ? (property as any)[symbol] : undefined;\n\n if (!inputDefinition) {\n return false;\n }\n\n return 'transformFn' in inputDefinition || 'applyValueToInputSignal' in inputDefinition;\n}\n\nexport interface CreatePrimitiveOptions {\n injector?: Injector;\n elementRef?: ElementRef<HTMLElement>;\n}\n\ntype PrimitiveState<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? R\n : TFactory extends (...args: any[]) => infer R\n ? R\n : never;\n\ntype BasePrimitiveInjectionFn<TState> = {\n (): Signal<TState>;\n (options: { hoisted: true; optional?: boolean }): Signal<TState | null>;\n (options?: { hoisted?: boolean; optional?: boolean }): Signal<TState | null> | Signal<TState>;\n};\n\ntype PrimitiveInjectionFn<TFactory extends (...args: any[]) => unknown> = TFactory extends (\n props: unknown,\n) => infer R\n ? {\n (): Signal<R>;\n (options: { hoisted: true; optional?: boolean }): Signal<R | null>;\n (options?: { hoisted?: boolean; optional?: boolean }): Signal<R | null> | Signal<R>;\n }\n : BasePrimitiveInjectionFn<PrimitiveState<TFactory>>;\n\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options?: CreatePrimitiveOptions,\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n];\nexport function createPrimitive<TFactory extends (...args: any[]) => unknown>(\n name: string,\n fn: TFactory,\n options: CreatePrimitiveOptions = {},\n): [\n InjectionToken<WritableSignal<PrimitiveState<TFactory>>>,\n TFactory,\n PrimitiveInjectionFn<TFactory>,\n (opts?: { inherit?: boolean }) => FactoryProvider,\n] {\n // Create a unique injection token for the primitive's state signal\n const token = new InjectionToken<WritableSignal<PrimitiveState<TFactory>>>(`Primitive: ${name}`);\n\n // Create the state signal within the appropriate injection context\n const factory = ((props: Parameters<TFactory>[0]) => {\n // determine the injector to use\n let injector = options.injector ?? inject(Injector);\n\n // If an ElementRef is provided in options, create a child injector\n if (options.elementRef) {\n injector = Injector.create({\n providers: [{ provide: ElementRef, useValue: options.elementRef }],\n parent: injector,\n });\n }\n\n return runInInjectionContext(injector, () => {\n const state = inject(token, { optional: true });\n const instance = fn(props);\n state?.set(instance as PrimitiveState<TFactory>);\n return instance;\n });\n }) as TFactory;\n\n // create an injection function that provides the state signal\n function injectFn<T = PrimitiveState<TFactory>>(): Signal<T>;\n function injectFn<T = PrimitiveState<TFactory>>(\n options: { hoisted: true } & InjectOptions,\n ): Signal<T | null>;\n function injectFn<T = PrimitiveState<TFactory>>(options?: {\n hoisted?: boolean;\n optional?: boolean;\n }): Signal<T | null> | Signal<T> {\n const hoisted = options?.hoisted ?? false;\n const optional = options?.optional ?? false;\n\n if (hoisted) {\n return (inject(token, { optional: true }) ?? signal(null)) as unknown as Signal<T | null>;\n }\n\n if (optional) {\n return (inject(token, { optional: true }) ?? signal(null)) as unknown as Signal<T | null>;\n }\n\n return inject(token) as unknown as Signal<T>;\n }\n\n // create a function to provide the state\n const provideFn = (opts?: { inherit?: boolean }): FactoryProvider => {\n const inherit = opts?.inherit ?? true;\n return {\n provide: token,\n useFactory: () => {\n if (inherit === false) {\n return signal(null);\n }\n\n return inject(token, { optional: true, skipSelf: true }) ?? signal(null);\n },\n };\n };\n\n return [token, factory as TFactory, injectFn as PrimitiveInjectionFn<TFactory>, provideFn];\n}\n\nexport function controlled<T>(value: Signal<T>): WritableSignal<T> {\n return linkedSignal(() => value());\n}\n\nfunction setAttribute(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: string | null | undefined,\n): void {\n // if the attribute is \"disabled\" and the value is 'false', we need to remove the attribute\n if (attr === 'disabled' && value === 'false') {\n element.nativeElement.removeAttribute(attr);\n return;\n }\n\n if (value !== null && value !== undefined) {\n element.nativeElement.setAttribute(attr, value);\n } else {\n element.nativeElement.removeAttribute(attr);\n }\n}\n\nexport function attrBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value:\n | (() => string | number | boolean | null | undefined)\n | string\n | number\n | boolean\n | null\n | undefined,\n): void {\n afterRenderEffect({\n write: () => {\n const valueResult = typeof value === 'function' ? value() : value;\n\n setAttribute(element, attr, valueResult?.toString() ?? null);\n },\n });\n}\n\nfunction getStyleUnit(style: string): string {\n const parts = style.split('.');\n\n if (parts.length > 1) {\n const unit = parts[parts.length - 1];\n\n switch (unit) {\n case 'px':\n case 'em':\n case 'rem':\n case '%':\n case 'vh':\n case 'vw':\n case 'vmin':\n case 'vmax':\n case 'cm':\n case 'mm':\n case 'in':\n case 'pt':\n case 'pc':\n case 'ex':\n case 'ch':\n return unit;\n default:\n return '';\n }\n }\n\n return '';\n}\n\nexport function styleBinding(\n element: ElementRef<HTMLElement>,\n style: string,\n value: (() => string | number | null) | string | number | null,\n): void {\n afterRenderEffect({\n write: () => {\n const styleValue = typeof value === 'function' ? value() : value;\n // we should look for units in the style name, just like Angular does e.g. width.px\n const styleUnit = getStyleUnit(style);\n const styleName = styleUnit ? style.replace(`.${styleUnit}`, '') : style;\n\n if (styleValue !== null) {\n element.nativeElement.style.setProperty(styleName, styleValue + styleUnit);\n } else {\n element.nativeElement.style.removeProperty(styleName);\n }\n },\n });\n}\n\nexport function dataBinding(\n element: ElementRef<HTMLElement>,\n attr: string,\n value: (() => string | boolean | null) | string | boolean | null,\n): void {\n if (!attr.startsWith('data-')) {\n throw new Error(`dataBinding: attribute \"${attr}\" must start with \"data-\"`);\n }\n\n afterRenderEffect({\n write: () => {\n let valueResult = typeof value === 'function' ? value() : value;\n\n if (valueResult === false) {\n valueResult = null;\n } else if (valueResult === true) {\n valueResult = '';\n } else if (valueResult !== null && typeof valueResult !== 'string') {\n valueResult = String(valueResult);\n }\n\n setAttribute(element, attr, valueResult);\n },\n });\n}\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: K,\n handler: (event: HTMLElementEventMap[K]) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void;\nexport function listener(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: string,\n handler: (event: Event) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void;\nexport function listener<K extends keyof HTMLElementEventMap>(\n element: HTMLElement | ElementRef<HTMLElement> | Document,\n event: K | string,\n handler: (event: HTMLElementEventMap[K] | Event) => void,\n options?: { injector?: Injector; config?: AddEventListenerOptions | boolean },\n): () => void {\n return runInInjectionContext(options?.injector ?? inject(Injector), () => {\n const ngZone = inject(NgZone);\n const destroyRef = inject(DestroyRef);\n const nativeElement = coerceElement(element);\n\n const removeListener = () =>\n nativeElement.removeEventListener(event, handler as EventListener, options?.config);\n destroyRef.onDestroy(removeListener);\n ngZone.runOutsideAngular(() =>\n nativeElement.addEventListener(event, handler as EventListener, options?.config),\n );\n\n return removeListener;\n });\n}\n\nexport function onMount(callback: () => void): void {\n const injector = inject(Injector);\n afterRenderEffect(() => runInInjectionContext(injector, callback), { injector });\n}\n\nexport function onDestroy(callback: () => void): void {\n const destroyRef = inject(DestroyRef);\n destroyRef.onDestroy(callback);\n}\n\n/**\n * Previously, with our state approach, we allowed signals to be written directly using their setters.\n * However, with our new approach, we want people to use the appropriate set method instead. This function takes in a writable\n * signal and returns a proxy that warns the user when set is called directly.\n */\nexport function deprecatedSetter<T>(\n signal: WritableSignal<T>,\n methodName: string,\n): WritableSignal<T> {\n return new Proxy(signal, {\n get(target, prop) {\n if (prop === 'set') {\n return (value: T) => {\n console.warn(\n `Deprecation warning: Use ${methodName}() instead of setting the value directly.`,\n );\n target.set(value);\n };\n }\n return target[prop as keyof WritableSignal<T>];\n },\n });\n}\n\n/**\n * A utility function to inject an inherited state from a parent injector. This is useful for cases\n * where a primitive needs to inherit state from a parent primitive, such as in roving focus groups.\n * We could use inject with a forwardRef, but forwardRef returns an any - no thanks...\n */\nexport function injectInheritedState<T>(\n token: () => InjectionToken<T>,\n injectOptions: InjectOptions = {},\n): T | null {\n return (\n inject<T>(\n forwardRef(() => token()),\n { optional: true, skipSelf: true, ...injectOptions },\n ) ?? null\n );\n}\n\nexport interface Emitter<T> {\n emit(value: T): void;\n asObservable(): Observable<T>;\n}\n\nexport function emitter<T>({\n injector = inject(Injector),\n}: { injector?: Injector } = {}): Emitter<T> {\n return runInInjectionContext(injector, () => {\n const eventEmitter = new Subject<T>();\n const changeDetector = inject(ChangeDetectorRef);\n\n return {\n emit(value: T): void {\n eventEmitter.next(value);\n changeDetector.markForCheck();\n },\n asObservable(): Observable<T> {\n return eventEmitter.asObservable();\n },\n };\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;AAuDA;;;AAGG;AACG,SAAU,gBAAgB,CAAI,WAAmB,EAAA;AACrD,IAAA,OAAO,IAAI,cAAc,CAAmB,MAAM,WAAW,CAAA,UAAA,CAAY,CAAC;AAC5E;AASA;;;;;AAKG;AACG,SAAU,mBAAmB,CACjC,KAAuB,EAAA;IAEvB,OAAO,CAAC,EAAE,OAAO,EAAA,GAAiC,EAAE,MAAM;AACxD,QAAA,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,MAAK;AACf,YAAA,IAAI,OAAO,KAAK,KAAK,EAAE;;AAErB,gBAAA,OAAO,MAAM,CAAC,EAAE,CAAC;YACnB;;AAEA,YAAA,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;QACxE,CAAC;AACF,KAAA,CAAC;AACJ;SAqBgB,mBAAmB,CACjC,KAA8B,EAC9B,UAAsC,EAAE,EAAA;AAExC,IAAA,OAAO,CAAQ,aAAA,GAA+B,EAAE,KAAI;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,aAAa,CAAwC;AAEjF,QAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,YAAA,OAAO,QAAQ,CAAC,MACd,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,CACzC;QACnC;AAEA,QAAA,OAAQ,KAA0B,IAAI,MAAM,CAAC,SAAS,CAAC;AACzD,IAAA,CAAC;AACH;AAEA;;;AAGG;AACG,SAAU,WAAW,CAAC,KAAoD,EAAA;IAC9E,OAAO,CAAI,KAAQ,KAAqB;AACtC,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AAEnC,QAAA,aAAa,CAAC,MAAM,CAAC,GAAG,IAAG;;AAEzB,YAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACvB,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAc,CAAC;;AAGnC,gBAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;;oBAExB,GAAG,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC;gBACzC;qBAAO;;AAEL,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;gBAClB;YACF;;YAGA,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;YAE9C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE;gBACvD,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,GAAG,CAAC;;gBAGlE,IAAI,UAAU,EAAE,GAAG,IAAI,UAAU,EAAE,GAAG,EAAE;oBACtC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC;gBAC7C;qBAAO,IAAI,OAAO,SAAS,CAAC,GAAc,CAAC,KAAK,UAAU,EAAE;AACzD,oBAAA,GAA+B,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/E;qBAAO;;oBAEL,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAc,CAAC;gBACtC;YACF;AAEA,YAAA,OAAO,EAAE,GAAG,GAAG,EAAE;AACnB,QAAA,CAAC,CAAC;QAEF,OAAO,aAAa,EAAgC;AACtD,IAAA,CAAC;AACH;AAEA;AACA,SAAS,qBAAqB,CAC5B,QAA2E,EAAA;AAE3E,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,iDAAC;IAChC,IAAI,YAAY,GAAG,KAAK;IAExB,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC;;AAE3F,IAAA,MAAM,eAAe,GAAG,MAAM,GAAI,QAAgB,CAAC,MAAM,CAAC,GAAG,SAAS;AAEtE,IAAA,IACE,CAAC,MAAM;AACP,QAAA,CAAC,eAAe;AAChB,QAAA,OAAO,eAAe,CAAC,uBAAuB,KAAK,UAAU,EAC7D;AACA,QAAA,OAAO,CAAC,IAAI,CACV,4FAA4F,CAC7F;;QAED,OAAO,YAAY,CAAC,MAAM,QAAQ,EAAE,CAAC;IACvC;IAEA,MAAM,aAAa,GAAG,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC;IACnF,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACzC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAE/C,eAAe,CAAC,uBAAuB,GAAG,CAAC,eAAwB,EAAE,QAAiB,KAAI;QACxF,YAAY,GAAG,IAAI;QACnB,WAAW,CAAC,QAAQ,CAAC;AACrB,QAAA,aAAa,CAAC,eAAe,EAAE,QAAQ,CAAC;AAC1C,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,GAAG,GAAG,CAAC,QAAiB,KAAI;QAChC,IAAI,CAAC,YAAY,EAAE;YACjB,WAAW,CAAC,QAAQ,CAAC;QACvB;AACF,IAAA,CAAC;AAED,IAAA,KAAK,CAAC,MAAM,GAAG,CAAC,QAAqC,KAAI;QACvD,IAAI,CAAC,YAAY,EAAE;YACjB,cAAc,CAAC,QAAQ,CAAC;QAC1B;AACF,IAAA,CAAC;AAED,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,aAAa,CACpB,QAAiB,EAAA;AAEjB,IAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACvB,QAAA,OAAO,KAAK;IACd;IAEA,MAAM,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC;IAE3F,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,KAAK;IACd;;AAGA,IAAA,MAAM,eAAe,GAAG,MAAM,GAAI,QAAgB,CAAC,MAAM,CAAC,GAAG,SAAS;IAEtE,IAAI,CAAC,eAAe,EAAE;AACpB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,aAAa,IAAI,eAAe,IAAI,yBAAyB,IAAI,eAAe;AACzF;AAyCM,SAAU,eAAe,CAC7B,IAAY,EACZ,EAAY,EACZ,UAAkC,EAAE,EAAA;;IAQpC,MAAM,KAAK,GAAG,IAAI,cAAc,CAA2C,CAAA,WAAA,EAAc,IAAI,CAAA,CAAE,CAAC;;AAGhG,IAAA,MAAM,OAAO,IAAI,CAAC,KAA8B,KAAI;;QAElD,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;;AAGnD,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,YAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AACzB,gBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;AAClE,gBAAA,MAAM,EAAE,QAAQ;AACjB,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AAC1C,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,YAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;AAC1B,YAAA,KAAK,EAAE,GAAG,CAAC,QAAoC,CAAC;AAChD,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAa;IAOd,SAAS,QAAQ,CAA+B,OAG/C,EAAA;AACC,QAAA,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,KAAK;AACzC,QAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAK;QAE3C,IAAI,OAAO,EAAE;AACX,YAAA,QAAQ,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;QAC3D;QAEA,IAAI,QAAQ,EAAE;AACZ,YAAA,QAAQ,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;QAC3D;AAEA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAyB;IAC9C;;AAGA,IAAA,MAAM,SAAS,GAAG,CAAC,IAA4B,KAAqB;AAClE,QAAA,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI;QACrC,OAAO;AACL,YAAA,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,MAAK;AACf,gBAAA,IAAI,OAAO,KAAK,KAAK,EAAE;AACrB,oBAAA,OAAO,MAAM,CAAC,IAAI,CAAC;gBACrB;AAEA,gBAAA,OAAO,MAAM,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;YAC1E,CAAC;SACF;AACH,IAAA,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,OAAmB,EAAE,QAA0C,EAAE,SAAS,CAAC;AAC5F;AAEM,SAAU,UAAU,CAAI,KAAgB,EAAA;IAC5C,OAAO,YAAY,CAAC,MAAM,KAAK,EAAE,CAAC;AACpC;AAEA,SAAS,YAAY,CACnB,OAAgC,EAChC,IAAY,EACZ,KAAgC,EAAA;;IAGhC,IAAI,IAAI,KAAK,UAAU,IAAI,KAAK,KAAK,OAAO,EAAE;AAC5C,QAAA,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC;QAC3C;IACF;IAEA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACzC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;IACjD;SAAO;AACL,QAAA,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC;IAC7C;AACF;SAEgB,WAAW,CACzB,OAAgC,EAChC,IAAY,EACZ,KAMa,EAAA;AAEb,IAAA,iBAAiB,CAAC;QAChB,KAAK,EAAE,MAAK;AACV,YAAA,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK;AAEjE,YAAA,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;QAC9D,CAAC;AACF,KAAA,CAAC;AACJ;AAEA,SAAS,YAAY,CAAC,KAAa,EAAA;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAE9B,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAEpC,QAAQ,IAAI;AACV,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,KAAK;AACV,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,IAAI;AACP,gBAAA,OAAO,IAAI;AACb,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;AAEA,IAAA,OAAO,EAAE;AACX;SAEgB,YAAY,CAC1B,OAAgC,EAChC,KAAa,EACb,KAA8D,EAAA;AAE9D,IAAA,iBAAiB,CAAC;QAChB,KAAK,EAAE,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK;;AAEhE,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;YACrC,MAAM,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,SAAS,CAAA,CAAE,EAAE,EAAE,CAAC,GAAG,KAAK;AAExE,YAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,gBAAA,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;YAC5E;iBAAO;gBACL,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC;YACvD;QACF,CAAC;AACF,KAAA,CAAC;AACJ;SAEgB,WAAW,CACzB,OAAgC,EAChC,IAAY,EACZ,KAAgE,EAAA;IAEhE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC7B,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAA,yBAAA,CAA2B,CAAC;IAC7E;AAEA,IAAA,iBAAiB,CAAC;QAChB,KAAK,EAAE,MAAK;AACV,YAAA,IAAI,WAAW,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK;AAE/D,YAAA,IAAI,WAAW,KAAK,KAAK,EAAE;gBACzB,WAAW,GAAG,IAAI;YACpB;AAAO,iBAAA,IAAI,WAAW,KAAK,IAAI,EAAE;gBAC/B,WAAW,GAAG,EAAE;YAClB;iBAAO,IAAI,WAAW,KAAK,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AAClE,gBAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;YACnC;AAEA,YAAA,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC;QAC1C,CAAC;AACF,KAAA,CAAC;AACJ;AAaM,SAAU,QAAQ,CACtB,OAAyD,EACzD,KAAiB,EACjB,OAAwD,EACxD,OAA6E,EAAA;AAE7E,IAAA,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAK;AACvE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,QAAA,MAAM,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC;AAE5C,QAAA,MAAM,cAAc,GAAG,MACrB,aAAa,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAwB,EAAE,OAAO,EAAE,MAAM,CAAC;AACrF,QAAA,UAAU,CAAC,SAAS,CAAC,cAAc,CAAC;AACpC,QAAA,MAAM,CAAC,iBAAiB,CAAC,MACvB,aAAa,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAwB,EAAE,OAAO,EAAE,MAAM,CAAC,CACjF;AAED,QAAA,OAAO,cAAc;AACvB,IAAA,CAAC,CAAC;AACJ;AAEM,SAAU,OAAO,CAAC,QAAoB,EAAA;AAC1C,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,iBAAiB,CAAC,MAAM,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC;AAClF;AAEM,SAAU,SAAS,CAAC,QAAoB,EAAA;AAC5C,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,IAAA,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;AAChC;AAEA;;;;AAIG;AACG,SAAU,gBAAgB,CAC9B,MAAyB,EACzB,UAAkB,EAAA;AAElB,IAAA,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE;QACvB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAA;AACd,YAAA,IAAI,IAAI,KAAK,KAAK,EAAE;gBAClB,OAAO,CAAC,KAAQ,KAAI;AAClB,oBAAA,OAAO,CAAC,IAAI,CACV,4BAA4B,UAAU,CAAA,yCAAA,CAA2C,CAClF;AACD,oBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACnB,gBAAA,CAAC;YACH;AACA,YAAA,OAAO,MAAM,CAAC,IAA+B,CAAC;QAChD,CAAC;AACF,KAAA,CAAC;AACJ;AAEA;;;;AAIG;SACa,oBAAoB,CAClC,KAA8B,EAC9B,gBAA+B,EAAE,EAAA;AAEjC,IAAA,QACE,MAAM,CACJ,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC,EACzB,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CACrD,IAAI,IAAI;AAEb;AAOM,SAAU,OAAO,CAAI,EACzB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAA,GACA,EAAE,EAAA;AAC7B,IAAA,OAAO,qBAAqB,CAAC,QAAQ,EAAE,MAAK;AAC1C,QAAA,MAAM,YAAY,GAAG,IAAI,OAAO,EAAK;AACrC,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEhD,OAAO;AACL,YAAA,IAAI,CAAC,KAAQ,EAAA;AACX,gBAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxB,cAAc,CAAC,YAAY,EAAE;YAC/B,CAAC;YACD,YAAY,GAAA;AACV,gBAAA,OAAO,YAAY,CAAC,YAAY,EAAE;YACpC,CAAC;SACF;AACH,IAAA,CAAC,CAAC;AACJ;;AC1kBA;;AAEG;;;;"}
|
|
@@ -2,10 +2,9 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { signal, computed, Directive, input, booleanAttribute, output } from '@angular/core';
|
|
3
3
|
import { ngpInteractions } from 'ng-primitives/interactions';
|
|
4
4
|
import { injectElementRef } from 'ng-primitives/internal';
|
|
5
|
-
import { createPrimitive, controlled, attrBinding, dataBinding, listener, deprecatedSetter } from 'ng-primitives/state';
|
|
5
|
+
import { createPrimitive, controlled, emitter, attrBinding, dataBinding, listener, deprecatedSetter } from 'ng-primitives/state';
|
|
6
6
|
import { ngpFormControl } from 'ng-primitives/form-field';
|
|
7
7
|
import { uniqueId } from 'ng-primitives/utils';
|
|
8
|
-
import { Subject } from 'rxjs/internal/Subject';
|
|
9
8
|
|
|
10
9
|
const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] = createPrimitive('NgpSwitch', ({ id = signal(uniqueId('ngp-switch')), checked: _checked = signal(false), disabled: _disabled = signal(false), onCheckedChange, }) => {
|
|
11
10
|
const element = injectElementRef();
|
|
@@ -16,7 +15,7 @@ const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] =
|
|
|
16
15
|
const status = ngpFormControl({ id, disabled: disabledInput });
|
|
17
16
|
const disabled = computed(() => status().disabled ?? disabledInput(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
18
17
|
ngpInteractions({ hover: true, press: true, focusVisible: true, disabled });
|
|
19
|
-
const checkedChange =
|
|
18
|
+
const checkedChange = emitter();
|
|
20
19
|
const tabindex = computed(() => (disabled() ? -1 : 0), ...(ngDevMode ? [{ debugName: "tabindex" }] : []));
|
|
21
20
|
// Host bindings
|
|
22
21
|
attrBinding(element, 'role', 'switch');
|
|
@@ -48,7 +47,7 @@ const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] =
|
|
|
48
47
|
function setChecked(value) {
|
|
49
48
|
checked.set(value);
|
|
50
49
|
onCheckedChange?.(value);
|
|
51
|
-
checkedChange.
|
|
50
|
+
checkedChange.emit(value);
|
|
52
51
|
}
|
|
53
52
|
function setDisabled(value) {
|
|
54
53
|
disabledInput.set(value);
|
|
@@ -57,7 +56,7 @@ const [NgpSwitchStateToken, ngpSwitch, injectSwitchState, provideSwitchState] =
|
|
|
57
56
|
id,
|
|
58
57
|
checked: deprecatedSetter(checked, 'setChecked'),
|
|
59
58
|
disabled: deprecatedSetter(disabledInput, 'setDisabled'),
|
|
60
|
-
checkedChange,
|
|
59
|
+
checkedChange: checkedChange.asObservable(),
|
|
61
60
|
toggle,
|
|
62
61
|
setChecked,
|
|
63
62
|
setDisabled,
|