@taiga-ui/cdk 4.75.0 → 4.77.0

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.
@@ -1 +1 @@
1
- export declare const TUI_VERSION = "4.75.0";
1
+ export declare const TUI_VERSION = "4.77.0";
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TUI_VERSION = void 0;
4
- exports.TUI_VERSION = '4.75.0';
4
+ exports.TUI_VERSION = '4.77.0';
5
5
  //# sourceMappingURL=version.js.map
@@ -23,6 +23,7 @@ export * from '@taiga-ui/cdk/directives/repeat-times';
23
23
  export * from '@taiga-ui/cdk/directives/resizer';
24
24
  export * from '@taiga-ui/cdk/directives/swipe';
25
25
  export * from '@taiga-ui/cdk/directives/transitioned';
26
+ export * from '@taiga-ui/cdk/directives/truncate';
26
27
  export * from '@taiga-ui/cdk/directives/validator';
27
28
  export * from '@taiga-ui/cdk/directives/value-changes';
28
29
  export * from '@taiga-ui/cdk/directives/visual-viewport';
@@ -0,0 +1,2 @@
1
+ export * from './truncate.directive';
2
+ export * from './truncate.service';
@@ -0,0 +1,14 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class TuiTruncate {
3
+ private readonly service;
4
+ private readonly el;
5
+ private readonly width;
6
+ protected lines: import("@angular/core").WritableSignal<number>;
7
+ protected readonly text: import("@angular/core").Signal<string>;
8
+ protected readonly nothing: undefined;
9
+ readonly truncated: import("@angular/core").Signal<string>;
10
+ set tuiTruncate(value: number | string);
11
+ private get innerText();
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiTruncate, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TuiTruncate, "[tuiTruncate]", never, { "tuiTruncate": { "alias": "tuiTruncate"; "required": false; }; }, {}, never, never, true, never>;
14
+ }
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class TuiTruncateService {
3
+ private readonly el;
4
+ private readonly ctx;
5
+ truncate(text: string, lines: number): string;
6
+ private getLines;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<TuiTruncateService, never>;
8
+ static ɵprov: i0.ɵɵInjectableDeclaration<TuiTruncateService>;
9
+ }
@@ -2,6 +2,7 @@ import * as i0 from "@angular/core";
2
2
  export declare class TuiVisualViewport {
3
3
  private readonly w;
4
4
  private readonly style;
5
+ private minInnerHeight;
5
6
  protected readonly $: import("rxjs").Subscription;
6
7
  static ɵfac: i0.ɵɵFactoryDeclaration<TuiVisualViewport, never>;
7
8
  static ɵdir: i0.ɵɵDirectiveDeclaration<TuiVisualViewport, "[tuiVisualViewport]", never, {}, {}, never, never, true, never>;
@@ -1,2 +1,2 @@
1
- export const TUI_VERSION = '4.75.0';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9jb25zdGFudHMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRVSV9WRVJTSU9OID0gJzQuNzUuMCc7XG4iXX0=
1
+ export const TUI_VERSION = '4.77.0';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9jb25zdGFudHMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRVSV9WRVJTSU9OID0gJzQuNzcuMCc7XG4iXX0=
@@ -23,8 +23,9 @@ export * from '@taiga-ui/cdk/directives/repeat-times';
23
23
  export * from '@taiga-ui/cdk/directives/resizer';
24
24
  export * from '@taiga-ui/cdk/directives/swipe';
25
25
  export * from '@taiga-ui/cdk/directives/transitioned';
26
+ export * from '@taiga-ui/cdk/directives/truncate';
26
27
  export * from '@taiga-ui/cdk/directives/validator';
27
28
  export * from '@taiga-ui/cdk/directives/value-changes';
28
29
  export * from '@taiga-ui/cdk/directives/visual-viewport';
29
30
  export * from '@taiga-ui/cdk/directives/zoom';
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvYWN0aXZlLXpvbmUnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2FuaW1hdGVkJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hdXRvLWZvY3VzJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9jb250cm9sJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9jb3B5LXByb2Nlc3Nvcic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvZHJvcHBhYmxlJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9mb2N1cy10cmFwJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9mb250LXNpemUnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2Zvcic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvaGlnaC1kcGknO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2hvdmVyZWQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2l0ZW0nO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2xldCc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvbWVkaWEnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL25hdGl2ZS12YWxpZGF0b3InO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL29ic2N1cmVkJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9wYW4nO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3BsYXRmb3JtJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9wb3BvdmVyJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9yZXBlYXQtdGltZXMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3Jlc2l6ZXInO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3N3aXBlJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy90cmFuc2l0aW9uZWQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3ZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvdmFsdWUtY2hhbmdlcyc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvdmlzdWFsLXZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy96b29tJztcbiJdfQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZSc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvYW5pbWF0ZWQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2F1dG8tZm9jdXMnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2NsaWNrLW91dHNpZGUnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2NvbnRyb2wnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2NvcHktcHJvY2Vzc29yJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9kcm9wcGFibGUnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2VsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2ZvY3VzLXRyYXAnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2ZvbnQtc2l6ZSc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvZm9yJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9oaWdoLWRwaSc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvaG92ZXJlZCc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvaXRlbSc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvbGV0JztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9tZWRpYSc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvbmF0aXZlLXZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvb2JzY3VyZWQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3Bhbic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvcGxhdGZvcm0nO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3BvcG92ZXInO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3JlcGVhdC10aW1lcyc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvcmVzaXplcic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvc3dpcGUnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3RyYW5zaXRpb25lZCc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvdHJ1bmNhdGUnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL3ZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvdmFsdWUtY2hhbmdlcyc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvdmlzdWFsLXZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy96b29tJztcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './truncate.directive';
2
+ export * from './truncate.service';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy90cnVuY2F0ZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RydW5jYXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RydW5jYXRlLnNlcnZpY2UnO1xuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpZ2EtdWktY2RrLWRpcmVjdGl2ZXMtdHJ1bmNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvZGlyZWN0aXZlcy90cnVuY2F0ZS90YWlnYS11aS1jZGstZGlyZWN0aXZlcy10cnVuY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,80 @@
1
+ import { ChangeDetectionStrategy, Component, computed, Directive, inject, Input, signal, ViewEncapsulation, } from '@angular/core';
2
+ import { toSignal } from '@angular/core/rxjs-interop';
3
+ import { WA_MUTATION_OBSERVER_INIT, WaMutationObserverService, } from '@ng-web-apis/mutation-observer';
4
+ import { WaResizeObserverService } from '@ng-web-apis/resize-observer';
5
+ import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
6
+ import { tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous';
7
+ import { map } from 'rxjs';
8
+ import { TuiTruncateService } from './truncate.service';
9
+ import { tuiZoneOptimized } from '@taiga-ui/cdk/observables';
10
+ import * as i0 from "@angular/core";
11
+ class Styles {
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Styles, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: Styles, isStandalone: true, selector: "ng-component", ngImport: i0, template: '', isInline: true, styles: ["[tuiTruncate]{display:-webkit-box;letter-spacing:-1rem;-webkit-text-fill-color:transparent;-webkit-box-orient:block-axis;-webkit-line-clamp:1;overflow:hidden;inline-size:-webkit-fill-available}[tuiTruncate][data-lines=\"1\"]:before{white-space:nowrap}[tuiTruncate]:before{content:attr(data-text);inline-size:100%;letter-spacing:normal;-webkit-text-fill-color:currentColor;white-space:normal;overflow-wrap:anywhere}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Styles, decorators: [{
16
+ type: Component,
17
+ args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["[tuiTruncate]{display:-webkit-box;letter-spacing:-1rem;-webkit-text-fill-color:transparent;-webkit-box-orient:block-axis;-webkit-line-clamp:1;overflow:hidden;inline-size:-webkit-fill-available}[tuiTruncate][data-lines=\"1\"]:before{white-space:nowrap}[tuiTruncate]:before{content:attr(data-text);inline-size:100%;letter-spacing:normal;-webkit-text-fill-color:currentColor;white-space:normal;overflow-wrap:anywhere}\n"] }]
18
+ }] });
19
+ class TuiTruncate {
20
+ constructor() {
21
+ this.service = inject(TuiTruncateService);
22
+ this.el = tuiInjectElement();
23
+ this.width = toSignal(inject(WaResizeObserverService).pipe(map(([e]) => e?.contentRect.width ?? 0), tuiZoneOptimized()), { initialValue: 0 });
24
+ this.lines = signal(1);
25
+ this.text = toSignal(inject(WaMutationObserverService).pipe(map(() => this.innerText)), { initialValue: this.innerText });
26
+ this.nothing = tuiWithStyles(Styles);
27
+ this.truncated = computed(() => this.width() ? this.service.truncate(this.text(), this.lines()) : this.text());
28
+ }
29
+ set tuiTruncate(value) {
30
+ this.lines.set(Math.max(Number(value) || 1, 1));
31
+ }
32
+ get innerText() {
33
+ return this.el.innerText.trim();
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncate, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
36
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTruncate, isStandalone: true, selector: "[tuiTruncate]", inputs: { tuiTruncate: "tuiTruncate" }, host: { attributes: { "tuiTruncate": "" }, properties: { "attr.data-lines": "lines()", "attr.data-text": "truncated()", "style.-webkit-line-clamp": "lines()" } }, providers: [
37
+ TuiTruncateService,
38
+ WaResizeObserverService,
39
+ WaMutationObserverService,
40
+ {
41
+ provide: WA_MUTATION_OBSERVER_INIT,
42
+ useValue: {
43
+ attributes: true,
44
+ characterData: true,
45
+ subtree: true,
46
+ },
47
+ },
48
+ ], ngImport: i0 }); }
49
+ }
50
+ export { TuiTruncate };
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncate, decorators: [{
52
+ type: Directive,
53
+ args: [{
54
+ standalone: true,
55
+ selector: '[tuiTruncate]',
56
+ providers: [
57
+ TuiTruncateService,
58
+ WaResizeObserverService,
59
+ WaMutationObserverService,
60
+ {
61
+ provide: WA_MUTATION_OBSERVER_INIT,
62
+ useValue: {
63
+ attributes: true,
64
+ characterData: true,
65
+ subtree: true,
66
+ },
67
+ },
68
+ ],
69
+ host: {
70
+ tuiTruncate: '',
71
+ '[attr.data-lines]': 'lines()',
72
+ '[attr.data-text]': 'truncated()',
73
+ '[style.-webkit-line-clamp]': 'lines()',
74
+ },
75
+ }]
76
+ }], propDecorators: { tuiTruncate: [{
77
+ type: Input,
78
+ args: ['tuiTruncate']
79
+ }] } });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RpcmVjdGl2ZXMvdHJ1bmNhdGUvdHJ1bmNhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLHlCQUF5QixHQUM1QixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJCQUEyQixDQUFDOztBQUUzRCxNQU9NLE1BQU07K0dBQU4sTUFBTTttR0FBTixNQUFNLHdFQUxFLEVBQUU7OzRGQUtWLE1BQU07a0JBUFgsU0FBUztpQ0FDTSxJQUFJLFlBQ04sRUFBRSxpQkFFRyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNOztBQUluRCxNQXVCYSxXQUFXO0lBdkJ4QjtRQXdCcUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3JDLE9BQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLFVBQUssR0FBRyxRQUFRLENBQzdCLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQ3ZDLGdCQUFnQixFQUFFLENBQ3JCLEVBQ0QsRUFBQyxZQUFZLEVBQUUsQ0FBQyxFQUFDLENBQ3BCLENBQUM7UUFFUSxVQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRVQsU0FBSSxHQUFHLFFBQVEsQ0FDOUIsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDakUsRUFBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBQyxDQUNqQyxDQUFDO1FBRWlCLFlBQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkMsY0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDdEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FDaEYsQ0FBQztLQVVMO0lBUkcsSUFDVyxXQUFXLENBQUMsS0FBc0I7UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQVksU0FBUztRQUNqQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7K0dBL0JRLFdBQVc7bUdBQVgsV0FBVyx1UUFwQlQ7WUFDUCxrQkFBa0I7WUFDbEIsdUJBQXVCO1lBQ3ZCLHlCQUF5QjtZQUN6QjtnQkFDSSxPQUFPLEVBQUUseUJBQXlCO2dCQUNsQyxRQUFRLEVBQUU7b0JBQ04sVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGFBQWEsRUFBRSxJQUFJO29CQUNuQixPQUFPLEVBQUUsSUFBSTtpQkFDaEI7YUFDSjtTQUNKOztTQVFRLFdBQVc7NEZBQVgsV0FBVztrQkF2QnZCLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxlQUFlO29CQUN6QixTQUFTLEVBQUU7d0JBQ1Asa0JBQWtCO3dCQUNsQix1QkFBdUI7d0JBQ3ZCLHlCQUF5Qjt3QkFDekI7NEJBQ0ksT0FBTyxFQUFFLHlCQUF5Qjs0QkFDbEMsUUFBUSxFQUFFO2dDQUNOLFVBQVUsRUFBRSxJQUFJO2dDQUNoQixhQUFhLEVBQUUsSUFBSTtnQ0FDbkIsT0FBTyxFQUFFLElBQUk7NkJBQ2hCO3lCQUNKO3FCQUNKO29CQUNELElBQUksRUFBRTt3QkFDRixXQUFXLEVBQUUsRUFBRTt3QkFDZixtQkFBbUIsRUFBRSxTQUFTO3dCQUM5QixrQkFBa0IsRUFBRSxhQUFhO3dCQUNqQyw0QkFBNEIsRUFBRSxTQUFTO3FCQUMxQztpQkFDSjs4QkEwQmMsV0FBVztzQkFEckIsS0FBSzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGlyZWN0aXZlLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBzaWduYWwsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0b1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtcbiAgICBXQV9NVVRBVElPTl9PQlNFUlZFUl9JTklULFxuICAgIFdhTXV0YXRpb25PYnNlcnZlclNlcnZpY2UsXG59IGZyb20gJ0BuZy13ZWItYXBpcy9tdXRhdGlvbi1vYnNlcnZlcic7XG5pbXBvcnQge1dhUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlfSBmcm9tICdAbmctd2ViLWFwaXMvcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlXaXRoU3R5bGVzfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aVRydW5jYXRlU2VydmljZX0gZnJvbSAnLi90cnVuY2F0ZS5zZXJ2aWNlJztcbmltcG9ydCB7dHVpWm9uZU9wdGltaXplZH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuL3RydW5jYXRlLnN0eWxlcy5sZXNzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5jbGFzcyBTdHlsZXMge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t0dWlUcnVuY2F0ZV0nLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBUdWlUcnVuY2F0ZVNlcnZpY2UsXG4gICAgICAgIFdhUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgICAgICBXYU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBXQV9NVVRBVElPTl9PQlNFUlZFUl9JTklULFxuICAgICAgICAgICAgdXNlVmFsdWU6IHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXG4gICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIHR1aVRydW5jYXRlOiAnJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtbGluZXNdJzogJ2xpbmVzKCknLFxuICAgICAgICAnW2F0dHIuZGF0YS10ZXh0XSc6ICd0cnVuY2F0ZWQoKScsXG4gICAgICAgICdbc3R5bGUuLXdlYmtpdC1saW5lLWNsYW1wXSc6ICdsaW5lcygpJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlUcnVuY2F0ZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlID0gaW5qZWN0KFR1aVRydW5jYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoID0gdG9TaWduYWwoXG4gICAgICAgIGluamVjdChXYVJlc2l6ZU9ic2VydmVyU2VydmljZSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW2VdKSA9PiBlPy5jb250ZW50UmVjdC53aWR0aCA/PyAwKSxcbiAgICAgICAgICAgIHR1aVpvbmVPcHRpbWl6ZWQoKSxcbiAgICAgICAgKSxcbiAgICAgICAge2luaXRpYWxWYWx1ZTogMH0sXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCBsaW5lcyA9IHNpZ25hbCgxKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSB0ZXh0ID0gdG9TaWduYWwoXG4gICAgICAgIGluamVjdChXYU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlKS5waXBlKG1hcCgoKSA9PiB0aGlzLmlubmVyVGV4dCkpLFxuICAgICAgICB7aW5pdGlhbFZhbHVlOiB0aGlzLmlubmVyVGV4dH0sXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBub3RoaW5nID0gdHVpV2l0aFN0eWxlcyhTdHlsZXMpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHRydW5jYXRlZCA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMud2lkdGgoKSA/IHRoaXMuc2VydmljZS50cnVuY2F0ZSh0aGlzLnRleHQoKSwgdGhpcy5saW5lcygpKSA6IHRoaXMudGV4dCgpLFxuICAgICk7XG5cbiAgICBASW5wdXQoJ3R1aVRydW5jYXRlJylcbiAgICBwdWJsaWMgc2V0IHR1aVRydW5jYXRlKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5saW5lcy5zZXQoTWF0aC5tYXgoTnVtYmVyKHZhbHVlKSB8fCAxLCAxKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaW5uZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsLmlubmVyVGV4dC50cmltKCk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,100 @@
1
+ import { DOCUMENT, isPlatformBrowser } from '@angular/common';
2
+ import { inject, Injectable, PLATFORM_ID } from '@angular/core';
3
+ import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
4
+ import * as i0 from "@angular/core";
5
+ const ELLIPSIS = '\u2026';
6
+ class TuiTruncateService {
7
+ constructor() {
8
+ this.el = tuiInjectElement();
9
+ this.ctx = isPlatformBrowser(inject(PLATFORM_ID))
10
+ ? inject(DOCUMENT).createElement('canvas').getContext('2d')
11
+ : null;
12
+ }
13
+ truncate(text, lines) {
14
+ if (!this.ctx || !text || lines < 1) {
15
+ return text;
16
+ }
17
+ const style = getComputedStyle(this.el);
18
+ const fontFamily = style.fontFamily || 'sans-serif';
19
+ const fontSize = style.fontSize || '14px';
20
+ const fontWeight = style.fontWeight || '400';
21
+ const paddingLeft = parseFloat(style.paddingLeft) || 0;
22
+ const paddingRight = parseFloat(style.paddingRight) || 0;
23
+ const availableWidth = this.el.clientWidth - paddingLeft - paddingRight;
24
+ const safeWidth = Math.max(1, availableWidth - 4);
25
+ this.ctx.font = `${fontWeight} ${fontSize} ${fontFamily}`;
26
+ if (this.getLines(text, safeWidth).length <= lines) {
27
+ return text;
28
+ }
29
+ let low = 1;
30
+ let high = Math.max(1, text.length - ELLIPSIS.length);
31
+ let best = truncate(text, 1, 0);
32
+ while (low <= high) {
33
+ const keepLength = Math.floor((low + high) / 2);
34
+ const normalized = Math.max(1, keepLength);
35
+ const left = Math.ceil(normalized / 2);
36
+ const right = Math.floor(normalized / 2);
37
+ const candidate = truncate(text, left, right);
38
+ const candidateLines = this.getLines(candidate, safeWidth).length;
39
+ if (candidateLines <= lines) {
40
+ best = candidate;
41
+ low = keepLength + 1;
42
+ }
43
+ else {
44
+ high = keepLength - 1;
45
+ }
46
+ }
47
+ return this.getLines(best, safeWidth).slice(0, lines).join(' ');
48
+ }
49
+ getLines(text, maxWidth) {
50
+ if (!this.ctx || !text) {
51
+ return [];
52
+ }
53
+ const words = text.split(' ');
54
+ const lines = [];
55
+ let currentLine = '';
56
+ for (const word of words) {
57
+ const candidate = currentLine ? `${currentLine} ${word}` : word;
58
+ if (this.ctx.measureText(candidate).width <= maxWidth) {
59
+ currentLine = candidate;
60
+ continue;
61
+ }
62
+ if (currentLine) {
63
+ lines.push(currentLine);
64
+ currentLine = '';
65
+ }
66
+ if (this.ctx.measureText(word).width <= maxWidth) {
67
+ currentLine = word;
68
+ continue;
69
+ }
70
+ let chunk = '';
71
+ for (const char of word) {
72
+ const nextChunk = chunk + char;
73
+ if (this.ctx.measureText(nextChunk).width <= maxWidth) {
74
+ chunk = nextChunk;
75
+ }
76
+ else {
77
+ if (chunk) {
78
+ lines.push(chunk);
79
+ }
80
+ chunk = char;
81
+ }
82
+ }
83
+ currentLine = chunk;
84
+ }
85
+ if (currentLine) {
86
+ lines.push(currentLine);
87
+ }
88
+ return lines;
89
+ }
90
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
91
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncateService }); }
92
+ }
93
+ export { TuiTruncateService };
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncateService, decorators: [{
95
+ type: Injectable
96
+ }] });
97
+ function truncate(text, left, right) {
98
+ return `${text.slice(0, left)}${ELLIPSIS}${right > 0 ? text.slice(-right) : ''}`;
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1bmNhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL3RydW5jYXRlL3RydW5jYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFekQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBRTFCLE1BQ2Esa0JBQWtCO0lBRC9CO1FBRXFCLE9BQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLFFBQUcsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUMzRCxDQUFDLENBQUMsSUFBSSxDQUFDO0tBaUdkO0lBL0ZVLFFBQVEsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFD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LENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNyRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZSwgUExBVEZPUk1fSUR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0dWlJbmplY3RFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5cbmNvbnN0IEVMTElQU0lTID0gJ1xcdTIwMjYnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVHVpVHJ1bmNhdGVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3R4ID0gaXNQbGF0Zm9ybUJyb3dzZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSlcbiAgICAgICAgPyBpbmplY3QoRE9DVU1FTlQpLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJylcbiAgICAgICAgOiBudWxsO1xuXG4gICAgcHVibGljIHRydW5jYXRlKHRleHQ6IHN0cmluZywgbGluZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5jdHggfHwgIXRleHQgfHwgbGluZXMgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsKTtcbiAgICAgICAgY29uc3QgZm9udEZhbWlseSA9IHN0eWxlLmZvbnRGYW1pbHkgfHwgJ3NhbnMtc2VyaWYnO1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IHN0eWxlLmZvbnRTaXplIHx8ICcxNHB4JztcbiAgICAgICAgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlLmZvbnRXZWlnaHQgfHwgJzQwMCc7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nTGVmdCkgfHwgMDtcbiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nUmlnaHQpIHx8IDA7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gdGhpcy5lbC5jbGllbnRXaWR0aCAtIHBhZGRpbmdMZWZ0IC0gcGFkZGluZ1JpZ2h0O1xuICAgICAgICBjb25zdCBzYWZlV2lkdGggPSBNYXRoLm1heCgxLCBhdmFpbGFibGVXaWR0aCAtIDQpO1xuXG4gICAgICAgIHRoaXMuY3R4LmZvbnQgPSBgJHtmb250V2VpZ2h0fSAke2ZvbnRTaXplfSAke2ZvbnRGYW1pbHl9YDtcblxuICAgICAgICBpZiAodGhpcy5nZXRMaW5lcyh0ZXh0LCBzYWZlV2lkdGgpLmxlbmd0aCA8PSBsaW5lcykge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbG93ID0gMTtcbiAgICAgICAgbGV0IGhpZ2ggPSBNYXRoLm1heCgxLCB0ZXh0Lmxlbmd0aCAtIEVMTElQU0lTLmxlbmd0aCk7XG4gICAgICAgIGxldCBiZXN0ID0gdHJ1bmNhdGUodGV4dCwgMSwgMCk7XG5cbiAgICAgICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICAgICAgICBjb25zdCBrZWVwTGVuZ3RoID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKTtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBNYXRoLm1heCgxLCBrZWVwTGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBNYXRoLmNlaWwobm9ybWFsaXplZCAvIDIpO1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBNYXRoLmZsb29yKG5vcm1hbGl6ZWQgLyAyKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRydW5jYXRlKHRleHQsIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZUxpbmVzID0gdGhpcy5nZXRMaW5lcyhjYW5kaWRhdGUsIHNhZmVXaWR0aCkubGVuZ3RoO1xuXG4gICAgICAgICAgICBpZiAoY2FuZGlkYXRlTGluZXMgPD0gbGluZXMpIHtcbiAgICAgICAgICAgICAgICBiZXN0ID0gY2FuZGlkYXRlO1xuICAgICAgICAgICAgICAgIGxvdyA9IGtlZXBMZW5ndGggKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoaWdoID0ga2VlcExlbmd0aCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lcyhiZXN0LCBzYWZlV2lkdGgpLnNsaWNlKDAsIGxpbmVzKS5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMaW5lcyh0ZXh0OiBzdHJpbmcsIG1heFdpZHRoOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghdGhpcy5jdHggfHwgIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvcmRzID0gdGV4dC5zcGxpdCgnICcpO1xuICAgICAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgbGV0IGN1cnJlbnRMaW5lID0gJyc7XG5cbiAgICAgICAgZm9yIChjb25zdCB3b3JkIG9mIHdvcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBjdXJyZW50TGluZSA/IGAke2N1cnJlbnRMaW5lfSAke3dvcmR9YCA6IHdvcmQ7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5tZWFzdXJlVGV4dChjYW5kaWRhdGUpLndpZHRoIDw9IG1heFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudExpbmUgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50TGluZSkge1xuICAgICAgICAgICAgICAgIGxpbmVzLnB1c2goY3VycmVudExpbmUpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN0eC5tZWFzdXJlVGV4dCh3b3JkKS53aWR0aCA8PSBtYXhXaWR0aCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lID0gd29yZDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNodW5rID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hhciBvZiB3b3JkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENodW5rID0gY2h1bmsgKyBjaGFyO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3R4Lm1lYXN1cmVUZXh0KG5leHRDaHVuaykud2lkdGggPD0gbWF4V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBuZXh0Q2h1bms7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2hhcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRMaW5lID0gY2h1bms7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudExpbmUpIHtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goY3VycmVudExpbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdHJ1bmNhdGUodGV4dDogc3RyaW5nLCBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0ZXh0LnNsaWNlKDAsIGxlZnQpfSR7RUxMSVBTSVN9JHtyaWdodCA+IDAgPyB0ZXh0LnNsaWNlKC1yaWdodCkgOiAnJ31gO1xufVxuIl19
@@ -8,9 +8,11 @@ class TuiVisualViewport {
8
8
  constructor() {
9
9
  this.w = inject(WA_WINDOW);
10
10
  this.style = tuiInjectElement().style;
11
+ this.minInnerHeight = Infinity;
11
12
  this.$ = inject(ViewportService)
12
13
  .pipe(takeUntilDestroyed())
13
14
  .subscribe(({ offsetLeft, offsetTop, height, width, scale }) => {
15
+ this.minInnerHeight = Math.min(this.minInnerHeight, this.w.innerHeight);
14
16
  this.style.setProperty('--tui-viewport-x', tuiPx(offsetLeft));
15
17
  this.style.setProperty('--tui-viewport-y', tuiPx(offsetTop));
16
18
  this.style.setProperty('--tui-viewport-height', tuiPx(height));
@@ -18,6 +20,7 @@ class TuiVisualViewport {
18
20
  this.style.setProperty('--tui-viewport-scale', String(scale));
19
21
  this.style.setProperty('--tui-viewport-vh', tuiPx(this.w.innerHeight / 100));
20
22
  this.style.setProperty('--tui-viewport-vw', tuiPx(this.w.innerWidth / 100));
23
+ this.style.setProperty('--tui-viewport-svh', tuiPx(this.minInnerHeight / 100));
21
24
  });
22
25
  }
23
26
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiVisualViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
@@ -31,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
31
34
  selector: '[tuiVisualViewport]',
32
35
  }]
33
36
  }] });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLXZpZXdwb3J0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL3Zpc3VhbC12aWV3cG9ydC92aXN1YWwtdmlld3BvcnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDOztBQUU1RCxNQUlhLGlCQUFpQjtJQUo5QjtRQUtxQixNQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RCLFVBQUssR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUUvQixNQUFDLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQzthQUN6QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsRUFBRSxFQUFFO1lBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLENBQUMsQ0FBQyxDQUFDO0tBQ1Y7K0dBZlksaUJBQWlCO21HQUFqQixpQkFBaUI7O1NBQWpCLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUscUJBQXFCO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7V0FfV0lORE9XfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7Vmlld3BvcnRTZXJ2aWNlfSBmcm9tICdAbmctd2ViLWFwaXMvc2NyZWVuLW9yaWVudGF0aW9uJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudCwgdHVpUHh9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3R1aVZpc3VhbFZpZXdwb3J0XScsXG59KVxuZXhwb3J0IGNsYXNzIFR1aVZpc3VhbFZpZXdwb3J0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHcgPSBpbmplY3QoV0FfV0lORE9XKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlID0gdHVpSW5qZWN0RWxlbWVudCgpLnN0eWxlO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICQgPSBpbmplY3QoVmlld3BvcnRTZXJ2aWNlKVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoe29mZnNldExlZnQsIG9mZnNldFRvcCwgaGVpZ2h0LCB3aWR0aCwgc2NhbGV9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXR1aS12aWV3cG9ydC14JywgdHVpUHgob2Zmc2V0TGVmdCkpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10dWktdmlld3BvcnQteScsIHR1aVB4KG9mZnNldFRvcCkpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10dWktdmlld3BvcnQtaGVpZ2h0JywgdHVpUHgoaGVpZ2h0KSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXR1aS12aWV3cG9ydC13aWR0aCcsIHR1aVB4KHdpZHRoKSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXR1aS12aWV3cG9ydC1zY2FsZScsIFN0cmluZyhzY2FsZSkpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10dWktdmlld3BvcnQtdmgnLCB0dWlQeCh0aGlzLncuaW5uZXJIZWlnaHQgLyAxMDApKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdHVpLXZpZXdwb3J0LXZ3JywgdHVpUHgodGhpcy53LmlubmVyV2lkdGggLyAxMDApKTtcbiAgICAgICAgfSk7XG59XG4iXX0=
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzdWFsLXZpZXdwb3J0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9kaXJlY3RpdmVzL3Zpc3VhbC12aWV3cG9ydC92aXN1YWwtdmlld3BvcnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBQyxNQUFNLHFCQUFxQixDQUFDOztBQUU1RCxNQUlhLGlCQUFpQjtJQUo5QjtRQUtxQixNQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RCLFVBQUssR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUMxQyxtQkFBYyxHQUFHLFFBQVEsQ0FBQztRQUVmLE1BQUMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO2FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzFCLFNBQVMsQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV4RSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDbEIsb0JBQW9CLEVBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7S0FDVjsrR0F0QlksaUJBQWlCO21HQUFqQixpQkFBaUI7O1NBQWpCLGlCQUFpQjs0RkFBakIsaUJBQWlCO2tCQUo3QixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUscUJBQXFCO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7V0FfV0lORE9XfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7Vmlld3BvcnRTZXJ2aWNlfSBmcm9tICdAbmctd2ViLWFwaXMvc2NyZWVuLW9yaWVudGF0aW9uJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudCwgdHVpUHh9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3R1aVZpc3VhbFZpZXdwb3J0XScsXG59KVxuZXhwb3J0IGNsYXNzIFR1aVZpc3VhbFZpZXdwb3J0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHcgPSBpbmplY3QoV0FfV0lORE9XKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlID0gdHVpSW5qZWN0RWxlbWVudCgpLnN0eWxlO1xuICAgIHByaXZhdGUgbWluSW5uZXJIZWlnaHQgPSBJbmZpbml0eTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSAkID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHtvZmZzZXRMZWZ0LCBvZmZzZXRUb3AsIGhlaWdodCwgd2lkdGgsIHNjYWxlfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5taW5Jbm5lckhlaWdodCA9IE1hdGgubWluKHRoaXMubWluSW5uZXJIZWlnaHQsIHRoaXMudy5pbm5lckhlaWdodCk7XG5cbiAgICAgICAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdHVpLXZpZXdwb3J0LXgnLCB0dWlQeChvZmZzZXRMZWZ0KSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXR1aS12aWV3cG9ydC15JywgdHVpUHgob2Zmc2V0VG9wKSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXR1aS12aWV3cG9ydC1oZWlnaHQnLCB0dWlQeChoZWlnaHQpKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdHVpLXZpZXdwb3J0LXdpZHRoJywgdHVpUHgod2lkdGgpKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoJy0tdHVpLXZpZXdwb3J0LXNjYWxlJywgU3RyaW5nKHNjYWxlKSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KCctLXR1aS12aWV3cG9ydC12aCcsIHR1aVB4KHRoaXMudy5pbm5lckhlaWdodCAvIDEwMCkpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10dWktdmlld3BvcnQtdncnLCB0dWlQeCh0aGlzLncuaW5uZXJXaWR0aCAvIDEwMCkpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAnLS10dWktdmlld3BvcnQtc3ZoJyxcbiAgICAgICAgICAgICAgICB0dWlQeCh0aGlzLm1pbklubmVySGVpZ2h0IC8gMTAwKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xufVxuIl19
@@ -215,7 +215,7 @@ const TUI_USED_ICONS = [
215
215
  '@tui.move-up',
216
216
  ];
