@taiga-ui/experimental 4.51.0 → 4.52.0-canary.1acd1eb

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 (66) hide show
  1. package/components/index.d.ts +0 -5
  2. package/components/search-results/search-history.component.d.ts +2 -2
  3. package/components/search-results/search-hotkey.directive.d.ts +2 -1
  4. package/components/search-results/search-results.component.d.ts +1 -1
  5. package/components/search-results/search-results.options.d.ts +2 -2
  6. package/fesm2022/taiga-ui-experimental-components-search-results.mjs +23 -24
  7. package/fesm2022/taiga-ui-experimental-components-search-results.mjs.map +1 -1
  8. package/fesm2022/taiga-ui-experimental-components.mjs +0 -5
  9. package/fesm2022/taiga-ui-experimental-components.mjs.map +1 -1
  10. package/package.json +8 -44
  11. package/components/accordion/accordion.component.d.ts +0 -20
  12. package/components/accordion/accordion.d.ts +0 -5
  13. package/components/accordion/accordion.directive.d.ts +0 -15
  14. package/components/accordion/index.d.ts +0 -3
  15. package/components/dialog/dialog.component.d.ts +0 -15
  16. package/components/dialog/dialog.directive.d.ts +0 -7
  17. package/components/dialog/dialog.options.d.ts +0 -27
  18. package/components/dialog/dialog.service.d.ts +0 -7
  19. package/components/dialog/index.d.ts +0 -4
  20. package/components/expand/expand.component.d.ts +0 -13
  21. package/components/expand/index.d.ts +0 -1
  22. package/components/hint/hint.component.d.ts +0 -26
  23. package/components/hint/index.d.ts +0 -1
  24. package/components/input-phone-international/index.d.ts +0 -1
  25. package/components/input-phone-international/input-phone-international.component.d.ts +0 -45
  26. package/esm2022/components/accordion/accordion.component.mjs +0 -80
  27. package/esm2022/components/accordion/accordion.directive.mjs +0 -58
  28. package/esm2022/components/accordion/accordion.mjs +0 -11
  29. package/esm2022/components/accordion/index.mjs +0 -4
  30. package/esm2022/components/accordion/taiga-ui-experimental-components-accordion.mjs +0 -5
  31. package/esm2022/components/dialog/dialog.component.mjs +0 -73
  32. package/esm2022/components/dialog/dialog.directive.mjs +0 -21
  33. package/esm2022/components/dialog/dialog.options.mjs +0 -12
  34. package/esm2022/components/dialog/dialog.service.mjs +0 -19
  35. package/esm2022/components/dialog/index.mjs +0 -5
  36. package/esm2022/components/dialog/taiga-ui-experimental-components-dialog.mjs +0 -5
  37. package/esm2022/components/expand/expand.component.mjs +0 -59
  38. package/esm2022/components/expand/index.mjs +0 -2
  39. package/esm2022/components/expand/taiga-ui-experimental-components-expand.mjs +0 -5
  40. package/esm2022/components/hint/hint.component.mjs +0 -112
  41. package/esm2022/components/hint/index.mjs +0 -2
  42. package/esm2022/components/hint/taiga-ui-experimental-components-hint.mjs +0 -5
  43. package/esm2022/components/index.mjs +0 -7
  44. package/esm2022/components/input-phone-international/index.mjs +0 -2
  45. package/esm2022/components/input-phone-international/input-phone-international.component.mjs +0 -184
  46. package/esm2022/components/input-phone-international/taiga-ui-experimental-components-input-phone-international.mjs +0 -5
  47. package/esm2022/components/search-results/index.mjs +0 -6
  48. package/esm2022/components/search-results/search-history.component.mjs +0 -59
  49. package/esm2022/components/search-results/search-hotkey.directive.mjs +0 -30
  50. package/esm2022/components/search-results/search-results.component.mjs +0 -88
  51. package/esm2022/components/search-results/search-results.mjs +0 -9
  52. package/esm2022/components/search-results/search-results.options.mjs +0 -9
  53. package/esm2022/components/search-results/taiga-ui-experimental-components-search-results.mjs +0 -5
  54. package/esm2022/components/taiga-ui-experimental-components.mjs +0 -5
  55. package/esm2022/index.mjs +0 -2
  56. package/esm2022/taiga-ui-experimental.mjs +0 -5
  57. package/fesm2022/taiga-ui-experimental-components-accordion.mjs +0 -147
  58. package/fesm2022/taiga-ui-experimental-components-accordion.mjs.map +0 -1
  59. package/fesm2022/taiga-ui-experimental-components-dialog.mjs +0 -120
  60. package/fesm2022/taiga-ui-experimental-components-dialog.mjs.map +0 -1
  61. package/fesm2022/taiga-ui-experimental-components-expand.mjs +0 -65
  62. package/fesm2022/taiga-ui-experimental-components-expand.mjs.map +0 -1
  63. package/fesm2022/taiga-ui-experimental-components-hint.mjs +0 -118
  64. package/fesm2022/taiga-ui-experimental-components-hint.mjs.map +0 -1
  65. package/fesm2022/taiga-ui-experimental-components-input-phone-international.mjs +0 -190
  66. package/fesm2022/taiga-ui-experimental-components-input-phone-international.mjs.map +0 -1
