{"version":3,"file":"seniorsistemas-angular-components-slider.mjs","sources":["../../projects/angular-components/slider/src/lib/slider/slider.component.ts","../../projects/angular-components/slider/src/lib/slider/slider.component.html","../../projects/angular-components/slider/src/lib/slider/slider.module.ts","../../projects/angular-components/slider/src/seniorsistemas-angular-components-slider.ts"],"sourcesContent":["import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostListener,\n    Input,\n    OnChanges,\n    OnInit,\n    Output,\n    SimpleChanges,\n    ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * @description Componente de controle deslizante (slider) para seleção de valores numéricos\n * dentro de um intervalo definido. Suporta modo simples (um valor) e modo de intervalo\n * (dois valores: início e fim). Implementa {@link ControlValueAccessor} para integração\n * com Reactive Forms e Template-driven Forms do Angular.\n *\n * @example\n * ```html\n * <!-- Slider simples -->\n * <s-slider formControlName=\"volume\" [min]=\"0\" [max]=\"100\" [step]=\"5\" />\n *\n * <!-- Slider de intervalo -->\n * <s-slider formControlName=\"faixa\" [multiple]=\"true\" [min]=\"0\" [max]=\"1000\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-slider',\n    templateUrl: './slider.component.html',\n    styleUrls: ['./slider.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => SliderComponent),\n            multi: true,\n        },\n    ],\n})\nexport class SliderComponent implements OnInit, AfterViewInit, ControlValueAccessor, OnChanges {\n    private readonly MAX_RANGE_VALUE = 100;\n    private readonly MIN_RANGE_VALUE = 0;\n    @ViewChild('track')\n    public track!: ElementRef;\n\n    /**\n     * @description Habilita o modo de intervalo, permitindo selecionar um valor mínimo e máximo.\n     * Quando `true`, o valor do componente é um array `[inicio, fim]`.\n     *\n     * @default false\n     */\n    @Input()\n    public multiple = false;\n\n    /**\n     * @description Valor atual do slider. No modo simples é um número; no modo de\n     * intervalo (`multiple: true`) é um array `[inicio, fim]`.\n     *\n     * @default 0\n     */\n    @Input()\n    public value: number | [number, number] = 0;\n\n    /**\n     * @description Emitido sempre que o valor do slider é alterado pelo usuário.\n     * Emite o novo valor (número ou array de dois números no modo de intervalo).\n     */\n    @Output()\n    public valueChange = new EventEmitter<number | [number, number]>();\n\n    /**\n     * @description Incremento aplicado a cada movimento do thumb do slider.\n     *\n     * @default 1\n     */\n    @Input()\n    public step = 1;\n\n    /**\n     * @description Oculta visualmente o thumb (botão arrastável) do slider.\n     * Útil para visualizações onde apenas a faixa de progresso deve ser exibida.\n     *\n     * @default false\n     */\n    @Input()\n    public hiddenThumb = false;\n\n    /**\n     * @description Desabilita a interação do usuário com o slider.\n     *\n     * @default false\n     */\n    @Input()\n    public disabled = false;\n\n    /**\n     * @description Valor mínimo permitido no slider.\n     *\n     * @default 0\n     */\n    @Input()\n    public min = this.MIN_RANGE_VALUE;\n\n    /**\n     * @description Valor máximo permitido no slider.\n     *\n     * @default 100\n     */\n    @Input()\n    public max = this.MAX_RANGE_VALUE;\n\n    /**\n     * @description Label exibido abaixo ou ao lado do valor mínimo do slider.\n     * Útil para indicar semanticamente os extremos do intervalo.\n     */\n    @Input()\n    public minValueLabel?: string;\n\n    /**\n     * @description Label exibido abaixo ou ao lado do valor máximo do slider.\n     * Útil para indicar semanticamente os extremos do intervalo.\n     */\n    @Input()\n    public maxValueLabel?: string;\n\n    /**\n     * @description Índice de tabulação do elemento, controlando a ordem de foco via teclado.\n     *\n     * @default 0\n     */\n    @Input()\n    public tabindex = 0;\n\n    public startValue = 0;\n    public endValue = 0;\n    public movingProgressBar = false;\n    public progressLeft = 0;\n    public progressWidth = '';\n\n    public onChange: (value: number | [number, number]) => void = () => {};\n    public onTouched: (value: number | [number, number]) => void = () => {};\n\n    private draggingThumb: 'start' | 'end' | null = null;\n    private progressBarEventPositionStart = -1;\n    private startValueBeforeProgressBarEvent = -1;\n    private rangeBetweenElementsBeforeProgressBarEvent = -1;\n    private totalRangeBeforeProgressBarEvent = -1;\n    /**\n     * Map of valid values for values in range.\n     * @example\n     * with min = -10 and max = 10 will have this map.\n     * {\n     *     -10: { 0 },\n     *     -9: { 10 },\n     *      ...\n     *     10: { 10 }\n     * }\n     */\n    private mapRangeValuesForSlider: Map<number, number> = new Map();\n    private activeMouseDown = false;\n    private focusActive = false;\n\n    public ngOnInit(): void {\n        this.setUserRangeMapValues();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        const hasChangesOnMin = changes['min'] && !changes['min'].firstChange;\n        const hasChangesOnMax = changes['max'] && !changes['max'].firstChange;\n        const hasChanges = hasChangesOnMin || hasChangesOnMax;\n        if (hasChanges) {\n            this.setUserRangeMapValues();\n            setTimeout(() => {\n                this.setRangeValues();\n            });\n        }\n    }\n    public ngAfterViewInit(): void {\n        setTimeout(() => {\n            this.setRangeValues();\n        });\n    }\n\n    @HostListener('document:keydown', ['$event'])\n    public onKeydown($event: KeyboardEvent) {\n        if (this.focusActive && !this.disabled) {\n            const isArrowKeyLeft = $event.key === 'ArrowLeft';\n            const isArrowKeyRight = $event.key === 'ArrowRight';\n            if (isArrowKeyLeft) {\n                this.handleArrowKeyLeft();\n            } else if (isArrowKeyRight) {\n                this.handleArrowKeyRight();\n            }\n        }\n    }\n\n    public get tooltipStartText() {\n        return Array.isArray(this.value) ? this.value[0]?.toString() : this.value?.toString();\n    }\n\n    public get tooltipEndText() {\n        return Array.isArray(this.value) ? this.value[1]?.toString() : this.value?.toString();\n    }\n\n    public writeValue(obj: number | [number, number]): void {\n        this.value = obj;\n        this.setRangeValues();\n    }\n\n    public registerOnChange(fn: (value: number | [number, number]) => void): void {\n        this.onChange = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    public onFocusIn() {\n        this.focusActive = true;\n    }\n\n    public onBlur() {\n        this.focusActive = false;\n    }\n\n    public onTrackClick(evt: MouseEvent) {\n        if (this.disabled || this.movingProgressBar || this.activeMouseDown) {\n            return;\n        }\n        const trackClickPercentage = this.getPercentageByEvent(evt);\n        const trackClickToUserRange = this.getValueFromMapByValue(trackClickPercentage);\n        const _trackClickValid = this.needParseValues ? trackClickToUserRange : trackClickPercentage;\n        const _setEndValue = () => {\n            const _endValueUserValue = this.getValueFromMapByValue(this.endValue);\n            const _endValue =\n                (this.needParseValues\n                    ? this.mapRangeValuesForSlider.get(trackClickToUserRange)\n                    : trackClickPercentage) ?? 0;\n            if (this.needParseValues && _endValueUserValue !== trackClickToUserRange) {\n                this.endValue = _endValue;\n            } else if (!this.needParseValues) {\n                this.endValue = trackClickPercentage;\n            }\n        };\n\n        const _setStartValue = () => {\n            const _startValueUserValue = this.getValueFromMapByValue(this.startValue);\n            if (this.needParseValues && _startValueUserValue !== trackClickToUserRange) {\n                const _startValue =\n                    (this.needParseValues\n                        ? this.mapRangeValuesForSlider.get(trackClickToUserRange)\n                        : trackClickPercentage) ?? 0;\n                this.startValue = _startValue;\n            } else if (!this.needParseValues) {\n                this.startValue = trackClickPercentage;\n            }\n        };\n        if (this.multiple) {\n            const [start, end] = this.value as [number, number];\n            const validStart = (this.needParseValues ? this.mapRangeValuesForSlider.get(start) : start) ?? 0;\n            const validEnd = (this.needParseValues ? this.mapRangeValuesForSlider.get(end) : end) ?? 0;\n            const _updateStart = () => {\n                _setStartValue();\n                this.setValue([trackClickPercentage, validEnd]);\n            };\n\n            const _updateEnd = () => {\n                _setEndValue();\n                this.setValue([validStart, trackClickPercentage]);\n            };\n            const clickPercentageBetweenRange = isInRange(_trackClickValid, start, end);\n            if (_trackClickValid < start) {\n                _updateStart();\n            } else if (_trackClickValid > end) {\n                _updateEnd();\n            } else if (clickPercentageBetweenRange) {\n                const middle = (start + end) / 2;\n                const trackClickPercentageIsExactiddle = _trackClickValid === middle;\n                if (trackClickPercentageIsExactiddle) {\n                    _updateStart();\n                } else {\n                    const setStart = _trackClickValid < middle;\n                    const setEnd = _trackClickValid > middle;\n                    if (setStart) {\n                        _updateStart();\n                    } else if (setEnd) {\n                        _updateEnd();\n                    }\n                }\n            }\n        } else {\n            this.setValue(trackClickPercentage);\n            _setEndValue();\n        }\n\n        this.setProgress();\n    }\n\n    public onProgressMouseDown(evt: MouseEvent) {\n        if (!this.multiple || this.disabled) {\n            return;\n        }\n        this.progressBarEventPositionStart = this.getPercentageByEvent(evt);\n        this.startValueBeforeProgressBarEvent = this.startValue;\n        this.rangeBetweenElementsBeforeProgressBarEvent = this.endValue - this.startValue;\n        if (this.multiple) {\n            const [start, end] = this.value as [number, number];\n            this.totalRangeBeforeProgressBarEvent = end - start;\n        }\n        document.addEventListener('mousemove', this.handleProgressBarMove);\n        document.addEventListener('mouseup', this.handleProgressBarMoveEnd);\n    }\n\n    public onMouseDown(_: MouseEvent, thumb: 'start' | 'end'): void {\n        if (this.disabled) return;\n\n        this.draggingThumb = thumb;\n        this.activeMouseDown = true;\n        document.addEventListener('mousemove', this.onThumbMove);\n        document.addEventListener('mouseup', this.onMouseUp);\n    }\n\n    private setRangeValues(): void {\n        const _setStartAndEndValue = (startValue: number, endValue: number) => {\n            this.startValue = this.getClosestValueFromMapSlider(startValue);\n            this.endValue = this.getClosestValueFromMapSlider(endValue);\n        };\n        if (this.value === null || this.value === undefined) {\n            return;\n        }\n        if (Array.isArray(this.value) && !this.multiple) {\n            throw new Error('You must use \"multiple\" with value as array');\n        }\n        if (this.multiple && Array.isArray(this.value)) {\n            this.startValue = this.value[0];\n            this.endValue = this.value[1];\n        } else if (!this.multiple) {\n            this.startValue = this.value as number;\n            this.endValue = this.value as number;\n        }\n        _setStartAndEndValue(this.startValue, this.endValue);\n        if (this.multiple) {\n            let [_startValue, _endValue] = this.value as [number, number];\n            const difference = getDifference(_endValue, _startValue);\n            const endValueIsGreatherThanMax = _endValue > this.max;\n            const startValueIsLessThanMin = _startValue < this.min;\n            const needUpdateValues = endValueIsGreatherThanMax || startValueIsLessThanMin;\n            if (endValueIsGreatherThanMax) {\n                _endValue = this.max;\n                _startValue = _endValue - difference;\n            } else if (startValueIsLessThanMin) {\n                _startValue = this.min;\n                _endValue = _startValue + difference;\n            }\n            if (needUpdateValues) {\n                _setStartAndEndValue(_startValue, _endValue);\n                this.setValue([this.startValue, this.endValue]);\n            }\n        } else {\n            let _value = this.value as number;\n            const valueGreatherThanMax = _value > this.max;\n            const valueLessThanMin = _value < this.min;\n            const needUpdateValue = valueGreatherThanMax || valueLessThanMin;\n            if (valueGreatherThanMax) {\n                _value = this.max;\n            } else if (valueLessThanMin) {\n                _value = this.min;\n            }\n            if (needUpdateValue) {\n                this.setValue(_value, false);\n            }\n        }\n        this.setProgress();\n    }\n\n    private onThumbMove = (event: MouseEvent) => {\n        if (this.movingProgressBar || !this.draggingThumb) return;\n\n        let newPosition = this.getPercentageByEvent(event);\n        if (\n            (this.multiple && this.draggingThumb === 'start' && newPosition > this.endValue) ||\n            (this.multiple && this.draggingThumb === 'end' && newPosition < this.startValue)\n        ) {\n            return;\n        }\n\n        const positionInUserRange = this.getValueFromMapByValue(newPosition);\n\n        if (this.multiple) {\n            if (this.draggingThumb === 'start') {\n                this.startValue =\n                    (this.needParseValues ? this.mapRangeValuesForSlider.get(positionInUserRange) : newPosition) ?? 0;\n            } else if (this.draggingThumb === 'end') {\n                this.endValue =\n                    (this.needParseValues ? this.mapRangeValuesForSlider.get(positionInUserRange) : newPosition) ?? 0;\n            }\n\n            this.setValue([this.startValue, this.endValue]);\n\n            const [start, end] = this.value as [number, number];\n\n            if (start === end && this.draggingThumb === 'start') {\n                this.startValue = this.endValue;\n            } else if (start === end && this.draggingThumb === 'end') {\n                this.endValue = this.startValue;\n            }\n        } else {\n            const currentValue = this.value as number;\n            const _value = this.needParseValues ? positionInUserRange : newPosition;\n            const isAtSameValue = this.needParseValues ? positionInUserRange === this.value : false;\n            const hasStep = this.step !== 0;\n            const newValueIsValidByStep = hasStep\n                ? currentValue + this.step === _value || currentValue - this.step === _value\n                : false;\n            if (isAtSameValue && !newValueIsValidByStep) {\n                return;\n            }\n            this.endValue =\n                (this.needParseValues ? this.mapRangeValuesForSlider.get(positionInUserRange) : newPosition) ?? 0;\n            this.startValue = this.endValue;\n            this.setValue(this.endValue);\n        }\n        this.setProgress();\n    };\n\n    private onMouseUp = () => {\n        this.draggingThumb = null;\n        document.removeEventListener('mousemove', this.onThumbMove);\n        document.removeEventListener('mouseup', this.onMouseUp);\n        setTimeout(() => {\n            this.activeMouseDown = false;\n        }, 150);\n    };\n\n    private handleProgressBarMove = (event: MouseEvent) => {\n        this.movingProgressBar = true;\n        const newCenter = this.getPercentageByEvent(event);\n        const startPositionBeforeEvent = this.progressBarEventPositionStart;\n        const startValueBeforeEvent = this.startValueBeforeProgressBarEvent;\n        const range = this.rangeBetweenElementsBeforeProgressBarEvent;\n        let { newStart, newEnd } = calculateNewRange(\n            startValueBeforeEvent,\n            startValueBeforeEvent + range,\n            startPositionBeforeEvent,\n            newCenter,\n        );\n        if (newStart < this.MIN_RANGE_VALUE || newEnd > this.MAX_RANGE_VALUE) {\n            return;\n        }\n        if (this.needParseValues) {\n            const startValueBeforeEventUserRange = this.getValueFromMapByValue(startValueBeforeEvent);\n            const startPositionBeforeEventUserRange = this.getValueFromMapByValue(startPositionBeforeEvent);\n            const centerUserRange = this.getValueFromMapByValue(newCenter);\n            const valueRange = this.totalRangeBeforeProgressBarEvent;\n            let { newStart, newEnd } = calculateNewRange(\n                startValueBeforeEventUserRange,\n                startValueBeforeEventUserRange + valueRange,\n                startPositionBeforeEventUserRange,\n                centerUserRange,\n            );\n            if (newStart < this.min || newEnd > this.max) {\n                return;\n            }\n            this.startValue = this.mapRangeValuesForSlider.get(newStart) ?? 0;\n            this.endValue = this.mapRangeValuesForSlider.get(newEnd) ?? 0;\n        } else {\n            this.startValue = newStart;\n            this.endValue = newEnd;\n        }\n        this.setValue([this.startValue, this.endValue]);\n        this.setProgress();\n    };\n\n    private handleProgressBarMoveEnd = () => {\n        this.progressBarEventPositionStart = -1;\n        this.startValueBeforeProgressBarEvent = -1;\n        this.rangeBetweenElementsBeforeProgressBarEvent = -1;\n        this.totalRangeBeforeProgressBarEvent = -1;\n        document.removeEventListener('mousemove', this.handleProgressBarMove);\n        document.removeEventListener('mouseup', this.handleProgressBarMoveEnd);\n        setTimeout(() => {\n            this.movingProgressBar = false;\n        }, 150);\n    };\n\n    private setProgress(): void {\n        if (this.multiple) {\n            this.progressLeft = this.startValue;\n            this.progressWidth = `calc(${this.endValue - this.startValue}% + 10px)`;\n        } else {\n            this.progressLeft = 0;\n            this.progressWidth = `calc(${this.endValue}% + 10px)`;\n        }\n    }\n\n    /**\n     * Get the percentage of a mouse event from the track's left edge\n     * @param mouseEvent mouse event\n     * @returns percentage from the left edge\n     */\n    private getPercentageByEvent(mouseEvent: MouseEvent | PointerEvent): number {\n        const trackRect = this.track.nativeElement.getBoundingClientRect();\n        let newLeft = Math.round(((mouseEvent.clientX - trackRect.left) / trackRect.width) * this.MAX_RANGE_VALUE);\n        newLeft = Math.max(0, Math.min(newLeft, this.MAX_RANGE_VALUE));\n        return newLeft;\n    }\n\n    private setValue(value: number | [number, number], parse = true) {\n        if (this.disabled) {\n            return;\n        }\n\n        if (this.needParseValues && parse) {\n            if (Array.isArray(value)) {\n                value = value.map((x) => this.getValueFromMapByValue(x)) as [number, number];\n            } else {\n                value = this.getValueFromMapByValue(value);\n            }\n        }\n        this.value = value;\n        this.valueChange.emit(value);\n        this.writeValue(this.value);\n        this.onChange(this.value);\n        this.onTouched(this.value);\n    }\n\n    private setUserRangeMapValues() {\n        const start = this.min;\n        const end = this.max;\n        if (start > end) {\n            throw new Error('Max value must be greater than min value');\n        }\n        this.mapRangeValuesForSlider.clear();\n        const range = end - start;\n        const decimalPlaces = 2;\n        const stepCount = Math.floor(range / this.step);\n        const values: number[] = [];\n        for (let value = start; value <= end; value += this.step) {\n            values.push(value);\n        }\n        if (values[values.length - 1] !== end) {\n            values.push(end);\n        }\n        const mappedValues = values.map((value) => {\n            let mapped = ((value - start) / range) * this.MAX_RANGE_VALUE;\n            return parseFloat(mapped.toFixed(decimalPlaces));\n        });\n        mappedValues[0] = 0;\n        mappedValues[mappedValues.length - 1] = this.MAX_RANGE_VALUE;\n        const error = this.MAX_RANGE_VALUE - mappedValues[mappedValues.length - 1];\n        const errorPerStep = error / stepCount;\n        for (let i = 1; i < mappedValues.length - 1; i++) {\n            mappedValues[i] += errorPerStep;\n            mappedValues[i] = parseFloat(mappedValues[i].toFixed(decimalPlaces));\n        }\n        values.forEach((value, index) => {\n            this.mapRangeValuesForSlider.set(value, mappedValues[index]);\n        });\n    }\n\n    /**\n     * Returns the user value from the given slider value by using the map of range values.\n     * @example\n     * If the map is 0: { 0 }, 1: { 10 }, 2: { 30 }, 3: { 40 }, 4: { 50 }\n     * and the sliderValue is 37, the function returns 3\n     * or the slider value is 40, the function returns 4\n     * @param sliderValue the value of the slider (values only between range MIN and MAX)\n     * @returns the user value from the given slider value\n     */\n    private getValueFromMapByValue(sliderValue: number) {\n        const mapToArray = Array.from(this.mapRangeValuesForSlider).map(([value, mapped]) => ({ value, mapped }));\n        const exactValue = mapToArray.find((x) => x.mapped == sliderValue);\n        const closest = mapToArray.reduce((prev, curr) =>\n            Math.abs(curr.mapped - sliderValue) < Math.abs(prev.mapped - sliderValue) ? curr : prev,\n        );\n        return exactValue ? exactValue.value : closest.value;\n    }\n\n    /**\n     * Retrieves the key from the map that is closest to the given slider value.\n     * @param userValue - The value to find the closest key for. (values only between 0 - 100)\n     * @returns The key that corresponds to the closest mapped value.\n     */\n    private getClosestValueFromMapSlider(userValue: number): number {\n        const mapToArray = Array.from(this.mapRangeValuesForSlider).map(([value, mapped]) => ({ value, mapped }));\n        if (userValue >= this.max) {\n            return mapToArray[mapToArray.length - 1].mapped;\n        } else if (userValue <= this.min) {\n            return mapToArray[0].mapped;\n        }\n        const exactValue = mapToArray.find((x) => x.value == userValue);\n        const closestValue = mapToArray.reduce((prev, curr) =>\n            Math.abs(curr.value - userValue) < Math.abs(prev.value - userValue) ? curr : prev,\n        );\n        const item = exactValue || closestValue;\n        const isFirstItem = mapToArray[0] === item;\n        const isLastItem = mapToArray[mapToArray.length - 1] === item;\n        if (isFirstItem && userValue > this.min) {\n            return getMidpoint(item.mapped, mapToArray[1].mapped);\n        } else if (isLastItem && userValue < this.max) {\n            return getMidpoint(item.mapped, mapToArray[mapToArray.length - 2].mapped);\n        } else {\n            return item.mapped;\n        }\n    }\n\n    private handleArrowKeyLeft() {\n        if (this.multiple) {\n            this._incrementOrDecrementStartAndEndValue(false);\n        } else {\n            this._incrementOrDecrementEndValue(false);\n        }\n        this.setProgress();\n    }\n\n    private handleArrowKeyRight() {\n        if (this.multiple) {\n            this._incrementOrDecrementStartAndEndValue(true);\n        } else {\n            this._incrementOrDecrementEndValue(true);\n        }\n        this.setProgress();\n    }\n\n    private _incrementOrDecrementStartAndEndValue(increment: boolean) {\n        let [start, end] = this.value as [number, number];\n        const difference = getDifference(end, start);\n        if (increment) {\n            start += this.step;\n            end += this.step;\n        } else {\n            start -= this.step;\n            end -= this.step;\n        }\n        const startLessThanMin = start < this.min;\n        const endGreaterThanMax = end > this.max;\n        if (startLessThanMin || endGreaterThanMax) {\n            if (startLessThanMin) {\n                start = this.min;\n                end = start + difference;\n            } else if (endGreaterThanMax) {\n                end = this.max;\n                start = end - difference;\n            }\n        }\n        if (start < this.min || end > this.max) {\n            return;\n        }\n        this.setValue([start, end], false);\n        if (this.needParseValues) {\n            start = this.getClosestValueFromMapSlider(start);\n            end = this.getClosestValueFromMapSlider(end);\n        }\n        this.startValue = start;\n        this.endValue = end;\n    }\n\n    private _incrementOrDecrementEndValue(increment: boolean) {\n        let value = this.value as number;\n        if (increment) {\n            value += this.step;\n        } else {\n            value -= this.step;\n        }\n        let _newEndValue = value;\n        if (this.needParseValues) {\n            _newEndValue = this.getClosestValueFromMapSlider(_newEndValue);\n        }\n        if (_newEndValue < this.MIN_RANGE_VALUE || _newEndValue > this.MAX_RANGE_VALUE) {\n            return;\n        }\n        this.endValue = _newEndValue;\n        this.startValue = this.endValue;\n        this.setValue(_newEndValue);\n    }\n\n    private get needParseValues() {\n        return this.max !== this.MAX_RANGE_VALUE || this.min !== this.MIN_RANGE_VALUE;\n    }\n}\n\n/**\n * Calculates a new range based on the old range and the positions clicked and finalized.\n *\n * @param oldStart - The starting value of the old range.\n * @param oldEnd - The ending value of the old range.\n * @param clickedPosition - The position where the click occurred.\n * @param finalPosition - The position where the range should end.\n * @returns An object containing the new start and end values of the range.\n */\nconst calculateNewRange = (oldStart: number, oldEnd: number, clickedPosition: number, finalPosition: number) => {\n    const range = oldEnd - oldStart;\n    const newStart = finalPosition - (clickedPosition - oldStart);\n    const newEnd = newStart + range;\n    return { newStart, newEnd };\n};\n\nconst isInRange = (value: number, rangeStart: number, rangeEnd: number): boolean => {\n    const [min, max] = rangeStart < rangeEnd ? [rangeStart, rangeEnd] : [rangeEnd, rangeStart];\n    return value >= min && value <= max;\n};\n\nconst getMidpoint = (start: number, end: number) => {\n    const midpoint = (start + end) / 2;\n    return parseFloat(midpoint.toFixed(2));\n};\nconst getDifference = (end: number, start: number) => {\n    return Math.abs(end - start);\n};\n\n","<div\n    class=\"slider-container\"\n    [ngClass]=\"{ 'slider-container--disabled': disabled }\"\n    [tabindex]=\"tabindex\"\n    (click)=\"onTrackClick($event)\"\n    (focus)=\"onFocusIn()\"\n    (blur)=\"onBlur()\">\n    <div\n        #track\n        class=\"slider-track\"\n        [ngClass]=\"{\n            'slider-track--hidden-thumb': hiddenThumb,\n            'slider-track--moving-multiple-thumbs': movingProgressBar\n        }\">\n        <div\n            class=\"slider-progress\"\n            (mousedown)=\"onProgressMouseDown($event)\"\n            [style.left.%]=\"progressLeft\"\n            [style.width]=\"progressWidth\"\n        ></div>\n        <div\n            *ngIf=\"multiple\"\n            class=\"slider-thumb\"\n            [sTooltip]=\"tooltipStartText\"\n            [showDelay]=\"0\"\n            (mousedown)=\"onMouseDown($event, 'start')\"\n            [style.left.%]=\"startValue\"\n        ></div>\n        <div\n            [sTooltip]=\"tooltipEndText\"\n            class=\"slider-thumb\"\n            [showDelay]=\"0\"\n            (mousedown)=\"onMouseDown($event, 'end')\"\n            [style.left.%]=\"endValue\"></div>\n    </div>\n    <div class=\"footer\">\n        <span>{{ minValueLabel || min }}</span>\n        <span>{{ maxValueLabel || max }}</span>\n    </div>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { SliderComponent } from \"./slider.component\";\nimport { TooltipModule } from \"@seniorsistemas/angular-components/tooltip\";\n\n@NgModule({\n    imports: [CommonModule, TooltipModule],\n    declarations: [SliderComponent],\n    exports: [SliderComponent],\n})\nexport class SliderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}