@taiga-ui/experimental 4.52.0-canary.e444d19 → 4.52.0-canary.e53e79e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +2 -2
  2. package/components/index.d.ts +0 -5
  3. package/components/search-results/search-history.component.d.ts +2 -2
  4. package/components/search-results/search-hotkey.directive.d.ts +2 -1
  5. package/components/search-results/search-results.component.d.ts +1 -1
  6. package/components/search-results/search-results.options.d.ts +1 -7
  7. package/fesm2022/taiga-ui-experimental-components-search-results.mjs +26 -28
  8. package/fesm2022/taiga-ui-experimental-components-search-results.mjs.map +1 -1
  9. package/fesm2022/taiga-ui-experimental-components.mjs +0 -5
  10. package/fesm2022/taiga-ui-experimental-components.mjs.map +1 -1
  11. package/package.json +5 -22
  12. package/components/accordion/accordion.component.d.ts +0 -20
  13. package/components/accordion/accordion.d.ts +0 -5
  14. package/components/accordion/accordion.directive.d.ts +0 -15
  15. package/components/accordion/index.d.ts +0 -3
  16. package/components/dialog/dialog.component.d.ts +0 -15
  17. package/components/dialog/dialog.directive.d.ts +0 -7
  18. package/components/dialog/dialog.options.d.ts +0 -27
  19. package/components/dialog/dialog.service.d.ts +0 -7
  20. package/components/dialog/index.d.ts +0 -4
  21. package/components/expand/expand.component.d.ts +0 -13
  22. package/components/expand/index.d.ts +0 -1
  23. package/components/hint/hint.component.d.ts +0 -26
  24. package/components/hint/index.d.ts +0 -1
  25. package/components/input-phone-international/index.d.ts +0 -1
  26. package/components/input-phone-international/input-phone-international.component.d.ts +0 -45
  27. package/fesm2022/taiga-ui-experimental-components-accordion.mjs +0 -147
  28. package/fesm2022/taiga-ui-experimental-components-accordion.mjs.map +0 -1
  29. package/fesm2022/taiga-ui-experimental-components-dialog.mjs +0 -119
  30. package/fesm2022/taiga-ui-experimental-components-dialog.mjs.map +0 -1
  31. package/fesm2022/taiga-ui-experimental-components-expand.mjs +0 -63
  32. package/fesm2022/taiga-ui-experimental-components-expand.mjs.map +0 -1
  33. package/fesm2022/taiga-ui-experimental-components-hint.mjs +0 -118
  34. package/fesm2022/taiga-ui-experimental-components-hint.mjs.map +0 -1
  35. package/fesm2022/taiga-ui-experimental-components-input-phone-international.mjs +0 -187
  36. package/fesm2022/taiga-ui-experimental-components-input-phone-international.mjs.map +0 -1
package/README.md CHANGED
@@ -16,13 +16,13 @@ consisting of multiple base libraries and several add-ons
16
16
 
17
17
  Install base packages:
18
18
 
19
- ```
19
+ ```bash
20
20
  npm i @taiga-ui/{cdk,core}
21
21
  ```
22
22
 
23
23
  Install @taiga-ui/experimental:
24
24
 
25
- ```
25
+ ```bash
26
26
  npm i @taiga-ui/experimental
27
27
  ```
28
28
 
@@ -1,6 +1 @@
1
- export * from '@taiga-ui/experimental/components/accordion';
2
- export * from '@taiga-ui/experimental/components/dialog';
3
- export * from '@taiga-ui/experimental/components/expand';
4
- export * from '@taiga-ui/experimental/components/hint';
5
- export * from '@taiga-ui/experimental/components/input-phone-international';
6
1
  export * from '@taiga-ui/experimental/components/search-results';