@@ -1,65 +0,0 @@
1
- import { NgIf, NgTemplateOutlet } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { inject, ChangeDetectorRef, signal, TemplateRef, Component, ChangeDetectionStrategy, ContentChild, Input } from '@angular/core';
4
- import { TuiItem } from '@taiga-ui/cdk/directives/item';
5
- import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
6
-
7
- class TuiExpand {
8
- constructor() {
9
- this.el = tuiInjectElement();
10
- this.cdr = inject(ChangeDetectorRef);
11
- this.signal = signal(false);
12
- this.animating = signal(false);
13
- }
14
- set expanded(expanded) {
15
- if (expanded === this.signal()) {
16
- return;
17
- }
18
- this.signal.set(expanded);
19
- // TODO: try removing in Angular 17
20
- this.cdr.detectChanges();
21
- this.el.classList.toggle('_expanded', expanded);
22
- }
23
- onTransitionEnd({ propertyName }) {
24
- if (propertyName === 'grid-template-rows') {
25
- this.animating.set(this.signal());
26
- }
27
- }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiExpand, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiExpand, isStandalone: true, selector: "tui-expand", inputs: { expanded: "expanded" }, host: { listeners: { "transitionend.self": "onTransitionEnd($event)" }, properties: { "class._expanded": "signal()" } }, queries: [{ propertyName: "content", first: true, predicate: TuiItem, descendants: true, read: TemplateRef }], ngImport: i0, template: `
30
- <div class="t-wrapper">
31
- <ng-container
32
- *ngIf="signal() || animating()"
33
- [ngTemplateOutlet]="content || null"
34
- />
35
- <ng-content />
36
- </div>
37
- `, isInline: true, styles: [":host{transition-property:grid-template-rows,padding;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:relative;display:grid;grid-template-rows:0fr;transition-delay:1ms}:host:not(._expanded){padding-block:0}:host._expanded{grid-template-rows:1fr}:host._expanded .t-wrapper{opacity:1;visibility:visible}.t-wrapper{transition-property:all;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;grid-row:1 / span 2;overflow:hidden;opacity:0;visibility:hidden}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38
- }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiExpand, decorators: [{
40
- type: Component,
41
- args: [{ standalone: true, selector: 'tui-expand', imports: [NgIf, NgTemplateOutlet], template: `
42
- <div class="t-wrapper">
43
- <ng-container
44
- *ngIf="signal() || animating()"
45
- [ngTemplateOutlet]="content || null"
46
- />
47
- <ng-content />
48
- </div>
49
- `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
50
- '[class._expanded]': 'signal()',
51
- '(transitionend.self)': 'onTransitionEnd($event)',
52
- }, styles: [":host{transition-property:grid-template-rows,padding;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:relative;display:grid;grid-template-rows:0fr;transition-delay:1ms}:host:not(._expanded){padding-block:0}:host._expanded{grid-template-rows:1fr}:host._expanded .t-wrapper{opacity:1;visibility:visible}.t-wrapper{transition-property:all;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;grid-row:1 / span 2;overflow:hidden;opacity:0;visibility:hidden}\n"] }]
53
- }], propDecorators: { content: [{
54
- type: ContentChild,
55
- args: [TuiItem, { read: TemplateRef }]
56
- }], expanded: [{
57
- type: Input
58
- }] } });
59
-
60
- /**
61
- * Generated bundle index. Do not edit.
62
- */
63
-
64
- export { TuiExpand };
65
- //# sourceMappingURL=taiga-ui-experimental-components-expand.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taiga-ui-experimental-components-expand.mjs","sources":["../../../projects/experimental/components/expand/expand.component.ts","../../../projects/experimental/components/expand/taiga-ui-experimental-components-expand.ts"],"sourcesContent":["import {NgIf, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n inject,\n Input,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport {TuiItem} from '@taiga-ui/cdk/directives/item';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\n\n@Component({\n standalone: true,\n selector: 'tui-expand',\n imports: [NgIf, NgTemplateOutlet],\n template: `\n <div class=\"t-wrapper\">\n <ng-container\n *ngIf=\"signal() || animating()\"\n [ngTemplateOutlet]=\"content || null\"\n />\n <ng-content />\n </div>\n `,\n styleUrls: ['./expand.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class._expanded]': 'signal()',\n '(transitionend.self)': 'onTransitionEnd($event)',\n },\n})\nexport class TuiExpand {\n private readonly el = tuiInjectElement();\n private readonly cdr = inject(ChangeDetectorRef);\n\n @ContentChild(TuiItem, {read: TemplateRef})\n protected content?: TemplateRef<any>;\n\n protected readonly signal = signal(false);\n protected readonly animating = signal(false);\n\n @Input()\n public set expanded(expanded: boolean) {\n if (expanded === this.signal()) {\n return;\n }\n\n this.signal.set(expanded);\n // TODO: try removing in Angular 17\n this.cdr.detectChanges();\n this.el.classList.toggle('_expanded', expanded);\n }\n\n protected onTransitionEnd({propertyName}: TransitionEvent): void {\n if (propertyName === 'grid-template-rows') {\n this.animating.set(this.signal());\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,118 +0,0 @@
1
- import { __decorate } from 'tslib';
2
- import * as i0 from '@angular/core';
3
- import { inject, signal, Component, ChangeDetectionStrategy } from '@angular/core';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { EMPTY_CLIENT_RECT } from '@taiga-ui/cdk/constants';
6
- import * as i2 from '@taiga-ui/cdk/directives/animated';
7
- import { TuiAnimated } from '@taiga-ui/cdk/directives/animated';
8
- import { TuiHoveredService } from '@taiga-ui/cdk/directives/hovered';
9
- import { TUI_IS_MOBILE } from '@taiga-ui/cdk/tokens';
10
- import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
11
- import { tuiClamp } from '@taiga-ui/cdk/utils/math';
12
- import { tuiPx, tuiPure } from '@taiga-ui/cdk/utils/miscellaneous';
13
- import { TuiRectAccessor } from '@taiga-ui/core/classes';
14
- import { tuiButtonOptionsProvider } from '@taiga-ui/core/components/button';
15
- import * as i1 from '@taiga-ui/core/directives/appearance';
16
- import { tuiAppearance, TuiAppearance } from '@taiga-ui/core/directives/appearance';
17
- import { TuiHintHover, TuiHintPointer, TuiHintUnstyledComponent, TUI_HINT_PROVIDERS, TUI_HINT_COMPONENT } from '@taiga-ui/core/directives/hint';
18
- import { TuiVisualViewportService, TuiPositionService } from '@taiga-ui/core/services';
19
- import { TUI_VIEWPORT } from '@taiga-ui/core/tokens';
20
- import { tuiIsObscured } from '@taiga-ui/core/utils';
21
- import { injectContext, PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
22
- import { takeWhile, map } from 'rxjs';
23
-
24
- const GAP = 8;
25
- class TuiHintComponent {
26
- constructor() {
27
- this.el = tuiInjectElement();
28
- this.hover = inject(TuiHintHover);
29
- this.vvs = inject(TuiVisualViewportService);
30
- this.viewport = inject(TUI_VIEWPORT);
31
- this.pointer = inject(TuiHintPointer, { optional: true });
32
- this.accessor = inject(TuiRectAccessor);
33
- this.hint = injectContext().$implicit;
34
- this.isMobile = inject(TUI_IS_MOBILE);
35
- this.content = this.hint.component.component === TuiHintUnstyledComponent
36
- ? signal('')
37
- : this.hint.content;
38
- this.theme = this.hint.el
39
- .closest('[tuiTheme]')
40
- ?.getAttribute('tuiTheme');
41
- this.appearance = tuiAppearance(this.hint.appearance);
42
- inject(TuiPositionService)
43
- .pipe(takeWhile(() => this.hint.el.isConnected), map((point) => this.vvs.correct(point)), takeUntilDestroyed())
44
- .subscribe({
45
- next: ([top, left]) => this.update(top, left),
46
- complete: () => this.hover.toggle(false),
47
- });
48
- inject(TuiHoveredService)
49
- .pipe(takeUntilDestroyed())
50
- .subscribe((hover) => this.hover.toggle(hover));
51
- }
52
- onClick(target) {
53
- if ((!target.closest(this.el.tagName) && !this.hint.el.contains(target)) ||
54
- tuiIsObscured(this.hint.el)) {
55
- this.hover.toggle(false);
56
- }
57
- }
58
- apply(top, left, beakTop, beakLeft) {
59
- this.el.style.top = top;
60
- this.el.style.left = left;
61
- this.el.style.setProperty('--t-top', `${beakTop}%`);
62
- this.el.style.setProperty('--t-left', `${beakLeft}%`);
63
- this.el.style.setProperty('--t-rotate', !beakLeft || Math.ceil(beakLeft) === 100 ? '90deg' : '0deg');
64
- }
65
- update(top, left) {
66
- const { clientHeight, clientWidth } = this.el;
67
- const rect = this.accessor.getClientRect();
68
- if (rect === EMPTY_CLIENT_RECT || !clientHeight || !clientWidth) {
69
- return;
70
- }
71
- const viewport = this.viewport.getClientRect();
72
- const safeLeft = tuiClamp(Math.max(GAP, left), viewport.left + GAP, Math.max(GAP, viewport.width + viewport.left - clientWidth - GAP));
73
- const [beakTop, beakLeft] = this.vvs.correct([
74
- rect.top + rect.height / 2 - top,
75
- rect.left + rect.width / 2 - safeLeft,
76
- ]);
77
- this.apply(tuiPx(Math.round(top)), tuiPx(Math.round(safeLeft)), Math.round((tuiClamp(beakTop, 0, clientHeight) / clientHeight) * 100), Math.round((tuiClamp(beakLeft, 0, clientWidth) / clientWidth) * 100));
78
- }
79
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiHintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
80
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiHintComponent, isStandalone: true, selector: "tui-hint", host: { listeners: { "document:click": "onClick($event.target)" }, properties: { "class._untouchable": "pointer", "class._mobile": "isMobile", "attr.tuiTheme": "theme" } }, providers: [TUI_HINT_PROVIDERS, tuiButtonOptionsProvider({ size: 's' })], hostDirectives: [{ directive: i1.TuiAppearance }, { directive: i2.TuiAnimated }], ngImport: i0, template: `
81
- <ng-content />
82
- <span
83
- *polymorpheusOutlet="content() as text; context: hint.context"
84
- [innerHTML]="text"
85
- ></span>
86
- `, isInline: true, styles: [":host{position:absolute;max-inline-size:min(20rem,calc(100% - 1rem));padding:.75rem 1rem;background:var(--tui-background-accent-1);border-radius:var(--tui-radius-l);color:var(--tui-text-primary-on-accent-1);box-sizing:border-box;font:var(--tui-font-text-s);white-space:pre-line;overflow-wrap:break-word;transform-origin:var(--t-left) var(--t-top);--tui-background-elevation-2: var(--tui-background-elevation-3)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade}:host :host-context(tui-root._mobile).tui-enter{animation:tuiFade var(--tui-duration) ease-in-out,tuiScale var(--tui-duration) cubic-bezier(.34,1.56,.64,1)}:host :host-context(tui-root._mobile).tui-leave{animation:tuiFade var(--tui-duration) ease-in-out reverse,tuiScale var(--tui-duration) ease-in-out reverse}:host:before{content:\"\";position:absolute;top:var(--t-top);left:var(--t-left);inline-size:.75rem;block-size:.5rem;background:inherit;-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 12 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.61336 1.69607L2.44882 2.96493C1.84795 3.61964 0.949361 3.99951 0.00053941 4C0.000359608 4 0.000179805 4 0 4C0.000179863 4 0.000359764 4 0.000539623 4C0.949362 4.00049 1.84795 4.38036 2.44882 5.03506L3.61336 6.30394C4.55981 7.33517 5.03303 7.85079 5.63254 7.96535C5.87433 8.01155 6.12436 8.01155 6.36616 7.96535C6.96567 7.85079 7.43889 7.33517 8.38534 6.30393L9.54988 5.03507C10.1511 4.37994 11.0505 4 12 4C11.0505 4 10.1511 3.62006 9.54988 2.96493L8.38534 1.69606C7.43889 0.664826 6.96567 0.149207 6.36616 0.0346517C6.12436 -0.0115506 5.87433 -0.0115506 5.63254 0.0346517C5.03303 0.149207 4.55981 0.664827 3.61336 1.69607Z\" /></svg>');mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 12 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.61336 1.69607L2.44882 2.96493C1.84795 3.61964 0.949361 3.99951 0.00053941 4C0.000359608 4 0.000179805 4 0 4C0.000179863 4 0.000359764 4 0.000539623 4C0.949362 4.00049 1.84795 4.38036 2.44882 5.03506L3.61336 6.30394C4.55981 7.33517 5.03303 7.85079 5.63254 7.96535C5.87433 8.01155 6.12436 8.01155 6.36616 7.96535C6.96567 7.85079 7.43889 7.33517 8.38534 6.30393L9.54988 5.03507C10.1511 4.37994 11.0505 4 12 4C11.0505 4 10.1511 3.62006 9.54988 2.96493L8.38534 1.69606C7.43889 0.664826 6.96567 0.149207 6.36616 0.0346517C6.12436 -0.0115506 5.87433 -0.0115506 5.63254 0.0346517C5.03303 0.149207 4.55981 0.664827 3.61336 1.69607Z\" /></svg>');transform:translate(-50%,-50%) rotate(var(--t-rotate))}:host._mobile{font:var(--tui-font-text-m)}:host._mobile:before{inline-size:1.5rem;block-size:1.125rem;-webkit-mask-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 18\"><path d=\"M7.22854 3.81615L4.89971 6.6711C3.69732 8.14514 1.8988 9 0 9C1.8988 9 3.69732 9.85486 4.89971 11.3289L7.22854 14.1839L7.22854 14.1839C9.12123 16.5041 10.0676 17.6643 11.2665 17.922C11.75 18.026 12.25 18.026 12.7335 17.922C13.9324 17.6643 14.8788 16.5041 16.7715 14.1839L19.1003 11.3289C20.3027 9.85486 22.1012 9 24 9C22.1012 9 20.3027 8.14514 19.1003 6.6711L16.7715 3.81614C14.8788 1.49586 13.9324 0.335716 12.7335 0.0779663C12.25 -0.0259888 11.75 -0.0259888 11.2665 0.0779663C10.0676 0.335716 9.12123 1.49586 7.22854 3.81614L7.22854 3.81615Z\" /></svg>');mask-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 18\"><path d=\"M7.22854 3.81615L4.89971 6.6711C3.69732 8.14514 1.8988 9 0 9C1.8988 9 3.69732 9.85486 4.89971 11.3289L7.22854 14.1839L7.22854 14.1839C9.12123 16.5041 10.0676 17.6643 11.2665 17.922C11.75 18.026 12.25 18.026 12.7335 17.922C13.9324 17.6643 14.8788 16.5041 16.7715 14.1839L19.1003 11.3289C20.3027 9.85486 22.1012 9 24 9C22.1012 9 20.3027 8.14514 19.1003 6.6711L16.7715 3.81614C14.8788 1.49586 13.9324 0.335716 12.7335 0.0779663C12.25 -0.0259888 11.75 -0.0259888 11.2665 0.0779663C10.0676 0.335716 9.12123 1.49586 7.22854 3.81614L7.22854 3.81615Z\" /></svg>')}:host:not([style*=top]){visibility:hidden}:host._untouchable{pointer-events:none}:host ::ng-deep [tuiTitle]{margin-block-end:.75rem}:host ::ng-deep [tuiTitle]+footer{margin-block-start:.75rem}:host ::ng-deep [tuiIconButton][data-appearance=icon][data-size=xs]{float:inline-end;margin-inline-end:-.25rem}:host ::ng-deep img{display:block;border-radius:var(--tui-radius-m)}:host ::ng-deep footer{display:flex;justify-content:flex-end;gap:.5rem;inline-size:18rem;max-inline-size:100%;margin:1rem 0 .25rem}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
87
- }
88
- __decorate([
89
- tuiPure
90
- ], TuiHintComponent.prototype, "apply", null);
91
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiHintComponent, decorators: [{
92
- type: Component,
93
- args: [{ standalone: true, selector: 'tui-hint', imports: [PolymorpheusOutlet], template: `
94
- <ng-content />
95
- <span
96
- *polymorpheusOutlet="content() as text; context: hint.context"
97
- [innerHTML]="text"
98
- ></span>
99
- `, changeDetection: ChangeDetectionStrategy.OnPush, providers: [TUI_HINT_PROVIDERS, tuiButtonOptionsProvider({ size: 's' })], hostDirectives: [TuiAppearance, TuiAnimated], host: {
100
- '[class._untouchable]': 'pointer',
101
- '[class._mobile]': 'isMobile',
102
- '[attr.tuiTheme]': 'theme',
103
- '(document:click)': 'onClick($event.target)',
104
- }, styles: [":host{position:absolute;max-inline-size:min(20rem,calc(100% - 1rem));padding:.75rem 1rem;background:var(--tui-background-accent-1);border-radius:var(--tui-radius-l);color:var(--tui-text-primary-on-accent-1);box-sizing:border-box;font:var(--tui-font-text-s);white-space:pre-line;overflow-wrap:break-word;transform-origin:var(--t-left) var(--t-top);--tui-background-elevation-2: var(--tui-background-elevation-3)}:host.tui-enter,:host.tui-leave{animation-name:tuiFade}:host :host-context(tui-root._mobile).tui-enter{animation:tuiFade var(--tui-duration) ease-in-out,tuiScale var(--tui-duration) cubic-bezier(.34,1.56,.64,1)}:host :host-context(tui-root._mobile).tui-leave{animation:tuiFade var(--tui-duration) ease-in-out reverse,tuiScale var(--tui-duration) ease-in-out reverse}:host:before{content:\"\";position:absolute;top:var(--t-top);left:var(--t-left);inline-size:.75rem;block-size:.5rem;background:inherit;-webkit-mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 12 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.61336 1.69607L2.44882 2.96493C1.84795 3.61964 0.949361 3.99951 0.00053941 4C0.000359608 4 0.000179805 4 0 4C0.000179863 4 0.000359764 4 0.000539623 4C0.949362 4.00049 1.84795 4.38036 2.44882 5.03506L3.61336 6.30394C4.55981 7.33517 5.03303 7.85079 5.63254 7.96535C5.87433 8.01155 6.12436 8.01155 6.36616 7.96535C6.96567 7.85079 7.43889 7.33517 8.38534 6.30393L9.54988 5.03507C10.1511 4.37994 11.0505 4 12 4C11.0505 4 10.1511 3.62006 9.54988 2.96493L8.38534 1.69606C7.43889 0.664826 6.96567 0.149207 6.36616 0.0346517C6.12436 -0.0115506 5.87433 -0.0115506 5.63254 0.0346517C5.03303 0.149207 4.55981 0.664827 3.61336 1.69607Z\" /></svg>');mask-image:url('data:image/svg+xml,<svg viewBox=\"0 0 12 8\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.61336 1.69607L2.44882 2.96493C1.84795 3.61964 0.949361 3.99951 0.00053941 4C0.000359608 4 0.000179805 4 0 4C0.000179863 4 0.000359764 4 0.000539623 4C0.949362 4.00049 1.84795 4.38036 2.44882 5.03506L3.61336 6.30394C4.55981 7.33517 5.03303 7.85079 5.63254 7.96535C5.87433 8.01155 6.12436 8.01155 6.36616 7.96535C6.96567 7.85079 7.43889 7.33517 8.38534 6.30393L9.54988 5.03507C10.1511 4.37994 11.0505 4 12 4C11.0505 4 10.1511 3.62006 9.54988 2.96493L8.38534 1.69606C7.43889 0.664826 6.96567 0.149207 6.36616 0.0346517C6.12436 -0.0115506 5.87433 -0.0115506 5.63254 0.0346517C5.03303 0.149207 4.55981 0.664827 3.61336 1.69607Z\" /></svg>');transform:translate(-50%,-50%) rotate(var(--t-rotate))}:host._mobile{font:var(--tui-font-text-m)}:host._mobile:before{inline-size:1.5rem;block-size:1.125rem;-webkit-mask-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 18\"><path d=\"M7.22854 3.81615L4.89971 6.6711C3.69732 8.14514 1.8988 9 0 9C1.8988 9 3.69732 9.85486 4.89971 11.3289L7.22854 14.1839L7.22854 14.1839C9.12123 16.5041 10.0676 17.6643 11.2665 17.922C11.75 18.026 12.25 18.026 12.7335 17.922C13.9324 17.6643 14.8788 16.5041 16.7715 14.1839L19.1003 11.3289C20.3027 9.85486 22.1012 9 24 9C22.1012 9 20.3027 8.14514 19.1003 6.6711L16.7715 3.81614C14.8788 1.49586 13.9324 0.335716 12.7335 0.0779663C12.25 -0.0259888 11.75 -0.0259888 11.2665 0.0779663C10.0676 0.335716 9.12123 1.49586 7.22854 3.81614L7.22854 3.81615Z\" /></svg>');mask-image:url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 18\"><path d=\"M7.22854 3.81615L4.89971 6.6711C3.69732 8.14514 1.8988 9 0 9C1.8988 9 3.69732 9.85486 4.89971 11.3289L7.22854 14.1839L7.22854 14.1839C9.12123 16.5041 10.0676 17.6643 11.2665 17.922C11.75 18.026 12.25 18.026 12.7335 17.922C13.9324 17.6643 14.8788 16.5041 16.7715 14.1839L19.1003 11.3289C20.3027 9.85486 22.1012 9 24 9C22.1012 9 20.3027 8.14514 19.1003 6.6711L16.7715 3.81614C14.8788 1.49586 13.9324 0.335716 12.7335 0.0779663C12.25 -0.0259888 11.75 -0.0259888 11.2665 0.0779663C10.0676 0.335716 9.12123 1.49586 7.22854 3.81614L7.22854 3.81615Z\" /></svg>')}:host:not([style*=top]){visibility:hidden}:host._untouchable{pointer-events:none}:host ::ng-deep [tuiTitle]{margin-block-end:.75rem}:host ::ng-deep [tuiTitle]+footer{margin-block-start:.75rem}:host ::ng-deep [tuiIconButton][data-appearance=icon][data-size=xs]{float:inline-end;margin-inline-end:-.25rem}:host ::ng-deep img{display:block;border-radius:var(--tui-radius-m)}:host ::ng-deep footer{display:flex;justify-content:flex-end;gap:.5rem;inline-size:18rem;max-inline-size:100%;margin:1rem 0 .25rem}\n"] }]
105
- }], ctorParameters: function () { return []; }, propDecorators: { apply: [] } });
106
- function tuiProvideExperimentalHint() {
107
- return {
108
- provide: TUI_HINT_COMPONENT,
109
- useValue: TuiHintComponent,
110
- };
111
- }
112
-
113
- /**
114
- * Generated bundle index. Do not edit.
115
- */
116
-
117
- export { TuiHintComponent, tuiProvideExperimentalHint };
118
- //# sourceMappingURL=taiga-ui-experimental-components-hint.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taiga-ui-experimental-components-hint.mjs","sources":["../../../projects/experimental/components/hint/hint.component.ts","../../../projects/experimental/components/hint/taiga-ui-experimental-components-hint.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n inject,\n type Provider,\n signal,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {EMPTY_CLIENT_RECT} from '@taiga-ui/cdk/constants';\nimport {TuiAnimated} from '@taiga-ui/cdk/directives/animated';\nimport {TuiHoveredService} from '@taiga-ui/cdk/directives/hovered';\nimport {TUI_IS_MOBILE} from '@taiga-ui/cdk/tokens';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\nimport {tuiPure, tuiPx} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiRectAccessor} from '@taiga-ui/core/classes';\nimport {tuiButtonOptionsProvider} from '@taiga-ui/core/components/button';\nimport {TuiAppearance, tuiAppearance} from '@taiga-ui/core/directives/appearance';\nimport {\n TUI_HINT_COMPONENT,\n TUI_HINT_PROVIDERS,\n type TuiHintDirective,\n TuiHintHover,\n TuiHintPointer,\n TuiHintUnstyledComponent,\n} from '@taiga-ui/core/directives/hint';\nimport {TuiPositionService, TuiVisualViewportService} from '@taiga-ui/core/services';\nimport {TUI_VIEWPORT} from '@taiga-ui/core/tokens';\nimport {tuiIsObscured} from '@taiga-ui/core/utils';\nimport {injectContext, PolymorpheusOutlet} from '@taiga-ui/polymorpheus';\nimport {map, takeWhile} from 'rxjs';\n\nconst GAP = 8;\n\n@Component({\n standalone: true,\n selector: 'tui-hint',\n imports: [PolymorpheusOutlet],\n template: `\n <ng-content />\n <span\n *polymorpheusOutlet=\"content() as text; context: hint.context\"\n [innerHTML]=\"text\"\n ></span>\n `,\n styleUrls: ['./hint.style.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TUI_HINT_PROVIDERS, tuiButtonOptionsProvider({size: 's'})],\n hostDirectives: [TuiAppearance, TuiAnimated],\n host: {\n '[class._untouchable]': 'pointer',\n '[class._mobile]': 'isMobile',\n '[attr.tuiTheme]': 'theme',\n '(document:click)': 'onClick($event.target)',\n },\n})\nexport class TuiHintComponent<C = any> {\n private readonly el = tuiInjectElement();\n private readonly hover = inject(TuiHintHover);\n private readonly vvs = inject(TuiVisualViewportService);\n private readonly viewport = inject(TUI_VIEWPORT);\n\n protected readonly pointer = inject(TuiHintPointer, {optional: true});\n protected readonly accessor = inject(TuiRectAccessor);\n protected readonly hint = injectContext<TuiContext<TuiHintDirective<C>>>().$implicit;\n protected readonly isMobile = inject(TUI_IS_MOBILE);\n\n protected readonly content =\n this.hint.component.component === TuiHintUnstyledComponent\n ? signal('')\n : this.hint.content;\n\n protected readonly theme = this.hint.el\n .closest('[tuiTheme]')\n ?.getAttribute('tuiTheme');\n\n protected readonly appearance = tuiAppearance(this.hint.appearance);\n\n constructor() {\n inject(TuiPositionService)\n .pipe(\n takeWhile(() => this.hint.el.isConnected),\n map((point) => this.vvs.correct(point)),\n takeUntilDestroyed(),\n )\n .subscribe({\n next: ([top, left]) => this.update(top, left),\n complete: () => this.hover.toggle(false),\n });\n\n inject(TuiHoveredService)\n .pipe(takeUntilDestroyed())\n .subscribe((hover) => this.hover.toggle(hover));\n }\n\n protected onClick(target: HTMLElement): void {\n if (\n (!target.closest(this.el.tagName) && !this.hint.el.contains(target)) ||\n tuiIsObscured(this.hint.el)\n ) {\n this.hover.toggle(false);\n }\n }\n\n @tuiPure\n private apply(top: string, left: string, beakTop: number, beakLeft: number): void {\n this.el.style.top = top;\n this.el.style.left = left;\n this.el.style.setProperty('--t-top', `${beakTop}%`);\n this.el.style.setProperty('--t-left', `${beakLeft}%`);\n this.el.style.setProperty(\n '--t-rotate',\n !beakLeft || Math.ceil(beakLeft) === 100 ? '90deg' : '0deg',\n );\n }\n\n private update(top: number, left: number): void {\n const {clientHeight, clientWidth} = this.el;\n const rect = this.accessor.getClientRect();\n\n if (rect === EMPTY_CLIENT_RECT || !clientHeight || !clientWidth) {\n return;\n }\n\n const viewport = this.viewport.getClientRect();\n const safeLeft = tuiClamp(\n Math.max(GAP, left),\n viewport.left + GAP,\n Math.max(GAP, viewport.width + viewport.left - clientWidth - GAP),\n );\n\n const [beakTop, beakLeft] = this.vvs.correct([\n rect.top + rect.height / 2 - top,\n rect.left + rect.width / 2 - safeLeft,\n ]);\n\n this.apply(\n tuiPx(Math.round(top)),\n tuiPx(Math.round(safeLeft)),\n Math.round((tuiClamp(beakTop, 0, clientHeight) / clientHeight) * 100),\n Math.round((tuiClamp(beakLeft, 0, clientWidth) / clientWidth) * 100),\n );\n }\n}\n\nexport function tuiProvideExperimentalHint(): Provider {\n return {\n provide: TUI_HINT_COMPONENT,\n useValue: TuiHintComponent,\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,190 +0,0 @@
1
- import { NgForOf, NgIf } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { inject, signal, computed, effect, ElementRef, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChildren, Input, Output } from '@angular/core';
4
- import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
5
- import * as i3 from '@angular/forms';
6
- import { FormsModule } from '@angular/forms';
7
- import * as i1 from '@maskito/angular';
8
- import { MaskitoDirective } from '@maskito/angular';
9
- import { maskitoTransform, MASKITO_DEFAULT_OPTIONS, maskitoInitialCalibrationPlugin } from '@maskito/core';
10
- import { maskitoPhoneOptionsGenerator, maskitoGetCountryFromNumber } from '@maskito/phone';
11
- import { TuiControl, tuiAsControl } from '@taiga-ui/cdk/classes';
12
- import { EMPTY_QUERY, TUI_ALLOW_SIGNAL_WRITES, TUI_DEFAULT_MATCHER, CHAR_PLUS } from '@taiga-ui/cdk/constants';
13
- import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
14
- import { tuiAutoFocusOptionsProvider, TuiAutoFocus } from '@taiga-ui/cdk/directives/auto-focus';
15
- import { TUI_IS_IOS, tuiFallbackValueProvider } from '@taiga-ui/cdk/tokens';
16
- import { tuiInjectElement, tuiValue, tuiIsInputEvent } from '@taiga-ui/cdk/utils/dom';
17
- import { tuiDirectiveBinding } from '@taiga-ui/cdk/utils/miscellaneous';
18
- import { TuiButton } from '@taiga-ui/core/components/button';
19
- import * as i4 from '@taiga-ui/core/components/data-list';
20
- import { TuiOptionNew, TuiDataList } from '@taiga-ui/core/components/data-list';
21
- import * as i2 from '@taiga-ui/core/components/textfield';
22
- import { TUI_TEXTFIELD_OPTIONS, TuiTextfieldContent, TuiTextfield, TuiWithTextfield } from '@taiga-ui/core/components/textfield';
23
- import { tuiDropdownOpen, TuiDropdownOpen } from '@taiga-ui/core/directives/dropdown';
24
- import { TuiTitle } from '@taiga-ui/core/directives/title';
25
- import { TuiFlagPipe } from '@taiga-ui/core/pipes';
26
- import { TUI_COMMON_ICONS } from '@taiga-ui/core/tokens';
27
- import { TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS } from '@taiga-ui/kit/components/input-phone-international';
28
- import { TuiChevron } from '@taiga-ui/kit/directives/chevron';
29
- import { TUI_INTERNATIONAL_SEARCH, TUI_COUNTRIES } from '@taiga-ui/kit/tokens';
30
- import { tuiMaskito, tuiGetCallingCode } from '@taiga-ui/kit/utils';
31
- import { TuiCell } from '@taiga-ui/layout/components/cell';
32
- import { validatePhoneNumberLength } from 'libphonenumber-js';
33
- import { from, filter, skip } from 'rxjs';
34
-
35
- const NOT_FORM_CONTROL_SYMBOLS = /[^+\d]/g;
36
- class TuiInputPhoneInternational extends TuiControl {
37
- constructor() {
38
- super(...arguments);
39
- this.list = EMPTY_QUERY;
40
- this.el = tuiInjectElement();
41
- this.ios = inject(TUI_IS_IOS);
42
- this.icons = inject(TUI_COMMON_ICONS);
43
- this.options = inject(TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS);
44
- this.countries = signal(this.options.countries);
45
- this.code = signal(this.options.countryIsoCode);
46
- this.label = toSignal(inject(TUI_INTERNATIONAL_SEARCH));
47
- this.metadata = toSignal(from(this.options.metadata));
48
- this.names = toSignal(inject(TUI_COUNTRIES));
49
- this.open = tuiDropdownOpen();
50
- this.search = signal('');
51
- this.size = inject(TUI_TEXTFIELD_OPTIONS).size;
52
- this.mask = tuiMaskito(computed(() => this.computeMask(this.code(), this.metadata())));
53
- this.masked = tuiValue(this.el);
54
- this.valueChangeEffect = effect(() => {
55
- this.onChange(this.unmask(this.masked()));
56
- }, TUI_ALLOW_SIGNAL_WRITES);
57
- this.filtered = computed(() => this.countries()
58
- .map((iso) => ({
59
- iso,
60
- name: this.names()?.[iso] || '',
61
- code: tuiGetCallingCode(iso, this.metadata()),
62
- }))
63
- .filter(({ name, code }) => TUI_DEFAULT_MATCHER(name + code, this.search())));
64
- this.enabled = tuiDirectiveBinding(TuiDropdownOpen, 'tuiDropdownEnabled', this.interactive, {});
65
- this.$ = inject(TuiActiveZone)
66
- .tuiActiveZoneChange.pipe(filter(() => !this.readOnly()), takeUntilDestroyed())
67
- .subscribe((active) => {
68
- const prefix = `${tuiGetCallingCode(this.code(), this.metadata())} `;
69
- this.search.set('');
70
- this.masked.update((value) => {
71
- const fallback = active ? value || prefix : value;
72
- return value === prefix ? '' : fallback;
73
- });
74
- });
75
- this.countrySearch = false;
76
- this.countryIsoCodeChange = toObservable(this.code).pipe(skip(1));
77
- }
78
- set countriesValue(value) {
79
- this.countries.set(value);
80
- }
81
- set isoCode(code) {
82
- this.code.set(code);
83
- }
84
- writeValue(unmasked) {
85
- const code = this.getCountryCode(unmasked ?? '');
86
- if (code) {
87
- this.code.set(code);
88
- }
89
- super.writeValue(unmasked);
90
- this.masked.set(maskitoTransform(this.value() ?? '', this.mask() || MASKITO_DEFAULT_OPTIONS));
91
- }
92
- onPaste(event) {
93
- const data = tuiIsInputEvent(event) && event.data;
94
- if (!data ||
95
- (!event.inputType.includes('Drop') && !event.inputType.includes('Paste'))) {
96
- return;
97
- }
98
- const code = this.getCountryCode(data);
99
- if (code) {
100
- this.code.set(code);
101
- }
102
- }
103
- onItemClick(code) {
104
- this.el.focus();
105
- this.open.set(false);
106
- this.code.set(code);
107
- this.search.set('');
108
- this.masked.set(maskitoTransform(this.value() || tuiGetCallingCode(code, this.metadata()), this.mask() || MASKITO_DEFAULT_OPTIONS));
109
- }
110
- computeMask(countryIsoCode, metadata) {
111
- if (!metadata) {
112
- return null;
113
- }
114
- const { plugins, ...options } = maskitoPhoneOptionsGenerator({
115
- countryIsoCode,
116
- metadata,
117
- separator: this.options.separator,
118
- });
119
- return {
120
- ...options,
121
- plugins: [...plugins, maskitoInitialCalibrationPlugin()],
122
- };
123
- }
124
- unmask(maskedValue) {
125
- const value = maskedValue.replaceAll(NOT_FORM_CONTROL_SYMBOLS, '');
126
- return value === tuiGetCallingCode(this.code(), this.metadata()) ? '' : value;
127
- }
128
- getCountryCode(value) {
129
- const metadata = this.metadata();
130
- const phone = value.startsWith(CHAR_PLUS) ? value : CHAR_PLUS + value;
131
- return metadata && validatePhoneNumberLength(phone) !== 'TOO_SHORT'
132
- ? (maskitoGetCountryFromNumber(phone, metadata) ?? null)
133
- : null;
134
- }
135
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputPhoneInternational, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
136
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputPhoneInternational, isStandalone: true, selector: "input[tuiInputPhoneInternational]", inputs: { countrySearch: "countrySearch", countriesValue: ["countries", "countriesValue"], isoCode: ["countryIsoCode", "isoCode"] }, outputs: { countryIsoCodeChange: "countryIsoCodeChange" }, host: { attributes: { "type": "tel", "ngSkipHydration": "true" }, listeners: { "input": "masked.set($event.target.value)", "click": "open.set(false)", "beforeinput.capture": "onPaste($event)" }, properties: { "attr.inputmode": "!ios && open() ? \"none\" : null", "disabled": "disabled()" } }, providers: [
137
- tuiAsControl(TuiInputPhoneInternational),
138
- tuiFallbackValueProvider(''),
139
- tuiAutoFocusOptionsProvider({ preventScroll: true }),
140
- ], viewQueries: [{ propertyName: "list", predicate: TuiOptionNew, descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i1.MaskitoDirective }, { directive: i2.TuiWithTextfield }], 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 (pointerdown.prevent)=\"interactive() && open.set(!open())\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()?.[code()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"code() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-container *tuiTextfieldDropdown>\n <div\n *ngIf=\"countrySearch\"\n #element\n class=\"t-ipi-search\"\n >\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiTextfield\n type=\"text\"\n [focused]=\"true\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!!element.closest('tui-dropdown-mobile')\"\n (keydown.arrowDown)=\"list.get(0)?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n\n <tui-data-list class=\"t-ipi-options\">\n <button\n *ngFor=\"let item of filtered()\"\n new\n tuiOption\n type=\"button\"\n [tuiCell]=\"size()\"\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 </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]{left:var(--t-offset);border-top-left-radius:0;border-bottom-left-radius:0;inline-size:calc(100% - var(--t-offset))}tui-root:has(tui-dropdown-mobile) [tuiInputPhoneInternational][tuiInputPhoneInternational]{caret-color:transparent}[tuiInputPhoneInternational][tuiInputPhoneInternational]+label{padding-inline-start:var(--t-offset)}tui-textfield[data-size=s]{--t-offset: 4.125rem}tui-textfield[data-size=s] .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]{--t-offset: 4.875rem}tui-textfield[data-size=m] .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]{--t-offset: 5.25rem}tui-textfield[data-size=l] .t-ipi-flag{margin:0 -.1875rem}tui-textfield .t-ipi-select{position:absolute;left:0;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}tui-textfield .t-ipi-select_readonly{pointer-events:none}.t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}.t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}.t-ipi-code{color:var(--tui-text-secondary)}.t-ipi-search{position:sticky;top:0;z-index:1;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){.t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}tui-dropdown-mobile .t-ipi-search{background:var(--tui-background-elevation-1)}tui-dropdown-mobile .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: TuiCell, selector: "[tuiCell]:not(ng-template)", inputs: ["tuiCell", "tuiCellHeight"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "component", type: i4.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i4.TuiOptionNew, selector: "button[tuiOption][new], a[tuiOption][new], label[tuiOption][new]", inputs: ["disabled"] }, { kind: "pipe", type: TuiFlagPipe, name: "tuiFlag" }, { kind: "component", type: i2.TuiTextfieldComponent, selector: "tui-textfield:not([multi])" }, { kind: "directive", type: i2.TuiTextfieldDirective, selector: "input[tuiTextfield]:not([tuiInputCard]):not([tuiInputExpire]):not([tuiInputCVC])" }, { kind: "directive", type: i2.TuiTextfieldOptionsDirective, selector: "[tuiTextfieldAppearance],[tuiTextfieldSize],[tuiTextfieldCleaner]", inputs: ["tuiTextfieldAppearance", "tuiTextfieldSize", "tuiTextfieldCleaner"] }, { kind: "directive", type: i2.TuiTextfieldDropdownDirective, selector: "ng-template[tuiTextfieldDropdown]" }, { kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }, { kind: "directive", type: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
141
- }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputPhoneInternational, decorators: [{
143
- type: Component,
144
- args: [{ standalone: true, selector: 'input[tuiInputPhoneInternational]', imports: [
145
- FormsModule,
146
- NgForOf,
147
- NgIf,
148
- TuiAutoFocus,
149
- TuiButton,
150
- TuiCell,
151
- TuiChevron,
152
- TuiDataList,
153
- TuiFlagPipe,
154
- TuiTextfield,
155
- TuiTextfieldContent,
156
- TuiTitle,
157
- ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
158
- tuiAsControl(TuiInputPhoneInternational),
159
- tuiFallbackValueProvider(''),
160
- tuiAutoFocusOptionsProvider({ preventScroll: true }),
161
- ], hostDirectives: [MaskitoDirective, TuiWithTextfield], host: {
162
- type: 'tel',
163
- ngSkipHydration: 'true',
164
- '[attr.inputmode]': '!ios && open() ? "none" : null',
165
- '[disabled]': 'disabled()',
166
- '(input)': 'masked.set($event.target.value)',
167
- '(click)': 'open.set(false)',
168
- '(beforeinput.capture)': 'onPaste($event)',
169
- }, 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 (pointerdown.prevent)=\"interactive() && open.set(!open())\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()?.[code()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"code() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-container *tuiTextfieldDropdown>\n <div\n *ngIf=\"countrySearch\"\n #element\n class=\"t-ipi-search\"\n >\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiTextfield\n type=\"text\"\n [focused]=\"true\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!!element.closest('tui-dropdown-mobile')\"\n (keydown.arrowDown)=\"list.get(0)?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n\n <tui-data-list class=\"t-ipi-options\">\n <button\n *ngFor=\"let item of filtered()\"\n new\n tuiOption\n type=\"button\"\n [tuiCell]=\"size()\"\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 </tui-data-list>\n</ng-container>\n", styles: ["[tuiInputPhoneInternational][tuiInputPhoneInternational]{left:var(--t-offset);border-top-left-radius:0;border-bottom-left-radius:0;inline-size:calc(100% - var(--t-offset))}tui-root:has(tui-dropdown-mobile) [tuiInputPhoneInternational][tuiInputPhoneInternational]{caret-color:transparent}[tuiInputPhoneInternational][tuiInputPhoneInternational]+label{padding-inline-start:var(--t-offset)}tui-textfield[data-size=s]{--t-offset: 4.125rem}tui-textfield[data-size=s] .t-ipi-flag{margin:0 .1875rem}tui-textfield[data-size=m]{--t-offset: 4.875rem}tui-textfield[data-size=m] .t-ipi-flag{margin:0 -.1875rem}tui-textfield[data-size=l]{--t-offset: 5.25rem}tui-textfield[data-size=l] .t-ipi-flag{margin:0 -.1875rem}tui-textfield .t-ipi-select{position:absolute;left:0;border-radius:inherit;border-top-right-radius:0;border-bottom-right-radius:0}tui-textfield .t-ipi-select_readonly{pointer-events:none}.t-ipi-flag{inline-size:1.75rem;block-size:1.75rem;border-radius:100%}.t-ipi-flag_small{inline-size:1.25rem;block-size:1.25rem}.t-ipi-code{color:var(--tui-text-secondary)}.t-ipi-search{position:sticky;top:0;z-index:1;background:var(--tui-background-elevation-3);padding:.375rem .375rem 0}@supports (-webkit-touch-callout: none){.t-ipi-search input:focus{animation:tuiPreventIOSScroll 1ms}}@keyframes tuiPreventIOSScroll{0%{opacity:0}to{opacity:1}}tui-dropdown-mobile .t-ipi-search{background:var(--tui-background-elevation-1)}tui-dropdown-mobile .t-ipi-options:not(:first-child){min-block-size:calc(100 * var(--tui-viewport-vh) - 8.75rem)}\n"] }]
170
- }], propDecorators: { list: [{
171
- type: ViewChildren,
172
- args: [TuiOptionNew, { read: ElementRef }]
173
- }], countrySearch: [{
174
- type: Input
175
- }], countryIsoCodeChange: [{
176
- type: Output
177
- }], countriesValue: [{
178
- type: Input,
179
- args: ['countries']
180
- }], isoCode: [{
181
- type: Input,
182
- args: ['countryIsoCode']
183
- }] } });
184
-
185
- /**
186
- * Generated bundle index. Do not edit.
187
- */
188
-
189
- export { TuiInputPhoneInternational };
190
- //# sourceMappingURL=taiga-ui-experimental-components-input-phone-international.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taiga-ui-experimental-components-input-phone-international.mjs","sources":["../../../projects/experimental/components/input-phone-international/input-phone-international.component.ts","../../../projects/experimental/components/input-phone-international/input-phone-international.template.html","../../../projects/experimental/components/input-phone-international/taiga-ui-experimental-components-input-phone-international.ts"],"sourcesContent":["import {NgForOf, NgIf} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Input,\n Output,\n type QueryList,\n signal,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed, toObservable, 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 {tuiAsControl, TuiControl} from '@taiga-ui/cdk/classes';\nimport {\n CHAR_PLUS,\n EMPTY_QUERY,\n TUI_ALLOW_SIGNAL_WRITES,\n TUI_DEFAULT_MATCHER,\n} 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 {TUI_IS_IOS, tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement, tuiIsInputEvent, tuiValue} from '@taiga-ui/cdk/utils/dom';\nimport {tuiDirectiveBinding} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiDataList, TuiOptionNew} from '@taiga-ui/core/components/data-list';\nimport {\n TUI_TEXTFIELD_OPTIONS,\n TuiTextfield,\n TuiTextfieldContent,\n TuiWithTextfield,\n} from '@taiga-ui/core/components/textfield';\nimport {TuiDropdownOpen, tuiDropdownOpen} from '@taiga-ui/core/directives/dropdown';\nimport {TuiTitle} from '@taiga-ui/core/directives/title';\nimport {TuiFlagPipe} from '@taiga-ui/core/pipes';\nimport {TUI_COMMON_ICONS} from '@taiga-ui/core/tokens';\nimport {type TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS} from '@taiga-ui/kit/components/input-phone-international';\nimport {TuiChevron} from '@taiga-ui/kit/directives/chevron';\nimport {TUI_COUNTRIES, TUI_INTERNATIONAL_SEARCH} from '@taiga-ui/kit/tokens';\nimport {tuiGetCallingCode, tuiMaskito} from '@taiga-ui/kit/utils';\nimport {TuiCell} from '@taiga-ui/layout/components/cell';\nimport {validatePhoneNumberLength} from 'libphonenumber-js';\nimport {type MetadataJson} from 'libphonenumber-js/core';\nimport {filter, from, skip} from 'rxjs';\n\nconst NOT_FORM_CONTROL_SYMBOLS = /[^+\\d]/g;\n\n@Component({\n standalone: true,\n selector: 'input[tuiInputPhoneInternational]',\n imports: [\n FormsModule,\n NgForOf,\n NgIf,\n TuiAutoFocus,\n TuiButton,\n TuiCell,\n TuiChevron,\n TuiDataList,\n TuiFlagPipe,\n TuiTextfield,\n TuiTextfieldContent,\n TuiTitle,\n ],\n templateUrl: './input-phone-international.template.html',\n styleUrls: ['./input-phone-international.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n tuiAsControl(TuiInputPhoneInternational),\n tuiFallbackValueProvider(''),\n tuiAutoFocusOptionsProvider({preventScroll: true}),\n ],\n hostDirectives: [MaskitoDirective, TuiWithTextfield],\n host: {\n type: 'tel',\n ngSkipHydration: 'true',\n '[attr.inputmode]': '!ios && open() ? \"none\" : null',\n '[disabled]': 'disabled()',\n '(input)': 'masked.set($event.target.value)',\n '(click)': 'open.set(false)',\n '(beforeinput.capture)': 'onPaste($event)',\n },\n})\nexport class TuiInputPhoneInternational extends TuiControl<string> {\n @ViewChildren(TuiOptionNew, {read: ElementRef})\n protected readonly list: QueryList<ElementRef<HTMLButtonElement>> = EMPTY_QUERY;\n\n protected readonly el = tuiInjectElement<HTMLInputElement>();\n protected readonly ios = inject(TUI_IS_IOS);\n protected readonly icons = inject(TUI_COMMON_ICONS);\n protected readonly options = inject(TUI_INPUT_PHONE_INTERNATIONAL_OPTIONS);\n protected readonly countries = signal(this.options.countries);\n protected readonly code = signal(this.options.countryIsoCode);\n protected readonly label = toSignal(inject(TUI_INTERNATIONAL_SEARCH));\n protected readonly metadata = toSignal(from(this.options.metadata));\n protected readonly names = toSignal(inject(TUI_COUNTRIES));\n protected readonly open = tuiDropdownOpen();\n protected readonly search = signal<string>('');\n protected readonly size = inject(TUI_TEXTFIELD_OPTIONS).size;\n\n protected readonly mask = tuiMaskito(\n computed(() => this.computeMask(this.code(), this.metadata())),\n );\n\n protected readonly masked = tuiValue(this.el);\n\n protected valueChangeEffect = effect(() => {\n this.onChange(this.unmask(this.masked()));\n }, TUI_ALLOW_SIGNAL_WRITES);\n\n protected readonly filtered = computed(() =>\n this.countries()\n .map((iso) => ({\n iso,\n name: this.names()?.[iso] || '',\n code: tuiGetCallingCode(iso, this.metadata()),\n }))\n .filter(({name, code}) => TUI_DEFAULT_MATCHER(name + code, this.search())),\n );\n\n protected readonly enabled = tuiDirectiveBinding(\n TuiDropdownOpen,\n 'tuiDropdownEnabled',\n this.interactive,\n {},\n );\n\n protected readonly $ = inject(TuiActiveZone)\n .tuiActiveZoneChange.pipe(\n filter(() => !this.readOnly()),\n takeUntilDestroyed(),\n )\n .subscribe((active) => {\n const prefix = `${tuiGetCallingCode(this.code(), 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 @Input()\n public countrySearch = false;\n\n @Output()\n public readonly countryIsoCodeChange = toObservable(this.code).pipe(skip(1));\n\n @Input('countries')\n public set countriesValue(value: readonly TuiCountryIsoCode[]) {\n this.countries.set(value);\n }\n\n @Input('countryIsoCode')\n public set isoCode(code: TuiCountryIsoCode) {\n this.code.set(code);\n }\n\n public override writeValue(unmasked: string | null): void {\n const code = this.getCountryCode(unmasked ?? '');\n\n if (code) {\n this.code.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.code.set(code);\n }\n }\n\n protected onItemClick(code: TuiCountryIsoCode): void {\n this.el.focus();\n this.open.set(false);\n this.code.set(code);\n this.search.set('');\n this.masked.set(\n maskitoTransform(\n this.value() || tuiGetCallingCode(code, this.metadata()),\n this.mask() || MASKITO_DEFAULT_OPTIONS,\n ),\n );\n }\n\n private computeMask(\n countryIsoCode: TuiCountryIsoCode,\n metadata?: MetadataJson,\n ): MaskitoOptions | null {\n if (!metadata) {\n return null;\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\n return value === tuiGetCallingCode(this.code(), this.metadata()) ? '' : 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) !== 'TOO_SHORT'\n ? (maskitoGetCountryFromNumber(phone, metadata) ?? null)\n : null;\n }\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 (pointerdown.prevent)=\"interactive() && open.set(!open())\"\n >\n <img\n class=\"t-ipi-flag\"\n [alt]=\"names()?.[code()]\"\n [class.t-ipi-flag_small]=\"size() === 's'\"\n [src]=\"code() | tuiFlag\"\n />\n </button>\n</ng-container>\n<ng-container *tuiTextfieldDropdown>\n <div\n *ngIf=\"countrySearch\"\n #element\n class=\"t-ipi-search\"\n >\n <tui-textfield\n [iconStart]=\"icons.search\"\n [tuiTextfieldSize]=\"size() === 's' ? 's' : 'm'\"\n >\n <input\n autocomplete=\"off\"\n tuiTextfield\n type=\"text\"\n [focused]=\"true\"\n [ngModel]=\"search()\"\n [ngModelOptions]=\"{standalone: true}\"\n [placeholder]=\"label()\"\n [tuiAutoFocus]=\"!!element.closest('tui-dropdown-mobile')\"\n (keydown.arrowDown)=\"list.get(0)?.nativeElement?.focus()\"\n (ngModelChange)=\"search.set($event)\"\n />\n </tui-textfield>\n </div>\n\n <tui-data-list class=\"t-ipi-options\">\n <button\n *ngFor=\"let item of filtered()\"\n new\n tuiOption\n type=\"button\"\n [tuiCell]=\"size()\"\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 </tui-data-list>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}