217
217
 
218
- const TUI_VERSION = '4.75.0';
218
+ const TUI_VERSION = '4.77.0';
219
219
 
220
220
  /**
221
221
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-constants.mjs","sources":["../../../projects/cdk/constants/allow-signal-writes.ts","../../../projects/cdk/constants/empty.ts","../../../projects/cdk/constants/handlers.ts","../../../projects/cdk/constants/matchers.ts","../../../projects/cdk/constants/regexp.ts","../../../projects/cdk/constants/svg-node-filter.ts","../../../projects/cdk/constants/unicode-chars.ts","../../../projects/cdk/constants/used-icons.ts","../../../projects/cdk/constants/version.ts","../../../projects/cdk/constants/taiga-ui-cdk-constants.ts"],"sourcesContent":["import {type CreateEffectOptions, VERSION} from '@angular/core';\n\nexport const TUI_ALLOW_SIGNAL_WRITES: CreateEffectOptions =\n parseInt(VERSION.major, 10) >= 19 ? {} : {allowSignalWrites: true};\n","import {QueryList} from '@angular/core';\n\nconst rect = {\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0,\n x: 0,\n y: 0,\n} as const;\n\n/**\n * For type safety when using @ContentChildren and @ViewChildren\n *\n * NOTE: Be careful subscribing to 'changes'\n * @deprecated use viewChild(), viewChildren(), contentChild() and contentChildren() for strict type checking\n */\nexport const EMPTY_QUERY = new QueryList<any>();\nexport const EMPTY_ARRAY: [] = [];\nexport const EMPTY_FUNCTION: (...args: any[]) => void = () => {};\nexport const EMPTY_CLIENT_RECT: DOMRect = {\n ...rect,\n toJSON: () => rect,\n};\n","/**\n * Handler that always returns `false`.\n */\n// eslint-disable-next-line no-restricted-syntax\nexport const TUI_FALSE_HANDLER = (): false => false;\n\n/**\n * Handler that always returns `true`.\n */\n// eslint-disable-next-line no-restricted-syntax\nexport const TUI_TRUE_HANDLER = (): true => true;\n","import {type TuiHandler, type TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\nfunction bothEmpty(item1: unknown, item2: unknown): boolean {\n return Array.isArray(item1) && Array.isArray(item2) && !item1.length && !item2.length;\n}\n\n/**\n * Default handler for matching stringified version of an item and a search query\n * @param item arbitrary element to match with a string\n * @param search search query\n * @param stringify handler to turn item into a string\n */\nexport const TUI_DEFAULT_MATCHER = <T>(\n item: T,\n search: string,\n stringify: TuiHandler<T, string> = String,\n): boolean => stringify(item).toLowerCase().includes(search.toLowerCase());\n\n/**\n * Default handler for strict matching stringified version of an item and a search query\n * @param item arbitrary element to match with a string\n * @param search search query\n * @param stringify handler to turn item into a string\n */\nexport const TUI_STRICT_MATCHER = <T>(\n item: T,\n search: string,\n stringify: TuiHandler<T, string> = String,\n): boolean => stringify(item).toLowerCase() === search.toLowerCase();\n\n/**\n * Default handler to match equality of two elements\n * ATTENTION: considers two empty arrays equal\n *\n * @param item1 first element\n * @param item2 second element\n */\nexport const TUI_DEFAULT_IDENTITY_MATCHER: TuiIdentityMatcher<unknown> = (item1, item2) =>\n item1 === item2 || bothEmpty(item1, item2);\n","export const TUI_DIGIT_REGEXP = /\\d/;\nexport const TUI_NON_DIGIT_REGEXP = /\\D/;\nexport const TUI_NON_DIGITS_REGEXP = /\\D+/g;\n","export const svgNodeFilter: Exclude<NodeFilter, (node: Node) => number> = {\n acceptNode(node: Node): number {\n return 'ownerSVGElement' in node\n ? NodeFilter.FILTER_REJECT\n : NodeFilter.FILTER_ACCEPT;\n },\n};\n","/**\n * {@link https://unicode-table.com/en/00A0/ Non-breaking space}.\n */\nexport const CHAR_NO_BREAK_SPACE = '\\u00A0';\n\n/**\n * {@link https://unicode-table.com/en/2013/ EN dash}\n * is used to indicate a range of numbers or a span of time.\n * @example 2006–2022\n * ___\n * Don't confuse with {@link CHAR_EM_DASH} or {@link CHAR_HYPHEN}!\n */\nexport const CHAR_EN_DASH = '\\u2013';\n\n/**\n * {@link https://unicode-table.com/en/2014/ EM dash}\n * is used to mark a break in a sentence.\n * @example Taiga UI — powerful set of open source components for Angular\n * ___\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_HYPHEN}!\n */\nexport const CHAR_EM_DASH = '\\u2014';\n\n/**\n * {@link https://unicode-table.com/en/00AB/ Left-Pointing Double Angle Quotation Mark}\n */\nexport const CHAR_LAQUO = '\\u00AB';\n\n/**\n * {@link https://unicode-table.com/en/00BB/ Right-Pointing Double Angle Quotation Mark}\n */\nexport const CHAR_RAQUO = '\\u00BB';\n\n/**\n * {@link https://unicode-table.com/en/002D/ Hyphen (minus sign)}\n * is used to combine words.\n * @example well-behaved\n * ___\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_EM_DASH}!\n */\nexport const CHAR_HYPHEN = '\\u002D';\n\n/**\n * {@link https://unicode-table.com/en/2212/ Minus}\n * is used as math operator symbol or before negative digits.\n * ---\n * Can be used as `&minus;`. Don't confuse with {@link CHAR_HYPHEN}\n */\nexport const CHAR_MINUS = '\\u2212';\n\n/**\n * {@link https://unicode-table.com/en/002B/ Plus}\n */\nexport const CHAR_PLUS = '\\u002B';\n\n/**\n * {@link https://unicode-table.com/en/2022/ Bullet}.\n */\nexport const CHAR_BULLET = '\\u2022';\n\n/**\n * {@link https://unicode-table.com/en/2026/ Suspension points}.\n */\nexport const CHAR_ELLIPSIS = '\\u2026';\n\n/**\n * {@link https://unicode-table.com/en/00A4/ Suspension points}.\n */\nexport const CHAR_CURRENCY_SIGN = '\\u00A4';\n\n/**\n * {@link https://unicode-table.com/en/200b/ Suspension points}.\n */\nexport const CHAR_ZERO_WIDTH_SPACE = '\\u200B';\n","/**\n * @description:\n * AUTOGENERATED\n *\n * Array of icons used in taiga-ui components\n */\nexport const TUI_USED_ICONS = [\n '@tui.mir',\n '@tui.visa',\n '@tui.electron',\n '@tui.mastercard',\n '@tui.maestro',\n '@tui.amex',\n '@tui.diners-club',\n '@tui.discover',\n '@tui.humo',\n '@tui.jcb',\n '@tui.ru-pay',\n '@tui.union-pay',\n '@tui.uzcard',\n '@tui.verve',\n '@tui.search',\n '@tui.sun',\n '@tui.moon',\n '@tui.code',\n '@tui.menu',\n '@tui.copy',\n '@tui.check',\n '@tui.link',\n '@tui.external-link',\n '@tui.languages',\n '@tui.shrink',\n '@tui.expand',\n '@tui.a-large-small',\n '@tui.arrow-right-left',\n '@tui.eye-off',\n '@tui.eye',\n '@tui.grip-vertical',\n '@tui.chevron-up',\n '@tui.chevron-down',\n '@tui.chevrons-up-down',\n '@tui.info',\n '@tui.circle-check',\n '@tui.circle-x',\n '@tui.circle-alert',\n '@tui.circle-help',\n '@tui.x',\n '@tui.chevron-right',\n '@tui.ellipsis',\n '@tui.chevron-left',\n '@tui.clock',\n '@tui.trash',\n '@tui.minus',\n '@tui.plus',\n '@tui.file',\n '@tui.calendar',\n '@tui.phone',\n '@tui.heart',\n '@tui.heart-filled',\n '@tui.star',\n '@tui.rotate-ccw-square',\n '@tui.arrow-left',\n '@tui.arrow-right',\n '@tui.minimize',\n '@tui.filter',\n '@tui.layout-grid',\n '@tui.move-up-right',\n '@tui.move-right',\n '@tui.move-down-right',\n '@tui.move-down',\n '@tui.move-down-left',\n '@tui.move-left',\n '@tui.move-up-left',\n '@tui.move-up',\n] as const;\n","export const TUI_VERSION = '4.75.0';\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-cdk-constants.mjs","sources":["../../../projects/cdk/constants/allow-signal-writes.ts","../../../projects/cdk/constants/empty.ts","../../../projects/cdk/constants/handlers.ts","../../../projects/cdk/constants/matchers.ts","../../../projects/cdk/constants/regexp.ts","../../../projects/cdk/constants/svg-node-filter.ts","../../../projects/cdk/constants/unicode-chars.ts","../../../projects/cdk/constants/used-icons.ts","../../../projects/cdk/constants/version.ts","../../../projects/cdk/constants/taiga-ui-cdk-constants.ts"],"sourcesContent":["import {type CreateEffectOptions, VERSION} from '@angular/core';\n\nexport const TUI_ALLOW_SIGNAL_WRITES: CreateEffectOptions =\n parseInt(VERSION.major, 10) >= 19 ? {} : {allowSignalWrites: true};\n","import {QueryList} from '@angular/core';\n\nconst rect = {\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0,\n x: 0,\n y: 0,\n} as const;\n\n/**\n * For type safety when using @ContentChildren and @ViewChildren\n *\n * NOTE: Be careful subscribing to 'changes'\n * @deprecated use viewChild(), viewChildren(), contentChild() and contentChildren() for strict type checking\n */\nexport const EMPTY_QUERY = new QueryList<any>();\nexport const EMPTY_ARRAY: [] = [];\nexport const EMPTY_FUNCTION: (...args: any[]) => void = () => {};\nexport const EMPTY_CLIENT_RECT: DOMRect = {\n ...rect,\n toJSON: () => rect,\n};\n","/**\n * Handler that always returns `false`.\n */\n// eslint-disable-next-line no-restricted-syntax\nexport const TUI_FALSE_HANDLER = (): false => false;\n\n/**\n * Handler that always returns `true`.\n */\n// eslint-disable-next-line no-restricted-syntax\nexport const TUI_TRUE_HANDLER = (): true => true;\n","import {type TuiHandler, type TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\nfunction bothEmpty(item1: unknown, item2: unknown): boolean {\n return Array.isArray(item1) && Array.isArray(item2) && !item1.length && !item2.length;\n}\n\n/**\n * Default handler for matching stringified version of an item and a search query\n * @param item arbitrary element to match with a string\n * @param search search query\n * @param stringify handler to turn item into a string\n */\nexport const TUI_DEFAULT_MATCHER = <T>(\n item: T,\n search: string,\n stringify: TuiHandler<T, string> = String,\n): boolean => stringify(item).toLowerCase().includes(search.toLowerCase());\n\n/**\n * Default handler for strict matching stringified version of an item and a search query\n * @param item arbitrary element to match with a string\n * @param search search query\n * @param stringify handler to turn item into a string\n */\nexport const TUI_STRICT_MATCHER = <T>(\n item: T,\n search: string,\n stringify: TuiHandler<T, string> = String,\n): boolean => stringify(item).toLowerCase() === search.toLowerCase();\n\n/**\n * Default handler to match equality of two elements\n * ATTENTION: considers two empty arrays equal\n *\n * @param item1 first element\n * @param item2 second element\n */\nexport const TUI_DEFAULT_IDENTITY_MATCHER: TuiIdentityMatcher<unknown> = (item1, item2) =>\n item1 === item2 || bothEmpty(item1, item2);\n","export const TUI_DIGIT_REGEXP = /\\d/;\nexport const TUI_NON_DIGIT_REGEXP = /\\D/;\nexport const TUI_NON_DIGITS_REGEXP = /\\D+/g;\n","export const svgNodeFilter: Exclude<NodeFilter, (node: Node) => number> = {\n acceptNode(node: Node): number {\n return 'ownerSVGElement' in node\n ? NodeFilter.FILTER_REJECT\n : NodeFilter.FILTER_ACCEPT;\n },\n};\n","/**\n * {@link https://unicode-table.com/en/00A0/ Non-breaking space}.\n */\nexport const CHAR_NO_BREAK_SPACE = '\\u00A0';\n\n/**\n * {@link https://unicode-table.com/en/2013/ EN dash}\n * is used to indicate a range of numbers or a span of time.\n * @example 2006–2022\n * ___\n * Don't confuse with {@link CHAR_EM_DASH} or {@link CHAR_HYPHEN}!\n */\nexport const CHAR_EN_DASH = '\\u2013';\n\n/**\n * {@link https://unicode-table.com/en/2014/ EM dash}\n * is used to mark a break in a sentence.\n * @example Taiga UI — powerful set of open source components for Angular\n * ___\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_HYPHEN}!\n */\nexport const CHAR_EM_DASH = '\\u2014';\n\n/**\n * {@link https://unicode-table.com/en/00AB/ Left-Pointing Double Angle Quotation Mark}\n */\nexport const CHAR_LAQUO = '\\u00AB';\n\n/**\n * {@link https://unicode-table.com/en/00BB/ Right-Pointing Double Angle Quotation Mark}\n */\nexport const CHAR_RAQUO = '\\u00BB';\n\n/**\n * {@link https://unicode-table.com/en/002D/ Hyphen (minus sign)}\n * is used to combine words.\n * @example well-behaved\n * ___\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_EM_DASH}!\n */\nexport const CHAR_HYPHEN = '\\u002D';\n\n/**\n * {@link https://unicode-table.com/en/2212/ Minus}\n * is used as math operator symbol or before negative digits.\n * ---\n * Can be used as `&minus;`. Don't confuse with {@link CHAR_HYPHEN}\n */\nexport const CHAR_MINUS = '\\u2212';\n\n/**\n * {@link https://unicode-table.com/en/002B/ Plus}\n */\nexport const CHAR_PLUS = '\\u002B';\n\n/**\n * {@link https://unicode-table.com/en/2022/ Bullet}.\n */\nexport const CHAR_BULLET = '\\u2022';\n\n/**\n * {@link https://unicode-table.com/en/2026/ Suspension points}.\n */\nexport const CHAR_ELLIPSIS = '\\u2026';\n\n/**\n * {@link https://unicode-table.com/en/00A4/ Suspension points}.\n */\nexport const CHAR_CURRENCY_SIGN = '\\u00A4';\n\n/**\n * {@link https://unicode-table.com/en/200b/ Suspension points}.\n */\nexport const CHAR_ZERO_WIDTH_SPACE = '\\u200B';\n","/**\n * @description:\n * AUTOGENERATED\n *\n * Array of icons used in taiga-ui components\n */\nexport const TUI_USED_ICONS = [\n '@tui.mir',\n '@tui.visa',\n '@tui.electron',\n '@tui.mastercard',\n '@tui.maestro',\n '@tui.amex',\n '@tui.diners-club',\n '@tui.discover',\n '@tui.humo',\n '@tui.jcb',\n '@tui.ru-pay',\n '@tui.union-pay',\n '@tui.uzcard',\n '@tui.verve',\n '@tui.search',\n '@tui.sun',\n '@tui.moon',\n '@tui.code',\n '@tui.menu',\n '@tui.copy',\n '@tui.check',\n '@tui.link',\n '@tui.external-link',\n '@tui.languages',\n '@tui.shrink',\n '@tui.expand',\n '@tui.a-large-small',\n '@tui.arrow-right-left',\n '@tui.eye-off',\n '@tui.eye',\n '@tui.grip-vertical',\n '@tui.chevron-up',\n '@tui.chevron-down',\n '@tui.chevrons-up-down',\n '@tui.info',\n '@tui.circle-check',\n '@tui.circle-x',\n '@tui.circle-alert',\n '@tui.circle-help',\n '@tui.x',\n '@tui.chevron-right',\n '@tui.ellipsis',\n '@tui.chevron-left',\n '@tui.clock',\n '@tui.trash',\n '@tui.minus',\n '@tui.plus',\n '@tui.file',\n '@tui.calendar',\n '@tui.phone',\n '@tui.heart',\n '@tui.heart-filled',\n '@tui.star',\n '@tui.rotate-ccw-square',\n '@tui.arrow-left',\n '@tui.arrow-right',\n '@tui.minimize',\n '@tui.filter',\n '@tui.layout-grid',\n '@tui.move-up-right',\n '@tui.move-right',\n '@tui.move-down-right',\n '@tui.move-down',\n '@tui.move-down-left',\n '@tui.move-left',\n '@tui.move-up-left',\n '@tui.move-up',\n] as const;\n","export const TUI_VERSION = '4.77.0';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, PLATFORM_ID, Injectable, Component, ViewEncapsulation, ChangeDetectionStrategy, signal, computed, Directive, Input } from '@angular/core';
3
+ import { toSignal } from '@angular/core/rxjs-interop';
4
+ import { WaMutationObserverService, WA_MUTATION_OBSERVER_INIT } from '@ng-web-apis/mutation-observer';
5
+ import { WaResizeObserverService } from '@ng-web-apis/resize-observer';
6
+ import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
7
+ import { tuiWithStyles } from '@taiga-ui/cdk/utils/miscellaneous';
8
+ import { map } from 'rxjs';
9
+ import { isPlatformBrowser, DOCUMENT } from '@angular/common';
10
+ import { tuiZoneOptimized } from '@taiga-ui/cdk/observables';
11
+
12
+ const ELLIPSIS = '\u2026';
13
+ class TuiTruncateService {
14
+ constructor() {
15
+ this.el = tuiInjectElement();
16
+ this.ctx = isPlatformBrowser(inject(PLATFORM_ID))
17
+ ? inject(DOCUMENT).createElement('canvas').getContext('2d')
18
+ : null;
19
+ }
20
+ truncate(text, lines) {
21
+ if (!this.ctx || !text || lines < 1) {
22
+ return text;
23
+ }
24
+ const style = getComputedStyle(this.el);
25
+ const fontFamily = style.fontFamily || 'sans-serif';
26
+ const fontSize = style.fontSize || '14px';
27
+ const fontWeight = style.fontWeight || '400';
28
+ const paddingLeft = parseFloat(style.paddingLeft) || 0;
29
+ const paddingRight = parseFloat(style.paddingRight) || 0;
30
+ const availableWidth = this.el.clientWidth - paddingLeft - paddingRight;
31
+ const safeWidth = Math.max(1, availableWidth - 4);
32
+ this.ctx.font = `${fontWeight} ${fontSize} ${fontFamily}`;
33
+ if (this.getLines(text, safeWidth).length <= lines) {
34
+ return text;
35
+ }
36
+ let low = 1;
37
+ let high = Math.max(1, text.length - ELLIPSIS.length);
38
+ let best = truncate(text, 1, 0);
39
+ while (low <= high) {
40
+ const keepLength = Math.floor((low + high) / 2);
41
+ const normalized = Math.max(1, keepLength);
42
+ const left = Math.ceil(normalized / 2);
43
+ const right = Math.floor(normalized / 2);
44
+ const candidate = truncate(text, left, right);
45
+ const candidateLines = this.getLines(candidate, safeWidth).length;
46
+ if (candidateLines <= lines) {
47
+ best = candidate;
48
+ low = keepLength + 1;
49
+ }
50
+ else {
51
+ high = keepLength - 1;
52
+ }
53
+ }
54
+ return this.getLines(best, safeWidth).slice(0, lines).join(' ');
55
+ }
56
+ getLines(text, maxWidth) {
57
+ if (!this.ctx || !text) {
58
+ return [];
59
+ }
60
+ const words = text.split(' ');
61
+ const lines = [];
62
+ let currentLine = '';
63
+ for (const word of words) {
64
+ const candidate = currentLine ? `${currentLine} ${word}` : word;
65
+ if (this.ctx.measureText(candidate).width <= maxWidth) {
66
+ currentLine = candidate;
67
+ continue;
68
+ }
69
+ if (currentLine) {
70
+ lines.push(currentLine);
71
+ currentLine = '';
72
+ }
73
+ if (this.ctx.measureText(word).width <= maxWidth) {
74
+ currentLine = word;
75
+ continue;
76
+ }
77
+ let chunk = '';
78
+ for (const char of word) {
79
+ const nextChunk = chunk + char;
80
+ if (this.ctx.measureText(nextChunk).width <= maxWidth) {
81
+ chunk = nextChunk;
82
+ }
83
+ else {
84
+ if (chunk) {
85
+ lines.push(chunk);
86
+ }
87
+ chunk = char;
88
+ }
89
+ }
90
+ currentLine = chunk;
91
+ }
92
+ if (currentLine) {
93
+ lines.push(currentLine);
94
+ }
95
+ return lines;
96
+ }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
98
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncateService }); }
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncateService, decorators: [{
101
+ type: Injectable
102
+ }] });
103
+ function truncate(text, left, right) {
104
+ return `${text.slice(0, left)}${ELLIPSIS}${right > 0 ? text.slice(-right) : ''}`;
105
+ }
106
+
107
+ class Styles {
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Styles, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: Styles, isStandalone: true, selector: "ng-component", ngImport: i0, template: '', isInline: true, styles: ["[tuiTruncate]{display:-webkit-box;letter-spacing:-1rem;-webkit-text-fill-color:transparent;-webkit-box-orient:block-axis;-webkit-line-clamp:1;overflow:hidden;inline-size:-webkit-fill-available}[tuiTruncate][data-lines=\"1\"]:before{white-space:nowrap}[tuiTruncate]:before{content:attr(data-text);inline-size:100%;letter-spacing:normal;-webkit-text-fill-color:currentColor;white-space:normal;overflow-wrap:anywhere}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Styles, decorators: [{
112
+ type: Component,
113
+ args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["[tuiTruncate]{display:-webkit-box;letter-spacing:-1rem;-webkit-text-fill-color:transparent;-webkit-box-orient:block-axis;-webkit-line-clamp:1;overflow:hidden;inline-size:-webkit-fill-available}[tuiTruncate][data-lines=\"1\"]:before{white-space:nowrap}[tuiTruncate]:before{content:attr(data-text);inline-size:100%;letter-spacing:normal;-webkit-text-fill-color:currentColor;white-space:normal;overflow-wrap:anywhere}\n"] }]
114
+ }] });
115
+ class TuiTruncate {
116
+ constructor() {
117
+ this.service = inject(TuiTruncateService);
118
+ this.el = tuiInjectElement();
119
+ this.width = toSignal(inject(WaResizeObserverService).pipe(map(([e]) => e?.contentRect.width ?? 0), tuiZoneOptimized()), { initialValue: 0 });
120
+ this.lines = signal(1);
121
+ this.text = toSignal(inject(WaMutationObserverService).pipe(map(() => this.innerText)), { initialValue: this.innerText });
122
+ this.nothing = tuiWithStyles(Styles);
123
+ this.truncated = computed(() => this.width() ? this.service.truncate(this.text(), this.lines()) : this.text());
124
+ }
125
+ set tuiTruncate(value) {
126
+ this.lines.set(Math.max(Number(value) || 1, 1));
127
+ }
128
+ get innerText() {
129
+ return this.el.innerText.trim();
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncate, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
132
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTruncate, isStandalone: true, selector: "[tuiTruncate]", inputs: { tuiTruncate: "tuiTruncate" }, host: { attributes: { "tuiTruncate": "" }, properties: { "attr.data-lines": "lines()", "attr.data-text": "truncated()", "style.-webkit-line-clamp": "lines()" } }, providers: [
133
+ TuiTruncateService,
134
+ WaResizeObserverService,
135
+ WaMutationObserverService,
136
+ {
137
+ provide: WA_MUTATION_OBSERVER_INIT,
138
+ useValue: {
139
+ attributes: true,
140
+ characterData: true,
141
+ subtree: true,
142
+ },
143
+ },
144
+ ], ngImport: i0 }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTruncate, decorators: [{
147
+ type: Directive,
148
+ args: [{
149
+ standalone: true,
150
+ selector: '[tuiTruncate]',
151
+ providers: [
152
+ TuiTruncateService,
153
+ WaResizeObserverService,
154
+ WaMutationObserverService,
155
+ {
156
+ provide: WA_MUTATION_OBSERVER_INIT,
157
+ useValue: {
158
+ attributes: true,
159
+ characterData: true,
160
+ subtree: true,
161
+ },
162
+ },
163
+ ],
164
+ host: {
165
+ tuiTruncate: '',
166
+ '[attr.data-lines]': 'lines()',
167
+ '[attr.data-text]': 'truncated()',
168
+ '[style.-webkit-line-clamp]': 'lines()',
169
+ },
170
+ }]
171
+ }], propDecorators: { tuiTruncate: [{
172
+ type: Input,
173
+ args: ['tuiTruncate']
174
+ }] } });
175
+
176
+ /**
177
+ * Generated bundle index. Do not edit.
178
+ */
179
+
180
+ export { TuiTruncate, TuiTruncateService };
181
+ //# sourceMappingURL=taiga-ui-cdk-directives-truncate.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taiga-ui-cdk-directives-truncate.mjs","sources":["../../../projects/cdk/directives/truncate/truncate.service.ts","../../../projects/cdk/directives/truncate/truncate.directive.ts","../../../projects/cdk/directives/truncate/taiga-ui-cdk-directives-truncate.ts"],"sourcesContent":["import {DOCUMENT, isPlatformBrowser} from '@angular/common';\nimport {inject, Injectable, PLATFORM_ID} from '@angular/core';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\n\nconst ELLIPSIS = '\\u2026';\n\n@Injectable()\nexport class TuiTruncateService {\n private readonly el = tuiInjectElement();\n private readonly ctx = isPlatformBrowser(inject(PLATFORM_ID))\n ? inject(DOCUMENT).createElement('canvas').getContext('2d')\n : null;\n\n public truncate(text: string, lines: number): string {\n if (!this.ctx || !text || lines < 1) {\n return text;\n }\n\n const style = getComputedStyle(this.el);\n const fontFamily = style.fontFamily || 'sans-serif';\n const fontSize = style.fontSize || '14px';\n const fontWeight = style.fontWeight || '400';\n const paddingLeft = parseFloat(style.paddingLeft) || 0;\n const paddingRight = parseFloat(style.paddingRight) || 0;\n const availableWidth = this.el.clientWidth - paddingLeft - paddingRight;\n const safeWidth = Math.max(1, availableWidth - 4);\n\n this.ctx.font = `${fontWeight} ${fontSize} ${fontFamily}`;\n\n if (this.getLines(text, safeWidth).length <= lines) {\n return text;\n }\n\n let low = 1;\n let high = Math.max(1, text.length - ELLIPSIS.length);\n let best = truncate(text, 1, 0);\n\n while (low <= high) {\n const keepLength = Math.floor((low + high) / 2);\n const normalized = Math.max(1, keepLength);\n const left = Math.ceil(normalized / 2);\n const right = Math.floor(normalized / 2);\n const candidate = truncate(text, left, right);\n const candidateLines = this.getLines(candidate, safeWidth).length;\n\n if (candidateLines <= lines) {\n best = candidate;\n low = keepLength + 1;\n } else {\n high = keepLength - 1;\n }\n }\n\n return this.getLines(best, safeWidth).slice(0, lines).join(' ');\n }\n\n private getLines(text: string, maxWidth: number): string[] {\n if (!this.ctx || !text) {\n return [];\n }\n\n const words = text.split(' ');\n const lines: string[] = [];\n let currentLine = '';\n\n for (const word of words) {\n const candidate = currentLine ? `${currentLine} ${word}` : word;\n\n if (this.ctx.measureText(candidate).width <= maxWidth) {\n currentLine = candidate;\n continue;\n }\n\n if (currentLine) {\n lines.push(currentLine);\n currentLine = '';\n }\n\n if (this.ctx.measureText(word).width <= maxWidth) {\n currentLine = word;\n continue;\n }\n\n let chunk = '';\n\n for (const char of word) {\n const nextChunk = chunk + char;\n\n if (this.ctx.measureText(nextChunk).width <= maxWidth) {\n chunk = nextChunk;\n } else {\n if (chunk) {\n lines.push(chunk);\n }\n\n chunk = char;\n }\n }\n\n currentLine = chunk;\n }\n\n if (currentLine) {\n lines.push(currentLine);\n }\n\n return lines;\n }\n}\n\nfunction truncate(text: string, left: number, right: number): string {\n return `${text.slice(0, left)}${ELLIPSIS}${right > 0 ? text.slice(-right) : ''}`;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n Directive,\n inject,\n Input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {\n WA_MUTATION_OBSERVER_INIT,\n WaMutationObserverService,\n} from '@ng-web-apis/mutation-observer';\nimport {WaResizeObserverService} from '@ng-web-apis/resize-observer';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiWithStyles} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {map} from 'rxjs';\n\nimport {TuiTruncateService} from './truncate.service';\nimport {tuiZoneOptimized} from '@taiga-ui/cdk/observables';\n\n@Component({\n standalone: true,\n template: '',\n styleUrls: ['./truncate.styles.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nclass Styles {}\n\n@Directive({\n standalone: true,\n selector: '[tuiTruncate]',\n providers: [\n TuiTruncateService,\n WaResizeObserverService,\n WaMutationObserverService,\n {\n provide: WA_MUTATION_OBSERVER_INIT,\n useValue: {\n attributes: true,\n characterData: true,\n subtree: true,\n },\n },\n ],\n host: {\n tuiTruncate: '',\n '[attr.data-lines]': 'lines()',\n '[attr.data-text]': 'truncated()',\n '[style.-webkit-line-clamp]': 'lines()',\n },\n})\nexport class TuiTruncate {\n private readonly service = inject(TuiTruncateService);\n private readonly el = tuiInjectElement();\n private readonly width = toSignal(\n inject(WaResizeObserverService).pipe(\n map(([e]) => e?.contentRect.width ?? 0),\n tuiZoneOptimized(),\n ),\n {initialValue: 0},\n );\n\n protected lines = signal(1);\n\n protected readonly text = toSignal(\n inject(WaMutationObserverService).pipe(map(() => this.innerText)),\n {initialValue: this.innerText},\n );\n\n protected readonly nothing = tuiWithStyles(Styles);\n\n public readonly truncated = computed(() =>\n this.width() ? this.service.truncate(this.text(), this.lines()) : this.text(),\n );\n\n @Input('tuiTruncate')\n public set tuiTruncate(value: number | string) {\n this.lines.set(Math.max(Number(value) || 1, 1));\n }\n\n private get innerText(): string {\n return this.el.innerText.trim();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -9,9 +9,11 @@ class TuiVisualViewport {
9
9
  constructor() {
10
10
  this.w = inject(WA_WINDOW);
11
11
  this.style = tuiInjectElement().style;
12
+ this.minInnerHeight = Infinity;
12
13
  this.$ = inject(ViewportService)
13
14
  .pipe(takeUntilDestroyed())
14
15
  .subscribe(({ offsetLeft, offsetTop, height, width, scale }) => {
16
+ this.minInnerHeight = Math.min(this.minInnerHeight, this.w.innerHeight);
15
17
  this.style.setProperty('--tui-viewport-x', tuiPx(offsetLeft));
16
18
  this.style.setProperty('--tui-viewport-y', tuiPx(offsetTop));
17
19
  this.style.setProperty('--tui-viewport-height', tuiPx(height));
@@ -19,6 +21,7 @@ class TuiVisualViewport {
19
21
  this.style.setProperty('--tui-viewport-scale', String(scale));
20
22
  this.style.setProperty('--tui-viewport-vh', tuiPx(this.w.innerHeight / 100));
21
23
  this.style.setProperty('--tui-viewport-vw', tuiPx(this.w.innerWidth / 100));
24
+ this.style.setProperty('--tui-viewport-svh', tuiPx(this.minInnerHeight / 100));
22
25
  });
23
26
  }
24
27
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiVisualViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-directives-visual-viewport.mjs","sources":["../../../projects/cdk/directives/visual-viewport/visual-viewport.directive.ts","../../../projects/cdk/directives/visual-viewport/taiga-ui-cdk-directives-visual-viewport.ts"],"sourcesContent":["import {Directive, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {WA_WINDOW} from '@ng-web-apis/common';\nimport {ViewportService} from '@ng-web-apis/screen-orientation';\nimport {tuiInjectElement, tuiPx} from '@taiga-ui/cdk/utils';\n\n@Directive({\n standalone: true,\n selector: '[tuiVisualViewport]',\n})\nexport class TuiVisualViewport {\n private readonly w = inject(WA_WINDOW);\n private readonly style = tuiInjectElement().style;\n\n protected readonly $ = inject(ViewportService)\n .pipe(takeUntilDestroyed())\n .subscribe(({offsetLeft, offsetTop, height, width, scale}) => {\n this.style.setProperty('--tui-viewport-x', tuiPx(offsetLeft));\n this.style.setProperty('--tui-viewport-y', tuiPx(offsetTop));\n this.style.setProperty('--tui-viewport-height', tuiPx(height));\n this.style.setProperty('--tui-viewport-width', tuiPx(width));\n this.style.setProperty('--tui-viewport-scale', String(scale));\n this.style.setProperty('--tui-viewport-vh', tuiPx(this.w.innerHeight / 100));\n this.style.setProperty('--tui-viewport-vw', tuiPx(this.w.innerWidth / 100));\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAMA,MAIa,iBAAiB,CAAA;AAJ9B,IAAA,WAAA,GAAA;AAKqB,QAAA,IAAA,CAAA,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,KAAK,GAAG,gBAAgB,EAAE,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAA,CAAA,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;aACzC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,aAAA,SAAS,CAAC,CAAC,EAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC,KAAI;AACzD,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7E,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;AAChF,SAAC,CAAC,CAAC;AACV,KAAA;+GAfY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,qBAAqB;AAClC,iBAAA,CAAA;;;ACTD;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-cdk-directives-visual-viewport.mjs","sources":["../../../projects/cdk/directives/visual-viewport/visual-viewport.directive.ts","../../../projects/cdk/directives/visual-viewport/taiga-ui-cdk-directives-visual-viewport.ts"],"sourcesContent":["import {Directive, inject} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {WA_WINDOW} from '@ng-web-apis/common';\nimport {ViewportService} from '@ng-web-apis/screen-orientation';\nimport {tuiInjectElement, tuiPx} from '@taiga-ui/cdk/utils';\n\n@Directive({\n standalone: true,\n selector: '[tuiVisualViewport]',\n})\nexport class TuiVisualViewport {\n private readonly w = inject(WA_WINDOW);\n private readonly style = tuiInjectElement().style;\n private minInnerHeight = Infinity;\n\n protected readonly $ = inject(ViewportService)\n .pipe(takeUntilDestroyed())\n .subscribe(({offsetLeft, offsetTop, height, width, scale}) => {\n this.minInnerHeight = Math.min(this.minInnerHeight, this.w.innerHeight);\n\n this.style.setProperty('--tui-viewport-x', tuiPx(offsetLeft));\n this.style.setProperty('--tui-viewport-y', tuiPx(offsetTop));\n this.style.setProperty('--tui-viewport-height', tuiPx(height));\n this.style.setProperty('--tui-viewport-width', tuiPx(width));\n this.style.setProperty('--tui-viewport-scale', String(scale));\n this.style.setProperty('--tui-viewport-vh', tuiPx(this.w.innerHeight / 100));\n this.style.setProperty('--tui-viewport-vw', tuiPx(this.w.innerWidth / 100));\n this.style.setProperty(\n '--tui-viewport-svh',\n tuiPx(this.minInnerHeight / 100),\n );\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAMA,MAIa,iBAAiB,CAAA;AAJ9B,IAAA,WAAA,GAAA;AAKqB,QAAA,IAAA,CAAA,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACtB,QAAA,IAAA,CAAA,KAAK,GAAG,gBAAgB,EAAE,CAAC,KAAK,CAAC;QAC1C,IAAc,CAAA,cAAA,GAAG,QAAQ,CAAC;AAEf,QAAA,IAAA,CAAA,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;aACzC,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,aAAA,SAAS,CAAC,CAAC,EAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAC,KAAI;AACzD,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAExE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7E,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5E,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAClB,oBAAoB,EACpB,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,CACnC,CAAC;AACN,SAAC,CAAC,CAAC;AACV,KAAA;+GAtBY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,qBAAqB;AAClC,iBAAA,CAAA;;;ACTD;;AAEG;;;;"}
@@ -23,6 +23,7 @@ export * from '@taiga-ui/cdk/directives/repeat-times';
23
23
  export * from '@taiga-ui/cdk/directives/resizer';
24
24
  export * from '@taiga-ui/cdk/directives/swipe';
25
25
  export * from '@taiga-ui/cdk/directives/transitioned';
26
+ export * from '@taiga-ui/cdk/directives/truncate';
26
27
  export * from '@taiga-ui/cdk/directives/validator';
27
28
  export * from '@taiga-ui/cdk/directives/value-changes';
28
29
  export * from '@taiga-ui/cdk/directives/visual-viewport';
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-cdk-directives.mjs","sources":["../../../projects/cdk/directives/taiga-ui-cdk-directives.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-cdk-directives.mjs","sources":["../../../projects/cdk/directives/taiga-ui-cdk-directives.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/cdk",
3
- "version": "4.75.0",
3
+ "version": "4.77.0",
4
4
  "description": "Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance",
5
5
  "keywords": [
6
6
  "angular",
@@ -235,6 +235,12 @@
235
235
  "esm": "./esm2022/directives/transitioned/taiga-ui-cdk-directives-transitioned.mjs",
236
236
  "default": "./fesm2022/taiga-ui-cdk-directives-transitioned.mjs"
237
237
  },
238
+ "./directives/truncate": {
239
+ "types": "./directives/truncate/index.d.ts",
240
+ "esm2022": "./esm2022/directives/truncate/taiga-ui-cdk-directives-truncate.mjs",
241
+ "esm": "./esm2022/directives/truncate/taiga-ui-cdk-directives-truncate.mjs",
242
+ "default": "./fesm2022/taiga-ui-cdk-directives-truncate.mjs"
243
+ },
238
244
  "./directives/validator": {
239
245
  "types": "./directives/validator/index.d.ts",
240
246
  "esm2022": "./esm2022/directives/validator/taiga-ui-cdk-directives-validator.mjs",