@taiga-ui/kit 5.9.0 → 5.10.0-canary.9984aef

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 (172) hide show
  1. package/components/input-color/index.d.ts +1 -0
  2. package/components/input-color/input-color-content.component.d.ts +11 -0
  3. package/components/input-color/input-color.component.d.ts +4 -7
  4. package/components/input-color/input-color.d.ts +2 -1
  5. package/components/input-date/index.d.ts +1 -0
  6. package/components/input-date/input-date-content.component.d.ts +13 -0
  7. package/components/input-date/input-date.component.d.ts +1 -4
  8. package/components/input-date-time/index.d.ts +1 -0
  9. package/components/input-date-time/input-date-time-content.component.d.ts +14 -0
  10. package/components/input-date-time/input-date-time.component.d.ts +1 -8
  11. package/components/input-date-time/input-date-time.directive.d.ts +1 -2
  12. package/components/input-month/index.d.ts +1 -0
  13. package/components/input-month/input-month-content.component.d.ts +14 -0
  14. package/components/input-month/input-month.component.d.ts +4 -8
  15. package/components/input-phone-international/index.d.ts +1 -0
  16. package/components/input-phone-international/input-phone-international-content.component.d.ts +21 -0
  17. package/components/input-phone-international/input-phone-international.component.d.ts +10 -20
  18. package/components/input-phone-international/input-phone-international.d.ts +2 -1
  19. package/components/input-pin/index.d.ts +1 -0
  20. package/components/input-pin/input-pin-content.component.d.ts +10 -0
  21. package/components/input-pin/input-pin.component.d.ts +6 -5
  22. package/components/input-time/index.d.ts +1 -0
  23. package/components/input-time/input-time-content.component.d.ts +12 -0
  24. package/components/input-time/input-time.component.d.ts +5 -11
  25. package/components/segmented/segmented.directive.d.ts +2 -1
  26. package/directives/button-group/button-group.directive.d.ts +1 -0
  27. package/directives/present/present.directive.d.ts +1 -0
  28. package/fesm2022/taiga-ui-kit-components-accordion.mjs +7 -7
  29. package/fesm2022/taiga-ui-kit-components-accordion.mjs.map +1 -1
  30. package/fesm2022/taiga-ui-kit-components-action-bar.mjs +3 -3
  31. package/fesm2022/taiga-ui-kit-components-avatar.mjs +23 -23
  32. package/fesm2022/taiga-ui-kit-components-avatar.mjs.map +1 -1
  33. package/fesm2022/taiga-ui-kit-components-badge-notification.mjs +4 -4
  34. package/fesm2022/taiga-ui-kit-components-badge-notification.mjs.map +1 -1
  35. package/fesm2022/taiga-ui-kit-components-badge.mjs +7 -7
  36. package/fesm2022/taiga-ui-kit-components-badge.mjs.map +1 -1
  37. package/fesm2022/taiga-ui-kit-components-badged-content.mjs +6 -6
  38. package/fesm2022/taiga-ui-kit-components-block.mjs +7 -7
  39. package/fesm2022/taiga-ui-kit-components-block.mjs.map +1 -1
  40. package/fesm2022/taiga-ui-kit-components-breadcrumbs.mjs +5 -5
  41. package/fesm2022/taiga-ui-kit-components-breadcrumbs.mjs.map +1 -1
  42. package/fesm2022/taiga-ui-kit-components-button-loading.mjs +3 -3
  43. package/fesm2022/taiga-ui-kit-components-calendar-month.mjs +3 -3
  44. package/fesm2022/taiga-ui-kit-components-calendar-range.mjs +3 -3
  45. package/fesm2022/taiga-ui-kit-components-chip.mjs +7 -7
  46. package/fesm2022/taiga-ui-kit-components-chip.mjs.map +1 -1
  47. package/fesm2022/taiga-ui-kit-components-combo-box.mjs +3 -3
  48. package/fesm2022/taiga-ui-kit-components-comment.mjs +7 -7
  49. package/fesm2022/taiga-ui-kit-components-comment.mjs.map +1 -1
  50. package/fesm2022/taiga-ui-kit-components-compass.mjs +4 -4
  51. package/fesm2022/taiga-ui-kit-components-compass.mjs.map +1 -1
  52. package/fesm2022/taiga-ui-kit-components-confirm.mjs +6 -6
  53. package/fesm2022/taiga-ui-kit-components-copy.mjs +11 -11
  54. package/fesm2022/taiga-ui-kit-components-copy.mjs.map +1 -1
  55. package/fesm2022/taiga-ui-kit-components-counter.mjs +3 -3
  56. package/fesm2022/taiga-ui-kit-components-data-list-wrapper.mjs +6 -6
  57. package/fesm2022/taiga-ui-kit-components-drawer.mjs +3 -3
  58. package/fesm2022/taiga-ui-kit-components-files.mjs +25 -25
  59. package/fesm2022/taiga-ui-kit-components-files.mjs.map +1 -1
  60. package/fesm2022/taiga-ui-kit-components-filter.mjs +3 -3
  61. package/fesm2022/taiga-ui-kit-components-fullscreen.mjs +3 -3
  62. package/fesm2022/taiga-ui-kit-components-input-chip.mjs +6 -6
  63. package/fesm2022/taiga-ui-kit-components-input-color.mjs +60 -31
  64. package/fesm2022/taiga-ui-kit-components-input-color.mjs.map +1 -1
  65. package/fesm2022/taiga-ui-kit-components-input-date-multi.mjs +5 -5
  66. package/fesm2022/taiga-ui-kit-components-input-date-multi.mjs.map +1 -1
  67. package/fesm2022/taiga-ui-kit-components-input-date-range.mjs +5 -5
  68. package/fesm2022/taiga-ui-kit-components-input-date-range.mjs.map +1 -1
  69. package/fesm2022/taiga-ui-kit-components-input-date-time.mjs +70 -36
  70. package/fesm2022/taiga-ui-kit-components-input-date-time.mjs.map +1 -1
  71. package/fesm2022/taiga-ui-kit-components-input-date.mjs +65 -19
  72. package/fesm2022/taiga-ui-kit-components-input-date.mjs.map +1 -1
  73. package/fesm2022/taiga-ui-kit-components-input-inline.mjs +4 -4
  74. package/fesm2022/taiga-ui-kit-components-input-inline.mjs.map +1 -1
  75. package/fesm2022/taiga-ui-kit-components-input-month-range.mjs +3 -3
  76. package/fesm2022/taiga-ui-kit-components-input-month.mjs +62 -17
  77. package/fesm2022/taiga-ui-kit-components-input-month.mjs.map +1 -1
  78. package/fesm2022/taiga-ui-kit-components-input-number.mjs +45 -42
  79. package/fesm2022/taiga-ui-kit-components-input-number.mjs.map +1 -1
  80. package/fesm2022/taiga-ui-kit-components-input-phone-international.mjs +99 -68
  81. package/fesm2022/taiga-ui-kit-components-input-phone-international.mjs.map +1 -1
  82. package/fesm2022/taiga-ui-kit-components-input-phone.mjs +3 -3
  83. package/fesm2022/taiga-ui-kit-components-input-pin.mjs +48 -22
  84. package/fesm2022/taiga-ui-kit-components-input-pin.mjs.map +1 -1
  85. package/fesm2022/taiga-ui-kit-components-input-range.mjs +4 -4
  86. package/fesm2022/taiga-ui-kit-components-input-range.mjs.map +1 -1
  87. package/fesm2022/taiga-ui-kit-components-input-slider.mjs +7 -7
  88. package/fesm2022/taiga-ui-kit-components-input-slider.mjs.map +1 -1
  89. package/fesm2022/taiga-ui-kit-components-input-time.mjs +68 -43
  90. package/fesm2022/taiga-ui-kit-components-input-time.mjs.map +1 -1
  91. package/fesm2022/taiga-ui-kit-components-input-year.mjs +5 -5
  92. package/fesm2022/taiga-ui-kit-components-input-year.mjs.map +1 -1
  93. package/fesm2022/taiga-ui-kit-components-items-with-more.mjs +12 -12
  94. package/fesm2022/taiga-ui-kit-components-like.mjs +5 -5
  95. package/fesm2022/taiga-ui-kit-components-like.mjs.map +1 -1
  96. package/fesm2022/taiga-ui-kit-components-line-clamp.mjs +9 -9
  97. package/fesm2022/taiga-ui-kit-components-message.mjs +7 -7
  98. package/fesm2022/taiga-ui-kit-components-message.mjs.map +1 -1
  99. package/fesm2022/taiga-ui-kit-components-multi-select.mjs +12 -12
  100. package/fesm2022/taiga-ui-kit-components-notification-middle.mjs +9 -9
  101. package/fesm2022/taiga-ui-kit-components-pager.mjs +3 -3
  102. package/fesm2022/taiga-ui-kit-components-pagination.mjs +3 -3
  103. package/fesm2022/taiga-ui-kit-components-pin.mjs +7 -7
  104. package/fesm2022/taiga-ui-kit-components-pin.mjs.map +1 -1
  105. package/fesm2022/taiga-ui-kit-components-pincode.mjs +13 -7
  106. package/fesm2022/taiga-ui-kit-components-pincode.mjs.map +1 -1
  107. package/fesm2022/taiga-ui-kit-components-preview.mjs +26 -26
  108. package/fesm2022/taiga-ui-kit-components-preview.mjs.map +1 -1
  109. package/fesm2022/taiga-ui-kit-components-progress.mjs +27 -27
  110. package/fesm2022/taiga-ui-kit-components-progress.mjs.map +1 -1
  111. package/fesm2022/taiga-ui-kit-components-pulse.mjs +3 -3
  112. package/fesm2022/taiga-ui-kit-components-push.mjs +12 -12
  113. package/fesm2022/taiga-ui-kit-components-radio-list.mjs +4 -4
  114. package/fesm2022/taiga-ui-kit-components-radio-list.mjs.map +1 -1
  115. package/fesm2022/taiga-ui-kit-components-range.mjs +6 -6
  116. package/fesm2022/taiga-ui-kit-components-rating.mjs +3 -3
  117. package/fesm2022/taiga-ui-kit-components-routable-dialog.mjs +3 -3
  118. package/fesm2022/taiga-ui-kit-components-segmented.mjs +13 -14
  119. package/fesm2022/taiga-ui-kit-components-segmented.mjs.map +1 -1
  120. package/fesm2022/taiga-ui-kit-components-select.mjs +9 -9
  121. package/fesm2022/taiga-ui-kit-components-shrink-wrap.mjs +7 -7
  122. package/fesm2022/taiga-ui-kit-components-shrink-wrap.mjs.map +1 -1
  123. package/fesm2022/taiga-ui-kit-components-status.mjs +7 -7
  124. package/fesm2022/taiga-ui-kit-components-status.mjs.map +1 -1
  125. package/fesm2022/taiga-ui-kit-components-stepper.mjs +6 -6
  126. package/fesm2022/taiga-ui-kit-components-switch.mjs +4 -4
  127. package/fesm2022/taiga-ui-kit-components-switch.mjs.map +1 -1
  128. package/fesm2022/taiga-ui-kit-components-tabs.mjs +19 -19
  129. package/fesm2022/taiga-ui-kit-components-tabs.mjs.map +1 -1
  130. package/fesm2022/taiga-ui-kit-components-textarea.mjs +12 -12
  131. package/fesm2022/taiga-ui-kit-components-tiles.mjs +14 -14
  132. package/fesm2022/taiga-ui-kit-components-tiles.mjs.map +1 -1
  133. package/fesm2022/taiga-ui-kit-components-timeline.mjs +6 -6
  134. package/fesm2022/taiga-ui-kit-components-toast.mjs +16 -16
  135. package/fesm2022/taiga-ui-kit-components-toast.mjs.map +1 -1
  136. package/fesm2022/taiga-ui-kit-components-tree.mjs +24 -24
  137. package/fesm2022/taiga-ui-kit-directives-appearance-proxy.mjs +3 -3
  138. package/fesm2022/taiga-ui-kit-directives-button-group.mjs +11 -9
  139. package/fesm2022/taiga-ui-kit-directives-button-group.mjs.map +1 -1
  140. package/fesm2022/taiga-ui-kit-directives-button-select.mjs +3 -3
  141. package/fesm2022/taiga-ui-kit-directives-chevron.mjs +7 -7
  142. package/fesm2022/taiga-ui-kit-directives-chevron.mjs.map +1 -1
  143. package/fesm2022/taiga-ui-kit-directives-connected.mjs +7 -7
  144. package/fesm2022/taiga-ui-kit-directives-connected.mjs.map +1 -1
  145. package/fesm2022/taiga-ui-kit-directives-data-list-dropdown-manager.mjs +3 -3
  146. package/fesm2022/taiga-ui-kit-directives-fade.mjs +7 -7
  147. package/fesm2022/taiga-ui-kit-directives-fade.mjs.map +1 -1
  148. package/fesm2022/taiga-ui-kit-directives-fluid-typography.mjs +3 -3
  149. package/fesm2022/taiga-ui-kit-directives-highlight.mjs +3 -3
  150. package/fesm2022/taiga-ui-kit-directives-password.mjs +4 -3
  151. package/fesm2022/taiga-ui-kit-directives-password.mjs.map +1 -1
  152. package/fesm2022/taiga-ui-kit-directives-present.mjs +7 -5
  153. package/fesm2022/taiga-ui-kit-directives-present.mjs.map +1 -1
  154. package/fesm2022/taiga-ui-kit-directives-sensitive.mjs +7 -7
  155. package/fesm2022/taiga-ui-kit-directives-sensitive.mjs.map +1 -1
  156. package/fesm2022/taiga-ui-kit-directives-shimmer.mjs +7 -7
  157. package/fesm2022/taiga-ui-kit-directives-shimmer.mjs.map +1 -1
  158. package/fesm2022/taiga-ui-kit-directives-skeleton.mjs +7 -7
  159. package/fesm2022/taiga-ui-kit-directives-skeleton.mjs.map +1 -1
  160. package/fesm2022/taiga-ui-kit-directives-tooltip.mjs +10 -12
  161. package/fesm2022/taiga-ui-kit-directives-tooltip.mjs.map +1 -1
  162. package/fesm2022/taiga-ui-kit-directives-unfinished-validator.mjs +3 -3
  163. package/fesm2022/taiga-ui-kit-directives-unmask-handler.mjs +3 -3
  164. package/fesm2022/taiga-ui-kit-pipes-auto-color.mjs +3 -3
  165. package/fesm2022/taiga-ui-kit-pipes-emails.mjs +3 -3
  166. package/fesm2022/taiga-ui-kit-pipes-flag.mjs +3 -3
  167. package/fesm2022/taiga-ui-kit-pipes-hide-selected.mjs +3 -3
  168. package/fesm2022/taiga-ui-kit-pipes-initials.mjs +3 -3
  169. package/fesm2022/taiga-ui-kit-pipes-sort-countries.mjs +3 -3
  170. package/fesm2022/taiga-ui-kit-pipes-stringify-content.mjs +3 -3
  171. package/fesm2022/taiga-ui-kit-pipes-stringify.mjs +3 -3
  172. package/package.json +21 -21
