@libs-ui/components-inputs-range-slider 0.2.10-6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # inputs-range-slider
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,2 @@
1
+ export * from './inputs-range-slider.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3JhbmdlLXNsaWRlci9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW5wdXRzLXJhbmdlLXNsaWRlci5jb21wb25lbnQnO1xuIl19
@@ -0,0 +1,127 @@
1
+ import { ChangeDetectionStrategy, Component, computed, effect, input, model, output, signal, untracked, viewChild } from '@angular/core';
2
+ import { viewDataNumberByLanguage } from '@libs-ui/utils';
3
+ import { Subject, fromEvent } from 'rxjs';
4
+ import { debounceTime, mergeMap, skip, take, takeUntil, tap } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ export class LibsUiComponentsInputsRangeSliderComponent {
7
+ /* PROPERTY */
8
+ visibilityMin = signal(true);
9
+ visibilityMax = signal(true);
10
+ position = signal(0);
11
+ focus = signal(false);
12
+ maxDisplay = computed(this.maxComputed.bind(this));
13
+ onChange = new Subject();
14
+ onDestroy = new Subject();
15
+ /* INPUT */
16
+ mode = input('slider');
17
+ min = input(1);
18
+ max = input(100);
19
+ value = model(0);
20
+ classInclude = input('libs-ui-range-slider-container', { transform: value => value ? `libs-ui-range-slider-container ${value}` : 'libs-ui-range-slider-container' });
21
+ disable = input(false);
22
+ unit = input();
23
+ step = input(0);
24
+ hideProgressingValue = input();
25
+ formatNumber = input();
26
+ /* OUTPUT */
27
+ outChange = output();
28
+ /* VIEW CHILD */
29
+ containerEl = viewChild('containerEl');
30
+ rangeEl = viewChild('rangeEl');
31
+ valueEl = viewChild('valueEl');
32
+ maxValueEl = viewChild('maxValueEl');
33
+ constructor() {
34
+ effect(() => {
35
+ this.onChange.next(this.value());
36
+ untracked(() => {
37
+ this.setVariableCss();
38
+ this.calculatePosition();
39
+ });
40
+ });
41
+ }
42
+ /* FUNCTIONS */
43
+ ngAfterViewInit() {
44
+ const windowMouseUp = this.initEvent(window, 'mouseup').pipe(tap(() => this.focus.set(false)));
45
+ const elementMouseDown = this.initEvent(this.rangeEl()?.nativeElement, 'mousedown').pipe(tap(() => this.focus.set(true)));
46
+ const elementMouseUp = this.initEvent(this.rangeEl()?.nativeElement, 'click').pipe(take(1));
47
+ const elementMouseMove = this.initEvent(this.rangeEl()?.nativeElement, 'mousemove').pipe(takeUntil(windowMouseUp));
48
+ const drag = elementMouseDown.pipe(mergeMap(() => elementMouseMove));
49
+ const click = elementMouseDown.pipe(mergeMap(() => elementMouseUp));
50
+ drag.pipe(takeUntil(this.onDestroy)).subscribe(this.handlerChange.bind(this));
51
+ click.pipe(takeUntil(this.onDestroy)).subscribe(this.handlerChange.bind(this));
52
+ this.onChange.pipe(skip(this.mode() === 'audio' ? 1 : 0), debounceTime(250), takeUntil(this.onDestroy)).subscribe((value) => this.outChange.emit(value));
53
+ }
54
+ initEvent(element, name) {
55
+ return fromEvent(element, name).pipe(tap((e) => e.stopPropagation()), takeUntil(this.onDestroy));
56
+ }
57
+ async handlerChange(event) {
58
+ if (this.disable()) {
59
+ event.preventDefault();
60
+ event.stopPropagation();
61
+ event.target.value = this.value();
62
+ return;
63
+ }
64
+ this.value.set(+event.target.value);
65
+ this.onChange.next(this.value());
66
+ }
67
+ async calculatePosition() {
68
+ if (!this.containerEl() || !this.valueEl()) {
69
+ return;
70
+ }
71
+ const sliderContainer = this.containerEl()?.nativeElement.getBoundingClientRect();
72
+ const progressing = this.max ? (this.value() / this.max()) : 0;
73
+ if (this.hideProgressingValue()) {
74
+ return;
75
+ }
76
+ const rectValue = this.valueEl()?.nativeElement.getBoundingClientRect();
77
+ const rectMax = this.containerEl()?.nativeElement.getBoundingClientRect();
78
+ this.position.set((sliderContainer.width * progressing) - ((rectValue.width) / 2) - (this.value() < 10 ? 5 : 4));
79
+ const grandWidthValue = this.position + rectValue.width - rectMax.width;
80
+ if (grandWidthValue > 0) {
81
+ this.position.update(value => value - grandWidthValue);
82
+ }
83
+ this.setVisibility();
84
+ }
85
+ async setVisibility() {
86
+ const rectMax = this.maxValueEl()?.nativeElement.getBoundingClientRect();
87
+ const rectValue = this.valueEl()?.nativeElement.getBoundingClientRect();
88
+ this.visibilityMin.set(true);
89
+ this.visibilityMax.set(true);
90
+ if (!this.value()) {
91
+ this.visibilityMin.set(false);
92
+ return;
93
+ }
94
+ if (rectValue.left + rectValue.width >= rectMax.left) {
95
+ this.visibilityMax.set(false);
96
+ }
97
+ if (this.value() < this.min() + 1) {
98
+ this.visibilityMin.set(false);
99
+ }
100
+ }
101
+ async setVariableCss() {
102
+ const element = this.containerEl()?.nativeElement;
103
+ if (!element) {
104
+ return;
105
+ }
106
+ const colorHover = getComputedStyle(element).getPropertyValue('--libs-ui-color-light-1');
107
+ element.style.setProperty('--libs-ui-slider-border-box-shadow', `${colorHover}30`);
108
+ element.style.setProperty('--libs-ui-slider-value', `${this.value() - 0.5}%`);
109
+ }
110
+ maxComputed() {
111
+ if (this.formatNumber()) {
112
+ return viewDataNumberByLanguage(this.max(), true, 1, false, true);
113
+ }
114
+ return this.max();
115
+ }
116
+ ngOnDestroy() {
117
+ this.onDestroy.next();
118
+ this.onDestroy.complete();
119
+ }
120
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsRangeSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
121
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsRangeSliderComponent, isStandalone: true, selector: "libs_ui-components-inputs-range_slider", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, hideProgressingValue: { classPropertyName: "hideProgressingValue", publicName: "hideProgressingValue", isSignal: true, isRequired: false, transformFunction: null }, formatNumber: { classPropertyName: "formatNumber", publicName: "formatNumber", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", outChange: "outChange" }, viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerEl"], descendants: true, isSignal: true }, { propertyName: "rangeEl", first: true, predicate: ["rangeEl"], descendants: true, isSignal: true }, { propertyName: "valueEl", first: true, predicate: ["valueEl"], descendants: true, isSignal: true }, { propertyName: "maxValueEl", first: true, predicate: ["maxValueEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"classInclude()\"\n [style.height.px]=\"mode() === 'slider' ? 44 : 22\"\n [class.pt-[4px]]=\"mode() === 'slider'\"\n #containerEl>\n <div [class.hidden]=\"!focus()\"\n class=\"libs-ui-range-slider-icon-active\">\n </div>\n <input #rangeEl\n class=\"libs-ui-range-slider\"\n [attr.mode]=\"mode()\"\n [attr.focus]=\"focus()\"\n [attr.disable]=\"disable()\"\n [value]=\"value()\"\n [type]=\"'range'\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\">\n @if (mode() === 'slider') {\n <div class=\"flex justify-between relative mt-[8px]\">\n <div class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMin()\">\n {{ min() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n <div #valueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] absolute bottom-0 flex\"\n [style.left.px]=\"position()\">\n @if (!hideProgressingValue()) {\n {{ value() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n }\n </div>\n <div #maxValueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMax()\">\n {{ maxComputed() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n </div>\n }\n</div>\n", styles: [".libs-ui-range-slider-container{width:100%;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:linear-gradient(to right,var(--libs-ui-color-default, #226FF5) 0%,var(--libs-ui-color-default, #226FF5) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) 100%);outline:none;border-radius:4px}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;cursor:pointer;border:solid 2px var(--libs-ui-color-default);z-index:3;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb{width:16px;height:16px;background:#fff;border-radius:50%;cursor:pointer;box-shadow:0 1px 2px #4e4e4e4d;border:solid 2px var(--libs-ui-color-default);z-index:3}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]{background:linear-gradient(to right,#071631 0%,#071631 var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-webkit-slider-thumb{display:none}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-moz-range-thumb{width:0;height:0;border:none}.libs-ui-range-slider-container .libs-ui-range-slider:hover,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true]{background:linear-gradient(to right,var(--libs-ui-color-light-1, #4E8CF7) 0%,var(--libs-ui-color-light-1, #4E8CF7) var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-webkit-slider-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-webkit-slider-thumb{display:block}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-moz-range-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-moz-range-thumb{width:16px;height:16px;border:solid 2px var(--libs-ui-color-default)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true]{pointer-events:none;background:linear-gradient(to right,#CDD0D6 0%,#CDD0D6 var(--libs-ui-slider-value),#E6E7EA var(--libs-ui-slider-value),#E6E7EA 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true].libs-ui-range-slider::-webkit-slider-thumb{border:solid 2px #CDD0D6}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsRangeSliderComponent, decorators: [{
124
+ type: Component,
125
+ args: [{ selector: 'libs_ui-components-inputs-range_slider', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"classInclude()\"\n [style.height.px]=\"mode() === 'slider' ? 44 : 22\"\n [class.pt-[4px]]=\"mode() === 'slider'\"\n #containerEl>\n <div [class.hidden]=\"!focus()\"\n class=\"libs-ui-range-slider-icon-active\">\n </div>\n <input #rangeEl\n class=\"libs-ui-range-slider\"\n [attr.mode]=\"mode()\"\n [attr.focus]=\"focus()\"\n [attr.disable]=\"disable()\"\n [value]=\"value()\"\n [type]=\"'range'\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\">\n @if (mode() === 'slider') {\n <div class=\"flex justify-between relative mt-[8px]\">\n <div class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMin()\">\n {{ min() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n <div #valueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] absolute bottom-0 flex\"\n [style.left.px]=\"position()\">\n @if (!hideProgressingValue()) {\n {{ value() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n }\n </div>\n <div #maxValueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMax()\">\n {{ maxComputed() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n </div>\n }\n</div>\n", styles: [".libs-ui-range-slider-container{width:100%;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:linear-gradient(to right,var(--libs-ui-color-default, #226FF5) 0%,var(--libs-ui-color-default, #226FF5) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) 100%);outline:none;border-radius:4px}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;cursor:pointer;border:solid 2px var(--libs-ui-color-default);z-index:3;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb{width:16px;height:16px;background:#fff;border-radius:50%;cursor:pointer;box-shadow:0 1px 2px #4e4e4e4d;border:solid 2px var(--libs-ui-color-default);z-index:3}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]{background:linear-gradient(to right,#071631 0%,#071631 var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-webkit-slider-thumb{display:none}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-moz-range-thumb{width:0;height:0;border:none}.libs-ui-range-slider-container .libs-ui-range-slider:hover,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true]{background:linear-gradient(to right,var(--libs-ui-color-light-1, #4E8CF7) 0%,var(--libs-ui-color-light-1, #4E8CF7) var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-webkit-slider-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-webkit-slider-thumb{display:block}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-moz-range-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-moz-range-thumb{width:16px;height:16px;border:solid 2px var(--libs-ui-color-default)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true]{pointer-events:none;background:linear-gradient(to right,#CDD0D6 0%,#CDD0D6 var(--libs-ui-slider-value),#E6E7EA var(--libs-ui-slider-value),#E6E7EA 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true].libs-ui-range-slider::-webkit-slider-thumb{border:solid 2px #CDD0D6}\n"] }]
126
+ }], ctorParameters: () => [] });
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRzLXJhbmdlLXNsaWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3JhbmdlLXNsaWRlci9zcmMvaW5wdXRzLXJhbmdlLXNsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3JhbmdlLXNsaWRlci9zcmMvaW5wdXRzLXJhbmdlLXNsaWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvSyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQWMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFVcEYsTUFBTSxPQUFPLDBDQUEwQztJQUVyRCxjQUFjO0lBQ0osYUFBYSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztJQUN0QyxhQUFhLEdBQUcsTUFBTSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsS0FBSyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUMvQixVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFF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QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyB2aWV3RGF0YU51bWJlckJ5TGFuZ3VhZ2UgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWVyZ2VNYXAsIHNraXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXJhbmdlX3NsaWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnaW5wdXRzLXJhbmdlLXNsaWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnaW5wdXRzLXJhbmdlLXNsaWRlci5jb21wb25lbnQuc2NzcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNJbnB1dHNSYW5nZVNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIHZpc2liaWxpdHlNaW4gPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCB2aXNpYmlsaXR5TWF4ID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwcm90ZWN0ZWQgcG9zaXRpb24gPSBzaWduYWw8bnVtYmVyPigwKTtcbiAgcHJvdGVjdGVkIGZvY3VzID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIG1heERpc3BsYXkgPSBjb21wdXRlZCh0aGlzLm1heENvbXB1dGVkLmJpbmQodGhpcykpXG5cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qIElOUFVUICovXG4gIHJlYWRvbmx5IG1vZGUgPSBpbnB1dDwnYXVkaW8nIHwgJ3NsaWRlcic+KCdzbGlkZXInKTtcbiAgcmVhZG9ubHkgbWluID0gaW5wdXQ8bnVtYmVyPigxKTtcbiAgcmVhZG9ubHkgbWF4ID0gaW5wdXQ8bnVtYmVyPigxMDApO1xuICByZWFkb25seSB2YWx1ZSA9IG1vZGVsPG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignbGlicy11aS1yYW5nZS1zbGlkZXItY29udGFpbmVyJywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8gYGxpYnMtdWktcmFuZ2Utc2xpZGVyLWNvbnRhaW5lciAke3ZhbHVlfWAgOiAnbGlicy11aS1yYW5nZS1zbGlkZXItY29udGFpbmVyJyB9KTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdW5pdCA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgc3RlcCA9IGlucHV0PG51bWJlcj4oMCk7XG4gIHJlYWRvbmx5IGhpZGVQcm9ncmVzc2luZ1ZhbHVlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgZm9ybWF0TnVtYmVyID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PG51bWJlcj4oKTtcblxuICAvKiBWSUVXIENISUxEICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lckVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmFuZ2VFbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigncmFuZ2VFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlRWwgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3ZhbHVlRWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhWYWx1ZUVsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdtYXhWYWx1ZUVsJyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMub25DaGFuZ2UubmV4dCh0aGlzLnZhbHVlKCkpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRWYXJpYWJsZUNzcygpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qIEZVTkNUSU9OUyAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgd2luZG93TW91c2VVcCA9IHRoaXMuaW5pdEV2ZW50KHdpbmRvdyBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50LCAnbW91c2V1cCcpLnBpcGUodGFwKCgpID0+IHRoaXMuZm9jdXMuc2V0KGZhbHNlKSkpO1xuICAgIGNvbnN0IGVsZW1lbnRNb3VzZURvd24gPSB0aGlzLmluaXRFdmVudCh0aGlzLnJhbmdlRWwoKT8ubmF0aXZlRWxlbWVudCwgJ21vdXNlZG93bicpLnBpcGUodGFwKCgpID0+IHRoaXMuZm9jdXMuc2V0KHRydWUpKSk7XG4gICAgY29uc3QgZWxlbWVudE1vdXNlVXAgPSB0aGlzLmluaXRFdmVudCh0aGlzLnJhbmdlRWwoKT8ubmF0aXZlRWxlbWVudCwgJ2NsaWNrJykucGlwZSh0YWtlKDEpKTtcbiAgICBjb25zdCBlbGVtZW50TW91c2VNb3ZlID0gdGhpcy5pbml0RXZlbnQodGhpcy5yYW5nZUVsKCk/Lm5hdGl2ZUVsZW1lbnQsICdtb3VzZW1vdmUnKS5waXBlKHRha2VVbnRpbCh3aW5kb3dNb3VzZVVwKSk7XG5cbiAgICBjb25zdCBkcmFnID0gZWxlbWVudE1vdXNlRG93bi5waXBlKG1lcmdlTWFwKCgpID0+IGVsZW1lbnRNb3VzZU1vdmUpKTtcbiAgICBjb25zdCBjbGljayA9IGVsZW1lbnRNb3VzZURvd24ucGlwZShtZXJnZU1hcCgoKSA9PiBlbGVtZW50TW91c2VVcCkpO1xuXG4gICAgZHJhZy5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSh0aGlzLmhhbmRsZXJDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgY2xpY2sucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVyQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIHRoaXMub25DaGFuZ2UucGlwZShza2lwKHRoaXMubW9kZSgpID09PSAnYXVkaW8nID8gMSA6IDApLCBkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCh2YWx1ZTogbnVtYmVyKSA9PiB0aGlzLm91dENoYW5nZS5lbWl0KHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRFdmVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgbmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJRXZlbnQ+IHtcbiAgICByZXR1cm4gZnJvbUV2ZW50PElFdmVudD4oZWxlbWVudCwgbmFtZSkucGlwZSh0YXAoKGU6IElFdmVudCkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVyQ2hhbmdlKGV2ZW50OiBJRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRoaXMudmFsdWUoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlLnNldCgrZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQodGhpcy52YWx1ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2FsY3VsYXRlUG9zaXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lckVsKCkgfHwgIXRoaXMudmFsdWVFbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNsaWRlckNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyRWwoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBwcm9ncmVzc2luZyA9IHRoaXMubWF4ID8gKHRoaXMudmFsdWUoKSAvIHRoaXMubWF4KCkpIDogMDtcblxuICAgIGlmICh0aGlzLmhpZGVQcm9ncmVzc2luZ1ZhbHVlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdFZhbHVlID0gdGhpcy52YWx1ZUVsKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcmVjdE1heCA9IHRoaXMuY29udGFpbmVyRWwoKT8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHRoaXMucG9zaXRpb24uc2V0KChzbGlkZXJDb250YWluZXIud2lkdGggKiBwcm9ncmVzc2luZykgLSAoKHJlY3RWYWx1ZS53aWR0aCkgLyAyKSAtICh0aGlzLnZhbHVlKCkgPCAxMCA/IDUgOiA0KSk7XG4gICAgY29uc3QgZ3JhbmRXaWR0aFZhbHVlID0gdGhpcy5wb3NpdGlvbiArIHJlY3RWYWx1ZS53aWR0aCAtIHJlY3RNYXgud2lkdGg7XG5cbiAgICBpZiAoZ3JhbmRXaWR0aFZhbHVlID4gMCkge1xuICAgICAgdGhpcy5wb3NpdGlvbi51cGRhdGUodmFsdWUgPT4gdmFsdWUgLSBncmFuZFdpZHRoVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnNldFZpc2liaWxpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0VmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCByZWN0TWF4ID0gdGhpcy5tYXhWYWx1ZUVsKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcmVjdFZhbHVlID0gdGhpcy52YWx1ZUVsKCk/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB0aGlzLnZpc2liaWxpdHlNaW4uc2V0KHRydWUpO1xuICAgIHRoaXMudmlzaWJpbGl0eU1heC5zZXQodHJ1ZSk7XG4gICAgaWYgKCF0aGlzLnZhbHVlKCkpIHtcbiAgICAgIHRoaXMudmlzaWJpbGl0eU1pbi5zZXQoZmFsc2UpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZWN0VmFsdWUubGVmdCArIHJlY3RWYWx1ZS53aWR0aCA+PSByZWN0TWF4LmxlZnQpIHtcbiAgICAgIHRoaXMudmlzaWJpbGl0eU1heC5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZSgpIDwgdGhpcy5taW4oKSArIDEpIHtcbiAgICAgIHRoaXMudmlzaWJpbGl0eU1pbi5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0VmFyaWFibGVDc3MoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY29udGFpbmVyRWwoKT8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xvckhvdmVyID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWxpYnMtdWktY29sb3ItbGlnaHQtMScpO1xuXG4gICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1saWJzLXVpLXNsaWRlci1ib3JkZXItYm94LXNoYWRvdycsIGAke2NvbG9ySG92ZXJ9MzBgKTtcbiAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWxpYnMtdWktc2xpZGVyLXZhbHVlJywgYCR7dGhpcy52YWx1ZSgpIC0gMC41fSVgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXhDb21wdXRlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtYXROdW1iZXIoKSkge1xuICAgICAgcmV0dXJuIHZpZXdEYXRhTnVtYmVyQnlMYW5ndWFnZSh0aGlzLm1heCgpLCB0cnVlLCAxLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWF4KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG59XG4iLCI8ZGl2IFtjbGFzc109XCJjbGFzc0luY2x1ZGUoKVwiXG4gIFtzdHlsZS5oZWlnaHQucHhdPVwibW9kZSgpID09PSAnc2xpZGVyJyA/IDQ0IDogMjJcIlxuICBbY2xhc3MucHQtWzRweF1dPVwibW9kZSgpID09PSAnc2xpZGVyJ1wiXG4gICNjb250YWluZXJFbD5cbiAgPGRpdiBbY2xhc3MuaGlkZGVuXT1cIiFmb2N1cygpXCJcbiAgICBjbGFzcz1cImxpYnMtdWktcmFuZ2Utc2xpZGVyLWljb24tYWN0aXZlXCI+XG4gIDwvZGl2PlxuICA8aW5wdXQgI3JhbmdlRWxcbiAgICBjbGFzcz1cImxpYnMtdWktcmFuZ2Utc2xpZGVyXCJcbiAgICBbYXR0ci5tb2RlXT1cIm1vZGUoKVwiXG4gICAgW2F0dHIuZm9jdXNdPVwiZm9jdXMoKVwiXG4gICAgW2F0dHIuZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgIFt2YWx1ZV09XCJ2YWx1ZSgpXCJcbiAgICBbdHlwZV09XCIncmFuZ2UnXCJcbiAgICBbbWluXT1cIm1pbigpXCJcbiAgICBbbWF4XT1cIm1heCgpXCJcbiAgICBbc3RlcF09XCJzdGVwKClcIj5cbiAgQGlmIChtb2RlKCkgPT09ICdzbGlkZXInKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIHJlbGF0aXZlIG10LVs4cHhdXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjOWNhMmFkXSBmbGV4XCJcbiAgICAgICAgW2NsYXNzLmludmlzaWJsZV09XCIhdmlzaWJpbGl0eU1pbigpXCI+XG4gICAgICAgIHt7IG1pbigpIH19XG4gICAgICAgIEBpZiAodW5pdCgpKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyM5Y2EyYWRdXCI+e3sgdW5pdCgpIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgI3ZhbHVlRWxcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyM5Y2EyYWRdIGFic29sdXRlIGJvdHRvbS0wIGZsZXhcIlxuICAgICAgICBbc3R5bGUubGVmdC5weF09XCJwb3NpdGlvbigpXCI+XG4gICAgICAgIEBpZiAoIWhpZGVQcm9ncmVzc2luZ1ZhbHVlKCkpIHtcbiAgICAgICAgICB7eyB2YWx1ZSgpIH19XG4gICAgICAgICAgQGlmICh1bml0KCkpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1mb250LWg3ciB0ZXh0LVsjOWNhMmFkXVwiPnt7IHVuaXQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAjbWF4VmFsdWVFbFxuICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oN3IgdGV4dC1bIzljYTJhZF0gZmxleFwiXG4gICAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiIXZpc2liaWxpdHlNYXgoKVwiPlxuICAgICAgICB7eyBtYXhDb21wdXRlZCgpIH19XG4gICAgICAgIEBpZiAodW5pdCgpKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDdyIHRleHQtWyM5Y2EyYWRdXCI+e3sgdW5pdCgpIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLWlucHV0cy1yYW5nZS1zbGlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3JhbmdlLXNsaWRlci9zcmMvbGlicy11aS1jb21wb25lbnRzLWlucHV0cy1yYW5nZS1zbGlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,134 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, computed, input, model, output, viewChild, effect, untracked, Component, ChangeDetectionStrategy } from '@angular/core';
3
+ import { viewDataNumberByLanguage } from '@libs-ui/utils';
4
+ import { Subject, fromEvent } from 'rxjs';
5
+ import { tap, take, takeUntil, mergeMap, skip, debounceTime } from 'rxjs/operators';
6
+
7
+ class LibsUiComponentsInputsRangeSliderComponent {
8
+ /* PROPERTY */
9
+ visibilityMin = signal(true);
10
+ visibilityMax = signal(true);
11
+ position = signal(0);
12
+ focus = signal(false);
13
+ maxDisplay = computed(this.maxComputed.bind(this));
14
+ onChange = new Subject();
15
+ onDestroy = new Subject();
16
+ /* INPUT */
17
+ mode = input('slider');
18
+ min = input(1);
19
+ max = input(100);
20
+ value = model(0);
21
+ classInclude = input('libs-ui-range-slider-container', { transform: value => value ? `libs-ui-range-slider-container ${value}` : 'libs-ui-range-slider-container' });
22
+ disable = input(false);
23
+ unit = input();
24
+ step = input(0);
25
+ hideProgressingValue = input();
26
+ formatNumber = input();
27
+ /* OUTPUT */
28
+ outChange = output();
29
+ /* VIEW CHILD */
30
+ containerEl = viewChild('containerEl');
31
+ rangeEl = viewChild('rangeEl');
32
+ valueEl = viewChild('valueEl');
33
+ maxValueEl = viewChild('maxValueEl');
34
+ constructor() {
35
+ effect(() => {
36
+ this.onChange.next(this.value());
37
+ untracked(() => {
38
+ this.setVariableCss();
39
+ this.calculatePosition();
40
+ });
41
+ });
42
+ }
43
+ /* FUNCTIONS */
44
+ ngAfterViewInit() {
45
+ const windowMouseUp = this.initEvent(window, 'mouseup').pipe(tap(() => this.focus.set(false)));
46
+ const elementMouseDown = this.initEvent(this.rangeEl()?.nativeElement, 'mousedown').pipe(tap(() => this.focus.set(true)));
47
+ const elementMouseUp = this.initEvent(this.rangeEl()?.nativeElement, 'click').pipe(take(1));
48
+ const elementMouseMove = this.initEvent(this.rangeEl()?.nativeElement, 'mousemove').pipe(takeUntil(windowMouseUp));
49
+ const drag = elementMouseDown.pipe(mergeMap(() => elementMouseMove));
50
+ const click = elementMouseDown.pipe(mergeMap(() => elementMouseUp));
51
+ drag.pipe(takeUntil(this.onDestroy)).subscribe(this.handlerChange.bind(this));
52
+ click.pipe(takeUntil(this.onDestroy)).subscribe(this.handlerChange.bind(this));
53
+ this.onChange.pipe(skip(this.mode() === 'audio' ? 1 : 0), debounceTime(250), takeUntil(this.onDestroy)).subscribe((value) => this.outChange.emit(value));
54
+ }
55
+ initEvent(element, name) {
56
+ return fromEvent(element, name).pipe(tap((e) => e.stopPropagation()), takeUntil(this.onDestroy));
57
+ }
58
+ async handlerChange(event) {
59
+ if (this.disable()) {
60
+ event.preventDefault();
61
+ event.stopPropagation();
62
+ event.target.value = this.value();
63
+ return;
64
+ }
65
+ this.value.set(+event.target.value);
66
+ this.onChange.next(this.value());
67
+ }
68
+ async calculatePosition() {
69
+ if (!this.containerEl() || !this.valueEl()) {
70
+ return;
71
+ }
72
+ const sliderContainer = this.containerEl()?.nativeElement.getBoundingClientRect();
73
+ const progressing = this.max ? (this.value() / this.max()) : 0;
74
+ if (this.hideProgressingValue()) {
75
+ return;
76
+ }
77
+ const rectValue = this.valueEl()?.nativeElement.getBoundingClientRect();
78
+ const rectMax = this.containerEl()?.nativeElement.getBoundingClientRect();
79
+ this.position.set((sliderContainer.width * progressing) - ((rectValue.width) / 2) - (this.value() < 10 ? 5 : 4));
80
+ const grandWidthValue = this.position + rectValue.width - rectMax.width;
81
+ if (grandWidthValue > 0) {
82
+ this.position.update(value => value - grandWidthValue);
83
+ }
84
+ this.setVisibility();
85
+ }
86
+ async setVisibility() {
87
+ const rectMax = this.maxValueEl()?.nativeElement.getBoundingClientRect();
88
+ const rectValue = this.valueEl()?.nativeElement.getBoundingClientRect();
89
+ this.visibilityMin.set(true);
90
+ this.visibilityMax.set(true);
91
+ if (!this.value()) {
92
+ this.visibilityMin.set(false);
93
+ return;
94
+ }
95
+ if (rectValue.left + rectValue.width >= rectMax.left) {
96
+ this.visibilityMax.set(false);
97
+ }
98
+ if (this.value() < this.min() + 1) {
99
+ this.visibilityMin.set(false);
100
+ }
101
+ }
102
+ async setVariableCss() {
103
+ const element = this.containerEl()?.nativeElement;
104
+ if (!element) {
105
+ return;
106
+ }
107
+ const colorHover = getComputedStyle(element).getPropertyValue('--libs-ui-color-light-1');
108
+ element.style.setProperty('--libs-ui-slider-border-box-shadow', `${colorHover}30`);
109
+ element.style.setProperty('--libs-ui-slider-value', `${this.value() - 0.5}%`);
110
+ }
111
+ maxComputed() {
112
+ if (this.formatNumber()) {
113
+ return viewDataNumberByLanguage(this.max(), true, 1, false, true);
114
+ }
115
+ return this.max();
116
+ }
117
+ ngOnDestroy() {
118
+ this.onDestroy.next();
119
+ this.onDestroy.complete();
120
+ }
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsRangeSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsInputsRangeSliderComponent, isStandalone: true, selector: "libs_ui-components-inputs-range_slider", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, hideProgressingValue: { classPropertyName: "hideProgressingValue", publicName: "hideProgressingValue", isSignal: true, isRequired: false, transformFunction: null }, formatNumber: { classPropertyName: "formatNumber", publicName: "formatNumber", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", outChange: "outChange" }, viewQueries: [{ propertyName: "containerEl", first: true, predicate: ["containerEl"], descendants: true, isSignal: true }, { propertyName: "rangeEl", first: true, predicate: ["rangeEl"], descendants: true, isSignal: true }, { propertyName: "valueEl", first: true, predicate: ["valueEl"], descendants: true, isSignal: true }, { propertyName: "maxValueEl", first: true, predicate: ["maxValueEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"classInclude()\"\n [style.height.px]=\"mode() === 'slider' ? 44 : 22\"\n [class.pt-[4px]]=\"mode() === 'slider'\"\n #containerEl>\n <div [class.hidden]=\"!focus()\"\n class=\"libs-ui-range-slider-icon-active\">\n </div>\n <input #rangeEl\n class=\"libs-ui-range-slider\"\n [attr.mode]=\"mode()\"\n [attr.focus]=\"focus()\"\n [attr.disable]=\"disable()\"\n [value]=\"value()\"\n [type]=\"'range'\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\">\n @if (mode() === 'slider') {\n <div class=\"flex justify-between relative mt-[8px]\">\n <div class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMin()\">\n {{ min() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n <div #valueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] absolute bottom-0 flex\"\n [style.left.px]=\"position()\">\n @if (!hideProgressingValue()) {\n {{ value() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n }\n </div>\n <div #maxValueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMax()\">\n {{ maxComputed() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n </div>\n }\n</div>\n", styles: [".libs-ui-range-slider-container{width:100%;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:linear-gradient(to right,var(--libs-ui-color-default, #226FF5) 0%,var(--libs-ui-color-default, #226FF5) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) 100%);outline:none;border-radius:4px}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;cursor:pointer;border:solid 2px var(--libs-ui-color-default);z-index:3;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb{width:16px;height:16px;background:#fff;border-radius:50%;cursor:pointer;box-shadow:0 1px 2px #4e4e4e4d;border:solid 2px var(--libs-ui-color-default);z-index:3}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]{background:linear-gradient(to right,#071631 0%,#071631 var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-webkit-slider-thumb{display:none}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-moz-range-thumb{width:0;height:0;border:none}.libs-ui-range-slider-container .libs-ui-range-slider:hover,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true]{background:linear-gradient(to right,var(--libs-ui-color-light-1, #4E8CF7) 0%,var(--libs-ui-color-light-1, #4E8CF7) var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-webkit-slider-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-webkit-slider-thumb{display:block}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-moz-range-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-moz-range-thumb{width:16px;height:16px;border:solid 2px var(--libs-ui-color-default)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true]{pointer-events:none;background:linear-gradient(to right,#CDD0D6 0%,#CDD0D6 var(--libs-ui-slider-value),#E6E7EA var(--libs-ui-slider-value),#E6E7EA 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true].libs-ui-range-slider::-webkit-slider-thumb{border:solid 2px #CDD0D6}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
123
+ }
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsInputsRangeSliderComponent, decorators: [{
125
+ type: Component,
126
+ args: [{ selector: 'libs_ui-components-inputs-range_slider', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"classInclude()\"\n [style.height.px]=\"mode() === 'slider' ? 44 : 22\"\n [class.pt-[4px]]=\"mode() === 'slider'\"\n #containerEl>\n <div [class.hidden]=\"!focus()\"\n class=\"libs-ui-range-slider-icon-active\">\n </div>\n <input #rangeEl\n class=\"libs-ui-range-slider\"\n [attr.mode]=\"mode()\"\n [attr.focus]=\"focus()\"\n [attr.disable]=\"disable()\"\n [value]=\"value()\"\n [type]=\"'range'\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\">\n @if (mode() === 'slider') {\n <div class=\"flex justify-between relative mt-[8px]\">\n <div class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMin()\">\n {{ min() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n <div #valueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] absolute bottom-0 flex\"\n [style.left.px]=\"position()\">\n @if (!hideProgressingValue()) {\n {{ value() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n }\n </div>\n <div #maxValueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMax()\">\n {{ maxComputed() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n </div>\n }\n</div>\n", styles: [".libs-ui-range-slider-container{width:100%;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider{-webkit-appearance:none;appearance:none;width:100%;height:4px;background:linear-gradient(to right,var(--libs-ui-color-default, #226FF5) 0%,var(--libs-ui-color-default, #226FF5) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) var(--libs-ui-slider-value),var(--libs-ui-color-light-3, #e9f1fe) 100%);outline:none;border-radius:4px}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;cursor:pointer;border:solid 2px var(--libs-ui-color-default);z-index:3;position:relative}.libs-ui-range-slider-container .libs-ui-range-slider::-webkit-slider-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb{width:16px;height:16px;background:#fff;border-radius:50%;cursor:pointer;box-shadow:0 1px 2px #4e4e4e4d;border:solid 2px var(--libs-ui-color-default);z-index:3}.libs-ui-range-slider-container .libs-ui-range-slider::-moz-range-thumb:hover{box-shadow:0 0 0 8px var(--libs-ui-slider-border-box-shadow, rgba(78, 140, 247, .1882352941))}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]{background:linear-gradient(to right,#071631 0%,#071631 var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-webkit-slider-thumb{display:none}.libs-ui-range-slider-container .libs-ui-range-slider[mode=media]::-moz-range-thumb{width:0;height:0;border:none}.libs-ui-range-slider-container .libs-ui-range-slider:hover,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true]{background:linear-gradient(to right,var(--libs-ui-color-light-1, #4E8CF7) 0%,var(--libs-ui-color-light-1, #4E8CF7) var(--libs-ui-slider-value),#CDD0D6 var(--libs-ui-slider-value),#CDD0D6 100%)}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-webkit-slider-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-webkit-slider-thumb{display:block}.libs-ui-range-slider-container .libs-ui-range-slider:hover[mode=media]::-moz-range-thumb,.libs-ui-range-slider-container .libs-ui-range-slider[focus=true][mode=media]::-moz-range-thumb{width:16px;height:16px;border:solid 2px var(--libs-ui-color-default)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true]{pointer-events:none;background:linear-gradient(to right,#CDD0D6 0%,#CDD0D6 var(--libs-ui-slider-value),#E6E7EA var(--libs-ui-slider-value),#E6E7EA 100%)}.libs-ui-range-slider-container .libs-ui-range-slider[disable=true].libs-ui-range-slider::-webkit-slider-thumb{border:solid 2px #CDD0D6}\n"] }]
127
+ }], ctorParameters: () => [] });
128
+
129
+ /**
130
+ * Generated bundle index. Do not edit.
131
+ */
132
+
133
+ export { LibsUiComponentsInputsRangeSliderComponent };
134
+ //# sourceMappingURL=libs-ui-components-inputs-range-slider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-components-inputs-range-slider.mjs","sources":["../../../../../../libs-ui/components/inputs/range-slider/src/inputs-range-slider.component.ts","../../../../../../libs-ui/components/inputs/range-slider/src/inputs-range-slider.component.html","../../../../../../libs-ui/components/inputs/range-slider/src/libs-ui-components-inputs-range-slider.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnDestroy, computed, effect, input, model, output, signal, untracked, viewChild } from '@angular/core';\nimport { IEvent } from '@libs-ui/interfaces-types';\nimport { viewDataNumberByLanguage } from '@libs-ui/utils';\nimport { Observable, Subject, fromEvent } from 'rxjs';\nimport { debounceTime, mergeMap, skip, take, takeUntil, tap } from 'rxjs/operators';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-range_slider',\n templateUrl: 'inputs-range-slider.component.html',\n styleUrl: 'inputs-range-slider.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LibsUiComponentsInputsRangeSliderComponent implements AfterViewInit, OnDestroy {\n\n /* PROPERTY */\n protected visibilityMin = signal<boolean>(true);\n protected visibilityMax = signal<boolean>(true);\n protected position = signal<number>(0);\n protected focus = signal<boolean>(false);\n protected maxDisplay = computed(this.maxComputed.bind(this))\n\n private onChange = new Subject<number>();\n private onDestroy = new Subject<void>();\n\n /* INPUT */\n readonly mode = input<'audio' | 'slider'>('slider');\n readonly min = input<number>(1);\n readonly max = input<number>(100);\n readonly value = model<number>(0);\n readonly classInclude = input<string, string | undefined>('libs-ui-range-slider-container', { transform: value => value ? `libs-ui-range-slider-container ${value}` : 'libs-ui-range-slider-container' });\n readonly disable = input<boolean>(false);\n readonly unit = input<string>();\n readonly step = input<number>(0);\n readonly hideProgressingValue = input<boolean>();\n readonly formatNumber = input<boolean>();\n\n /* OUTPUT */\n readonly outChange = output<number>();\n\n /* VIEW CHILD */\n private readonly containerEl = viewChild<ElementRef>('containerEl');\n private readonly rangeEl = viewChild<ElementRef>('rangeEl');\n private readonly valueEl = viewChild<ElementRef>('valueEl');\n private readonly maxValueEl = viewChild<ElementRef>('maxValueEl');\n\n constructor() {\n effect(() => {\n this.onChange.next(this.value());\n untracked(() => {\n this.setVariableCss();\n this.calculatePosition();\n });\n });\n }\n\n /* FUNCTIONS */\n ngAfterViewInit(): void {\n const windowMouseUp = this.initEvent(window as unknown as HTMLElement, 'mouseup').pipe(tap(() => this.focus.set(false)));\n const elementMouseDown = this.initEvent(this.rangeEl()?.nativeElement, 'mousedown').pipe(tap(() => this.focus.set(true)));\n const elementMouseUp = this.initEvent(this.rangeEl()?.nativeElement, 'click').pipe(take(1));\n const elementMouseMove = this.initEvent(this.rangeEl()?.nativeElement, 'mousemove').pipe(takeUntil(windowMouseUp));\n\n const drag = elementMouseDown.pipe(mergeMap(() => elementMouseMove));\n const click = elementMouseDown.pipe(mergeMap(() => elementMouseUp));\n\n drag.pipe(takeUntil(this.onDestroy)).subscribe(this.handlerChange.bind(this));\n click.pipe(takeUntil(this.onDestroy)).subscribe(this.handlerChange.bind(this));\n this.onChange.pipe(skip(this.mode() === 'audio' ? 1 : 0), debounceTime(250), takeUntil(this.onDestroy)).subscribe((value: number) => this.outChange.emit(value));\n }\n\n private initEvent(element: HTMLElement, name: string): Observable<IEvent> {\n return fromEvent<IEvent>(element, name).pipe(tap((e: IEvent) => e.stopPropagation()), takeUntil(this.onDestroy));\n }\n\n private async handlerChange(event: IEvent) {\n if (this.disable()) {\n event.preventDefault();\n event.stopPropagation();\n event.target.value = this.value();\n\n return;\n }\n this.value.set(+event.target.value);\n this.onChange.next(this.value());\n }\n\n private async calculatePosition() {\n if (!this.containerEl() || !this.valueEl()) {\n return;\n }\n const sliderContainer = this.containerEl()?.nativeElement.getBoundingClientRect();\n const progressing = this.max ? (this.value() / this.max()) : 0;\n\n if (this.hideProgressingValue()) {\n return;\n }\n const rectValue = this.valueEl()?.nativeElement.getBoundingClientRect();\n const rectMax = this.containerEl()?.nativeElement.getBoundingClientRect();\n\n this.position.set((sliderContainer.width * progressing) - ((rectValue.width) / 2) - (this.value() < 10 ? 5 : 4));\n const grandWidthValue = this.position + rectValue.width - rectMax.width;\n\n if (grandWidthValue > 0) {\n this.position.update(value => value - grandWidthValue);\n }\n this.setVisibility();\n }\n\n private async setVisibility() {\n const rectMax = this.maxValueEl()?.nativeElement.getBoundingClientRect();\n const rectValue = this.valueEl()?.nativeElement.getBoundingClientRect();\n\n this.visibilityMin.set(true);\n this.visibilityMax.set(true);\n if (!this.value()) {\n this.visibilityMin.set(false);\n\n return;\n }\n if (rectValue.left + rectValue.width >= rectMax.left) {\n this.visibilityMax.set(false);\n }\n if (this.value() < this.min() + 1) {\n this.visibilityMin.set(false);\n }\n }\n\n private async setVariableCss() {\n const element = this.containerEl()?.nativeElement;\n\n if (!element) {\n return;\n }\n const colorHover = getComputedStyle(element).getPropertyValue('--libs-ui-color-light-1');\n\n element.style.setProperty('--libs-ui-slider-border-box-shadow', `${colorHover}30`);\n element.style.setProperty('--libs-ui-slider-value', `${this.value() - 0.5}%`);\n }\n\n protected maxComputed() {\n if (this.formatNumber()) {\n return viewDataNumberByLanguage(this.max(), true, 1, false, true);\n }\n\n return this.max();\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n\n}\n","<div [class]=\"classInclude()\"\n [style.height.px]=\"mode() === 'slider' ? 44 : 22\"\n [class.pt-[4px]]=\"mode() === 'slider'\"\n #containerEl>\n <div [class.hidden]=\"!focus()\"\n class=\"libs-ui-range-slider-icon-active\">\n </div>\n <input #rangeEl\n class=\"libs-ui-range-slider\"\n [attr.mode]=\"mode()\"\n [attr.focus]=\"focus()\"\n [attr.disable]=\"disable()\"\n [value]=\"value()\"\n [type]=\"'range'\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\">\n @if (mode() === 'slider') {\n <div class=\"flex justify-between relative mt-[8px]\">\n <div class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMin()\">\n {{ min() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n <div #valueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] absolute bottom-0 flex\"\n [style.left.px]=\"position()\">\n @if (!hideProgressingValue()) {\n {{ value() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n }\n </div>\n <div #maxValueEl\n class=\"libs-ui-font-h7r text-[#9ca2ad] flex\"\n [class.invisible]=\"!visibilityMax()\">\n {{ maxComputed() }}\n @if (unit()) {\n <span class=\"libs-ui-font-h7r text-[#9ca2ad]\">{{ unit() }}</span>\n }\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './inputs-range-slider.component';
@@ -0,0 +1,37 @@
1
+ import { AfterViewInit, OnDestroy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class LibsUiComponentsInputsRangeSliderComponent implements AfterViewInit, OnDestroy {
4
+ protected visibilityMin: import("@angular/core").WritableSignal<boolean>;
5
+ protected visibilityMax: import("@angular/core").WritableSignal<boolean>;
6
+ protected position: import("@angular/core").WritableSignal<number>;
7
+ protected focus: import("@angular/core").WritableSignal<boolean>;
8
+ protected maxDisplay: import("@angular/core").Signal<any>;
9
+ private onChange;
10
+ private onDestroy;
11
+ readonly mode: import("@angular/core").InputSignal<"audio" | "slider">;
12
+ readonly min: import("@angular/core").InputSignal<number>;
13
+ readonly max: import("@angular/core").InputSignal<number>;
14
+ readonly value: import("@angular/core").ModelSignal<number>;
15
+ readonly classInclude: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
16
+ readonly disable: import("@angular/core").InputSignal<boolean>;
17
+ readonly unit: import("@angular/core").InputSignal<string | undefined>;
18
+ readonly step: import("@angular/core").InputSignal<number>;
19
+ readonly hideProgressingValue: import("@angular/core").InputSignal<boolean | undefined>;
20
+ readonly formatNumber: import("@angular/core").InputSignal<boolean | undefined>;
21
+ readonly outChange: import("@angular/core").OutputEmitterRef<number>;
22
+ private readonly containerEl;
23
+ private readonly rangeEl;
24
+ private readonly valueEl;
25
+ private readonly maxValueEl;
26
+ constructor();
27
+ ngAfterViewInit(): void;
28
+ private initEvent;
29
+ private handlerChange;
30
+ private calculatePosition;
31
+ private setVisibility;
32
+ private setVariableCss;
33
+ protected maxComputed(): any;
34
+ ngOnDestroy(): void;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsInputsRangeSliderComponent, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsInputsRangeSliderComponent, "libs_ui-components-inputs-range_slider", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "classInclude": { "alias": "classInclude"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "hideProgressingValue": { "alias": "hideProgressingValue"; "required": false; "isSignal": true; }; "formatNumber": { "alias": "formatNumber"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "outChange": "outChange"; }, never, never, true, never>;
37
+ }
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "@libs-ui/components-inputs-range-slider",
3
+ "version": "0.2.106.2",
4
+ "peerDependencies": {
5
+ "@angular/common": "^18.2.0",
6
+ "@angular/core": "^18.2.0"
7
+ },
8
+ "sideEffects": false,
9
+ "module": "fesm2022/libs-ui-components-inputs-range-slider.mjs",
10
+ "typings": "index.d.ts",
11
+ "exports": {
12
+ "./package.json": {
13
+ "default": "./package.json"
14
+ },
15
+ ".": {
16
+ "types": "./index.d.ts",
17
+ "esm2022": "./esm2022/libs-ui-components-inputs-range-slider.mjs",
18
+ "esm": "./esm2022/libs-ui-components-inputs-range-slider.mjs",
19
+ "default": "./fesm2022/libs-ui-components-inputs-range-slider.mjs"
20
+ }
21
+ },
22
+ "dependencies": {
23
+ "tslib": "^2.3.0"
24
+ }
25
+ }