@taiga-ui/legacy 4.52.0-canary.6be767f → 4.52.0-canary.6ee9658

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 (141) hide show
  1. package/README.md +1 -1
  2. package/classes/abstract-textfield-host.d.ts +1 -1
  3. package/components/arrow/arrow.options.d.ts +1 -3
  4. package/components/arrow/arrow.providers.d.ts +1 -6
  5. package/components/dialog/dialog.component.d.ts +5 -6
  6. package/components/dialog/dialog.directive.d.ts +4 -3
  7. package/components/dialog/dialog.interfaces.d.ts +3 -4
  8. package/components/dialog/dialog.service.d.ts +5 -2
  9. package/components/dialog/dialog.tokens.d.ts +1 -3
  10. package/components/index.d.ts +1 -13
  11. package/components/mobile-dialog/index.d.ts +3 -0
  12. package/components/mobile-dialog/mobile-dialog.component.d.ts +10 -0
  13. package/components/mobile-dialog/mobile-dialog.options.d.ts +10 -0
  14. package/components/mobile-dialog/mobile-dialog.service.d.ts +14 -0
  15. package/components/pdf-viewer/pdf-viewer.component.d.ts +3 -3
  16. package/components/pdf-viewer/pdf-viewer.directive.d.ts +4 -3
  17. package/components/pdf-viewer/pdf-viewer.options.d.ts +1 -3
  18. package/components/pdf-viewer/pdf-viewer.service.d.ts +7 -3
  19. package/components/primitive-textfield/primitive-textfield-options.d.ts +2 -2
  20. package/components/primitive-textfield/primitive-textfield.module.d.ts +5 -5
  21. package/components/select/select.module.d.ts +8 -8
  22. package/components/select/select.options.d.ts +1 -7
  23. package/components/select-option/select-option.module.d.ts +3 -3
  24. package/directives/textfield-controller/textfield.options.d.ts +1 -3
  25. package/fesm2022/taiga-ui-legacy-classes.mjs +3 -4
  26. package/fesm2022/taiga-ui-legacy-classes.mjs.map +1 -1
  27. package/fesm2022/taiga-ui-legacy-components-arrow.mjs +4 -17
  28. package/fesm2022/taiga-ui-legacy-components-arrow.mjs.map +1 -1
  29. package/fesm2022/taiga-ui-legacy-components-dialog.mjs +32 -26
  30. package/fesm2022/taiga-ui-legacy-components-dialog.mjs.map +1 -1
  31. package/fesm2022/taiga-ui-legacy-components-mobile-dialog.mjs +62 -0
  32. package/fesm2022/taiga-ui-legacy-components-mobile-dialog.mjs.map +1 -0
  33. package/fesm2022/taiga-ui-legacy-components-pdf-viewer.mjs +31 -26
  34. package/fesm2022/taiga-ui-legacy-components-pdf-viewer.mjs.map +1 -1
  35. package/fesm2022/taiga-ui-legacy-components-primitive-textfield.mjs +16 -16
  36. package/fesm2022/taiga-ui-legacy-components-primitive-textfield.mjs.map +1 -1
  37. package/fesm2022/taiga-ui-legacy-components-select-option.mjs +6 -6
  38. package/fesm2022/taiga-ui-legacy-components-select-option.mjs.map +1 -1
  39. package/fesm2022/taiga-ui-legacy-components-select.mjs +28 -37
  40. package/fesm2022/taiga-ui-legacy-components-select.mjs.map +1 -1
  41. package/fesm2022/taiga-ui-legacy-components.mjs +1 -13
  42. package/fesm2022/taiga-ui-legacy-components.mjs.map +1 -1
  43. package/fesm2022/taiga-ui-legacy-directives-legacy-dropdown-open-monitor.mjs +0 -1
  44. package/fesm2022/taiga-ui-legacy-directives-legacy-dropdown-open-monitor.mjs.map +1 -1
  45. package/fesm2022/taiga-ui-legacy-directives-textfield-controller.mjs +2 -7
  46. package/fesm2022/taiga-ui-legacy-directives-textfield-controller.mjs.map +1 -1
  47. package/fesm2022/taiga-ui-legacy-directives-unfinished-validator.mjs +2 -4
  48. package/fesm2022/taiga-ui-legacy-directives-unfinished-validator.mjs.map +1 -1
  49. package/fesm2022/taiga-ui-legacy-tokens.mjs +1 -1
  50. package/fesm2022/taiga-ui-legacy-tokens.mjs.map +1 -1
  51. package/fesm2022/taiga-ui-legacy-utils.mjs +1 -7
  52. package/fesm2022/taiga-ui-legacy-utils.mjs.map +1 -1
  53. package/package.json +12 -57
  54. package/utils/icons-path-factory.d.ts +1 -1
  55. package/utils/index.d.ts +0 -1
  56. package/components/combo-box/combo-box-strict.directive.d.ts +0 -12
  57. package/components/combo-box/combo-box.component.d.ts +0 -52
  58. package/components/combo-box/combo-box.directive.d.ts +0 -13
  59. package/components/combo-box/combo-box.module.d.ts +0 -20
  60. package/components/combo-box/index.d.ts +0 -4
  61. package/components/input/index.d.ts +0 -3
  62. package/components/input/input.component.d.ts +0 -32
  63. package/components/input/input.directive.d.ts +0 -12
  64. package/components/input/input.module.d.ts +0 -16
  65. package/components/input-date-range/index.d.ts +0 -3
  66. package/components/input-date-range/input-date-range.component.d.ts +0 -67
  67. package/components/input-date-range/input-date-range.directive.d.ts +0 -16
  68. package/components/input-date-range/input-date-range.module.d.ts +0 -22
  69. package/components/input-date-time/index.d.ts +0 -3
  70. package/components/input-date-time/input-date-time.component.d.ts +0 -87
  71. package/components/input-date-time/input-date-time.directive.d.ts +0 -17
  72. package/components/input-date-time/input-date-time.module.d.ts +0 -23
  73. package/components/input-date-time/native-date-time/native-date-time.directive.d.ts +0 -13
  74. package/components/input-month-range/index.d.ts +0 -3
  75. package/components/input-month-range/input-month-range.component.d.ts +0 -38
  76. package/components/input-month-range/input-month-range.directive.d.ts +0 -23
  77. package/components/input-month-range/input-month-range.module.d.ts +0 -18
  78. package/components/input-number/index.d.ts +0 -4
  79. package/components/input-number/input-number.component.d.ts +0 -63
  80. package/components/input-number/input-number.directive.d.ts +0 -16
  81. package/components/input-number/input-number.module.d.ts +0 -18
  82. package/components/input-number/input-number.options.d.ts +0 -29
  83. package/components/input-range/index.d.ts +0 -2
  84. package/components/input-range/input-range.component.d.ts +0 -56
  85. package/components/input-range/input-range.module.d.ts +0 -19
  86. package/components/input-slider/index.d.ts +0 -2
  87. package/components/input-slider/input-slider.component.d.ts +0 -42
  88. package/components/input-slider/input-slider.module.d.ts +0 -18
  89. package/components/input-tag/index.d.ts +0 -3
  90. package/components/input-tag/input-tag.component.d.ts +0 -103
  91. package/components/input-tag/input-tag.module.d.ts +0 -22
  92. package/components/input-tag/input-tag.options.d.ts +0 -27
  93. package/components/multi-select/hide-selected.pipe.d.ts +0 -11
  94. package/components/multi-select/index.d.ts +0 -10
  95. package/components/multi-select/multi-select-group/multi-select-group.component.d.ts +0 -23
  96. package/components/multi-select/multi-select-group/multi-select-group.directive.d.ts +0 -8
  97. package/components/multi-select/multi-select.component.d.ts +0 -71
  98. package/components/multi-select/multi-select.directive.d.ts +0 -14
  99. package/components/multi-select/multi-select.module.d.ts +0 -31
  100. package/components/multi-select/multi-select.options.d.ts +0 -14
  101. package/components/multi-select/native-multi-select/native-multi-select-group.component.d.ts +0 -9
  102. package/components/multi-select/native-multi-select/native-multi-select.component.d.ts +0 -8
  103. package/components/multi-select/native-multi-select/native-multi-select.d.ts +0 -11
  104. package/components/multi-select-option/index.d.ts +0 -2
  105. package/components/multi-select-option/multi-select-option.component.d.ts +0 -9
  106. package/components/multi-select-option/multi-select-option.module.d.ts +0 -9
  107. package/components/tag/index.d.ts +0 -3
  108. package/components/tag/tag.component.d.ts +0 -44
  109. package/components/tag/tag.module.d.ts +0 -16
  110. package/components/tag/tag.options.d.ts +0 -27
  111. package/components/textarea/index.d.ts +0 -3
  112. package/components/textarea/textarea.component.d.ts +0 -54
  113. package/components/textarea/textarea.directive.d.ts +0 -12
  114. package/components/textarea/textarea.module.d.ts +0 -21
  115. package/fesm2022/taiga-ui-legacy-components-combo-box.mjs +0 -299
  116. package/fesm2022/taiga-ui-legacy-components-combo-box.mjs.map +0 -1
  117. package/fesm2022/taiga-ui-legacy-components-input-date-range.mjs +0 -356
  118. package/fesm2022/taiga-ui-legacy-components-input-date-range.mjs.map +0 -1
  119. package/fesm2022/taiga-ui-legacy-components-input-date-time.mjs +0 -465
  120. package/fesm2022/taiga-ui-legacy-components-input-date-time.mjs.map +0 -1
  121. package/fesm2022/taiga-ui-legacy-components-input-month-range.mjs +0 -221
  122. package/fesm2022/taiga-ui-legacy-components-input-month-range.mjs.map +0 -1
  123. package/fesm2022/taiga-ui-legacy-components-input-number.mjs +0 -390
  124. package/fesm2022/taiga-ui-legacy-components-input-number.mjs.map +0 -1
  125. package/fesm2022/taiga-ui-legacy-components-input-range.mjs +0 -261
  126. package/fesm2022/taiga-ui-legacy-components-input-range.mjs.map +0 -1
  127. package/fesm2022/taiga-ui-legacy-components-input-slider.mjs +0 -199
  128. package/fesm2022/taiga-ui-legacy-components-input-slider.mjs.map +0 -1
  129. package/fesm2022/taiga-ui-legacy-components-input-tag.mjs +0 -524
  130. package/fesm2022/taiga-ui-legacy-components-input-tag.mjs.map +0 -1
  131. package/fesm2022/taiga-ui-legacy-components-input.mjs +0 -155
  132. package/fesm2022/taiga-ui-legacy-components-input.mjs.map +0 -1
  133. package/fesm2022/taiga-ui-legacy-components-multi-select-option.mjs +0 -47
  134. package/fesm2022/taiga-ui-legacy-components-multi-select-option.mjs.map +0 -1
  135. package/fesm2022/taiga-ui-legacy-components-multi-select.mjs +0 -690
  136. package/fesm2022/taiga-ui-legacy-components-multi-select.mjs.map +0 -1
  137. package/fesm2022/taiga-ui-legacy-components-tag.mjs +0 -225
  138. package/fesm2022/taiga-ui-legacy-components-tag.mjs.map +0 -1
  139. package/fesm2022/taiga-ui-legacy-components-textarea.mjs +0 -262
  140. package/fesm2022/taiga-ui-legacy-components-textarea.mjs.map +0 -1
  141. package/utils/is-apple.d.ts +0 -5
