@taiga-ui/kit 4.29.0 → 4.30.0-canary.07fcf02

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.
Files changed (36) hide show
  1. package/components/index.d.ts +1 -0
  2. package/components/input-number/input-number.options.d.ts +1 -1
  3. package/components/input-slider/index.d.ts +2 -0
  4. package/components/input-slider/input-slider.d.ts +2 -0
  5. package/components/input-slider/input-slider.directive.d.ts +19 -0
  6. package/components/slider/helpers/key-steps.d.ts +3 -0
  7. package/components/slider/helpers/slider-key-steps.directive.d.ts +31 -7
  8. package/components/slider/slider.component.d.ts +6 -3
  9. package/components/slider/slider.d.ts +2 -2
  10. package/esm2022/components/index.mjs +2 -1
  11. package/esm2022/components/input-number/input-number.options.mjs +1 -1
  12. package/esm2022/components/input-slider/index.mjs +3 -0
  13. package/esm2022/components/input-slider/input-slider.directive.mjs +117 -0
  14. package/esm2022/components/input-slider/input-slider.mjs +4 -0
  15. package/esm2022/components/input-slider/taiga-ui-kit-components-input-slider.mjs +5 -0
  16. package/esm2022/components/range/range.component.mjs +1 -1
  17. package/esm2022/components/slider/helpers/key-steps.mjs +13 -1
  18. package/esm2022/components/slider/helpers/slider-key-steps.directive.mjs +82 -32
  19. package/esm2022/components/slider/slider.component.mjs +25 -20
  20. package/esm2022/components/slider/slider.mjs +3 -2
  21. package/esm2022/directives/button-group/button-group.directive.mjs +2 -2
  22. package/esm2022/directives/button-select/button-select.directive.mjs +4 -5
  23. package/fesm2022/taiga-ui-kit-components-input-number.mjs.map +1 -1
  24. package/fesm2022/taiga-ui-kit-components-input-slider.mjs +125 -0
  25. package/fesm2022/taiga-ui-kit-components-input-slider.mjs.map +1 -0
  26. package/fesm2022/taiga-ui-kit-components-range.mjs +1 -1
  27. package/fesm2022/taiga-ui-kit-components-range.mjs.map +1 -1
  28. package/fesm2022/taiga-ui-kit-components-slider.mjs +116 -52
  29. package/fesm2022/taiga-ui-kit-components-slider.mjs.map +1 -1
  30. package/fesm2022/taiga-ui-kit-components.mjs +1 -0
  31. package/fesm2022/taiga-ui-kit-components.mjs.map +1 -1
  32. package/fesm2022/taiga-ui-kit-directives-button-group.mjs +2 -2
  33. package/fesm2022/taiga-ui-kit-directives-button-group.mjs.map +1 -1
  34. package/fesm2022/taiga-ui-kit-directives-button-select.mjs +3 -4
  35. package/fesm2022/taiga-ui-kit-directives-button-select.mjs.map +1 -1
  36. package/package.json +14 -8
@@ -1,17 +1,18 @@
1
- import { tuiRound, tuiClamp } from '@taiga-ui/cdk/utils/math';
1
+ import { tuiRound } from '@taiga-ui/cdk/utils/math';
2
+ import { __decorate } from 'tslib';
2
3
  import * as i0 from '@angular/core';
3
- import { inject, INJECTOR, Component, ChangeDetectionStrategy, Input, forwardRef, Directive, ContentChild } from '@angular/core';
4
+ import { inject, Component, ChangeDetectionStrategy, Input, INJECTOR, signal, Directive, forwardRef, ContentChild } from '@angular/core';
5
+ import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
+ import { NgControl, NgModel } from '@angular/forms';
4
7
  import { TuiControl } from '@taiga-ui/cdk/classes';
