@taiga-ui/cdk 4.37.0-canary.e7da31c → 4.38.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.
- package/constants/version.d.ts +1 -1
- package/constants/version.js +1 -1
- package/esm2022/constants/version.mjs +2 -2
- package/esm2022/pipes/index.mjs +2 -1
- package/esm2022/pipes/obfuscate/index.mjs +3 -0
- package/esm2022/pipes/obfuscate/obfuscate.options.mjs +10 -0
- package/esm2022/pipes/obfuscate/obfuscate.pipe.mjs +44 -0
- package/esm2022/pipes/obfuscate/taiga-ui-cdk-pipes-obfuscate.mjs +5 -0
- package/esm2022/utils/miscellaneous/index.mjs +2 -1
- package/esm2022/utils/miscellaneous/obfuscate.mjs +53 -0
- package/fesm2022/taiga-ui-cdk-constants.mjs +1 -1
- package/fesm2022/taiga-ui-cdk-constants.mjs.map +1 -1
- package/fesm2022/taiga-ui-cdk-pipes-obfuscate.mjs +59 -0
- package/fesm2022/taiga-ui-cdk-pipes-obfuscate.mjs.map +1 -0
- package/fesm2022/taiga-ui-cdk-pipes.mjs +1 -0
- package/fesm2022/taiga-ui-cdk-pipes.mjs.map +1 -1
- package/fesm2022/taiga-ui-cdk-utils-miscellaneous.mjs +54 -1
- package/fesm2022/taiga-ui-cdk-utils-miscellaneous.mjs.map +1 -1
- package/package.json +13 -7
- package/pipes/index.d.ts +1 -0
- package/pipes/obfuscate/index.d.ts +2 -0
- package/pipes/obfuscate/obfuscate.options.d.ts +19 -0
- package/pipes/obfuscate/obfuscate.pipe.d.ts +16 -0
- package/schematics/collection.json +5 -0
- package/schematics/migrate-tui-let/index.d.ts +3 -0
- package/schematics/migrate-tui-let/index.js +71 -0
- package/schematics/ng-update/steps/index.d.ts +1 -1
- package/schematics/ng-update/steps/index.js +1 -1
- package/schematics/ng-update/v4/migrate-addon-doc/index.js +1 -1
- package/schematics/ng-update/v4/migrate-css-vars/palette.d.ts +1 -1
- package/schematics/ng-update/v4/migrate-css-vars/palette.js +1 -1
- package/schematics/ng-update/v4/steps/templates/migrate-badge.js +1 -1
- package/schematics/ng-update/v4/steps/templates/migrate-badged-content.js +1 -1
- package/schematics/ng-update/v4/steps/templates/migrate-button-appearance.js +1 -1
- package/schematics/ng-update/v4/steps/templates/migrate-expandable.js +1 -1
- package/schematics/ng-update/v4/steps/templates/migrate-overscroll.js +1 -1
- package/schematics/utils/create-angular-json.d.ts +3 -2
- package/schematics/utils/create-angular-json.js +2 -2
- package/schematics/utils/get-projects.d.ts +1 -1
- package/schematics/{ng-update/steps → utils}/remove-module.d.ts +2 -2
- package/schematics/{ng-update/steps → utils}/remove-module.js +2 -2
- package/utils/miscellaneous/index.d.ts +1 -0
- package/utils/miscellaneous/obfuscate.d.ts +14 -0
package/constants/version.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export declare const TUI_VERSION = "4.
|
1
|
+
export declare const TUI_VERSION = "4.38.0";
|
package/constants/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
export const TUI_VERSION = '4.
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
1
|
+
export const TUI_VERSION = '4.38.0';
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9jb25zdGFudHMvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRVSV9WRVJTSU9OID0gJzQuMzguMCc7XG4iXX0=
|
package/esm2022/pipes/index.mjs
CHANGED
@@ -3,7 +3,8 @@ export * from '@taiga-ui/cdk/pipes/filter';
|
|
3
3
|
export * from '@taiga-ui/cdk/pipes/is-present';
|
4
4
|
export * from '@taiga-ui/cdk/pipes/keys';
|
5
5
|
export * from '@taiga-ui/cdk/pipes/mapper';
|
6
|
+
export * from '@taiga-ui/cdk/pipes/obfuscate';
|
6
7
|
export * from '@taiga-ui/cdk/pipes/repeat-times';
|
7
8
|
export * from '@taiga-ui/cdk/pipes/replace';
|
8
9
|
export * from '@taiga-ui/cdk/pipes/to-array';
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvcGlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOEJBQThCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL3BpcGVzL2FuaW1hdGlvbic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL3BpcGVzL2ZpbHRlcic7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL3BpcGVzL2lzLXByZXNlbnQnO1xuZXhwb3J0ICogZnJvbSAnQHRhaWdhLXVpL2Nkay9waXBlcy9rZXlzJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvcGlwZXMvbWFwcGVyJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvcGlwZXMvb2JmdXNjYXRlJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvcGlwZXMvcmVwZWF0LXRpbWVzJztcbmV4cG9ydCAqIGZyb20gJ0B0YWlnYS11aS9jZGsvcGlwZXMvcmVwbGFjZSc7XG5leHBvcnQgKiBmcm9tICdAdGFpZ2EtdWkvY2RrL3BpcGVzL3RvLWFycmF5JztcbiJdfQ==
|
@@ -0,0 +1,3 @@
|
|
1
|
+
export * from './obfuscate.options';
|
2
|
+
export * from './obfuscate.pipe';
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvcGlwZXMvb2JmdXNjYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vb2JmdXNjYXRlLm9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmZ1c2NhdGUucGlwZSc7XG4iXX0=
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { tuiCreateOptions, tuiObfuscate } from '@taiga-ui/cdk/utils';
|
2
|
+
export const TUI_OBFUSCATE_DEFAULT_OPTIONS = {
|
3
|
+
default: (value, symbol = '*') => tuiObfuscate(value, symbol),
|
4
|
+
recipes: {},
|
5
|
+
};
|
6
|
+
/**
|
7
|
+
* Injection token for obfuscation options.
|
8
|
+
*/
|
9
|
+
export const [TUI_OBFUSCATE_OPTIONS, tuiObfuscateOptionsProvider] = tuiCreateOptions(TUI_OBFUSCATE_DEFAULT_OPTIONS);
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JmdXNjYXRlLm9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvcGlwZXMvb2JmdXNjYXRlL29iZnVzY2F0ZS5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQWtCbkUsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQXdCO0lBQzlELE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUM3RCxPQUFPLEVBQUUsRUFBRTtDQUNkLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUUsMkJBQTJCLENBQUMsR0FBRyxnQkFBZ0IsQ0FDaEYsNkJBQTZCLENBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3R1aUNyZWF0ZU9wdGlvbnMsIHR1aU9iZnVzY2F0ZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscyc7XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgb3B0aW9ucyBmb3Igb2JmdXNjYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHVpT2JmdXNjYXRlT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBmdW5jdGlvbiB1c2VkIHRvIG9iZnVzY2F0ZSBhIHN0cmluZ1xuICAgICAqIGlmIG5vIHJlY2lwZSB3YXMgZm91bmQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGVmYXVsdDogKHZhbHVlOiBzdHJpbmcsIHN5bWJvbD86IHN0cmluZykgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiBuYW1lZCByZWNpcGVzIGZvciBkaWZmZXJlbnQgb2JmdXNjYXRpb24gc2NlbmFyaW9zLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHJlY2lwZXM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc+O1xufVxuXG5leHBvcnQgY29uc3QgVFVJX09CRlVTQ0FURV9ERUZBVUxUX09QVElPTlM6IFR1aU9iZnVzY2F0ZU9wdGlvbnMgPSB7XG4gICAgZGVmYXVsdDogKHZhbHVlLCBzeW1ib2wgPSAnKicpID0+IHR1aU9iZnVzY2F0ZSh2YWx1ZSwgc3ltYm9sKSxcbiAgICByZWNpcGVzOiB7fSxcbn07XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIGZvciBvYmZ1c2NhdGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgW1RVSV9PQkZVU0NBVEVfT1BUSU9OUywgdHVpT2JmdXNjYXRlT3B0aW9uc1Byb3ZpZGVyXSA9IHR1aUNyZWF0ZU9wdGlvbnMoXG4gICAgVFVJX09CRlVTQ0FURV9ERUZBVUxUX09QVElPTlMsXG4pO1xuIl19
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { inject, Pipe } from '@angular/core';
|
2
|
+
import { TUI_OBFUSCATE_OPTIONS } from './obfuscate.options';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
class TuiObfuscatePipe {
|
5
|
+
constructor() {
|
6
|
+
this.option = inject(TUI_OBFUSCATE_OPTIONS);
|
7
|
+
}
|
8
|
+
/**
|
9
|
+
* Transforms the input value by obfuscating it according to the specified recipe or symbol.
|
10
|
+
*
|
11
|
+
* @param value The value to be obfuscated should be a string.
|
12
|
+
* @param recipe The name of the recipe to use for obfuscation or a single character symbol for custom obfuscation.
|
13
|
+
* @returns The obfuscated string.
|
14
|
+
* @throws Will throw an error if the specified recipe is not found.
|
15
|
+
*/
|
16
|
+
transform(value, recipe = '') {
|
17
|
+
if (!value) {
|
18
|
+
return value;
|
19
|
+
}
|
20
|
+
if (!recipe) {
|
21
|
+
return this.option.default(value);
|
22
|
+
}
|
23
|
+
const obfuscate = this.option.recipes[recipe];
|
24
|
+
if (obfuscate) {
|
25
|
+
return obfuscate(value);
|
26
|
+
}
|
27
|
+
if (recipe.length === 1) {
|
28
|
+
return this.option.default(value, recipe[0]);
|
29
|
+
}
|
30
|
+
const availableRecipes = Object.keys(this.option.recipes).sort();
|
31
|
+
throw new Error(`Obfuscate recipe "${recipe}" not found. Available recipes: [${availableRecipes}]`);
|
32
|
+
}
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiObfuscatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
34
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: TuiObfuscatePipe, isStandalone: true, name: "tuiObfuscate" }); }
|
35
|
+
}
|
36
|
+
export { TuiObfuscatePipe };
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiObfuscatePipe, decorators: [{
|
38
|
+
type: Pipe,
|
39
|
+
args: [{
|
40
|
+
standalone: true,
|
41
|
+
name: 'tuiObfuscate',
|
42
|
+
}]
|
43
|
+
}] });
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JmdXNjYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvcGlwZXMvb2JmdXNjYXRlL29iZnVzY2F0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDOztBQUUxRCxNQUlhLGdCQUFnQjtJQUo3QjtRQUtxQixXQUFNLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7S0FtQzNEO0lBakNHOzs7Ozs7O09BT0c7SUFDSSxTQUFTLENBQUMsS0FBYSxFQUFFLE1BQU0sR0FBRyxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUMsSUFBSSxTQUFTLEVBQUU7WUFDWCxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQjtRQUVELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7UUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVqRSxNQUFNLElBQUksS0FBSyxDQUNYLHFCQUFxQixNQUFNLG9DQUFvQyxnQkFBZ0IsR0FBRyxDQUNyRixDQUFDO0lBQ04sQ0FBQzsrR0FuQ1EsZ0JBQWdCOzZHQUFoQixnQkFBZ0I7O1NBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQUo1QixJQUFJO21CQUFDO29CQUNGLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsY0FBYztpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2luamVjdCwgUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7VFVJX09CRlVTQ0FURV9PUFRJT05TfSBmcm9tICcuL29iZnVzY2F0ZS5vcHRpb25zJztcblxuQFBpcGUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgbmFtZTogJ3R1aU9iZnVzY2F0ZScsXG59KVxuZXhwb3J0IGNsYXNzIFR1aU9iZnVzY2F0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbiA9IGluamVjdChUVUlfT0JGVVNDQVRFX09QVElPTlMpO1xuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgdmFsdWUgYnkgb2JmdXNjYXRpbmcgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgcmVjaXBlIG9yIHN5bWJvbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgb2JmdXNjYXRlZCBzaG91bGQgYmUgYSBzdHJpbmcuXG4gICAgICogQHBhcmFtIHJlY2lwZSBUaGUgbmFtZSBvZiB0aGUgcmVjaXBlIHRvIHVzZSBmb3Igb2JmdXNjYXRpb24gb3IgYSBzaW5nbGUgY2hhcmFjdGVyIHN5bWJvbCBmb3IgY3VzdG9tIG9iZnVzY2F0aW9uLlxuICAgICAqIEByZXR1cm5zIFRoZSBvYmZ1c2NhdGVkIHN0cmluZy5cbiAgICAgKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHNwZWNpZmllZCByZWNpcGUgaXMgbm90IGZvdW5kLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgcmVjaXBlID0gJycpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlY2lwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uLmRlZmF1bHQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JmdXNjYXRlID0gdGhpcy5vcHRpb24ucmVjaXBlc1tyZWNpcGVdO1xuXG4gICAgICAgIGlmIChvYmZ1c2NhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmZ1c2NhdGUodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlY2lwZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbi5kZWZhdWx0KHZhbHVlLCByZWNpcGVbMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUmVjaXBlcyA9IE9iamVjdC5rZXlzKHRoaXMub3B0aW9uLnJlY2lwZXMpLnNvcnQoKTtcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgT2JmdXNjYXRlIHJlY2lwZSBcIiR7cmVjaXBlfVwiIG5vdCBmb3VuZC4gQXZhaWxhYmxlIHJlY2lwZXM6IFske2F2YWlsYWJsZVJlY2lwZXN9XWAsXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
@@ -0,0 +1,5 @@
|
|
1
|
+
/**
|
2
|
+
* Generated bundle index. Do not edit.
|
3
|
+
*/
|
4
|
+
export * from './index';
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpZ2EtdWktY2RrLXBpcGVzLW9iZnVzY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9waXBlcy9vYmZ1c2NhdGUvdGFpZ2EtdWktY2RrLXBpcGVzLW9iZnVzY2F0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
@@ -21,10 +21,11 @@ export * from './is-string';
|
|
21
21
|
export * from './is-valid-url';
|
22
22
|
export * from './mark-control-as-touched-and-validate';
|
23
23
|
export * from './nullable-same';
|
24
|
+
export * from './obfuscate';
|
24
25
|
export * from './provide';
|
25
26
|
export * from './provide-options';
|
26
27
|
export * from './pure';
|
27
28
|
export * from './px';
|
28
29
|
export * from './uniq-by';
|
29
30
|
export * from './with-styles';
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLE1BQU0sQ0FBQztBQUNyQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXJyYXktcmVtb3ZlJztcbmV4cG9ydCAqIGZyb20gJy4vYXJyYXktc2hhbGxvdy1lcXVhbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9hcnJheS10b2dnbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jaGFuZ2UtZGF0ZS1zZXBhcmF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9jb3VudC1maWxsZWQtY29udHJvbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtdG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0LXNvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmUtYmluZGluZyc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZS1saXN0ZW5lcic7XG5leHBvcnQgKiBmcm9tICcuL2Rpc3RhbmNlLWJldHdlZW4tdG91Y2hlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vhc2UtaW4tb3V0LXF1YWQnO1xuZXhwb3J0ICogZnJvbSAnLi9mbGF0LWxlbmd0aCc7XG5leHBvcnQgKiBmcm9tICcuL2ZvbnQtc2l6ZS13YXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LW9yaWdpbmFsLWFycmF5LWZyb20tcXVlcnktbGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL2lzLWNvbnRyb2wtZW1wdHknO1xuZXhwb3J0ICogZnJvbSAnLi9pcy1mYWxzeSc7XG5leHBvcnQgKiBmcm9tICcuL2lzLW51bWJlcic7XG5leHBvcnQgKiBmcm9tICcuL2lzLW9iamVjdCc7XG5leHBvcnQgKiBmcm9tICcuL2lzLXByZXNlbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pcy1zdHJpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9pcy12YWxpZC11cmwnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXJrLWNvbnRyb2wtYXMtdG91Y2hlZC1hbmQtdmFsaWRhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9udWxsYWJsZS1zYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vb2JmdXNjYXRlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvdmlkZSc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGUtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3B1cmUnO1xuZXhwb3J0ICogZnJvbSAnLi9weCc7XG5leHBvcnQgKiBmcm9tICcuL3VuaXEtYnknO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLXN0eWxlcyc7XG4iXX0=
|
@@ -0,0 +1,53 @@
|
|
1
|
+
/**
|
2
|
+
* Obfuscates a string by replacing certain characters with a symbol.
|
3
|
+
*
|
4
|
+
* @param value the input string to obfuscate
|
5
|
+
* @param symbol the symbol for obfuscation
|
6
|
+
* @return the obfuscated string
|
7
|
+
*
|
8
|
+
* The function determines which characters to obfuscate using a regular expression and the string's length:
|
9
|
+
* - 8 or more: show first 2 and last 2 characters
|
10
|
+
* - 4 to 7: show first and last character
|
11
|
+
* - less than 4: obfuscate all characters
|
12
|
+
* - obfuscates only alphanumeric characters
|
13
|
+
*/
|
14
|
+
export function tuiObfuscate(value, symbol) {
|
15
|
+
if (!value) {
|
16
|
+
return value;
|
17
|
+
}
|
18
|
+
const match = /[\p{L}\p{N}]/gu;
|
19
|
+
let visible = 0;
|
20
|
+
let obfuscateIndexes = getObfuscateIndexes(value, match);
|
21
|
+
if (obfuscateIndexes.length >= 8) {
|
22
|
+
visible = 2;
|
23
|
+
}
|
24
|
+
else if (obfuscateIndexes.length >= 4) {
|
25
|
+
visible = 1;
|
26
|
+
}
|
27
|
+
obfuscateIndexes = obfuscateIndexes.slice(visible, obfuscateIndexes.length);
|
28
|
+
const lastIndex = Number(obfuscateIndexes.length) - visible;
|
29
|
+
obfuscateIndexes = obfuscateIndexes.slice(0, lastIndex < 0 ? 0 : lastIndex);
|
30
|
+
const result = value.split('');
|
31
|
+
obfuscateIndexes.forEach((index) => {
|
32
|
+
result[index] = symbol;
|
33
|
+
});
|
34
|
+
return result.join('');
|
35
|
+
}
|
36
|
+
function getObfuscateIndexes(value, match) {
|
37
|
+
if (!match) {
|
38
|
+
return Array.from({ length: value.length }).map((_, index) => index);
|
39
|
+
}
|
40
|
+
const obfuscateIndexes = [];
|
41
|
+
let matchResult;
|
42
|
+
let count = 0;
|
43
|
+
while ((matchResult = match.exec(value)) !== null && count < value.length) {
|
44
|
+
const start = matchResult.index;
|
45
|
+
const end = match.lastIndex - 1;
|
46
|
+
for (let i = start; i <= end; i++) {
|
47
|
+
obfuscateIndexes.push(i);
|
48
|
+
}
|
49
|
+
count++;
|
50
|
+
}
|
51
|
+
return obfuscateIndexes;
|
52
|
+
}
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JmdXNjYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3V0aWxzL21pc2NlbGxhbmVvdXMvb2JmdXNjYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDdEQsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0lBRUQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7SUFFL0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksZ0JBQWdCLEdBQWEsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRW5FLElBQUksZ0JBQWdCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtRQUM5QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2Y7U0FBTSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFDckMsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNmO0lBRUQsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBRTVELGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU1RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRS9CLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsS0FBYSxFQUFFLEtBQWM7SUFDdEQsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUN0RTtJQUVELE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO0lBQ3RDLElBQUksV0FBVyxDQUFDO0lBQ2hCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVkLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUN2RSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsS0FBSyxFQUFFLENBQUM7S0FDWDtJQUVELE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT2JmdXNjYXRlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgY2VydGFpbiBjaGFyYWN0ZXJzIHdpdGggYSBzeW1ib2wuXG4gKlxuICogQHBhcmFtIHZhbHVlIHRoZSBpbnB1dCBzdHJpbmcgdG8gb2JmdXNjYXRlXG4gKiBAcGFyYW0gc3ltYm9sIHRoZSBzeW1ib2wgZm9yIG9iZnVzY2F0aW9uXG4gKiBAcmV0dXJuIHRoZSBvYmZ1c2NhdGVkIHN0cmluZ1xuICpcbiAqIFRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoaWNoIGNoYXJhY3RlcnMgdG8gb2JmdXNjYXRlIHVzaW5nIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCB0aGUgc3RyaW5nJ3MgbGVuZ3RoOlxuICogLSA4IG9yIG1vcmU6IHNob3cgZmlyc3QgMiBhbmQgbGFzdCAyIGNoYXJhY3RlcnNcbiAqIC0gNCB0byA3OiBzaG93IGZpcnN0IGFuZCBsYXN0IGNoYXJhY3RlclxuICogLSBsZXNzIHRoYW4gNDogb2JmdXNjYXRlIGFsbCBjaGFyYWN0ZXJzXG4gKiAtIG9iZnVzY2F0ZXMgb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHVpT2JmdXNjYXRlKHZhbHVlOiBzdHJpbmcsIHN5bWJvbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaCA9IC9bXFxwe0x9XFxwe059XS9ndTtcblxuICAgIGxldCB2aXNpYmxlID0gMDtcbiAgICBsZXQgb2JmdXNjYXRlSW5kZXhlczogbnVtYmVyW10gPSBnZXRPYmZ1c2NhdGVJbmRleGVzKHZhbHVlLCBtYXRjaCk7XG5cbiAgICBpZiAob2JmdXNjYXRlSW5kZXhlcy5sZW5ndGggPj0gOCkge1xuICAgICAgICB2aXNpYmxlID0gMjtcbiAgICB9IGVsc2UgaWYgKG9iZnVzY2F0ZUluZGV4ZXMubGVuZ3RoID49IDQpIHtcbiAgICAgICAgdmlzaWJsZSA9IDE7XG4gICAgfVxuXG4gICAgb2JmdXNjYXRlSW5kZXhlcyA9IG9iZnVzY2F0ZUluZGV4ZXMuc2xpY2UodmlzaWJsZSwgb2JmdXNjYXRlSW5kZXhlcy5sZW5ndGgpO1xuXG4gICAgY29uc3QgbGFzdEluZGV4ID0gTnVtYmVyKG9iZnVzY2F0ZUluZGV4ZXMubGVuZ3RoKSAtIHZpc2libGU7XG5cbiAgICBvYmZ1c2NhdGVJbmRleGVzID0gb2JmdXNjYXRlSW5kZXhlcy5zbGljZSgwLCBsYXN0SW5kZXggPCAwID8gMCA6IGxhc3RJbmRleCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSB2YWx1ZS5zcGxpdCgnJyk7XG5cbiAgICBvYmZ1c2NhdGVJbmRleGVzLmZvckVhY2goKGluZGV4KSA9PiB7XG4gICAgICAgIHJlc3VsdFtpbmRleF0gPSBzeW1ib2w7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBnZXRPYmZ1c2NhdGVJbmRleGVzKHZhbHVlOiBzdHJpbmcsIG1hdGNoPzogUmVnRXhwKTogbnVtYmVyW10ge1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDogdmFsdWUubGVuZ3RofSkubWFwKChfLCBpbmRleCkgPT4gaW5kZXgpO1xuICAgIH1cblxuICAgIGNvbnN0IG9iZnVzY2F0ZUluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgbGV0IG1hdGNoUmVzdWx0O1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoKG1hdGNoUmVzdWx0ID0gbWF0Y2guZXhlYyh2YWx1ZSkpICE9PSBudWxsICYmIGNvdW50IDwgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbWF0Y2hSZXN1bHQuaW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZCA9IG1hdGNoLmxhc3RJbmRleCAtIDE7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVJbmRleGVzLnB1c2goaSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIHJldHVybiBvYmZ1c2NhdGVJbmRleGVzO1xufVxuIl19
|
@@ -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} from '@angular/core';\nimport {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 */\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, 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 `−`. 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.external-link',\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.languages',\n '@tui.shrink',\n '@tui.expand',\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.file',\n '@tui.calendar',\n '@tui.plus',\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.
|
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} from '@angular/core';\nimport {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 */\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, 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 `−`. 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.external-link',\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.languages',\n '@tui.shrink',\n '@tui.expand',\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.file',\n '@tui.calendar',\n '@tui.plus',\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.38.0';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAGa,MAAA,uBAAuB,GAChC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAC,iBAAiB,EAAE,IAAI;;ACFrE,MAAM,IAAI,GAAG;AACT,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,CAAC,EAAE,CAAC;AACJ,IAAA,CAAC,EAAE,CAAC;CACE,CAAC;AAEX;;;;AAIG;AACU,MAAA,WAAW,GAAG,IAAI,SAAS,GAAQ;AACzC,MAAM,WAAW,GAAO,GAAG;MACrB,cAAc,GAA6B,MAAK,IAAI;AACpD,MAAA,iBAAiB,GAAY;AACtC,IAAA,GAAG,IAAI;AACP,IAAA,MAAM,EAAE,MAAM,IAAI;;;ACvBtB;;AAEG;AACH;MACa,iBAAiB,GAAG,MAAa,MAAM;AAEpD;;AAEG;AACH;MACa,gBAAgB,GAAG,MAAY;;ACR5C,SAAS,SAAS,CAAC,KAAc,EAAE,KAAc,EAAA;IAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1F,CAAC;AAED;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,CAC/B,IAAO,EACP,MAAc,EACd,SAAA,GAAmC,MAAM,KAC/B,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;AAE3E;;;;;AAKG;AACU,MAAA,kBAAkB,GAAG,CAC9B,IAAO,EACP,MAAc,EACd,SAAmC,GAAA,MAAM,KAC/B,SAAS,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,GAAG;AAErE;;;;;;AAMG;MACU,4BAA4B,GAAgC,CAAC,KAAK,EAAE,KAAK,KAClF,KAAK,KAAK,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK;;ACtCtC,MAAM,gBAAgB,GAAG,KAAK;AAC9B,MAAM,oBAAoB,GAAG,KAAK;AAClC,MAAM,qBAAqB,GAAG;;ACFxB,MAAA,aAAa,GAAgD;AACtE,IAAA,UAAU,CAAC,IAAU,EAAA;QACjB,OAAO,iBAAiB,IAAI,IAAI;cAC1B,UAAU,CAAC,aAAa;AAC1B,cAAE,UAAU,CAAC,aAAa,CAAC;KAClC;;;ACLL;;AAEG;AACI,MAAM,mBAAmB,GAAG,SAAS;AAE5C;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,SAAS;AAErC;;;;;;AAMG;AACI,MAAM,YAAY,GAAG,SAAS;AAErC;;AAEG;AACI,MAAM,UAAU,GAAG,SAAS;AAEnC;;AAEG;AACI,MAAM,UAAU,GAAG,SAAS;AAEnC;;;;;;AAMG;AACI,MAAM,WAAW,GAAG,SAAS;AAEpC;;;;;AAKG;AACI,MAAM,UAAU,GAAG,SAAS;AAEnC;;AAEG;AACI,MAAM,SAAS,GAAG,SAAS;AAElC;;AAEG;AACI,MAAM,WAAW,GAAG,SAAS;AAEpC;;AAEG;AACI,MAAM,aAAa,GAAG,SAAS;AAEtC;;AAEG;AACI,MAAM,kBAAkB,GAAG,SAAS;AAE3C;;AAEG;AACI,MAAM,qBAAqB,GAAG;;ACzErC;;;;;AAKG;AACU,MAAA,cAAc,GAAG;IAC1B,UAAU;IACV,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,WAAW;IACX,kBAAkB;IAClB,eAAe;IACf,WAAW;IACX,UAAU;IACV,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,oBAAoB;IACpB,aAAa;IACb,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,aAAa;IACb,cAAc;IACd,UAAU;IACV,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,uBAAuB;IACvB,WAAW;IACX,mBAAmB;IACnB,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,QAAQ;IACR,oBAAoB;IACpB,eAAe;IACf,mBAAmB;IACnB,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,eAAe;IACf,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,wBAAwB;IACxB,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,aAAa;IACb,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,sBAAsB;IACtB,gBAAgB;IAChB,qBAAqB;IACrB,gBAAgB;IAChB,mBAAmB;IACnB,cAAc;;;ACvEX,MAAM,WAAW,GAAG;;ACA3B;;AAEG;;;;"}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { tuiObfuscate, tuiCreateOptions } from '@taiga-ui/cdk/utils';
|
2
|
+
import * as i0 from '@angular/core';
|
3
|
+
import { inject, Pipe } from '@angular/core';
|
4
|
+
|
5
|
+
const TUI_OBFUSCATE_DEFAULT_OPTIONS = {
|
6
|
+
default: (value, symbol = '*') => tuiObfuscate(value, symbol),
|
7
|
+
recipes: {},
|
8
|
+
};
|
9
|
+
/**
|
10
|
+
* Injection token for obfuscation options.
|
11
|
+
*/
|
12
|
+
const [TUI_OBFUSCATE_OPTIONS, tuiObfuscateOptionsProvider] = tuiCreateOptions(TUI_OBFUSCATE_DEFAULT_OPTIONS);
|
13
|
+
|
14
|
+
class TuiObfuscatePipe {
|
15
|
+
constructor() {
|
16
|
+
this.option = inject(TUI_OBFUSCATE_OPTIONS);
|
17
|
+
}
|
18
|
+
/**
|
19
|
+
* Transforms the input value by obfuscating it according to the specified recipe or symbol.
|
20
|
+
*
|
21
|
+
* @param value The value to be obfuscated should be a string.
|
22
|
+
* @param recipe The name of the recipe to use for obfuscation or a single character symbol for custom obfuscation.
|
23
|
+
* @returns The obfuscated string.
|
24
|
+
* @throws Will throw an error if the specified recipe is not found.
|
25
|
+
*/
|
26
|
+
transform(value, recipe = '') {
|
27
|
+
if (!value) {
|
28
|
+
return value;
|
29
|
+
}
|
30
|
+
if (!recipe) {
|
31
|
+
return this.option.default(value);
|
32
|
+
}
|
33
|
+
const obfuscate = this.option.recipes[recipe];
|
34
|
+
if (obfuscate) {
|
35
|
+
return obfuscate(value);
|
36
|
+
}
|
37
|
+
if (recipe.length === 1) {
|
38
|
+
return this.option.default(value, recipe[0]);
|
39
|
+
}
|
40
|
+
const availableRecipes = Object.keys(this.option.recipes).sort();
|
41
|
+
throw new Error(`Obfuscate recipe "${recipe}" not found. Available recipes: [${availableRecipes}]`);
|
42
|
+
}
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiObfuscatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
44
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: TuiObfuscatePipe, isStandalone: true, name: "tuiObfuscate" }); }
|
45
|
+
}
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiObfuscatePipe, decorators: [{
|
47
|
+
type: Pipe,
|
48
|
+
args: [{
|
49
|
+
standalone: true,
|
50
|
+
name: 'tuiObfuscate',
|
51
|
+
}]
|
52
|
+
}] });
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Generated bundle index. Do not edit.
|
56
|
+
*/
|
57
|
+
|
58
|
+
export { TUI_OBFUSCATE_DEFAULT_OPTIONS, TUI_OBFUSCATE_OPTIONS, TuiObfuscatePipe, tuiObfuscateOptionsProvider };
|
59
|
+
//# sourceMappingURL=taiga-ui-cdk-pipes-obfuscate.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"taiga-ui-cdk-pipes-obfuscate.mjs","sources":["../../../projects/cdk/pipes/obfuscate/obfuscate.options.ts","../../../projects/cdk/pipes/obfuscate/obfuscate.pipe.ts","../../../projects/cdk/pipes/obfuscate/taiga-ui-cdk-pipes-obfuscate.ts"],"sourcesContent":["import {tuiCreateOptions, tuiObfuscate} from '@taiga-ui/cdk/utils';\n\n/**\n * Defines the options for obfuscation.\n */\nexport interface TuiObfuscateOptions {\n /**\n * Default function used to obfuscate a string\n * if no recipe was found.\n */\n readonly default: (value: string, symbol?: string) => string;\n\n /**\n * Collection of named recipes for different obfuscation scenarios.\n */\n readonly recipes: Record<string, (value: string) => string>;\n}\n\nexport const TUI_OBFUSCATE_DEFAULT_OPTIONS: TuiObfuscateOptions = {\n default: (value, symbol = '*') => tuiObfuscate(value, symbol),\n recipes: {},\n};\n\n/**\n * Injection token for obfuscation options.\n */\nexport const [TUI_OBFUSCATE_OPTIONS, tuiObfuscateOptionsProvider] = tuiCreateOptions(\n TUI_OBFUSCATE_DEFAULT_OPTIONS,\n);\n","import type {PipeTransform} from '@angular/core';\nimport {inject, Pipe} from '@angular/core';\n\nimport {TUI_OBFUSCATE_OPTIONS} from './obfuscate.options';\n\n@Pipe({\n standalone: true,\n name: 'tuiObfuscate',\n})\nexport class TuiObfuscatePipe implements PipeTransform {\n private readonly option = inject(TUI_OBFUSCATE_OPTIONS);\n\n /**\n * Transforms the input value by obfuscating it according to the specified recipe or symbol.\n *\n * @param value The value to be obfuscated should be a string.\n * @param recipe The name of the recipe to use for obfuscation or a single character symbol for custom obfuscation.\n * @returns The obfuscated string.\n * @throws Will throw an error if the specified recipe is not found.\n */\n public transform(value: string, recipe = ''): string {\n if (!value) {\n return value;\n }\n\n if (!recipe) {\n return this.option.default(value);\n }\n\n const obfuscate = this.option.recipes[recipe];\n\n if (obfuscate) {\n return obfuscate(value);\n }\n\n if (recipe.length === 1) {\n return this.option.default(value, recipe[0]);\n }\n\n const availableRecipes = Object.keys(this.option.recipes).sort();\n\n throw new Error(\n `Obfuscate recipe \"${recipe}\" not found. Available recipes: [${availableRecipes}]`,\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAkBa,MAAA,6BAA6B,GAAwB;AAC9D,IAAA,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,KAAK,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AAC7D,IAAA,OAAO,EAAE,EAAE;EACb;AAEF;;AAEG;AACI,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC,GAAG,gBAAgB,CAChF,6BAA6B;;ACtBjC,MAIa,gBAAgB,CAAA;AAJ7B,IAAA,WAAA,GAAA;AAKqB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAmC3D,KAAA;AAjCG;;;;;;;AAOG;AACI,IAAA,SAAS,CAAC,KAAa,EAAE,MAAM,GAAG,EAAE,EAAA;QACvC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QAED,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACrC,SAAA;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9C,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC3B,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,SAAA;AAED,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAEjE,MAAM,IAAI,KAAK,CACX,CAAA,kBAAA,EAAqB,MAAM,CAAoC,iCAAA,EAAA,gBAAgB,CAAG,CAAA,CAAA,CACrF,CAAC;KACL;+GAnCQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA,EAAA;;4FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,cAAc;AACvB,iBAAA,CAAA;;;ACRD;;AAEG;;;;"}
|
@@ -3,6 +3,7 @@ export * from '@taiga-ui/cdk/pipes/filter';
|
|
3
3
|
export * from '@taiga-ui/cdk/pipes/is-present';
|
4
4
|
export * from '@taiga-ui/cdk/pipes/keys';
|
5
5
|
export * from '@taiga-ui/cdk/pipes/mapper';
|
6
|
+
export * from '@taiga-ui/cdk/pipes/obfuscate';
|
6
7
|
export * from '@taiga-ui/cdk/pipes/repeat-times';
|
7
8
|
export * from '@taiga-ui/cdk/pipes/replace';
|
8
9
|
export * from '@taiga-ui/cdk/pipes/to-array';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"taiga-ui-cdk-pipes.mjs","sources":["../../../projects/cdk/pipes/taiga-ui-cdk-pipes.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"taiga-ui-cdk-pipes.mjs","sources":["../../../projects/cdk/pipes/taiga-ui-cdk-pipes.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAAA;;AAEG"}
|
@@ -215,6 +215,59 @@ function tuiNullableSame(a, b, handler) {
|
|
215
215
|
return handler(a, b);
|
216
216
|
}
|
217
217
|
|
218
|
+
/**
|
219
|
+
* Obfuscates a string by replacing certain characters with a symbol.
|
220
|
+
*
|
221
|
+
* @param value the input string to obfuscate
|
222
|
+
* @param symbol the symbol for obfuscation
|
223
|
+
* @return the obfuscated string
|
224
|
+
*
|
225
|
+
* The function determines which characters to obfuscate using a regular expression and the string's length:
|
226
|
+
* - 8 or more: show first 2 and last 2 characters
|
227
|
+
* - 4 to 7: show first and last character
|
228
|
+
* - less than 4: obfuscate all characters
|
229
|
+
* - obfuscates only alphanumeric characters
|
230
|
+
*/
|
231
|
+
function tuiObfuscate(value, symbol) {
|
232
|
+
if (!value) {
|
233
|
+
return value;
|
234
|
+
}
|
235
|
+
const match = /[\p{L}\p{N}]/gu;
|
236
|
+
let visible = 0;
|
237
|
+
let obfuscateIndexes = getObfuscateIndexes(value, match);
|
238
|
+
if (obfuscateIndexes.length >= 8) {
|
239
|
+
visible = 2;
|
240
|
+
}
|
241
|
+
else if (obfuscateIndexes.length >= 4) {
|
242
|
+
visible = 1;
|
243
|
+
}
|
244
|
+
obfuscateIndexes = obfuscateIndexes.slice(visible, obfuscateIndexes.length);
|
245
|
+
const lastIndex = Number(obfuscateIndexes.length) - visible;
|
246
|
+
obfuscateIndexes = obfuscateIndexes.slice(0, lastIndex < 0 ? 0 : lastIndex);
|
247
|
+
const result = value.split('');
|
248
|
+
obfuscateIndexes.forEach((index) => {
|
249
|
+
result[index] = symbol;
|
250
|
+
});
|
251
|
+
return result.join('');
|
252
|
+
}
|
253
|
+
function getObfuscateIndexes(value, match) {
|
254
|
+
if (!match) {
|
255
|
+
return Array.from({ length: value.length }).map((_, index) => index);
|
256
|
+
}
|
257
|
+
const obfuscateIndexes = [];
|
258
|
+
let matchResult;
|
259
|
+
let count = 0;
|
260
|
+
while ((matchResult = match.exec(value)) !== null && count < value.length) {
|
261
|
+
const start = matchResult.index;
|
262
|
+
const end = match.lastIndex - 1;
|
263
|
+
for (let i = start; i <= end; i++) {
|
264
|
+
obfuscateIndexes.push(i);
|
265
|
+
}
|
266
|
+
count++;
|
267
|
+
}
|
268
|
+
return obfuscateIndexes;
|
269
|
+
}
|
270
|
+
|
218
271
|
function tuiProvide(provide, useExisting, multi = false) {
|
219
272
|
return { provide, useExisting, multi };
|
220
273
|
}
|
@@ -344,5 +397,5 @@ function tuiWithStyles(component) {
|
|
344
397
|
* Generated bundle index. Do not edit.
|
345
398
|
*/
|
346
399
|
|
347
|
-
export { TuiPureException, changeDateSeparator, tuiArrayRemove, tuiArrayShallowEquals, tuiArrayToggle, tuiCountFilledControls, tuiCreateToken, tuiCreateTokenFromFactory, tuiDefaultSort, tuiDirectiveBinding, tuiDirectiveListener, tuiDistanceBetweenTouches, tuiEaseInOutQuad, tuiFlatLength, tuiFontSizeWatcher, tuiGetOriginalArrayFromQueryList, tuiIsControlEmpty, tuiIsFalsy, tuiIsNumber, tuiIsObject, tuiIsPresent, tuiIsString, tuiIsValidUrl, tuiMarkControlAsTouchedAndValidate, tuiNullableSame, tuiProvide, tuiProvideOptions, tuiPure, tuiPx, tuiUniqBy, tuiWithStyles };
|
400
|
+
export { TuiPureException, changeDateSeparator, tuiArrayRemove, tuiArrayShallowEquals, tuiArrayToggle, tuiCountFilledControls, tuiCreateToken, tuiCreateTokenFromFactory, tuiDefaultSort, tuiDirectiveBinding, tuiDirectiveListener, tuiDistanceBetweenTouches, tuiEaseInOutQuad, tuiFlatLength, tuiFontSizeWatcher, tuiGetOriginalArrayFromQueryList, tuiIsControlEmpty, tuiIsFalsy, tuiIsNumber, tuiIsObject, tuiIsPresent, tuiIsString, tuiIsValidUrl, tuiMarkControlAsTouchedAndValidate, tuiNullableSame, tuiObfuscate, tuiProvide, tuiProvideOptions, tuiPure, tuiPx, tuiUniqBy, tuiWithStyles };
|
348
401
|
//# sourceMappingURL=taiga-ui-cdk-utils-miscellaneous.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"taiga-ui-cdk-utils-miscellaneous.mjs","sources":["../../../projects/cdk/utils/miscellaneous/array-remove.ts","../../../projects/cdk/utils/miscellaneous/array-shallow-equals.ts","../../../projects/cdk/utils/miscellaneous/array-toggle.ts","../../../projects/cdk/utils/miscellaneous/change-date-separator.ts","../../../projects/cdk/utils/miscellaneous/is-control-empty.ts","../../../projects/cdk/utils/miscellaneous/count-filled-controls.ts","../../../projects/cdk/utils/miscellaneous/create-token.ts","../../../projects/cdk/utils/miscellaneous/is-string.ts","../../../projects/cdk/utils/miscellaneous/default-sort.ts","../../../projects/cdk/utils/miscellaneous/directive-binding.ts","../../../projects/cdk/utils/miscellaneous/directive-listener.ts","../../../projects/cdk/utils/miscellaneous/distance-between-touches.ts","../../../projects/cdk/utils/miscellaneous/ease-in-out-quad.ts","../../../projects/cdk/utils/miscellaneous/flat-length.ts","../../../projects/cdk/utils/miscellaneous/font-size-watcher.ts","../../../projects/cdk/utils/miscellaneous/get-original-array-from-query-list.ts","../../../projects/cdk/utils/miscellaneous/is-falsy.ts","../../../projects/cdk/utils/miscellaneous/is-number.ts","../../../projects/cdk/utils/miscellaneous/is-object.ts","../../../projects/cdk/utils/miscellaneous/is-present.ts","../../../projects/cdk/utils/miscellaneous/is-valid-url.ts","../../../projects/cdk/utils/miscellaneous/mark-control-as-touched-and-validate.ts","../../../projects/cdk/utils/miscellaneous/nullable-same.ts","../../../projects/cdk/utils/miscellaneous/provide.ts","../../../projects/cdk/utils/miscellaneous/provide-options.ts","../../../projects/cdk/utils/miscellaneous/pure.ts","../../../projects/cdk/utils/miscellaneous/px.ts","../../../projects/cdk/utils/miscellaneous/uniq-by.ts","../../../projects/cdk/utils/miscellaneous/with-styles.ts","../../../projects/cdk/utils/miscellaneous/taiga-ui-cdk-utils-miscellaneous.ts"],"sourcesContent":["export function tuiArrayRemove<T>(array: readonly T[], index: number): T[] {\n return array.slice(0, Math.max(index, 0)).concat(array.slice(Math.max(index + 1, 0)));\n}\n","export function tuiArrayShallowEquals<T>(a: readonly T[], b: readonly T[]): boolean {\n return a.length === b.length && a.every((item, index) => item === b[index]);\n}\n","import type {TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\nimport {tuiArrayRemove} from './array-remove';\n\nexport function tuiArrayToggle<T>(\n array: readonly T[],\n item: T,\n identity?: TuiIdentityMatcher<T>,\n): T[] {\n const index = identity\n ? array.findIndex((it) => identity(it, item))\n : array.indexOf(item);\n\n return index === -1 ? [...array, item] : tuiArrayRemove(array, index);\n}\n","/* internal */\nexport const changeDateSeparator = (\n dateString: string,\n newDateSeparator: string,\n): string => dateString.replaceAll(/[^0-9A-Za-zА-Яа-я]/gi, newDateSeparator);\n","import type {AbstractControl} from '@angular/forms';\n\nexport function tuiIsControlEmpty({value = null}: AbstractControl): boolean {\n return value === null || value === '' || (Array.isArray(value) && !value.length);\n}\n","import type {AbstractControl} from '@angular/forms';\nimport {FormArray, FormGroup} from '@angular/forms';\nimport {tuiToInt} from '@taiga-ui/cdk/utils/math';\n\nimport {tuiIsControlEmpty} from './is-control-empty';\n\nexport function tuiCountFilledControls(control: AbstractControl): number {\n if (control instanceof FormArray) {\n return control.controls.reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n if (control instanceof FormGroup) {\n return Object.values(control.controls).reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n return tuiToInt(!tuiIsControlEmpty(control));\n}\n","import {InjectionToken} from '@angular/core';\n\nexport function tuiCreateToken<T>(defaults?: T): InjectionToken<T> {\n return defaults === undefined\n ? new InjectionToken('')\n : tuiCreateTokenFromFactory(() => defaults);\n}\n\nexport function tuiCreateTokenFromFactory<T>(factory?: () => T): InjectionToken<T> {\n return factory ? new InjectionToken<T>('', {factory}) : new InjectionToken<T>('');\n}\n","export function tuiIsString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import {tuiIsString} from './is-string';\n\nexport function tuiDefaultSort<T>(x: T, y: T): number {\n if (x === y) {\n return 0;\n }\n\n if (tuiIsString(x) && tuiIsString(y)) {\n return x.localeCompare(y);\n }\n\n return x > y ? 1 : -1;\n}\n","import type {InjectOptions, ProviderToken, Signal, WritableSignal} from '@angular/core';\nimport {effect, inject, isSignal, signal} from '@angular/core';\nimport {TUI_ALLOW_SIGNAL_WRITES} from '@taiga-ui/cdk/constants';\n\ntype SignalLikeTypeOf<T> = T extends Signal<infer R> ? R : T;\n\ntype SignalLike<T> = Signal<T> | T;\n\nexport function tuiDirectiveBinding<\n T,\n G extends keyof T,\n I extends SignalLike<SignalLikeTypeOf<T[G]>>,\n>(\n token: ProviderToken<T>,\n key: G,\n initial: I,\n options: InjectOptions = {self: true},\n): I extends Signal<any> ? I : WritableSignal<I> {\n const result: any = isSignal(initial) ? initial : signal(initial);\n const directive: any = inject(token, options);\n const output = directive[`${key.toString()}Change`];\n\n // TODO: Figure out why effects are executed all the time and not just when result changes (check with Angular 18)\n let previous: any;\n\n effect(() => {\n const value: any = result();\n\n if (previous === value) {\n return;\n }\n\n if (isSignal(directive[key])) {\n directive[key].set(value);\n } else {\n directive[key] = value;\n }\n\n directive.ngOnChanges?.({});\n output?.emit?.(value);\n previous = value;\n }, TUI_ALLOW_SIGNAL_WRITES);\n\n return result;\n}\n","import type {InjectOptions, ProviderToken, Signal} from '@angular/core';\nimport {inject, isSignal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport type {Observable} from 'rxjs';\n\ntype OutputKeysOf<T> = {\n [K in keyof T]: T[K] extends Observable<any> | Signal<any> ? K : never;\n}[keyof T];\n\ntype OutputTypeOf<T> =\n T extends Signal<infer R> ? R : T extends Observable<infer O> ? O : never;\n\nexport function tuiDirectiveListener<T, K extends OutputKeysOf<T>>(\n token: ProviderToken<T>,\n key: K,\n options: InjectOptions = {self: true},\n): Signal<OutputTypeOf<T[K]>> {\n const prop: any = inject(token, options)?.[key];\n\n return isSignal(prop) ? prop : toSignal<any>(prop);\n}\n","export function tuiDistanceBetweenTouches({touches}: TouchEvent): number {\n return Math.hypot(\n (touches[0]?.clientX ?? 0) - (touches[1]?.clientX ?? 0),\n (touches[0]?.clientY ?? 0) - (touches[1]?.clientY ?? 0),\n );\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nexport function tuiEaseInOutQuad(t: number): number {\n ngDevMode &&\n console.assert(\n t >= 0 && t <= 1,\n 'Input must be between 0 and 1 inclusive but received ',\n t,\n );\n\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n","/**\n * Flattens two-dimensional array and calculates resulting length\n *\n * @param array twi dimensional array\n */\nexport function tuiFlatLength(array: ReadonlyArray<readonly unknown[]>): number {\n return array.reduce((count, section) => count + section.length, 0);\n}\n","const IFRAME = 'position: fixed; visibility: hidden; pointer-events: none';\nconst BODY = 'height: fit-content; line-height: 1em;';\nconst CLASS = 'tui-font-size-watcher';\n\nexport function tuiFontSizeWatcher(\n callback: (fontSize: number) => void,\n win: Window = window,\n): () => void {\n if (win.document.querySelector(`.${CLASS}`)) {\n return () => {};\n }\n\n const iframe = win.document.createElement('iframe');\n const resize = (): void => {\n const {innerWidth, outerWidth, devicePixelRatio} = win;\n\n iframe.width = `${innerWidth === outerWidth ? innerWidth : innerWidth / devicePixelRatio}`;\n };\n\n win.document.body.append(iframe);\n win.addEventListener('resize', resize);\n\n const doc = iframe.contentWindow?.document;\n const observer = new ResizeObserver(() => callback(doc?.body.offsetHeight || 0));\n\n iframe.setAttribute('class', CLASS);\n iframe.setAttribute('style', IFRAME);\n doc?.documentElement.style.setProperty('font', '-apple-system-body');\n doc?.body.setAttribute('style', BODY);\n doc?.body.insertAdjacentText('beforeend', '.'.repeat(1000));\n observer.observe(doc?.body || iframe);\n resize();\n\n return () => {\n observer.disconnect();\n iframe.remove();\n win.removeEventListener('resize', resize);\n };\n}\n","import type {QueryList} from '@angular/core';\n\n/**\n * Extracts original array from {@link QueryList} rather than\n * creating a copy like {@link QueryList.toArray} does.\n * @param queryList\n * @returns original array from {@link QueryList}.\n */\nexport function tuiGetOriginalArrayFromQueryList<T>(\n queryList: QueryList<T>,\n): readonly T[] {\n let array: readonly T[] = [];\n\n queryList.find((_item, _index, originalArray) => {\n array = originalArray;\n\n return true;\n });\n\n return array;\n}\n","export function tuiIsFalsy(value: unknown): boolean {\n return !value;\n}\n","export function tuiIsNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n","export function tuiIsObject<T extends Record<string, any>>(\n value: unknown,\n): value is NonNullable<T> {\n return typeof value === 'object' && !!value;\n}\n","export function tuiIsPresent<T>(value?: T | null): value is T {\n return value !== null && value !== undefined;\n}\n","/**\n * @deprecated: drop in v5.0\n */\nexport function tuiIsValidUrl(url: string): boolean {\n return new RegExp(\n String.raw`^([a-zA-Z]+:\\/\\/)?` + // protocol\n String.raw`((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|localhost|` + // domain name\n String.raw`((\\d{1,3}\\.){3}\\d{1,3}))` + // OR IP (v4) address\n String.raw`(\\:\\d+)?(\\/[-a-z\\d%_.~+\\:]*)*` + // port and path\n String.raw`(\\?[)(;&a-z\\d%_.~+=-]*)?` + // query string\n String.raw`(\\#[-a-z\\d_]*)?$`, // fragment locator\n 'i',\n ).test(url);\n}\n","import type {AbstractControl} from '@angular/forms';\nimport {FormArray, FormGroup} from '@angular/forms';\n\nexport function tuiMarkControlAsTouchedAndValidate(control: AbstractControl): void {\n if (control instanceof FormArray) {\n control.controls.forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n if (control instanceof FormGroup) {\n Object.values(control.controls).forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n control.markAsTouched();\n control.updateValueAndValidity();\n}\n","import type {TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\n/**\n * Checks identity for nullable elements.\n *\n * @param a element a\n * @param b element b\n * @param handler called if both elements are not null\n * @return true if either both are null or they pass identity handler\n */\nexport function tuiNullableSame<T>(\n a: T | null,\n b: T | null,\n handler: TuiIdentityMatcher<T>,\n): boolean {\n if (a === null) {\n return b === null;\n }\n\n if (b === null) {\n return false;\n }\n\n return handler(a, b);\n}\n","import type {ExistingProvider, ProviderToken} from '@angular/core';\n\nexport function tuiProvide<T>(\n provide: ProviderToken<T>,\n useExisting: ProviderToken<T>,\n): ExistingProvider;\nexport function tuiProvide<T>(\n provide: ProviderToken<T | T[]>,\n useExisting: ProviderToken<T>,\n multi: boolean,\n): ExistingProvider;\nexport function tuiProvide<T>(\n provide: ProviderToken<T>,\n useExisting: ProviderToken<T>,\n multi = false,\n): ExistingProvider {\n return {provide, useExisting, multi};\n}\n","import type {FactoryProvider, InjectionToken, ProviderToken} from '@angular/core';\nimport {inject} from '@angular/core';\n\nexport function tuiProvideOptions<T>(\n provide: InjectionToken<T>,\n options: Partial<T> | ProviderToken<Partial<T>>,\n fallback: T,\n): FactoryProvider {\n return {\n provide,\n useFactory: (): T => ({\n ...(inject(provide, {optional: true, skipSelf: true}) || fallback),\n ...(inject(options as any, {optional: true}) || options),\n }),\n };\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nfunction decorateMethod(\n originalMethod: (...args: unknown[]) => unknown,\n): (this: object, ...args: unknown[]) => unknown {\n let previousArgs: readonly unknown[] = [];\n let originalFnWasCalledLeastAtOnce = false;\n let pureValue: unknown;\n\n return function tuiPureMethodPatched(this: object, ...args: unknown[]): unknown {\n const isPure =\n originalFnWasCalledLeastAtOnce &&\n previousArgs.length === args.length &&\n args.every((arg, index) => arg === previousArgs[index]);\n\n if (isPure) {\n return pureValue;\n }\n\n previousArgs = args;\n pureValue = originalMethod.apply(this, args);\n originalFnWasCalledLeastAtOnce = true;\n\n return pureValue;\n };\n}\n\nfunction decorateGetter(\n originalGetter: () => unknown,\n propertyKey: string | symbol,\n enumerable = true,\n): (this: object) => unknown {\n return function tuiPureGetterPatched(this: object): unknown {\n const value = originalGetter.call(this);\n\n Object.defineProperty(this, propertyKey, {enumerable, value});\n\n return value;\n };\n}\n\n/**\n * Implements lazy initialization for getter or memoization of a function call similar to pure {@link: Pipe}.\n * Replaces getter with its calculated value upon first call or keeps track of last call arguments and returned\n * value for function, skipping calculation when arguments are strictly the same.\n *\n * @throws error if used not on getter or function\n *\n * CAUTION: they must be pure.\n */\nexport function tuiPure<T>(\n target: object,\n propertyKey: string,\n {get, enumerable, value}: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\n\n/**\n * Implements lazy initialization for getter or memoization of a function call similar to pure {@link: Pipe}.\n * Replaces getter with its calculated value upon first call or keeps track of last call arguments and returned\n * value for function, skipping calculation when arguments are strictly the same.\n *\n * CAUTION: they must be pure.\n */\nexport function tuiPure<A extends unknown[], R>(\n target: (...args: A) => R,\n context: ClassGetterDecoratorContext | ClassMethodDecoratorContext,\n): (...args: A) => R;\n\nexport function tuiPure(\n target: object | ((...args: unknown[]) => unknown),\n propertyKeyOrContext:\n | ClassGetterDecoratorContext\n | ClassMethodDecoratorContext\n | string,\n descriptor?: TypedPropertyDescriptor<(...args: unknown[]) => unknown>,\n): TypedPropertyDescriptor<unknown> | ((...args: unknown[]) => unknown) {\n if (typeof target === 'function') {\n const context = propertyKeyOrContext as\n | ClassGetterDecoratorContext\n | ClassMethodDecoratorContext;\n\n if (context.kind === 'getter') {\n return decorateGetter(target as () => unknown, context.name);\n }\n\n if (context.kind === 'method') {\n return decorateMethod(target as (...args: unknown[]) => unknown);\n }\n\n throw new TuiPureException();\n }\n\n const {get, enumerable, value} = descriptor!;\n const propertyKey = propertyKeyOrContext as string;\n\n if (get) {\n return {\n configurable: true,\n enumerable,\n get: decorateGetter(get, propertyKey, enumerable),\n };\n }\n\n if (typeof value !== 'function') {\n throw new TuiPureException();\n }\n\n const original = value;\n\n return {\n configurable: true,\n enumerable,\n get(): unknown {\n let previousArgs: readonly unknown[] = [];\n let originalFnWasCalledLeastAtOnce = false;\n let pureValue: unknown;\n\n const patched = (...args: unknown[]): unknown => {\n const isPure =\n originalFnWasCalledLeastAtOnce &&\n previousArgs.length === args.length &&\n args.every((arg, index) => arg === previousArgs[index]);\n\n if (isPure) {\n return pureValue;\n }\n\n previousArgs = args;\n pureValue = original.apply(this, args);\n originalFnWasCalledLeastAtOnce = true;\n\n return pureValue;\n };\n\n Object.defineProperty(this, propertyKey, {\n configurable: true,\n value: patched,\n });\n\n return patched as unknown;\n },\n };\n}\n\nexport class TuiPureException extends Error {\n constructor() {\n super(ngDevMode ? 'tuiPure can only be used with functions or getters' : '');\n }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Adds 'px' to the number and turns it into a string\n */\nexport function tuiPx(value: number): string {\n ngDevMode && console.assert(Number.isFinite(value), 'Value must be finite number');\n\n return `${value}px`;\n}\n","import type {TuiValuesOf} from '@taiga-ui/cdk/types';\n\nexport function tuiUniqBy<T extends Record<string, any>>(\n array: readonly T[],\n key: keyof T,\n): readonly T[] {\n return Array.from(\n array\n .reduce(\n (map, item) => (map.has(item[key]) ? map : map.set(item[key], item)),\n new Map<TuiValuesOf<T>, T>(),\n )\n .values(),\n );\n}\n","import type {Type} from '@angular/core';\nimport {createComponent, DestroyRef, EnvironmentInjector, inject} from '@angular/core';\n\nimport {tuiCreateTokenFromFactory} from './create-token';\n\nconst MAP = tuiCreateTokenFromFactory(() => {\n const map = new Map();\n\n inject(DestroyRef).onDestroy(() => map.forEach((component) => component.destroy()));\n\n return map;\n});\n\nexport function tuiWithStyles(component: Type<unknown>): undefined {\n const map = inject(MAP);\n const environmentInjector = inject(EnvironmentInjector);\n\n if (!map.has(component)) {\n map.set(component, createComponent(component, {environmentInjector}));\n }\n\n return undefined;\n}\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-utils-miscellaneous.mjs","sources":["../../../projects/cdk/utils/miscellaneous/array-remove.ts","../../../projects/cdk/utils/miscellaneous/array-shallow-equals.ts","../../../projects/cdk/utils/miscellaneous/array-toggle.ts","../../../projects/cdk/utils/miscellaneous/change-date-separator.ts","../../../projects/cdk/utils/miscellaneous/is-control-empty.ts","../../../projects/cdk/utils/miscellaneous/count-filled-controls.ts","../../../projects/cdk/utils/miscellaneous/create-token.ts","../../../projects/cdk/utils/miscellaneous/is-string.ts","../../../projects/cdk/utils/miscellaneous/default-sort.ts","../../../projects/cdk/utils/miscellaneous/directive-binding.ts","../../../projects/cdk/utils/miscellaneous/directive-listener.ts","../../../projects/cdk/utils/miscellaneous/distance-between-touches.ts","../../../projects/cdk/utils/miscellaneous/ease-in-out-quad.ts","../../../projects/cdk/utils/miscellaneous/flat-length.ts","../../../projects/cdk/utils/miscellaneous/font-size-watcher.ts","../../../projects/cdk/utils/miscellaneous/get-original-array-from-query-list.ts","../../../projects/cdk/utils/miscellaneous/is-falsy.ts","../../../projects/cdk/utils/miscellaneous/is-number.ts","../../../projects/cdk/utils/miscellaneous/is-object.ts","../../../projects/cdk/utils/miscellaneous/is-present.ts","../../../projects/cdk/utils/miscellaneous/is-valid-url.ts","../../../projects/cdk/utils/miscellaneous/mark-control-as-touched-and-validate.ts","../../../projects/cdk/utils/miscellaneous/nullable-same.ts","../../../projects/cdk/utils/miscellaneous/obfuscate.ts","../../../projects/cdk/utils/miscellaneous/provide.ts","../../../projects/cdk/utils/miscellaneous/provide-options.ts","../../../projects/cdk/utils/miscellaneous/pure.ts","../../../projects/cdk/utils/miscellaneous/px.ts","../../../projects/cdk/utils/miscellaneous/uniq-by.ts","../../../projects/cdk/utils/miscellaneous/with-styles.ts","../../../projects/cdk/utils/miscellaneous/taiga-ui-cdk-utils-miscellaneous.ts"],"sourcesContent":["export function tuiArrayRemove<T>(array: readonly T[], index: number): T[] {\n return array.slice(0, Math.max(index, 0)).concat(array.slice(Math.max(index + 1, 0)));\n}\n","export function tuiArrayShallowEquals<T>(a: readonly T[], b: readonly T[]): boolean {\n return a.length === b.length && a.every((item, index) => item === b[index]);\n}\n","import type {TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\nimport {tuiArrayRemove} from './array-remove';\n\nexport function tuiArrayToggle<T>(\n array: readonly T[],\n item: T,\n identity?: TuiIdentityMatcher<T>,\n): T[] {\n const index = identity\n ? array.findIndex((it) => identity(it, item))\n : array.indexOf(item);\n\n return index === -1 ? [...array, item] : tuiArrayRemove(array, index);\n}\n","/* internal */\nexport const changeDateSeparator = (\n dateString: string,\n newDateSeparator: string,\n): string => dateString.replaceAll(/[^0-9A-Za-zА-Яа-я]/gi, newDateSeparator);\n","import type {AbstractControl} from '@angular/forms';\n\nexport function tuiIsControlEmpty({value = null}: AbstractControl): boolean {\n return value === null || value === '' || (Array.isArray(value) && !value.length);\n}\n","import type {AbstractControl} from '@angular/forms';\nimport {FormArray, FormGroup} from '@angular/forms';\nimport {tuiToInt} from '@taiga-ui/cdk/utils/math';\n\nimport {tuiIsControlEmpty} from './is-control-empty';\n\nexport function tuiCountFilledControls(control: AbstractControl): number {\n if (control instanceof FormArray) {\n return control.controls.reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n if (control instanceof FormGroup) {\n return Object.values(control.controls).reduce(\n (acc, nestedControl) => acc + tuiCountFilledControls(nestedControl),\n 0,\n );\n }\n\n return tuiToInt(!tuiIsControlEmpty(control));\n}\n","import {InjectionToken} from '@angular/core';\n\nexport function tuiCreateToken<T>(defaults?: T): InjectionToken<T> {\n return defaults === undefined\n ? new InjectionToken('')\n : tuiCreateTokenFromFactory(() => defaults);\n}\n\nexport function tuiCreateTokenFromFactory<T>(factory?: () => T): InjectionToken<T> {\n return factory ? new InjectionToken<T>('', {factory}) : new InjectionToken<T>('');\n}\n","export function tuiIsString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","import {tuiIsString} from './is-string';\n\nexport function tuiDefaultSort<T>(x: T, y: T): number {\n if (x === y) {\n return 0;\n }\n\n if (tuiIsString(x) && tuiIsString(y)) {\n return x.localeCompare(y);\n }\n\n return x > y ? 1 : -1;\n}\n","import type {InjectOptions, ProviderToken, Signal, WritableSignal} from '@angular/core';\nimport {effect, inject, isSignal, signal} from '@angular/core';\nimport {TUI_ALLOW_SIGNAL_WRITES} from '@taiga-ui/cdk/constants';\n\ntype SignalLikeTypeOf<T> = T extends Signal<infer R> ? R : T;\n\ntype SignalLike<T> = Signal<T> | T;\n\nexport function tuiDirectiveBinding<\n T,\n G extends keyof T,\n I extends SignalLike<SignalLikeTypeOf<T[G]>>,\n>(\n token: ProviderToken<T>,\n key: G,\n initial: I,\n options: InjectOptions = {self: true},\n): I extends Signal<any> ? I : WritableSignal<I> {\n const result: any = isSignal(initial) ? initial : signal(initial);\n const directive: any = inject(token, options);\n const output = directive[`${key.toString()}Change`];\n\n // TODO: Figure out why effects are executed all the time and not just when result changes (check with Angular 18)\n let previous: any;\n\n effect(() => {\n const value: any = result();\n\n if (previous === value) {\n return;\n }\n\n if (isSignal(directive[key])) {\n directive[key].set(value);\n } else {\n directive[key] = value;\n }\n\n directive.ngOnChanges?.({});\n output?.emit?.(value);\n previous = value;\n }, TUI_ALLOW_SIGNAL_WRITES);\n\n return result;\n}\n","import type {InjectOptions, ProviderToken, Signal} from '@angular/core';\nimport {inject, isSignal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport type {Observable} from 'rxjs';\n\ntype OutputKeysOf<T> = {\n [K in keyof T]: T[K] extends Observable<any> | Signal<any> ? K : never;\n}[keyof T];\n\ntype OutputTypeOf<T> =\n T extends Signal<infer R> ? R : T extends Observable<infer O> ? O : never;\n\nexport function tuiDirectiveListener<T, K extends OutputKeysOf<T>>(\n token: ProviderToken<T>,\n key: K,\n options: InjectOptions = {self: true},\n): Signal<OutputTypeOf<T[K]>> {\n const prop: any = inject(token, options)?.[key];\n\n return isSignal(prop) ? prop : toSignal<any>(prop);\n}\n","export function tuiDistanceBetweenTouches({touches}: TouchEvent): number {\n return Math.hypot(\n (touches[0]?.clientX ?? 0) - (touches[1]?.clientX ?? 0),\n (touches[0]?.clientY ?? 0) - (touches[1]?.clientY ?? 0),\n );\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nexport function tuiEaseInOutQuad(t: number): number {\n ngDevMode &&\n console.assert(\n t >= 0 && t <= 1,\n 'Input must be between 0 and 1 inclusive but received ',\n t,\n );\n\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n","/**\n * Flattens two-dimensional array and calculates resulting length\n *\n * @param array twi dimensional array\n */\nexport function tuiFlatLength(array: ReadonlyArray<readonly unknown[]>): number {\n return array.reduce((count, section) => count + section.length, 0);\n}\n","const IFRAME = 'position: fixed; visibility: hidden; pointer-events: none';\nconst BODY = 'height: fit-content; line-height: 1em;';\nconst CLASS = 'tui-font-size-watcher';\n\nexport function tuiFontSizeWatcher(\n callback: (fontSize: number) => void,\n win: Window = window,\n): () => void {\n if (win.document.querySelector(`.${CLASS}`)) {\n return () => {};\n }\n\n const iframe = win.document.createElement('iframe');\n const resize = (): void => {\n const {innerWidth, outerWidth, devicePixelRatio} = win;\n\n iframe.width = `${innerWidth === outerWidth ? innerWidth : innerWidth / devicePixelRatio}`;\n };\n\n win.document.body.append(iframe);\n win.addEventListener('resize', resize);\n\n const doc = iframe.contentWindow?.document;\n const observer = new ResizeObserver(() => callback(doc?.body.offsetHeight || 0));\n\n iframe.setAttribute('class', CLASS);\n iframe.setAttribute('style', IFRAME);\n doc?.documentElement.style.setProperty('font', '-apple-system-body');\n doc?.body.setAttribute('style', BODY);\n doc?.body.insertAdjacentText('beforeend', '.'.repeat(1000));\n observer.observe(doc?.body || iframe);\n resize();\n\n return () => {\n observer.disconnect();\n iframe.remove();\n win.removeEventListener('resize', resize);\n };\n}\n","import type {QueryList} from '@angular/core';\n\n/**\n * Extracts original array from {@link QueryList} rather than\n * creating a copy like {@link QueryList.toArray} does.\n * @param queryList\n * @returns original array from {@link QueryList}.\n */\nexport function tuiGetOriginalArrayFromQueryList<T>(\n queryList: QueryList<T>,\n): readonly T[] {\n let array: readonly T[] = [];\n\n queryList.find((_item, _index, originalArray) => {\n array = originalArray;\n\n return true;\n });\n\n return array;\n}\n","export function tuiIsFalsy(value: unknown): boolean {\n return !value;\n}\n","export function tuiIsNumber(value: unknown): value is number {\n return typeof value === 'number';\n}\n","export function tuiIsObject<T extends Record<string, any>>(\n value: unknown,\n): value is NonNullable<T> {\n return typeof value === 'object' && !!value;\n}\n","export function tuiIsPresent<T>(value?: T | null): value is T {\n return value !== null && value !== undefined;\n}\n","/**\n * @deprecated: drop in v5.0\n */\nexport function tuiIsValidUrl(url: string): boolean {\n return new RegExp(\n String.raw`^([a-zA-Z]+:\\/\\/)?` + // protocol\n String.raw`((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|localhost|` + // domain name\n String.raw`((\\d{1,3}\\.){3}\\d{1,3}))` + // OR IP (v4) address\n String.raw`(\\:\\d+)?(\\/[-a-z\\d%_.~+\\:]*)*` + // port and path\n String.raw`(\\?[)(;&a-z\\d%_.~+=-]*)?` + // query string\n String.raw`(\\#[-a-z\\d_]*)?$`, // fragment locator\n 'i',\n ).test(url);\n}\n","import type {AbstractControl} from '@angular/forms';\nimport {FormArray, FormGroup} from '@angular/forms';\n\nexport function tuiMarkControlAsTouchedAndValidate(control: AbstractControl): void {\n if (control instanceof FormArray) {\n control.controls.forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n if (control instanceof FormGroup) {\n Object.values(control.controls).forEach((nestedControl) => {\n tuiMarkControlAsTouchedAndValidate(nestedControl);\n });\n }\n\n control.markAsTouched();\n control.updateValueAndValidity();\n}\n","import type {TuiIdentityMatcher} from '@taiga-ui/cdk/types';\n\n/**\n * Checks identity for nullable elements.\n *\n * @param a element a\n * @param b element b\n * @param handler called if both elements are not null\n * @return true if either both are null or they pass identity handler\n */\nexport function tuiNullableSame<T>(\n a: T | null,\n b: T | null,\n handler: TuiIdentityMatcher<T>,\n): boolean {\n if (a === null) {\n return b === null;\n }\n\n if (b === null) {\n return false;\n }\n\n return handler(a, b);\n}\n","/**\n * Obfuscates a string by replacing certain characters with a symbol.\n *\n * @param value the input string to obfuscate\n * @param symbol the symbol for obfuscation\n * @return the obfuscated string\n *\n * The function determines which characters to obfuscate using a regular expression and the string's length:\n * - 8 or more: show first 2 and last 2 characters\n * - 4 to 7: show first and last character\n * - less than 4: obfuscate all characters\n * - obfuscates only alphanumeric characters\n */\nexport function tuiObfuscate(value: string, symbol: string): string {\n if (!value) {\n return value;\n }\n\n const match = /[\\p{L}\\p{N}]/gu;\n\n let visible = 0;\n let obfuscateIndexes: number[] = getObfuscateIndexes(value, match);\n\n if (obfuscateIndexes.length >= 8) {\n visible = 2;\n } else if (obfuscateIndexes.length >= 4) {\n visible = 1;\n }\n\n obfuscateIndexes = obfuscateIndexes.slice(visible, obfuscateIndexes.length);\n\n const lastIndex = Number(obfuscateIndexes.length) - visible;\n\n obfuscateIndexes = obfuscateIndexes.slice(0, lastIndex < 0 ? 0 : lastIndex);\n\n const result = value.split('');\n\n obfuscateIndexes.forEach((index) => {\n result[index] = symbol;\n });\n\n return result.join('');\n}\n\nfunction getObfuscateIndexes(value: string, match?: RegExp): number[] {\n if (!match) {\n return Array.from({length: value.length}).map((_, index) => index);\n }\n\n const obfuscateIndexes: number[] = [];\n let matchResult;\n let count = 0;\n\n while ((matchResult = match.exec(value)) !== null && count < value.length) {\n const start = matchResult.index;\n const end = match.lastIndex - 1;\n\n for (let i = start; i <= end; i++) {\n obfuscateIndexes.push(i);\n }\n\n count++;\n }\n\n return obfuscateIndexes;\n}\n","import type {ExistingProvider, ProviderToken} from '@angular/core';\n\nexport function tuiProvide<T>(\n provide: ProviderToken<T>,\n useExisting: ProviderToken<T>,\n): ExistingProvider;\nexport function tuiProvide<T>(\n provide: ProviderToken<T | T[]>,\n useExisting: ProviderToken<T>,\n multi: boolean,\n): ExistingProvider;\nexport function tuiProvide<T>(\n provide: ProviderToken<T>,\n useExisting: ProviderToken<T>,\n multi = false,\n): ExistingProvider {\n return {provide, useExisting, multi};\n}\n","import type {FactoryProvider, InjectionToken, ProviderToken} from '@angular/core';\nimport {inject} from '@angular/core';\n\nexport function tuiProvideOptions<T>(\n provide: InjectionToken<T>,\n options: Partial<T> | ProviderToken<Partial<T>>,\n fallback: T,\n): FactoryProvider {\n return {\n provide,\n useFactory: (): T => ({\n ...(inject(provide, {optional: true, skipSelf: true}) || fallback),\n ...(inject(options as any, {optional: true}) || options),\n }),\n };\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\nfunction decorateMethod(\n originalMethod: (...args: unknown[]) => unknown,\n): (this: object, ...args: unknown[]) => unknown {\n let previousArgs: readonly unknown[] = [];\n let originalFnWasCalledLeastAtOnce = false;\n let pureValue: unknown;\n\n return function tuiPureMethodPatched(this: object, ...args: unknown[]): unknown {\n const isPure =\n originalFnWasCalledLeastAtOnce &&\n previousArgs.length === args.length &&\n args.every((arg, index) => arg === previousArgs[index]);\n\n if (isPure) {\n return pureValue;\n }\n\n previousArgs = args;\n pureValue = originalMethod.apply(this, args);\n originalFnWasCalledLeastAtOnce = true;\n\n return pureValue;\n };\n}\n\nfunction decorateGetter(\n originalGetter: () => unknown,\n propertyKey: string | symbol,\n enumerable = true,\n): (this: object) => unknown {\n return function tuiPureGetterPatched(this: object): unknown {\n const value = originalGetter.call(this);\n\n Object.defineProperty(this, propertyKey, {enumerable, value});\n\n return value;\n };\n}\n\n/**\n * Implements lazy initialization for getter or memoization of a function call similar to pure {@link: Pipe}.\n * Replaces getter with its calculated value upon first call or keeps track of last call arguments and returned\n * value for function, skipping calculation when arguments are strictly the same.\n *\n * @throws error if used not on getter or function\n *\n * CAUTION: they must be pure.\n */\nexport function tuiPure<T>(\n target: object,\n propertyKey: string,\n {get, enumerable, value}: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T>;\n\n/**\n * Implements lazy initialization for getter or memoization of a function call similar to pure {@link: Pipe}.\n * Replaces getter with its calculated value upon first call or keeps track of last call arguments and returned\n * value for function, skipping calculation when arguments are strictly the same.\n *\n * CAUTION: they must be pure.\n */\nexport function tuiPure<A extends unknown[], R>(\n target: (...args: A) => R,\n context: ClassGetterDecoratorContext | ClassMethodDecoratorContext,\n): (...args: A) => R;\n\nexport function tuiPure(\n target: object | ((...args: unknown[]) => unknown),\n propertyKeyOrContext:\n | ClassGetterDecoratorContext\n | ClassMethodDecoratorContext\n | string,\n descriptor?: TypedPropertyDescriptor<(...args: unknown[]) => unknown>,\n): TypedPropertyDescriptor<unknown> | ((...args: unknown[]) => unknown) {\n if (typeof target === 'function') {\n const context = propertyKeyOrContext as\n | ClassGetterDecoratorContext\n | ClassMethodDecoratorContext;\n\n if (context.kind === 'getter') {\n return decorateGetter(target as () => unknown, context.name);\n }\n\n if (context.kind === 'method') {\n return decorateMethod(target as (...args: unknown[]) => unknown);\n }\n\n throw new TuiPureException();\n }\n\n const {get, enumerable, value} = descriptor!;\n const propertyKey = propertyKeyOrContext as string;\n\n if (get) {\n return {\n configurable: true,\n enumerable,\n get: decorateGetter(get, propertyKey, enumerable),\n };\n }\n\n if (typeof value !== 'function') {\n throw new TuiPureException();\n }\n\n const original = value;\n\n return {\n configurable: true,\n enumerable,\n get(): unknown {\n let previousArgs: readonly unknown[] = [];\n let originalFnWasCalledLeastAtOnce = false;\n let pureValue: unknown;\n\n const patched = (...args: unknown[]): unknown => {\n const isPure =\n originalFnWasCalledLeastAtOnce &&\n previousArgs.length === args.length &&\n args.every((arg, index) => arg === previousArgs[index]);\n\n if (isPure) {\n return pureValue;\n }\n\n previousArgs = args;\n pureValue = original.apply(this, args);\n originalFnWasCalledLeastAtOnce = true;\n\n return pureValue;\n };\n\n Object.defineProperty(this, propertyKey, {\n configurable: true,\n value: patched,\n });\n\n return patched as unknown;\n },\n };\n}\n\nexport class TuiPureException extends Error {\n constructor() {\n super(ngDevMode ? 'tuiPure can only be used with functions or getters' : '');\n }\n}\n","/// <reference types=\"@taiga-ui/tsconfig/ng-dev-mode\" />\n\n/**\n * Adds 'px' to the number and turns it into a string\n */\nexport function tuiPx(value: number): string {\n ngDevMode && console.assert(Number.isFinite(value), 'Value must be finite number');\n\n return `${value}px`;\n}\n","import type {TuiValuesOf} from '@taiga-ui/cdk/types';\n\nexport function tuiUniqBy<T extends Record<string, any>>(\n array: readonly T[],\n key: keyof T,\n): readonly T[] {\n return Array.from(\n array\n .reduce(\n (map, item) => (map.has(item[key]) ? map : map.set(item[key], item)),\n new Map<TuiValuesOf<T>, T>(),\n )\n .values(),\n );\n}\n","import type {Type} from '@angular/core';\nimport {createComponent, DestroyRef, EnvironmentInjector, inject} from '@angular/core';\n\nimport {tuiCreateTokenFromFactory} from './create-token';\n\nconst MAP = tuiCreateTokenFromFactory(() => {\n const map = new Map();\n\n inject(DestroyRef).onDestroy(() => map.forEach((component) => component.destroy()));\n\n return map;\n});\n\nexport function tuiWithStyles(component: Type<unknown>): undefined {\n const map = inject(MAP);\n const environmentInjector = inject(EnvironmentInjector);\n\n if (!map.has(component)) {\n map.set(component, createComponent(component, {environmentInjector}));\n }\n\n return undefined;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@taiga-ui/cdk",
|
3
|
-
"version": "4.
|
3
|
+
"version": "4.38.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",
|
@@ -31,18 +31,18 @@
|
|
31
31
|
"esm": "./esm2022/classes/taiga-ui-cdk-classes.mjs",
|
32
32
|
"default": "./fesm2022/taiga-ui-cdk-classes.mjs"
|
33
33
|
},
|
34
|
-
"./date-time": {
|
35
|
-
"types": "./date-time/index.d.ts",
|
36
|
-
"esm2022": "./esm2022/date-time/taiga-ui-cdk-date-time.mjs",
|
37
|
-
"esm": "./esm2022/date-time/taiga-ui-cdk-date-time.mjs",
|
38
|
-
"default": "./fesm2022/taiga-ui-cdk-date-time.mjs"
|
39
|
-
},
|
40
34
|
"./constants": {
|
41
35
|
"types": "./constants/index.d.ts",
|
42
36
|
"esm2022": "./esm2022/constants/taiga-ui-cdk-constants.mjs",
|
43
37
|
"esm": "./esm2022/constants/taiga-ui-cdk-constants.mjs",
|
44
38
|
"default": "./fesm2022/taiga-ui-cdk-constants.mjs"
|
45
39
|
},
|
40
|
+
"./date-time": {
|
41
|
+
"types": "./date-time/index.d.ts",
|
42
|
+
"esm2022": "./esm2022/date-time/taiga-ui-cdk-date-time.mjs",
|
43
|
+
"esm": "./esm2022/date-time/taiga-ui-cdk-date-time.mjs",
|
44
|
+
"default": "./fesm2022/taiga-ui-cdk-date-time.mjs"
|
45
|
+
},
|
46
46
|
"./directives": {
|
47
47
|
"types": "./directives/index.d.ts",
|
48
48
|
"esm2022": "./esm2022/directives/taiga-ui-cdk-directives.mjs",
|
@@ -277,6 +277,12 @@
|
|
277
277
|
"esm": "./esm2022/pipes/mapper/taiga-ui-cdk-pipes-mapper.mjs",
|
278
278
|
"default": "./fesm2022/taiga-ui-cdk-pipes-mapper.mjs"
|
279
279
|
},
|
280
|
+
"./pipes/obfuscate": {
|
281
|
+
"types": "./pipes/obfuscate/index.d.ts",
|
282
|
+
"esm2022": "./esm2022/pipes/obfuscate/taiga-ui-cdk-pipes-obfuscate.mjs",
|
283
|
+
"esm": "./esm2022/pipes/obfuscate/taiga-ui-cdk-pipes-obfuscate.mjs",
|
284
|
+
"default": "./fesm2022/taiga-ui-cdk-pipes-obfuscate.mjs"
|
285
|
+
},
|
280
286
|
"./pipes/repeat-times": {
|
281
287
|
"types": "./pipes/repeat-times/index.d.ts",
|
282
288
|
"esm2022": "./esm2022/pipes/repeat-times/taiga-ui-cdk-pipes-repeat-times.mjs",
|
package/pipes/index.d.ts
CHANGED
@@ -3,6 +3,7 @@ export * from '@taiga-ui/cdk/pipes/filter';
|
|
3
3
|
export * from '@taiga-ui/cdk/pipes/is-present';
|
4
4
|
export * from '@taiga-ui/cdk/pipes/keys';
|
5
5
|
export * from '@taiga-ui/cdk/pipes/mapper';
|
6
|
+
export * from '@taiga-ui/cdk/pipes/obfuscate';
|
6
7
|
export * from '@taiga-ui/cdk/pipes/repeat-times';
|
7
8
|
export * from '@taiga-ui/cdk/pipes/replace';
|
8
9
|
export * from '@taiga-ui/cdk/pipes/to-array';
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* Defines the options for obfuscation.
|
3
|
+
*/
|
4
|
+
export interface TuiObfuscateOptions {
|
5
|
+
/**
|
6
|
+
* Default function used to obfuscate a string
|
7
|
+
* if no recipe was found.
|
8
|
+
*/
|
9
|
+
readonly default: (value: string, symbol?: string) => string;
|
10
|
+
/**
|
11
|
+
* Collection of named recipes for different obfuscation scenarios.
|
12
|
+
*/
|
13
|
+
readonly recipes: Record<string, (value: string) => string>;
|
14
|
+
}
|
15
|
+
export declare const TUI_OBFUSCATE_DEFAULT_OPTIONS: TuiObfuscateOptions;
|
16
|
+
/**
|
17
|
+
* Injection token for obfuscation options.
|
18
|
+
*/
|
19
|
+
export declare const TUI_OBFUSCATE_OPTIONS: import("@angular/core").InjectionToken<TuiObfuscateOptions>, tuiObfuscateOptionsProvider: (item: Partial<TuiObfuscateOptions> | import("@angular/core").ProviderToken<Partial<TuiObfuscateOptions>>) => import("@angular/core").FactoryProvider;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import type { PipeTransform } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
export declare class TuiObfuscatePipe implements PipeTransform {
|
4
|
+
private readonly option;
|
5
|
+
/**
|
6
|
+
* Transforms the input value by obfuscating it according to the specified recipe or symbol.
|
7
|
+
*
|
8
|
+
* @param value The value to be obfuscated should be a string.
|
9
|
+
* @param recipe The name of the recipe to use for obfuscation or a single character symbol for custom obfuscation.
|
10
|
+
* @returns The obfuscated string.
|
11
|
+
* @throws Will throw an error if the specified recipe is not found.
|
12
|
+
*/
|
13
|
+
transform(value: string, recipe?: string): string;
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TuiObfuscatePipe, never>;
|
15
|
+
static ɵpipe: i0.ɵɵPipeDeclaration<TuiObfuscatePipe, "tuiObfuscate", true>;
|
16
|
+
}
|
@@ -29,6 +29,11 @@
|
|
29
29
|
"description": "Manually run migration to update Taiga to v4.x.x",
|
30
30
|
"factory": "./ng-update/v4/index#updateToV4",
|
31
31
|
"schema": "./ng-update/v4/schema.json"
|
32
|
+
},
|
33
|
+
"migrateTuiLet": {
|
34
|
+
"description": "Migrate TuiLet directive to @let control flow",
|
35
|
+
"factory": "./migrate-tui-let/index",
|
36
|
+
"schema": "./ng-add/schema.json"
|
32
37
|
}
|
33
38
|
}
|
34
39
|
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const tslib_1 = require("tslib");
|
4
|
+
const workspace_1 = require("@schematics/angular/utility/workspace");
|
5
|
+
const ng_morph_1 = require("ng-morph");
|
6
|
+
const constants_1 = require("../constants");
|
7
|
+
const get_projects_1 = require("../utils/get-projects");
|
8
|
+
const remove_module_1 = require("../utils/remove-module");
|
9
|
+
const elements_1 = require("../utils/templates/elements");
|
10
|
+
const get_component_templates_1 = require("../utils/templates/get-component-templates");
|
11
|
+
const template_resource_1 = require("../utils/templates/template-resource");
|
12
|
+
function tuiLetMigrationGenerator(options) {
|
13
|
+
return (tree) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
14
|
+
var _a;
|
15
|
+
const workspace = yield (0, workspace_1.getWorkspace)(tree);
|
16
|
+
const [project] = (0, get_projects_1.getProjects)(options, workspace);
|
17
|
+
const root = (_a = project === null || project === void 0 ? void 0 : project.root) !== null && _a !== void 0 ? _a : project === null || project === void 0 ? void 0 : project.sourceRoot;
|
18
|
+
if (root === undefined) {
|
19
|
+
!options['skip-logs'] &&
|
20
|
+
(0, ng_morph_1.errorLog)('[ERROR]: Target project not found in current workspace');
|
21
|
+
return;
|
22
|
+
}
|
23
|
+
const prj = (0, ng_morph_1.createProject)(tree, root, constants_1.ALL_FILES);
|
24
|
+
const fileSystem = prj.getFileSystem().fs;
|
25
|
+
(0, ng_morph_1.setActiveProject)(prj);
|
26
|
+
(0, remove_module_1.removeModule)('TuiLet', '@taiga-ui/cdk');
|
27
|
+
const resources = (0, get_component_templates_1.getComponentTemplates)(constants_1.ALL_FILES);
|
28
|
+
for (const resource of resources) {
|
29
|
+
const path = fileSystem.resolve((0, template_resource_1.getPathFromTemplateResource)(resource));
|
30
|
+
const recorder = fileSystem.edit(path);
|
31
|
+
const template = (0, template_resource_1.getTemplateFromTemplateResource)(resource, fileSystem);
|
32
|
+
const templateOffset = (0, template_resource_1.getTemplateOffset)(resource);
|
33
|
+
const attributeName = '*tuiLet';
|
34
|
+
const elements = (0, elements_1.findElementsWithAttribute)(template, attributeName);
|
35
|
+
for (const { sourceCodeLocation, attrs, tagName, childNodes } of elements) {
|
36
|
+
const { name, value } = attrs.find((attr) => attr.name === attributeName.toLowerCase());
|
37
|
+
const indent = sourceCodeLocation.startOffset -
|
38
|
+
(template.lastIndexOf('\n', sourceCodeLocation.startOffset) + 1);
|
39
|
+
const indentStr = ' '.repeat(indent);
|
40
|
+
const [expr, key] = value.split(' as ').map((c) => c.trim());
|
41
|
+
if (new RegExp(`@let\\s+${key}\\s+=`).test(template)) {
|
42
|
+
!options['skip-logs'] &&
|
43
|
+
(0, ng_morph_1.errorLog)(`The @let with key ${key} is already defined`);
|
44
|
+
continue;
|
45
|
+
}
|
46
|
+
recorder.insertLeft(templateOffset + sourceCodeLocation.startOffset, `@let ${key} = ${expr};\n${indentStr}`);
|
47
|
+
if (tagName === 'ng-container' && attrs.length === 1) {
|
48
|
+
if (childNodes.length) {
|
49
|
+
const firstNode = childNodes.at(0);
|
50
|
+
const lastNode = childNodes.at(0);
|
51
|
+
recorder.remove(templateOffset + sourceCodeLocation.startOffset, firstNode.sourceCodeLocation.startOffset -
|
52
|
+
sourceCodeLocation.startOffset);
|
53
|
+
recorder.remove(templateOffset + lastNode.sourceCodeLocation.endOffset, sourceCodeLocation.endOffset -
|
54
|
+
lastNode.sourceCodeLocation.endOffset);
|
55
|
+
}
|
56
|
+
else {
|
57
|
+
recorder.remove(templateOffset + sourceCodeLocation.startOffset, sourceCodeLocation.endOffset -
|
58
|
+
sourceCodeLocation.startOffset);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
else {
|
62
|
+
const { startOffset, endOffset } = sourceCodeLocation.attrs[name];
|
63
|
+
recorder.remove(templateOffset + startOffset - 1, endOffset - startOffset + 1);
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
fileSystem.commitEdits();
|
68
|
+
(0, ng_morph_1.saveActiveProject)();
|
69
|
+
});
|
70
|
+
}
|
71
|
+
exports.default = tuiLetMigrationGenerator;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
const tslib_1 = require("tslib");
|
4
|
-
tslib_1.__exportStar(require("
|
4
|
+
tslib_1.__exportStar(require("../../utils/remove-module"), exports);
|
5
5
|
tslib_1.__exportStar(require("./rename-types"), exports);
|
6
6
|
tslib_1.__exportStar(require("./replace-deep-import"), exports);
|
7
7
|
tslib_1.__exportStar(require("./replace-enums"), exports);
|
@@ -4,8 +4,8 @@ exports.migrateAddonDoc = void 0;
|
|
4
4
|
const schematics_1 = require("@angular-devkit/schematics");
|
5
5
|
const ng_morph_1 = require("ng-morph");
|
6
6
|
const file_globs_1 = require("../../../constants/file-globs");
|
7
|
+
const remove_module_1 = require("../../../utils/remove-module");
|
7
8
|
const steps_1 = require("../../steps");
|
8
|
-
const remove_module_1 = require("../../steps/remove-module");
|
9
9
|
const get_file_system_1 = require("../../utils/get-file-system");
|
10
10
|
const replace_symbols_1 = require("./replace-symbols");
|
11
11
|
function migrateAddonDoc(options) {
|
@@ -94,5 +94,5 @@ export declare const DEPRECATED_NUMERIC_VARS: {
|
|
94
94
|
'--tui-chart-': string;
|
95
95
|
'--tui-support-': string;
|
96
96
|
};
|
97
|
-
export declare const NIGHT_VAR_COMMENT = "TODO: night variables have been removed. Use tuiTheme=\"dark\" on an element to switch colors to dark theme";
|
97
|
+
export declare const NIGHT_VAR_COMMENT = "TODO: (Taiga UI migration) night variables have been removed. Use tuiTheme=\"dark\" on an element to switch colors to dark theme";
|
98
98
|
export declare const DEPRECATE_VARS_WITH_COMMENT: string[];
|
@@ -98,7 +98,7 @@ exports.DEPRECATED_NUMERIC_VARS = {
|
|
98
98
|
'--tui-chart-': '--tui-chart-categorical-0',
|
99
99
|
'--tui-support-': '--tui-chart-categorical-',
|
100
100
|
};
|
101
|
-
exports.NIGHT_VAR_COMMENT = 'TODO: night variables have been removed. Use tuiTheme="dark" on an element to switch colors to dark theme';
|
101
|
+
exports.NIGHT_VAR_COMMENT = 'TODO: (Taiga UI migration) night variables have been removed. Use tuiTheme="dark" on an element to switch colors to dark theme';
|
102
102
|
exports.DEPRECATE_VARS_WITH_COMMENT = [
|
103
103
|
'--tui-clear-inverse',
|
104
104
|
'--tui-clear-inverse-hover',
|
@@ -74,5 +74,5 @@ function migrateBadgeValue({ valueAttr, sourceCodeLocation, recorder, templateOf
|
|
74
74
|
}
|
75
75
|
function addTodo(recorder, sourceCodeLocation, templateOffset) {
|
76
76
|
var _a, _b;
|
77
|
-
recorder.insertRight(templateOffset + ((_b = (_a = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _a === void 0 ? void 0 : _a.startOffset) !== null && _b !== void 0 ? _b : 0), '<!-- Taiga migration
|
77
|
+
recorder.insertRight(templateOffset + ((_b = (_a = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _a === void 0 ? void 0 : _a.startOffset) !== null && _b !== void 0 ? _b : 0), '<!-- TODO: (Taiga UI migration) use "<tui-icon>" with "tuiBadge" directive for icon-only badges instead -->\n');
|
78
78
|
}
|
@@ -106,7 +106,7 @@ function migrateContent({ attr, colorAttr, sourceCodeLocation, recorder, templat
|
|
106
106
|
></tui-icon>\n`);
|
107
107
|
}
|
108
108
|
else if (Number.isNaN(Number(value))) {
|
109
|
-
recorder.insertRight(templateOffset + ((_d = (_c = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _c === void 0 ? void 0 : _c.startOffset) !== null && _d !== void 0 ? _d : 0), '<!-- Taiga migration
|
109
|
+
recorder.insertRight(templateOffset + ((_d = (_c = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _c === void 0 ? void 0 : _c.startOffset) !== null && _d !== void 0 ? _d : 0), '<!-- TODO: (Taiga UI migration) contentTop and contentBottom inputs has been removed. Use ng-content, see taiga-ui.dev/components/badged-content -->\n');
|
110
110
|
}
|
111
111
|
else {
|
112
112
|
recorder.insertRight(insertTo + templateOffset, `<tui-badge-notification
|
@@ -37,5 +37,5 @@ function migrateButtonAppearance({ resource, recorder, fileSystem, }) {
|
|
37
37
|
}
|
38
38
|
exports.migrateButtonAppearance = migrateButtonAppearance;
|
39
39
|
function addTodo(recorder, templateOffset) {
|
40
|
-
recorder.insertRight(templateOffset, '<!-- Taiga migration
|
40
|
+
recorder.insertRight(templateOffset, '<!-- TODO: (Taiga UI migration) tuiButton "whiteblock-active" appearance is no longer available. Use \'appearance="outline-grayscale" tuiAppearanceMode="checked"\' -->\n');
|
41
41
|
}
|
@@ -25,7 +25,7 @@ function migrateExpandable({ resource, recorder, fileSystem, }) {
|
|
25
25
|
recorder.insertRight(selfClosing ? insertOffset - 1 : insertOffset, rowsAttr ? '' : '[rows]="1"');
|
26
26
|
}
|
27
27
|
if (expandableValue !== 'false' && expandableValue !== 'true') {
|
28
|
-
recorder.insertRight(templateOffset + ((_k = (_j = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _j === void 0 ? void 0 : _j.startOffset) !== null && _k !== void 0 ? _k : 0), '<!-- Taiga migration
|
28
|
+
recorder.insertRight(templateOffset + ((_k = (_j = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _j === void 0 ? void 0 : _j.startOffset) !== null && _k !== void 0 ? _k : 0), '<!-- TODO: (Taiga UI migration) "expandable" property has been removed. Use "rows" property instead -->\n');
|
29
29
|
}
|
30
30
|
recorder.remove(templateOffset + expandableStart, expandableEnd - expandableStart);
|
31
31
|
});
|
@@ -27,5 +27,5 @@ function migrateOverscroll({ resource, recorder, fileSystem, }) {
|
|
27
27
|
exports.migrateOverscroll = migrateOverscroll;
|
28
28
|
function addTodo(recorder, sourceCodeLocation, templateOffset) {
|
29
29
|
var _a, _b;
|
30
|
-
recorder.insertRight(templateOffset + ((_b = (_a = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _a === void 0 ? void 0 : _a.startOffset) !== null && _b !== void 0 ? _b : 0), '<!-- Taiga migration
|
30
|
+
recorder.insertRight(templateOffset + ((_b = (_a = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.startTag) === null || _a === void 0 ? void 0 : _a.startOffset) !== null && _b !== void 0 ? _b : 0), '<!-- TODO: (Taiga UI migration) use "overscroll-behavior" ccs property instead of "tuiOverscroll" directive -->\n');
|
31
31
|
}
|
@@ -2,13 +2,13 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.createAngularJson = void 0;
|
4
4
|
const ng_morph_1 = require("ng-morph");
|
5
|
-
function createAngularJson({ stylesExist
|
5
|
+
function createAngularJson({ stylesExist = false, root = '', } = {}) {
|
6
6
|
(0, ng_morph_1.createSourceFile)('angular.json', `
|
7
7
|
{
|
8
8
|
"version": 1,
|
9
9
|
"projects": {
|
10
10
|
"demo": {
|
11
|
-
"root": "",
|
11
|
+
"root": "${root}",
|
12
12
|
"architect": {
|
13
13
|
"build": {
|
14
14
|
"options": {
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import type { workspaces } from '@angular-devkit/core';
|
2
2
|
import type { TuiSchema } from '../ng-add/schema';
|
3
|
-
export declare function getProjects(options: TuiSchema, workspace: workspaces.WorkspaceDefinition): workspaces.ProjectDefinition[];
|
3
|
+
export declare function getProjects(options: Pick<TuiSchema, 'project'>, workspace: workspaces.WorkspaceDefinition): workspaces.ProjectDefinition[];
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import type { TuiSchema } from '
|
2
|
-
import type { RemovedModule } from '../interfaces/removed-module';
|
1
|
+
import type { TuiSchema } from '../ng-add/schema';
|
2
|
+
import type { RemovedModule } from '../ng-update/interfaces/removed-module';
|
3
3
|
export declare function removeModules(options: TuiSchema, modules: readonly RemovedModule[]): void;
|
4
4
|
export declare function removeModule(name: string, moduleSpecifier: string): void;
|
@@ -2,8 +2,8 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.removeModule = exports.removeModules = void 0;
|
4
4
|
const ng_morph_1 = require("ng-morph");
|
5
|
-
const get_named_import_references_1 = require("
|
6
|
-
const import_manipulations_1 = require("
|
5
|
+
const get_named_import_references_1 = require("./get-named-import-references");
|
6
|
+
const import_manipulations_1 = require("./import-manipulations");
|
7
7
|
function removeModules(options, modules) {
|
8
8
|
!options['skip-logs'] &&
|
9
9
|
(0, ng_morph_1.infoLog)(`${ng_morph_1.SMALL_TAB_SYMBOL}${ng_morph_1.REPLACE_SYMBOL} removing modules...`);
|
@@ -21,6 +21,7 @@ export * from './is-string';
|
|
21
21
|
export * from './is-valid-url';
|
22
22
|
export * from './mark-control-as-touched-and-validate';
|
23
23
|
export * from './nullable-same';
|
24
|
+
export * from './obfuscate';
|
24
25
|
export * from './provide';
|
25
26
|
export * from './provide-options';
|
26
27
|
export * from './pure';
|
@@ -0,0 +1,14 @@
|
|
1
|
+
/**
|
2
|
+
* Obfuscates a string by replacing certain characters with a symbol.
|
3
|
+
*
|
4
|
+
* @param value the input string to obfuscate
|
5
|
+
* @param symbol the symbol for obfuscation
|
6
|
+
* @return the obfuscated string
|
7
|
+
*
|
8
|
+
* The function determines which characters to obfuscate using a regular expression and the string's length:
|
9
|
+
* - 8 or more: show first 2 and last 2 characters
|
10
|
+
* - 4 to 7: show first and last character
|
11
|
+
* - less than 4: obfuscate all characters
|
12
|
+
* - obfuscates only alphanumeric characters
|
13
|
+
*/
|
14
|
+
export declare function tuiObfuscate(value: string, symbol: string): string;
|