@clr/angular 18.0.0-beta.3 → 18.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/fesm2022/clr-angular-data-datagrid.mjs +8 -2
  2. package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -1
  3. package/fesm2022/clr-angular-forms-combobox.mjs +332 -39
  4. package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -1
  5. package/fesm2022/clr-angular-layout-nav.mjs +27 -25
  6. package/fesm2022/clr-angular-layout-nav.mjs.map +1 -1
  7. package/fesm2022/clr-angular-modal.mjs +2 -3
  8. package/fesm2022/clr-angular-modal.mjs.map +1 -1
  9. package/fesm2022/clr-angular-utils.mjs +5 -0
  10. package/fesm2022/clr-angular-utils.mjs.map +1 -1
  11. package/fesm2022/clr-angular-wizard.mjs +427 -224
  12. package/fesm2022/clr-angular-wizard.mjs.map +1 -1
  13. package/package.json +7 -2
  14. package/schematics/collection.json +10 -0
  15. package/schematics/ng-update/index.d.ts +2 -0
  16. package/schematics/ng-update/index.js +66 -0
  17. package/schematics/ng-update/index.js.map +1 -0
  18. package/schematics/ng-update/migrations/css-migration.d.ts +5 -0
  19. package/schematics/ng-update/migrations/css-migration.js +167 -0
  20. package/schematics/ng-update/migrations/css-migration.js.map +1 -0
  21. package/schematics/ng-update/migrations/import-migration.d.ts +4 -0
  22. package/schematics/ng-update/migrations/import-migration.js +136 -0
  23. package/schematics/ng-update/migrations/import-migration.js.map +1 -0
  24. package/schematics/ng-update/migrations/template-migration.d.ts +5 -0
  25. package/schematics/ng-update/migrations/template-migration.js +175 -0
  26. package/schematics/ng-update/migrations/template-migration.js.map +1 -0
  27. package/schematics/ng-update/replacements/css-replacements.d.ts +17 -0
  28. package/schematics/ng-update/replacements/css-replacements.js +74 -0
  29. package/schematics/ng-update/replacements/css-replacements.js.map +1 -0
  30. package/schematics/ng-update/replacements/import-replacements.d.ts +13 -0
  31. package/schematics/ng-update/replacements/import-replacements.js +101 -0
  32. package/schematics/ng-update/replacements/import-replacements.js.map +1 -0
  33. package/schematics/ng-update/replacements/symbol-replacements.d.ts +12 -0
  34. package/schematics/ng-update/replacements/symbol-replacements.js +68 -0
  35. package/schematics/ng-update/replacements/symbol-replacements.js.map +1 -0
  36. package/schematics/ng-update/replacements/template-replacements.d.ts +14 -0
  37. package/schematics/ng-update/replacements/template-replacements.js +53 -0
  38. package/schematics/ng-update/replacements/template-replacements.js.map +1 -0
  39. package/schematics/ng-update/utils/file-visitor.d.ts +8 -0
  40. package/schematics/ng-update/utils/file-visitor.js +44 -0
  41. package/schematics/ng-update/utils/file-visitor.js.map +1 -0
  42. package/schematics/vitest.config.d.ts +2 -0
  43. package/schematics/vitest.config.js +17 -0
  44. package/schematics/vitest.config.js.map +1 -0
  45. package/types/clr-angular-forms-combobox.d.ts +55 -9
  46. package/types/clr-angular-layout-nav.d.ts +6 -2
  47. package/types/clr-angular-utils.d.ts +5 -0
  48. package/types/clr-angular-wizard.d.ts +89 -35
package/package.json CHANGED
@@ -17,11 +17,15 @@
17
17
  "bugs": {
18
18
  "url": "https://github.com/vmware-clarity/ng-clarity/issues"
19
19
  },
20
+ "schematics": "./schematics/collection.json",
21
+ "ng-update": {
22
+ "migrations": "./schematics/collection.json"
23
+ },
20
24
  "peerDependencies": {
21
25
  "@angular/cdk": "^21",
22
26
  "@angular/common": "^21",
23
27
  "@angular/core": "^21",
24
- "@clr/ui": "18.0.0-beta.3"
28
+ "@clr/ui": "18.0.0-beta.4"
25
29
  },
26
30
  "module": "fesm2022/clr-angular.mjs",