8
+ import { tuiWatch, tuiControlValue, tuiTypedFromEvent } from '@taiga-ui/cdk/observables';
5
9
  import { tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens';
6
- import { __decorate } from 'tslib';
7
- import { NgControl, NgModel } from '@angular/forms';
8
- import { tuiWatch, tuiTypedFromEvent } from '@taiga-ui/cdk/observables';
9
- import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
10
10
  import { tuiCreateToken, tuiProvideOptions, tuiPure } from '@taiga-ui/cdk/utils/miscellaneous';
11
- import { take, merge, tap, map, combineLatest, filter } from 'rxjs';
11
+ import { take, timer, switchMap, merge, tap, map, combineLatest, filter } from 'rxjs';
12
+ import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
13
+ import { tuiAsAuxiliary } from '@taiga-ui/core/components/textfield';
12
14
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
13
15
  import { DOCUMENT, AsyncPipe, NgIf } from '@angular/common';
14
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
15
16
  import { TUI_TRUE_HANDLER, TUI_FALSE_HANDLER } from '@taiga-ui/cdk/constants';
16
17
 
17
18
  /**
@@ -36,6 +37,18 @@ function tuiKeyStepValueToPercentage(value, keySteps) {
36
37
  const ratio = (value - lowerStepValue) / (upperStepValue - lowerStepValue) || 0;
37
38
  return (upperStepPercent - lowerStepPercent) * ratio + lowerStepPercent;
38
39
  }
40
+ function tuiCreateKeyStepsTransformer(keySteps, slider) {
41
+ return new (class {
42
+ fromControlValue(controlValue) {
43
+ const newValuePercentage = tuiKeyStepValueToPercentage(controlValue, keySteps);
44
+ return (newValuePercentage * (slider.max - slider.min)) / 100 + slider.min;
45
+ }
46
+ toControlValue(nativeValue) {
47
+ const valueRatio = (nativeValue - slider.min) / (slider.max - slider.min) || 0;
48
+ return tuiPercentageToKeyStepValue(valueRatio * 100, keySteps);
49
+ }
50
+ })();
51
+ }
39
52
 
40
53
  const TUI_SLIDER_DEFAULT_OPTIONS = {
41
54
  size: 'm',
@@ -51,12 +64,15 @@ function tuiSliderOptionsProvider(options) {
51
64
 
52
65
  class TuiSliderComponent {
53
66
  constructor() {
54
- this.injector = inject(INJECTOR);
55
67
  this.control = inject(NgControl, { self: true, optional: true });
56
68
  this.options = inject(TUI_SLIDER_OPTIONS);
57
69
  this.size = this.options.size;
58
70
  this.segments = 1;
59
71
  this.el = tuiInjectElement();
72
+ this.keySteps = inject(TuiSliderKeyStepsBase, {
73
+ self: true,
74
+ optional: true,
75
+ });
60
76
  if (this.control instanceof NgModel) {
61
77
  /**
62
78
  * The ValueAccessor.writeValue method is called twice on any value accessor during component initialization,
@@ -74,11 +90,23 @@ class TuiSliderComponent {
74
90
  get min() {
75
91
  return Number(this.el.min);
76
92
  }
93
+ set min(x) {
94
+ this.el.min = String(x);
95
+ }
77
96
  get max() {
78
97
  return Number(this.el.max || 100);
79
98
  }
99
+ set max(x) {
100
+ this.el.max = String(x);
101
+ }
102
+ get step() {
103
+ return Number(this.el.step) || 1;
104
+ }
105
+ set step(x) {
106
+ this.el.step = String(x);
107
+ }
80
108
  get value() {
81
- if (!this.hasKeySteps && this.control instanceof NgModel) {
109
+ if (!this.keySteps && this.control instanceof NgModel) {
82
110
  /**
83
111
  * If developer uses `[(ngModel)]` and programmatically change value,
84
112
  * the `el.nativeElement.value` is equal to the previous value at this moment.
@@ -90,24 +118,15 @@ class TuiSliderComponent {
90
118
  set value(newValue) {
91
119
  this.el.value = `${newValue}`;
92
120
  }
93
- get hasKeySteps() {
94
- return Boolean(this.injector.get(TuiSliderKeySteps, null));
95
- }
96
121
  get segmentWidth() {
97
122
  return 100 / Math.max(1, this.segments);
98
123
  }
99
- get step() {
100
- return Number(this.el.step) || 1;
101
- }
102
124
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiSliderComponent, isStandalone: true, selector: "input[type=range][tuiSlider]", inputs: { size: "size", segments: "segments" }, host: { listeners: { "input": "0" }, properties: { "style.--tui-slider-track-color": "options.trackColor", "style.--tui-slider-segment-width.%": "segmentWidth", "style.--tui-slider-fill-ratio": "valueRatio", "attr.data-size": "size" } }, ngImport: i0, template: '', isInline: true, styles: [":host{position:relative;display:block;inline-size:100%;color:var(--tui-background-accent-1);cursor:pointer;-webkit-appearance:none;appearance:none;block-size:.125rem;padding:.4375rem 0;background-color:transparent;background-clip:content-box;outline:none;border-radius:var(--tui-radius-m)}:host:active{cursor:ew-resize}:host:disabled{opacity:var(--tui-disabled-opacity);cursor:auto}:host[data-size=s]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.25rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .5rem);inline-size:.5rem;block-size:.5rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=s]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host[data-size=m]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.125rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .75rem);inline-size:.75rem;block-size:.75rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=m]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host::-webkit-slider-container{border-radius:inherit}:host[data-size=m]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.25rem,0;background-size:calc(100% - .75rem),calc(100% - .75rem),auto}:host[data-size=s]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.125rem,0;background-size:calc(100% - .5rem),calc(100% - .5rem),auto}:host[data-size=m]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.25rem;background-size:calc(100% - .75rem)}:host[data-size=s]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.125rem;background-size:calc(100% - .5rem)}:host[data-size=m]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=m]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=m]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=s]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=s]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=m]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=m]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=m]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=s]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=s]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host::-moz-range-progress{border-radius:inherit}:host::-moz-range-progress{block-size:.125rem;background:currentColor;border-top-right-radius:0;border-bottom-right-radius:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
125
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiSliderComponent, isStandalone: true, selector: "input[type=range][tuiSlider]", inputs: { size: "size", segments: "segments" }, host: { listeners: { "input": "0" }, properties: { "style.--tui-slider-track-color": "options.trackColor", "style.--tui-slider-segment-width.%": "segmentWidth", "style.--tui-slider-fill-ratio": "valueRatio", "attr.data-size": "size" } }, providers: [tuiAsAuxiliary(TuiSliderComponent)], ngImport: i0, template: '', isInline: true, styles: [":host{position:relative;display:block;inline-size:100%;color:var(--tui-background-accent-1);cursor:pointer;-webkit-appearance:none;appearance:none;block-size:.125rem;padding:.4375rem 0;background-color:transparent;background-clip:content-box;outline:none;border-radius:var(--tui-radius-m)}:host:active{cursor:ew-resize}:host:disabled{opacity:var(--tui-disabled-opacity);cursor:auto}:host[data-size=s]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.25rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .5rem);inline-size:.5rem;block-size:.5rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=s]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host[data-size=m]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.125rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .75rem);inline-size:.75rem;block-size:.75rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=m]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host::-webkit-slider-container{border-radius:inherit}:host[data-size=m]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.25rem,0;background-size:calc(100% - .75rem),calc(100% - .75rem),auto}:host[data-size=s]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.125rem,0;background-size:calc(100% - .5rem),calc(100% - .5rem),auto}:host[data-size=m]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.25rem;background-size:calc(100% - .75rem)}:host[data-size=s]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.125rem;background-size:calc(100% - .5rem)}:host[data-size=m]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=m]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=m]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=s]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=s]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=m]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=m]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=m]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=s]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=s]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host::-moz-range-progress{border-radius:inherit}:host::-moz-range-progress{block-size:.125rem;background:currentColor;border-top-right-radius:0;border-bottom-right-radius:0}:host-context(tui-textfield) :host([type=\"range\"]){--tui-radius: var(--tui-radius-m);position:absolute;top:100%;left:calc(var(--tui-radius) / 2);right:0;inline-size:calc(100% - calc(var(--tui-radius) / 2));box-sizing:border-box;block-size:1rem;margin:-.5625rem 0 0;padding:0;border-top-left-radius:0;border-bottom-left-radius:calc(var(--tui-radius) * 10) calc(var(--tui-radius) * 2);pointer-events:auto}:host-context(tui-textfield[data-size=\"l\"]) :host([type=\"range\"]){--tui-radius: var(--tui-radius-l)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
104
126
  }
105
- __decorate([
106
- tuiPure
107
- ], TuiSliderComponent.prototype, "hasKeySteps", null);
108
127
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderComponent, decorators: [{
109
128
  type: Component,
110
- args: [{ standalone: true, selector: 'input[type=range][tuiSlider]', template: '', changeDetection: ChangeDetectionStrategy.OnPush, host: {
129
+ args: [{ standalone: true, selector: 'input[type=range][tuiSlider]', template: '', changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiAsAuxiliary(TuiSliderComponent)], host: {
111
130
  /**
112
131
  * For change detection.
113
132
  * Webkit does not have built-in method for customization of filling progress (as Firefox).
@@ -119,58 +138,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
119
138
  '[style.--tui-slider-segment-width.%]': 'segmentWidth',
120
139
  '[style.--tui-slider-fill-ratio]': 'valueRatio',
121
140
  '[attr.data-size]': 'size',
122
- }, styles: [":host{position:relative;display:block;inline-size:100%;color:var(--tui-background-accent-1);cursor:pointer;-webkit-appearance:none;appearance:none;block-size:.125rem;padding:.4375rem 0;background-color:transparent;background-clip:content-box;outline:none;border-radius:var(--tui-radius-m)}:host:active{cursor:ew-resize}:host:disabled{opacity:var(--tui-disabled-opacity);cursor:auto}:host[data-size=s]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.25rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .5rem);inline-size:.5rem;block-size:.5rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=s]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host[data-size=m]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.125rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .75rem);inline-size:.75rem;block-size:.75rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=m]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host::-webkit-slider-container{border-radius:inherit}:host[data-size=m]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.25rem,0;background-size:calc(100% - .75rem),calc(100% - .75rem),auto}:host[data-size=s]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.125rem,0;background-size:calc(100% - .5rem),calc(100% - .5rem),auto}:host[data-size=m]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.25rem;background-size:calc(100% - .75rem)}:host[data-size=s]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.125rem;background-size:calc(100% - .5rem)}:host[data-size=m]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=m]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=m]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=s]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=s]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=m]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=m]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=m]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=s]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=s]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host::-moz-range-progress{border-radius:inherit}:host::-moz-range-progress{block-size:.125rem;background:currentColor;border-top-right-radius:0;border-bottom-right-radius:0}\n"] }]
141
+ }, styles: [":host{position:relative;display:block;inline-size:100%;color:var(--tui-background-accent-1);cursor:pointer;-webkit-appearance:none;appearance:none;block-size:.125rem;padding:.4375rem 0;background-color:transparent;background-clip:content-box;outline:none;border-radius:var(--tui-radius-m)}:host:active{cursor:ew-resize}:host:disabled{opacity:var(--tui-disabled-opacity);cursor:auto}:host[data-size=s]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.25rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .5rem);inline-size:.5rem;block-size:.5rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=s]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host[data-size=m]:not(:disabled):before{transition-property:transform,opacity;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;top:.125rem;left:calc(var(--tui-slider-fill-ratio) * 100% - var(--tui-slider-fill-ratio) * .75rem);inline-size:.75rem;block-size:.75rem;border-radius:50%;transform:var(--tui-slider-thumb-transform, scale(1));content:\"\";cursor:ew-resize;background:currentColor;opacity:0}:host[data-size=m]:active:before{opacity:.2;transform:var(--tui-slider-thumb-transform, scale(1)) scale(2.33)}:host::-webkit-slider-container{border-radius:inherit}:host[data-size=m]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.25rem,0;background-size:calc(100% - .75rem),calc(100% - .75rem),auto}:host[data-size=s]::-webkit-slider-runnable-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width)),linear-gradient(to right,currentColor calc(100% * var(--tui-slider-fill-ratio)),transparent calc(100% * var(--tui-slider-fill-ratio)));background-position-x:0,.125rem,0;background-size:calc(100% - .5rem),calc(100% - .5rem),auto}:host[data-size=m]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .5rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.25rem;background-size:calc(100% - .75rem)}:host[data-size=s]::-moz-range-track{block-size:.125rem;border-radius:inherit;background-repeat:no-repeat;background-color:var(--tui-slider-track-color);background-image:linear-gradient(to right,currentColor 0px .375rem,transparent .25rem),repeating-linear-gradient(to right,var(--tui-text-tertiary) 0 .25rem,transparent 0 var(--tui-slider-segment-width));background-position-x:0,.125rem;background-size:calc(100% - .5rem)}:host[data-size=m]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=m]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=m]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-webkit-slider-thumb{-webkit-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1));margin-top:-.4375rem}:not(:disabled):host[data-size=s]::-webkit-slider-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-webkit-slider-thumb:hover,:active:not(:disabled):host[data-size=s]::-webkit-slider-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-webkit-slider-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=m]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.75rem;inline-size:.75rem;box-sizing:content-box;background-clip:content-box;border:.125rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=m]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=m]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=m]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.333)}:focus-visible:host[data-size=m]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host[data-size=s]::-moz-range-thumb{-moz-transition-property:transform;transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;isolation:isolate;-webkit-appearance:none;appearance:none;background-color:currentColor;box-shadow:none;border-radius:50%;block-size:.5rem;inline-size:.5rem;box-sizing:content-box;background-clip:content-box;border:.25rem solid transparent;border-inline-start:0;border-inline-end:0;transform:var(--tui-slider-thumb-transform, scale(1))}:not(:disabled):host[data-size=s]::-moz-range-thumb{cursor:ew-resize}:not(:disabled):host[data-size=s]::-moz-range-thumb:hover,:active:not(:disabled):host[data-size=s]::-moz-range-thumb{transform:var(--tui-slider-thumb-transform, scale(1)) scale(1.5)}:focus-visible:host[data-size=s]::-moz-range-thumb{box-shadow:0 0 0 2px inset var(--tui-border-focus)}:host::-moz-range-progress{border-radius:inherit}:host::-moz-range-progress{block-size:.125rem;background:currentColor;border-top-right-radius:0;border-bottom-right-radius:0}:host-context(tui-textfield) :host([type=\"range\"]){--tui-radius: var(--tui-radius-m);position:absolute;top:100%;left:calc(var(--tui-radius) / 2);right:0;inline-size:calc(100% - calc(var(--tui-radius) / 2));box-sizing:border-box;block-size:1rem;margin:-.5625rem 0 0;padding:0;border-top-left-radius:0;border-bottom-left-radius:calc(var(--tui-radius) * 10) calc(var(--tui-radius) * 2);pointer-events:auto}:host-context(tui-textfield[data-size=\"l\"]) :host([type=\"range\"]){--tui-radius: var(--tui-radius-l)}\n"] }]
123
142
  }], ctorParameters: function () { return []; }, propDecorators: { size: [{
124
143
  type: Input
125
144
  }], segments: [{
126
145
  type: Input
127
- }], hasKeySteps: [] } });
146
+ }] } });
128
147
 
129
- class TuiSliderKeySteps extends TuiControl {
148
+ class TuiSliderKeyStepsBase {
130
149
  constructor() {
131
- super(...arguments);
132
- this.slider = inject(forwardRef(() => TuiSliderComponent));
150
+ this.injector = inject(INJECTOR);
151
+ this.control = inject(NgControl, { self: true, optional: true });
152
+ this.step = 1;
153
+ this.transformer = signal(null);
154
+ this.value = toSignal(timer(0) // https://github.com/angular/angular/issues/54418
155
+ .pipe(switchMap(() => tuiControlValue(this.control))));
133
156
  }
134
- writeValue(controlValue) {
135
- if (controlValue === null) {
136
- return;
137
- }
138
- const clampedControlValue = tuiClamp(controlValue, this.min, this.max);
139
- ngDevMode &&
140
- console.assert(controlValue === clampedControlValue, '\n[SliderKeySteps]: You cannot programmatically set value which is less/more than min/max');
141
- this.slider.value = this.transformToNativeValue(clampedControlValue);
157
+ get slider() {
158
+ return this.injector.get(TuiSliderComponent);
142
159
  }
143
- get min() {
144
- return this.keySteps[0][1];
160
+ set keySteps(steps) {
161
+ this.transformer.set(steps && tuiCreateKeyStepsTransformer(steps, this.slider));
162
+ this.min = steps?.[0][1];
163
+ this.max = steps?.[steps.length - 1]?.[1];
145
164
  }
146
- get max() {
147
- return this.keySteps[this.keySteps.length - 1]?.[1] ?? 0;
165
+ /**
166
+ * TODO(v5): standardize logic between `TuiSlider` & `TuiInputSlider` (for non-linear slider `step` means percentage)
167
+ * Add these host-bindings to `TuiSliderKeyStepsBase`:
168
+ * ```
169
+ * host: {
170
+ * '[attr.min]': '0',
171
+ * '[attr.step]': '1',
172
+ * '[attr.max]': 'totalSteps',
173
+ * },
174
+ * ```
175
+ */
176
+ get totalSteps() {
177
+ /**
178
+ * Not-integer amount of steps is invalid usage of native sliders
179
+ * ```html
180
+ * <input type="range" [max]="100" [step]="3.33" />
181
+ * ```
182
+ * (impossible to select 100; 99.9 is max allowed value)
183
+ */
184
+ return this.step ? Math.round(100 / this.step) : Infinity;
185
+ }
186
+ takeStep(coefficient) {
187
+ const newValue = this.slider.value + coefficient;
188
+ return (this.transformer()?.toControlValue(this.slider.value + coefficient) ??
189
+ newValue);
148
190
  }
149
- updateControlValue() {
150
- this.onChange(tuiPercentageToKeyStepValue(this.slider.valueRatio * 100, this.keySteps));
191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeyStepsBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
192
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: TuiSliderKeyStepsBase, isStandalone: true, selector: "input[tuiSlider][keySteps]", inputs: { step: ["step", "step", (x) => (x === 'any' ? null : x)], keySteps: "keySteps" }, host: { properties: { "attr.aria-valuemin": "min", "attr.aria-valuemax": "max", "attr.aria-valuenow": "value()" } }, ngImport: i0 }); }
193
+ }
194
+ __decorate([
195
+ tuiPure
196
+ ], TuiSliderKeyStepsBase.prototype, "slider", null);
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeyStepsBase, decorators: [{
198
+ type: Directive,
199
+ args: [{
200
+ standalone: true,
201
+ selector: 'input[tuiSlider][keySteps]',
202
+ host: {
203
+ '[attr.aria-valuemin]': 'min',
204
+ '[attr.aria-valuemax]': 'max',
205
+ '[attr.aria-valuenow]': 'value()',
206
+ },
207
+ }]
208
+ }], propDecorators: { step: [{
209
+ type: Input,
210
+ args: [{ transform: (x) => (x === 'any' ? null : x) }]
211
+ }], slider: [], keySteps: [{
212
+ type: Input
213
+ }] } });
214
+ class TuiSliderKeySteps extends TuiControl {
215
+ constructor() {
216
+ super(...arguments);
217
+ this.slider = inject(forwardRef(() => TuiSliderComponent));
151
218
  }
152
- transformToNativeValue(controlValue) {
153
- const { min, max } = this.slider;
154
- const newValuePercentage = tuiKeyStepValueToPercentage(controlValue, this.keySteps);
155
- return (newValuePercentage * (max - min)) / 100 + min;
219
+ set keySteps(steps) {
220
+ this.transformer = tuiCreateKeyStepsTransformer(steps, this.slider);
156
221
  }
157
222
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeySteps, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
158
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiSliderKeySteps, isStandalone: true, selector: "input[tuiSlider][keySteps]", inputs: { keySteps: "keySteps" }, host: { listeners: { "blur": "onTouched()", "input": "updateControlValue()", "change": "updateControlValue()" }, properties: { "attr.aria-valuenow": "value()", "attr.aria-valuemin": "min", "attr.aria-valuemax": "max", "disabled": "disabled()" } }, providers: [tuiFallbackValueProvider(0)], usesInheritance: true, ngImport: i0 }); }
223
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiSliderKeySteps, isStandalone: true, selector: "input[tuiSlider][keySteps][ngModel],input[tuiSlider][keySteps][formControl],input[tuiSlider][keySteps][formControlName]", inputs: { keySteps: "keySteps" }, host: { listeners: { "blur": "onTouched()", "input": "onChange($event.target.value)", "change": "onChange($event.target.value)" }, properties: { "value": "this.value()", "disabled": "disabled()" } }, providers: [tuiFallbackValueProvider(0)], usesInheritance: true, ngImport: i0 }); }
159
224
  }