@@ -1,41 +1,40 @@
1
1
  import { TuiLabel } from '@taiga-ui/core/components/label';
2
- import * as i6 from '@taiga-ui/core/components/textfield';
3
- import { TUI_TEXTFIELD_OPTIONS, TuiTextfieldContent, TuiTextfieldComponent, TuiTextfieldOptionsDirective } from '@taiga-ui/core/components/textfield';
4
- import * as i7 from '@taiga-ui/core/portals/dropdown';
5
- import { TuiDropdownOpen, tuiDropdownEnabled, TuiDropdownContent } from '@taiga-ui/core/portals/dropdown';
6
- import { NgTemplateOutlet } from '@angular/common';
2
+ import * as i3 from '@taiga-ui/core/components/textfield';
3
+ import { TUI_TEXTFIELD_OPTIONS, TuiTextfield, tuiAsTextfieldContent, TuiTextfieldContent, TuiTextfieldComponent, TuiTextfieldOptionsDirective } from '@taiga-ui/core/components/textfield';
4
+ import { TuiDropdownContent, tuiDropdownEnabled, TuiDropdownOpen } from '@taiga-ui/core/portals/dropdown';
7
5
  import * as i0 from '@angular/core';
8
- import { viewChildren, ElementRef, inject, effect, signal, computed, input, model, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
9
- import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
10
- import * as i4 from '@angular/forms';
11
- import { FormsModule } from '@angular/forms';
12
- import * as i1 from '@maskito/angular';
6
+ import { inject, viewChildren, ElementRef, computed, ChangeDetectionStrategy, ViewEncapsulation, Component, effect, signal, input, model, Directive } from '@angular/core';
7
+ import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
8
+ import * as i1$1 from '@maskito/angular';
13
9
  import { MaskitoDirective } from '@maskito/angular';
14
10
  import { maskitoTransform, MASKITO_DEFAULT_OPTIONS, maskitoInitialCalibrationPlugin } from '@maskito/core';
15
11
  import { maskitoPhoneOptionsGenerator, maskitoGetCountryFromNumber } from '@maskito/phone';
16
12
  import { WA_IS_IOS } from '@ng-web-apis/platform';
17
13
  import { TuiControl, tuiAsControl } from '@taiga-ui/cdk/classes';
18
- import { TUI_DEFAULT_MATCHER, CHAR_PLUS } from '@taiga-ui/cdk/constants';
14
+ import { TUI_DEFAULT_MATCHER, TUI_VERSION, CHAR_PLUS } from '@taiga-ui/cdk/constants';
19
15
  import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
20
16
  import { TuiAutoFocus, tuiAutoFocusOptionsProvider } from '@taiga-ui/cdk/directives/auto-focus';
21
17
  import { tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens';
22
18
  import { tuiInjectElement, tuiValue, tuiIsInputEvent } from '@taiga-ui/cdk/utils/dom';
19
+ import * as i4 from '@taiga-ui/core/components/input';
20
+ import { TuiInput, TuiWithInput } from '@taiga-ui/core/components/input';
21
+ import * as i3$1 from '@taiga-ui/kit/directives/appearance-proxy';
22
+ import { TuiAppearanceProxy } from '@taiga-ui/kit/directives/appearance-proxy';
23
+ import { tuiMaskito } from '@taiga-ui/kit/utils';
24
+ import { validatePhoneNumberLength, getCountryCallingCode } from 'libphonenumber-js/core';
25
+ import { of, filter, from } from 'rxjs';
26
+ import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
27
+ import { NgTemplateOutlet } from '@angular/common';
28
+ import * as i1 from '@angular/forms';
29
+ import { FormsModule } from '@angular/forms';
23
30
  import { TuiButton } from '@taiga-ui/core/components/button';
24
- import * as i5 from '@taiga-ui/core/components/data-list';
31
+ import * as i2 from '@taiga-ui/core/components/data-list';
25
32
  import { TuiOption, TuiDataList } from '@taiga-ui/core/components/data-list';
26
- import * as i2 from '@taiga-ui/core/components/input';
27
- import { TuiWithInput, TuiInput } from '@taiga-ui/core/components/input';
28
33
  import { TuiTitle } from '@taiga-ui/core/components/title';
29
34
  import { TUI_COMMON_ICONS } from '@taiga-ui/core/tokens';
30
- import * as i3 from '@taiga-ui/kit/directives/appearance-proxy';
31
- import { TuiAppearanceProxy } from '@taiga-ui/kit/directives/appearance-proxy';
32
35
  import { TuiChevron } from '@taiga-ui/kit/directives/chevron';
33
36
  import { TuiFlagPipe } from '@taiga-ui/kit/pipes/flag';
34
37
  import { TUI_INTERNATIONAL_SEARCH, TUI_COUNTRIES } from '@taiga-ui/kit/tokens';
35
- import { tuiMaskito } from '@taiga-ui/kit/utils';
36
- import { validatePhoneNumberLength, getCountryCallingCode } from 'libphonenumber-js/core';
37
- import { of, from, filter } from 'rxjs';
38
- import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
39
38
 
40
39
  const TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS = {
41
40
  countries: [],
@@ -54,42 +53,80 @@ const TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS = {
54
53
  */
55
54
  const [TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS, tuiInputPhoneInternationalOptionsProvider,] = tuiCreateOptions(TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS);
56
55
 
57
- const NOT_FORM_CONTROL_SYMBOLS = /[^+\d]/g;
58
- class TuiInputPhoneInternationalComponent extends TuiControl {
56
+ class TuiInputPhoneInternationalContent {
59
57
  constructor() {
60
- super(...arguments);
58
+ this.host = inject(TuiInputPhoneInternationalComponent);
61
59
  this.list = viewChildren(TuiOption, { read: ElementRef });
62
- this.el = tuiInjectElement();
63
60
  this.ios = inject(WA_IS_IOS);
64
61
  this.icons = inject(TUI_COMMON_ICONS);
65
- this.options = inject(TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS);
66
62
  this.label = inject(TUI_INTERNATIONAL_SEARCH);
67
- this.metadata = toSignal(from(this.options.metadata));
68
63
  this.names = inject(TUI_COUNTRIES);
69
- this.open = inject(TuiDropdownOpen).open;
70
- this.dropdownEnabled = tuiDropdownEnabled(this.interactive);
71
- this.change = effect(() => this.onChange(this.unmask(this.masked())));
72
- this.search = signal('');
73
64
  this.size = inject(TUI_TEXTFIELD_OPTIONS).size;
65
+ this.filtered = computed(() => {
66
+ const metadata = this.host.metadata();
67
+ return this.host
68
+ .countries()
69
+ .map((iso) => ({
70
+ iso,
71
+ name: this.names()[iso] || '',
72
+ code: tuiGetCallingCode(iso, metadata),
73
+ }))
74
+ .filter(({ name, code }) => TUI_DEFAULT_MATCHER(`${name}${code}`, this.host.search()));
75
+ });
76
+ }
77
+ onItemClick(code) {
78
+ this.host.el.focus();
79
+ this.host.open.set(false);
80
+ this.host.countryIsoCode.set(code);
81
+ this.host.search.set('');
82
+ this.host.masked.set(maskitoTransform(this.host.value() || tuiGetCallingCode(code, this.host.metadata()), this.host.mask() || MASKITO_DEFAULT_OPTIONS));
83
+ }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPhoneInternationalContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
85
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.23", type: TuiInputPhoneInternationalContent, isStandalone: true, selector: "tui-input-phone-international-content", host: { attributes: { "data-tui-version": "5.10.0-canary.9984aef" } }, viewQueries: [{ propertyName: "list", predicate: TuiOption, descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "<button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"host.mode()\"\n [class.t-ipi-select_readonly]=\"host.readOnly()\"\n [disabled]=\"host.disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"host.open()\"\n (click.prevent)=\"host.interactive() && host.open.set(!host.open())\"\n (pointerdown.stop)=\"(0)\"\n>\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()[host.countryIsoCode()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"host.countryIsoCode() | tuiFlag\"\n />\n</button>\n<ng-template #filter>\n <div class=\"t-ipi-search\">\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiInput\n type=\"text\"\n [ngModel]=\"host.search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!ios\"\n (keydown.arrowDown)=\"list()[0]?.nativeElement?.focus()\"\n (ngModelChange)=\"host.search.set($event)\"\n />\n </tui-textfield>\n </div>\n</ng-template>\n<ng-container *tuiDropdown>\n @if (host.countrySearch()) {\n <ng-container *ngTemplateOutlet=\"filter\" />\n }\n <tui-data-list class=\"t-ipi-options\">\n @for (item of filtered(); track item.iso) {\n <button\n tuiOption\n type=\"button\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n }\n </tui-data-list>\n</ng-container>\n", styles: ["tui-input-phone-international-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){display:contents;border-radius:inherit}[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){inset-inline-start:var(--t-offset);border-top-left-radius:0;border-bottom-left-radius:0;inline-size:calc(100% - var(--t-offset))}[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])+[tuiLabel][tuiLabel]{padding-inline-start:var(--t-offset)}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-offset: 4.125rem}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-offset: 4.875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-offset: 5.25rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-ipi-flag{margin:0 -.1875rem}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-select{position:absolute;inset-inline-start:0;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-select_readonly{pointer-events:none}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-code{color:var(--tui-text-secondary)}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-search{position:sticky;z-index:1;inset-block-start:0;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}[data-tui-version=\"5.10.0-canary.9984aef\"] tui-dropdown-mobile .t-ipi-search,[data-tui-version=\"5.10.0-canary.9984aef\"] tui-sheet-dialog .t-ipi-search{background:var(--tui-background-elevation-1)}[data-tui-version=\"5.10.0-canary.9984aef\"] tui-dropdown-mobile .t-ipi-options:not(:first-child),[data-tui-version=\"5.10.0-canary.9984aef\"] tui-sheet-dialog .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}[data-tui-version=\"5.10.0-canary.9984aef\"] tui-sheet-dialog .t-ipi-search{inset-block-start:4.5rem;padding-inline-start:0;padding-inline-end:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i2.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i2.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "directive", type: TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "pipe", type: TuiFlagPipe, name: "tuiFlag" }, { kind: "component", type: i3.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i3.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i4.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPhoneInternationalContent, decorators: [{
88
+ type: Component,
89
+ args: [{ selector: 'tui-input-phone-international-content', imports: [
90
+ FormsModule,
91
+ NgTemplateOutlet,
92
+ TuiAutoFocus,
93
+ TuiButton,
94
+ TuiChevron,
95
+ TuiDataList,
96
+ TuiDropdownContent,
97
+ TuiFlagPipe,
98
+ TuiInput,
99
+ TuiOption,
100
+ TuiTextfield,
101
+ TuiTitle,
102
+ ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { 'data-tui-version': TUI_VERSION }, template: "<button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"host.mode()\"\n [class.t-ipi-select_readonly]=\"host.readOnly()\"\n [disabled]=\"host.disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"host.open()\"\n (click.prevent)=\"host.interactive() && host.open.set(!host.open())\"\n (pointerdown.stop)=\"(0)\"\n>\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()[host.countryIsoCode()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"host.countryIsoCode() | tuiFlag\"\n />\n</button>\n<ng-template #filter>\n <div class=\"t-ipi-search\">\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiInput\n type=\"text\"\n [ngModel]=\"host.search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!ios\"\n (keydown.arrowDown)=\"list()[0]?.nativeElement?.focus()\"\n (ngModelChange)=\"host.search.set($event)\"\n />\n </tui-textfield>\n </div>\n</ng-template>\n<ng-container *tuiDropdown>\n @if (host.countrySearch()) {\n <ng-container *ngTemplateOutlet=\"filter\" />\n }\n <tui-data-list class=\"t-ipi-options\">\n @for (item of filtered(); track item.iso) {\n <button\n tuiOption\n type=\"button\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n }\n </tui-data-list>\n</ng-container>\n", styles: ["tui-input-phone-international-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){display:contents;border-radius:inherit}[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){inset-inline-start:var(--t-offset);border-top-left-radius:0;border-bottom-left-radius:0;inline-size:calc(100% - var(--t-offset))}[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])+[tuiLabel][tuiLabel]{padding-inline-start:var(--t-offset)}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-offset: 4.125rem}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-offset: 4.875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-offset: 5.25rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-ipi-flag{margin:0 -.1875rem}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-select{position:absolute;inset-inline-start:0;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-select_readonly{pointer-events:none}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-code{color:var(--tui-text-secondary)}[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-search{position:sticky;z-index:1;inset-block-start:0;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){[data-tui-version=\"5.10.0-canary.9984aef\"] .t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}[data-tui-version=\"5.10.0-canary.9984aef\"] tui-dropdown-mobile .t-ipi-search,[data-tui-version=\"5.10.0-canary.9984aef\"] tui-sheet-dialog .t-ipi-search{background:var(--tui-background-elevation-1)}[data-tui-version=\"5.10.0-canary.9984aef\"] tui-dropdown-mobile .t-ipi-options:not(:first-child),[data-tui-version=\"5.10.0-canary.9984aef\"] tui-sheet-dialog .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}[data-tui-version=\"5.10.0-canary.9984aef\"] tui-sheet-dialog .t-ipi-search{inset-block-start:4.5rem;padding-inline-start:0;padding-inline-end:0}\n"] }]
103
+ }] });
104
+
105
+ const NOT_FORM_CONTROL_SYMBOLS = /[^+\d]/g;
106
+ // TODO(v6): rename to TuiInputPhoneInternationalDirective
107
+ class TuiInputPhoneInternationalComponent extends TuiControl {
108
+ constructor() {
109
+ super(...arguments);
110
+ this.options = inject(TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS);
111
+ this.el = tuiInjectElement();
112
+ this.ios = inject(WA_IS_IOS);
113
+ this.dropdownEnabled = tuiDropdownEnabled(this.interactive);
74
114
  this.masked = tuiValue(this.el);
75
115
  this.mask = tuiMaskito(computed(() => this.computeMask(this.countryIsoCode(), this.metadata())));
76
- this.filtered = computed(() => this.countries()
77
- .map((iso) => ({
78
- iso,
79
- name: this.names()?.[iso] || '',
80
- code: getCallingCode(iso, this.metadata()),
81
- }))
82
- .filter(({ name, code }) => TUI_DEFAULT_MATCHER(`${name}${code}`, this.search())));
116
+ this.change = effect(() => this.onChange(this.unmask(this.masked())));
83
117
  this.$ = inject(TuiActiveZone)
84
118
  .tuiActiveZoneChange.pipe(filter(() => !this.readOnly()), takeUntilDestroyed())
85
119
  .subscribe((active) => {
86
- const prefix = `${getCallingCode(this.countryIsoCode(), this.metadata())} `;
120
+ const prefix = `${tuiGetCallingCode(this.countryIsoCode(), this.metadata())} `;
87
121
  this.search.set('');
88
122
  this.masked.update((value) => {
89
123
  const fallback = active ? value || prefix : value;
90
124
  return value === prefix ? '' : fallback;
91
125
  });
92
126
  });
127
+ this.metadata = toSignal(from(this.options.metadata));
128
+ this.open = inject(TuiDropdownOpen).open;
129
+ this.search = signal('');
93
130
  this.countrySearch = input(this.options.countrySearch);
94
131
  this.countryIsoCode = model(this.options.countryIsoCode);
95
132
  this.countries = input(this.options.countries);
@@ -113,13 +150,6 @@ class TuiInputPhoneInternationalComponent extends TuiControl {
113
150
  this.countryIsoCode.set(code);
114
151
  }
115
152
  }
116
- onItemClick(code) {
117
- this.el.focus();
118
- this.open.set(false);
119
- this.countryIsoCode.set(code);
120
- this.search.set('');
121
- this.masked.set(maskitoTransform(this.value() || getCallingCode(code, this.metadata()), this.mask() || MASKITO_DEFAULT_OPTIONS));
122
- }
123
153
  computeMask(countryIsoCode, metadata) {
124
154
  if (!metadata) {
125
155
  return MASKITO_DEFAULT_OPTIONS;
@@ -136,7 +166,7 @@ class TuiInputPhoneInternationalComponent extends TuiControl {
136
166
  }
137
167
  unmask(maskedValue) {
138
168
  const value = maskedValue.replaceAll(NOT_FORM_CONTROL_SYMBOLS, '');
139
- const code = getCallingCode(this.countryIsoCode(), this.metadata());
169
+ const code = tuiGetCallingCode(this.countryIsoCode(), this.metadata());
140
170
  return value === code ? '' : value;
141
171
  }
142
172
  getCountryCode(value) {
@@ -146,46 +176,47 @@ class TuiInputPhoneInternationalComponent extends TuiControl {
146
176
  ? (maskitoGetCountryFromNumber(phone, metadata) ?? null)
147
177
  : null;
148
178
  }
149
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiInputPhoneInternationalComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: TuiInputPhoneInternationalComponent, isStandalone: true, selector: "input[tuiInputPhoneInternational]", inputs: { countrySearch: { classPropertyName: "countrySearch", publicName: "countrySearch", isSignal: true, isRequired: false, transformFunction: null }, countryIsoCode: { classPropertyName: "countryIsoCode", publicName: "countryIsoCode", isSignal: true, isRequired: false, transformFunction: null }, countries: { classPropertyName: "countries", publicName: "countries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { countryIsoCode: "countryIsoCodeChange" }, host: { attributes: { "ngSkipHydration": "true", "type": "tel" }, listeners: { "beforeinput.capture": "onPaste($event)", "click": "open.set(false)", "input": "masked.set($event.target.value)" }, properties: { "attr.inputmode": "!ios && open() ? \"none\" : null", "disabled": "disabled()" } }, providers: [
179
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPhoneInternationalComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
180
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.23", type: TuiInputPhoneInternationalComponent, isStandalone: true, selector: "input[tuiInputPhoneInternational]", inputs: { countrySearch: { classPropertyName: "countrySearch", publicName: "countrySearch", isSignal: true, isRequired: false, transformFunction: null }, countryIsoCode: { classPropertyName: "countryIsoCode", publicName: "countryIsoCode", isSignal: true, isRequired: false, transformFunction: null }, countries: { classPropertyName: "countries", publicName: "countries", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { countryIsoCode: "countryIsoCodeChange" }, host: { attributes: { "type": "tel" }, listeners: { "beforeinput.capture": "onPaste($event)", "click": "open.set(false)", "input": "masked.set($event.target.value)" }, properties: { "attr.inputmode": "!ios && open() ? \"none\" : null", "disabled": "disabled()" } }, providers: [
151
181
  tuiAsControl(TuiInputPhoneInternationalComponent),
152
182
  tuiFallbackValueProvider(''),
153
183
  tuiAutoFocusOptionsProvider({ preventScroll: true }),
154
- ], viewQueries: [{ propertyName: "list", predicate: TuiOption, descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1.MaskitoDirective }, { directive: i2.TuiWithInput }, { directive: i3.TuiAppearanceProxy }], ngImport: i0, template: "<ng-container *tuiTextfieldContent>\n <button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"mode()\"\n [class.t-ipi-select_readonly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"open()\"\n (click.prevent)=\"interactive() && open.set(!open())\"\n (pointerdown.stop)=\"(0)\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()[countryIsoCode()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"countryIsoCode() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-template #filter>\n <div class=\"t-ipi-search\">\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiInput\n type=\"text\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!ios\"\n (keydown.arrowDown)=\"list()[0]?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n</ng-template>\n<ng-container *tuiDropdown>\n <!-- To keep it under local injector -->\n @if (countrySearch()) {\n <ng-container *ngTemplateOutlet=\"filter\" />\n }\n <tui-data-list class=\"t-ipi-options\">\n @for (item of filtered(); track $index) {\n <button\n tuiOption\n type=\"button\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n }\n </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.9.0\"]){inset-inline-start:var(--t-offset);border-top-left-radius:0;border-bottom-left-radius:0;inline-size:calc(100% - var(--t-offset))}[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.9.0\"])+[tuiLabel][tuiLabel]{padding-inline-start:var(--t-offset)}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.9.0\"]){--t-offset: 4.125rem}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.9.0\"]) .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.9.0\"]){--t-offset: 4.875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.9.0\"]) .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.9.0\"]){--t-offset: 5.25rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.9.0\"]) .t-ipi-flag{margin:0 -.1875rem}[data-tui-version=\"5.9.0\"] .t-ipi-select{position:absolute;inset-inline-start:0;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}[data-tui-version=\"5.9.0\"] .t-ipi-select_readonly{pointer-events:none}[data-tui-version=\"5.9.0\"] .t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}[data-tui-version=\"5.9.0\"] .t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}[data-tui-version=\"5.9.0\"] .t-ipi-code{color:var(--tui-text-secondary)}[data-tui-version=\"5.9.0\"] .t-ipi-search{position:sticky;z-index:1;inset-block-start:0;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){[data-tui-version=\"5.9.0\"] .t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}[data-tui-version=\"5.9.0\"] tui-dropdown-mobile .t-ipi-search,[data-tui-version=\"5.9.0\"] tui-sheet-dialog .t-ipi-search{background:var(--tui-background-elevation-1)}[data-tui-version=\"5.9.0\"] tui-dropdown-mobile .t-ipi-options:not(:first-child),[data-tui-version=\"5.9.0\"] tui-sheet-dialog .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}[data-tui-version=\"5.9.0\"] tui-sheet-dialog .t-ipi-search{inset-block-start:4.5rem;padding-inline-start:0;padding-inline-end:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: TuiAutoFocus, selector: "[tuiAutoFocus]", inputs: ["tuiAutoFocus"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i5.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i5.TuiOption, selector: "button[tuiOption], a[tuiOption], label[tuiOption]", inputs: ["disabled"] }, { kind: "pipe", type: TuiFlagPipe, name: "tuiFlag" }, { kind: "component", type: i6.TuiTextfieldComponent, selector: "tui-textfield:not([multi])", inputs: ["content", "filler"] }, { kind: "directive", type: i6.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i7.TuiDropdownContent, selector: "ng-template[tuiDropdown]" }, { kind: "directive", type: i2.TuiInputDirective, selector: "input[tuiInput]", inputs: ["readOnly", "invalid", "focused", "state"] }, { kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
184
+ tuiAsTextfieldContent(() => TuiInputPhoneInternationalContent),
185
+ ], usesInheritance: true, hostDirectives: [{ directive: i1$1.MaskitoDirective }, { directive: i4.TuiWithInput }, { directive: i3$1.TuiAppearanceProxy }, { directive: i3.TuiTextfieldContent }], ngImport: i0 }); }
155
186
  }
156
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiInputPhoneInternationalComponent, decorators: [{
157
- type: Component,
158
- args: [{ selector: 'input[tuiInputPhoneInternational]', imports: [
159
- FormsModule,
160
- NgTemplateOutlet,
161
- TuiAutoFocus,
162
- TuiButton,
163
- TuiChevron,
164
- TuiDataList,
165
- TuiFlagPipe,
166
- TuiInput,
167
- TuiTextfieldContent,
168
- TuiTitle,
169
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPhoneInternationalComponent, decorators: [{
188
+ type: Directive,
189
+ args: [{
190
+ selector: 'input[tuiInputPhoneInternational]',
191
+ providers: [
170
192
  tuiAsControl(TuiInputPhoneInternationalComponent),
171
193
  tuiFallbackValueProvider(''),
172
194
  tuiAutoFocusOptionsProvider({ preventScroll: true }),
173
- ], hostDirectives: [MaskitoDirective, TuiWithInput, TuiAppearanceProxy], host: {
174
- ngSkipHydration: 'true',
195
+ tuiAsTextfieldContent(() => TuiInputPhoneInternationalContent),
196
+ ],
197
+ hostDirectives: [
198
+ MaskitoDirective,
199
+ TuiWithInput,
200
+ TuiAppearanceProxy,
201
+ TuiTextfieldContent,
202
+ ],
203
+ host: {
175
204
  type: 'tel',
176
205
  '[attr.inputmode]': '!ios && open() ? "none" : null',
177
206
  '[disabled]': 'disabled()',
178
207
  '(beforeinput.capture)': 'onPaste($event)',
179
208
  '(click)': 'open.set(false)',
180
209
  '(input)': 'masked.set($event.target.value)',
181
- }, template: "<ng-container *tuiTextfieldContent>\n <button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"mode()\"\n [class.t-ipi-select_readonly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"open()\"\n (click.prevent)=\"interactive() && open.set(!open())\"\n (pointerdown.stop)=\"(0)\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()[countryIsoCode()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"countryIsoCode() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-template #filter>\n <div class=\"t-ipi-search\">\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiInput\n type=\"text\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!ios\"\n (keydown.arrowDown)=\"list()[0]?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n</ng-template>\n<ng-container *tuiDropdown>\n <!-- To keep it under local injector -->\n @if (countrySearch()) {\n <ng-container *ngTemplateOutlet=\"filter\" />\n }\n <tui-data-list class=\"t-ipi-options\">\n @for (item of filtered(); track $index) {\n <button\n tuiOption\n type=\"button\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n }\n </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.9.0\"]){inset-inline-start:var(--t-offset);border-top-left-radius:0;border-bottom-left-radius:0;inline-size:calc(100% - var(--t-offset))}[tuiInputPhoneInternational][tuiInputPhoneInternational]:where(*[data-tui-version=\"5.9.0\"])+[tuiLabel][tuiLabel]{padding-inline-start:var(--t-offset)}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.9.0\"]){--t-offset: 4.125rem}tui-textfield[data-size=s]:where(*[data-tui-version=\"5.9.0\"]) .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.9.0\"]){--t-offset: 4.875rem}tui-textfield[data-size=m]:where(*[data-tui-version=\"5.9.0\"]) .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.9.0\"]){--t-offset: 5.25rem}tui-textfield[data-size=l]:where(*[data-tui-version=\"5.9.0\"]) .t-ipi-flag{margin:0 -.1875rem}[data-tui-version=\"5.9.0\"] .t-ipi-select{position:absolute;inset-inline-start:0;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}[data-tui-version=\"5.9.0\"] .t-ipi-select_readonly{pointer-events:none}[data-tui-version=\"5.9.0\"] .t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}[data-tui-version=\"5.9.0\"] .t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}[data-tui-version=\"5.9.0\"] .t-ipi-code{color:var(--tui-text-secondary)}[data-tui-version=\"5.9.0\"] .t-ipi-search{position:sticky;z-index:1;inset-block-start:0;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){[data-tui-version=\"5.9.0\"] .t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}[data-tui-version=\"5.9.0\"] tui-dropdown-mobile .t-ipi-search,[data-tui-version=\"5.9.0\"] tui-sheet-dialog .t-ipi-search{background:var(--tui-background-elevation-1)}[data-tui-version=\"5.9.0\"] tui-dropdown-mobile .t-ipi-options:not(:first-child),[data-tui-version=\"5.9.0\"] tui-sheet-dialog .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}[data-tui-version=\"5.9.0\"] tui-sheet-dialog .t-ipi-search{inset-block-start:4.5rem;padding-inline-start:0;padding-inline-end:0}\n"] }]
210
+ },
211
+ }]
182
212
  }] });
183
- function getCallingCode(iso, metadata) {
213
+ function tuiGetCallingCode(iso, metadata) {
184
214
  return metadata ? CHAR_PLUS + getCountryCallingCode(iso, metadata) : '';
185
215
  }
186
216
 
187
217
  const TuiInputPhoneInternational = [
188
218
  TuiInputPhoneInternationalComponent,
219
+ TuiInputPhoneInternationalContent,
189
220
  TuiLabel,
190
221
  TuiTextfieldComponent,
191
222
  TuiTextfieldOptionsDirective,
@@ -196,5 +227,5 @@ const TuiInputPhoneInternational = [
196
227
  * Generated bundle index. Do not edit.
197
228
  */
198
229
 
199
- export { TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS, TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS, TuiInputPhoneInternational, TuiInputPhoneInternationalComponent, tuiInputPhoneInternationalOptionsProvider };
230
+ export { TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS, TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS, TuiInputPhoneInternational, TuiInputPhoneInternationalComponent, TuiInputPhoneInternationalContent, tuiGetCallingCode, tuiInputPhoneInternationalOptionsProvider };
200
231
  //# sourceMappingURL=taiga-ui-kit-components-input-phone-international.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-components-input-phone-international.mjs","sources":["../../../projects/kit/components/input-phone-international/input-phone-international.options.ts","../../../projects/kit/components/input-phone-international/input-phone-international.component.ts","../../../projects/kit/components/input-phone-international/input-phone-international.template.html","../../../projects/kit/components/input-phone-international/input-phone-international.ts","../../../projects/kit/components/input-phone-international/taiga-ui-kit-components-input-phone-international.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {type TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {type MetadataJson} from 'libphonenumber-js/core';\nimport {type Observable, of} from 'rxjs';\n\nexport interface TuiInputPhoneInternationalOptions {\n readonly countries: readonly TuiCountryIsoCode[];\n readonly countrySearch: boolean;\n readonly countryIsoCode: TuiCountryIsoCode;\n readonly metadata: Observable<MetadataJson> | Promise<MetadataJson>;\n readonly separator: string;\n}\n\nexport const TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS: TuiInputPhoneInternationalOptions =\n {\n countries: [],\n countrySearch: false,\n countryIsoCode: 'RU',\n metadata: of({\n version: 4,\n countries: {},\n country_calling_codes: {},\n nonGeographic: {},\n }),\n separator: '-',\n };\n\n/**\n * Default parameters for input phone international component\n */\nexport const [\n TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS,\n tuiInputPhoneInternationalOptionsProvider,\n] = tuiCreateOptions(TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS);\n","import {NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n signal,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\nimport {FormsModule} from '@angular/forms';\nimport {MaskitoDirective} from '@maskito/angular';\nimport {\n MASKITO_DEFAULT_OPTIONS,\n maskitoInitialCalibrationPlugin,\n type MaskitoOptions,\n maskitoTransform,\n} from '@maskito/core';\nimport {maskitoGetCountryFromNumber, maskitoPhoneOptionsGenerator} from '@maskito/phone';\nimport {WA_IS_IOS} from '@ng-web-apis/platform';\nimport {tuiAsControl, TuiControl} from '@taiga-ui/cdk/classes';\nimport {CHAR_PLUS, TUI_DEFAULT_MATCHER, TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {TuiActiveZone} from '@taiga-ui/cdk/directives/active-zone';\nimport {\n TuiAutoFocus,\n tuiAutoFocusOptionsProvider,\n} from '@taiga-ui/cdk/directives/auto-focus';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement, tuiIsInputEvent, tuiValue} from '@taiga-ui/cdk/utils/dom';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiDataList, TuiOption} from '@taiga-ui/core/components/data-list';\nimport {TuiInput, TuiWithInput} from '@taiga-ui/core/components/input';\nimport {\n TUI_TEXTFIELD_OPTIONS,\n TuiTextfieldContent,\n} from '@taiga-ui/core/components/textfield';\nimport {TuiTitle} from '@taiga-ui/core/components/title';\nimport {tuiDropdownEnabled, TuiDropdownOpen} from '@taiga-ui/core/portals/dropdown';\nimport {TUI_COMMON_ICONS} from '@taiga-ui/core/tokens';\nimport {type TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {TuiAppearanceProxy} from '@taiga-ui/kit/directives/appearance-proxy';\nimport {TuiChevron} from '@taiga-ui/kit/directives/chevron';\nimport {TuiFlagPipe} from '@taiga-ui/kit/pipes/flag';\nimport {TUI_COUNTRIES, TUI_INTERNATIONAL_SEARCH} from '@taiga-ui/kit/tokens';\nimport {tuiMaskito} from '@taiga-ui/kit/utils';\nimport {\n getCountryCallingCode,\n type MetadataJson,\n validatePhoneNumberLength,\n} from 'libphonenumber-js/core';\nimport {filter, from} from 'rxjs';\n\nimport {TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS} from './input-phone-international.options';\n\nconst NOT_FORM_CONTROL_SYMBOLS = /[^+\\d]/g;\n\n@Component({\n selector: 'input[tuiInputPhoneInternational]',\n imports: [\n FormsModule,\n NgTemplateOutlet,\n TuiAutoFocus,\n TuiButton,\n TuiChevron,\n TuiDataList,\n TuiFlagPipe,\n TuiInput,\n TuiTextfieldContent,\n TuiTitle,\n ],\n templateUrl: './input-phone-international.template.html',\n styles: `\n [data-tui-version='${TUI_VERSION}'] {\n @import './input-phone-international.style.less';\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n tuiAsControl(TuiInputPhoneInternationalComponent),\n tuiFallbackValueProvider(''),\n tuiAutoFocusOptionsProvider({preventScroll: true}),\n ],\n hostDirectives: [MaskitoDirective, TuiWithInput, TuiAppearanceProxy],\n host: {\n ngSkipHydration: 'true',\n type: 'tel',\n '[attr.inputmode]': '!ios && open() ? \"none\" : null',\n '[disabled]': 'disabled()',\n '(beforeinput.capture)': 'onPaste($event)',\n '(click)': 'open.set(false)',\n '(input)': 'masked.set($event.target.value)',\n },\n})\nexport class TuiInputPhoneInternationalComponent extends TuiControl<string> {\n protected readonly list = viewChildren(TuiOption, {read: ElementRef});\n protected readonly el = tuiInjectElement<HTMLInputElement>();\n protected readonly ios = inject(WA_IS_IOS);\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly options = inject(TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS);\n protected readonly label = inject(TUI_INTERNATIONAL_SEARCH);\n protected readonly metadata = toSignal(from(this.options.metadata));\n protected readonly names = inject(TUI_COUNTRIES);\n protected readonly open = inject(TuiDropdownOpen).open;\n protected readonly dropdownEnabled = tuiDropdownEnabled(this.interactive);\n protected readonly change = effect(() => this.onChange(this.unmask(this.masked())));\n protected readonly search = signal('');\n protected readonly size = inject(TUI_TEXTFIELD_OPTIONS).size;\n protected readonly masked = tuiValue(this.el);\n\n protected readonly mask = tuiMaskito(\n computed(() => this.computeMask(this.countryIsoCode(), this.metadata())),\n );\n\n protected readonly filtered = computed(() =>\n this.countries()\n .map((iso) => ({\n iso,\n name: this.names()?.[iso] || '',\n code: getCallingCode(iso, this.metadata()),\n }))\n .filter(({name, code}) =>\n TUI_DEFAULT_MATCHER(`${name}${code}`, this.search()),\n ),\n );\n\n protected readonly $ = inject(TuiActiveZone)\n .tuiActiveZoneChange.pipe(\n filter(() => !this.readOnly()),\n takeUntilDestroyed(),\n )\n .subscribe((active) => {\n const prefix = `${getCallingCode(this.countryIsoCode(), this.metadata())} `;\n\n this.search.set('');\n this.masked.update((value) => {\n const fallback = active ? value || prefix : value;\n\n return value === prefix ? '' : fallback;\n });\n });\n\n public readonly countrySearch = input(this.options.countrySearch);\n public readonly countryIsoCode = model(this.options.countryIsoCode);\n public readonly countries = input(this.options.countries);\n\n public override writeValue(unmasked: string | null): void {\n const code = this.getCountryCode(unmasked ?? '');\n\n if (code) {\n this.countryIsoCode.set(code);\n }\n\n super.writeValue(unmasked);\n this.masked.set(\n maskitoTransform(this.value() ?? '', this.mask() || MASKITO_DEFAULT_OPTIONS),\n );\n }\n\n protected onPaste(event: Event): void {\n const data = tuiIsInputEvent(event) && event.data;\n\n if (\n !data ||\n (!event.inputType.includes('Drop') && !event.inputType.includes('Paste'))\n ) {\n return;\n }\n\n const code = this.getCountryCode(data);\n\n if (code) {\n this.countryIsoCode.set(code);\n }\n }\n\n protected onItemClick(code: TuiCountryIsoCode): void {\n this.el.focus();\n this.open.set(false);\n this.countryIsoCode.set(code);\n this.search.set('');\n this.masked.set(\n maskitoTransform(\n this.value() || getCallingCode(code, this.metadata()),\n this.mask() || MASKITO_DEFAULT_OPTIONS,\n ),\n );\n }\n\n private computeMask(\n countryIsoCode: TuiCountryIsoCode,\n metadata?: MetadataJson,\n ): MaskitoOptions {\n if (!metadata) {\n return MASKITO_DEFAULT_OPTIONS;\n }\n\n const {plugins, ...options} = maskitoPhoneOptionsGenerator({\n countryIsoCode,\n metadata,\n separator: this.options.separator,\n });\n\n return {\n ...options,\n plugins: [...plugins, maskitoInitialCalibrationPlugin()],\n };\n }\n\n private unmask(maskedValue: string): string {\n const value = maskedValue.replaceAll(NOT_FORM_CONTROL_SYMBOLS, '');\n const code = getCallingCode(this.countryIsoCode(), this.metadata());\n\n return value === code ? '' : value;\n }\n\n private getCountryCode(value: string): TuiCountryIsoCode | null {\n const metadata = this.metadata();\n const phone = value.startsWith(CHAR_PLUS) ? value : `${CHAR_PLUS}${value}`;\n\n return metadata && validatePhoneNumberLength(phone, metadata) !== 'TOO_SHORT'\n ? (maskitoGetCountryFromNumber(phone, metadata) ?? null)\n : null;\n }\n}\n\nfunction getCallingCode(iso: TuiCountryIsoCode, metadata?: MetadataJson | null): string {\n return metadata ? CHAR_PLUS + getCountryCallingCode(iso, metadata) : '';\n}\n","<ng-container *tuiTextfieldContent>\n <button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"mode()\"\n [class.t-ipi-select_readonly]=\"readOnly()\"\n [disabled]=\"disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"open()\"\n (click.prevent)=\"interactive() && open.set(!open())\"\n (pointerdown.stop)=\"(0)\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()[countryIsoCode()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"countryIsoCode() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-template #filter>\n <div class=\"t-ipi-search\">\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiInput\n type=\"text\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!ios\"\n (keydown.arrowDown)=\"list()[0]?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n</ng-template>\n<ng-container *tuiDropdown>\n <!-- To keep it under local injector -->\n @if (countrySearch()) {\n <ng-container *ngTemplateOutlet=\"filter\" />\n }\n <tui-data-list class=\"t-ipi-options\">\n @for (item of filtered(); track $index) {\n <button\n tuiOption\n type=\"button\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n }\n </tui-data-list>\n</ng-container>\n","import {TuiLabel} from '@taiga-ui/core/components/label';\nimport {\n TuiTextfieldComponent,\n TuiTextfieldOptionsDirective,\n} from '@taiga-ui/core/components/textfield';\nimport {TuiDropdownContent} from '@taiga-ui/core/portals/dropdown';\n\nimport {TuiInputPhoneInternationalComponent} from './input-phone-international.component';\n\nexport const TuiInputPhoneInternational = [\n TuiInputPhoneInternationalComponent,\n TuiLabel,\n TuiTextfieldComponent,\n TuiTextfieldOptionsDirective,\n TuiDropdownContent,\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-input-phone-international.mjs","sources":["../../../projects/kit/components/input-phone-international/input-phone-international.options.ts","../../../projects/kit/components/input-phone-international/input-phone-international-content.component.ts","../../../projects/kit/components/input-phone-international/input-phone-international-content.template.html","../../../projects/kit/components/input-phone-international/input-phone-international.component.ts","../../../projects/kit/components/input-phone-international/input-phone-international.ts","../../../projects/kit/components/input-phone-international/taiga-ui-kit-components-input-phone-international.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport {type TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {type MetadataJson} from 'libphonenumber-js/core';\nimport {type Observable, of} from 'rxjs';\n\nexport interface TuiInputPhoneInternationalOptions {\n readonly countries: readonly TuiCountryIsoCode[];\n readonly countrySearch: boolean;\n readonly countryIsoCode: TuiCountryIsoCode;\n readonly metadata: Observable<MetadataJson> | Promise<MetadataJson>;\n readonly separator: string;\n}\n\nexport const TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS: TuiInputPhoneInternationalOptions =\n {\n countries: [],\n countrySearch: false,\n countryIsoCode: 'RU',\n metadata: of({\n version: 4,\n countries: {},\n country_calling_codes: {},\n nonGeographic: {},\n }),\n separator: '-',\n };\n\n/**\n * Default parameters for input phone international component\n */\nexport const [\n TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS,\n tuiInputPhoneInternationalOptionsProvider,\n] = tuiCreateOptions(TUI_INPUT_PHONE_INTERNATIONAL_DEFAULT_OPTIONS);\n","import {NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {MASKITO_DEFAULT_OPTIONS, maskitoTransform} from '@maskito/core';\nimport {WA_IS_IOS} from '@ng-web-apis/platform';\nimport {TUI_DEFAULT_MATCHER, TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {TuiAutoFocus} from '@taiga-ui/cdk/directives/auto-focus';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiDataList, TuiOption} from '@taiga-ui/core/components/data-list';\nimport {TuiInput} from '@taiga-ui/core/components/input';\nimport {TUI_TEXTFIELD_OPTIONS, TuiTextfield} from '@taiga-ui/core/components/textfield';\nimport {TuiTitle} from '@taiga-ui/core/components/title';\nimport {TuiDropdownContent} from '@taiga-ui/core/portals/dropdown';\nimport {TUI_COMMON_ICONS} from '@taiga-ui/core/tokens';\nimport {type TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {TuiChevron} from '@taiga-ui/kit/directives/chevron';\nimport {TuiFlagPipe} from '@taiga-ui/kit/pipes/flag';\nimport {TUI_COUNTRIES, TUI_INTERNATIONAL_SEARCH} from '@taiga-ui/kit/tokens';\n\nimport {\n tuiGetCallingCode,\n TuiInputPhoneInternationalComponent,\n} from './input-phone-international.component';\n\n@Component({\n selector: 'tui-input-phone-international-content',\n imports: [\n FormsModule,\n NgTemplateOutlet,\n TuiAutoFocus,\n TuiButton,\n TuiChevron,\n TuiDataList,\n TuiDropdownContent,\n TuiFlagPipe,\n TuiInput,\n TuiOption,\n TuiTextfield,\n TuiTitle,\n ],\n templateUrl: './input-phone-international-content.template.html',\n styles: `\n [data-tui-version='${TUI_VERSION}'] {\n @import './input-phone-international.style.less';\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {'data-tui-version': TUI_VERSION},\n})\nexport class TuiInputPhoneInternationalContent {\n protected readonly host = inject(TuiInputPhoneInternationalComponent);\n protected readonly list = viewChildren(TuiOption, {read: ElementRef});\n protected readonly ios = inject(WA_IS_IOS);\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly label = inject(TUI_INTERNATIONAL_SEARCH);\n protected readonly names = inject(TUI_COUNTRIES);\n protected readonly size = inject(TUI_TEXTFIELD_OPTIONS).size;\n\n protected readonly filtered = computed(() => {\n const metadata = this.host.metadata();\n\n return this.host\n .countries()\n .map((iso) => ({\n iso,\n name: this.names()[iso] || '',\n code: tuiGetCallingCode(iso, metadata),\n }))\n .filter(({name, code}) =>\n TUI_DEFAULT_MATCHER(`${name}${code}`, this.host.search()),\n );\n });\n\n protected onItemClick(code: TuiCountryIsoCode): void {\n this.host.el.focus();\n this.host.open.set(false);\n this.host.countryIsoCode.set(code);\n this.host.search.set('');\n this.host.masked.set(\n maskitoTransform(\n this.host.value() || tuiGetCallingCode(code, this.host.metadata()),\n this.host.mask() || MASKITO_DEFAULT_OPTIONS,\n ),\n );\n }\n}\n","<button\n appearance=\"textfield\"\n tabindex=\"-1\"\n tuiButton\n tuiChevron\n type=\"button\"\n class=\"t-ipi-select\"\n [attr.data-mode]=\"host.mode()\"\n [class.t-ipi-select_readonly]=\"host.readOnly()\"\n [disabled]=\"host.disabled()\"\n [size]=\"size()\"\n [tuiAppearanceFocus]=\"host.open()\"\n (click.prevent)=\"host.interactive() && host.open.set(!host.open())\"\n (pointerdown.stop)=\"(0)\"\n>\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()[host.countryIsoCode()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"host.countryIsoCode() | tuiFlag\"\n />\n</button>\n<ng-template #filter>\n <div class=\"t-ipi-search\">\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiInput\n type=\"text\"\n [ngModel]=\"host.search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!ios\"\n (keydown.arrowDown)=\"list()[0]?.nativeElement?.focus()\"\n (ngModelChange)=\"host.search.set($event)\"\n />\n </tui-textfield>\n </div>\n</ng-template>\n<ng-container *tuiDropdown>\n @if (host.countrySearch()) {\n <ng-container *ngTemplateOutlet=\"filter\" />\n }\n <tui-data-list class=\"t-ipi-options\">\n @for (item of filtered(); track item.iso) {\n <button\n tuiOption\n type=\"button\"\n (click)=\"onItemClick(item.iso)\"\n >\n <img\n alt=\"\"\n class=\"t-ipi-flag\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"item.iso | tuiFlag\"\n />\n <span tuiTitle>{{ item.name }}</span>\n <span class=\"t-ipi-code\">{{ item.code }}</span>\n </button>\n }\n </tui-data-list>\n</ng-container>\n","import {computed, Directive, effect, inject, input, model, signal} from '@angular/core';\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\nimport {MaskitoDirective} from '@maskito/angular';\nimport {\n MASKITO_DEFAULT_OPTIONS,\n maskitoInitialCalibrationPlugin,\n type MaskitoOptions,\n maskitoTransform,\n} from '@maskito/core';\nimport {maskitoGetCountryFromNumber, maskitoPhoneOptionsGenerator} from '@maskito/phone';\nimport {WA_IS_IOS} from '@ng-web-apis/platform';\nimport {tuiAsControl, TuiControl} from '@taiga-ui/cdk/classes';\nimport {CHAR_PLUS} from '@taiga-ui/cdk/constants';\nimport {TuiActiveZone} from '@taiga-ui/cdk/directives/active-zone';\nimport {tuiAutoFocusOptionsProvider} from '@taiga-ui/cdk/directives/auto-focus';\nimport {tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement, tuiIsInputEvent, tuiValue} from '@taiga-ui/cdk/utils/dom';\nimport {TuiWithInput} from '@taiga-ui/core/components/input';\nimport {\n tuiAsTextfieldContent,\n TuiTextfieldContent,\n} from '@taiga-ui/core/components/textfield';\nimport {tuiDropdownEnabled, TuiDropdownOpen} from '@taiga-ui/core/portals/dropdown';\nimport {type TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {TuiAppearanceProxy} from '@taiga-ui/kit/directives/appearance-proxy';\nimport {tuiMaskito} from '@taiga-ui/kit/utils';\nimport {\n getCountryCallingCode,\n type MetadataJson,\n validatePhoneNumberLength,\n} from 'libphonenumber-js/core';\nimport {filter, from} from 'rxjs';\n\nimport {TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS} from './input-phone-international.options';\nimport {TuiInputPhoneInternationalContent} from './input-phone-international-content.component';\n\nconst NOT_FORM_CONTROL_SYMBOLS = /[^+\\d]/g;\n\n@Directive({\n selector: 'input[tuiInputPhoneInternational]',\n providers: [\n tuiAsControl(TuiInputPhoneInternationalComponent),\n tuiFallbackValueProvider(''),\n tuiAutoFocusOptionsProvider({preventScroll: true}),\n tuiAsTextfieldContent(() => TuiInputPhoneInternationalContent),\n ],\n hostDirectives: [\n MaskitoDirective,\n TuiWithInput,\n TuiAppearanceProxy,\n TuiTextfieldContent,\n ],\n host: {\n type: 'tel',\n '[attr.inputmode]': '!ios && open() ? \"none\" : null',\n '[disabled]': 'disabled()',\n '(beforeinput.capture)': 'onPaste($event)',\n '(click)': 'open.set(false)',\n '(input)': 'masked.set($event.target.value)',\n },\n})\n// TODO(v6): rename to TuiInputPhoneInternationalDirective\nexport class TuiInputPhoneInternationalComponent extends TuiControl<string> {\n private readonly options = inject(TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS);\n\n public readonly el = tuiInjectElement<HTMLInputElement>();\n\n protected readonly ios = inject(WA_IS_IOS);\n protected readonly dropdownEnabled = tuiDropdownEnabled(this.interactive);\n\n public readonly masked = tuiValue(this.el);\n\n public readonly mask = tuiMaskito(\n computed(() => this.computeMask(this.countryIsoCode(), this.metadata())),\n );\n\n protected readonly change = effect(() => this.onChange(this.unmask(this.masked())));\n\n protected readonly $ = inject(TuiActiveZone)\n .tuiActiveZoneChange.pipe(\n filter(() => !this.readOnly()),\n takeUntilDestroyed(),\n )\n .subscribe((active) => {\n const prefix = `${tuiGetCallingCode(this.countryIsoCode(), this.metadata())} `;\n\n this.search.set('');\n this.masked.update((value) => {\n const fallback = active ? value || prefix : value;\n\n return value === prefix ? '' : fallback;\n });\n });\n\n public readonly metadata = toSignal(from(this.options.metadata));\n public readonly open = inject(TuiDropdownOpen).open;\n public readonly search = signal('');\n public readonly countrySearch = input(this.options.countrySearch);\n public readonly countryIsoCode = model(this.options.countryIsoCode);\n public readonly countries = input(this.options.countries);\n\n public override writeValue(unmasked: string | null): void {\n const code = this.getCountryCode(unmasked ?? '');\n\n if (code) {\n this.countryIsoCode.set(code);\n }\n\n super.writeValue(unmasked);\n this.masked.set(\n maskitoTransform(this.value() ?? '', this.mask() || MASKITO_DEFAULT_OPTIONS),\n );\n }\n\n protected onPaste(event: Event): void {\n const data = tuiIsInputEvent(event) && event.data;\n\n if (\n !data ||\n (!event.inputType.includes('Drop') && !event.inputType.includes('Paste'))\n ) {\n return;\n }\n\n const code = this.getCountryCode(data);\n\n if (code) {\n this.countryIsoCode.set(code);\n }\n }\n\n private computeMask(\n countryIsoCode: TuiCountryIsoCode,\n metadata?: MetadataJson,\n ): MaskitoOptions {\n if (!metadata) {\n return MASKITO_DEFAULT_OPTIONS;\n }\n\n const {plugins, ...options} = maskitoPhoneOptionsGenerator({\n countryIsoCode,\n metadata,\n separator: this.options.separator,\n });\n\n return {\n ...options,\n plugins: [...plugins, maskitoInitialCalibrationPlugin()],\n };\n }\n\n private unmask(maskedValue: string): string {\n const value = maskedValue.replaceAll(NOT_FORM_CONTROL_SYMBOLS, '');\n const code = tuiGetCallingCode(this.countryIsoCode(), this.metadata());\n\n return value === code ? '' : value;\n }\n\n private getCountryCode(value: string): TuiCountryIsoCode | null {\n const metadata = this.metadata();\n const phone = value.startsWith(CHAR_PLUS) ? value : `${CHAR_PLUS}${value}`;\n\n return metadata && validatePhoneNumberLength(phone, metadata) !== 'TOO_SHORT'\n ? (maskitoGetCountryFromNumber(phone, metadata) ?? null)\n : null;\n }\n}\n\nexport function tuiGetCallingCode(\n iso: TuiCountryIsoCode,\n metadata?: MetadataJson | null,\n): string {\n return metadata ? CHAR_PLUS + getCountryCallingCode(iso, metadata) : '';\n}\n","import {TuiLabel} from '@taiga-ui/core/components/label';\nimport {\n TuiTextfieldComponent,\n TuiTextfieldOptionsDirective,\n} from '@taiga-ui/core/components/textfield';\nimport {TuiDropdownContent} from '@taiga-ui/core/portals/dropdown';\n\nimport {TuiInputPhoneInternationalComponent} from './input-phone-international.component';\nimport {TuiInputPhoneInternationalContent} from './input-phone-international-content.component';\n\nexport const TuiInputPhoneInternational = [\n TuiInputPhoneInternationalComponent,\n TuiInputPhoneInternationalContent,\n TuiLabel,\n TuiTextfieldComponent,\n TuiTextfieldOptionsDirective,\n TuiDropdownContent,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}
@@ -152,13 +152,13 @@ class TuiInputPhoneDirective extends TuiControl {
152
152
  ],
153
153
  };
154
154
  }
155
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiInputPhoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
156
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.21", type: TuiInputPhoneDirective, isStandalone: true, selector: "input[tuiInputPhone]", inputs: { allowText: { classPropertyName: "allowText", publicName: "allowText", isSignal: true, isRequired: false, transformFunction: null }, mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "tel" }, listeners: { "input": "onInput($event.target.value)" }, properties: { "disabled": "disabled()", "inputMode": "inputMode()" } }, providers: [
155
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPhoneDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
156
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.23", type: TuiInputPhoneDirective, isStandalone: true, selector: "input[tuiInputPhone]", inputs: { allowText: { classPropertyName: "allowText", publicName: "allowText", isSignal: true, isRequired: false, transformFunction: null }, mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "type": "tel" }, listeners: { "input": "onInput($event.target.value)" }, properties: { "disabled": "disabled()", "inputMode": "inputMode()" } }, providers: [
157
157
  tuiAsControl(TuiInputPhoneDirective),
158
158
  tuiValueTransformerFrom(TUI_INPUT_PHONE_OPTIONS),
159
159
  ], usesInheritance: true, hostDirectives: [{ directive: i1.TuiWithInput }, { directive: i2.MaskitoDirective }], ngImport: i0 }); }
160
160
  }