@@ -3,7 +3,7 @@ export declare class TuiSearchHistory {
3
3
  private readonly textfield;
4
4
  private readonly storage;
5
5
  private readonly control;
6
- protected readonly close: import("@angular/core").Signal<string | undefined>;
6
+ protected readonly close: import("@angular/core").Signal<string>;
7
7
  protected readonly i18n: import("@angular/core").Signal<{
8
8
  popular: string;
9
9
  history: string;
@@ -11,7 +11,7 @@ export declare class TuiSearchHistory {
11
11
  hotkey: string;
12
12
  all: string;
13
13
  empty: string;
14
- } | undefined>;
14
+ }>;
15
15
  protected readonly options: {
16
16
  key: string;
17
17
  history: string;
@@ -2,8 +2,9 @@ import { TuiInputSearch } from '@taiga-ui/layout/components/input-search';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class TuiSearchHotkey {
4
4
  private readonly platform;
5
+ private readonly texts;
5
6
  protected readonly search: TuiInputSearch;
6
- protected readonly placeholder: import("@angular/core").Signal<string | undefined>;
7
+ protected readonly placeholder: import("@angular/core").Signal<string>;
7
8
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiSearchHotkey, never>;
8
9
  static ɵdir: i0.ɵɵDirectiveDeclaration<TuiSearchHotkey, "input[tuiSearchHotkey]", never, {}, {}, never, never, true, never>;
9
10
  }
@@ -19,7 +19,7 @@ export declare class TuiSearchResultsComponent<T> implements OnChanges {
19
19
  hotkey: string;
20
20
  all: string;
21
21
  empty: string;
22
- } | undefined>;
22
+ }>;
23
23
  protected readonly textfield: TuiTextfieldComponent<any>;
24
24
  protected active: number;
25
25
  readonly template?: TemplateRef<TuiContext<T>>;
@@ -10,13 +10,7 @@ export declare const TUI_SEARCH_RESULTS_OPTIONS: import("@angular/core").Injecti
10
10
  popular: string;
11
11
  empty: string;
12
12
  remove: string;
13
- }> | import("@angular/core").ProviderToken<Partial<{
14
- key: string;
15
- history: string;
16
- popular: string;
17
- empty: string;
18
- remove: string;
19
- }>> | (() => Partial<{
13
+ }> | (() => Partial<{
20
14
  key: string;
21
15
  history: string;
22
16
  popular: string;
@@ -1,27 +1,26 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, Input, ChangeDetectionStrategy, Component, Directive, TemplateRef, ContentChild } from '@angular/core';
3
- import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
2
+ import { inject, Input, ChangeDetectionStrategy, Component, computed, Directive, TemplateRef, ContentChild } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { NgControl } from '@angular/forms';
5
5
  import { WA_LOCAL_STORAGE, WA_NAVIGATOR } from '@ng-web-apis/common';
6
6
  import { TuiButton } from '@taiga-ui/core/components/button';
7
+ import { TuiCell } from '@taiga-ui/core/components/cell';
7
8
  import { TuiTextfieldComponent } from '@taiga-ui/core/components/textfield';
8
- import { TuiTitle } from '@taiga-ui/core/directives/title';
9
+ import { TuiTitle } from '@taiga-ui/core/components/title';
9
10
  import { TUI_CLOSE_WORD } from '@taiga-ui/core/tokens';
10
11
  import { TuiAvatar } from '@taiga-ui/kit/components/avatar';
11
- import { TuiCell } from '@taiga-ui/layout/components/cell';
12
12
  import { TUI_INPUT_SEARCH } from '@taiga-ui/layout/tokens';
13
13
  import { map, filter } from 'rxjs';
14
14
  import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
15
15
  import { TuiInputSearch } from '@taiga-ui/layout/components/input-search';
16
16
  import { __decorate } from 'tslib';
17
17
  import { KeyValuePipe, NgTemplateOutlet } from '@angular/common';
18
- import { TuiLet } from '@taiga-ui/cdk/directives/let';
19
18
  import { TuiFilterPipe } from '@taiga-ui/cdk/pipes/filter';
20
19
  import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
21
20
  import { tuiMoveFocus } from '@taiga-ui/cdk/utils/focus';
22
21
  import { tuiClamp } from '@taiga-ui/cdk/utils/math';
23
22
  import { tuiPure } from '@taiga-ui/cdk/utils/miscellaneous';
24
- import { TuiIconPipe } from '@taiga-ui/core/components/icon';
23
+ import { TuiIcon } from '@taiga-ui/core/components/icon';
25
24
  import { TuiLoader } from '@taiga-ui/core/components/loader';
26
25
  import { TuiScrollbar } from '@taiga-ui/core/components/scrollbar';
27
26
  import * as i2 from '@taiga-ui/kit/components/tabs';
@@ -42,8 +41,8 @@ class TuiSearchHistory {
42
41
  this.textfield = inject(TuiTextfieldComponent);
43
42
  this.storage = inject(WA_LOCAL_STORAGE);
44
43
  this.control = inject(NgControl);
45
- this.close = toSignal(inject(TUI_CLOSE_WORD));
46
- this.i18n = toSignal(inject(TUI_INPUT_SEARCH));
44
+ this.close = inject(TUI_CLOSE_WORD);
45
+ this.i18n = inject(TUI_INPUT_SEARCH);
47
46
  this.options = inject(TUI_SEARCH_RESULTS_OPTIONS);
48
47
  this.$ = this.control.valueChanges
49
48
  ?.pipe(map(String), filter((item) => !!item && !this.popular.includes(item)), takeUntilDestroyed())
@@ -59,23 +58,23 @@ class TuiSearchHistory {
59
58
  .slice(0, 5)));
60
59
  }
61
60
  remove(item) {
62
- this.textfield.input?.nativeElement.focus();
61
+ this.textfield.input()?.nativeElement.focus();
63
62
  this.history = this.history.filter((v) => v !== item);
64
63
  this.storage?.setItem(this.options.key, JSON.stringify(this.items.filter((v) => v !== item)));
65
64
  }
66
65
  select(item) {
67
66
  this.control.control?.setValue(item);
68
- this.textfield.input?.nativeElement.focus();
67
+ this.textfield.input()?.nativeElement.focus();
69
68
  }
70
69
  get items() {
71
70
  return JSON.parse(this.storage?.getItem(this.options.key) || '[]');
72
71
  }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiSearchHistory, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
74
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiSearchHistory, isStandalone: true, selector: "tui-search-history", inputs: { popular: "popular" }, ngImport: i0, template: "@if (history.length) {\n <label class=\"t-sr-label\">\n {{ i18n()?.history }}\n </label>\n}\n@for (item of history; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <div [tuiAvatar]=\"options.history\"></div>\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n \uD83D\uDDD1\uFE0F\n </button>\n </button>\n}\n@if (popular.length) {\n <label class=\"t-sr-label\">\n {{ i18n()?.popular }}\n </label>\n}\n@for (item of popular; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <span [tuiAvatar]=\"options.popular\"></span>\n <span tuiTitle>{{ item }}</span>\n </button>\n}\n", styles: [":host:not(:empty){display:block;padding:.375rem 0}\n"], dependencies: [{ kind: "component", type: TuiAvatar, selector: "[tuiAvatar]", inputs: ["size", "round", "tuiAvatar"] }, { 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: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiSearchHistory, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.16", type: TuiSearchHistory, isStandalone: true, selector: "tui-search-history", inputs: { popular: "popular" }, ngImport: i0, template: "@if (history.length) {\n <label class=\"t-sr-label\">\n {{ i18n().history }}\n </label>\n}\n@for (item of history; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <div [tuiAvatar]=\"options.history\"></div>\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n \uD83D\uDDD1\uFE0F\n </button>\n </button>\n}\n@if (popular.length) {\n <label class=\"t-sr-label\">\n {{ i18n().popular }}\n </label>\n}\n@for (item of popular; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <span [tuiAvatar]=\"options.popular\"></span>\n <span tuiTitle>{{ item }}</span>\n </button>\n}\n", styles: [":host:not(:empty){display:block;padding:.375rem 0}\n"], dependencies: [{ kind: "directive", type: TuiAvatar, selector: "[tuiAvatar]", inputs: ["size", "round", "badge"] }, { 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: TuiTitle, selector: "[tuiTitle]", inputs: ["tuiTitle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
75
74
  }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiSearchHistory, decorators: [{
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiSearchHistory, decorators: [{
77
76
  type: Component,
78
- args: [{ selector: 'tui-search-history', imports: [TuiAvatar, TuiButton, TuiCell, TuiTitle], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (history.length) {\n <label class=\"t-sr-label\">\n {{ i18n()?.history }}\n </label>\n}\n@for (item of history; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <div [tuiAvatar]=\"options.history\"></div>\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n \uD83D\uDDD1\uFE0F\n </button>\n </button>\n}\n@if (popular.length) {\n <label class=\"t-sr-label\">\n {{ i18n()?.popular }}\n </label>\n}\n@for (item of popular; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <span [tuiAvatar]=\"options.popular\"></span>\n <span tuiTitle>{{ item }}</span>\n </button>\n}\n", styles: [":host:not(:empty){display:block;padding:.375rem 0}\n"] }]
77
+ args: [{ selector: 'tui-search-history', imports: [TuiAvatar, TuiButton, TuiCell, TuiTitle], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (history.length) {\n <label class=\"t-sr-label\">\n {{ i18n().history }}\n </label>\n}\n@for (item of history; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <div [tuiAvatar]=\"options.history\"></div>\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n \uD83D\uDDD1\uFE0F\n </button>\n </button>\n}\n@if (popular.length) {\n <label class=\"t-sr-label\">\n {{ i18n().popular }}\n </label>\n}\n@for (item of popular; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <span [tuiAvatar]=\"options.popular\"></span>\n <span tuiTitle>{{ item }}</span>\n </button>\n}\n", styles: [":host:not(:empty){display:block;padding:.375rem 0}\n"] }]
79
78
  }], propDecorators: { popular: [{
80
79
  type: Input
81
80
  }] } });
@@ -83,16 +82,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
83
82
  class TuiSearchHotkey {
84
83
  constructor() {
85
84
  this.platform = inject(WA_NAVIGATOR).platform;
85
+ this.texts = inject(TUI_INPUT_SEARCH);
86
86
  this.search = inject(TuiInputSearch);
87
- this.placeholder = toSignal(inject(TUI_INPUT_SEARCH).pipe(map(({ hotkey }) => this.platform.startsWith('Mac') ? `⌘+K ${hotkey}` : `Alt+K ${hotkey}`)));
87
+ this.placeholder = computed(({ hotkey } = this.texts()) => this.platform.startsWith('Mac') ? `⌘+K ${hotkey}` : `Alt+K ${hotkey}`);
88
88
  }
89
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiSearchHotkey, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
90
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: TuiSearchHotkey, isStandalone: true, selector: "input[tuiSearchHotkey]", host: { listeners: { "document:keydown.meta.k.stop": "search.open()", "document:keydown.alt.k.stop": "search.open()" }, properties: { "placeholder": "placeholder()" } }, ngImport: i0 }); }
89
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiSearchHotkey, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
90
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.16", type: TuiSearchHotkey, isStandalone: true, selector: "input[tuiSearchHotkey]", host: { listeners: { "document:keydown.meta.k.stop": "search.open()", "document:keydown.alt.k.stop": "search.open()" }, properties: { "placeholder": "placeholder()" } }, ngImport: i0 }); }
91
91
  }
92
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiSearchHotkey, decorators: [{
92
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiSearchHotkey, decorators: [{
93
93
  type: Directive,
94
94
  args: [{
95
- standalone: true,
96
95
  selector: 'input[tuiSearchHotkey]',
97
96
  host: {
98
97
  '[placeholder]': 'placeholder()',
@@ -106,7 +105,7 @@ class TuiSearchResultsComponent {
106
105
  constructor() {
107
106
  this.el = tuiInjectElement();
108
107
  this.options = inject(TUI_SEARCH_RESULTS_OPTIONS);
109
- this.i18n = toSignal(inject(TUI_INPUT_SEARCH));
108
+ this.i18n = inject(TUI_INPUT_SEARCH);
110
109
  this.textfield = inject(TuiTextfieldComponent);
111
110
  this.active = 0;
112
111
  this.results = {};
@@ -120,7 +119,7 @@ class TuiSearchResultsComponent {
120
119
  onArrow(current, step) {
121
120
  const elements = Array.from(this.el.querySelectorAll('[tuiCell]'));
122
121
  if (elements[0] === current && step < 0) {
123
- this.textfield.input?.nativeElement.focus();
122
+ this.textfield.input()?.nativeElement.focus();
124
123
  }
125
124
  else {
126
125
  tuiMoveFocus(elements.indexOf(current), elements, step);
@@ -129,7 +128,7 @@ class TuiSearchResultsComponent {
129
128
  tab(step) {
130
129
  const max = Object.values(this.results || {}).filter((v) => v.length).length;
131
130
  this.active = tuiClamp(this.active + step, 0, max);
132
- this.textfield.input?.nativeElement.focus();
131
+ this.textfield.input()?.nativeElement.focus();
133
132
  }
134
133
  notEmpty({ value }) {
135
134
  return !!value.length;
@@ -137,28 +136,27 @@ class TuiSearchResultsComponent {
137
136
  asIs() {
138
137
  return 0;
139
138
  }
140
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiSearchResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: TuiSearchResultsComponent, isStandalone: true, selector: "tui-search-results", inputs: { results: "results" }, host: { listeners: { "keydown.arrowDown.prevent": "onArrow($event.target, 1)", "keydown.arrowUp.prevent": "onArrow($event.target, -1)" } }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (!textfield.value()) {\n <ng-content />\n} @else {\n @if (!results) {\n <tui-loader class=\"t-loader\" />\n } @else {\n @if (results && isEmpty(results)) {\n <tui-block-status\n size=\"m\"\n class=\"t-status\"\n >\n <img\n alt=\"\"\n tuiSlot=\"top\"\n class=\"t-empty\"\n [src]=\"options.empty | tuiIcon\"\n />\n {{ i18n()?.empty }}\n </tui-block-status>\n } @else {\n <ng-container *tuiLet=\"(results | keyvalue: asIs) || [] as items\">\n <tui-scrollbar class=\"t-scrollbar\">\n @for (group of items | tuiFilter: notEmpty; track group; let index = $index) {\n @if (!active || active === index + 1) {\n @if (!active && items.length > 1) {\n <label class=\"t-sr-label\">\n {{ group.key }}\n </label>\n }\n @for (item of group.value; track item) {\n <ng-container\n [ngTemplateOutlet]=\"template || null\"\n [ngTemplateOutletContext]=\"{$implicit: item}\"\n />\n }\n }\n }\n </tui-scrollbar>\n @if (items.length > 1) {\n <tui-tabs\n size=\"m\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"active\"\n (document:keydown.shift.tab.prevent)=\"tab(-1)\"\n (document:keydown.tab.prevent)=\"tab(1)\"\n >\n <button tuiTab>{{ i18n()?.all }}</button>\n @for (group of items; track group) {\n @if (group.value.length) {\n <button tuiTab>\n {{ group.key }}\n </button>\n }\n }\n </tui-tabs>\n }\n </ng-container>\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;border-radius:var(--tui-radius-l);background:var(--tui-background-base);box-shadow:inset 0 0 0 1px var(--tui-border-normal)}:host ::ng-deep [tuiCell]{inline-size:stretch;padding:.375rem;margin:.25rem .625rem;border-radius:var(--tui-radius-l)}:host ::ng-deep [tuiCell]>[tuiAvatar]{border-radius:var(--tui-radius-m)}:host ::ng-deep .t-sr-label{display:block;font:var(--tui-font-text-ui-s);color:var(--tui-text-secondary);margin:.75rem 1rem .5rem}.t-loader{margin:1rem 0}.t-status{margin-block-end:2rem}.t-empty{margin-block-start:1.5rem;filter:invert(1)}.t-tabs{order:-1;margin:0 1rem;box-shadow:none;border-image:linear-gradient(0deg,var(--tui-border-normal) 1px,transparent 0) fill 0/0/0 1rem}.t-tabs:before{background:var(--tui-background-accent-opposite-pressed)}.t-scrollbar{max-block-size:30rem;padding:.375rem 0}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.TuiBlockStatusComponent, selector: "tui-block-status", inputs: ["card", "size"] }, { kind: "directive", type: i1.TuiBlockStatusDirective, selector: "[tuiSlot]", inputs: ["tuiSlot"] }, { kind: "pipe", type: TuiFilterPipe, name: "tuiFilter" }, { kind: "pipe", type: TuiIconPipe, name: "tuiIcon" }, { kind: "directive", type: TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }, { kind: "directive", type: i2.TuiTab, selector: "a[tuiTab]:not([routerLink]), a[tuiTab][routerLink][routerLinkActive], button[tuiTab]" }, { kind: "directive", type: i2.TuiTabsHorizontal, selector: "tui-tabs:not([vertical]), nav[tuiTabs]:not([vertical])", inputs: ["underline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
139
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiSearchResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
140
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.16", type: TuiSearchResultsComponent, isStandalone: true, selector: "tui-search-results", inputs: { results: "results" }, host: { listeners: { "keydown.arrowDown.prevent": "onArrow($event.target, 1)", "keydown.arrowUp.prevent": "onArrow($event.target, -1)" } }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (!textfield.value()) {\n <ng-content />\n} @else {\n @if (!results) {\n <tui-loader class=\"t-loader\" />\n } @else {\n @if (results && isEmpty(results)) {\n <tui-block-status\n size=\"m\"\n class=\"t-status\"\n >\n <tui-icon\n tuiSlot=\"top\"\n class=\"t-empty\"\n [icon]=\"options.empty\"\n />\n {{ i18n().empty }}\n </tui-block-status>\n } @else {\n @let items = (results | keyvalue: asIs) || [];\n <tui-scrollbar class=\"t-scrollbar\">\n @for (group of items | tuiFilter: notEmpty; track group) {\n @if (!active || active === $index + 1) {\n @if (!active && items.length > 1) {\n <label class=\"t-sr-label\">\n {{ group.key }}\n </label>\n }\n @for (item of group.value; track item) {\n <ng-container\n [ngTemplateOutlet]=\"template || null\"\n [ngTemplateOutletContext]=\"{$implicit: item}\"\n />\n }\n }\n }\n </tui-scrollbar>\n @if (items.length > 1) {\n <tui-tabs\n size=\"m\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"active\"\n (document:keydown.shift.tab.prevent)=\"tab(-1)\"\n (document:keydown.tab.prevent)=\"tab(1)\"\n >\n <button tuiTab>{{ i18n().all }}</button>\n @for (group of items; track group) {\n @if (group.value.length) {\n <button tuiTab>\n {{ group.key }}\n </button>\n }\n }\n </tui-tabs>\n }\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;border-radius:var(--tui-radius-l);background:var(--tui-background-base);box-shadow:inset 0 0 0 1px var(--tui-border-normal)}:host ::ng-deep [tuiCell]{inline-size:stretch;padding:.375rem;margin:.25rem .625rem;border-radius:var(--tui-radius-l)}:host ::ng-deep [tuiCell]>[tuiAvatar]{border-radius:var(--tui-radius-m)}:host ::ng-deep .t-sr-label{display:block;font:var(--tui-font-text-ui-s);color:var(--tui-text-secondary);margin:.75rem 1rem .5rem}.t-loader{margin:1rem 0}.t-status{margin-block-end:2rem}.t-empty{margin-block-start:1.5rem;font-size:6rem;color:var(--tui-text-primary)}.t-tabs{order:-1;margin:0 1rem;box-shadow:none;border-image:linear-gradient(0deg,var(--tui-border-normal) 1px,transparent 0) fill 0/0/0 1rem}.t-tabs:before{background:var(--tui-background-accent-opposite-pressed)}.t-scrollbar{max-block-size:30rem;padding:.375rem 0}\n"], dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i1.TuiBlockStatusComponent, selector: "tui-block-status", inputs: ["card", "size"] }, { kind: "directive", type: i1.TuiBlockStatusDirective, selector: "[tuiSlot]", inputs: ["tuiSlot"] }, { kind: "pipe", type: TuiFilterPipe, name: "tuiFilter" }, { kind: "component", type: TuiIcon, selector: "tui-icon:not([tuiBadge])", inputs: ["background"] }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "loading"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar" }, { kind: "directive", type: i2.TuiTab, selector: "a[tuiTab]:not([routerLink]), a[tuiTab][routerLink][routerLinkActive], button[tuiTab]" }, { kind: "directive", type: i2.TuiTabsHorizontal, selector: "tui-tabs:not([vertical]), nav[tuiTabs]:not([vertical])", inputs: ["underline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
142
141
  }
143
142
  __decorate([
144
143
  tuiPure
145
144
  ], TuiSearchResultsComponent.prototype, "isEmpty", null);
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: TuiSearchResultsComponent, decorators: [{
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.16", ngImport: i0, type: TuiSearchResultsComponent, decorators: [{
147
146
  type: Component,
148
147
  args: [{ selector: 'tui-search-results', imports: [
149
148
  KeyValuePipe,
150
149
  NgTemplateOutlet,
151
150
  TuiBlockStatus,
152
151
  TuiFilterPipe,
153
- TuiIconPipe,
154
- TuiLet,
152
+ TuiIcon,
155
153
  TuiLoader,
156
154
  TuiScrollbar,
157
155
  TuiTabs,
158
156
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
159
157
  '(keydown.arrowDown.prevent)': 'onArrow($event.target, 1)',
160
158
  '(keydown.arrowUp.prevent)': 'onArrow($event.target, -1)',
161
- }, template: "@if (!textfield.value()) {\n <ng-content />\n} @else {\n @if (!results) {\n <tui-loader class=\"t-loader\" />\n } @else {\n @if (results && isEmpty(results)) {\n <tui-block-status\n size=\"m\"\n class=\"t-status\"\n >\n <img\n alt=\"\"\n tuiSlot=\"top\"\n class=\"t-empty\"\n [src]=\"options.empty | tuiIcon\"\n />\n {{ i18n()?.empty }}\n </tui-block-status>\n } @else {\n <ng-container *tuiLet=\"(results | keyvalue: asIs) || [] as items\">\n <tui-scrollbar class=\"t-scrollbar\">\n @for (group of items | tuiFilter: notEmpty; track group; let index = $index) {\n @if (!active || active === index + 1) {\n @if (!active && items.length > 1) {\n <label class=\"t-sr-label\">\n {{ group.key }}\n </label>\n }\n @for (item of group.value; track item) {\n <ng-container\n [ngTemplateOutlet]=\"template || null\"\n [ngTemplateOutletContext]=\"{$implicit: item}\"\n />\n }\n }\n }\n </tui-scrollbar>\n @if (items.length > 1) {\n <tui-tabs\n size=\"m\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"active\"\n (document:keydown.shift.tab.prevent)=\"tab(-1)\"\n (document:keydown.tab.prevent)=\"tab(1)\"\n >\n <button tuiTab>{{ i18n()?.all }}</button>\n @for (group of items; track group) {\n @if (group.value.length) {\n <button tuiTab>\n {{ group.key }}\n </button>\n }\n }\n </tui-tabs>\n }\n </ng-container>\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;border-radius:var(--tui-radius-l);background:var(--tui-background-base);box-shadow:inset 0 0 0 1px var(--tui-border-normal)}:host ::ng-deep [tuiCell]{inline-size:stretch;padding:.375rem;margin:.25rem .625rem;border-radius:var(--tui-radius-l)}:host ::ng-deep [tuiCell]>[tuiAvatar]{border-radius:var(--tui-radius-m)}:host ::ng-deep .t-sr-label{display:block;font:var(--tui-font-text-ui-s);color:var(--tui-text-secondary);margin:.75rem 1rem .5rem}.t-loader{margin:1rem 0}.t-status{margin-block-end:2rem}.t-empty{margin-block-start:1.5rem;filter:invert(1)}.t-tabs{order:-1;margin:0 1rem;box-shadow:none;border-image:linear-gradient(0deg,var(--tui-border-normal) 1px,transparent 0) fill 0/0/0 1rem}.t-tabs:before{background:var(--tui-background-accent-opposite-pressed)}.t-scrollbar{max-block-size:30rem;padding:.375rem 0}\n"] }]
159
+ }, template: "@if (!textfield.value()) {\n <ng-content />\n} @else {\n @if (!results) {\n <tui-loader class=\"t-loader\" />\n } @else {\n @if (results && isEmpty(results)) {\n <tui-block-status\n size=\"m\"\n class=\"t-status\"\n >\n <tui-icon\n tuiSlot=\"top\"\n class=\"t-empty\"\n [icon]=\"options.empty\"\n />\n {{ i18n().empty }}\n </tui-block-status>\n } @else {\n @let items = (results | keyvalue: asIs) || [];\n <tui-scrollbar class=\"t-scrollbar\">\n @for (group of items | tuiFilter: notEmpty; track group) {\n @if (!active || active === $index + 1) {\n @if (!active && items.length > 1) {\n <label class=\"t-sr-label\">\n {{ group.key }}\n </label>\n }\n @for (item of group.value; track item) {\n <ng-container\n [ngTemplateOutlet]=\"template || null\"\n [ngTemplateOutletContext]=\"{$implicit: item}\"\n />\n }\n }\n }\n </tui-scrollbar>\n @if (items.length > 1) {\n <tui-tabs\n size=\"m\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"active\"\n (document:keydown.shift.tab.prevent)=\"tab(-1)\"\n (document:keydown.tab.prevent)=\"tab(1)\"\n >\n <button tuiTab>{{ i18n().all }}</button>\n @for (group of items; track group) {\n @if (group.value.length) {\n <button tuiTab>\n {{ group.key }}\n </button>\n }\n }\n </tui-tabs>\n }\n }\n }\n}\n", styles: [":host{display:flex;flex-direction:column;border-radius:var(--tui-radius-l);background:var(--tui-background-base);box-shadow:inset 0 0 0 1px var(--tui-border-normal)}:host ::ng-deep [tuiCell]{inline-size:stretch;padding:.375rem;margin:.25rem .625rem;border-radius:var(--tui-radius-l)}:host ::ng-deep [tuiCell]>[tuiAvatar]{border-radius:var(--tui-radius-m)}:host ::ng-deep .t-sr-label{display:block;font:var(--tui-font-text-ui-s);color:var(--tui-text-secondary);margin:.75rem 1rem .5rem}.t-loader{margin:1rem 0}.t-status{margin-block-end:2rem}.t-empty{margin-block-start:1.5rem;font-size:6rem;color:var(--tui-text-primary)}.t-tabs{order:-1;margin:0 1rem;box-shadow:none;border-image:linear-gradient(0deg,var(--tui-border-normal) 1px,transparent 0) fill 0/0/0 1rem}.t-tabs:before{background:var(--tui-background-accent-opposite-pressed)}.t-scrollbar{max-block-size:30rem;padding:.375rem 0}\n"] }]
162
160
  }], propDecorators: { template: [{
163
161
  type: ContentChild,
164
162
  args: [TemplateRef]
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-experimental-components-search-results.mjs","sources":["../../../projects/experimental/components/search-results/search-results.options.ts","../../../projects/experimental/components/search-results/search-history.component.ts","../../../projects/experimental/components/search-results/search-history.component.html","../../../projects/experimental/components/search-results/search-hotkey.directive.ts","../../../projects/experimental/components/search-results/search-results.component.ts","../../../projects/experimental/components/search-results/search-results.component.html","../../../projects/experimental/components/search-results/search-results.ts","../../../projects/experimental/components/search-results/taiga-ui-experimental-components-search-results.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport const [TUI_SEARCH_RESULTS_OPTIONS, tuiSearchResultsOptionsProvider] =\n tuiCreateOptions({\n key: 'taiga-search-history',\n history: '@tui.clock',\n popular: '@tui.search',\n empty: '@tui.search',\n remove: '@tui.trash',\n });\n","import {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\nimport {NgControl} from '@angular/forms';\nimport {WA_LOCAL_STORAGE} from '@ng-web-apis/common';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiTextfieldComponent} from '@taiga-ui/core/components/textfield';\nimport {TuiTitle} from '@taiga-ui/core/directives/title';\nimport {TUI_CLOSE_WORD} from '@taiga-ui/core/tokens';\nimport {TuiAvatar} from '@taiga-ui/kit/components/avatar';\nimport {TuiCell} from '@taiga-ui/layout/components/cell';\nimport {TUI_INPUT_SEARCH} from '@taiga-ui/layout/tokens';\nimport {filter, map} from 'rxjs';\n\nimport {TUI_SEARCH_RESULTS_OPTIONS} from './search-results.options';\n\n@Component({\n selector: 'tui-search-history',\n imports: [TuiAvatar, TuiButton, TuiCell, TuiTitle],\n templateUrl: './search-history.component.html',\n styles: [\n `\n :host:not(:empty) {\n display: block;\n padding: 0.375rem 0;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiSearchHistory {\n private readonly textfield = inject(TuiTextfieldComponent);\n private readonly storage = inject(WA_LOCAL_STORAGE);\n private readonly control = inject(NgControl);\n\n protected readonly close = toSignal(inject(TUI_CLOSE_WORD));\n protected readonly i18n = toSignal(inject(TUI_INPUT_SEARCH));\n protected readonly options = inject(TUI_SEARCH_RESULTS_OPTIONS);\n protected readonly $ = this.control.valueChanges\n ?.pipe(\n map(String),\n filter((item) => !!item && !this.popular.includes(item)),\n takeUntilDestroyed(),\n )\n .subscribe((value) => {\n this.store(value);\n });\n\n protected history = this.items;\n\n @Input()\n public popular: readonly string[] = [];\n\n protected store(item: string): void {\n this.storage?.setItem(\n this.options.key,\n JSON.stringify(\n Array.from(new Set([item.trim(), ...this.items]))\n .filter((v, _, a) => v && !a.find((s) => s.startsWith(v) && s !== v))\n .slice(0, 5),\n ),\n );\n }\n\n protected remove(item: string): void {\n this.textfield.input?.nativeElement.focus();\n this.history = this.history.filter((v) => v !== item);\n this.storage?.setItem(\n this.options.key,\n JSON.stringify(this.items.filter((v) => v !== item)),\n );\n }\n\n protected select(item: string): void {\n this.control.control?.setValue(item);\n this.textfield.input?.nativeElement.focus();\n }\n\n private get items(): readonly string[] {\n return JSON.parse(this.storage?.getItem(this.options.key) || '[]');\n }\n}\n","@if (history.length) {\n <label class=\"t-sr-label\">\n {{ i18n()?.history }}\n </label>\n}\n@for (item of history; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <div [tuiAvatar]=\"options.history\"></div>\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n 🗑️\n </button>\n </button>\n}\n@if (popular.length) {\n <label class=\"t-sr-label\">\n {{ i18n()?.popular }}\n </label>\n}\n@for (item of popular; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <span [tuiAvatar]=\"options.popular\"></span>\n <span tuiTitle>{{ item }}</span>\n </button>\n}\n","import {Directive, inject} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {WA_NAVIGATOR} from '@ng-web-apis/common';\nimport {TuiInputSearch} from '@taiga-ui/layout/components/input-search';\nimport {TUI_INPUT_SEARCH} from '@taiga-ui/layout/tokens';\nimport {map} from 'rxjs';\n\n@Directive({\n standalone: true,\n selector: 'input[tuiSearchHotkey]',\n host: {\n '[placeholder]': 'placeholder()',\n '(document:keydown.meta.k.stop)': 'search.open()',\n '(document:keydown.alt.k.stop)': 'search.open()',\n },\n})\nexport class TuiSearchHotkey {\n private readonly platform = inject(WA_NAVIGATOR).platform;\n\n protected readonly search = inject(TuiInputSearch);\n protected readonly placeholder = toSignal(\n inject(TUI_INPUT_SEARCH).pipe(\n map(({hotkey}) =>\n this.platform.startsWith('Mac') ? `⌘+K ${hotkey}` : `Alt+K ${hotkey}`,\n ),\n ),\n );\n}\n","import {type KeyValue, KeyValuePipe, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n inject,\n Input,\n type OnChanges,\n TemplateRef,\n} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {TuiLet} from '@taiga-ui/cdk/directives/let';\nimport {TuiFilterPipe} from '@taiga-ui/cdk/pipes/filter';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiMoveFocus} from '@taiga-ui/cdk/utils/focus';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiIconPipe} from '@taiga-ui/core/components/icon';\nimport {TuiLoader} from '@taiga-ui/core/components/loader';\nimport {TuiScrollbar} from '@taiga-ui/core/components/scrollbar';\nimport {TuiTextfieldComponent} from '@taiga-ui/core/components/textfield';\nimport {TuiTabs} from '@taiga-ui/kit/components/tabs';\nimport {TuiBlockStatus} from '@taiga-ui/layout/components/block-status';\nimport {TUI_INPUT_SEARCH} from '@taiga-ui/layout/tokens';\n\nimport {TUI_SEARCH_RESULTS_OPTIONS} from './search-results.options';\n\n@Component({\n selector: 'tui-search-results',\n imports: [\n KeyValuePipe,\n NgTemplateOutlet,\n TuiBlockStatus,\n TuiFilterPipe,\n TuiIconPipe,\n TuiLet,\n TuiLoader,\n TuiScrollbar,\n TuiTabs,\n ],\n templateUrl: './search-results.component.html',\n styleUrls: ['./search-results.component.less'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown.arrowDown.prevent)': 'onArrow($event.target, 1)',\n '(keydown.arrowUp.prevent)': 'onArrow($event.target, -1)',\n },\n})\nexport class TuiSearchResultsComponent<T> implements OnChanges {\n private readonly el = tuiInjectElement();\n\n protected readonly options = inject(TUI_SEARCH_RESULTS_OPTIONS);\n protected readonly i18n = toSignal(inject(TUI_INPUT_SEARCH));\n protected readonly textfield = inject(TuiTextfieldComponent);\n protected active = 0;\n\n @ContentChild(TemplateRef)\n public readonly template?: TemplateRef<TuiContext<T>>;\n\n @Input()\n public results: Record<string, readonly T[]> | null = {};\n\n public ngOnChanges(): void {\n this.active = 0;\n }\n\n @tuiPure\n protected isEmpty(results: Record<string, readonly T[]>): boolean {\n return !Object.values(results).reduce((total, {length}) => length + total, 0);\n }\n\n protected onArrow(current: HTMLElement, step: number): void {\n const elements = Array.from(this.el.querySelectorAll<HTMLElement>('[tuiCell]'));\n\n if (elements[0] === current && step < 0) {\n this.textfield.input?.nativeElement.focus();\n } else {\n tuiMoveFocus(elements.indexOf(current), elements, step);\n }\n }\n\n protected tab(step: number): void {\n const max = Object.values(this.results || {}).filter((v) => v.length).length;\n\n this.active = tuiClamp(this.active + step, 0, max);\n this.textfield.input?.nativeElement.focus();\n }\n\n protected notEmpty({value}: KeyValue<string, readonly T[]>): boolean {\n return !!value.length;\n }\n\n protected asIs(): number {\n return 0;\n }\n}\n","@if (!textfield.value()) {\n <ng-content />\n} @else {\n @if (!results) {\n <tui-loader class=\"t-loader\" />\n } @else {\n @if (results && isEmpty(results)) {\n <tui-block-status\n size=\"m\"\n class=\"t-status\"\n >\n <img\n alt=\"\"\n tuiSlot=\"top\"\n class=\"t-empty\"\n [src]=\"options.empty | tuiIcon\"\n />\n {{ i18n()?.empty }}\n </tui-block-status>\n } @else {\n <ng-container *tuiLet=\"(results | keyvalue: asIs) || [] as items\">\n <tui-scrollbar class=\"t-scrollbar\">\n @for (group of items | tuiFilter: notEmpty; track group; let index = $index) {\n @if (!active || active === index + 1) {\n @if (!active && items.length > 1) {\n <label class=\"t-sr-label\">\n {{ group.key }}\n </label>\n }\n @for (item of group.value; track item) {\n <ng-container\n [ngTemplateOutlet]=\"template || null\"\n [ngTemplateOutletContext]=\"{$implicit: item}\"\n />\n }\n }\n }\n </tui-scrollbar>\n @if (items.length > 1) {\n <tui-tabs\n size=\"m\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"active\"\n (document:keydown.shift.tab.prevent)=\"tab(-1)\"\n (document:keydown.tab.prevent)=\"tab(1)\"\n >\n <button tuiTab>{{ i18n()?.all }}</button>\n @for (group of items; track group) {\n @if (group.value.length) {\n <button tuiTab>\n {{ group.key }}\n </button>\n }\n }\n </tui-tabs>\n }\n </ng-container>\n }\n }\n}\n","import {TuiSearchHistory} from './search-history.component';\nimport {TuiSearchHotkey} from './search-hotkey.directive';\nimport {TuiSearchResultsComponent} from './search-results.component';\n\nexport const TuiSearchResults = [\n TuiSearchHotkey,\n TuiSearchHistory,\n TuiSearchResultsComponent,\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-experimental-components-search-results.mjs","sources":["../../../projects/experimental/components/search-results/search-results.options.ts","../../../projects/experimental/components/search-results/search-history.component.ts","../../../projects/experimental/components/search-results/search-history.component.html","../../../projects/experimental/components/search-results/search-hotkey.directive.ts","../../../projects/experimental/components/search-results/search-results.component.ts","../../../projects/experimental/components/search-results/search-results.component.html","../../../projects/experimental/components/search-results/search-results.ts","../../../projects/experimental/components/search-results/taiga-ui-experimental-components-search-results.ts"],"sourcesContent":["import {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport const [TUI_SEARCH_RESULTS_OPTIONS, tuiSearchResultsOptionsProvider] =\n tuiCreateOptions({\n key: 'taiga-search-history',\n history: '@tui.clock',\n popular: '@tui.search',\n empty: '@tui.search',\n remove: '@tui.trash',\n });\n","import {ChangeDetectionStrategy, Component, inject, Input} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {NgControl} from '@angular/forms';\nimport {WA_LOCAL_STORAGE} from '@ng-web-apis/common';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {TuiCell} from '@taiga-ui/core/components/cell';\nimport {TuiTextfieldComponent} from '@taiga-ui/core/components/textfield';\nimport {TuiTitle} from '@taiga-ui/core/components/title';\nimport {TUI_CLOSE_WORD} from '@taiga-ui/core/tokens';\nimport {TuiAvatar} from '@taiga-ui/kit/components/avatar';\nimport {TUI_INPUT_SEARCH} from '@taiga-ui/layout/tokens';\nimport {filter, map} from 'rxjs';\n\nimport {TUI_SEARCH_RESULTS_OPTIONS} from './search-results.options';\n\n@Component({\n selector: 'tui-search-history',\n imports: [TuiAvatar, TuiButton, TuiCell, TuiTitle],\n templateUrl: './search-history.component.html',\n styles: `\n :host:not(:empty) {\n display: block;\n padding: 0.375rem 0;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TuiSearchHistory {\n private readonly textfield = inject(TuiTextfieldComponent);\n private readonly storage = inject(WA_LOCAL_STORAGE);\n private readonly control = inject(NgControl);\n\n protected readonly close = inject(TUI_CLOSE_WORD);\n protected readonly i18n = inject(TUI_INPUT_SEARCH);\n protected readonly options = inject(TUI_SEARCH_RESULTS_OPTIONS);\n protected readonly $ = this.control.valueChanges\n ?.pipe(\n map(String),\n filter((item) => !!item && !this.popular.includes(item)),\n takeUntilDestroyed(),\n )\n .subscribe((value) => {\n this.store(value);\n });\n\n protected history = this.items;\n\n @Input()\n public popular: readonly string[] = [];\n\n protected store(item: string): void {\n this.storage?.setItem(\n this.options.key,\n JSON.stringify(\n Array.from(new Set([item.trim(), ...this.items]))\n .filter((v, _, a) => v && !a.find((s) => s.startsWith(v) && s !== v))\n .slice(0, 5),\n ),\n );\n }\n\n protected remove(item: string): void {\n this.textfield.input()?.nativeElement.focus();\n this.history = this.history.filter((v) => v !== item);\n this.storage?.setItem(\n this.options.key,\n JSON.stringify(this.items.filter((v) => v !== item)),\n );\n }\n\n protected select(item: string): void {\n this.control.control?.setValue(item);\n this.textfield.input()?.nativeElement.focus();\n }\n\n private get items(): readonly string[] {\n return JSON.parse(this.storage?.getItem(this.options.key) || '[]');\n }\n}\n","@if (history.length) {\n <label class=\"t-sr-label\">\n {{ i18n().history }}\n </label>\n}\n@for (item of history; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (keydown.backspace)=\"remove(item)\"\n (keydown.delete)=\"remove(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <div [tuiAvatar]=\"options.history\"></div>\n <span tuiTitle>{{ item }}</span>\n <button\n appearance=\"icon\"\n size=\"xs\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n [iconStart]=\"options.remove\"\n (click.stop)=\"remove(item)\"\n >\n 🗑️\n </button>\n </button>\n}\n@if (popular.length) {\n <label class=\"t-sr-label\">\n {{ i18n().popular }}\n </label>\n}\n@for (item of popular; track item) {\n <button\n tuiCell\n type=\"button\"\n (click)=\"select(item)\"\n (mousedown.prevent)=\"(0)\"\n >\n <span [tuiAvatar]=\"options.popular\"></span>\n <span tuiTitle>{{ item }}</span>\n </button>\n}\n","import {computed, Directive, inject} from '@angular/core';\nimport {WA_NAVIGATOR} from '@ng-web-apis/common';\nimport {TuiInputSearch} from '@taiga-ui/layout/components/input-search';\nimport {TUI_INPUT_SEARCH} from '@taiga-ui/layout/tokens';\n\n@Directive({\n selector: 'input[tuiSearchHotkey]',\n host: {\n '[placeholder]': 'placeholder()',\n '(document:keydown.meta.k.stop)': 'search.open()',\n '(document:keydown.alt.k.stop)': 'search.open()',\n },\n})\nexport class TuiSearchHotkey {\n private readonly platform = inject(WA_NAVIGATOR).platform;\n private readonly texts = inject(TUI_INPUT_SEARCH);\n\n protected readonly search = inject(TuiInputSearch);\n\n protected readonly placeholder = computed(({hotkey} = this.texts()) =>\n this.platform.startsWith('Mac') ? `⌘+K ${hotkey}` : `Alt+K ${hotkey}`,\n );\n}\n","import {type KeyValue, KeyValuePipe, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n inject,\n Input,\n type OnChanges,\n TemplateRef,\n} from '@angular/core';\nimport {TuiFilterPipe} from '@taiga-ui/cdk/pipes/filter';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiMoveFocus} from '@taiga-ui/cdk/utils/focus';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\nimport {tuiPure} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiIcon} from '@taiga-ui/core/components/icon';\nimport {TuiLoader} from '@taiga-ui/core/components/loader';\nimport {TuiScrollbar} from '@taiga-ui/core/components/scrollbar';\nimport {TuiTextfieldComponent} from '@taiga-ui/core/components/textfield';\nimport {TuiTabs} from '@taiga-ui/kit/components/tabs';\nimport {TuiBlockStatus} from '@taiga-ui/layout/components/block-status';\nimport {TUI_INPUT_SEARCH} from '@taiga-ui/layout/tokens';\n\nimport {TUI_SEARCH_RESULTS_OPTIONS} from './search-results.options';\n\n@Component({\n selector: 'tui-search-results',\n imports: [\n KeyValuePipe,\n NgTemplateOutlet,\n TuiBlockStatus,\n TuiFilterPipe,\n TuiIcon,\n TuiLoader,\n TuiScrollbar,\n TuiTabs,\n ],\n templateUrl: './search-results.component.html',\n styleUrl: './search-results.component.less',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(keydown.arrowDown.prevent)': 'onArrow($event.target, 1)',\n '(keydown.arrowUp.prevent)': 'onArrow($event.target, -1)',\n },\n})\nexport class TuiSearchResultsComponent<T> implements OnChanges {\n private readonly el = tuiInjectElement();\n\n protected readonly options = inject(TUI_SEARCH_RESULTS_OPTIONS);\n protected readonly i18n = inject(TUI_INPUT_SEARCH);\n protected readonly textfield = inject(TuiTextfieldComponent);\n protected active = 0;\n\n @ContentChild(TemplateRef)\n public readonly template?: TemplateRef<TuiContext<T>>;\n\n @Input()\n public results: Record<string, readonly T[]> | null = {};\n\n public ngOnChanges(): void {\n this.active = 0;\n }\n\n @tuiPure\n protected isEmpty(results: Record<string, readonly T[]>): boolean {\n return !Object.values(results).reduce((total, {length}) => length + total, 0);\n }\n\n protected onArrow(current: HTMLElement, step: number): void {\n const elements = Array.from(this.el.querySelectorAll<HTMLElement>('[tuiCell]'));\n\n if (elements[0] === current && step < 0) {\n this.textfield.input()?.nativeElement.focus();\n } else {\n tuiMoveFocus(elements.indexOf(current), elements, step);\n }\n }\n\n protected tab(step: number): void {\n const max = Object.values(this.results || {}).filter((v) => v.length).length;\n\n this.active = tuiClamp(this.active + step, 0, max);\n this.textfield.input()?.nativeElement.focus();\n }\n\n protected notEmpty({value}: KeyValue<string, readonly T[]>): boolean {\n return !!value.length;\n }\n\n protected asIs(): number {\n return 0;\n }\n}\n","@if (!textfield.value()) {\n <ng-content />\n} @else {\n @if (!results) {\n <tui-loader class=\"t-loader\" />\n } @else {\n @if (results && isEmpty(results)) {\n <tui-block-status\n size=\"m\"\n class=\"t-status\"\n >\n <tui-icon\n tuiSlot=\"top\"\n class=\"t-empty\"\n [icon]=\"options.empty\"\n />\n {{ i18n().empty }}\n </tui-block-status>\n } @else {\n @let items = (results | keyvalue: asIs) || [];\n <tui-scrollbar class=\"t-scrollbar\">\n @for (group of items | tuiFilter: notEmpty; track group) {\n @if (!active || active === $index + 1) {\n @if (!active && items.length > 1) {\n <label class=\"t-sr-label\">\n {{ group.key }}\n </label>\n }\n @for (item of group.value; track item) {\n <ng-container\n [ngTemplateOutlet]=\"template || null\"\n [ngTemplateOutletContext]=\"{$implicit: item}\"\n />\n }\n }\n }\n </tui-scrollbar>\n @if (items.length > 1) {\n <tui-tabs\n size=\"m\"\n class=\"t-tabs\"\n [(activeItemIndex)]=\"active\"\n (document:keydown.shift.tab.prevent)=\"tab(-1)\"\n (document:keydown.tab.prevent)=\"tab(1)\"\n >\n <button tuiTab>{{ i18n().all }}</button>\n @for (group of items; track group) {\n @if (group.value.length) {\n <button tuiTab>\n {{ group.key }}\n </button>\n }\n }\n </tui-tabs>\n }\n }\n }\n}\n","import {TuiSearchHistory} from './search-history.component';\nimport {TuiSearchHotkey} from './search-hotkey.directive';\nimport {TuiSearchResultsComponent} from './search-results.component';\n\nexport const TuiSearchResults = [\n TuiSearchHotkey,\n TuiSearchHistory,\n TuiSearchResultsComponent,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,3 @@
1
- export * from '@taiga-ui/experimental/components/accordion';
2
- export * from '@taiga-ui/experimental/components/dialog';
3
- export * from '@taiga-ui/experimental/components/expand';
4
- export * from '@taiga-ui/experimental/components/hint';
5
- export * from '@taiga-ui/experimental/components/input-phone-international';
6
1
  export * from '@taiga-ui/experimental/components/search-results';
7
2
 
8
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-experimental-components.mjs","sources":["../../../projects/experimental/components/taiga-ui-experimental-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAAA;;AAEG"}
1
+ {"version":3,"file":"taiga-ui-experimental-components.mjs","sources":["../../../projects/experimental/components/taiga-ui-experimental-components.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAA;;AAEG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/experimental",
3
- "version": "4.52.0-canary.e444d19",
3
+ "version": "4.52.0-canary.e53e79e",
4
4
  "description": "A package with Taiga UI experimental components",
5
5
  "keywords": [
6
6
  "angular",
@@ -8,7 +8,10 @@
8
8
  "layout"
9
9
  ],
10
10
  "homepage": "https://github.com/taiga-family/taiga-ui",
11
- "repository": "https://github.com/taiga-family/taiga-ui",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/taiga-family/taiga-ui"
14
+ },
12
15
  "license": "Apache-2.0",
13
16
  "peerDependencies": {
14
17
  "@angular/common": ">=19.0.0",
@@ -35,26 +38,6 @@
35
38
  "types": "./components/index.d.ts",
36
39
  "default": "./fesm2022/taiga-ui-experimental-components.mjs"
37
40
  },
38
- "./components/accordion": {
39
- "types": "./components/accordion/index.d.ts",
40
- "default": "./fesm2022/taiga-ui-experimental-components-accordion.mjs"
41
- },
42
- "./components/expand": {
43
- "types": "./components/expand/index.d.ts",
44
- "default": "./fesm2022/taiga-ui-experimental-components-expand.mjs"
45
- },
46
- "./components/dialog": {
47
- "types": "./components/dialog/index.d.ts",
48
- "default": "./fesm2022/taiga-ui-experimental-components-dialog.mjs"
49
- },
50
- "./components/hint": {
51
- "types": "./components/hint/index.d.ts",
52
- "default": "./fesm2022/taiga-ui-experimental-components-hint.mjs"
53
- },
54
- "./components/input-phone-international": {
55
- "types": "./components/input-phone-international/index.d.ts",
56
- "default": "./fesm2022/taiga-ui-experimental-components-input-phone-international.mjs"
57
- },
58
41
  "./components/search-results": {
59
42
  "types": "./components/search-results/index.d.ts",
60
43
  "default": "./fesm2022/taiga-ui-experimental-components-search-results.mjs"
@@ -1,20 +0,0 @@
1
- import { type AfterViewInit, type QueryList } from '@angular/core';
2
- import { type TuiSizeL, type TuiSizeS } from '@taiga-ui/core/types';
3
- import { TuiExpand } from '@taiga-ui/experimental/components/expand';
4
- import { TuiAccordionDirective } from './accordion.directive';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@taiga-ui/core/directives/group";
7
- export declare class TuiAccordionComponent implements AfterViewInit {
8
- private readonly destroyRef;
9
- private readonly toggle$;
10
- readonly expands: QueryList<TuiExpand>;
11
- readonly directives: QueryList<TuiAccordionDirective>;
12
- closeOthers: boolean;
13
- readonly size: import("@angular/core").WritableSignal<"s" | "m" | "l">;
14
- set sizeSetter(size: TuiSizeL | TuiSizeS);
15
- ngAfterViewInit(): void;
16
- toggle(directive: TuiAccordionDirective): void;
17
- private expand;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<TuiAccordionComponent, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<TuiAccordionComponent, "tui-accordion", never, { "closeOthers": { "alias": "closeOthers"; "required": false; }; "sizeSetter": { "alias": "size"; "required": false; }; }, {}, ["expands", "directives"], ["*"], true, [{ directive: typeof i1.TuiGroup; inputs: {}; outputs: {}; }]>;
20
- }
@@ -1,5 +0,0 @@
1
- import { TuiItem } from '@taiga-ui/cdk/directives/item';
2
- import { TuiExpand } from '@taiga-ui/experimental/components/expand';
3
- import { TuiAccordionComponent } from './accordion.component';
4
- import { TuiAccordionDirective } from './accordion.directive';
5
- export declare const TuiAccordion: readonly [typeof TuiAccordionComponent, typeof TuiAccordionDirective, typeof TuiExpand, typeof TuiItem];
@@ -1,15 +0,0 @@
1
- import { EventEmitter, type OnChanges } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@taiga-ui/core/components/button";
4
- import * as i2 from "@taiga-ui/kit/directives/chevron";
5
- export declare class TuiAccordionDirective implements OnChanges {
6
- private readonly accordion;
7
- protected readonly size: import("@angular/core").WritableSignal<"s" | "m" | "l">;
8
- tuiAccordion: boolean | string;
9
- readonly tuiAccordionChange: EventEmitter<boolean>;
10
- readonly open: import("@angular/core").WritableSignal<boolean>;
11
- ngOnChanges(): void;
12
- toggle(): void;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<TuiAccordionDirective, never>;
14
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiAccordionDirective, "button[tuiAccordion]", never, { "tuiAccordion": { "alias": "tuiAccordion"; "required": false; }; }, { "tuiAccordionChange": "tuiAccordionChange"; }, never, never, true, [{ directive: typeof i1.TuiButton; inputs: {}; outputs: {}; }, { directive: typeof i2.TuiChevron; inputs: {}; outputs: {}; }]>;
15
- }
@@ -1,3 +0,0 @@
1
- export * from './accordion';
2
- export * from './accordion.component';
3
- export * from './accordion.directive';
@@ -1,15 +0,0 @@
1
- import { type TuiPopover } from '@taiga-ui/cdk/services';
2
- import { Subject } from 'rxjs';
3
- import { type TuiDialogOptions } from './dialog.options';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@taiga-ui/cdk/directives/animated";
6
- export declare class TuiDialogComponent<O, I> {
7
- protected readonly close$: Subject<void>;
8
- protected readonly close: import("@angular/core").Signal<string | undefined>;
9
- protected readonly icons: import("@taiga-ui/core/tokens").TuiCommonIcons;
10
- protected readonly context: TuiPopover<TuiDialogOptions<I>, O>;
11
- protected readonly sub: import("rxjs").Subscription;
12
- protected get primitive(): boolean;
13
- static ɵfac: i0.ɵɵFactoryDeclaration<TuiDialogComponent<any, any>, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<TuiDialogComponent<any, any>, "tui-dialog", never, {}, {}, never, never, true, [{ directive: typeof i1.TuiAnimated; inputs: {}; outputs: {}; }]>;
15
- }
@@ -1,7 +0,0 @@
1
- import { TuiPopoverDirective } from '@taiga-ui/cdk/directives/popover';
2
- import { type TuiDialogOptions } from './dialog.options';
3
- import * as i0 from "@angular/core";
4
- export declare class TuiDialog<T> extends TuiPopoverDirective<TuiDialogOptions<T>> {
5
- static ɵfac: i0.ɵɵFactoryDeclaration<TuiDialog<any>, never>;
6
- static ɵdir: i0.ɵɵDirectiveDeclaration<TuiDialog<any>, "ng-template[tuiDialog]", never, { "options": { "alias": "tuiDialogOptions"; "required": false; }; "open": { "alias": "tuiDialog"; "required": false; }; }, { "openChange": "tuiDialogChange"; }, never, never, true, never>;
7
- }
@@ -1,27 +0,0 @@
1
- import { type TuiPopoverContext } from '@taiga-ui/cdk/services';
2
- import { type TuiSizeL, type TuiSizeS } from '@taiga-ui/core/types';
3
- import { type Observable } from 'rxjs';
4
- /**
5
- * Options for a dialog
6
- *
7
- * appearance - data-appearance attribute of the dialog ('taiga' by default)
8
- * closable - show close button (true by default)
9
- * data - arbitrary data for dialog
10
- * dismissible - close dialog by Esc button or click on overlay (true by default)
11
- * label - string title for the dialog ('' by default)
12
- * required - dismissing or closing dialog by X button throws (false by default)
13
- * size - size of the dialog ('m' by default)
14
- */
15
- export interface TuiDialogOptions<I> {
16
- readonly appearance: string;
17
- readonly closable: Observable<boolean> | boolean;
18
- readonly data: I extends void ? undefined : I;
19
- readonly dismissible: Observable<boolean> | boolean;
20
- readonly label: string;
21
- readonly required: boolean;
22
- readonly size: TuiSizeL | TuiSizeS;
23
- }
24
- export interface TuiDialogContext<O = void, I = undefined> extends TuiPopoverContext<O>, TuiDialogOptions<I> {
25
- }
26
- export declare const TUI_DIALOG_DEFAULT_OPTIONS: TuiDialogOptions<void>;
27
- export declare const TUI_DIALOG_OPTIONS: import("@angular/core").InjectionToken<TuiDialogOptions<void>>, tuiDialogOptionsProvider: (item: Partial<TuiDialogOptions<void>> | import("@angular/core").ProviderToken<Partial<TuiDialogOptions<void>>> | (() => Partial<TuiDialogOptions<void>>)) => import("@angular/core").FactoryProvider;
@@ -1,7 +0,0 @@
1
- import { TuiPopoverService } from '@taiga-ui/cdk/services';
2
- import { type TuiDialogOptions } from './dialog.options';
3
- import * as i0 from "@angular/core";
4
- export declare class TuiDialogService extends TuiPopoverService<TuiDialogOptions<any>> {
5
- static ɵfac: i0.ɵɵFactoryDeclaration<TuiDialogService, never>;
6
- static ɵprov: i0.ɵɵInjectableDeclaration<TuiDialogService>;
7
- }
@@ -1,4 +0,0 @@
1
- export * from './dialog.component';
2
- export * from './dialog.directive';
3
- export * from './dialog.options';
4
- export * from './dialog.service';
@@ -1,13 +0,0 @@
1
- import { TemplateRef } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export declare class TuiExpand {
4
- private readonly el;
5
- private readonly cdr;
6
- protected content?: TemplateRef<any>;
7
- protected readonly signal: import("@angular/core").WritableSignal<boolean>;
8
- protected readonly animating: import("@angular/core").WritableSignal<boolean>;
9
- set expanded(expanded: boolean);
10
- protected onTransitionEnd({ propertyName }: TransitionEvent): void;
11
- static ɵfac: i0.ɵɵFactoryDeclaration<TuiExpand, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<TuiExpand, "tui-expand", never, { "expanded": { "alias": "expanded"; "required": false; }; }, {}, ["content"], ["*"], true, never>;
13
- }
@@ -1 +0,0 @@
1
- export * from './expand.component';