@spartan-ng/brain 0.0.1-alpha.708 → 0.0.1-alpha.709
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/spartan-ng-brain-accordion.mjs +27 -28
- package/fesm2022/spartan-ng-brain-accordion.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-checkbox.mjs +5 -4
- package/fesm2022/spartan-ng-brain-checkbox.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-input-otp.mjs +12 -12
- package/fesm2022/spartan-ng-brain-input-otp.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-radio-group.mjs +5 -4
- package/fesm2022/spartan-ng-brain-radio-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-slider.mjs +5 -4
- package/fesm2022/spartan-ng-brain-slider.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-switch.mjs +16 -5
- package/fesm2022/spartan-ng-brain-switch.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle-group.mjs +5 -6
- package/fesm2022/spartan-ng-brain-toggle-group.mjs.map +1 -1
- package/package.json +1 -1
- package/types/spartan-ng-brain-accordion.d.ts +2 -1
- package/types/spartan-ng-brain-checkbox.d.ts +4 -3
- package/types/spartan-ng-brain-input-otp.d.ts +3 -2
- package/types/spartan-ng-brain-radio-group.d.ts +3 -2
- package/types/spartan-ng-brain-slider.d.ts +3 -2
- package/types/spartan-ng-brain-switch.d.ts +12 -2
- package/types/spartan-ng-brain-toggle-group.d.ts +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-slider.mjs","sources":["../../../../libs/brain/slider/src/lib/brn-slider.token.ts","../../../../libs/brain/slider/src/lib/brn-slider.ts","../../../../libs/brain/slider/src/lib/brn-slider-range.ts","../../../../libs/brain/slider/src/lib/utils/linear-scale.ts","../../../../libs/brain/slider/src/lib/brn-slider-thumb.ts","../../../../libs/brain/slider/src/lib/brn-slider-tick.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.token.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.ts","../../../../libs/brain/slider/src/index.ts","../../../../libs/brain/slider/src/spartan-ng-brain-slider.ts"],"sourcesContent":["import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSlider } from './brn-slider';\n\nconst BrnSliderToken = new InjectionToken<BrnSlider>('BrnSliderToken');\n\nexport function provideBrnSlider(slider: Type<BrnSlider>): ExistingProvider {\n\treturn { provide: BrnSliderToken, useExisting: slider };\n}\n\nexport function injectBrnSlider(): BrnSlider {\n\treturn inject(BrnSliderToken);\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tbooleanAttribute,\n\tcomputed,\n\tDirective,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\ttype OnInit,\n\toutput,\n\tsignal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl, NgModel } from '@angular/forms';\nimport { BrnFieldControl } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport type { BrnSliderRange } from './brn-slider-range';\nimport type { BrnSliderThumb } from './brn-slider-thumb';\nimport type { BrnSliderTrack } from './brn-slider-track';\nimport { provideBrnSlider } from './brn-slider.token';\n\nexport const BRN_SLIDER_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSlider),\n\tmulti: true,\n};\n\nlet nextId = 0;\n\n@Directive({\n\tselector: '[brnSlider]',\n\texportAs: 'brnSlider',\n\tproviders: [BRN_SLIDER_VALUE_ACCESSOR, provideBrnSlider(BrnSlider)],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'[attr.id]': 'id()',\n\t\t'[attr.dir]': '_direction()',\n\t\t'[attr.aria-disabled]': 'mutableDisabled() ? \"true\" : null',\n\t\t'[attr.data-disabled]': 'mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-inverted]': 'inverted() ? \"\" : null',\n\t\t'[attr.data-orientation]': 'orientation()',\n\t\t'data-slot': 'slider',\n\t\t'(focusout)': '_onFocusOut($event)',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty() ? \"true\" : null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\" : null',\n\t},\n})\nexport class BrnSlider implements ControlValueAccessor, OnInit {\n\tprivate readonly _dir = inject(Directionality);\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl);\n\tpublic ngControl: NgControl | null = null;\n\n\tprotected readonly _ariaInvalid = this._fieldControl.invalid;\n\tprotected readonly _dirty = this._fieldControl.dirty;\n\tprotected readonly _touched = this._fieldControl.touched;\n\tprotected readonly _spartanInvalid = this._fieldControl.spartanInvalid;\n\n\t/** Unique identifier for the slider element. Auto-generated if not provided. */\n\tpublic readonly id = input<string>(`brn-slider-${++nextId}`);\n\n\t/** Accessibility label for the slider. Forwarded to all thumbs. */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/** ID of the element that labels this slider for accessibility. Forwarded to all thumbs. */\n\tpublic readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n\t/**\n\t * The current slider value(s).\n\t *\n\t * For single-thumb sliders, this contains one value.\n\t * For range sliders, values are kept sorted in ascending order.\n\t */\n\tpublic readonly value = model<number[]>([]);\n\n\t/** Minimum allowed slider value. */\n\tpublic readonly min = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Maximum allowed slider value. */\n\tpublic readonly max = input<number, NumberInput>(100, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Step increment used when changing values. */\n\tpublic readonly step = input<number, NumberInput>(1, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Minimum number of steps required between thumbs in a range slider. */\n\tpublic readonly minStepsBetweenThumbs = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Whether the slider is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the slider direction is inverted. */\n\tpublic readonly inverted = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Slider orientation. */\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n\t/** Whether tick marks should be displayed. */\n\tpublic readonly showTicks = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Maximum number of ticks to render. Excess ticks are evenly distributed. */\n\tpublic readonly maxTicks = input<number, NumberInput>(25, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Interval at which tick labels are shown. A value of `2` shows a label every second tick. */\n\tpublic readonly tickLabelInterval = input<number, NumberInput>(2, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Defines how the tick should be displayed in the UI. */\n\tpublic readonly formatTick = input<(tick: number) => string>((tick) => tick.toString());\n\n\t/** Whether dragging the selected range should move all thumbs together. */\n\tpublic readonly draggableRange = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether only dragging the range should work (overrides normal track clicks). */\n\tpublic readonly draggableRangeOnly = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Emits when the value changes. */\n\tpublic readonly valueChange = output<number[]>();\n\n\t/** @internal Normalized slider values. Values are clamped to `[min, max]` and sorted in ascending order. */\n\tpublic readonly normalizedValue = computed(\n\t\t() => [...this.value()].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()])),\n\t\t{ equal: areArrsEqual },\n\t);\n\n\t/** Indexes for all active thumbs. */\n\tpublic readonly thumbIndexes = computed(() => Array.from({ length: this.normalizedValue().length }, (_, i) => i), {\n\t\tequal: (a, b) => a.length === b.length,\n\t});\n\n\t/** @internal Whether the slider is in range mode and draggable range is enabled */\n\tpublic readonly isDraggableRange = computed(() => this.draggableRange() && this.normalizedValue().length > 1);\n\n\t/** @internal Whether dragging should only move the range. */\n\tpublic readonly isDraggableRangeOnly = computed(() => this.draggableRangeOnly() && this.isDraggableRange());\n\n\tprotected readonly _direction = this._dir.valueSignal;\n\n\t/** @internal Logical edge from which the slider value increases. */\n\tpublic readonly slidingSource = computed<'top' | 'bottom' | 'left' | 'right'>(() => {\n\t\tconst orientation = this.orientation();\n\t\tconst inverted = this.inverted();\n\n\t\tif (orientation === 'vertical') {\n\t\t\treturn inverted ? 'top' : 'bottom';\n\t\t}\n\n\t\tconst isLtr = this._direction() === 'ltr';\n\t\tconst fromLeft = (isLtr && !inverted) || (!isLtr && inverted);\n\n\t\treturn fromLeft ? 'left' : 'right';\n\t});\n\n\t/** @internal */\n\tpublic readonly isHorizontal = computed(() => this.orientation() === 'horizontal');\n\n\t/** @internal Reference to the slider track instance. */\n\tpublic readonly track = signal<BrnSliderTrack | null>(null);\n\n\t/** @internal Reference to the slider range instance. */\n\tpublic readonly range = signal<BrnSliderRange | null>(null);\n\n\t/** @internal All registered slider thumbs. */\n\tpublic readonly thumbs = signal<BrnSliderThumb[]>([]);\n\n\t/** @internal Index of the thumb currently being updated. */\n\tpublic readonly valueIndexToChange = signal(0);\n\n\t/** @internal Visible tick values after applying density reduction. */\n\tpublic readonly ticks = computed(() => {\n\t\tif (!this.showTicks()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst maxTicks = this.maxTicks();\n\n\t\tif (step <= 0 || min > max) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst totalCount = Math.floor((max - min) / step) + 1;\n\n\t\t// No need to reduce\n\t\tif (totalCount <= maxTicks) {\n\t\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step);\n\t\t}\n\n\t\tconst stride = Math.ceil(totalCount / maxTicks);\n\n\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step).filter((_, index) => index % stride === 0);\n\t});\n\n\t/** @internal Disabled state that can be controlled internally or externally. */\n\tpublic readonly mutableDisabled = linkedSignal(() => this.disabled());\n\n\t/** @internal Store the on change callback */\n\tprivate _onChange?: ChangeFn<number[]>;\n\n\t/** @internal Store the on touched callback */\n\tprivate _onTouched?: TouchFn;\n\n\tngOnInit(): void {\n\t\tthis.ngControl = this._injector.get(NgControl, null);\n\n\t\t// If bound to an Angular form control, writeValue() will run after ngOnInit,\n\t\t// so avoid initializing defaults here to prevent a transient min-value override.\n\t\tif (!this.ngControl) {\n\t\t\tif (!this.value().length) {\n\t\t\t\tconst defaultValue = [this.min()];\n\t\t\t\tthis.value.set(defaultValue);\n\t\t\t}\n\n\t\t\tconst normalizedValue = this.value()\n\t\t\t\t.map((v) => clamp(v, [this.min(), this.max()]))\n\t\t\t\t.sort((a, b) => a - b);\n\n\t\t\tif (!areArrsEqual(normalizedValue, this.value())) {\n\t\t\t\tthis.value.set(normalizedValue);\n\t\t\t}\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: number[]) => void): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.mutableDisabled.set(isDisabled);\n\t}\n\n\twriteValue(value: number[]): void {\n\t\tif (!Array.isArray(value)) return;\n\n\t\tif (this.ngControl instanceof NgModel && !this._onChange) {\n\t\t\t// Avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-2946355465\n\t\t\treturn;\n\t\t}\n\n\t\tconst newValue = [...value].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()]));\n\t\tthis.value.set(newValue);\n\t}\n\n\t/** Sets a new value for the slider at the given thumb index. */\n\tsetValue(value: number, atIndex: number): void {\n\t\tconst decimalCount = getDecimalCount(this.step());\n\t\tconst snapToStep = roundValue(\n\t\t\tMath.round((value - this.min()) / this.step()) * this.step() + this.min(),\n\t\t\tdecimalCount,\n\t\t);\n\n\t\tvalue = clamp(snapToStep, [this.min(), this.max()]);\n\n\t\tconst newValue = [...this.normalizedValue()];\n\t\tnewValue[atIndex] = value;\n\t\tnewValue.sort((a, b) => a - b);\n\n\t\tif (!hasMinStepsBetweenValues(newValue, this.minStepsBetweenThumbs() * this.step())) return;\n\n\t\tconst newValIndex = newValue.findIndex((val) => val === value);\n\t\tthis.valueIndexToChange.set(newValIndex);\n\n\t\tif (areArrsEqual(newValue, this.value())) return;\n\n\t\tthis.value.set(newValue);\n\t\tthis._onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\n\t\tif (this.thumbs()[newValIndex]) {\n\t\t\tthis.thumbs()[newValIndex].elementRef.nativeElement.focus();\n\t\t}\n\t}\n\n\t/** Moves the entire range by a delta value, snapping to step and preserving spacing. */\n\tsetAllValuesByDelta(delta: number): void {\n\t\tconst current = this.normalizedValue();\n\t\tif (!current.length || delta === 0) return;\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst decimalCount = getDecimalCount(step);\n\n\t\tconst snappedDelta = roundValue(Math.round(delta / step) * step, decimalCount);\n\t\tif (snappedDelta === 0) return;\n\n\t\tlet next = current.map((v) => v + snappedDelta);\n\n\t\tconst rangeMin = Math.min(...next);\n\t\tconst rangeMax = Math.max(...next);\n\n\t\tif (rangeMin < min) {\n\t\t\tconst offset = min - rangeMin;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t} else if (rangeMax > max) {\n\t\t\tconst offset = max - rangeMax;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t}\n\n\t\tnext = next.map((v) => roundValue(v, decimalCount));\n\n\t\tif (areArrsEqual(next, this.value())) return;\n\n\t\tthis.value.set(next);\n\t\tthis._onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t}\n\n\t/** @internal */\n\taddThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => {\n\t\t\tthumbs.push(thumb);\n\t\t\treturn [...thumbs];\n\t\t});\n\t}\n\n\t/** @internal */\n\tremoveThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => thumbs.filter((t) => t !== thumb));\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n\nfunction areArrsEqual(arr1: unknown[], arr2: unknown[]): boolean {\n\treturn String(arr1) === String(arr2);\n}\n\nfunction roundValue(value: number, decimalCount: number): number {\n\tconst rounder = Math.pow(10, decimalCount);\n\treturn Math.round(value * rounder) / rounder;\n}\n\nfunction getDecimalCount(value: number): number {\n\treturn (String(value).split('.')[1] || '').length;\n}\n\nfunction clamp(value: number, [min, max]: [number, number]): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction getStepsBetweenValues(values: number[]): number[] {\n\treturn values.slice(0, -1).map((value, index) => values[index + 1]! - value);\n}\n\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number): boolean {\n\tif (minStepsBetweenValues > 0) {\n\t\tconst stepsBetweenValues = getStepsBetweenValues(values);\n\t\tconst actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n\t\treturn actualMinStepsBetweenValues >= minStepsBetweenValues;\n\t}\n\treturn true;\n}\n","import { computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderRange]',\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[attr.data-draggable-range]': '_slider.isDraggableRange() ? \"\" : null',\n\t\t'data-slot': 'slider-range',\n\t\t'[style.inset-inline]': '_slider.isHorizontal() ? _rangeInset() : undefined',\n\t\t'[style.inset-block]': '!_slider.isHorizontal() ? _rangeInset() : undefined',\n\t},\n})\nexport class BrnSliderRange {\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tconstructor() {\n\t\tthis._slider.range.set(this);\n\t}\n\n\tprotected readonly _rangeInset = computed(() => {\n\t\tconst thumbs = this._slider.thumbs();\n\t\tif (!thumbs.length) return;\n\n\t\tconst inverted = this._slider.inverted();\n\t\tconst isHorizontal = this._slider.isHorizontal();\n\n\t\tconst start = thumbs[0].percentage();\n\t\tconst end = thumbs[thumbs.length - 1].percentage();\n\n\t\tconst inset = thumbs.length > 1 ? [`${start}%`, `${100 - end}%`] : ['0px', `${100 - start}%`];\n\n\t\tif (!isHorizontal) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\tif (inverted) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\treturn inset.join(' ');\n\t});\n}\n","export function linearScale(\n\tinput: readonly [number, number],\n\toutput: readonly [number, number],\n): (value: number) => number {\n\treturn (value: number) => {\n\t\tif (input[0] === input[1] || output[0] === output[1]) return output[0];\n\t\tconst ratio = (output[1] - output[0]) / (input[1] - input[0]);\n\t\treturn output[0] + ratio * (value - input[0]);\n\t};\n}\n","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, Directive, ElementRef, inject, PLATFORM_ID } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\n\n@Directive({\n\tselector: '[brnSliderThumb]',\n\thost: {\n\t\trole: 'slider',\n\t\t'[attr.aria-label]': `_computedAriaLabel()`,\n\t\t'[attr.aria-labelledby]': '_slider.ariaLabelledby() || null',\n\t\t'[attr.aria-orientation]': '_slider.orientation()',\n\t\t'[attr.aria-valuenow]': '_slider.normalizedValue()[_index()]',\n\t\t'[attr.aria-valuemin]': '_slider.min()',\n\t\t'[attr.aria-valuemax]': '_slider.max()',\n\t\t'[attr.tabindex]': '_slider.mutableDisabled() ? -1 : 0',\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[style.inset-inline-start]':\n\t\t\t'_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-inline-end]': '_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.inset-block-end]': '!_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-block-start]':\n\t\t\t'!_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.visibility]': '_thumbReady() ? undefined : \"hidden\"',\n\t\t'[style.pointer-events]': '_thumbReady() ? undefined : \"none\"',\n\t\t'[style.transform]': '_transformValue()',\n\t\t'data-slot': 'slider-thumb',\n\t\t'(pointerdown)': '_onPointerDown($event)',\n\t\t'(pointermove)': '_onPointerMove($event)',\n\t\t'(pointerup)': '_onPointerUp($event)',\n\t\t'(keydown)': 'handleKeydown($event)',\n\t},\n})\nexport class BrnSliderThumb {\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _size = injectElementSize();\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/**\n\t * Indicates whether the thumb is ready to be displayed and interactable.\n\t *\n\t * This signal returns `true` when the element's size has been measured\n\t * and the width is greater than 0. It ensures that the thumb is not\n\t * rendered or interacted with prematurely, which prevents layout\n\t * issues or first-frame “jerks” when using SSR.\n\t */\n\tprotected readonly _thumbReady = computed(() => {\n\t\tconst size = this._size();\n\t\treturn !!size && size.width > 0;\n\t});\n\n\tprotected readonly _index = computed(() => this._slider.thumbs().findIndex((thumb) => thumb === this));\n\n\tpublic readonly percentage = computed(() => {\n\t\tconst range = this._slider.max() - this._slider.min();\n\t\tif (range === 0) return 0;\n\n\t\treturn ((this._slider.normalizedValue()[this._index()] - this._slider.min()) / range) * 100;\n\t});\n\n\tprivate readonly _thumbInBoundsOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst size = this._slider.isHorizontal() ? this._size()?.width : this._size()?.height;\n\t\tif (!size) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst halfSize = size / 2;\n\t\tconst offset = linearScale([0, 50], [0, halfSize]);\n\t\tconst direction = this._slider.slidingSource() === 'left' || this._slider.slidingSource() === 'top' ? 1 : -1;\n\n\t\treturn (halfSize - offset(this.percentage()) * direction) * direction;\n\t});\n\n\t/**\n\t * Offsets the thumb centre point while sliding to ensure it remains\n\t * within the bounds of the slider when reaching the edges.\n\t * Based on https://github.com/radix-ui/primitives/blob/main/packages/react/slider/src/slider.tsx\n\t */\n\tprotected readonly _thumbOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn this.percentage() + '%';\n\t\t}\n\n\t\treturn `calc(${this.percentage()}% + ${this._thumbInBoundsOffset()}px)`;\n\t});\n\n\tprotected readonly _computedAriaLabel = computed(\n\t\t() => this._slider.ariaLabel() || `Value ${this._index() + 1} of ${this._slider.normalizedValue().length}`,\n\t);\n\n\tprotected readonly _transformValue = computed(() =>\n\t\tthis._slider.orientation() === 'horizontal' ? 'translateX(-50%)' : 'translateY(-50%)',\n\t);\n\n\tconstructor() {\n\t\tthis._slider.addThumb(this);\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._slider.removeThumb(this);\n\t\t});\n\t}\n\n\tprotected _onPointerDown(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerDown(event);\n\t}\n\n\tprotected _onPointerMove(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerMove(event);\n\t}\n\n\tprotected _onPointerUp(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerUp(event);\n\t}\n\n\tprotected handleKeydown(event: KeyboardEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst step = this._slider.step();\n\t\tconst min = this._slider.min();\n\t\tconst max = this._slider.max();\n\t\tconst multiplier = event.shiftKey || PAGE_KEYS.includes(event.key) ? 10 : 1;\n\n\t\t// Determine delta based on slider orientation\n\t\tconst dirLR = this._slider.slidingSource() === 'right' ? -1 : 1;\n\t\tconst dirUD = this._slider.slidingSource() === 'top' ? -1 : 1;\n\n\t\tconst deltas: Partial<Record<string, number>> = {\n\t\t\tArrowLeft: -step * multiplier * dirLR,\n\t\t\tArrowRight: step * multiplier * dirLR,\n\t\t\tArrowUp: step * multiplier * dirUD,\n\t\t\tArrowDown: -step * multiplier * dirUD,\n\t\t\tPageUp: step * multiplier,\n\t\t\tPageDown: -step * multiplier,\n\t\t};\n\n\t\t// Home/End keys\n\t\tif (event.key === 'Home') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = min - range[0];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(min, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'End') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = max - range[range.length - 1];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(max, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst delta = deltas[event.key];\n\t\tif (delta === undefined) return;\n\n\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t} else {\n\t\t\tconst index = this._index();\n\t\t\tconst value = this._slider.normalizedValue()[index];\n\t\t\tthis._slider.setValue(Math.min(max, Math.max(min, value + delta)), index);\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n}\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\tRenderer2,\n\tTemplateRef,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderTick]',\n\thost: {\n\t\t'data-slot': 'slider-tick',\n\t},\n})\nexport class BrnSliderTick {\n\tprivate readonly _slider = injectBrnSlider();\n\tprivate readonly _templateRef = inject<TemplateRef<BrnSliderTickContext>>(TemplateRef);\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _viewContainer = inject(ViewContainerRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate _ticks: EmbeddedViewRef<BrnSliderTickContext>[] = [];\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst ticks = this._slider.ticks();\n\t\t\tconst tickLabelInterval = this._slider.tickLabelInterval();\n\n\t\t\t// Remove any existing ticks\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\n\t\t\t// Create new ticks\n\t\t\tthis._ticks = [];\n\n\t\t\tticks.forEach((tick, index) => {\n\t\t\t\tconst view = this._viewContainer.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: tick,\n\t\t\t\t\tindex,\n\t\t\t\t\tformattedTick: this._slider.formatTick()(tick),\n\t\t\t\t});\n\n\t\t\t\tconst tickEl = view.rootNodes[0] as HTMLElement;\n\t\t\t\tif (tickLabelInterval === 0 || index % tickLabelInterval !== 0) {\n\t\t\t\t\tthis._renderer.setAttribute(tickEl, 'data-skip', '');\n\t\t\t\t}\n\n\t\t\t\tthis._ticks.push(view);\n\t\t\t});\n\t\t});\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\t\t});\n\t}\n}\n\nexport interface BrnSliderTickContext {\n\t$implicit: number;\n\tindex: number;\n\tformattedTick: string;\n}\n","import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSliderTrack } from './brn-slider-track';\n\nexport const BrnSliderTrackToken = new InjectionToken<BrnSliderTrack>('BrnSliderTrackToken');\n\nexport function provideBrnSliderTrack(slider: Type<BrnSliderTrack>): ExistingProvider {\n\treturn { provide: BrnSliderTrackToken, useExisting: slider };\n}\n\nexport function injectBrnSliderTrack(): BrnSliderTrack {\n\treturn inject(BrnSliderTrackToken);\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { provideBrnSliderTrack } from './brn-slider-track.token';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\n@Directive({\n\tselector: '[brnSliderTrack]',\n\tproviders: [provideBrnSliderTrack(BrnSliderTrack)],\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'data-slot': 'slider-track',\n\t\t'(pointerdown)': 'onPointerDown($event)',\n\t\t'(pointermove)': 'onPointerMove($event)',\n\t\t'(pointerup)': 'onPointerUp($event)',\n\t},\n})\nexport class BrnSliderTrack {\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprotected readonly _slider = injectBrnSlider();\n\n\tprivate _rangeDragStartPointer: number | null = null;\n\tprivate _rangeDragAccumulatedDelta = 0;\n\n\tconstructor() {\n\t\tthis._slider.track.set(this);\n\t}\n\n\tpublic onPointerDown(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tconst isTrack = this._isTrack(target);\n\n\t\t// Draggable range only: ignore empty track clicks\n\t\tif (isTrack && this._slider.isDraggableRangeOnly()) return;\n\n\t\ttarget.setPointerCapture(event.pointerId);\n\t\tconst isRange = this._isRange(target);\n\n\t\t// Prevent browser focus behaviour because we instead focus a thumb manually when values change.\n\t\tif (isTrack || isRange) event.preventDefault();\n\n\t\tif ((isRange && this._slider.isDraggableRange()) || this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._rangeDragStartPointer = this._getPointerPosition(event);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tconst closestIndex = getClosestValueIndex(this._slider.normalizedValue(), value);\n\n\t\tif (isTrack || isRange) {\n\t\t\tthis._slider.setValue(value, closestIndex);\n\t\t} else {\n\t\t\tthis._slider.valueIndexToChange.set(closestIndex);\n\t\t}\n\t}\n\n\tpublic onPointerMove(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tif (!target.hasPointerCapture(event.pointerId)) return;\n\n\t\tif (this._rangeDragStartPointer !== null && this._slider.isDraggableRange()) {\n\t\t\tconst currentPointer = this._getPointerPosition(event);\n\t\t\tconst pixelDelta = currentPointer - this._rangeDragStartPointer;\n\t\t\tconst valueDelta = this._pixelDeltaToValueDelta(pixelDelta);\n\n\t\t\t// Accumulate sub-step deltas\n\t\t\tthis._rangeDragAccumulatedDelta += valueDelta;\n\n\t\t\tconst step = this._slider.step();\n\t\t\tconst snappedDelta = Math.trunc(this._rangeDragAccumulatedDelta / step) * step;\n\n\t\t\tif (snappedDelta !== 0) {\n\t\t\t\tthis._slider.setAllValuesByDelta(snappedDelta);\n\n\t\t\t\t// Remove the applied delta, keep remainder\n\t\t\t\tthis._rangeDragAccumulatedDelta -= snappedDelta;\n\t\t\t}\n\n\t\t\t// Reset start pointer so delta stays incremental\n\t\t\tthis._rangeDragStartPointer = currentPointer;\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tthis._slider.setValue(value, this._slider.valueIndexToChange());\n\t}\n\n\tpublic onPointerUp(event: PointerEvent): void {\n\t\tconst target = event.target as HTMLElement;\n\n\t\tif (target.hasPointerCapture(event.pointerId)) {\n\t\t\ttarget.releasePointerCapture(event.pointerId);\n\t\t}\n\n\t\tthis._rangeDragStartPointer = null;\n\t\tthis._rangeDragAccumulatedDelta = 0;\n\t}\n\n\tprivate _getValueFromPointer(pointerPosition: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst source = this._slider.slidingSource();\n\n\t\tconst isVertical = source === 'top' || source === 'bottom';\n\t\tconst size = isVertical ? rect.height : rect.width;\n\n\t\tconst input: [number, number] = [0, size];\n\t\tconst output: [number, number] = [this._slider.min(), this._slider.max()];\n\t\tconst value = linearScale(input, output);\n\n\t\tlet relativePosition: number;\n\n\t\tswitch (source) {\n\t\t\tcase 'left':\n\t\t\t\trelativePosition = pointerPosition - rect.left;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\trelativePosition = rect.right - pointerPosition;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\trelativePosition = pointerPosition - rect.top;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\trelativePosition = rect.bottom - pointerPosition;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn value(relativePosition);\n\t}\n\n\tprivate _pixelDeltaToValueDelta(pixelDelta: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst size = this._slider.isHorizontal() ? rect.width : rect.height;\n\n\t\tconst scale = linearScale([0, size], [this._slider.min(), this._slider.max()]);\n\n\t\t// Determine direction multiplier based on sliding source\n\t\tlet direction = 1;\n\t\tswitch (this._slider.slidingSource()) {\n\t\t\tcase 'right':\n\t\t\tcase 'bottom':\n\t\t\t\tdirection = -1;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\tcase 'top':\n\t\t\t\tdirection = 1;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn scale(pixelDelta * direction) - scale(0);\n\t}\n\n\tprivate _isTrack(el: HTMLElement): boolean {\n\t\treturn this._elementRef.nativeElement === el;\n\t}\n\n\tprivate _isRange(el: HTMLElement): boolean {\n\t\treturn this._slider.range()?.elementRef.nativeElement === el;\n\t}\n\n\tprivate _getPointerPosition(event: PointerEvent): number {\n\t\treturn this._slider.orientation() === 'horizontal' ? event.clientX : event.clientY;\n\t}\n}\n\nfunction getClosestValueIndex(values: number[], nextValue: number): number {\n\tif (values.length === 1) return 0;\n\tconst distances = values.map((value) => Math.abs(value - nextValue));\n\tconst closestDistance = Math.min(...distances);\n\treturn distances.indexOf(closestDistance);\n}\n","import { BrnSlider } from './lib/brn-slider';\nimport { BrnSliderRange } from './lib/brn-slider-range';\nimport { BrnSliderThumb } from './lib/brn-slider-thumb';\nimport { BrnSliderTick } from './lib/brn-slider-tick';\nimport { BrnSliderTrack } from './lib/brn-slider-track';\n\nexport * from './lib/brn-slider';\nexport * from './lib/brn-slider-range';\nexport * from './lib/brn-slider-thumb';\nexport * from './lib/brn-slider-tick';\nexport * from './lib/brn-slider-track';\nexport * from './lib/brn-slider-track.token';\nexport * from './lib/brn-slider.token';\n\nexport const BrnSliderImports = [BrnSlider, BrnSliderTrack, BrnSliderThumb, BrnSliderRange, BrnSliderTick] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-slider.mjs","sources":["../../../../libs/brain/slider/src/lib/brn-slider.token.ts","../../../../libs/brain/slider/src/lib/brn-slider.ts","../../../../libs/brain/slider/src/lib/brn-slider-range.ts","../../../../libs/brain/slider/src/lib/utils/linear-scale.ts","../../../../libs/brain/slider/src/lib/brn-slider-thumb.ts","../../../../libs/brain/slider/src/lib/brn-slider-tick.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.token.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.ts","../../../../libs/brain/slider/src/index.ts","../../../../libs/brain/slider/src/spartan-ng-brain-slider.ts"],"sourcesContent":["import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSlider } from './brn-slider';\n\nconst BrnSliderToken = new InjectionToken<BrnSlider>('BrnSliderToken');\n\nexport function provideBrnSlider(slider: Type<BrnSlider>): ExistingProvider {\n\treturn { provide: BrnSliderToken, useExisting: slider };\n}\n\nexport function injectBrnSlider(): BrnSlider {\n\treturn inject(BrnSliderToken);\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tbooleanAttribute,\n\tcomputed,\n\tDirective,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tnumberAttribute,\n\ttype OnInit,\n\toutput,\n\tsignal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl, NgModel } from '@angular/forms';\nimport { BrnFieldControl } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport type { BrnSliderRange } from './brn-slider-range';\nimport type { BrnSliderThumb } from './brn-slider-thumb';\nimport type { BrnSliderTrack } from './brn-slider-track';\nimport { provideBrnSlider } from './brn-slider.token';\n\nexport const BRN_SLIDER_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSlider),\n\tmulti: true,\n};\n\nlet nextId = 0;\n\n@Directive({\n\tselector: '[brnSlider]',\n\texportAs: 'brnSlider',\n\tproviders: [BRN_SLIDER_VALUE_ACCESSOR, provideBrnSlider(BrnSlider)],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'[attr.id]': 'id()',\n\t\t'[attr.dir]': '_direction()',\n\t\t'[attr.aria-disabled]': 'mutableDisabled() ? \"true\" : null',\n\t\t'[attr.data-disabled]': 'mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-inverted]': 'inverted() ? \"\" : null',\n\t\t'[attr.data-orientation]': 'orientation()',\n\t\t'data-slot': 'slider',\n\t\t'(focusout)': '_onFocusOut($event)',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty() ? \"true\" : null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\" : null',\n\t},\n})\nexport class BrnSlider implements ControlValueAccessor, OnInit {\n\tprivate readonly _dir = inject(Directionality);\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl);\n\tpublic ngControl: NgControl | null = null;\n\n\tprotected readonly _ariaInvalid = this._fieldControl.invalid;\n\tprotected readonly _dirty = this._fieldControl.dirty;\n\tprotected readonly _touched = this._fieldControl.touched;\n\tprotected readonly _spartanInvalid = this._fieldControl.spartanInvalid;\n\n\t/** Unique identifier for the slider element. Auto-generated if not provided. */\n\tpublic readonly id = input<string>(`brn-slider-${++nextId}`);\n\n\t/** Accessibility label for the slider. Forwarded to all thumbs. */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/** ID of the element that labels this slider for accessibility. Forwarded to all thumbs. */\n\tpublic readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n\t/**\n\t * The current slider value(s).\n\t *\n\t * For single-thumb sliders, this contains one value.\n\t * For range sliders, values are kept sorted in ascending order.\n\t */\n\tpublic readonly valueInput = input<number[]>([], { alias: 'value' });\n\tpublic readonly value = linkedSignal(this.valueInput);\n\n\t/** Minimum allowed slider value. */\n\tpublic readonly min = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Maximum allowed slider value. */\n\tpublic readonly max = input<number, NumberInput>(100, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Step increment used when changing values. */\n\tpublic readonly step = input<number, NumberInput>(1, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Minimum number of steps required between thumbs in a range slider. */\n\tpublic readonly minStepsBetweenThumbs = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Whether the slider is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the slider direction is inverted. */\n\tpublic readonly inverted = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Slider orientation. */\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n\t/** Whether tick marks should be displayed. */\n\tpublic readonly showTicks = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Maximum number of ticks to render. Excess ticks are evenly distributed. */\n\tpublic readonly maxTicks = input<number, NumberInput>(25, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Interval at which tick labels are shown. A value of `2` shows a label every second tick. */\n\tpublic readonly tickLabelInterval = input<number, NumberInput>(2, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Defines how the tick should be displayed in the UI. */\n\tpublic readonly formatTick = input<(tick: number) => string>((tick) => tick.toString());\n\n\t/** Whether dragging the selected range should move all thumbs together. */\n\tpublic readonly draggableRange = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether only dragging the range should work (overrides normal track clicks). */\n\tpublic readonly draggableRangeOnly = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Emits when the value changes. */\n\tpublic readonly valueChange = output<number[]>();\n\n\t/** @internal Normalized slider values. Values are clamped to `[min, max]` and sorted in ascending order. */\n\tpublic readonly normalizedValue = computed(\n\t\t() => [...this.value()].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()])),\n\t\t{ equal: areArrsEqual },\n\t);\n\n\t/** Indexes for all active thumbs. */\n\tpublic readonly thumbIndexes = computed(() => Array.from({ length: this.normalizedValue().length }, (_, i) => i), {\n\t\tequal: (a, b) => a.length === b.length,\n\t});\n\n\t/** @internal Whether the slider is in range mode and draggable range is enabled */\n\tpublic readonly isDraggableRange = computed(() => this.draggableRange() && this.normalizedValue().length > 1);\n\n\t/** @internal Whether dragging should only move the range. */\n\tpublic readonly isDraggableRangeOnly = computed(() => this.draggableRangeOnly() && this.isDraggableRange());\n\n\tprotected readonly _direction = this._dir.valueSignal;\n\n\t/** @internal Logical edge from which the slider value increases. */\n\tpublic readonly slidingSource = computed<'top' | 'bottom' | 'left' | 'right'>(() => {\n\t\tconst orientation = this.orientation();\n\t\tconst inverted = this.inverted();\n\n\t\tif (orientation === 'vertical') {\n\t\t\treturn inverted ? 'top' : 'bottom';\n\t\t}\n\n\t\tconst isLtr = this._direction() === 'ltr';\n\t\tconst fromLeft = (isLtr && !inverted) || (!isLtr && inverted);\n\n\t\treturn fromLeft ? 'left' : 'right';\n\t});\n\n\t/** @internal */\n\tpublic readonly isHorizontal = computed(() => this.orientation() === 'horizontal');\n\n\t/** @internal Reference to the slider track instance. */\n\tpublic readonly track = signal<BrnSliderTrack | null>(null);\n\n\t/** @internal Reference to the slider range instance. */\n\tpublic readonly range = signal<BrnSliderRange | null>(null);\n\n\t/** @internal All registered slider thumbs. */\n\tpublic readonly thumbs = signal<BrnSliderThumb[]>([]);\n\n\t/** @internal Index of the thumb currently being updated. */\n\tpublic readonly valueIndexToChange = signal(0);\n\n\t/** @internal Visible tick values after applying density reduction. */\n\tpublic readonly ticks = computed(() => {\n\t\tif (!this.showTicks()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst maxTicks = this.maxTicks();\n\n\t\tif (step <= 0 || min > max) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst totalCount = Math.floor((max - min) / step) + 1;\n\n\t\t// No need to reduce\n\t\tif (totalCount <= maxTicks) {\n\t\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step);\n\t\t}\n\n\t\tconst stride = Math.ceil(totalCount / maxTicks);\n\n\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step).filter((_, index) => index % stride === 0);\n\t});\n\n\t/** @internal Disabled state that can be controlled internally or externally. */\n\tpublic readonly mutableDisabled = linkedSignal(() => this.disabled());\n\n\t/** @internal Store the on change callback */\n\tprivate _onChange?: ChangeFn<number[]>;\n\n\t/** @internal Store the on touched callback */\n\tprivate _onTouched?: TouchFn;\n\n\tngOnInit(): void {\n\t\tthis.ngControl = this._injector.get(NgControl, null);\n\n\t\t// If bound to an Angular form control, writeValue() will run after ngOnInit,\n\t\t// so avoid initializing defaults here to prevent a transient min-value override.\n\t\tif (!this.ngControl) {\n\t\t\tif (!this.value().length) {\n\t\t\t\tconst defaultValue = [this.min()];\n\t\t\t\tthis.value.set(defaultValue);\n\t\t\t}\n\n\t\t\tconst normalizedValue = this.value()\n\t\t\t\t.map((v) => clamp(v, [this.min(), this.max()]))\n\t\t\t\t.sort((a, b) => a - b);\n\n\t\t\tif (!areArrsEqual(normalizedValue, this.value())) {\n\t\t\t\tthis.value.set(normalizedValue);\n\t\t\t}\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: number[]) => void): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.mutableDisabled.set(isDisabled);\n\t}\n\n\twriteValue(value: number[]): void {\n\t\tif (!Array.isArray(value)) return;\n\n\t\tif (this.ngControl instanceof NgModel && !this._onChange) {\n\t\t\t// Avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-2946355465\n\t\t\treturn;\n\t\t}\n\n\t\tconst newValue = [...value].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()]));\n\t\tthis.value.set(newValue);\n\t}\n\n\t/** Sets a new value for the slider at the given thumb index. */\n\tsetValue(value: number, atIndex: number): void {\n\t\tconst decimalCount = getDecimalCount(this.step());\n\t\tconst snapToStep = roundValue(\n\t\t\tMath.round((value - this.min()) / this.step()) * this.step() + this.min(),\n\t\t\tdecimalCount,\n\t\t);\n\n\t\tvalue = clamp(snapToStep, [this.min(), this.max()]);\n\n\t\tconst newValue = [...this.normalizedValue()];\n\t\tnewValue[atIndex] = value;\n\t\tnewValue.sort((a, b) => a - b);\n\n\t\tif (!hasMinStepsBetweenValues(newValue, this.minStepsBetweenThumbs() * this.step())) return;\n\n\t\tconst newValIndex = newValue.findIndex((val) => val === value);\n\t\tthis.valueIndexToChange.set(newValIndex);\n\n\t\tif (areArrsEqual(newValue, this.value())) return;\n\n\t\tthis.value.set(newValue);\n\t\tthis._onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\n\t\tif (this.thumbs()[newValIndex]) {\n\t\t\tthis.thumbs()[newValIndex].elementRef.nativeElement.focus();\n\t\t}\n\t}\n\n\t/** Moves the entire range by a delta value, snapping to step and preserving spacing. */\n\tsetAllValuesByDelta(delta: number): void {\n\t\tconst current = this.normalizedValue();\n\t\tif (!current.length || delta === 0) return;\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst decimalCount = getDecimalCount(step);\n\n\t\tconst snappedDelta = roundValue(Math.round(delta / step) * step, decimalCount);\n\t\tif (snappedDelta === 0) return;\n\n\t\tlet next = current.map((v) => v + snappedDelta);\n\n\t\tconst rangeMin = Math.min(...next);\n\t\tconst rangeMax = Math.max(...next);\n\n\t\tif (rangeMin < min) {\n\t\t\tconst offset = min - rangeMin;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t} else if (rangeMax > max) {\n\t\t\tconst offset = max - rangeMax;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t}\n\n\t\tnext = next.map((v) => roundValue(v, decimalCount));\n\n\t\tif (areArrsEqual(next, this.value())) return;\n\n\t\tthis.value.set(next);\n\t\tthis._onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t}\n\n\t/** @internal */\n\taddThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => {\n\t\t\tthumbs.push(thumb);\n\t\t\treturn [...thumbs];\n\t\t});\n\t}\n\n\t/** @internal */\n\tremoveThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => thumbs.filter((t) => t !== thumb));\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n\nfunction areArrsEqual(arr1: unknown[], arr2: unknown[]): boolean {\n\treturn String(arr1) === String(arr2);\n}\n\nfunction roundValue(value: number, decimalCount: number): number {\n\tconst rounder = Math.pow(10, decimalCount);\n\treturn Math.round(value * rounder) / rounder;\n}\n\nfunction getDecimalCount(value: number): number {\n\treturn (String(value).split('.')[1] || '').length;\n}\n\nfunction clamp(value: number, [min, max]: [number, number]): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction getStepsBetweenValues(values: number[]): number[] {\n\treturn values.slice(0, -1).map((value, index) => values[index + 1]! - value);\n}\n\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number): boolean {\n\tif (minStepsBetweenValues > 0) {\n\t\tconst stepsBetweenValues = getStepsBetweenValues(values);\n\t\tconst actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n\t\treturn actualMinStepsBetweenValues >= minStepsBetweenValues;\n\t}\n\treturn true;\n}\n","import { computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderRange]',\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[attr.data-draggable-range]': '_slider.isDraggableRange() ? \"\" : null',\n\t\t'data-slot': 'slider-range',\n\t\t'[style.inset-inline]': '_slider.isHorizontal() ? _rangeInset() : undefined',\n\t\t'[style.inset-block]': '!_slider.isHorizontal() ? _rangeInset() : undefined',\n\t},\n})\nexport class BrnSliderRange {\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tconstructor() {\n\t\tthis._slider.range.set(this);\n\t}\n\n\tprotected readonly _rangeInset = computed(() => {\n\t\tconst thumbs = this._slider.thumbs();\n\t\tif (!thumbs.length) return;\n\n\t\tconst inverted = this._slider.inverted();\n\t\tconst isHorizontal = this._slider.isHorizontal();\n\n\t\tconst start = thumbs[0].percentage();\n\t\tconst end = thumbs[thumbs.length - 1].percentage();\n\n\t\tconst inset = thumbs.length > 1 ? [`${start}%`, `${100 - end}%`] : ['0px', `${100 - start}%`];\n\n\t\tif (!isHorizontal) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\tif (inverted) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\treturn inset.join(' ');\n\t});\n}\n","export function linearScale(\n\tinput: readonly [number, number],\n\toutput: readonly [number, number],\n): (value: number) => number {\n\treturn (value: number) => {\n\t\tif (input[0] === input[1] || output[0] === output[1]) return output[0];\n\t\tconst ratio = (output[1] - output[0]) / (input[1] - input[0]);\n\t\treturn output[0] + ratio * (value - input[0]);\n\t};\n}\n","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, Directive, ElementRef, inject, PLATFORM_ID } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\n\n@Directive({\n\tselector: '[brnSliderThumb]',\n\thost: {\n\t\trole: 'slider',\n\t\t'[attr.aria-label]': `_computedAriaLabel()`,\n\t\t'[attr.aria-labelledby]': '_slider.ariaLabelledby() || null',\n\t\t'[attr.aria-orientation]': '_slider.orientation()',\n\t\t'[attr.aria-valuenow]': '_slider.normalizedValue()[_index()]',\n\t\t'[attr.aria-valuemin]': '_slider.min()',\n\t\t'[attr.aria-valuemax]': '_slider.max()',\n\t\t'[attr.tabindex]': '_slider.mutableDisabled() ? -1 : 0',\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[style.inset-inline-start]':\n\t\t\t'_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-inline-end]': '_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.inset-block-end]': '!_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-block-start]':\n\t\t\t'!_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.visibility]': '_thumbReady() ? undefined : \"hidden\"',\n\t\t'[style.pointer-events]': '_thumbReady() ? undefined : \"none\"',\n\t\t'[style.transform]': '_transformValue()',\n\t\t'data-slot': 'slider-thumb',\n\t\t'(pointerdown)': '_onPointerDown($event)',\n\t\t'(pointermove)': '_onPointerMove($event)',\n\t\t'(pointerup)': '_onPointerUp($event)',\n\t\t'(keydown)': 'handleKeydown($event)',\n\t},\n})\nexport class BrnSliderThumb {\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _size = injectElementSize();\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/**\n\t * Indicates whether the thumb is ready to be displayed and interactable.\n\t *\n\t * This signal returns `true` when the element's size has been measured\n\t * and the width is greater than 0. It ensures that the thumb is not\n\t * rendered or interacted with prematurely, which prevents layout\n\t * issues or first-frame “jerks” when using SSR.\n\t */\n\tprotected readonly _thumbReady = computed(() => {\n\t\tconst size = this._size();\n\t\treturn !!size && size.width > 0;\n\t});\n\n\tprotected readonly _index = computed(() => this._slider.thumbs().findIndex((thumb) => thumb === this));\n\n\tpublic readonly percentage = computed(() => {\n\t\tconst range = this._slider.max() - this._slider.min();\n\t\tif (range === 0) return 0;\n\n\t\treturn ((this._slider.normalizedValue()[this._index()] - this._slider.min()) / range) * 100;\n\t});\n\n\tprivate readonly _thumbInBoundsOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst size = this._slider.isHorizontal() ? this._size()?.width : this._size()?.height;\n\t\tif (!size) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst halfSize = size / 2;\n\t\tconst offset = linearScale([0, 50], [0, halfSize]);\n\t\tconst direction = this._slider.slidingSource() === 'left' || this._slider.slidingSource() === 'top' ? 1 : -1;\n\n\t\treturn (halfSize - offset(this.percentage()) * direction) * direction;\n\t});\n\n\t/**\n\t * Offsets the thumb centre point while sliding to ensure it remains\n\t * within the bounds of the slider when reaching the edges.\n\t * Based on https://github.com/radix-ui/primitives/blob/main/packages/react/slider/src/slider.tsx\n\t */\n\tprotected readonly _thumbOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn this.percentage() + '%';\n\t\t}\n\n\t\treturn `calc(${this.percentage()}% + ${this._thumbInBoundsOffset()}px)`;\n\t});\n\n\tprotected readonly _computedAriaLabel = computed(\n\t\t() => this._slider.ariaLabel() || `Value ${this._index() + 1} of ${this._slider.normalizedValue().length}`,\n\t);\n\n\tprotected readonly _transformValue = computed(() =>\n\t\tthis._slider.orientation() === 'horizontal' ? 'translateX(-50%)' : 'translateY(-50%)',\n\t);\n\n\tconstructor() {\n\t\tthis._slider.addThumb(this);\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._slider.removeThumb(this);\n\t\t});\n\t}\n\n\tprotected _onPointerDown(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerDown(event);\n\t}\n\n\tprotected _onPointerMove(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerMove(event);\n\t}\n\n\tprotected _onPointerUp(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerUp(event);\n\t}\n\n\tprotected handleKeydown(event: KeyboardEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst step = this._slider.step();\n\t\tconst min = this._slider.min();\n\t\tconst max = this._slider.max();\n\t\tconst multiplier = event.shiftKey || PAGE_KEYS.includes(event.key) ? 10 : 1;\n\n\t\t// Determine delta based on slider orientation\n\t\tconst dirLR = this._slider.slidingSource() === 'right' ? -1 : 1;\n\t\tconst dirUD = this._slider.slidingSource() === 'top' ? -1 : 1;\n\n\t\tconst deltas: Partial<Record<string, number>> = {\n\t\t\tArrowLeft: -step * multiplier * dirLR,\n\t\t\tArrowRight: step * multiplier * dirLR,\n\t\t\tArrowUp: step * multiplier * dirUD,\n\t\t\tArrowDown: -step * multiplier * dirUD,\n\t\t\tPageUp: step * multiplier,\n\t\t\tPageDown: -step * multiplier,\n\t\t};\n\n\t\t// Home/End keys\n\t\tif (event.key === 'Home') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = min - range[0];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(min, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'End') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = max - range[range.length - 1];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(max, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst delta = deltas[event.key];\n\t\tif (delta === undefined) return;\n\n\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t} else {\n\t\t\tconst index = this._index();\n\t\t\tconst value = this._slider.normalizedValue()[index];\n\t\t\tthis._slider.setValue(Math.min(max, Math.max(min, value + delta)), index);\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n}\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\tRenderer2,\n\tTemplateRef,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderTick]',\n\thost: {\n\t\t'data-slot': 'slider-tick',\n\t},\n})\nexport class BrnSliderTick {\n\tprivate readonly _slider = injectBrnSlider();\n\tprivate readonly _templateRef = inject<TemplateRef<BrnSliderTickContext>>(TemplateRef);\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _viewContainer = inject(ViewContainerRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate _ticks: EmbeddedViewRef<BrnSliderTickContext>[] = [];\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst ticks = this._slider.ticks();\n\t\t\tconst tickLabelInterval = this._slider.tickLabelInterval();\n\n\t\t\t// Remove any existing ticks\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\n\t\t\t// Create new ticks\n\t\t\tthis._ticks = [];\n\n\t\t\tticks.forEach((tick, index) => {\n\t\t\t\tconst view = this._viewContainer.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: tick,\n\t\t\t\t\tindex,\n\t\t\t\t\tformattedTick: this._slider.formatTick()(tick),\n\t\t\t\t});\n\n\t\t\t\tconst tickEl = view.rootNodes[0] as HTMLElement;\n\t\t\t\tif (tickLabelInterval === 0 || index % tickLabelInterval !== 0) {\n\t\t\t\t\tthis._renderer.setAttribute(tickEl, 'data-skip', '');\n\t\t\t\t}\n\n\t\t\t\tthis._ticks.push(view);\n\t\t\t});\n\t\t});\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\t\t});\n\t}\n}\n\nexport interface BrnSliderTickContext {\n\t$implicit: number;\n\tindex: number;\n\tformattedTick: string;\n}\n","import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSliderTrack } from './brn-slider-track';\n\nexport const BrnSliderTrackToken = new InjectionToken<BrnSliderTrack>('BrnSliderTrackToken');\n\nexport function provideBrnSliderTrack(slider: Type<BrnSliderTrack>): ExistingProvider {\n\treturn { provide: BrnSliderTrackToken, useExisting: slider };\n}\n\nexport function injectBrnSliderTrack(): BrnSliderTrack {\n\treturn inject(BrnSliderTrackToken);\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { provideBrnSliderTrack } from './brn-slider-track.token';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\n@Directive({\n\tselector: '[brnSliderTrack]',\n\tproviders: [provideBrnSliderTrack(BrnSliderTrack)],\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'data-slot': 'slider-track',\n\t\t'(pointerdown)': 'onPointerDown($event)',\n\t\t'(pointermove)': 'onPointerMove($event)',\n\t\t'(pointerup)': 'onPointerUp($event)',\n\t},\n})\nexport class BrnSliderTrack {\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprotected readonly _slider = injectBrnSlider();\n\n\tprivate _rangeDragStartPointer: number | null = null;\n\tprivate _rangeDragAccumulatedDelta = 0;\n\n\tconstructor() {\n\t\tthis._slider.track.set(this);\n\t}\n\n\tpublic onPointerDown(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tconst isTrack = this._isTrack(target);\n\n\t\t// Draggable range only: ignore empty track clicks\n\t\tif (isTrack && this._slider.isDraggableRangeOnly()) return;\n\n\t\ttarget.setPointerCapture(event.pointerId);\n\t\tconst isRange = this._isRange(target);\n\n\t\t// Prevent browser focus behaviour because we instead focus a thumb manually when values change.\n\t\tif (isTrack || isRange) event.preventDefault();\n\n\t\tif ((isRange && this._slider.isDraggableRange()) || this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._rangeDragStartPointer = this._getPointerPosition(event);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tconst closestIndex = getClosestValueIndex(this._slider.normalizedValue(), value);\n\n\t\tif (isTrack || isRange) {\n\t\t\tthis._slider.setValue(value, closestIndex);\n\t\t} else {\n\t\t\tthis._slider.valueIndexToChange.set(closestIndex);\n\t\t}\n\t}\n\n\tpublic onPointerMove(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tif (!target.hasPointerCapture(event.pointerId)) return;\n\n\t\tif (this._rangeDragStartPointer !== null && this._slider.isDraggableRange()) {\n\t\t\tconst currentPointer = this._getPointerPosition(event);\n\t\t\tconst pixelDelta = currentPointer - this._rangeDragStartPointer;\n\t\t\tconst valueDelta = this._pixelDeltaToValueDelta(pixelDelta);\n\n\t\t\t// Accumulate sub-step deltas\n\t\t\tthis._rangeDragAccumulatedDelta += valueDelta;\n\n\t\t\tconst step = this._slider.step();\n\t\t\tconst snappedDelta = Math.trunc(this._rangeDragAccumulatedDelta / step) * step;\n\n\t\t\tif (snappedDelta !== 0) {\n\t\t\t\tthis._slider.setAllValuesByDelta(snappedDelta);\n\n\t\t\t\t// Remove the applied delta, keep remainder\n\t\t\t\tthis._rangeDragAccumulatedDelta -= snappedDelta;\n\t\t\t}\n\n\t\t\t// Reset start pointer so delta stays incremental\n\t\t\tthis._rangeDragStartPointer = currentPointer;\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tthis._slider.setValue(value, this._slider.valueIndexToChange());\n\t}\n\n\tpublic onPointerUp(event: PointerEvent): void {\n\t\tconst target = event.target as HTMLElement;\n\n\t\tif (target.hasPointerCapture(event.pointerId)) {\n\t\t\ttarget.releasePointerCapture(event.pointerId);\n\t\t}\n\n\t\tthis._rangeDragStartPointer = null;\n\t\tthis._rangeDragAccumulatedDelta = 0;\n\t}\n\n\tprivate _getValueFromPointer(pointerPosition: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst source = this._slider.slidingSource();\n\n\t\tconst isVertical = source === 'top' || source === 'bottom';\n\t\tconst size = isVertical ? rect.height : rect.width;\n\n\t\tconst input: [number, number] = [0, size];\n\t\tconst output: [number, number] = [this._slider.min(), this._slider.max()];\n\t\tconst value = linearScale(input, output);\n\n\t\tlet relativePosition: number;\n\n\t\tswitch (source) {\n\t\t\tcase 'left':\n\t\t\t\trelativePosition = pointerPosition - rect.left;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\trelativePosition = rect.right - pointerPosition;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\trelativePosition = pointerPosition - rect.top;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\trelativePosition = rect.bottom - pointerPosition;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn value(relativePosition);\n\t}\n\n\tprivate _pixelDeltaToValueDelta(pixelDelta: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst size = this._slider.isHorizontal() ? rect.width : rect.height;\n\n\t\tconst scale = linearScale([0, size], [this._slider.min(), this._slider.max()]);\n\n\t\t// Determine direction multiplier based on sliding source\n\t\tlet direction = 1;\n\t\tswitch (this._slider.slidingSource()) {\n\t\t\tcase 'right':\n\t\t\tcase 'bottom':\n\t\t\t\tdirection = -1;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\tcase 'top':\n\t\t\t\tdirection = 1;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn scale(pixelDelta * direction) - scale(0);\n\t}\n\n\tprivate _isTrack(el: HTMLElement): boolean {\n\t\treturn this._elementRef.nativeElement === el;\n\t}\n\n\tprivate _isRange(el: HTMLElement): boolean {\n\t\treturn this._slider.range()?.elementRef.nativeElement === el;\n\t}\n\n\tprivate _getPointerPosition(event: PointerEvent): number {\n\t\treturn this._slider.orientation() === 'horizontal' ? event.clientX : event.clientY;\n\t}\n}\n\nfunction getClosestValueIndex(values: number[], nextValue: number): number {\n\tif (values.length === 1) return 0;\n\tconst distances = values.map((value) => Math.abs(value - nextValue));\n\tconst closestDistance = Math.min(...distances);\n\treturn distances.indexOf(closestDistance);\n}\n","import { BrnSlider } from './lib/brn-slider';\nimport { BrnSliderRange } from './lib/brn-slider-range';\nimport { BrnSliderThumb } from './lib/brn-slider-thumb';\nimport { BrnSliderTick } from './lib/brn-slider-tick';\nimport { BrnSliderTrack } from './lib/brn-slider-track';\n\nexport * from './lib/brn-slider';\nexport * from './lib/brn-slider-range';\nexport * from './lib/brn-slider-thumb';\nexport * from './lib/brn-slider-tick';\nexport * from './lib/brn-slider-track';\nexport * from './lib/brn-slider-track.token';\nexport * from './lib/brn-slider.token';\n\nexport const BrnSliderImports = [BrnSlider, BrnSliderTrack, BrnSliderThumb, BrnSliderRange, BrnSliderTick] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
2
2
|
import { isPlatformBrowser } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { forwardRef, inject, DestroyRef, Renderer2, PLATFORM_ID, ElementRef, ChangeDetectorRef, DOCUMENT, signal,
|
|
4
|
+
import { forwardRef, inject, DestroyRef, Renderer2, PLATFORM_ID, ElementRef, ChangeDetectorRef, DOCUMENT, signal, input, booleanAttribute, linkedSignal, output, numberAttribute, viewChild, computed, afterRenderEffect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
5
5
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
6
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
7
7
|
import * as i1 from '@spartan-ng/brain/field';
|
|
@@ -29,7 +29,8 @@ class BrnSwitch {
|
|
|
29
29
|
* Whether switch is checked/toggled on.
|
|
30
30
|
* Can be bound with [(checked)] for two-way binding.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
checkedInput = input(false, { ...(ngDevMode ? { debugName: "checkedInput" } : /* istanbul ignore next */ {}), alias: 'checked', transform: booleanAttribute });
|
|
33
|
+
checked = linkedSignal(this.checkedInput, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
33
34
|
/** Emits when checked state changes. */
|
|
34
35
|
checkedChange = output();
|
|
35
36
|
/**
|
|
@@ -47,6 +48,12 @@ class BrnSwitch {
|
|
|
47
48
|
* CSS classes applied to inner button element.
|
|
48
49
|
*/
|
|
49
50
|
class = input(null, ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
|
|
51
|
+
/**
|
|
52
|
+
* Size of the switch.
|
|
53
|
+
* Drives the size-keyed registry style rules via the `data-size` attribute.
|
|
54
|
+
* @default 'default'
|
|
55
|
+
*/
|
|
56
|
+
size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
50
57
|
/**
|
|
51
58
|
* Accessibility label for screen readers.
|
|
52
59
|
* Use when no visible label exists.
|
|
@@ -216,11 +223,12 @@ class BrnSwitch {
|
|
|
216
223
|
this._cdr.markForCheck();
|
|
217
224
|
}
|
|
218
225
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSwitch, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
219
|
-
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.16", type: BrnSwitch, isStandalone: true, selector: "brn-switch", inputs: {
|
|
226
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.16", type: BrnSwitch, isStandalone: true, selector: "brn-switch", inputs: { checkedInput: { classPropertyName: "checkedInput", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checkedChange: "checkedChange", touched: "touched" }, host: { properties: { "style": "{display: \"contents\"}", "attr.id": "_state().id", "attr.name": "_state().name", "attr.aria-labelledby": "null", "attr.aria-label": "null", "attr.aria-describedby": "null", "attr.aria-invalid": "_invalid?.() ? \"true\" : null", "attr.data-dirty": "_dirty?.() ? \"true\": null", "attr.data-touched": "_touched?.() ? \"true\" : null", "attr.data-matches-spartan-invalid": "_spartanInvalid?.() ? \"true\" : null", "attr.data-state": "checked() ? \"checked\" : \"unchecked\"", "attr.data-focus-visible": "_focusVisible()", "attr.data-focus": "_focused()", "attr.data-disabled": "_state().disabled()" } }, providers: [BRN_SWITCH_VALUE_ACCESSOR, provideBrnLabelable(BrnSwitch)], viewQueries: [{ propertyName: "switch", first: true, predicate: ["switch"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.BrnFieldControl }], ngImport: i0, template: `
|
|
220
227
|
<button
|
|
221
228
|
#switch
|
|
222
229
|
role="switch"
|
|
223
230
|
type="button"
|
|
231
|
+
[attr.data-size]="size()"
|
|
224
232
|
[class]="class()"
|
|
225
233
|
[id]="getSwitchButtonId(_state().id) ?? ''"
|
|
226
234
|
[name]="getSwitchButtonId(_state().name) ?? ''"
|
|
@@ -273,6 +281,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
273
281
|
#switch
|
|
274
282
|
role="switch"
|
|
275
283
|
type="button"
|
|
284
|
+
[attr.data-size]="size()"
|
|
276
285
|
[class]="class()"
|
|
277
286
|
[id]="getSwitchButtonId(_state().id) ?? ''"
|
|
278
287
|
[name]="getSwitchButtonId(_state().name) ?? ''"
|
|
@@ -297,11 +306,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
297
306
|
</button>
|
|
298
307
|
`,
|
|
299
308
|
}]
|
|
300
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
309
|
+
}], ctorParameters: () => [], propDecorators: { checkedInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], checkedChange: [{ type: i0.Output, args: ["checkedChange"] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaDescribedby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], touched: [{ type: i0.Output, args: ["touched"] }], switch: [{ type: i0.ViewChild, args: ['switch', { isSignal: true }] }] } });
|
|
301
310
|
|
|
302
311
|
class BrnSwitchThumb {
|
|
312
|
+
_switch = inject(BrnSwitch);
|
|
303
313
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSwitchThumb, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
304
|
-
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.16", type: BrnSwitchThumb, isStandalone: true, selector: "brn-switch-thumb", host: { attributes: { "role": "presentation" }, listeners: { "click": "$event.preventDefault()" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
314
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.16", type: BrnSwitchThumb, isStandalone: true, selector: "brn-switch-thumb", host: { attributes: { "role": "presentation" }, listeners: { "click": "$event.preventDefault()" }, properties: { "attr.data-state": "_switch.checked() ? 'checked' : 'unchecked'" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
305
315
|
}
|
|
306
316
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSwitchThumb, decorators: [{
|
|
307
317
|
type: Component,
|
|
@@ -310,6 +320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
310
320
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
311
321
|
host: {
|
|
312
322
|
role: 'presentation',
|
|
323
|
+
'[attr.data-state]': "_switch.checked() ? 'checked' : 'unchecked'",
|
|
313
324
|
'(click)': '$event.preventDefault()',
|
|
314
325
|
},
|
|
315
326
|
template: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-switch.mjs","sources":["../../../../libs/brain/switch/src/lib/brn-switch.ts","../../../../libs/brain/switch/src/lib/brn-switch-thumb.ts","../../../../libs/brain/switch/src/index.ts","../../../../libs/brain/switch/src/spartan-ng-brain-switch.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n\ttype AfterContentInit,\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tDOCUMENT,\n\tElementRef,\n\tforwardRef,\n\tinject,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\ttype OnDestroy,\n\toutput,\n\tPLATFORM_ID,\n\tRenderer2,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\n\nexport const BRN_SWITCH_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSwitch),\n\tmulti: true,\n};\n\nconst CONTAINER_POST_FIX = '-switch';\n\nlet uniqueIdCounter = 0;\n\n@Component({\n\tselector: 'brn-switch',\n\tproviders: [BRN_SWITCH_VALUE_ACCESSOR, provideBrnLabelable(BrnSwitch)],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'[style]': '{display: \"contents\"}',\n\t\t'[attr.id]': '_state().id',\n\t\t'[attr.name]': '_state().name',\n\t\t'[attr.aria-labelledby]': 'null',\n\t\t'[attr.aria-label]': 'null',\n\t\t'[attr.aria-describedby]': 'null',\n\t\t'[attr.aria-invalid]': '_invalid?.() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty?.() ? \"true\": null',\n\t\t'[attr.data-touched]': '_touched?.() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid?.() ? \"true\" : null',\n\t\t'[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n\t\t'[attr.data-focus-visible]': '_focusVisible()',\n\t\t'[attr.data-focus]': '_focused()',\n\t\t'[attr.data-disabled]': '_state().disabled()',\n\t},\n\ttemplate: `\n\t\t<button\n\t\t\t#switch\n\t\t\trole=\"switch\"\n\t\t\ttype=\"button\"\n\t\t\t[class]=\"class()\"\n\t\t\t[id]=\"getSwitchButtonId(_state().id) ?? ''\"\n\t\t\t[name]=\"getSwitchButtonId(_state().name) ?? ''\"\n\t\t\t[value]=\"checked() ? 'on' : 'off'\"\n\t\t\t[attr.aria-checked]=\"checked()\"\n\t\t\t[attr.aria-label]=\"ariaLabel() || null\"\n\t\t\t[attr.aria-labelledby]=\"mutableAriaLabelledby() || null\"\n\t\t\t[attr.aria-describedby]=\"ariaDescribedby() || null\"\n\t\t\t[attr.aria-invalid]=\"_invalid?.() ? 'true' : null\"\n\t\t\t[attr.data-dirty]=\"_dirty?.() ? 'true' : null\"\n\t\t\t[attr.data-touched]=\"_touched?.() ? 'true' : null\"\n\t\t\t[attr.data-matches-spartan-invalid]=\"_spartanInvalid?.() ? 'true' : null\"\n\t\t\t[attr.data-state]=\"checked() ? 'checked' : 'unchecked'\"\n\t\t\t[attr.data-focus-visible]=\"_focusVisible()\"\n\t\t\t[attr.data-focus]=\"_focused()\"\n\t\t\t[attr.data-disabled]=\"_state().disabled()\"\n\t\t\t[disabled]=\"_state().disabled()\"\n\t\t\t[tabIndex]=\"tabIndex()\"\n\t\t\t(click)=\"$event.preventDefault(); toggle()\"\n\t\t>\n\t\t\t<ng-content select=\"brn-switch-thumb\" />\n\t\t</button>\n\t`,\n})\nexport class BrnSwitch implements AfterContentInit, OnDestroy, ControlValueAccessor {\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly _focusMonitor = inject(FocusMonitor);\n\tprivate readonly _cdr = inject(ChangeDetectorRef);\n\tprivate readonly _document = inject(DOCUMENT);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprotected readonly _focusVisible = signal(false);\n\tprotected readonly _focused = signal(false);\n\n\t/**\n\t * Whether switch is checked/toggled on.\n\t * Can be bound with [(checked)] for two-way binding.\n\t */\n\tpublic readonly checked = model<boolean>(false);\n\n\t/** Emits when checked state changes. */\n\tpublic readonly checkedChange = output<boolean>();\n\n\t/**\n\t * Unique identifier for switch component.\n\t * When provided, inner button gets ID without '-switch' suffix.\n\t * Auto-generates ID if not provided.\n\t */\n\tpublic readonly id = input<string | null>(++uniqueIdCounter + '');\n\n\t/**\n\t * Form control name for switch.\n\t * When provided, inner button gets name without '-switch' suffix.\n\t */\n\tpublic readonly name = input<string | null>(null);\n\n\t/**\n\t * CSS classes applied to inner button element.\n\t */\n\tpublic readonly class = input<string | null>(null);\n\n\t/**\n\t * Accessibility label for screen readers.\n\t * Use when no visible label exists.\n\t */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/**\n\t * ID of element that labels this switch for accessibility.\n\t * Auto-set when switch is inside label element.\n\t */\n\tpublic readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\tpublic readonly mutableAriaLabelledby = linkedSignal(() => this.ariaLabelledby());\n\n\t/**\n\t * ID of element that describes this switch for accessibility.\n\t */\n\tpublic readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n\n\t/**\n\t * Whether switch is required in a form.\n\t */\n\tpublic readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\t/**\n\t * Whether switch is disabled.\n\t * Disabled switches cannot be toggled and indicate disabled state with data attribute.\n\t */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/**\n\t * Keyboard tab order for switch.\n\t * @default 0\n\t */\n\tpublic readonly tabIndex = input<number, NumberInput>(0, { transform: numberAttribute });\n\n\t/**\n\t * Event emitted when switch is blurred (loses focus).\n\t * Used for form validation.\n\t */\n\tpublic readonly touched = output<void>();\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprotected _onChange: ChangeFn<boolean> = () => {};\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onTouched: TouchFn = () => {};\n\n\tpublic readonly switch = viewChild.required<ElementRef<HTMLInputElement>>('switch');\n\n\tprotected readonly _state = computed(() => {\n\t\tconst name = this.name();\n\t\tconst id = this.id();\n\t\treturn {\n\t\t\tdisabled: signal(this.disabled()),\n\t\t\tname: name ? name + CONTAINER_POST_FIX : null,\n\t\t\tid: id ? id + CONTAINER_POST_FIX : null,\n\t\t};\n\t});\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\tprotected readonly _invalid = this._fieldControl?.invalid;\n\tprotected readonly _touched = this._fieldControl?.touched;\n\tprotected readonly _dirty = this._fieldControl?.dirty;\n\tprotected readonly _spartanInvalid = this._fieldControl?.spartanInvalid;\n\n\tpublic readonly labelableId = computed(() => this.getSwitchButtonId(this._state().id));\n\n\tconstructor() {\n\t\tafterRenderEffect(() => {\n\t\t\tconst state = this._state();\n\t\t\tconst isDisabled = state.disabled();\n\n\t\t\tif (!this._elementRef.nativeElement || !this._isBrowser) return;\n\n\t\t\tconst newLabelId = state.id + '-label';\n\t\t\tconst switchButtonId = this.getSwitchButtonId(state.id);\n\t\t\tconst labelElement =\n\t\t\t\tthis._elementRef.nativeElement.closest('label') ??\n\t\t\t\tthis._document.querySelector(`label[for=\"${switchButtonId}\"]`);\n\n\t\t\tif (!labelElement) return;\n\t\t\tconst existingLabelId = labelElement.id;\n\n\t\t\tthis._renderer.setAttribute(labelElement, 'data-disabled', isDisabled ? 'true' : 'false');\n\t\t\tthis.mutableAriaLabelledby.set(existingLabelId || newLabelId);\n\n\t\t\tif (!existingLabelId || existingLabelId.length === 0) {\n\t\t\t\tthis._renderer.setAttribute(labelElement, 'id', newLabelId);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Toggles switch between checked/unchecked states.\n\t * Does nothing if switch is disabled.\n\t */\n\tprotected toggle(): void {\n\t\tif (this._state().disabled()) return;\n\n\t\tthis._onTouched();\n\t\tthis.touched.emit();\n\n\t\tthis.checked.update((checked) => !checked);\n\t\tthis._onChange(this.checked());\n\t\tthis.checkedChange.emit(this.checked());\n\t}\n\n\tpublic ngAfterContentInit(): void {\n\t\tthis._focusMonitor\n\t\t\t.monitor(this._elementRef, true)\n\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe((focusOrigin) => {\n\t\t\t\tif (focusOrigin) this._focused.set(true);\n\t\t\t\tif (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n\t\t\t\t\tthis._focusVisible.set(true);\n\t\t\t\t\tthis._cdr.markForCheck();\n\t\t\t\t}\n\t\t\t\tif (!focusOrigin) {\n\t\t\t\t\t// When a focused element becomes disabled, the browser *immediately* fires a blur event.\n\t\t\t\t\t// Angular does not expect events to be raised during change detection, so any state\n\t\t\t\t\t// change (such as a form control's ng-touched) will cause a changed-after-checked error.\n\t\t\t\t\t// See https://github.com/angular/angular/issues/17793. To work around this, we defer\n\t\t\t\t\t// telling the form control it has been touched until the next tick.\n\t\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\t\tthis._focusVisible.set(false);\n\t\t\t\t\t\tthis._focused.set(false);\n\t\t\t\t\t\tthis._onTouched();\n\t\t\t\t\t\tthis.touched.emit();\n\t\t\t\t\t\tthis._cdr.markForCheck();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\tif (!this.switch()) return;\n\t\tthis.switch().nativeElement.value = this.checked() ? 'on' : 'off';\n\t\tthis.switch().nativeElement.dispatchEvent(new Event('change'));\n\t}\n\n\tpublic ngOnDestroy() {\n\t\tthis._focusMonitor.stopMonitoring(this._elementRef);\n\t}\n\n\t/**\n\t * Gets proper ID for inner button element.\n\t * Removes '-switch' suffix if present in container ID.\n\t *\n\t * @param idPassedToContainer - ID applied to container element\n\t * @returns ID to use for inner button or null\n\t */\n\tprotected getSwitchButtonId(idPassedToContainer: string | null | undefined): string | null {\n\t\treturn idPassedToContainer ? idPassedToContainer.replace(new RegExp(CONTAINER_POST_FIX + '$'), '') : null;\n\t}\n\n\t/**\n\t * Updates internal state when control value changes from outside.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param value - New checked state\n\t */\n\tpublic writeValue(value: boolean): void {\n\t\tthis.checked.set(Boolean(value));\n\t}\n\n\t/**\n\t * Registers callback for value changes.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param fn - Function to call when value changes\n\t */\n\tpublic registerOnChange(fn: ChangeFn<boolean>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\t/**\n\t * Registers callback for touched events.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param fn - Function to call when control is touched\n\t */\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\t/**\n\t * Updates disabled state from form control.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param isDisabled - Whether switch should be disabled\n\t */\n\tpublic setDisabledState(isDisabled: boolean): void {\n\t\tthis._state().disabled.set(isDisabled);\n\t\tthis._cdr.markForCheck();\n\t}\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n\tselector: 'brn-switch-thumb',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\trole: 'presentation',\n\t\t'(click)': '$event.preventDefault()',\n\t},\n\ttemplate: '',\n})\nexport class BrnSwitchThumb {}\n","import { BrnSwitch } from './lib/brn-switch';\nimport { BrnSwitchThumb } from './lib/brn-switch-thumb';\n\nexport * from './lib/brn-switch';\nexport * from './lib/brn-switch-thumb';\n\nexport const BrnSwitchImports = [BrnSwitch, BrnSwitchThumb] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-switch.mjs","sources":["../../../../libs/brain/switch/src/lib/brn-switch.ts","../../../../libs/brain/switch/src/lib/brn-switch-thumb.ts","../../../../libs/brain/switch/src/index.ts","../../../../libs/brain/switch/src/spartan-ng-brain-switch.ts"],"sourcesContent":["import { FocusMonitor } from '@angular/cdk/a11y';\nimport type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n\ttype AfterContentInit,\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tcomputed,\n\tDestroyRef,\n\tDOCUMENT,\n\tElementRef,\n\tforwardRef,\n\tinject,\n\tinput,\n\tlinkedSignal,\n\tnumberAttribute,\n\ttype OnDestroy,\n\toutput,\n\tPLATFORM_ID,\n\tRenderer2,\n\tsignal,\n\tviewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BrnFieldControl, provideBrnLabelable } from '@spartan-ng/brain/field';\nimport type { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\n\nexport const BRN_SWITCH_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSwitch),\n\tmulti: true,\n};\n\nexport type BrnSwitchSize = 'default' | 'sm';\n\nconst CONTAINER_POST_FIX = '-switch';\n\nlet uniqueIdCounter = 0;\n\n@Component({\n\tselector: 'brn-switch',\n\tproviders: [BRN_SWITCH_VALUE_ACCESSOR, provideBrnLabelable(BrnSwitch)],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'[style]': '{display: \"contents\"}',\n\t\t'[attr.id]': '_state().id',\n\t\t'[attr.name]': '_state().name',\n\t\t'[attr.aria-labelledby]': 'null',\n\t\t'[attr.aria-label]': 'null',\n\t\t'[attr.aria-describedby]': 'null',\n\t\t'[attr.aria-invalid]': '_invalid?.() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty?.() ? \"true\": null',\n\t\t'[attr.data-touched]': '_touched?.() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_spartanInvalid?.() ? \"true\" : null',\n\t\t'[attr.data-state]': 'checked() ? \"checked\" : \"unchecked\"',\n\t\t'[attr.data-focus-visible]': '_focusVisible()',\n\t\t'[attr.data-focus]': '_focused()',\n\t\t'[attr.data-disabled]': '_state().disabled()',\n\t},\n\ttemplate: `\n\t\t<button\n\t\t\t#switch\n\t\t\trole=\"switch\"\n\t\t\ttype=\"button\"\n\t\t\t[attr.data-size]=\"size()\"\n\t\t\t[class]=\"class()\"\n\t\t\t[id]=\"getSwitchButtonId(_state().id) ?? ''\"\n\t\t\t[name]=\"getSwitchButtonId(_state().name) ?? ''\"\n\t\t\t[value]=\"checked() ? 'on' : 'off'\"\n\t\t\t[attr.aria-checked]=\"checked()\"\n\t\t\t[attr.aria-label]=\"ariaLabel() || null\"\n\t\t\t[attr.aria-labelledby]=\"mutableAriaLabelledby() || null\"\n\t\t\t[attr.aria-describedby]=\"ariaDescribedby() || null\"\n\t\t\t[attr.aria-invalid]=\"_invalid?.() ? 'true' : null\"\n\t\t\t[attr.data-dirty]=\"_dirty?.() ? 'true' : null\"\n\t\t\t[attr.data-touched]=\"_touched?.() ? 'true' : null\"\n\t\t\t[attr.data-matches-spartan-invalid]=\"_spartanInvalid?.() ? 'true' : null\"\n\t\t\t[attr.data-state]=\"checked() ? 'checked' : 'unchecked'\"\n\t\t\t[attr.data-focus-visible]=\"_focusVisible()\"\n\t\t\t[attr.data-focus]=\"_focused()\"\n\t\t\t[attr.data-disabled]=\"_state().disabled()\"\n\t\t\t[disabled]=\"_state().disabled()\"\n\t\t\t[tabIndex]=\"tabIndex()\"\n\t\t\t(click)=\"$event.preventDefault(); toggle()\"\n\t\t>\n\t\t\t<ng-content select=\"brn-switch-thumb\" />\n\t\t</button>\n\t`,\n})\nexport class BrnSwitch implements AfterContentInit, OnDestroy, ControlValueAccessor {\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprivate readonly _focusMonitor = inject(FocusMonitor);\n\tprivate readonly _cdr = inject(ChangeDetectorRef);\n\tprivate readonly _document = inject(DOCUMENT);\n\tprivate readonly _fieldControl = inject(BrnFieldControl, { optional: true });\n\n\tprotected readonly _focusVisible = signal(false);\n\tprotected readonly _focused = signal(false);\n\n\t/**\n\t * Whether switch is checked/toggled on.\n\t * Can be bound with [(checked)] for two-way binding.\n\t */\n\tpublic readonly checkedInput = input<boolean, BooleanInput>(false, { alias: 'checked', transform: booleanAttribute });\n\tpublic readonly checked = linkedSignal(this.checkedInput);\n\n\t/** Emits when checked state changes. */\n\tpublic readonly checkedChange = output<boolean>();\n\n\t/**\n\t * Unique identifier for switch component.\n\t * When provided, inner button gets ID without '-switch' suffix.\n\t * Auto-generates ID if not provided.\n\t */\n\tpublic readonly id = input<string | null>(++uniqueIdCounter + '');\n\n\t/**\n\t * Form control name for switch.\n\t * When provided, inner button gets name without '-switch' suffix.\n\t */\n\tpublic readonly name = input<string | null>(null);\n\n\t/**\n\t * CSS classes applied to inner button element.\n\t */\n\tpublic readonly class = input<string | null>(null);\n\n\t/**\n\t * Size of the switch.\n\t * Drives the size-keyed registry style rules via the `data-size` attribute.\n\t * @default 'default'\n\t */\n\tpublic readonly size = input<BrnSwitchSize>('default');\n\n\t/**\n\t * Accessibility label for screen readers.\n\t * Use when no visible label exists.\n\t */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/**\n\t * ID of element that labels this switch for accessibility.\n\t * Auto-set when switch is inside label element.\n\t */\n\tpublic readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\tpublic readonly mutableAriaLabelledby = linkedSignal(() => this.ariaLabelledby());\n\n\t/**\n\t * ID of element that describes this switch for accessibility.\n\t */\n\tpublic readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n\n\t/**\n\t * Whether switch is required in a form.\n\t */\n\tpublic readonly required = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n\t/**\n\t * Whether switch is disabled.\n\t * Disabled switches cannot be toggled and indicate disabled state with data attribute.\n\t */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/**\n\t * Keyboard tab order for switch.\n\t * @default 0\n\t */\n\tpublic readonly tabIndex = input<number, NumberInput>(0, { transform: numberAttribute });\n\n\t/**\n\t * Event emitted when switch is blurred (loses focus).\n\t * Used for form validation.\n\t */\n\tpublic readonly touched = output<void>();\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprotected _onChange: ChangeFn<boolean> = () => {};\n\t// eslint-disable-next-line @typescript-eslint/no-empty-function\n\tprivate _onTouched: TouchFn = () => {};\n\n\tpublic readonly switch = viewChild.required<ElementRef<HTMLInputElement>>('switch');\n\n\tprotected readonly _state = computed(() => {\n\t\tconst name = this.name();\n\t\tconst id = this.id();\n\t\treturn {\n\t\t\tdisabled: signal(this.disabled()),\n\t\t\tname: name ? name + CONTAINER_POST_FIX : null,\n\t\t\tid: id ? id + CONTAINER_POST_FIX : null,\n\t\t};\n\t});\n\n\tpublic readonly controlState = this._fieldControl?.controlState;\n\n\tprotected readonly _invalid = this._fieldControl?.invalid;\n\tprotected readonly _touched = this._fieldControl?.touched;\n\tprotected readonly _dirty = this._fieldControl?.dirty;\n\tprotected readonly _spartanInvalid = this._fieldControl?.spartanInvalid;\n\n\tpublic readonly labelableId = computed(() => this.getSwitchButtonId(this._state().id));\n\n\tconstructor() {\n\t\tafterRenderEffect(() => {\n\t\t\tconst state = this._state();\n\t\t\tconst isDisabled = state.disabled();\n\n\t\t\tif (!this._elementRef.nativeElement || !this._isBrowser) return;\n\n\t\t\tconst newLabelId = state.id + '-label';\n\t\t\tconst switchButtonId = this.getSwitchButtonId(state.id);\n\t\t\tconst labelElement =\n\t\t\t\tthis._elementRef.nativeElement.closest('label') ??\n\t\t\t\tthis._document.querySelector(`label[for=\"${switchButtonId}\"]`);\n\n\t\t\tif (!labelElement) return;\n\t\t\tconst existingLabelId = labelElement.id;\n\n\t\t\tthis._renderer.setAttribute(labelElement, 'data-disabled', isDisabled ? 'true' : 'false');\n\t\t\tthis.mutableAriaLabelledby.set(existingLabelId || newLabelId);\n\n\t\t\tif (!existingLabelId || existingLabelId.length === 0) {\n\t\t\t\tthis._renderer.setAttribute(labelElement, 'id', newLabelId);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Toggles switch between checked/unchecked states.\n\t * Does nothing if switch is disabled.\n\t */\n\tprotected toggle(): void {\n\t\tif (this._state().disabled()) return;\n\n\t\tthis._onTouched();\n\t\tthis.touched.emit();\n\n\t\tthis.checked.update((checked) => !checked);\n\t\tthis._onChange(this.checked());\n\t\tthis.checkedChange.emit(this.checked());\n\t}\n\n\tpublic ngAfterContentInit(): void {\n\t\tthis._focusMonitor\n\t\t\t.monitor(this._elementRef, true)\n\t\t\t.pipe(takeUntilDestroyed(this._destroyRef))\n\t\t\t.subscribe((focusOrigin) => {\n\t\t\t\tif (focusOrigin) this._focused.set(true);\n\t\t\t\tif (focusOrigin === 'keyboard' || focusOrigin === 'program') {\n\t\t\t\t\tthis._focusVisible.set(true);\n\t\t\t\t\tthis._cdr.markForCheck();\n\t\t\t\t}\n\t\t\t\tif (!focusOrigin) {\n\t\t\t\t\t// When a focused element becomes disabled, the browser *immediately* fires a blur event.\n\t\t\t\t\t// Angular does not expect events to be raised during change detection, so any state\n\t\t\t\t\t// change (such as a form control's ng-touched) will cause a changed-after-checked error.\n\t\t\t\t\t// See https://github.com/angular/angular/issues/17793. To work around this, we defer\n\t\t\t\t\t// telling the form control it has been touched until the next tick.\n\t\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\t\tthis._focusVisible.set(false);\n\t\t\t\t\t\tthis._focused.set(false);\n\t\t\t\t\t\tthis._onTouched();\n\t\t\t\t\t\tthis.touched.emit();\n\t\t\t\t\t\tthis._cdr.markForCheck();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\tif (!this.switch()) return;\n\t\tthis.switch().nativeElement.value = this.checked() ? 'on' : 'off';\n\t\tthis.switch().nativeElement.dispatchEvent(new Event('change'));\n\t}\n\n\tpublic ngOnDestroy() {\n\t\tthis._focusMonitor.stopMonitoring(this._elementRef);\n\t}\n\n\t/**\n\t * Gets proper ID for inner button element.\n\t * Removes '-switch' suffix if present in container ID.\n\t *\n\t * @param idPassedToContainer - ID applied to container element\n\t * @returns ID to use for inner button or null\n\t */\n\tprotected getSwitchButtonId(idPassedToContainer: string | null | undefined): string | null {\n\t\treturn idPassedToContainer ? idPassedToContainer.replace(new RegExp(CONTAINER_POST_FIX + '$'), '') : null;\n\t}\n\n\t/**\n\t * Updates internal state when control value changes from outside.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param value - New checked state\n\t */\n\tpublic writeValue(value: boolean): void {\n\t\tthis.checked.set(Boolean(value));\n\t}\n\n\t/**\n\t * Registers callback for value changes.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param fn - Function to call when value changes\n\t */\n\tpublic registerOnChange(fn: ChangeFn<boolean>): void {\n\t\tthis._onChange = fn;\n\t}\n\n\t/**\n\t * Registers callback for touched events.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param fn - Function to call when control is touched\n\t */\n\tpublic registerOnTouched(fn: TouchFn): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\t/**\n\t * Updates disabled state from form control.\n\t * Part of ControlValueAccessor interface.\n\t *\n\t * @param isDisabled - Whether switch should be disabled\n\t */\n\tpublic setDisabledState(isDisabled: boolean): void {\n\t\tthis._state().disabled.set(isDisabled);\n\t\tthis._cdr.markForCheck();\n\t}\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { BrnSwitch } from './brn-switch';\n\n@Component({\n\tselector: 'brn-switch-thumb',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\trole: 'presentation',\n\t\t'[attr.data-state]': \"_switch.checked() ? 'checked' : 'unchecked'\",\n\t\t'(click)': '$event.preventDefault()',\n\t},\n\ttemplate: '',\n})\nexport class BrnSwitchThumb {\n\tprotected readonly _switch = inject(BrnSwitch);\n}\n","import { BrnSwitch } from './lib/brn-switch';\nimport { BrnSwitchThumb } from './lib/brn-switch-thumb';\n\nexport * from './lib/brn-switch';\nexport * from './lib/brn-switch-thumb';\n\nexport const BrnSwitchImports = [BrnSwitch, BrnSwitchThumb] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AA+BO,MAAM,yBAAyB,GAAG;AACxC,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC;AACxC,IAAA,KAAK,EAAE,IAAI;;AAKZ,MAAM,kBAAkB,GAAG,SAAS;AAEpC,IAAI,eAAe,GAAG,CAAC;MAqDV,SAAS,CAAA;AACJ,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC7B,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACnD,IAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AACzD,IAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC5B,aAAa,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEzD,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,oFAAC;AAC7B,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AAE3C;;;AAGG;AACa,IAAA,YAAY,GAAG,KAAK,CAAwB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,cAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,GAAG;AACrG,IAAA,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,8EAAC;;IAGzC,aAAa,GAAG,MAAM,EAAW;AAEjD;;;;AAIG;IACa,EAAE,GAAG,KAAK,CAAgB,EAAE,eAAe,GAAG,EAAE,yEAAC;AAEjE;;;AAGG;AACa,IAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,2EAAC;AAEjD;;AAEG;AACa,IAAA,KAAK,GAAG,KAAK,CAAgB,IAAI,4EAAC;AAElD;;;;AAIG;AACa,IAAA,IAAI,GAAG,KAAK,CAAgB,SAAS,2EAAC;AAEtD;;;AAGG;IACa,SAAS,GAAG,KAAK,CAAgB,IAAI,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;AAE/E;;;AAGG;IACa,cAAc,GAAG,KAAK,CAAgB,IAAI,sFAAI,KAAK,EAAE,iBAAiB,EAAA,CAAG;IACzE,qBAAqB,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEjF;;AAEG;IACa,eAAe,GAAG,KAAK,CAAgB,IAAI,uFAAI,KAAK,EAAE,kBAAkB,EAAA,CAAG;AAE3F;;AAEG;IACa,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE/F;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAC5D,SAAS,EAAE,gBAAgB,EAAA,CAC1B;AAEF;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAsB,CAAC,gFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAExF;;;AAGG;IACa,OAAO,GAAG,MAAM,EAAQ;;AAG9B,IAAA,SAAS,GAAsB,MAAK,EAAE,CAAC;;AAEzC,IAAA,UAAU,GAAY,MAAK,EAAE,CAAC;AAEtB,IAAA,MAAM,GAAG,SAAS,CAAC,QAAQ,CAA+B,QAAQ,CAAC;AAEhE,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE;QACpB,OAAO;AACN,YAAA,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,kBAAkB,GAAG,IAAI;YAC7C,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,kBAAkB,GAAG,IAAI;SACvC;AACF,IAAA,CAAC,6EAAC;AAEc,IAAA,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,YAAY;AAE5C,IAAA,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO;AACtC,IAAA,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO;AACtC,IAAA,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK;AAClC,IAAA,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc;AAEvD,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,kFAAC;AAEtF,IAAA,WAAA,GAAA;QACC,iBAAiB,CAAC,MAAK;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE;YAEnC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE;AAEzD,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,GAAG,QAAQ;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GACjB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC/C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA,WAAA,EAAc,cAAc,CAAA,EAAA,CAAI,CAAC;AAE/D,YAAA,IAAI,CAAC,YAAY;gBAAE;AACnB,YAAA,MAAM,eAAe,GAAG,YAAY,CAAC,EAAE;AAEvC,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;YACzF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC;YAE7D,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,EAAE,UAAU,CAAC;YAC5D;AACD,QAAA,CAAC,CAAC;IACH;AAEA;;;AAGG;IACO,MAAM,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAAE;QAE9B,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAEnB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACxC;IAEO,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC;AACH,aAAA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI;AAC9B,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAA,SAAS,CAAC,CAAC,WAAW,KAAI;AAC1B,YAAA,IAAI,WAAW;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACxC,IAAI,WAAW,KAAK,UAAU,IAAI,WAAW,KAAK,SAAS,EAAE;AAC5D,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACzB;YACA,IAAI,CAAC,WAAW,EAAE;;;;;;AAMjB,gBAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AAC3B,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;oBACxB,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACzB,gBAAA,CAAC,CAAC;YACH;AACD,QAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG,KAAK;AACjE,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/D;IAEO,WAAW,GAAA;QACjB,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;IACpD;AAEA;;;;;;AAMG;AACO,IAAA,iBAAiB,CAAC,mBAA8C,EAAA;QACzE,OAAO,mBAAmB,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,kBAAkB,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI;IAC1G;AAEA;;;;;AAKG;AACI,IAAA,UAAU,CAAC,KAAc,EAAA;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC;AAEA;;;;;AAKG;AACI,IAAA,gBAAgB,CAAC,EAAqB,EAAA;AAC5C,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACpB;AAEA;;;;;AAKG;AACI,IAAA,iBAAiB,CAAC,EAAW,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACrB;AAEA;;;;;AAKG;AACI,IAAA,gBAAgB,CAAC,UAAmB,EAAA;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IACzB;2HAlPY,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,yBAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,eAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,gCAAA,EAAA,iBAAA,EAAA,6BAAA,EAAA,mBAAA,EAAA,gCAAA,EAAA,mCAAA,EAAA,uCAAA,EAAA,iBAAA,EAAA,yCAAA,EAAA,yBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,SAAA,EAjDV,CAAC,yBAAyB,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAmB5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEW,SAAS,EAAA,UAAA,EAAA,CAAA;kBAnDrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,SAAS,EAAE,CAAC,yBAAyB,EAAE,mBAAmB,WAAW,CAAC;oBACtE,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,cAAc,EAAE,CAAC,eAAe,CAAC;AACjC,oBAAA,IAAI,EAAE;AACL,wBAAA,SAAS,EAAE,uBAAuB;AAClC,wBAAA,WAAW,EAAE,aAAa;AAC1B,wBAAA,aAAa,EAAE,eAAe;AAC9B,wBAAA,wBAAwB,EAAE,MAAM;AAChC,wBAAA,mBAAmB,EAAE,MAAM;AAC3B,wBAAA,yBAAyB,EAAE,MAAM;AACjC,wBAAA,qBAAqB,EAAE,8BAA8B;AACrD,wBAAA,mBAAmB,EAAE,2BAA2B;AAChD,wBAAA,qBAAqB,EAAE,8BAA8B;AACrD,wBAAA,qCAAqC,EAAE,qCAAqC;AAC5E,wBAAA,mBAAmB,EAAE,qCAAqC;AAC1D,wBAAA,2BAA2B,EAAE,iBAAiB;AAC9C,wBAAA,mBAAmB,EAAE,YAAY;AACjC,wBAAA,sBAAsB,EAAE,qBAAqB;AAC7C,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,CAAA,CAAA;AACD,iBAAA;gvCAiG0E,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCjLtE,cAAc,CAAA;AACP,IAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;2HADlC,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,uBAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,mQAFhB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAEA,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,mBAAmB,EAAE,6CAA6C;AAClE,wBAAA,SAAS,EAAE,yBAAyB;AACpC,qBAAA;AACD,oBAAA,QAAQ,EAAE,EAAE;AACZ,iBAAA;;;MCNY,gBAAgB,GAAG,CAAC,SAAS,EAAE,cAAc;;ACN1D;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, forwardRef, input, computed,
|
|
2
|
+
import { InjectionToken, inject, forwardRef, input, computed, linkedSignal, output, booleanAttribute, Directive, model } from '@angular/core';
|
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
4
|
|
|
5
5
|
const BrnToggleGroupToken = new InjectionToken('BrnToggleGroupToken');
|
|
@@ -29,7 +29,8 @@ class BrnToggleGroup {
|
|
|
29
29
|
/** Whether the toggle group allows multiple selections. */
|
|
30
30
|
_multiple = computed(() => this.type() === 'multiple', ...(ngDevMode ? [{ debugName: "_multiple" }] : /* istanbul ignore next */ []));
|
|
31
31
|
/** Value of the toggle group. */
|
|
32
|
-
|
|
32
|
+
valueInput = input(undefined, { ...(ngDevMode ? { debugName: "valueInput" } : /* istanbul ignore next */ {}), alias: 'value' });
|
|
33
|
+
value = linkedSignal(this.valueInput, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
33
34
|
/** Emits when the value changes. */
|
|
34
35
|
valueChange = output();
|
|
35
36
|
/** Whether no button toggles need to be selected. */
|
|
@@ -90,8 +91,6 @@ class BrnToggleGroup {
|
|
|
90
91
|
else {
|
|
91
92
|
this.emitSelectionChange(value, source);
|
|
92
93
|
}
|
|
93
|
-
this._onChange(this.value());
|
|
94
|
-
this.change.emit(new BrnButtonToggleChange(source, this.value()));
|
|
95
94
|
}
|
|
96
95
|
/**
|
|
97
96
|
* @internal
|
|
@@ -133,7 +132,7 @@ class BrnToggleGroup {
|
|
|
133
132
|
this.change.emit(new BrnButtonToggleChange(source, this.value()));
|
|
134
133
|
}
|
|
135
134
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
136
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnToggleGroup, isStandalone: true, selector: "[brnToggleGroup],brn-toggle-group", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null },
|
|
135
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnToggleGroup, isStandalone: true, selector: "[brnToggleGroup],brn-toggle-group", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, nullable: { classPropertyName: "nullable", publicName: "nullable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", change: "change" }, host: { attributes: { "role": "group" }, listeners: { "focusout": "onTouched()" }, properties: { "attr.aria-disabled": "disabledState()", "attr.data-disabled": "disabledState()" } }, providers: [provideBrnToggleGroup(BrnToggleGroup), BRN_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR], exportAs: ["brnToggleGroup"], ngImport: i0 });
|
|
137
136
|
}
|
|
138
137
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnToggleGroup, decorators: [{
|
|
139
138
|
type: Directive,
|
|
@@ -148,7 +147,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
148
147
|
'(focusout)': 'onTouched()',
|
|
149
148
|
},
|
|
150
149
|
}]
|
|
151
|
-
}], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }],
|
|
150
|
+
}], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], nullable: [{ type: i0.Input, args: [{ isSignal: true, alias: "nullable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], change: [{ type: i0.Output, args: ["change"] }] } });
|
|
152
151
|
|
|
153
152
|
class BrnToggleGroupItem {
|
|
154
153
|
static _uniqueId = 0;
|