27
31
  "typings": "types/clr-angular.d.ts",
@@ -223,8 +227,9 @@
223
227
  }
224
228
  },
225
229
  "sideEffects": false,
230
+ "type": "module",
226
231
  "dependencies": {
227
232
  "tslib": "^2.3.0"
228
233
  },
229
- "version": "18.0.0-beta.3"
234
+ "version": "18.0.0-beta.4"
230
235
  }
@@ -0,0 +1,10 @@
1
+ {
2
+ "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json",
3
+ "schematics": {
4
+ "ng-update": {
5
+ "version": "18.0.0",
6
+ "description": "Migrates @clr/angular from v17 to v18",
7
+ "factory": "./ng-update/index#migrate"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,2 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ export declare function migrate(): Rule;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
4
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
5
+ * This software is released under MIT license.
6
+ * The full license information can be found in LICENSE in the root directory of this project.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.migrate = migrate;
10
+ const schematics_1 = require("@angular-devkit/schematics");
11
+ const css_migration_1 = require("./migrations/css-migration");
12
+ const import_migration_1 = require("./migrations/import-migration");
13
+ const template_migration_1 = require("./migrations/template-migration");
14
+ const file_visitor_1 = require("./utils/file-visitor");
15
+ /**
16
+ * All candidate strings that may appear in .ts source files.
17
+ * Used as a fast-path pre-check to skip files that need no migration.
18
+ */
19
+ const TS_CANDIDATES = [
20
+ ...import_migration_1.IMPORT_MIGRATION_CANDIDATES,
21
+ ...template_migration_1.TEMPLATE_MIGRATION_INLINE_CANDIDATES,
22
+ ...css_migration_1.CSS_MIGRATION_INLINE_CANDIDATES,
23
+ ];
24
+ /**
25
+ * Single-pass migration for TypeScript source files.
26
+ *
27
+ * Reads each .ts file exactly once, applies import, inline-template, and
28
+ * inline-style transforms in sequence, then writes it if changed.
29
+ * This is more efficient than visiting .ts files separately in each migration
30
+ * because each file is read and written at most once.
31
+ */
32
+ function migrateTypeScriptFiles() {
33
+ return (tree, context) => {
34
+ context.logger.info(' Migrating TypeScript files (imports, inline templates, inline styles)...');
35
+ let fileCount = 0;
36
+ (0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
37
+ const content = tree.read(filePath);
38
+ if (!content) {
39
+ return;
40
+ }
41
+ const original = content.toString('utf-8');
42
+ // Fast-path: skip entirely if no candidate string is present anywhere.
43
+ if (!TS_CANDIDATES.some(c => original.includes(c))) {
44
+ return;
45
+ }
46
+ let text = original;
47
+ text = (0, import_migration_1.transformImports)(text);
48
+ text = (0, template_migration_1.transformInlineTemplates)(text);
49
+ text = (0, css_migration_1.transformInlineStyles)(text);
50
+ if (text !== original) {
51
+ tree.overwrite(filePath, text);
52
+ fileCount++;
53
+ }
54
+ });
55
+ context.logger.info(` Updated ${fileCount} TypeScript file(s).`);
56
+ };
57
+ }
58
+ function migrate() {
59
+ return (tree, context) => {
60
+ context.logger.info('');
61
+ context.logger.info('Running @clr/angular v18 migration schematics...');
62
+ context.logger.info('');
63
+ return (0, schematics_1.chain)([migrateTypeScriptFiles(), (0, template_migration_1.migrateTemplates)(), (0, css_migration_1.migrateCssProperties)()])(tree, context);
64
+ };
65
+ }
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../projects/angular/schematics/ng-update/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqEH,0BAQC;AA3ED,2DAAiF;AAEjF,8DAIoC;AACpC,oEAA8F;AAC9F,wEAIyC;AACzC,uDAAkD;AAElD;;;GAGG;AACH,MAAM,aAAa,GAAsB;IACvC,GAAG,8CAA2B;IAC9B,GAAG,yDAAoC;IACvC,GAAG,+CAA+B;CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,sBAAsB;IAC7B,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAElG,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAA,yBAAU,EAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE3C,uEAAuE;YACvE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,IAAI,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAI,GAAG,IAAA,mCAAgB,EAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,CAAC;YACtC,IAAI,GAAG,IAAA,qCAAqB,EAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC/B,SAAS,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,SAAS,sBAAsB,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,OAAO;IACrB,OAAO,CAAC,IAAU,EAAE,OAAyB,EAAE,EAAE;QAC/C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACxE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAExB,OAAO,IAAA,kBAAK,EAAC,CAAC,sBAAsB,EAAE,EAAE,IAAA,qCAAgB,GAAE,EAAE,IAAA,oCAAoB,GAAE,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtG,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ export declare const CSS_MIGRATION_CANDIDATES: readonly string[];
3
+ export declare const CSS_MIGRATION_INLINE_CANDIDATES: readonly string[];
4
+ export declare function transformInlineStyles(text: string): string;
5
+ export declare function migrateCssProperties(): Rule;
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
4
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
5
+ * This software is released under MIT license.
6
+ * The full license information can be found in LICENSE in the root directory of this project.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CSS_MIGRATION_INLINE_CANDIDATES = exports.CSS_MIGRATION_CANDIDATES = void 0;
10
+ exports.transformInlineStyles = transformInlineStyles;
11
+ exports.migrateCssProperties = migrateCssProperties;
12
+ const css_replacements_1 = require("../replacements/css-replacements");
13
+ const file_visitor_1 = require("../utils/file-visitor");
14
+ // ---------------------------------------------------------------------------
15
+ // Pre-compiled regex arrays — built once at module load, not per-file
16
+ // ---------------------------------------------------------------------------
17
+ const COMPILED_PROPERTY_RENAME_REGEXES = css_replacements_1.CSS_PROPERTY_REPLACEMENTS.filter(r => r.new).map(r => ({
18
+ old: r.old,
19
+ new: r.new,
20
+ regex: new RegExp(escapeRegExp(r.old), 'g'),
21
+ }));
22
+ const COMPILED_PROPERTY_REMOVE_REGEXES = css_replacements_1.CSS_PROPERTY_REPLACEMENTS.filter(r => !r.new).map(r => ({
23
+ old: r.old,
24
+ regex: new RegExp(`(\\s*)(${escapeRegExp(r.old)}\\s*:[^;]*;)`, 'g'),
25
+ }));
26
+ const COMPILED_SELECTOR_REGEXES = css_replacements_1.CSS_SELECTOR_REPLACEMENTS.map(r => ({
27
+ old: r.old,
28
+ new: r.new,
29
+ regex: new RegExp(`\\b${escapeRegExp(r.old)}\\b`, 'g'),
30
+ }));
31
+ const COMPILED_ATTRIBUTE_REGEXES = css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => ({
32
+ old: r.old,
33
+ new: r.new,
34
+ regex: new RegExp(escapeRegExp(r.old), 'g'),
35
+ }));
36
+ const COMPILED_MIXIN_REGEXES = css_replacements_1.REMOVED_SCSS_MIXINS.map(name => ({
37
+ name,
38
+ regex: new RegExp(`@include\\s+${escapeRegExp(name)}\\s*\\([^)]*\\)\\s*;`, 'g'),
39
+ }));
40
+ // ---------------------------------------------------------------------------
41
+ // Fast-path candidate strings
42
+ // ---------------------------------------------------------------------------
43
+ exports.CSS_MIGRATION_CANDIDATES = [
44
+ ...css_replacements_1.CSS_PROPERTY_REPLACEMENTS.map(r => r.old),
45
+ ...css_replacements_1.CSS_SELECTOR_REPLACEMENTS.map(r => r.old),
46
+ ...css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => r.old),
47
+ ...css_replacements_1.REMOVED_SCSS_MIXINS,
48
+ ];
49
+ exports.CSS_MIGRATION_INLINE_CANDIDATES = exports.CSS_MIGRATION_CANDIDATES;
50
+ // ---------------------------------------------------------------------------
51
+ // Public pure transforms — used by the unified .ts pass in index.ts
52
+ // ---------------------------------------------------------------------------
53
+ function transformInlineStyles(text) {
54
+ const stylesRegex = /styles\s*:\s*\[([^\]]*)\]/g;
55
+ return text.replace(stylesRegex, (match, stylesContent) => {
56
+ if (!exports.CSS_MIGRATION_INLINE_CANDIDATES.some(c => stylesContent.includes(c))) {
57
+ return match;
58
+ }
59
+ const updated = applyStyleTransforms(stylesContent, null);
60
+ return updated !== stylesContent ? match.replace(stylesContent, updated) : match;
61
+ });
62
+ }
63
+ // ---------------------------------------------------------------------------
64
+ // Schematic Rule — visits style files and .ts inline styles
65
+ // ---------------------------------------------------------------------------
66
+ function migrateCssProperties() {
67
+ return (tree, context) => {
68
+ context.logger.info(' Migrating CSS custom properties and selectors...');
69
+ let styleFileCount = 0;
70
+ let tsFileCount = 0;
71
+ (0, file_visitor_1.visitFiles)(tree, '**/*.{css,scss,sass,less}', filePath => {
72
+ const content = tree.read(filePath);
73
+ if (!content) {
74
+ return;
75
+ }
76
+ const original = content.toString('utf-8');
77
+ if (!exports.CSS_MIGRATION_CANDIDATES.some(c => original.includes(c))) {
78
+ return;
79
+ }
80
+ const updated = applyStyleTransforms(original, filePath);
81
+ if (updated !== original) {
82
+ tree.overwrite(filePath, updated);
83
+ styleFileCount++;
84
+ }
85
+ });
86
+ (0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
87
+ const content = tree.read(filePath);
88
+ if (!content) {
89
+ return;
90
+ }
91
+ const original = content.toString('utf-8');
92
+ if (!exports.CSS_MIGRATION_INLINE_CANDIDATES.some(c => original.includes(c))) {
93
+ return;
94
+ }
95
+ const updated = transformInlineStyles(original);
96
+ if (updated !== original) {
97
+ tree.overwrite(filePath, updated);
98
+ tsFileCount++;
99
+ }
100
+ });
101
+ context.logger.info(` Updated ${styleFileCount} style file(s) and ${tsFileCount} inline style(s).`);
102
+ };
103
+ }
104
+ // ---------------------------------------------------------------------------
105
+ // Private helpers
106
+ // ---------------------------------------------------------------------------
107
+ function applyStyleTransforms(text, filePath) {
108
+ text = replaceCssProperties(text);
109
+ text = replaceCssSelectors(text);
110
+ text = replaceCssAttributes(text);
111
+ const isScssSass = filePath === null || filePath.endsWith('.scss') || filePath.endsWith('.sass');
112
+ if (isScssSass) {
113
+ text = replaceScssMixins(text);
114
+ }
115
+ return text;
116
+ }
117
+ function replaceCssProperties(text) {
118
+ for (const r of COMPILED_PROPERTY_RENAME_REGEXES) {
119
+ if (!text.includes(r.old)) {
120
+ continue;
121
+ }
122
+ r.regex.lastIndex = 0;
123
+ text = text.replace(r.regex, r.new);
124
+ }
125
+ for (const r of COMPILED_PROPERTY_REMOVE_REGEXES) {
126
+ if (!text.includes(r.old)) {
127
+ continue;
128
+ }
129
+ r.regex.lastIndex = 0;
130
+ text = text.replace(r.regex, `$1/* TODO(v18 migration): '${r.old}' has been removed. */ /* $2 */`);
131
+ }
132
+ return text;
133
+ }
134
+ function replaceCssSelectors(text) {
135
+ for (const r of COMPILED_SELECTOR_REGEXES) {
136
+ if (!text.includes(r.old)) {
137
+ continue;
138
+ }
139
+ r.regex.lastIndex = 0;
140
+ text = text.replace(r.regex, r.new);
141
+ }
142
+ return text;
143
+ }
144
+ function replaceCssAttributes(text) {
145
+ for (const r of COMPILED_ATTRIBUTE_REGEXES) {
146
+ if (!text.includes(r.old)) {
147
+ continue;
148
+ }
149
+ r.regex.lastIndex = 0;
150
+ text = text.replace(r.regex, r.new);
151
+ }
152
+ return text;
153
+ }
154
+ function replaceScssMixins(text) {
155
+ for (const r of COMPILED_MIXIN_REGEXES) {
156
+ if (!text.includes(r.name)) {
157
+ continue;
158
+ }
159
+ r.regex.lastIndex = 0;
160
+ text = text.replace(r.regex, `/* TODO(v18 migration): '@include ${r.name}(...)' has been removed. */`);
161
+ }
162
+ return text;
163
+ }
164
+ function escapeRegExp(str) {
165
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
166
+ }
167
+ //# sourceMappingURL=css-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/css-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ export declare const IMPORT_MIGRATION_CANDIDATES: readonly string[];
3
+ export declare function transformImports(text: string): string;
4
+ export declare function migrateImports(): Rule;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
4
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
5
+ * This software is released under MIT license.
6
+ * The full license information can be found in LICENSE in the root directory of this project.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.IMPORT_MIGRATION_CANDIDATES = void 0;
10
+ exports.transformImports = transformImports;
11
+ exports.migrateImports = migrateImports;
12
+ const import_replacements_1 = require("../replacements/import-replacements");
13
+ const symbol_replacements_1 = require("../replacements/symbol-replacements");
14
+ const file_visitor_1 = require("../utils/file-visitor");
15
+ // ---------------------------------------------------------------------------
16
+ // Pre-compiled regex arrays — built once at module load, not per-file
17
+ // ---------------------------------------------------------------------------
18
+ // Sort import replacements by path length descending so more-specific paths
19
+ // (e.g. '@clr/angular/src/accordion/stepper') match before shorter prefixes.
20
+ const SORTED_IMPORT_REPLACEMENTS = [...import_replacements_1.IMPORT_REPLACEMENTS].sort((a, b) => b.oldModule.length - a.oldModule.length);
21
+ const COMPILED_IMPORT_REPLACEMENTS = SORTED_IMPORT_REPLACEMENTS.map(r => ({
22
+ ...r,
23
+ regex: r.oldSymbol === '*'
24
+ ? new RegExp(`(from\\s+['"])${escapeRegExp(r.oldModule)}(?=[/'"])`, 'g')
25
+ : new RegExp(`(import\\s*\\{[^}]*\\b)${escapeRegExp(r.oldSymbol)}(\\b[^}]*\\}\\s*from\\s*['"])${escapeRegExp(r.oldModule)}(['"])`, 'g'),
26
+ }));
27
+ // Only symbols with a non-empty new name are renamed here; removed symbols handled separately.
28
+ const COMPILED_SYMBOL_REPLACEMENTS = symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new).map(r => ({
29
+ ...r,
30
+ // Ç (U+00C7) is not an ASCII word character so \b doesn't delimit it.
31
+ // Use lookahead/lookbehind to avoid partial matches.
32
+ regex: r.old.startsWith('Ç')
33
+ ? new RegExp(`(?<![A-Za-z0-9_$Ç])${escapeRegExp(r.old)}(?![A-Za-z0-9_$])`, 'g')
34
+ : new RegExp(`\\b${escapeRegExp(r.old)}\\b`, 'g'),
35
+ }));
36
+ const REMOVED_SYMBOLS = symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new === '').map(r => r.old);
37
+ const REMOVED_SYMBOL_SOLE_IMPORT_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`^\\s*import\\s*\\{\\s*${escapeRegExp(sym)}\\s*\\}\\s*from\\s*['"][^'"]+['"]\\s*;?\\s*$`, 'gm'));
38
+ const REMOVED_SYMBOL_LEADING_COMMA_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`\\b${escapeRegExp(sym)}\\b\\s*,\\s*`, 'g'));
39
+ const REMOVED_SYMBOL_TRAILING_COMMA_REGEXES = REMOVED_SYMBOLS.map(sym => new RegExp(`\\s*,\\s*${escapeRegExp(sym)}\\b`, 'g'));
40
+ const REMOVED_SYMBOL_USAGE_REGEXES = REMOVED_SYMBOLS.map(sym => ({
41
+ sym,
42
+ test: new RegExp(`\\b${escapeRegExp(sym)}\\b`),
43
+ replace: new RegExp(`\\b${escapeRegExp(sym)}\\b`, 'g'),
44
+ }));
45
+ // ---------------------------------------------------------------------------
46
+ // Fast-path candidate strings — if none present, skip the file entirely
47
+ // ---------------------------------------------------------------------------
48
+ exports.IMPORT_MIGRATION_CANDIDATES = [
49
+ ...import_replacements_1.IMPORT_REPLACEMENTS.map(r => r.oldModule),
50
+ ...symbol_replacements_1.SYMBOL_REPLACEMENTS.filter(r => r.new).map(r => r.old),
51
+ ...REMOVED_SYMBOLS,
52
+ ];
53
+ // ---------------------------------------------------------------------------
54
+ // Public pure transform — used by the unified .ts pass in index.ts
55
+ // ---------------------------------------------------------------------------
56
+ function transformImports(text) {
57
+ if (!exports.IMPORT_MIGRATION_CANDIDATES.some(c => text.includes(c))) {
58
+ return text;
59
+ }
60
+ text = replaceImportPaths(text);
61
+ text = replaceSymbols(text);
62
+ text = removeDeletedImports(text);
63
+ return text;
64
+ }
65
+ // ---------------------------------------------------------------------------
66
+ // Schematic Rule — kept for backwards compatibility; unified pass in index.ts
67
+ // is preferred for performance.
68
+ // ---------------------------------------------------------------------------
69
+ function migrateImports() {
70
+ return (tree, context) => {
71
+ context.logger.info(' Migrating TypeScript imports and symbols...');
72
+ let fileCount = 0;
73
+ (0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
74
+ const content = tree.read(filePath);
75
+ if (!content) {
76
+ return;
77
+ }
78
+ const original = content.toString('utf-8');
79
+ const updated = transformImports(original);
80
+ if (updated !== original) {
81
+ tree.overwrite(filePath, updated);
82
+ fileCount++;
83
+ }
84
+ });
85
+ context.logger.info(` Updated ${fileCount} TypeScript file(s).`);
86
+ };
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // Private helpers
90
+ // ---------------------------------------------------------------------------
91
+ function replaceImportPaths(text) {
92
+ for (const r of COMPILED_IMPORT_REPLACEMENTS) {
93
+ if (!text.includes(r.oldModule)) {
94
+ continue;
95
+ }
96
+ r.regex.lastIndex = 0;
97
+ if (r.oldSymbol === '*') {
98
+ text = text.replace(r.regex, `$1${r.newModule}`);
99
+ }
100
+ else {
101
+ text = text.replace(r.regex, `$1${r.newSymbol}$2${r.newModule}$3`);
102
+ }
103
+ }
104
+ return text;
105
+ }
106
+ function replaceSymbols(text) {
107
+ for (const r of COMPILED_SYMBOL_REPLACEMENTS) {
108
+ if (!text.includes(r.old)) {
109
+ continue;
110
+ }
111
+ r.regex.lastIndex = 0;
112
+ text = text.replace(r.regex, r.new);
113
+ }
114
+ return text;
115
+ }
116
+ function removeDeletedImports(text) {
117
+ for (let i = 0; i < REMOVED_SYMBOLS.length; i++) {
118
+ const sym = REMOVED_SYMBOLS[i];
119
+ if (!text.includes(sym)) {
120
+ continue;
121
+ }
122
+ text = text.replace(REMOVED_SYMBOL_SOLE_IMPORT_REGEXES[i], '');
123
+ text = text.replace(REMOVED_SYMBOL_LEADING_COMMA_REGEXES[i], '');
124
+ text = text.replace(REMOVED_SYMBOL_TRAILING_COMMA_REGEXES[i], '');
125
+ const usage = REMOVED_SYMBOL_USAGE_REGEXES[i];
126
+ if (usage.test.test(text)) {
127
+ usage.replace.lastIndex = 0;
128
+ text = text.replace(usage.replace, `${sym} /* TODO: '${sym}' was removed in @clr/angular v18. Use standard KeyboardEvent.key values instead. */`);
129
+ }
130
+ }
131
+ return text;
132
+ }
133
+ function escapeRegExp(str) {
134
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
135
+ }
136
+ //# sourceMappingURL=import-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/import-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Rule } from '@angular-devkit/schematics';
2
+ export declare const TEMPLATE_MIGRATION_HTML_CANDIDATES: readonly string[];
3
+ export declare const TEMPLATE_MIGRATION_INLINE_CANDIDATES: readonly string[];
4
+ export declare function transformInlineTemplates(text: string): string;
5
+ export declare function migrateTemplates(): Rule;
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.
4
+ * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
5
+ * This software is released under MIT license.
6
+ * The full license information can be found in LICENSE in the root directory of this project.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TEMPLATE_MIGRATION_INLINE_CANDIDATES = exports.TEMPLATE_MIGRATION_HTML_CANDIDATES = void 0;
10
+ exports.transformInlineTemplates = transformInlineTemplates;
11
+ exports.migrateTemplates = migrateTemplates;
12
+ const css_replacements_1 = require("../replacements/css-replacements");
13
+ const template_replacements_1 = require("../replacements/template-replacements");
14
+ const file_visitor_1 = require("../utils/file-visitor");
15
+ // ---------------------------------------------------------------------------
16
+ // Pre-compiled regex arrays — built once at module load, not per-file
17
+ // ---------------------------------------------------------------------------
18
+ const COMPILED_OUTPUT_REGEXES = template_replacements_1.TEMPLATE_OUTPUT_REPLACEMENTS.map(r => ({
19
+ old: r.old,
20
+ new: r.new,
21
+ regex: new RegExp(`\\(${escapeRegExp(r.old)}\\)`, 'g'),
22
+ }));
23
+ const COMPILED_INPUT_BOUND_REGEXES = template_replacements_1.TEMPLATE_INPUT_REPLACEMENTS.map(r => ({
24
+ old: r.old,
25
+ new: r.new,
26
+ boundRegex: new RegExp(`\\[${escapeRegExp(r.old)}\\]`, 'g'),
27
+ bareRegex: new RegExp(`(?<=\\s)${escapeRegExp(r.old)}(?==)`, 'g'),
28
+ }));
29
+ const COMPILED_ATTR_REGEXES = template_replacements_1.TEMPLATE_ATTRIBUTE_REPLACEMENTS.map(r => ({
30
+ old: r.old,
31
+ new: r.new,
32
+ regex: new RegExp(escapeRegExp(r.old), 'g'),
33
+ }));
34
+ const COMPILED_HEADER_REGEXES = template_replacements_1.HEADER_CLASS_REPLACEMENTS.map(r => ({
35
+ old: r.old,
36
+ new: r.new,
37
+ regex: new RegExp(`\\b${escapeRegExp(r.old)}\\b`, 'g'),
38
+ }));
39
+ const COMPILED_CDS_TEXT_REGEXES = css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => ({
40
+ old: r.old,
41
+ new: r.new,
42
+ regex: new RegExp(escapeRegExp(r.old), 'g'),
43
+ }));
44
+ // ---------------------------------------------------------------------------
45
+ // Fast-path candidate strings
46
+ // ---------------------------------------------------------------------------
47
+ exports.TEMPLATE_MIGRATION_HTML_CANDIDATES = [
48
+ ...template_replacements_1.TEMPLATE_OUTPUT_REPLACEMENTS.map(r => r.old),
49
+ ...template_replacements_1.TEMPLATE_INPUT_REPLACEMENTS.map(r => r.old),
50
+ ...template_replacements_1.TEMPLATE_ATTRIBUTE_REPLACEMENTS.map(r => r.old),
51
+ ...template_replacements_1.HEADER_CLASS_REPLACEMENTS.map(r => r.old),
52
+ ...css_replacements_1.CSS_ATTRIBUTE_REPLACEMENTS.map(r => r.old),
53
+ ];
54
+ exports.TEMPLATE_MIGRATION_INLINE_CANDIDATES = exports.TEMPLATE_MIGRATION_HTML_CANDIDATES;
55
+ // ---------------------------------------------------------------------------
56
+ // Public pure transforms — used by the unified .ts pass in index.ts
57
+ // ---------------------------------------------------------------------------
58
+ function transformInlineTemplates(text) {
59
+ const templateRegex = /template\s*:\s*(`[\s\S]*?`|'[\s\S]*?')/g;
60
+ return text.replace(templateRegex, (match, templateContent) => {
61
+ if (!exports.TEMPLATE_MIGRATION_INLINE_CANDIDATES.some(c => templateContent.includes(c))) {
62
+ return match;
63
+ }
64
+ const updated = applyHtmlTransforms(templateContent);
65
+ return updated !== templateContent ? match.replace(templateContent, updated) : match;
66
+ });
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Schematic Rule — visits .html files; .ts inline templates handled in unified pass
70
+ // ---------------------------------------------------------------------------
71
+ function migrateTemplates() {
72
+ return (tree, context) => {
73
+ context.logger.info(' Migrating HTML templates...');
74
+ let htmlFileCount = 0;
75
+ let tsFileCount = 0;
76
+ (0, file_visitor_1.visitFiles)(tree, '**/*.html', filePath => {
77
+ const content = tree.read(filePath);
78
+ if (!content) {
79
+ return;
80
+ }
81
+ const original = content.toString('utf-8');
82
+ if (!exports.TEMPLATE_MIGRATION_HTML_CANDIDATES.some(c => original.includes(c))) {
83
+ return;
84
+ }
85
+ const updated = applyHtmlTransforms(original);
86
+ if (updated !== original) {
87
+ tree.overwrite(filePath, updated);
88
+ htmlFileCount++;
89
+ }
90
+ });
91
+ (0, file_visitor_1.visitFiles)(tree, '**/*.ts', filePath => {
92
+ const content = tree.read(filePath);
93
+ if (!content) {
94
+ return;
95
+ }
96
+ const original = content.toString('utf-8');
97
+ if (!exports.TEMPLATE_MIGRATION_INLINE_CANDIDATES.some(c => original.includes(c))) {
98
+ return;
99
+ }
100
+ const updated = transformInlineTemplates(original);
101
+ if (updated !== original) {
102
+ tree.overwrite(filePath, updated);
103
+ tsFileCount++;
104
+ }
105
+ });
106
+ context.logger.info(` Updated ${htmlFileCount} HTML template(s) and ${tsFileCount} inline template(s).`);
107
+ };
108
+ }
109
+ // ---------------------------------------------------------------------------
110
+ // Private helpers
111
+ // ---------------------------------------------------------------------------
112
+ function applyHtmlTransforms(text) {
113
+ text = migrateOutputBindings(text);
114
+ text = migrateInputBindings(text);
115
+ text = migrateCdsIconAttributes(text);
116
+ text = migrateHeaderClasses(text);
117
+ text = migrateCdsTextAttributes(text);
118
+ return text;
119
+ }
120
+ function migrateOutputBindings(text) {
121
+ for (const r of COMPILED_OUTPUT_REGEXES) {
122
+ if (!text.includes(r.old)) {
123
+ continue;
124
+ }
125
+ r.regex.lastIndex = 0;
126
+ text = text.replace(r.regex, `(${r.new})`);
127
+ }
128
+ return text;
129
+ }
130
+ function migrateInputBindings(text) {
131
+ for (const r of COMPILED_INPUT_BOUND_REGEXES) {
132
+ if (!text.includes(r.old)) {
133
+ continue;
134
+ }
135
+ r.boundRegex.lastIndex = 0;
136
+ r.bareRegex.lastIndex = 0;
137
+ text = text.replace(r.boundRegex, `[${r.new}]`);
138
+ text = text.replace(r.bareRegex, r.new);
139
+ }
140
+ return text;
141
+ }
142
+ function migrateCdsIconAttributes(text) {
143
+ for (const r of COMPILED_ATTR_REGEXES) {
144
+ if (!text.includes(r.old)) {
145
+ continue;
146
+ }
147
+ r.regex.lastIndex = 0;
148
+ text = text.replace(r.regex, r.new);
149
+ }
150
+ return text;
151
+ }
152
+ function migrateHeaderClasses(text) {
153
+ for (const r of COMPILED_HEADER_REGEXES) {
154
+ if (!text.includes(r.old)) {
155
+ continue;
156
+ }
157
+ r.regex.lastIndex = 0;
158
+ text = text.replace(r.regex, r.new);
159
+ }
160
+ return text;
161
+ }
162
+ function migrateCdsTextAttributes(text) {
163
+ for (const r of COMPILED_CDS_TEXT_REGEXES) {
164
+ if (!text.includes(r.old)) {
165
+ continue;
166
+ }
167
+ r.regex.lastIndex = 0;
168
+ text = text.replace(r.regex, r.new);
169
+ }
170
+ return text;
171
+ }
172
+ function escapeRegExp(str) {
173
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
174
+ }
175
+ //# sourceMappingURL=template-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-migration.js","sourceRoot":"","sources":["../../../../../projects/angular/schematics/ng-update/migrations/template-migration.ts"],"names":[],"mappings":"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"}