160
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSliderKeySteps, decorators: [{
161
226
  type: Directive,
162
227
  args: [{
163
228
  standalone: true,
164
- selector: 'input[tuiSlider][keySteps]',
229
+ selector: 'input[tuiSlider][keySteps][ngModel],input[tuiSlider][keySteps][formControl],input[tuiSlider][keySteps][formControlName]',
165
230
  providers: [tuiFallbackValueProvider(0)],
166
231
  host: {
167
- '[attr.aria-valuenow]': 'value()',
168
- '[attr.aria-valuemin]': 'min',
169
- '[attr.aria-valuemax]': 'max',
232
+ '[value]': 'this.value()',
170
233
  '[disabled]': 'disabled()',
171
234
  '(blur)': 'onTouched()',
172
- '(input)': 'updateControlValue()',
173
- '(change)': 'updateControlValue()',
235
+ '(input)': 'onChange($event.target.value)',
236
+ '(change)': 'onChange($event.target.value)',
174
237
  },
175
238
  }]
176
239
  }], propDecorators: { keySteps: [{
@@ -276,6 +339,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
276
339
  const TuiSlider = [
277
340
  TuiSliderComponent,
278
341
  TuiSliderThumbLabel,
342
+ TuiSliderKeyStepsBase,
279
343
  TuiSliderKeySteps,
280
344
  TuiSliderReadonly,
281
345
  ];
@@ -284,5 +348,5 @@ const TuiSlider = [
284
348
  * Generated bundle index. Do not edit.
285
349
  */
286
350
 
287
- export { TUI_FLOATING_PRECISION, TUI_SLIDER_DEFAULT_OPTIONS, TUI_SLIDER_OPTIONS, TuiSlider, TuiSliderComponent, TuiSliderKeySteps, TuiSliderReadonly, TuiSliderThumbLabel, tuiKeyStepValueToPercentage, tuiPercentageToKeyStepValue, tuiSliderOptionsProvider };
351
+ export { TUI_FLOATING_PRECISION, TUI_SLIDER_DEFAULT_OPTIONS, TUI_SLIDER_OPTIONS, TuiSlider, TuiSliderComponent, TuiSliderKeySteps, TuiSliderKeyStepsBase, TuiSliderReadonly, TuiSliderThumbLabel, tuiCreateKeyStepsTransformer, tuiKeyStepValueToPercentage, tuiPercentageToKeyStepValue, tuiSliderOptionsProvider };
288
352
  //# sourceMappingURL=taiga-ui-kit-components-slider.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-components-slider.mjs","sources":["../../../projects/kit/components/slider/helpers/key-steps.ts","../../../projects/kit/components/slider/slider.options.ts","../../../projects/kit/components/slider/slider.component.ts","../../../projects/kit/components/slider/helpers/slider-key-steps.directive.ts","../../../projects/kit/components/slider/helpers/slider-readonly.directive.ts","../../../projects/kit/components/slider/helpers/slider-thumb-label.component.ts","../../../projects/kit/components/slider/helpers/slider-thumb-label.template.html","../../../projects/kit/components/slider/slider.ts","../../../projects/kit/components/slider/taiga-ui-kit-components-slider.ts"],"sourcesContent":["import {tuiRound} from '@taiga-ui/cdk/utils/math';\n\n/**\n * Used as a limit for eliminating JS issues with floating point math\n */\nexport const TUI_FLOATING_PRECISION = 7;\n\n/**\n * Steps for splitting sliders into different linear dependencies.\n * Each element of the array has the form [percent, value]\n *\n * Thus, to set a field from 50,000 to 30,000,000 in steps:\n * 1) From 50 000 to 200 000 by 5000 per step (30 steps)\n * 2) From 200 000 to 1 000 000 by 50 000 per step (16 steps)\n * 3) From 1 000 000 to 30 000 000 by 500 000 per step (58 steps)\n *\n * You need to pass the following keyStep (where 104 = 30 + 16 + 58 is the total number of steps):\n * [\n * [0, 50_000],\n * [100 / 104 * 30, 200_000],\n * [100 / 104 * (30 + 16), 1_000_000],\n * [100, 30_000_000],\n * ];\n *\n */\nexport type TuiKeySteps = [[0, number], ...Array<[number, number]>, [100, number]];\n\nfunction tuiFindKeyStepsBoundariesByFn(\n keySteps: TuiKeySteps,\n fn: ([keyStepPercent, keyStepValue]: [number, number]) => boolean,\n): [[number, number], [number, number]] {\n const keyStepUpperIndex = keySteps.findIndex((keyStep, i) => i && fn(keyStep));\n\n const lowerStep = keySteps[keyStepUpperIndex - 1] || keySteps[0];\n const upperStep = keySteps[keyStepUpperIndex] ||\n keySteps[keySteps.length - 1] || [0, 0];\n\n return [lowerStep, upperStep];\n}\n\nexport function tuiPercentageToKeyStepValue(\n valuePercentage: number,\n keySteps: TuiKeySteps,\n): number {\n const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] =\n tuiFindKeyStepsBoundariesByFn(\n keySteps,\n ([keyStepPercentage, _]) => valuePercentage <= keyStepPercentage,\n );\n const ratio =\n (valuePercentage - lowerStepPercent) / (upperStepPercent - lowerStepPercent);\n const controlValue = (upperStepValue - lowerStepValue) * ratio + lowerStepValue;\n\n return tuiRound(controlValue, TUI_FLOATING_PRECISION);\n}\n\nexport function tuiKeyStepValueToPercentage(\n value: number,\n keySteps: TuiKeySteps,\n): number {\n const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] =\n tuiFindKeyStepsBoundariesByFn(\n keySteps,\n ([_, keyStepValue]) => value <= keyStepValue,\n );\n const ratio = (value - lowerStepValue) / (upperStepValue - lowerStepValue) || 0;\n\n return (upperStepPercent - lowerStepPercent) * ratio + lowerStepPercent;\n}\n","import type {Provider} from '@angular/core';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\n\nexport interface TuiSliderOptions {\n readonly size: TuiSizeS;\n readonly trackColor: string;\n}\n\nexport const TUI_SLIDER_DEFAULT_OPTIONS: TuiSliderOptions = {\n size: 'm',\n trackColor: 'var(--tui-background-neutral-2)',\n};\n\n/**\n * Default parameters for Slider component\n */\nexport const TUI_SLIDER_OPTIONS = tuiCreateToken(TUI_SLIDER_DEFAULT_OPTIONS);\n\nexport function tuiSliderOptionsProvider(options: Partial<TuiSliderOptions>): Provider {\n return tuiProvideOptions(TUI_SLIDER_OPTIONS, options, TUI_SLIDER_DEFAULT_OPTIONS);\n}\n","import {ChangeDetectionStrategy, Component, inject, INJECTOR, Input} from '@angular/core';\nimport {NgControl, NgModel} from '@angular/forms';\nimport {tuiWatch} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\nimport {take} from 'rxjs';\n\nimport {TuiSliderKeySteps} from './helpers/slider-key-steps.directive';\nimport {TUI_SLIDER_OPTIONS} from './slider.options';\n\n@Component({\n standalone: true,\n selector: 'input[type=range][tuiSlider]',\n template: '',\n styleUrls: ['./slider.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n /**\n * For change detection.\n * Webkit does not have built-in method for customization of filling progress (as Firefox).\n * We draw filling of progress by `background: linear-gradient(...)` of the track.\n * This function triggers change detection (for {@link valueRatio} getter) when we drag thumb of the input.\n */\n '(input)': '0',\n '[style.--tui-slider-track-color]': 'options.trackColor',\n '[style.--tui-slider-segment-width.%]': 'segmentWidth',\n '[style.--tui-slider-fill-ratio]': 'valueRatio',\n '[attr.data-size]': 'size',\n },\n})\nexport class TuiSliderComponent {\n private readonly injector = inject(INJECTOR);\n private readonly control = inject(NgControl, {self: true, optional: true});\n\n protected readonly options = inject(TUI_SLIDER_OPTIONS);\n\n @Input()\n public size: TuiSizeS = this.options.size;\n\n @Input()\n public segments = 1;\n\n public readonly el = tuiInjectElement<HTMLInputElement>();\n\n constructor() {\n if (this.control instanceof NgModel) {\n /**\n * The ValueAccessor.writeValue method is called twice on any value accessor during component initialization,\n * when a control is bound using [(ngModel)], first time with a phantom null value.\n * With `changeDetection: ChangeDetectionStrategy.OnPush` the second call of writeValue with real value don't re-render the view.\n * ___\n * See this {@link https://github.com/angular/angular/issues/14988 issue}\n */\n this.control.valueChanges?.pipe(tuiWatch(), take(1)).subscribe();\n }\n }\n\n public get valueRatio(): number {\n return (this.value - this.min) / (this.max - this.min) || 0;\n }\n\n public get min(): number {\n return Number(this.el.min);\n }\n\n public get max(): number {\n return Number(this.el.max || 100);\n }\n\n public get value(): number {\n if (!this.hasKeySteps && this.control instanceof NgModel) {\n /**\n * If developer uses `[(ngModel)]` and programmatically change value,\n * the `el.nativeElement.value` is equal to the previous value at this moment.\n */\n return this.control.viewModel;\n }\n\n return Number(this.el.value) || 0;\n }\n\n public set value(newValue: number) {\n this.el.value = `${newValue}`;\n }\n\n @tuiPure\n protected get hasKeySteps(): boolean {\n return Boolean(this.injector.get(TuiSliderKeySteps, null));\n }\n\n protected get segmentWidth(): number {\n return 100 / Math.max(1, this.segments);\n }\n\n protected get step(): number {\n return Number(this.el.step) || 1;\n }\n}\n","import {Directive, forwardRef, inject, Input} from '@angular/core';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\n\nimport {TuiSliderComponent} from '../slider.component';\nimport type {TuiKeySteps} from './key-steps';\nimport {tuiKeyStepValueToPercentage, tuiPercentageToKeyStepValue} from './key-steps';\n\n@Directive({\n standalone: true,\n selector: 'input[tuiSlider][keySteps]',\n providers: [tuiFallbackValueProvider(0)],\n host: {\n '[attr.aria-valuenow]': 'value()',\n '[attr.aria-valuemin]': 'min',\n '[attr.aria-valuemax]': 'max',\n '[disabled]': 'disabled()',\n '(blur)': 'onTouched()',\n '(input)': 'updateControlValue()',\n '(change)': 'updateControlValue()',\n },\n})\nexport class TuiSliderKeySteps extends TuiControl<number> {\n private readonly slider = inject<TuiSliderComponent>(\n forwardRef(() => TuiSliderComponent),\n );\n\n @Input()\n public keySteps!: TuiKeySteps;\n\n public override writeValue(controlValue: number | null): void {\n if (controlValue === null) {\n return;\n }\n\n const clampedControlValue = tuiClamp(controlValue, this.min, this.max);\n\n ngDevMode &&\n console.assert(\n controlValue === clampedControlValue,\n '\\n[SliderKeySteps]: You cannot programmatically set value which is less/more than min/max',\n );\n\n this.slider.value = this.transformToNativeValue(clampedControlValue);\n }\n\n protected get min(): number {\n return this.keySteps[0][1];\n }\n\n protected get max(): number {\n return this.keySteps[this.keySteps.length - 1]?.[1] ?? 0;\n }\n\n protected updateControlValue(): void {\n this.onChange(\n tuiPercentageToKeyStepValue(this.slider.valueRatio * 100, this.keySteps),\n );\n }\n\n private transformToNativeValue(controlValue: number): number {\n const {min, max} = this.slider;\n const newValuePercentage = tuiKeyStepValueToPercentage(\n controlValue,\n this.keySteps,\n );\n\n return (newValuePercentage * (max - min)) / 100 + min;\n }\n}\n","import type {BooleanInput} from '@angular/cdk/coercion';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {DOCUMENT} from '@angular/common';\nimport {Directive, inject, Input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TUI_FALSE_HANDLER, TUI_TRUE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {tuiTypedFromEvent} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {combineLatest, filter, map, merge, tap} from 'rxjs';\n\nconst SLIDER_INTERACTION_KEYS = new Set([\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'End',\n 'Home',\n 'PageDown',\n 'PageUp',\n]);\n\n/**\n * Native <input type='range' readonly> doesn't work.\n * This directive imitates this native behaviour.\n */\n@Directive({\n standalone: true,\n selector: 'input[tuiSlider][readonly]',\n host: {\n '(keydown)': 'preventKeyboardInteraction($event)',\n '(mousedown)': 'preventEvent($event)',\n },\n})\nexport class TuiSliderReadonly {\n private readonly el = tuiInjectElement<HTMLInputElement>();\n private readonly doc = inject(DOCUMENT);\n\n @Input({transform: coerceBooleanProperty})\n public readonly: BooleanInput = true;\n\n constructor() {\n const touchStart$ = tuiTypedFromEvent(this.el, 'touchstart', {\n passive: false,\n });\n const touchMove$ = tuiTypedFromEvent(this.doc, 'touchmove', {\n passive: false,\n });\n const touchEnd$ = tuiTypedFromEvent(this.doc, 'touchend', {\n passive: true,\n });\n\n const shouldPreventMove$ = merge(\n touchStart$.pipe(\n tap((e) => this.preventEvent(e)),\n map(TUI_TRUE_HANDLER),\n ),\n touchEnd$.pipe(map(TUI_FALSE_HANDLER)),\n );\n\n /**\n * @bad TODO think about another solution.\n * Keep in mind that preventing touch event (on slider) inside `@HostListener('touchstart')` doesn't work for mobile chrome.\n */\n combineLatest([touchMove$, shouldPreventMove$])\n .pipe(\n filter(([_, shouldPreventMove]) => shouldPreventMove),\n takeUntilDestroyed(),\n )\n .subscribe(([moveEvent]) => this.preventEvent(moveEvent));\n }\n\n protected preventEvent(event: Event): void {\n if (event.cancelable && this.readonly) {\n event.preventDefault();\n }\n }\n\n protected preventKeyboardInteraction(event: KeyboardEvent): void {\n if (SLIDER_INTERACTION_KEYS.has(event.key)) {\n this.preventEvent(event);\n }\n }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\nimport {AsyncPipe, NgIf} from '@angular/common';\nimport type {AfterContentInit} from '@angular/core';\nimport {ChangeDetectionStrategy, Component, ContentChild} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\n\nimport {TuiSliderComponent} from '../slider.component';\n\n@Component({\n standalone: true,\n selector: '[tuiSliderThumbLabel]',\n imports: [AsyncPipe, NgIf],\n templateUrl: './slider-thumb-label.template.html',\n styleUrls: ['./slider-thumb-label.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiSliderThumbLabel implements AfterContentInit {\n @ContentChild(TuiSliderComponent)\n protected readonly slider?: TuiSliderComponent;\n\n @ContentChild(NgControl)\n protected readonly control?: NgControl;\n\n public ngAfterContentInit(): void {\n ngDevMode &&\n console.assert(\n Boolean(this.control?.valueChanges),\n '\\n[tuiSliderThumbLabel] expected <input tuiSlider type=\"range\" /> to use Angular Forms.\\n' +\n 'Use [(ngModel)] or [formControl] or formControlName for correct work.',\n );\n }\n\n protected get size(): TuiSizeS {\n return this.slider?.size || 'm';\n }\n\n protected get ratio(): number {\n return this.slider?.valueRatio || 0;\n }\n\n protected get ghostLeft(): number {\n return this.ratio * (this.slider?.el.offsetWidth || 0);\n }\n}\n","<ng-container *ngIf=\"control?.valueChanges | async\" />\n\n<div\n class=\"t-ghost\"\n [attr.data-size]=\"size\"\n [style.--tui-slider-thumb-ratio]=\"ratio\"\n [style.left.px]=\"ghostLeft\"\n>\n <ng-content />\n</div>\n\n<ng-content select=\"input[type=range]\" />\n","import {TuiSliderKeySteps} from './helpers/slider-key-steps.directive';\nimport {TuiSliderReadonly} from './helpers/slider-readonly.directive';\nimport {TuiSliderThumbLabel} from './helpers/slider-thumb-label.component';\nimport {TuiSliderComponent} from './slider.component';\n\nexport const TuiSlider = [\n TuiSliderComponent,\n TuiSliderThumbLabel,\n TuiSliderKeySteps,\n TuiSliderReadonly,\n] 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":"taiga-ui-kit-components-slider.mjs","sources":["../../../projects/kit/components/slider/helpers/key-steps.ts","../../../projects/kit/components/slider/slider.options.ts","../../../projects/kit/components/slider/slider.component.ts","../../../projects/kit/components/slider/helpers/slider-key-steps.directive.ts","../../../projects/kit/components/slider/helpers/slider-readonly.directive.ts","../../../projects/kit/components/slider/helpers/slider-thumb-label.component.ts","../../../projects/kit/components/slider/helpers/slider-thumb-label.template.html","../../../projects/kit/components/slider/slider.ts","../../../projects/kit/components/slider/taiga-ui-kit-components-slider.ts"],"sourcesContent":["import type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport {tuiRound} from '@taiga-ui/cdk/utils/math';\n\nimport type {TuiSliderComponent} from '../slider.component';\n\n/**\n * Used as a limit for eliminating JS issues with floating point math\n */\nexport const TUI_FLOATING_PRECISION = 7;\n\n/**\n * Steps for splitting sliders into different linear dependencies.\n * Each element of the array has the form [percent, value]\n *\n * Thus, to set a field from 50,000 to 30,000,000 in steps:\n * 1) From 50 000 to 200 000 by 5000 per step (30 steps)\n * 2) From 200 000 to 1 000 000 by 50 000 per step (16 steps)\n * 3) From 1 000 000 to 30 000 000 by 500 000 per step (58 steps)\n *\n * You need to pass the following keyStep (where 104 = 30 + 16 + 58 is the total number of steps):\n * [\n * [0, 50_000],\n * [100 / 104 * 30, 200_000],\n * [100 / 104 * (30 + 16), 1_000_000],\n * [100, 30_000_000],\n * ];\n *\n */\nexport type TuiKeySteps = [[0, number], ...Array<[number, number]>, [100, number]];\n\nfunction tuiFindKeyStepsBoundariesByFn(\n keySteps: TuiKeySteps,\n fn: ([keyStepPercent, keyStepValue]: [number, number]) => boolean,\n): [[number, number], [number, number]] {\n const keyStepUpperIndex = keySteps.findIndex((keyStep, i) => i && fn(keyStep));\n\n const lowerStep = keySteps[keyStepUpperIndex - 1] || keySteps[0];\n const upperStep = keySteps[keyStepUpperIndex] ||\n keySteps[keySteps.length - 1] || [0, 0];\n\n return [lowerStep, upperStep];\n}\n\nexport function tuiPercentageToKeyStepValue(\n valuePercentage: number,\n keySteps: TuiKeySteps,\n): number {\n const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] =\n tuiFindKeyStepsBoundariesByFn(\n keySteps,\n ([keyStepPercentage, _]) => valuePercentage <= keyStepPercentage,\n );\n const ratio =\n (valuePercentage - lowerStepPercent) / (upperStepPercent - lowerStepPercent);\n const controlValue = (upperStepValue - lowerStepValue) * ratio + lowerStepValue;\n\n return tuiRound(controlValue, TUI_FLOATING_PRECISION);\n}\n\nexport function tuiKeyStepValueToPercentage(\n value: number,\n keySteps: TuiKeySteps,\n): number {\n const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] =\n tuiFindKeyStepsBoundariesByFn(\n keySteps,\n ([_, keyStepValue]) => value <= keyStepValue,\n );\n const ratio = (value - lowerStepValue) / (upperStepValue - lowerStepValue) || 0;\n\n return (upperStepPercent - lowerStepPercent) * ratio + lowerStepPercent;\n}\n\nexport function tuiCreateKeyStepsTransformer(\n keySteps: TuiKeySteps,\n slider: TuiSliderComponent,\n): TuiValueTransformer<number, number> {\n return new (class implements TuiValueTransformer<number, number> {\n public fromControlValue(controlValue: number): number {\n const newValuePercentage = tuiKeyStepValueToPercentage(\n controlValue,\n keySteps,\n );\n\n return (newValuePercentage * (slider.max - slider.min)) / 100 + slider.min;\n }\n\n public toControlValue(nativeValue: number): number {\n const valueRatio =\n (nativeValue - slider.min) / (slider.max - slider.min) || 0;\n\n return tuiPercentageToKeyStepValue(valueRatio * 100, keySteps);\n }\n })();\n}\n","import type {Provider} from '@angular/core';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\n\nexport interface TuiSliderOptions {\n readonly size: TuiSizeS;\n readonly trackColor: string;\n}\n\nexport const TUI_SLIDER_DEFAULT_OPTIONS: TuiSliderOptions = {\n size: 'm',\n trackColor: 'var(--tui-background-neutral-2)',\n};\n\n/**\n * Default parameters for Slider component\n */\nexport const TUI_SLIDER_OPTIONS = tuiCreateToken(TUI_SLIDER_DEFAULT_OPTIONS);\n\nexport function tuiSliderOptionsProvider(options: Partial<TuiSliderOptions>): Provider {\n return tuiProvideOptions(TUI_SLIDER_OPTIONS, options, TUI_SLIDER_DEFAULT_OPTIONS);\n}\n","import {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {NgControl, NgModel} from '@angular/forms';\nimport {tuiWatch} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiAsAuxiliary} from '@taiga-ui/core/components/textfield';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\nimport {take} from 'rxjs';\n\nimport {TuiSliderKeyStepsBase} from './helpers/slider-key-steps.directive';\nimport {TUI_SLIDER_OPTIONS} from './slider.options';\n\n@Component({\n standalone: true,\n selector: 'input[type=range][tuiSlider]',\n template: '',\n styleUrls: ['./slider.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [tuiAsAuxiliary(TuiSliderComponent)],\n host: {\n /**\n * For change detection.\n * Webkit does not have built-in method for customization of filling progress (as Firefox).\n * We draw filling of progress by `background: linear-gradient(...)` of the track.\n * This function triggers change detection (for {@link valueRatio} getter) when we drag thumb of the input.\n */\n '(input)': '0',\n '[style.--tui-slider-track-color]': 'options.trackColor',\n '[style.--tui-slider-segment-width.%]': 'segmentWidth',\n '[style.--tui-slider-fill-ratio]': 'valueRatio',\n '[attr.data-size]': 'size',\n },\n})\nexport class TuiSliderComponent {\n private readonly control = inject(NgControl, {self: true, optional: true});\n\n protected readonly options = inject(TUI_SLIDER_OPTIONS);\n\n @Input()\n public size: TuiSizeS = this.options.size;\n\n @Input()\n public segments = 1;\n\n public readonly el = tuiInjectElement<HTMLInputElement>();\n public readonly keySteps = inject(TuiSliderKeyStepsBase, {\n self: true,\n optional: true,\n });\n\n constructor() {\n if (this.control instanceof NgModel) {\n /**\n * The ValueAccessor.writeValue method is called twice on any value accessor during component initialization,\n * when a control is bound using [(ngModel)], first time with a phantom null value.\n * With `changeDetection: ChangeDetectionStrategy.OnPush` the second call of writeValue with real value don't re-render the view.\n * ___\n * See this {@link https://github.com/angular/angular/issues/14988 issue}\n */\n this.control.valueChanges?.pipe(tuiWatch(), take(1)).subscribe();\n }\n }\n\n public get valueRatio(): number {\n return (this.value - this.min) / (this.max - this.min) || 0;\n }\n\n public get min(): number {\n return Number(this.el.min);\n }\n\n public set min(x: number) {\n this.el.min = String(x);\n }\n\n public get max(): number {\n return Number(this.el.max || 100);\n }\n\n public set max(x: number) {\n this.el.max = String(x);\n }\n\n public get step(): number {\n return Number(this.el.step) || 1;\n }\n\n public set step(x: number) {\n this.el.step = String(x);\n }\n\n public get value(): number {\n if (!this.keySteps && this.control instanceof NgModel) {\n /**\n * If developer uses `[(ngModel)]` and programmatically change value,\n * the `el.nativeElement.value` is equal to the previous value at this moment.\n */\n return this.control.viewModel;\n }\n\n return Number(this.el.value) || 0;\n }\n\n public set value(newValue: number) {\n this.el.value = `${newValue}`;\n }\n\n protected get segmentWidth(): number {\n return 100 / Math.max(1, this.segments);\n }\n}\n","import {Directive, forwardRef, inject, INJECTOR, Input, signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {NgControl} from '@angular/forms';\nimport type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {tuiControlValue} from '@taiga-ui/cdk/observables';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {switchMap, timer} from 'rxjs';\n\nimport {TuiSliderComponent} from '../slider.component';\nimport type {TuiKeySteps} from './key-steps';\nimport {tuiCreateKeyStepsTransformer} from './key-steps';\n\n@Directive({\n standalone: true,\n selector: 'input[tuiSlider][keySteps]',\n host: {\n '[attr.aria-valuemin]': 'min',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuenow]': 'value()',\n },\n})\nexport class TuiSliderKeyStepsBase {\n private readonly injector = inject(INJECTOR);\n private readonly control = inject(NgControl, {self: true, optional: true});\n\n protected min?: number;\n protected max?: number;\n\n @Input({transform: (x: number | 'any') => (x === 'any' ? null : x)})\n public step: number | null = 1;\n\n public transformer = signal<TuiValueTransformer<number, number> | null>(null);\n public value = toSignal(\n timer(0) // https://github.com/angular/angular/issues/54418\n .pipe(switchMap(() => tuiControlValue<number>(this.control))),\n );\n\n @tuiPure\n public get slider(): TuiSliderComponent {\n return this.injector.get(TuiSliderComponent);\n }\n\n @Input()\n public set keySteps(steps: TuiKeySteps | null) {\n this.transformer.set(steps && tuiCreateKeyStepsTransformer(steps, this.slider));\n this.min = steps?.[0][1];\n this.max = steps?.[steps.length - 1]?.[1];\n }\n\n /**\n * TODO(v5): standardize logic between `TuiSlider` & `TuiInputSlider` (for non-linear slider `step` means percentage)\n * Add these host-bindings to `TuiSliderKeyStepsBase`:\n * ```\n * host: {\n * '[attr.min]': '0',\n * '[attr.step]': '1',\n * '[attr.max]': 'totalSteps',\n * },\n * ```\n */\n public get totalSteps(): number {\n /**\n * Not-integer amount of steps is invalid usage of native sliders\n * ```html\n * <input type=\"range\" [max]=\"100\" [step]=\"3.33\" />\n * ```\n * (impossible to select 100; 99.9 is max allowed value)\n */\n return this.step ? Math.round(100 / this.step) : Infinity;\n }\n\n public takeStep(coefficient: number): number {\n const newValue = this.slider.value + coefficient;\n\n return (\n this.transformer()?.toControlValue(this.slider.value + coefficient) ??\n newValue\n );\n }\n}\n\n@Directive({\n standalone: true,\n selector:\n 'input[tuiSlider][keySteps][ngModel],input[tuiSlider][keySteps][formControl],input[tuiSlider][keySteps][formControlName]',\n providers: [tuiFallbackValueProvider(0)],\n host: {\n '[value]': 'this.value()',\n '[disabled]': 'disabled()',\n '(blur)': 'onTouched()',\n '(input)': 'onChange($event.target.value)',\n '(change)': 'onChange($event.target.value)',\n },\n})\nexport class TuiSliderKeySteps extends TuiControl<number> {\n private readonly slider = inject<TuiSliderComponent>(\n forwardRef(() => TuiSliderComponent),\n );\n\n @Input()\n public set keySteps(steps: TuiKeySteps) {\n this.transformer = tuiCreateKeyStepsTransformer(steps, this.slider);\n }\n}\n","import type {BooleanInput} from '@angular/cdk/coercion';\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {DOCUMENT} from '@angular/common';\nimport {Directive, inject, Input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {TUI_FALSE_HANDLER, TUI_TRUE_HANDLER} from '@taiga-ui/cdk/constants';\nimport {tuiTypedFromEvent} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {combineLatest, filter, map, merge, tap} from 'rxjs';\n\nconst SLIDER_INTERACTION_KEYS = new Set([\n 'ArrowDown',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'End',\n 'Home',\n 'PageDown',\n 'PageUp',\n]);\n\n/**\n * Native <input type='range' readonly> doesn't work.\n * This directive imitates this native behaviour.\n */\n@Directive({\n standalone: true,\n selector: 'input[tuiSlider][readonly]',\n host: {\n '(keydown)': 'preventKeyboardInteraction($event)',\n '(mousedown)': 'preventEvent($event)',\n },\n})\nexport class TuiSliderReadonly {\n private readonly el = tuiInjectElement<HTMLInputElement>();\n private readonly doc = inject(DOCUMENT);\n\n @Input({transform: coerceBooleanProperty})\n public readonly: BooleanInput = true;\n\n constructor() {\n const touchStart$ = tuiTypedFromEvent(this.el, 'touchstart', {\n passive: false,\n });\n const touchMove$ = tuiTypedFromEvent(this.doc, 'touchmove', {\n passive: false,\n });\n const touchEnd$ = tuiTypedFromEvent(this.doc, 'touchend', {\n passive: true,\n });\n\n const shouldPreventMove$ = merge(\n touchStart$.pipe(\n tap((e) => this.preventEvent(e)),\n map(TUI_TRUE_HANDLER),\n ),\n touchEnd$.pipe(map(TUI_FALSE_HANDLER)),\n );\n\n /**\n * @bad TODO think about another solution.\n * Keep in mind that preventing touch event (on slider) inside `@HostListener('touchstart')` doesn't work for mobile chrome.\n */\n combineLatest([touchMove$, shouldPreventMove$])\n .pipe(\n filter(([_, shouldPreventMove]) => shouldPreventMove),\n takeUntilDestroyed(),\n )\n .subscribe(([moveEvent]) => this.preventEvent(moveEvent));\n }\n\n protected preventEvent(event: Event): void {\n if (event.cancelable && this.readonly) {\n event.preventDefault();\n }\n }\n\n protected preventKeyboardInteraction(event: KeyboardEvent): void {\n if (SLIDER_INTERACTION_KEYS.has(event.key)) {\n this.preventEvent(event);\n }\n }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\nimport {AsyncPipe, NgIf} from '@angular/common';\nimport type {AfterContentInit} from '@angular/core';\nimport {ChangeDetectionStrategy, Component, ContentChild} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport type {TuiSizeS} from '@taiga-ui/core/types';\n\nimport {TuiSliderComponent} from '../slider.component';\n\n@Component({\n standalone: true,\n selector: '[tuiSliderThumbLabel]',\n imports: [AsyncPipe, NgIf],\n templateUrl: './slider-thumb-label.template.html',\n styleUrls: ['./slider-thumb-label.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiSliderThumbLabel implements AfterContentInit {\n @ContentChild(TuiSliderComponent)\n protected readonly slider?: TuiSliderComponent;\n\n @ContentChild(NgControl)\n protected readonly control?: NgControl;\n\n public ngAfterContentInit(): void {\n ngDevMode &&\n console.assert(\n Boolean(this.control?.valueChanges),\n '\\n[tuiSliderThumbLabel] expected <input tuiSlider type=\"range\" /> to use Angular Forms.\\n' +\n 'Use [(ngModel)] or [formControl] or formControlName for correct work.',\n );\n }\n\n protected get size(): TuiSizeS {\n return this.slider?.size || 'm';\n }\n\n protected get ratio(): number {\n return this.slider?.valueRatio || 0;\n }\n\n protected get ghostLeft(): number {\n return this.ratio * (this.slider?.el.offsetWidth || 0);\n }\n}\n","<ng-container *ngIf=\"control?.valueChanges | async\" />\n\n<div\n class=\"t-ghost\"\n [attr.data-size]=\"size\"\n [style.--tui-slider-thumb-ratio]=\"ratio\"\n [style.left.px]=\"ghostLeft\"\n>\n <ng-content />\n</div>\n\n<ng-content select=\"input[type=range]\" />\n","import {\n TuiSliderKeySteps,\n TuiSliderKeyStepsBase,\n} from './helpers/slider-key-steps.directive';\nimport {TuiSliderReadonly} from './helpers/slider-readonly.directive';\nimport {TuiSliderThumbLabel} from './helpers/slider-thumb-label.component';\nimport {TuiSliderComponent} from './slider.component';\n\nexport const TuiSlider = [\n TuiSliderComponent,\n TuiSliderThumbLabel,\n TuiSliderKeyStepsBase,\n TuiSliderKeySteps,\n TuiSliderReadonly,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ export * from '@taiga-ui/kit/components/input-number';
27
27
  export * from '@taiga-ui/kit/components/input-password';
28
28
  export * from '@taiga-ui/kit/components/input-phone-international';
29
29
  export * from '@taiga-ui/kit/components/input-pin';
30
+ export * from '@taiga-ui/kit/components/input-slider';
30
31
  export * from '@taiga-ui/kit/components/items-with-more';
31
32
  export * from '@taiga-ui/kit/components/like';
32
33
  export * from '@taiga-ui/kit/components/line-clamp';
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-components.mjs","sources":["../../../projects/kit/components/taiga-ui-kit-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEG"}
1
+ {"version":3,"file":"taiga-ui-kit-components.mjs","sources":["../../../projects/kit/components/taiga-ui-kit-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEG"}
@@ -4,13 +4,13 @@ import { tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous';
4
4
 
5
5
  class TuiButtonGroupStyles {
6
6
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiButtonGroupStyles, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiButtonGroupStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-button-group-styles" }, ngImport: i0, template: '', isInline: true, styles: ["[tuiButtonGroup]{display:flex;border-radius:var(--tui-radius-xl);justify-content:center;overflow:hidden}[tuiButtonGroup]>button,[tuiButtonGroup]>a{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:relative;display:flex;border:none;outline:none;background:transparent;align-items:center;flex:1;flex-direction:column;padding:1.125rem .25rem;gap:.5rem;font:var(--tui-font-text-ui-s);max-inline-size:calc(50% - 1.75rem);cursor:pointer;color:var(--tui-text-action);text-align:center;text-decoration:none;clip-path:inset(0)}[tuiButtonGroup]>button:first-child,[tuiButtonGroup]>a:first-child{clip-path:inset(0 0 0 -10rem)}[tuiButtonGroup]>button:last-child,[tuiButtonGroup]>a:last-child{clip-path:inset(0 -10rem 0 0)}[tuiButtonGroup]>button:active,[tuiButtonGroup]>a:active{background:var(--tui-background-neutral-1)}[tuiButtonGroup]>button:before,[tuiButtonGroup]>a:before,[tuiButtonGroup]>button:after,[tuiButtonGroup]>a:after{position:absolute;top:0;background:inherit;inline-size:1.75rem;block-size:100%}[tuiButtonGroup]>button:first-child:before,[tuiButtonGroup]>a:first-child:before{content:\"\";left:-1.75rem}[tuiButtonGroup]>button:last-child:after,[tuiButtonGroup]>a:last-child:after{content:\"\";right:-1.75rem}[tuiButtonGroup]>button tui-icon,[tuiButtonGroup]>a tui-icon{font-size:1.75rem}[tuiButtonGroup]:has(button:only-child){border-radius:1rem}[tuiButtonGroup]>button:only-child,[tuiButtonGroup]>a:only-child{inline-size:100%;flex-direction:row;font:var(--tui-font-text-ui-l);max-inline-size:100%;justify-content:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiButtonGroupStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-button-group-styles" }, ngImport: i0, template: '', isInline: true, styles: ["[tuiButtonGroup],[tuiButtonGroup] tui-elastic-container{transition:all calc(var(--tui-duration-moderate, .3s) / 3) var(--tui-curve-productive-standard, cubic-bezier(.2, 0, .4, .9));transition-property:background,height,border-radius;border-radius:var(--tui-radius-xl);overflow:hidden}[tuiButtonGroup],[tuiButtonGroup] tui-elastic-container .t-wrapper{display:flex;justify-content:center}[tuiButtonGroup] tui-elastic-container{inline-size:100%}[tuiButtonGroup] button,[tuiButtonGroup] a{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:relative;display:flex;border:none;outline:none;background:transparent;align-items:center;flex:1;flex-direction:column;padding:1.125rem .25rem;gap:.5rem;font:var(--tui-font-text-ui-s);max-inline-size:calc(50% - 1.75rem);cursor:pointer;color:var(--tui-text-action);text-align:center;text-decoration:none;clip-path:inset(0)}[tuiButtonGroup] button:first-child,[tuiButtonGroup] a:first-child{clip-path:inset(0 0 0 -10rem)}[tuiButtonGroup] button:last-child,[tuiButtonGroup] a:last-child{clip-path:inset(0 -10rem 0 0)}[tuiButtonGroup] button:active,[tuiButtonGroup] a:active{background:var(--tui-background-neutral-1)}[tuiButtonGroup] button:before,[tuiButtonGroup] a:before,[tuiButtonGroup] button:after,[tuiButtonGroup] a:after{position:absolute;top:0;background:inherit;inline-size:1.75rem;block-size:100%}[tuiButtonGroup] button:first-child:before,[tuiButtonGroup] a:first-child:before{content:\"\";left:-1.75rem}[tuiButtonGroup] button:last-child:after,[tuiButtonGroup] a:last-child:after{content:\"\";right:-1.75rem}[tuiButtonGroup] button tui-icon,[tuiButtonGroup] a tui-icon{font-size:1.75rem}[tuiButtonGroup]:has(button:only-child){border-radius:1rem}[tuiButtonGroup] button:only-child,[tuiButtonGroup] a:only-child{inline-size:100%;flex-direction:row;font:var(--tui-font-text-ui-l);max-inline-size:100%;justify-content:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8
8
  }
9
9
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiButtonGroupStyles, decorators: [{
10
10
  type: Component,
11
11
  args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
12
12
  class: 'tui-button-group-styles',
13
- }, styles: ["[tuiButtonGroup]{display:flex;border-radius:var(--tui-radius-xl);justify-content:center;overflow:hidden}[tuiButtonGroup]>button,[tuiButtonGroup]>a{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:relative;display:flex;border:none;outline:none;background:transparent;align-items:center;flex:1;flex-direction:column;padding:1.125rem .25rem;gap:.5rem;font:var(--tui-font-text-ui-s);max-inline-size:calc(50% - 1.75rem);cursor:pointer;color:var(--tui-text-action);text-align:center;text-decoration:none;clip-path:inset(0)}[tuiButtonGroup]>button:first-child,[tuiButtonGroup]>a:first-child{clip-path:inset(0 0 0 -10rem)}[tuiButtonGroup]>button:last-child,[tuiButtonGroup]>a:last-child{clip-path:inset(0 -10rem 0 0)}[tuiButtonGroup]>button:active,[tuiButtonGroup]>a:active{background:var(--tui-background-neutral-1)}[tuiButtonGroup]>button:before,[tuiButtonGroup]>a:before,[tuiButtonGroup]>button:after,[tuiButtonGroup]>a:after{position:absolute;top:0;background:inherit;inline-size:1.75rem;block-size:100%}[tuiButtonGroup]>button:first-child:before,[tuiButtonGroup]>a:first-child:before{content:\"\";left:-1.75rem}[tuiButtonGroup]>button:last-child:after,[tuiButtonGroup]>a:last-child:after{content:\"\";right:-1.75rem}[tuiButtonGroup]>button tui-icon,[tuiButtonGroup]>a tui-icon{font-size:1.75rem}[tuiButtonGroup]:has(button:only-child){border-radius:1rem}[tuiButtonGroup]>button:only-child,[tuiButtonGroup]>a:only-child{inline-size:100%;flex-direction:row;font:var(--tui-font-text-ui-l);max-inline-size:100%;justify-content:center}\n"] }]
13
+ }, styles: ["[tuiButtonGroup],[tuiButtonGroup] tui-elastic-container{transition:all calc(var(--tui-duration-moderate, .3s) / 3) var(--tui-curve-productive-standard, cubic-bezier(.2, 0, .4, .9));transition-property:background,height,border-radius;border-radius:var(--tui-radius-xl);overflow:hidden}[tuiButtonGroup],[tuiButtonGroup] tui-elastic-container .t-wrapper{display:flex;justify-content:center}[tuiButtonGroup] tui-elastic-container{inline-size:100%}[tuiButtonGroup] button,[tuiButtonGroup] a{transition-property:background;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:relative;display:flex;border:none;outline:none;background:transparent;align-items:center;flex:1;flex-direction:column;padding:1.125rem .25rem;gap:.5rem;font:var(--tui-font-text-ui-s);max-inline-size:calc(50% - 1.75rem);cursor:pointer;color:var(--tui-text-action);text-align:center;text-decoration:none;clip-path:inset(0)}[tuiButtonGroup] button:first-child,[tuiButtonGroup] a:first-child{clip-path:inset(0 0 0 -10rem)}[tuiButtonGroup] button:last-child,[tuiButtonGroup] a:last-child{clip-path:inset(0 -10rem 0 0)}[tuiButtonGroup] button:active,[tuiButtonGroup] a:active{background:var(--tui-background-neutral-1)}[tuiButtonGroup] button:before,[tuiButtonGroup] a:before,[tuiButtonGroup] button:after,[tuiButtonGroup] a:after{position:absolute;top:0;background:inherit;inline-size:1.75rem;block-size:100%}[tuiButtonGroup] button:first-child:before,[tuiButtonGroup] a:first-child:before{content:\"\";left:-1.75rem}[tuiButtonGroup] button:last-child:after,[tuiButtonGroup] a:last-child:after{content:\"\";right:-1.75rem}[tuiButtonGroup] button tui-icon,[tuiButtonGroup] a tui-icon{font-size:1.75rem}[tuiButtonGroup]:has(button:only-child){border-radius:1rem}[tuiButtonGroup] button:only-child,[tuiButtonGroup] a:only-child{inline-size:100%;flex-direction:row;font:var(--tui-font-text-ui-l);max-inline-size:100%;justify-content:center}\n"] }]
14
14
  }] });