161
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiInputPhoneDirective, decorators: [{
161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPhoneDirective, decorators: [{
162
162
  type: Directive,
163
163
  args: [{
164
164
  selector: 'input[tuiInputPhone]',
@@ -1,22 +1,40 @@
1
1
  import { TuiLabel } from '@taiga-ui/core/components/label';
2
- import { TUI_TEXTFIELD_OPTIONS, TuiTextfieldContent, TuiTextfieldComponent, TuiTextfieldOptionsDirective } from '@taiga-ui/core/components/textfield';
2
+ import * as i2 from '@taiga-ui/core/components/textfield';
3
+ import { TUI_TEXTFIELD_OPTIONS, tuiAsTextfieldContent, TuiTextfieldContent, TuiTextfieldComponent, TuiTextfieldOptionsDirective } from '@taiga-ui/core/components/textfield';
3
4
  import { TuiDropdownContent } from '@taiga-ui/core/portals/dropdown';
4
5
  import * as i0 from '@angular/core';
5
- import { inject, computed, input, ChangeDetectionStrategy, Component } from '@angular/core';
6
- import { NgControl } from '@angular/forms';
6
+ import { inject, ChangeDetectionStrategy, ViewEncapsulation, Component, signal, computed, input, Directive } from '@angular/core';
7
7
  import * as i1 from '@maskito/angular';
8
8
  import { MaskitoDirective } from '@maskito/angular';
9
- import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
10
- import { tuiIsFocused } from '@taiga-ui/cdk/utils/focus';
9
+ import { TUI_VERSION } from '@taiga-ui/cdk/constants';
10
+ import { tuiInjectElement, tuiValue } from '@taiga-ui/cdk/utils/dom';
11
+ import { tuiFocusedIn } from '@taiga-ui/cdk/utils/focus';
11
12
  import { tuiIsString } from '@taiga-ui/cdk/utils/miscellaneous';
12
- import { TuiAppearance } from '@taiga-ui/core/directives/appearance';
13
13
  import { tuiMaskito } from '@taiga-ui/kit/utils';
14
+ import { NgControl } from '@angular/forms';
15
+ import { TuiAppearance } from '@taiga-ui/core/directives/appearance';
14
16
 
15
- class TuiInputPinComponent {
17
+ class TuiInputPinContent {
16
18
  constructor() {
17
- this.el = tuiInjectElement();
19
+ this.pin = inject(TuiInputPinComponent);
18
20
  this.appearance = inject(TUI_TEXTFIELD_OPTIONS).appearance;
19
21
  this.control = inject(NgControl);
22
+ }
23
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPinContent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.23", type: TuiInputPinContent, isStandalone: true, selector: "tui-input-pin-content", host: { attributes: { "aria-hidden": "true", "data-tui-version": "5.10.0-canary.9984aef" } }, ngImport: i0, template: "@for (_ of '-'.repeat(pin.el.maxLength); track $index) {\n <label\n class=\"t-item\"\n [tuiAppearance]=\"appearance()\"\n [tuiAppearanceFocus]=\"pin.isFocused($index)\"\n [tuiAppearanceMode]=\"control.invalid && control.touched ? 'invalid' : null\"\n (pointerdown.prevent)=\"pin.onClick($index)\"\n >\n <span\n class=\"t-value\"\n [class.t-value_filled]=\"pin.value()[$index]\"\n [textContent]=\"pin.value()[$index] || pin.el.placeholder[$index]\"\n ></span>\n </label>\n}\n", styles: ["@keyframes blink{50%{opacity:0}}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){position:absolute;inset-block-start:0;inset-inline-start:0;inline-size:100%;block-size:100%;display:flex;gap:inherit;border-radius:inherit}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item{display:flex;flex:1;align-items:center;justify-content:center;border-radius:inherit;pointer-events:auto;cursor:text;margin-inline-start:.25rem}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item:first-child{pointer-events:none;margin:0}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item[data-focus=true] .t-value_filled{background:var(--tui-service-selection-background)}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item[data-focus=true] .t-value_filled:before{display:none}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item[data-focus=true] .t-value:before{content:\"\";block-size:1em;border-inline-start:1px solid var(--tui-text-primary);animation:blink 1s steps(1) infinite}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-value{color:var(--tui-text-secondary)}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-value_filled{color:var(--tui-text-primary)}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){position:absolute;inset:0;color:transparent;background:transparent;border:none;outline:none;--t-caret-color: rgba(255, 255, 255, .01);caret-color:var(--t-caret-color)}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])::selection{background:transparent}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])::placeholder{color:transparent!important}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])+.t-content{gap:inherit!important}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])+.t-content [tuiButtonX]{display:none!important}[tuiTheme=dark] input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-caret-color: rgba(50, 50, 50, .01)}\n"], dependencies: [{ kind: "directive", type: TuiAppearance, selector: "[tuiAppearance]", inputs: ["tuiAppearance", "tuiAppearanceState", "tuiAppearanceFocus", "tuiAppearanceMode"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPinContent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'tui-input-pin-content', imports: [TuiAppearance], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { 'aria-hidden': 'true', 'data-tui-version': TUI_VERSION }, template: "@for (_ of '-'.repeat(pin.el.maxLength); track $index) {\n <label\n class=\"t-item\"\n [tuiAppearance]=\"appearance()\"\n [tuiAppearanceFocus]=\"pin.isFocused($index)\"\n [tuiAppearanceMode]=\"control.invalid && control.touched ? 'invalid' : null\"\n (pointerdown.prevent)=\"pin.onClick($index)\"\n >\n <span\n class=\"t-value\"\n [class.t-value_filled]=\"pin.value()[$index]\"\n [textContent]=\"pin.value()[$index] || pin.el.placeholder[$index]\"\n ></span>\n </label>\n}\n", styles: ["@keyframes blink{50%{opacity:0}}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){position:absolute;inset-block-start:0;inset-inline-start:0;inline-size:100%;block-size:100%;display:flex;gap:inherit;border-radius:inherit}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item{display:flex;flex:1;align-items:center;justify-content:center;border-radius:inherit;pointer-events:auto;cursor:text;margin-inline-start:.25rem}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item:first-child{pointer-events:none;margin:0}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item[data-focus=true] .t-value_filled{background:var(--tui-service-selection-background)}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item[data-focus=true] .t-value_filled:before{display:none}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-item[data-focus=true] .t-value:before{content:\"\";block-size:1em;border-inline-start:1px solid var(--tui-text-primary);animation:blink 1s steps(1) infinite}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-value{color:var(--tui-text-secondary)}tui-input-pin-content:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]) .t-value_filled{color:var(--tui-text-primary)}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){position:absolute;inset:0;color:transparent;background:transparent;border:none;outline:none;--t-caret-color: rgba(255, 255, 255, .01);caret-color:var(--t-caret-color)}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])::selection{background:transparent}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])::placeholder{color:transparent!important}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])+.t-content{gap:inherit!important}input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"])+.t-content [tuiButtonX]{display:none!important}[tuiTheme=dark] input[tuiInputPin]:where(*[data-tui-version=\"5.10.0-canary.9984aef\"]){--t-caret-color: rgba(50, 50, 50, .01)}\n"] }]
29
+ }] });
30
+
31
+ // TODO(v6): rename to TuiInputPinDirective
32
+ class TuiInputPinComponent {
33
+ constructor() {
34
+ this.selectionStart = signal(null);
35
+ this.el = tuiInjectElement();
36
+ this.value = tuiValue(this.el);
37
+ this.focused = tuiFocusedIn(this.el);
20
38
  this.maskito = tuiMaskito(computed(() => ({ mask: this.mask(), overwriteMode: 'replace' })));
21
39
  this.mask = input(/^\d+$/, {
22
40
  transform: (mask) => tuiIsString(mask) ? new RegExp(mask) : mask,
@@ -27,28 +45,36 @@ class TuiInputPinComponent {
27
45
  this.el.setSelectionRange(index, index + 1);
28
46
  }
29
47
  onSelection() {
30
- if (this.el.selectionStart === this.el.maxLength) {
31
- this.el.setSelectionRange(this.el.maxLength - 1, this.el.maxLength - 1);
48
+ const { selectionStart, selectionEnd, maxLength, value } = this.el;
49
+ if (selectionStart === maxLength) {
50
+ this.el.setSelectionRange(maxLength - 1, maxLength - 1);
32
51
  }
52
+ else if (!selectionStart && !selectionEnd && value) {
53
+ this.el.setSelectionRange(0, 1);
54
+ }
55
+ this.selectionStart.set(this.el.selectionStart);
33
56
  }
34
57
  isFocused(index) {
35
- return (tuiIsFocused(this.el) &&
36
- (this.el.selectionStart === index ||
37
- (this.el.selectionStart === this.el.maxLength &&
38
- index === this.el.maxLength - 1)));
58
+ return (this.focused() && (this.selectionStart() ?? this.el.selectionStart) === index);
39
59
  }
40
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiInputPinComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
41
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: TuiInputPinComponent, isStandalone: true, selector: "input[tuiInputPin]", inputs: { mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "inputmode": "numeric", "ngSkipHydration": "true", "spellcheck": "false" }, listeners: { "pointerdown.prevent": "onClick(0)", "selectionchange": "onSelection()" } }, hostDirectives: [{ directive: i1.MaskitoDirective }], ngImport: i0, template: "<div\n *tuiTextfieldContent\n class=\"t-wrapper\"\n>\n @for (_ of '-'.repeat(el.maxLength); track $index) {\n <label\n class=\"t-item\"\n [tuiAppearance]=\"appearance()\"\n [tuiAppearanceFocus]=\"isFocused($index)\"\n [tuiAppearanceMode]=\"control.invalid && control.touched ? 'invalid' : null\"\n (pointerdown.prevent)=\"onClick($index)\"\n >\n <span\n class=\"t-value\"\n [class.t-value_filled]=\"el.value[$index]\"\n [textContent]=\"el.value[$index] || el.placeholder[$index]\"\n ></span>\n </label>\n }\n</div>\n", styles: ["@keyframes blink{50%{opacity:0}}:host{position:absolute;inset:0;color:transparent;background:transparent;border:none;outline:none;--t-caret-color: rgba(255, 255, 255, .01);caret-color:var(--t-caret-color)}:host ::ng-deep+.t-content{gap:inherit!important}:host :host-context([tuiTheme=\"dark\"]){--t-caret-color: rgba(50, 50, 50, .01)}:host::selection{background:transparent}:host::placeholder{color:transparent!important}:host ::ng-deep+.t-content [tuiButtonX]{display:none!important}.t-wrapper{position:absolute;inset-block-start:0;inset-inline-start:0;inline-size:100%;block-size:100%;display:flex;gap:inherit;border-radius:inherit}.t-item{display:flex;flex:1;align-items:center;justify-content:center;border-radius:inherit;pointer-events:auto;cursor:text;margin-inline-start:.25rem}.t-item:first-child{pointer-events:none;margin:0}.t-item[data-focus=true] .t-value_filled{background:var(--tui-service-selection-background)}.t-item[data-focus=true] .t-value_filled:before{display:none}.t-item[data-focus=true] .t-value:before{content:\"\";block-size:1em;border-inline-start:1px solid var(--tui-text-primary);animation:blink 1s steps(1) infinite}.t-value{color:var(--tui-text-secondary)}.t-value_filled{color:var(--tui-text-primary)}\n"], dependencies: [{ kind: "directive", type: TuiAppearance, selector: "[tuiAppearance]", inputs: ["tuiAppearance", "tuiAppearanceState", "tuiAppearanceFocus", "tuiAppearanceMode"] }, { kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPinComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
61
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.23", type: TuiInputPinComponent, isStandalone: true, selector: "input[tuiInputPin]", inputs: { mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-tui-version": "5.10.0-canary.9984aef", "inputmode": "numeric", "maxlength": "4", "spellcheck": "false" }, listeners: { "pointerdown.prevent": "onClick(0)", "selectionchange": "onSelection()" } }, providers: [tuiAsTextfieldContent(() => TuiInputPinContent)], hostDirectives: [{ directive: i1.MaskitoDirective }, { directive: i2.TuiTextfieldContent }], ngImport: i0 }); }
42
62
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: TuiInputPinComponent, decorators: [{
44
- type: Component,
45
- args: [{ selector: 'input[tuiInputPin]', imports: [TuiAppearance, TuiTextfieldContent], changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [MaskitoDirective], host: {
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.23", ngImport: i0, type: TuiInputPinComponent, decorators: [{
64
+ type: Directive,
65
+ args: [{
66
+ selector: 'input[tuiInputPin]',
67
+ providers: [tuiAsTextfieldContent(() => TuiInputPinContent)],
68
+ hostDirectives: [MaskitoDirective, TuiTextfieldContent],
69
+ host: {
70
+ 'data-tui-version': TUI_VERSION,
46
71
  inputmode: 'numeric',
47
- ngSkipHydration: 'true',
72
+ maxlength: '4',
48
73
  spellcheck: 'false',
49
74
  '(pointerdown.prevent)': 'onClick(0)',
50
75
  '(selectionchange)': 'onSelection()',
51
- }, template: "<div\n *tuiTextfieldContent\n class=\"t-wrapper\"\n>\n @for (_ of '-'.repeat(el.maxLength); track $index) {\n <label\n class=\"t-item\"\n [tuiAppearance]=\"appearance()\"\n [tuiAppearanceFocus]=\"isFocused($index)\"\n [tuiAppearanceMode]=\"control.invalid && control.touched ? 'invalid' : null\"\n (pointerdown.prevent)=\"onClick($index)\"\n >\n <span\n class=\"t-value\"\n [class.t-value_filled]=\"el.value[$index]\"\n [textContent]=\"el.value[$index] || el.placeholder[$index]\"\n ></span>\n </label>\n }\n</div>\n", styles: ["@keyframes blink{50%{opacity:0}}:host{position:absolute;inset:0;color:transparent;background:transparent;border:none;outline:none;--t-caret-color: rgba(255, 255, 255, .01);caret-color:var(--t-caret-color)}:host ::ng-deep+.t-content{gap:inherit!important}:host :host-context([tuiTheme=\"dark\"]){--t-caret-color: rgba(50, 50, 50, .01)}:host::selection{background:transparent}:host::placeholder{color:transparent!important}:host ::ng-deep+.t-content [tuiButtonX]{display:none!important}.t-wrapper{position:absolute;inset-block-start:0;inset-inline-start:0;inline-size:100%;block-size:100%;display:flex;gap:inherit;border-radius:inherit}.t-item{display:flex;flex:1;align-items:center;justify-content:center;border-radius:inherit;pointer-events:auto;cursor:text;margin-inline-start:.25rem}.t-item:first-child{pointer-events:none;margin:0}.t-item[data-focus=true] .t-value_filled{background:var(--tui-service-selection-background)}.t-item[data-focus=true] .t-value_filled:before{display:none}.t-item[data-focus=true] .t-value:before{content:\"\";block-size:1em;border-inline-start:1px solid var(--tui-text-primary);animation:blink 1s steps(1) infinite}.t-value{color:var(--tui-text-secondary)}.t-value_filled{color:var(--tui-text-primary)}\n"] }]
76
+ },
77
+ }]
52
78
  }] });
53
79
 
54
80
  const TuiInputPin = [
@@ -63,5 +89,5 @@ const TuiInputPin = [
63
89
  * Generated bundle index. Do not edit.
64
90
  */
65
91
 
66
- export { TuiInputPin, TuiInputPinComponent };
92
+ export { TuiInputPin, TuiInputPinComponent, TuiInputPinContent };
67
93
  //# sourceMappingURL=taiga-ui-kit-components-input-pin.mjs.map