@@ -1,390 +0,0 @@
1
- import { __decorate } from 'tslib';
2
- import * as i0 from '@angular/core';
3
- import { InjectionToken, inject, Input, ContentChildren, ViewChild, ChangeDetectionStrategy, Component, Directive, NgModule } from '@angular/core';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { maskitoInitialCalibrationPlugin } from '@maskito/core';
6
- import { maskitoParseNumber, maskitoNumberOptionsGenerator, maskitoCaretGuard } from '@maskito/kit';
7
- import { EMPTY_QUERY, CHAR_HYPHEN, CHAR_MINUS } from '@taiga-ui/cdk/constants';
8
- import { tuiWatch } from '@taiga-ui/cdk/observables';
9
- import { TUI_IS_IOS } from '@taiga-ui/cdk/tokens';
10
- import { tuiClamp, tuiIsSafeToRound } from '@taiga-ui/cdk/utils/math';
11
- import { tuiProvideOptions, tuiPure } from '@taiga-ui/cdk/utils/miscellaneous';
12
- import { TUI_DEFAULT_NUMBER_FORMAT, TUI_NUMBER_FORMAT } from '@taiga-ui/core/tokens';
13
- import { tuiFormatNumber } from '@taiga-ui/core/utils/format';
14
- import { AbstractTuiNullableControl, tuiAsControl, AbstractTuiTextfieldHost } from '@taiga-ui/legacy/classes';
15
- import * as i2 from '@taiga-ui/legacy/components/primitive-textfield';
16
- import { TuiPrimitiveTextfieldComponent, TuiTextfieldComponent, TuiPrimitiveTextfieldModule } from '@taiga-ui/legacy/components/primitive-textfield';
17
- import * as i3 from '@taiga-ui/legacy/directives';
18
- import { TUI_TEXTFIELD_SIZE, TUI_TEXTFIELD_WATCHED_CONTROLLER, TEXTFIELD_CONTROLLER_PROVIDER, TuiTextfieldControllerModule, TuiValueAccessorModule } from '@taiga-ui/legacy/directives';
19
- import { tuiAsFocusableItemAccessor, tuiAsTextfieldHost } from '@taiga-ui/legacy/tokens';
20
- import * as i4 from '@taiga-ui/polymorpheus';
21
- import { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';
22
- import * as i1 from '@maskito/angular';
23
- import { MaskitoDirective } from '@maskito/angular';
24
- import * as i5 from '@taiga-ui/core/components/button';
25
- import { TuiButton } from '@taiga-ui/core/components/button';
26
- import * as i6 from '@angular/common';
27
- import { CommonModule } from '@angular/common';
28
-
29
- /**
30
- * @deprecated use new version of {@link TUI_INPUT_NUMBER_DEFAULT_OPTIONS} (from @taiga-ui/kit) instead
31
- * TODO(v5): delete it
32
- */
33
- const TUI_INPUT_NUMBER_DEFAULT_OPTIONS = {
34
- icons: {
35
- up: '@tui.plus',
36
- down: '@tui.minus',
37
- },
38
- min: Number.MIN_SAFE_INTEGER,
39
- max: Number.MAX_SAFE_INTEGER,
40
- step: 0,
41
- };
42
- /**
43
- * @deprecated use new version of {@link TUI_INPUT_NUMBER_OPTIONS} (from @taiga-ui/kit) instead
44
- * TODO(v5): delete it
45
- */
46
- const TUI_INPUT_NUMBER_OPTIONS = new InjectionToken(ngDevMode ? 'TUI_INPUT_NUMBER_OPTIONS' : '', {
47
- factory: () => TUI_INPUT_NUMBER_DEFAULT_OPTIONS,
48
- });
49
- /**
50
- * @deprecated use new version of {@link tuiInputNumberOptionsProvider} (from @taiga-ui/kit) instead
51
- * TODO(v5): delete it
52
- */
53
- function tuiInputNumberOptionsProvider(options) {
54
- return tuiProvideOptions(TUI_INPUT_NUMBER_OPTIONS, options, TUI_INPUT_NUMBER_DEFAULT_OPTIONS);
55
- }
56
-
57
- const DEFAULT_MAX_LENGTH = 18;
58
- /**
59
- * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number tuiInputNumberOptionsProvider} (from @taiga-ui/kit) (property `valueTransformer`) instead
60
- * TODO(v5): delete it
61
- */
62
- const TUI_NUMBER_VALUE_TRANSFORMER = new InjectionToken(ngDevMode ? 'TUI_NUMBER_VALUE_TRANSFORMER' : '');
63
- /**
64
- * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number TuiInputNumber} (from @taiga-ui/kit) instead
65
- * TODO(v5): delete it
66
- */
67
- class TuiInputNumberComponent extends AbstractTuiNullableControl {
68
- constructor() {
69
- super(...arguments);
70
- this.isIOS = inject(TUI_IS_IOS);
71
- this.textfieldSize = inject(TUI_TEXTFIELD_SIZE);
72
- this.options = inject(TUI_INPUT_NUMBER_OPTIONS);
73
- this.unfinishedValue = '';
74
- this.polymorpheusValueContent = EMPTY_QUERY;
75
- this.valueTransformer = inject(TUI_NUMBER_VALUE_TRANSFORMER, { optional: true });
76
- this.numberFormat = TUI_DEFAULT_NUMBER_FORMAT;
77
- this.controller = inject(TUI_TEXTFIELD_WATCHED_CONTROLLER);
78
- this.numberFormat$ = inject(TUI_NUMBER_FORMAT)
79
- .pipe(tuiWatch(this.cdr), takeUntilDestroyed())
80
- .subscribe((format) => {
81
- this.numberFormat = format;
82
- });
83
- this.min = this.options.min;
84
- this.max = this.options.max;
85
- this.step = this.options.step;
86
- }
87
- get nativeFocusableElement() {
88
- return !this.textfield || this.computedDisabled
89
- ? null
90
- : this.textfield.nativeFocusableElement;
91
- }
92
- get focused() {
93
- return !!this.textfield?.focused;
94
- }
95
- get inputMode() {
96
- if (this.isIOS) {
97
- return this.isNegativeAllowed
98
- ? 'text' // iPhone does not have minus sign if inputMode is equal to 'numeric' / 'decimal'
99
- : 'decimal';
100
- }
101
- /**
102
- * Samsung Keyboard does not have minus sign for `inputmode=decimal`
103
- * @see https://github.com/taiga-family/taiga-ui/issues/11061#issuecomment-2939103792
104
- */
105
- return 'numeric';
106
- }
107
- get calculatedMaxLength() {
108
- const decimalPart = !!this.precision &&
109
- this.nativeValue.includes(this.numberFormat.decimalSeparator);
110
- const precision = decimalPart ? Math.min(this.precision + 1, 20) : 0;
111
- const takeThousand = this.numberFormat.thousandSeparator.repeat(5).length;
112
- return DEFAULT_MAX_LENGTH + precision + takeThousand;
113
- }
114
- get computedValue() {
115
- return this.focused ? this.nativeValue : this.formattedValue;
116
- }
117
- onValueChange(nativeValue) {
118
- const parsedValue = maskitoParseNumber(nativeValue, this.numberFormat);
119
- this.unfinishedValue = null;
120
- if (Number.isNaN(parsedValue)) {
121
- this.value = null;
122
- return;
123
- }
124
- if (this.isNativeValueNotFinished) {
125
- this.unfinishedValue = nativeValue;
126
- this.cdr.markForCheck();
127
- return;
128
- }
129
- if (parsedValue < this.computedMin || parsedValue > this.computedMax) {
130
- return;
131
- }
132
- this.value = parsedValue;
133
- }
134
- writeValue(value) {
135
- super.writeValue(value);
136
- this.nativeValue = this.formattedValue;
137
- }
138
- get size() {
139
- return this.textfieldSize.size;
140
- }
141
- get icons() {
142
- return this.options.icons;
143
- }
144
- get computedMin() {
145
- return this.computeMin(this.min, this.max);
146
- }
147
- get computedMax() {
148
- return this.computeMax(this.min, this.max);
149
- }
150
- get isNegativeAllowed() {
151
- return this.computedMin < 0;
152
- }
153
- get formattedValue() {
154
- return this.value !== null ? this.getFormattedValue(this.value || 0) : '';
155
- }
156
- get canDecrement() {
157
- return this.interactive && (this.value || 0) > this.computedMin;
158
- }
159
- get canIncrement() {
160
- return this.interactive && (this.value || 0) < this.computedMax;
161
- }
162
- get computedPrefix() {
163
- return this.controller.prefix;
164
- }
165
- get computedPostfix() {
166
- const { postfix } = this.controller;
167
- return postfix && ` ${postfix}`;
168
- }
169
- get mask() {
170
- return this.calculateMask(this.precision, this.numberFormat.decimalMode, this.numberFormat.decimalSeparator, this.numberFormat.thousandSeparator, this.computedMin, this.computedMax, this.computedPrefix, this.computedPostfix);
171
- }
172
- get nativeValue() {
173
- return this.nativeFocusableElement?.value || '';
174
- }
175
- set nativeValue(value) {
176
- if (!this.textfield || !this.nativeFocusableElement) {
177
- return;
178
- }
179
- this.textfield.value = value;
180
- this.nativeFocusableElement.value = value;
181
- }
182
- onArrow(step) {
183
- if (!step) {
184
- return;
185
- }
186
- this.value = tuiClamp((this.value || 0) + step, this.computedMin, this.computedMax);
187
- this.nativeValue = this.formattedValue;
188
- }
189
- onFocused(focused) {
190
- this.updateFocused(focused);
191
- const nativeNumberValue = this.unfinishedValue
192
- ? maskitoParseNumber(this.unfinishedValue, this.numberFormat)
193
- : this.nativeNumberValue;
194
- this.unfinishedValue = null;
195
- if (Number.isNaN(nativeNumberValue)) {
196
- this.nativeValue =
197
- focused && !this.readOnly
198
- ? this.computedPrefix + this.computedPostfix
199
- : '';
200
- this.value = null;
201
- return;
202
- }
203
- if (!focused) {
204
- this.value = nativeNumberValue;
205
- this.nativeValue = this.formattedValue;
206
- }
207
- }
208
- getFormattedValue(value) {
209
- return (this.computedPrefix +
210
- tuiFormatNumber(value, {
211
- ...this.numberFormat,
212
- /**
213
- * Number can satisfy interval [Number.MIN_SAFE_INTEGER; Number.MAX_SAFE_INTEGER]
214
- * but its rounding can violate it.
215
- * Before BigInt support there is no perfect solution – only trade off.
216
- * No rounding is better than lose precision and incorrect mutation of already valid value.
217
- */
218
- precision: tuiIsSafeToRound(value, this.precision)
219
- ? this.precision
220
- : Infinity,
221
- }).replace(CHAR_HYPHEN, CHAR_MINUS) +
222
- this.computedPostfix);
223
- }
224
- get isNativeValueNotFinished() {
225
- const { nativeNumberValue } = this;
226
- return nativeNumberValue < 0
227
- ? nativeNumberValue > this.computedMax
228
- : nativeNumberValue < this.computedMin;
229
- }
230
- get nativeNumberValue() {
231
- return maskitoParseNumber(this.nativeValue, this.numberFormat);
232
- }
233
- get precision() {
234
- return Number.isNaN(this.numberFormat.precision)
235
- ? 2
236
- : this.numberFormat.precision;
237
- }
238
- computeMin(min, max) {
239
- return Math.min(this.valueTransformer?.fromControlValue(min) ?? min ?? this.options.min, this.valueTransformer?.fromControlValue(max) ?? max ?? this.options.max);
240
- }
241
- computeMax(min, max) {
242
- return Math.max(this.valueTransformer?.fromControlValue(min) ?? min ?? this.options.min, this.valueTransformer?.fromControlValue(max) ?? max ?? this.options.max);
243
- }
244
- // eslint-disable-next-line @typescript-eslint/max-params,max-params
245
- calculateMask(precision, decimalMode, decimalSeparator, thousandSeparator, min, max, prefix, postfix) {
246
- const params = {
247
- decimalSeparator,
248
- thousandSeparator,
249
- min,
250
- max,
251
- prefix,
252
- postfix,
253
- maximumFractionDigits: precision,
254
- minimumFractionDigits: decimalMode === 'always' ? precision : 0,
255
- };
256
- const { plugins, ...options } = maskitoNumberOptionsGenerator(params);
257
- const initialCalibrationPlugin = maskitoInitialCalibrationPlugin(maskitoNumberOptionsGenerator({
258
- ...params,
259
- min: Number.MIN_SAFE_INTEGER,
260
- max: Number.MAX_SAFE_INTEGER,
261
- }));
262
- return {
263
- ...options,
264
- plugins: [
265
- ...plugins,
266
- initialCalibrationPlugin,
267
- maskitoCaretGuard((value) => [
268
- prefix.length,
269
- value.length - postfix.length,
270
- ]),
271
- ],
272
- };
273
- }
274
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
275
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiInputNumberComponent, isStandalone: false, selector: "tui-input-number", inputs: { min: "min", max: "max", step: "step" }, host: { listeners: { "keydown.arrowDown": "onArrow(-step)", "keydown.arrowUp": "onArrow(step)" }, properties: { "attr.data-size": "size" } }, providers: [
276
- tuiAsFocusableItemAccessor(TuiInputNumberComponent),
277
- tuiAsControl(TuiInputNumberComponent),
278
- TEXTFIELD_CONTROLLER_PROVIDER,
279
- ], queries: [{ propertyName: "polymorpheusValueContent", predicate: PolymorpheusOutlet, descendants: true }], viewQueries: [{ propertyName: "textfield", first: true, predicate: TuiPrimitiveTextfieldComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<tui-primitive-textfield\n #textfield\n tuiTextfieldPostfix=\"\"\n tuiTextfieldPrefix=\"\"\n tuiValueAccessor\n class=\"t-textfield\"\n [disabled]=\"computedDisabled\"\n [focusable]=\"focusable\"\n [invalid]=\"computedInvalid\"\n [maskito]=\"mask\"\n [pseudoActive]=\"pseudoActive\"\n [pseudoFocus]=\"computedFocused\"\n [pseudoHover]=\"pseudoHover\"\n [readOnly]=\"readOnly\"\n [value]=\"computedValue\"\n (focusedChange)=\"onFocused($event)\"\n (valueChange)=\"onValueChange($event)\"\n>\n <ng-content />\n <ng-content\n ngProjectAs=\"input\"\n select=\"input\"\n />\n @if (polymorpheusValueContent.length) {\n <div\n ngProjectAs=\"tuiContent\"\n class=\"t-value-content\"\n >\n <ng-container *polymorpheusOutlet=\"valueContent as text\">\n {{ text }}\n </ng-container>\n </div>\n }\n</tui-primitive-textfield>\n\n@if (step) {\n <section class=\"t-buttons\">\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"textfield.appearance\"\n [disabled]=\"!canIncrement\"\n [iconStart]=\"icons.up\"\n (click.prevent)=\"onArrow(step)\"\n (mousedown.prevent)=\"nativeFocusableElement?.focus()\"\n >\n +\n </button>\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"textfield.appearance\"\n [disabled]=\"!canDecrement\"\n [iconStart]=\"icons.down\"\n (click.prevent)=\"onArrow(-step)\"\n (mousedown.prevent)=\"nativeFocusableElement?.focus()\"\n >\n -\n </button>\n </section>\n}\n\n@if (polymorpheusValueContent.changes | async) {}\n\n<ng-template #valueContent>\n <ng-content select=\"tuiContent\" />\n</ng-template>\n", styles: [":host{display:flex;border-radius:var(--tui-radius-m);text-align:start}:host :host-context(*:disabled){pointer-events:none}.t-textfield{flex:1;min-inline-size:0;max-inline-size:100%;border-radius:inherit;text-align:inherit}.t-textfield:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.t-value-content{inline-size:100%}.t-buttons{display:flex;flex-direction:column;align-items:stretch;margin-inline-start:.125rem;border-radius:inherit}[data-size=s]+.t-buttons{flex-direction:row-reverse}[data-size=s]+.t-buttons .t-button:first-child{margin:0 0 0 .125rem;border-top-right-radius:inherit;border-bottom-right-radius:inherit}[data-size=s]+.t-buttons .t-button:last-child{border-radius:0}[data-size=m]+.t-buttons .t-button{inline-size:calc(var(--tui-height-m) * .75)}[data-size=l]+.t-buttons .t-button{inline-size:calc(var(--tui-height-l) * .75)}.t-buttons .t-button{display:flex;flex:1;block-size:auto;align-items:center;justify-content:center;border-radius:0}.t-buttons .t-button:first-child{margin-block-end:.125rem;border-top-right-radius:inherit}.t-buttons .t-button:last-child{border-bottom-right-radius:inherit}\n"], dependencies: [{ kind: "directive", type: i1.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "component", type: i2.TuiPrimitiveTextfieldComponent, selector: "tui-primitive-textfield", inputs: ["editable", "iconCleaner", "readOnly", "invalid", "disabled", "value"], outputs: ["valueChange"] }, { kind: "directive", type: i2.TuiPrimitiveTextfieldDirective, selector: "tui-primitive-textfield" }, { kind: "directive", type: i3.TuiTextfieldPrefixDirective, selector: "[tuiTextfieldPrefix]", inputs: ["tuiTextfieldPrefix"] }, { kind: "directive", type: i3.TuiTextfieldPostfixDirective, selector: "[tuiTextfieldPostfix]", inputs: ["tuiTextfieldPostfix"] }, { kind: "directive", type: i4.PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "directive", type: i3.TuiValueAccessorDirective, selector: "[tuiValueAccessor]" }, { kind: "directive", type: i5.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
280
- }
281
- __decorate([
282
- tuiPure
283
- ], TuiInputNumberComponent.prototype, "computeMin", null);
284
- __decorate([
285
- tuiPure
286
- ], TuiInputNumberComponent.prototype, "computeMax", null);
287
- __decorate([
288
- tuiPure
289
- ], TuiInputNumberComponent.prototype, "calculateMask", null);
290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberComponent, decorators: [{
291
- type: Component,
292
- args: [{ standalone: false, selector: 'tui-input-number', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
293
- tuiAsFocusableItemAccessor(TuiInputNumberComponent),
294
- tuiAsControl(TuiInputNumberComponent),
295
- TEXTFIELD_CONTROLLER_PROVIDER,
296
- ], host: {
297
- '[attr.data-size]': 'size',
298
- '(keydown.arrowDown)': 'onArrow(-step)',
299
- '(keydown.arrowUp)': 'onArrow(step)',
300
- }, template: "<tui-primitive-textfield\n #textfield\n tuiTextfieldPostfix=\"\"\n tuiTextfieldPrefix=\"\"\n tuiValueAccessor\n class=\"t-textfield\"\n [disabled]=\"computedDisabled\"\n [focusable]=\"focusable\"\n [invalid]=\"computedInvalid\"\n [maskito]=\"mask\"\n [pseudoActive]=\"pseudoActive\"\n [pseudoFocus]=\"computedFocused\"\n [pseudoHover]=\"pseudoHover\"\n [readOnly]=\"readOnly\"\n [value]=\"computedValue\"\n (focusedChange)=\"onFocused($event)\"\n (valueChange)=\"onValueChange($event)\"\n>\n <ng-content />\n <ng-content\n ngProjectAs=\"input\"\n select=\"input\"\n />\n @if (polymorpheusValueContent.length) {\n <div\n ngProjectAs=\"tuiContent\"\n class=\"t-value-content\"\n >\n <ng-container *polymorpheusOutlet=\"valueContent as text\">\n {{ text }}\n </ng-container>\n </div>\n }\n</tui-primitive-textfield>\n\n@if (step) {\n <section class=\"t-buttons\">\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"textfield.appearance\"\n [disabled]=\"!canIncrement\"\n [iconStart]=\"icons.up\"\n (click.prevent)=\"onArrow(step)\"\n (mousedown.prevent)=\"nativeFocusableElement?.focus()\"\n >\n +\n </button>\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"textfield.appearance\"\n [disabled]=\"!canDecrement\"\n [iconStart]=\"icons.down\"\n (click.prevent)=\"onArrow(-step)\"\n (mousedown.prevent)=\"nativeFocusableElement?.focus()\"\n >\n -\n </button>\n </section>\n}\n\n@if (polymorpheusValueContent.changes | async) {}\n\n<ng-template #valueContent>\n <ng-content select=\"tuiContent\" />\n</ng-template>\n", styles: [":host{display:flex;border-radius:var(--tui-radius-m);text-align:start}:host :host-context(*:disabled){pointer-events:none}.t-textfield{flex:1;min-inline-size:0;max-inline-size:100%;border-radius:inherit;text-align:inherit}.t-textfield:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.t-value-content{inline-size:100%}.t-buttons{display:flex;flex-direction:column;align-items:stretch;margin-inline-start:.125rem;border-radius:inherit}[data-size=s]+.t-buttons{flex-direction:row-reverse}[data-size=s]+.t-buttons .t-button:first-child{margin:0 0 0 .125rem;border-top-right-radius:inherit;border-bottom-right-radius:inherit}[data-size=s]+.t-buttons .t-button:last-child{border-radius:0}[data-size=m]+.t-buttons .t-button{inline-size:calc(var(--tui-height-m) * .75)}[data-size=l]+.t-buttons .t-button{inline-size:calc(var(--tui-height-l) * .75)}.t-buttons .t-button{display:flex;flex:1;block-size:auto;align-items:center;justify-content:center;border-radius:0}.t-buttons .t-button:first-child{margin-block-end:.125rem;border-top-right-radius:inherit}.t-buttons .t-button:last-child{border-bottom-right-radius:inherit}\n"] }]
301
- }], propDecorators: { textfield: [{
302
- type: ViewChild,
303
- args: [TuiPrimitiveTextfieldComponent]
304
- }], polymorpheusValueContent: [{
305
- type: ContentChildren,
306
- args: [PolymorpheusOutlet, { descendants: true }]
307
- }], min: [{
308
- type: Input
309
- }], max: [{
310
- type: Input
311
- }], step: [{
312
- type: Input
313
- }], computeMin: [], computeMax: [], calculateMask: [] } });
314
-
315
- /**
316
- * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number TuiInputNumber} (from @taiga-ui/kit) instead
317
- * TODO(v5): delete it
318
- */
319
- class TuiInputNumberDirective extends AbstractTuiTextfieldHost {
320
- get value() {
321
- return this.host.computedValue;
322
- }
323
- onValueChange(value) {
324
- this.host.onValueChange(value);
325
- }
326
- ngDoCheck() {
327
- if (!this.host.nativeFocusableElement) {
328
- return;
329
- }
330
- this.host.nativeFocusableElement.inputMode = this.host.inputMode;
331
- this.host.nativeFocusableElement.maxLength =
332
- this.host.nativeFocusableElement.maxLength > 0
333
- ? this.host.nativeFocusableElement.maxLength
334
- : this.host.calculatedMaxLength;
335
- }
336
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
337
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiInputNumberDirective, isStandalone: false, selector: "tui-input-number", providers: [tuiAsTextfieldHost(TuiInputNumberDirective)], usesInheritance: true, ngImport: i0 }); }
338
- }
339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberDirective, decorators: [{
340
- type: Directive,
341
- args: [{
342
- standalone: false,
343
- selector: 'tui-input-number',
344
- providers: [tuiAsTextfieldHost(TuiInputNumberDirective)],
345
- }]
346
- }] });
347
-
348
- /**
349
- * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number TuiInputNumber} (from @taiga-ui/kit) instead
350
- * TODO(v5): delete it
351
- */
352
- class TuiInputNumberModule {
353
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
354
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberModule, declarations: [TuiInputNumberComponent, TuiInputNumberDirective], imports: [CommonModule,
355
- MaskitoDirective,
356
- TuiPrimitiveTextfieldModule,
357
- TuiTextfieldControllerModule,
358
- TuiValueAccessorModule,
359
- PolymorpheusOutlet,
360
- PolymorpheusTemplate,
361
- TuiButton], exports: [TuiInputNumberComponent, TuiInputNumberDirective, TuiTextfieldComponent] }); }
362
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberModule, imports: [CommonModule,
363
- TuiPrimitiveTextfieldModule,
364
- TuiTextfieldControllerModule,
365
- TuiValueAccessorModule] }); }
366
- }
367
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiInputNumberModule, decorators: [{
368
- type: NgModule,
369
- args: [{
370
- imports: [
371
- CommonModule,
372
- MaskitoDirective,
373
- TuiPrimitiveTextfieldModule,
374
- TuiTextfieldControllerModule,
375
- TuiValueAccessorModule,
376
- PolymorpheusOutlet,
377
- PolymorpheusTemplate,
378
- TuiButton,
379
- ],
380
- declarations: [TuiInputNumberComponent, TuiInputNumberDirective],
381
- exports: [TuiInputNumberComponent, TuiInputNumberDirective, TuiTextfieldComponent],
382
- }]
383
- }] });
384
-
385
- /**
386
- * Generated bundle index. Do not edit.
387
- */
388
-
389
- export { TUI_INPUT_NUMBER_DEFAULT_OPTIONS, TUI_INPUT_NUMBER_OPTIONS, TUI_NUMBER_VALUE_TRANSFORMER, TuiInputNumberComponent, TuiInputNumberDirective, TuiInputNumberModule, tuiInputNumberOptionsProvider };
390
- //# sourceMappingURL=taiga-ui-legacy-components-input-number.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taiga-ui-legacy-components-input-number.mjs","sources":["../../../projects/legacy/components/input-number/input-number.options.ts","../../../projects/legacy/components/input-number/input-number.component.ts","../../../projects/legacy/components/input-number/input-number.template.html","../../../projects/legacy/components/input-number/input-number.directive.ts","../../../projects/legacy/components/input-number/input-number.module.ts","../../../projects/legacy/components/input-number/taiga-ui-legacy-components-input-number.ts"],"sourcesContent":["import {InjectionToken, type Provider} from '@angular/core';\nimport {tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * @deprecated use new version of {@link TuiInputNumberOptions} (from @taiga-ui/kit) instead\n * TODO(v5): delete it\n */\nexport interface TuiInputNumberOptions {\n readonly icons: Readonly<{\n down: string;\n up: string;\n }>;\n readonly max: number;\n readonly min: number;\n readonly step: number;\n}\n\n/**\n * @deprecated use new version of {@link TUI_INPUT_NUMBER_DEFAULT_OPTIONS} (from @taiga-ui/kit) instead\n * TODO(v5): delete it\n */\nexport const TUI_INPUT_NUMBER_DEFAULT_OPTIONS: TuiInputNumberOptions = {\n icons: {\n up: '@tui.plus',\n down: '@tui.minus',\n },\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n step: 0,\n};\n\n/**\n * @deprecated use new version of {@link TUI_INPUT_NUMBER_OPTIONS} (from @taiga-ui/kit) instead\n * TODO(v5): delete it\n */\nexport const TUI_INPUT_NUMBER_OPTIONS = new InjectionToken(\n ngDevMode ? 'TUI_INPUT_NUMBER_OPTIONS' : '',\n {\n factory: () => TUI_INPUT_NUMBER_DEFAULT_OPTIONS,\n },\n);\n\n/**\n * @deprecated use new version of {@link tuiInputNumberOptionsProvider} (from @taiga-ui/kit) instead\n * TODO(v5): delete it\n */\nexport function tuiInputNumberOptionsProvider(\n options: Partial<TuiInputNumberOptions>,\n): Provider {\n return tuiProvideOptions(\n TUI_INPUT_NUMBER_OPTIONS,\n options,\n TUI_INPUT_NUMBER_DEFAULT_OPTIONS,\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n inject,\n InjectionToken,\n Input,\n type QueryList,\n ViewChild,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {maskitoInitialCalibrationPlugin, type MaskitoOptions} from '@maskito/core';\nimport {\n maskitoCaretGuard,\n maskitoNumberOptionsGenerator,\n type MaskitoNumberParams,\n maskitoParseNumber,\n} from '@maskito/kit';\nimport {type TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport {CHAR_HYPHEN, CHAR_MINUS, EMPTY_QUERY} from '@taiga-ui/cdk/constants';\nimport {tuiWatch} from '@taiga-ui/cdk/observables';\nimport {TUI_IS_IOS} from '@taiga-ui/cdk/tokens';\nimport {tuiClamp, tuiIsSafeToRound} from '@taiga-ui/cdk/utils/math';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {\n TUI_DEFAULT_NUMBER_FORMAT,\n TUI_NUMBER_FORMAT,\n type TuiDecimalMode,\n} from '@taiga-ui/core/tokens';\nimport {type TuiSizeL, type TuiSizeS} from '@taiga-ui/core/types';\nimport {tuiFormatNumber} from '@taiga-ui/core/utils/format';\nimport {AbstractTuiNullableControl, tuiAsControl} from '@taiga-ui/legacy/classes';\nimport {TuiPrimitiveTextfieldComponent} from '@taiga-ui/legacy/components/primitive-textfield';\nimport {\n TEXTFIELD_CONTROLLER_PROVIDER,\n TUI_TEXTFIELD_SIZE,\n TUI_TEXTFIELD_WATCHED_CONTROLLER,\n} from '@taiga-ui/legacy/directives';\nimport {\n tuiAsFocusableItemAccessor,\n type TuiFocusableElementAccessor,\n} from '@taiga-ui/legacy/tokens';\nimport {PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\n\nimport {\n TUI_INPUT_NUMBER_OPTIONS,\n type TuiInputNumberOptions,\n} from './input-number.options';\n\nconst DEFAULT_MAX_LENGTH = 18;\n\n/**\n * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number tuiInputNumberOptionsProvider} (from @taiga-ui/kit) (property `valueTransformer`) instead\n * TODO(v5): delete it\n */\nexport const TUI_NUMBER_VALUE_TRANSFORMER = new InjectionToken<\n TuiValueTransformer<number | null>\n>(ngDevMode ? 'TUI_NUMBER_VALUE_TRANSFORMER' : '');\n\n/**\n * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number TuiInputNumber} (from @taiga-ui/kit) instead\n * TODO(v5): delete it\n */\n@Component({\n standalone: false,\n selector: 'tui-input-number',\n templateUrl: './input-number.template.html',\n styleUrls: ['./input-number.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n tuiAsFocusableItemAccessor(TuiInputNumberComponent),\n tuiAsControl(TuiInputNumberComponent),\n TEXTFIELD_CONTROLLER_PROVIDER,\n ],\n host: {\n '[attr.data-size]': 'size',\n '(keydown.arrowDown)': 'onArrow(-step)',\n '(keydown.arrowUp)': 'onArrow(step)',\n },\n})\nexport class TuiInputNumberComponent\n extends AbstractTuiNullableControl<number>\n implements TuiFocusableElementAccessor\n{\n @ViewChild(TuiPrimitiveTextfieldComponent)\n private readonly textfield?: TuiPrimitiveTextfieldComponent;\n\n private readonly isIOS = inject(TUI_IS_IOS);\n private readonly textfieldSize = inject(TUI_TEXTFIELD_SIZE);\n private readonly options = inject(TUI_INPUT_NUMBER_OPTIONS);\n private unfinishedValue: string | null = '';\n\n @ContentChildren(PolymorpheusOutlet, {descendants: true})\n protected readonly polymorpheusValueContent: QueryList<unknown> = EMPTY_QUERY;\n\n protected override readonly valueTransformer = inject<\n TuiValueTransformer<number | null>\n >(TUI_NUMBER_VALUE_TRANSFORMER, {optional: true});\n\n protected numberFormat = TUI_DEFAULT_NUMBER_FORMAT;\n protected readonly controller = inject(TUI_TEXTFIELD_WATCHED_CONTROLLER);\n protected readonly numberFormat$ = inject(TUI_NUMBER_FORMAT)\n .pipe(tuiWatch(this.cdr), takeUntilDestroyed())\n .subscribe((format) => {\n this.numberFormat = format;\n });\n\n @Input()\n public min: number | null = this.options.min;\n\n @Input()\n public max: number | null = this.options.max;\n\n @Input()\n public step = this.options.step;\n\n public get nativeFocusableElement(): HTMLInputElement | null {\n return !this.textfield || this.computedDisabled\n ? null\n : this.textfield.nativeFocusableElement;\n }\n\n public get focused(): boolean {\n return !!this.textfield?.focused;\n }\n\n public get inputMode(): string {\n if (this.isIOS) {\n return this.isNegativeAllowed\n ? 'text' // iPhone does not have minus sign if inputMode is equal to 'numeric' / 'decimal'\n : 'decimal';\n }\n\n /**\n * Samsung Keyboard does not have minus sign for `inputmode=decimal`\n * @see https://github.com/taiga-family/taiga-ui/issues/11061#issuecomment-2939103792\n */\n return 'numeric';\n }\n\n public get calculatedMaxLength(): number {\n const decimalPart =\n !!this.precision &&\n this.nativeValue.includes(this.numberFormat.decimalSeparator);\n const precision = decimalPart ? Math.min(this.precision + 1, 20) : 0;\n const takeThousand = this.numberFormat.thousandSeparator.repeat(5).length;\n\n return DEFAULT_MAX_LENGTH + precision + takeThousand;\n }\n\n public get computedValue(): string {\n return this.focused ? this.nativeValue : this.formattedValue;\n }\n\n public onValueChange(nativeValue: string): void {\n const parsedValue = maskitoParseNumber(nativeValue, this.numberFormat);\n\n this.unfinishedValue = null;\n\n if (Number.isNaN(parsedValue)) {\n this.value = null;\n\n return;\n }\n\n if (this.isNativeValueNotFinished) {\n this.unfinishedValue = nativeValue;\n this.cdr.markForCheck();\n\n return;\n }\n\n if (parsedValue < this.computedMin || parsedValue > this.computedMax) {\n return;\n }\n\n this.value = parsedValue;\n }\n\n public override writeValue(value: number | null): void {\n super.writeValue(value);\n this.nativeValue = this.formattedValue;\n }\n\n protected get size(): TuiSizeL | TuiSizeS {\n return this.textfieldSize.size;\n }\n\n protected get icons(): TuiInputNumberOptions['icons'] {\n return this.options.icons;\n }\n\n protected get computedMin(): number {\n return this.computeMin(this.min, this.max);\n }\n\n protected get computedMax(): number {\n return this.computeMax(this.min, this.max);\n }\n\n protected get isNegativeAllowed(): boolean {\n return this.computedMin < 0;\n }\n\n protected get formattedValue(): string {\n return this.value !== null ? this.getFormattedValue(this.value || 0) : '';\n }\n\n protected get canDecrement(): boolean {\n return this.interactive && (this.value || 0) > this.computedMin;\n }\n\n protected get canIncrement(): boolean {\n return this.interactive && (this.value || 0) < this.computedMax;\n }\n\n protected get computedPrefix(): string {\n return this.controller.prefix;\n }\n\n protected get computedPostfix(): string {\n const {postfix} = this.controller;\n\n return postfix && ` ${postfix}`;\n }\n\n protected get mask(): MaskitoOptions {\n return this.calculateMask(\n this.precision,\n this.numberFormat.decimalMode,\n this.numberFormat.decimalSeparator,\n this.numberFormat.thousandSeparator,\n this.computedMin,\n this.computedMax,\n this.computedPrefix,\n this.computedPostfix,\n );\n }\n\n protected get nativeValue(): string {\n return this.nativeFocusableElement?.value || '';\n }\n\n protected set nativeValue(value: string) {\n if (!this.textfield || !this.nativeFocusableElement) {\n return;\n }\n\n this.textfield.value = value;\n this.nativeFocusableElement.value = value;\n }\n\n protected onArrow(step: number | null): void {\n if (!step) {\n return;\n }\n\n this.value = tuiClamp(\n (this.value || 0) + step,\n this.computedMin,\n this.computedMax,\n );\n this.nativeValue = this.formattedValue;\n }\n\n protected onFocused(focused: boolean): void {\n this.updateFocused(focused);\n\n const nativeNumberValue = this.unfinishedValue\n ? maskitoParseNumber(this.unfinishedValue, this.numberFormat)\n : this.nativeNumberValue;\n\n this.unfinishedValue = null;\n\n if (Number.isNaN(nativeNumberValue)) {\n this.nativeValue =\n focused && !this.readOnly\n ? this.computedPrefix + this.computedPostfix\n : '';\n this.value = null;\n\n return;\n }\n\n if (!focused) {\n this.value = nativeNumberValue;\n this.nativeValue = this.formattedValue;\n }\n }\n\n protected getFormattedValue(value: number): string {\n return (\n this.computedPrefix +\n tuiFormatNumber(value, {\n ...this.numberFormat,\n /**\n * Number can satisfy interval [Number.MIN_SAFE_INTEGER; Number.MAX_SAFE_INTEGER]\n * but its rounding can violate it.\n * Before BigInt support there is no perfect solution – only trade off.\n * No rounding is better than lose precision and incorrect mutation of already valid value.\n */\n precision: tuiIsSafeToRound(value, this.precision)\n ? this.precision\n : Infinity,\n }).replace(CHAR_HYPHEN, CHAR_MINUS) +\n this.computedPostfix\n );\n }\n\n private get isNativeValueNotFinished(): boolean {\n const {nativeNumberValue} = this;\n\n return nativeNumberValue < 0\n ? nativeNumberValue > this.computedMax\n : nativeNumberValue < this.computedMin;\n }\n\n private get nativeNumberValue(): number {\n return maskitoParseNumber(this.nativeValue, this.numberFormat);\n }\n\n private get precision(): number {\n return Number.isNaN(this.numberFormat.precision)\n ? 2\n : this.numberFormat.precision;\n }\n\n @tuiPure\n private computeMin(min: number | null, max: number | null): number {\n return Math.min(\n this.valueTransformer?.fromControlValue(min) ?? min ?? this.options.min,\n this.valueTransformer?.fromControlValue(max) ?? max ?? this.options.max,\n );\n }\n\n @tuiPure\n private computeMax(min: number | null, max: number | null): number {\n return Math.max(\n this.valueTransformer?.fromControlValue(min) ?? min ?? this.options.min,\n this.valueTransformer?.fromControlValue(max) ?? max ?? this.options.max,\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/max-params,max-params\n @tuiPure\n private calculateMask(\n precision: number,\n decimalMode: TuiDecimalMode,\n decimalSeparator: string,\n thousandSeparator: string,\n min: number,\n max: number,\n prefix: string,\n postfix: string,\n ): MaskitoOptions {\n const params: MaskitoNumberParams = {\n decimalSeparator,\n thousandSeparator,\n min,\n max,\n prefix,\n postfix,\n maximumFractionDigits: precision,\n minimumFractionDigits: decimalMode === 'always' ? precision : 0,\n };\n const {plugins, ...options} = maskitoNumberOptionsGenerator(params);\n const initialCalibrationPlugin = maskitoInitialCalibrationPlugin(\n maskitoNumberOptionsGenerator({\n ...params,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n }),\n );\n\n return {\n ...options,\n plugins: [\n ...plugins,\n initialCalibrationPlugin,\n maskitoCaretGuard((value) => [\n prefix.length,\n value.length - postfix.length,\n ]),\n ],\n };\n }\n}\n","<tui-primitive-textfield\n #textfield\n tuiTextfieldPostfix=\"\"\n tuiTextfieldPrefix=\"\"\n tuiValueAccessor\n class=\"t-textfield\"\n [disabled]=\"computedDisabled\"\n [focusable]=\"focusable\"\n [invalid]=\"computedInvalid\"\n [maskito]=\"mask\"\n [pseudoActive]=\"pseudoActive\"\n [pseudoFocus]=\"computedFocused\"\n [pseudoHover]=\"pseudoHover\"\n [readOnly]=\"readOnly\"\n [value]=\"computedValue\"\n (focusedChange)=\"onFocused($event)\"\n (valueChange)=\"onValueChange($event)\"\n>\n <ng-content />\n <ng-content\n ngProjectAs=\"input\"\n select=\"input\"\n />\n @if (polymorpheusValueContent.length) {\n <div\n ngProjectAs=\"tuiContent\"\n class=\"t-value-content\"\n >\n <ng-container *polymorpheusOutlet=\"valueContent as text\">\n {{ text }}\n </ng-container>\n </div>\n }\n</tui-primitive-textfield>\n\n@if (step) {\n <section class=\"t-buttons\">\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"textfield.appearance\"\n [disabled]=\"!canIncrement\"\n [iconStart]=\"icons.up\"\n (click.prevent)=\"onArrow(step)\"\n (mousedown.prevent)=\"nativeFocusableElement?.focus()\"\n >\n +\n </button>\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"textfield.appearance\"\n [disabled]=\"!canDecrement\"\n [iconStart]=\"icons.down\"\n (click.prevent)=\"onArrow(-step)\"\n (mousedown.prevent)=\"nativeFocusableElement?.focus()\"\n >\n -\n </button>\n </section>\n}\n\n@if (polymorpheusValueContent.changes | async) {}\n\n<ng-template #valueContent>\n <ng-content select=\"tuiContent\" />\n</ng-template>\n","import {Directive, type DoCheck} from '@angular/core';\nimport {AbstractTuiTextfieldHost} from '@taiga-ui/legacy/classes';\nimport {tuiAsTextfieldHost} from '@taiga-ui/legacy/tokens';\n\nimport {type TuiInputNumberComponent} from './input-number.component';\n\n/**\n * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number TuiInputNumber} (from @taiga-ui/kit) instead\n * TODO(v5): delete it\n */\n@Directive({\n standalone: false,\n selector: 'tui-input-number',\n providers: [tuiAsTextfieldHost(TuiInputNumberDirective)],\n})\nexport class TuiInputNumberDirective\n extends AbstractTuiTextfieldHost<TuiInputNumberComponent>\n implements DoCheck\n{\n protected input?: HTMLInputElement;\n\n public override get value(): string {\n return this.host.computedValue;\n }\n\n public onValueChange(value: string): void {\n this.host.onValueChange(value);\n }\n\n public ngDoCheck(): void {\n if (!this.host.nativeFocusableElement) {\n return;\n }\n\n this.host.nativeFocusableElement.inputMode = this.host.inputMode;\n this.host.nativeFocusableElement.maxLength =\n this.host.nativeFocusableElement.maxLength > 0\n ? this.host.nativeFocusableElement.maxLength\n : this.host.calculatedMaxLength;\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MaskitoDirective} from '@maskito/angular';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {\n TuiPrimitiveTextfieldModule,\n TuiTextfieldComponent,\n} from '@taiga-ui/legacy/components/primitive-textfield';\nimport {\n TuiTextfieldControllerModule,\n TuiValueAccessorModule,\n} from '@taiga-ui/legacy/directives';\nimport {PolymorpheusOutlet, PolymorpheusTemplate} from '@taiga-ui/polymorpheus';\n\nimport {TuiInputNumberComponent} from './input-number.component';\nimport {TuiInputNumberDirective} from './input-number.directive';\n\n/**\n * @deprecated use new version of {@link https://taiga-ui.dev/components/input-number TuiInputNumber} (from @taiga-ui/kit) instead\n * TODO(v5): delete it\n */\n@NgModule({\n imports: [\n CommonModule,\n MaskitoDirective,\n TuiPrimitiveTextfieldModule,\n TuiTextfieldControllerModule,\n TuiValueAccessorModule,\n PolymorpheusOutlet,\n PolymorpheusTemplate,\n TuiButton,\n ],\n declarations: [TuiInputNumberComponent, TuiInputNumberDirective],\n exports: [TuiInputNumberComponent, TuiInputNumberDirective, TuiTextfieldComponent],\n})\nexport class TuiInputNumberModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}