15
15
  class TuiButtonGroup {
16
16
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-directives-button-group.mjs","sources":["../../../projects/kit/directives/button-group/button-group.directive.ts","../../../projects/kit/directives/button-group/taiga-ui-kit-directives-button-group.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ViewEncapsulation,\n} from '@angular/core';\nimport {tuiWithStyles} from '@taiga-ui/cdk/utils/miscellaneous';\n\n@Component({\n standalone: true,\n template: '',\n styleUrls: ['./button-group.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'tui-button-group-styles',\n },\n})\nclass TuiButtonGroupStyles {}\n\n@Directive({\n standalone: true,\n selector: '[tuiButtonGroup]',\n})\nexport class TuiButtonGroup {\n protected readonly nothing = tuiWithStyles(TuiButtonGroupStyles);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAQA,MAUM,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,6HARZ,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,skDAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAQV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVzB,SAAS;iCACM,IAAI,EAAA,QAAA,EACN,EAAE,EAAA,aAAA,EAEG,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,yBAAyB;AACnC,qBAAA,EAAA,MAAA,EAAA,CAAA,skDAAA,CAAA,EAAA,CAAA;;AAIL,MAIa,cAAc,CAAA;AAJ3B,IAAA,WAAA,GAAA;AAKuB,QAAA,IAAA,CAAA,OAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;AACpE,KAAA;+GAFY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,kBAAkB;AAC/B,iBAAA,CAAA;;;ACvBD;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-kit-directives-button-group.mjs","sources":["../../../projects/kit/directives/button-group/button-group.directive.ts","../../../projects/kit/directives/button-group/taiga-ui-kit-directives-button-group.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ViewEncapsulation,\n} from '@angular/core';\nimport {tuiWithStyles} from '@taiga-ui/cdk/utils/miscellaneous';\n\n@Component({\n standalone: true,\n template: '',\n styleUrls: ['./button-group.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'tui-button-group-styles',\n },\n})\nclass TuiButtonGroupStyles {}\n\n@Directive({\n standalone: true,\n selector: '[tuiButtonGroup]',\n})\nexport class TuiButtonGroup {\n protected readonly nothing = tuiWithStyles(TuiButtonGroupStyles);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAQA,MAUM,oBAAoB,CAAA;+GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,6HARZ,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y5DAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAQV,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVzB,SAAS;iCACM,IAAI,EAAA,QAAA,EACN,EAAE,EAAA,aAAA,EAEG,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA;AACF,wBAAA,KAAK,EAAE,yBAAyB;AACnC,qBAAA,EAAA,MAAA,EAAA,CAAA,y5DAAA,CAAA,EAAA,CAAA;;AAIL,MAIa,cAAc,CAAA;AAJ3B,IAAA,WAAA,GAAA;AAKuB,QAAA,IAAA,CAAA,OAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;AACpE,KAAA;+GAFY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,kBAAkB;AAC/B,iBAAA,CAAA;;;ACvBD;;AAEG;;;;"}
@@ -1,8 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive } from '@angular/core';
3
3
  import { TuiControl } from '@taiga-ui/cdk/classes';
4
- import { tuiProvide } from '@taiga-ui/cdk/utils/miscellaneous';
5
- import { TUI_DATA_LIST_HOST } from '@taiga-ui/core/components/data-list';
4
+ import { tuiAsDataListHost } from '@taiga-ui/core/components/data-list';
6
5
  import * as i2 from '@taiga-ui/core/components/textfield';
7
6
  import { TuiWithTextfieldDropdown } from '@taiga-ui/core/components/textfield';
8
7
  import * as i1 from '@taiga-ui/core/directives/dropdown';
@@ -21,7 +20,7 @@ class TuiButtonSelect extends TuiControl {
21
20
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiButtonSelect, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
22
21
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiButtonSelect, isStandalone: true, selector: "button[tuiButtonSelect]", providers: [
23
22
  // TODO: Add checkmark once we properly implement new Select, then add to demo
24
- tuiProvide(TUI_DATA_LIST_HOST, TuiButtonSelect),
23
+ tuiAsDataListHost(TuiButtonSelect),
25
24
  tuiDropdownOptionsProvider({ align: 'right' }),
26
25
  ], usesInheritance: true, hostDirectives: [{ directive: i1.TuiDropdownDirective }, { directive: i1.TuiWithDropdownOpen }, { directive: i2.TuiWithTextfieldDropdown }], ngImport: i0 }); }
27
26
  }
@@ -32,7 +31,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32
31
  selector: 'button[tuiButtonSelect]',
33
32
  providers: [
34
33
  // TODO: Add checkmark once we properly implement new Select, then add to demo
35
- tuiProvide(TUI_DATA_LIST_HOST, TuiButtonSelect),
34
+ tuiAsDataListHost(TuiButtonSelect),
36
35
  tuiDropdownOptionsProvider({ align: 'right' }),
37
36
  ],
38
37
  hostDirectives: [TuiDropdownDirective, TuiWithDropdownOpen, TuiWithTextfieldDropdown],
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-directives-button-select.mjs","sources":["../../../projects/kit/directives/button-select/button-select.directive.ts","../../../projects/kit/directives/button-select/taiga-ui-kit-directives-button-select.ts"],"sourcesContent":["import {Directive} from '@angular/core';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiDataListHost} from '@taiga-ui/core/components/data-list';\nimport {TUI_DATA_LIST_HOST} from '@taiga-ui/core/components/data-list';\nimport {TuiWithTextfieldDropdown} from '@taiga-ui/core/components/textfield';\nimport {\n TuiDropdownDirective,\n tuiDropdownOpen,\n tuiDropdownOptionsProvider,\n TuiWithDropdownOpen,\n} from '@taiga-ui/core/directives/dropdown';\n\n@Directive({\n standalone: true,\n selector: 'button[tuiButtonSelect]',\n providers: [\n // TODO: Add checkmark once we properly implement new Select, then add to demo\n tuiProvide(TUI_DATA_LIST_HOST, TuiButtonSelect),\n tuiDropdownOptionsProvider({align: 'right'}),\n ],\n hostDirectives: [TuiDropdownDirective, TuiWithDropdownOpen, TuiWithTextfieldDropdown],\n})\nexport class TuiButtonSelect<T> extends TuiControl<T> implements TuiDataListHost<T> {\n private readonly open = tuiDropdownOpen();\n\n public readonly size = 's';\n\n public handleOption(option: T): void {\n this.onChange(option);\n this.open.set(false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAaA,MAUa,eAAmB,SAAQ,UAAa,CAAA;AAVrD,IAAA,WAAA,GAAA;;QAWqB,IAAI,CAAA,IAAA,GAAG,eAAe,EAAE,CAAC;QAE1B,IAAI,CAAA,IAAA,GAAG,GAAG,CAAC;AAM9B,KAAA;AAJU,IAAA,YAAY,CAAC,MAAS,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACxB;+GARQ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAPb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EAAA;;AAEP,YAAA,UAAU,CAAC,kBAAkB,EAAE,eAAe,CAAC;AAC/C,YAAA,0BAA0B,CAAC,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC;AAC/C,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAGQ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAV3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,SAAS,EAAE;;wBAEP,UAAU,CAAC,kBAAkB,EAAkB,eAAA,CAAA;AAC/C,wBAAA,0BAA0B,CAAC,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC;AAC/C,qBAAA;AACD,oBAAA,cAAc,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,wBAAwB,CAAC;AACxF,iBAAA,CAAA;;;ACtBD;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-kit-directives-button-select.mjs","sources":["../../../projects/kit/directives/button-select/button-select.directive.ts","../../../projects/kit/directives/button-select/taiga-ui-kit-directives-button-select.ts"],"sourcesContent":["import {Directive} from '@angular/core';\nimport {TuiControl} from '@taiga-ui/cdk/classes';\nimport type {TuiDataListHost} from '@taiga-ui/core/components/data-list';\nimport {tuiAsDataListHost} from '@taiga-ui/core/components/data-list';\nimport {TuiWithTextfieldDropdown} from '@taiga-ui/core/components/textfield';\nimport {\n TuiDropdownDirective,\n tuiDropdownOpen,\n tuiDropdownOptionsProvider,\n TuiWithDropdownOpen,\n} from '@taiga-ui/core/directives/dropdown';\n\n@Directive({\n standalone: true,\n selector: 'button[tuiButtonSelect]',\n providers: [\n // TODO: Add checkmark once we properly implement new Select, then add to demo\n tuiAsDataListHost(TuiButtonSelect),\n tuiDropdownOptionsProvider({align: 'right'}),\n ],\n hostDirectives: [TuiDropdownDirective, TuiWithDropdownOpen, TuiWithTextfieldDropdown],\n})\nexport class TuiButtonSelect<T> extends TuiControl<T> implements TuiDataListHost<T> {\n private readonly open = tuiDropdownOpen();\n\n public readonly size = 's';\n\n public handleOption(option: T): void {\n this.onChange(option);\n this.open.set(false);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAYA,MAUa,eAAmB,SAAQ,UAAa,CAAA;AAVrD,IAAA,WAAA,GAAA;;QAWqB,IAAI,CAAA,IAAA,GAAG,eAAe,EAAE,CAAC;QAE1B,IAAI,CAAA,IAAA,GAAG,GAAG,CAAC;AAM9B,KAAA;AAJU,IAAA,YAAY,CAAC,MAAS,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACxB;+GARQ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAPb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,SAAA,EAAA;;YAEP,iBAAiB,CAAC,eAAe,CAAC;AAClC,YAAA,0BAA0B,CAAC,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC;AAC/C,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAGQ,eAAe,EAAA,UAAA,EAAA,CAAA;kBAV3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,SAAS,EAAE;;AAEP,wBAAA,iBAAiB,CAAiB,eAAA,CAAA;AAClC,wBAAA,0BAA0B,CAAC,EAAC,KAAK,EAAE,OAAO,EAAC,CAAC;AAC/C,qBAAA;AACD,oBAAA,cAAc,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,wBAAwB,CAAC;AACxF,iBAAA,CAAA;;;ACrBD;;AAEG;;;;"}