@taiga-ui/cdk 5.19.0 → 5.20.0-canary.4d72ec2

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 (49) hide show
  1. package/classes/control.d.ts +47 -2
  2. package/constants/version.d.ts +1 -1
  3. package/constants/version.js +1 -1
  4. package/constants/version.js.map +1 -1
  5. package/fesm2022/taiga-ui-cdk-classes.mjs +57 -5
  6. package/fesm2022/taiga-ui-cdk-classes.mjs.map +1 -1
  7. package/fesm2022/taiga-ui-cdk-constants.mjs +1 -1
  8. package/fesm2022/taiga-ui-cdk-constants.mjs.map +1 -1
  9. package/fesm2022/taiga-ui-cdk-directives-truncate.mjs +3 -3
  10. package/fesm2022/taiga-ui-cdk-directives-truncate.mjs.map +1 -1
  11. package/fesm2022/taiga-ui-cdk-utils-di.mjs +12 -2
  12. package/fesm2022/taiga-ui-cdk-utils-di.mjs.map +1 -1
  13. package/package.json +1 -1
  14. package/schematics/ng-add/constants/versions.d.ts +1 -1
  15. package/schematics/ng-update/interfaces/replacement-identifier.d.ts +1 -0
  16. package/schematics/ng-update/steps/replace-identifier.js +41 -8
  17. package/schematics/ng-update/steps/replace-identifier.js.map +1 -1
  18. package/schematics/ng-update/v5/index.js +7 -0
  19. package/schematics/ng-update/v5/index.js.map +1 -1
  20. package/schematics/ng-update/v5/steps/constants/attrs-to-replace.js +36 -0
  21. package/schematics/ng-update/v5/steps/constants/attrs-to-replace.js.map +1 -1
  22. package/schematics/ng-update/v5/steps/constants/html-comments.js +5 -0
  23. package/schematics/ng-update/v5/steps/constants/html-comments.js.map +1 -1
  24. package/schematics/ng-update/v5/steps/constants/identifiers-to-replace.js +73 -0
  25. package/schematics/ng-update/v5/steps/constants/identifiers-to-replace.js.map +1 -1
  26. package/schematics/ng-update/v5/steps/constants/migration-warnings.js +15 -0
  27. package/schematics/ng-update/v5/steps/constants/migration-warnings.js.map +1 -1
  28. package/schematics/ng-update/v5/steps/migrate-input-tag-component.d.ts +3 -0
  29. package/schematics/ng-update/v5/steps/migrate-input-tag-component.js +36 -0
  30. package/schematics/ng-update/v5/steps/migrate-input-tag-component.js.map +1 -0
  31. package/schematics/ng-update/v5/steps/migrate-templates.js +4 -0
  32. package/schematics/ng-update/v5/steps/migrate-templates.js.map +1 -1
  33. package/schematics/ng-update/v5/steps/migrate-tui-let.js +57 -1
  34. package/schematics/ng-update/v5/steps/migrate-tui-let.js.map +1 -1
  35. package/schematics/ng-update/v5/steps/templates/migrate-async-pipes.js +8 -0
  36. package/schematics/ng-update/v5/steps/templates/migrate-async-pipes.js.map +1 -1
  37. package/schematics/ng-update/v5/steps/templates/migrate-dropdown-import.d.ts +8 -0
  38. package/schematics/ng-update/v5/steps/templates/migrate-dropdown-import.js +45 -0
  39. package/schematics/ng-update/v5/steps/templates/migrate-dropdown-import.js.map +1 -0
  40. package/schematics/ng-update/v5/steps/templates/migrate-input.js +16 -1
  41. package/schematics/ng-update/v5/steps/templates/migrate-input.js.map +1 -1
  42. package/schematics/ng-update/v5/steps/templates/migrate-primitive-textfield.d.ts +8 -0
  43. package/schematics/ng-update/v5/steps/templates/migrate-primitive-textfield.js +308 -0
  44. package/schematics/ng-update/v5/steps/templates/migrate-primitive-textfield.js.map +1 -0
  45. package/schematics/utils/remove-import-from-standalone-component.d.ts +3 -0
  46. package/schematics/utils/remove-import-from-standalone-component.js +43 -0
  47. package/schematics/utils/remove-import-from-standalone-component.js.map +1 -0
  48. package/utils/di/index.d.ts +1 -0
  49. package/utils/di/inject-form-field.d.ts +5 -0
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.migratePrimitiveTextfield = migratePrimitiveTextfield;
4
+ const insert_todo_1 = require("../../../../utils/insert-todo");
5
+ const elements_1 = require("../../../../utils/templates/elements");
6
+ const migrate_attr_value_1 = require("../../../../utils/templates/migrate-attr-value");
7
+ const template_resource_1 = require("../../../../utils/templates/template-resource");
8
+ const control_state_attrs_1 = require("../../../utils/templates/control-state-attrs");
9
+ const get_original_attr_text_1 = require("../../../utils/templates/get-original-attr-text");
10
+ const DOCS_LINK = 'https://taiga-ui.dev/components/input';
11
+ const TEXTFIELD_WRAPPER_ATTRS = new Set([
12
+ '[tuiTextfieldAppearance]',
13
+ '[tuiTextfieldCleaner]',
14
+ '[tuiTextfieldSize]',
15
+ 'tuiTextfieldAppearance',
16
+ 'tuiTextfieldCleaner',
17
+ 'tuiTextfieldSize',
18
+ ].map((name) => name.toLowerCase()));
19
+ const TEXTFIELD_WRAPPER_ATTR_RENAMES = new Map([
20
+ ['[tuiTextfieldFiller]'.toLowerCase(), '[filler]'],
21
+ ['[tuiTextfieldIcon]'.toLowerCase(), '[iconEnd]'],
22
+ ['[tuiTextfieldIconLeft]'.toLowerCase(), '[iconStart]'],
23
+ ['tuiTextfieldFiller'.toLowerCase(), 'filler'],
24
+ ['tuiTextfieldIcon'.toLowerCase(), 'iconEnd'],
25
+ ['tuiTextfieldIconLeft'.toLowerCase(), 'iconStart'],
26
+ ]);
27
+ const LABEL_OUTSIDE_ATTRS = new Set(['[tuiTextfieldLabelOutside]', 'tuiTextfieldLabelOutside'].map((name) => name.toLowerCase()));
28
+ // `<tui-primitive-textfield>` held the value via [(value)]; `<tui-textfield>` has no such
29
+ // property, so the binding moves to the projected `<input tuiTextfield>` as ngModel.
30
+ const VALUE_ATTR_RENAMES = new Map([
31
+ ['(valueChange)'.toLowerCase(), '(ngModelChange)'],
32
+ ['[(value)]'.toLowerCase(), '[(ngModel)]'],
33
+ ['[value]'.toLowerCase(), '[ngModel]'],
34
+ ]);
35
+ const FOCUSED_CHANGE_ATTRS = new Set(['(focusedChange)'.toLowerCase()]);
36
+ // Standalone CDK directives that attach to any element (including <tui-textfield>) and stay
37
+ // on the wrapper unchanged — they must not be reported as unrecognized attributes.
38
+ const WRAPPER_PASSTHROUGH_ATTRS = new Set([
39
+ '(tuiHoveredChange)',
40
+ 'tuiActiveZone',
41
+ '[tuiActiveZone]',
42
+ '(tuiActiveZoneChange)',
43
+ ].map((name) => name.toLowerCase()));
44
+ const HINT_ATTRS = new Set([
45
+ '[tuiHintAppearance]',
46
+ '[tuiHintContent]',
47
+ '[tuiHintDirection]',
48
+ 'tuiHintAppearance',
49
+ 'tuiHintContent',
50
+ 'tuiHintDirection',
51
+ ].map((name) => name.toLowerCase()));
52
+ const CONTROL_ATTRS = new Set([
53
+ 'formControlName',
54
+ '[formControl]',
55
+ 'formControl',
56
+ '[(ngModel)]',
57
+ '[ngModel]',
58
+ 'ngModel',
59
+ '(ngModelChange)',
60
+ ].map((name) => name.toLowerCase()));
61
+ const LEGACY_INPUT_ATTRS = new Set(['tuiTextfield', 'tuiTextfieldLegacy'].map((name) => name.toLowerCase()));
62
+ function isClassOrStyleAttr(nameLower) {
63
+ const stripped = nameLower.replaceAll(/^\[|\]$/g, '');
64
+ return (stripped === 'class' ||
65
+ stripped === 'style' ||
66
+ stripped === 'ngclass' ||
67
+ stripped === 'ngstyle' ||
68
+ stripped.startsWith('class.') ||
69
+ stripped.startsWith('style.'));
70
+ }
71
+ function hasHintContent(element) {
72
+ return element.attrs.some((attr) => {
73
+ const lower = attr.name.toLowerCase();
74
+ return (lower === 'tuiHintContent'.toLowerCase() ||
75
+ lower === '[tuiHintContent]'.toLowerCase());
76
+ });
77
+ }
78
+ function migratePrimitiveTextfield({ resource, recorder, fileSystem, }) {
79
+ const template = (0, template_resource_1.getTemplateFromTemplateResource)(resource, fileSystem);
80
+ const templateOffset = (0, template_resource_1.getTemplateOffset)(resource);
81
+ const elements = (0, elements_1.findElementsByTagName)(template, 'tui-primitive-textfield');
82
+ const processable = elements.filter((element) => !hasHintContent(element));
83
+ const replacements = processable
84
+ .map((element) => buildReplacement(template, element))
85
+ .filter((x) => Boolean(x))
86
+ .sort((a, b) => b.startOffset - a.startOffset);
87
+ replacements.forEach(({ startOffset, endOffset, replacement }) => {
88
+ recorder.remove(templateOffset + startOffset, endOffset - startOffset);
89
+ recorder.insertRight(templateOffset + startOffset, replacement);
90
+ });
91
+ }
92
+ function buildReplacement(template, element) {
93
+ var _a, _b, _c, _d;
94
+ const loc = element.sourceCodeLocation;
95
+ if (!(loc === null || loc === void 0 ? void 0 : loc.startTag)) {
96
+ return null;
97
+ }
98
+ const isSelfClosing = !loc.endTag;
99
+ const endOffset = isSelfClosing ? loc.startTag.endOffset : loc.endOffset;
100
+ const textfieldAttrs = [];
101
+ const inputAttrs = ['tuiTextfield'];
102
+ const controlStateAttrs = (0, control_state_attrs_1.getControlStateAttrs)(element);
103
+ const controlStateAttrsLower = new Set(controlStateAttrs.map((a) => a.name.toLowerCase()));
104
+ const ctx = {
105
+ placeholder: '',
106
+ labelOutside: false,
107
+ focusedChangeAttr: null,
108
+ unknownAttrs: [],
109
+ };
110
+ for (const attr of element.attrs) {
111
+ const nameLower = attr.name.toLowerCase();
112
+ if (controlStateAttrsLower.has(nameLower)) {
113
+ continue;
114
+ }
115
+ if (LABEL_OUTSIDE_ATTRS.has(nameLower)) {
116
+ const val = attr.value.trim();
117
+ if (val === 'true' || (!nameLower.startsWith('[') && val === '')) {
118
+ ctx.labelOutside = true;
119
+ }
120
+ else if (val === 'false') {
121
+ ctx.labelOutside = false;
122
+ }
123
+ else {
124
+ ctx.labelOutside = 'dynamic';
125
+ }
126
+ continue;
127
+ }
128
+ const renamedWrapperAttr = TEXTFIELD_WRAPPER_ATTR_RENAMES.get(nameLower);
129
+ if (renamedWrapperAttr !== undefined) {
130
+ textfieldAttrs.push(attr.value ? `${renamedWrapperAttr}="${attr.value}"` : renamedWrapperAttr);
131
+ continue;
132
+ }
133
+ if (TEXTFIELD_WRAPPER_ATTRS.has(nameLower)) {
134
+ const original = (0, get_original_attr_text_1.getOriginalAttrText)(template, element, attr);
135
+ const migratedValue = (0, migrate_attr_value_1.migrateAttrValue)(nameLower, attr.value);
136
+ textfieldAttrs.push((0, get_original_attr_text_1.replaceAttrValue)(original, migratedValue));
137
+ continue;
138
+ }
139
+ const renamedValueAttr = VALUE_ATTR_RENAMES.get(nameLower);
140
+ if (renamedValueAttr !== undefined) {
141
+ inputAttrs.push(attr.value ? `${renamedValueAttr}="${attr.value}"` : renamedValueAttr);
142
+ continue;
143
+ }
144
+ if (CONTROL_ATTRS.has(nameLower)) {
145
+ inputAttrs.push((0, get_original_attr_text_1.getOriginalAttrText)(template, element, attr));
146
+ continue;
147
+ }
148
+ if (FOCUSED_CHANGE_ATTRS.has(nameLower)) {
149
+ ctx.focusedChangeAttr = (0, get_original_attr_text_1.getOriginalAttrText)(template, element, attr);
150
+ continue;
151
+ }
152
+ if (HINT_ATTRS.has(nameLower)) {
153
+ continue;
154
+ }
155
+ if (isClassOrStyleAttr(nameLower) || WRAPPER_PASSTHROUGH_ATTRS.has(nameLower)) {
156
+ textfieldAttrs.push((0, get_original_attr_text_1.getOriginalAttrText)(template, element, attr));
157
+ continue;
158
+ }
159
+ const original = (0, get_original_attr_text_1.getOriginalAttrText)(template, element, attr);
160
+ const originalName = (_b = (_a = /^[\w[\]()]+/.exec(original)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : attr.name;
161
+ ctx.unknownAttrs.push(originalName);
162
+ textfieldAttrs.push(original);
163
+ }
164
+ const controlStateStr = (0, control_state_attrs_1.stringifyControlStateAttrs)(controlStateAttrs);
165
+ ctx.placeholder = isSelfClosing ? '' : getPlaceholderText(element);
166
+ const lineStart = template.lastIndexOf('\n', loc.startOffset) + 1;
167
+ const indent = (_d = (_c = /^[ \t]*/.exec(template.slice(lineStart, loc.startOffset))) === null || _c === void 0 ? void 0 : _c[0]) !== null && _d !== void 0 ? _d : '';
168
+ const wrapperAttrsStr = textfieldAttrs.length > 0 ? ` ${textfieldAttrs.join(' ')}` : '';
169
+ const innerContent = buildInnerContent({
170
+ element,
171
+ template,
172
+ inputAttrs,
173
+ controlStateStr,
174
+ ctx,
175
+ indent,
176
+ isSelfClosing,
177
+ });
178
+ const todoComment = buildTodoComment(ctx);
179
+ // With a TODO the comment ends in `\n`, so the tag needs its own indent; without one the
180
+ // whitespace preserved before startOffset already positions the tag.
181
+ const tagIndent = todoComment ? indent : '';
182
+ const core = `${tagIndent}<tui-textfield${wrapperAttrsStr}>\n${innerContent}${indent}</tui-textfield>`;
183
+ return {
184
+ startOffset: loc.startOffset,
185
+ endOffset,
186
+ replacement: `${todoComment}${core}`,
187
+ };
188
+ }
189
+ function buildTodoComment(ctx) {
190
+ const notes = [];
191
+ if (ctx.focusedChangeAttr) {
192
+ notes.push(`${ctx.focusedChangeAttr} has no direct equivalent. Read focus state from the TuiTextfieldComponent.focused signal, or bind (focusin)/(focusout) on <input tuiTextfield>.`);
193
+ }
194
+ if (ctx.placeholder && ctx.labelOutside === 'dynamic') {
195
+ notes.push('[tuiTextfieldLabelOutside] was dynamic and cannot be migrated automatically. Use <label tuiLabel> inside <tui-textfield> for a floating label, or place a static label outside.');
196
+ }
197
+ for (const name of ctx.unknownAttrs) {
198
+ notes.push(`"${name}" is an unrecognized attribute and was placed on <tui-textfield>. Move it to <input tuiTextfield> if it targets the native element.`);
199
+ }
200
+ if (notes.length === 0) {
201
+ return '';
202
+ }
203
+ const lines = [
204
+ `<!-- ${insert_todo_1.TODO_MARK} tui-primitive-textfield migration (see ${DOCS_LINK}):`,
205
+ ...notes.map((n) => ` - ${n}`),
206
+ '-->',
207
+ ];
208
+ return `${lines.join('\n')}\n`;
209
+ }
210
+ function buildInnerContent({ element, template, inputAttrs, controlStateStr, ctx, indent, isSelfClosing, }) {
211
+ const { placeholder, labelOutside } = ctx;
212
+ const childElements = isSelfClosing
213
+ ? []
214
+ : element.childNodes.filter((node) => node.nodeName !== '#text' && node.nodeName !== '#comment');
215
+ const labelEl = buildLabelEl(placeholder, labelOutside, indent);
216
+ const placeholderAttr = placeholder && labelOutside === true ? `placeholder="${placeholder}"` : '';
217
+ const legacyInnerInput = childElements.find((node) => node.nodeName === 'input' &&
218
+ node.attrs.some((a) => LEGACY_INPUT_ATTRS.has(a.name.toLowerCase())));
219
+ if (legacyInnerInput) {
220
+ const extraAttrs = [
221
+ ...inputAttrs.filter((a) => a !== 'tuiTextfield'),
222
+ ...(placeholderAttr ? [placeholderAttr] : []),
223
+ ];
224
+ return `${labelEl}${migrateInnerInput({
225
+ parent: element,
226
+ inner: legacyInnerInput,
227
+ template,
228
+ attrsToAdd: extraAttrs,
229
+ controlStateStr,
230
+ indent,
231
+ })}`;
232
+ }
233
+ const genAttrs = [...inputAttrs, ...(placeholderAttr ? [placeholderAttr] : [])];
234
+ const attrsStr = genAttrs.length > 0 ? ` ${genAttrs.join(' ')}` : '';
235
+ const otherChildren = childElements
236
+ .map((child) => {
237
+ const childLoc = child.sourceCodeLocation;
238
+ return childLoc
239
+ ? template.slice(childLoc.startOffset, childLoc.endOffset)
240
+ : '';
241
+ })
242
+ .join('');
243
+ return `${labelEl}${indent}<input${attrsStr}${controlStateStr} />\n${otherChildren}`;
244
+ }
245
+ /**
246
+ * Rewrites an existing `<input tuiTextfieldLegacy>` to `<input tuiTextfield ...>` by
247
+ * replacing the legacy directive and appending the value/control attrs moved off the host.
248
+ */
249
+ function migrateInnerInput({ parent, inner, template, attrsToAdd, controlStateStr, indent, }) {
250
+ var _a;
251
+ const innerLoc = inner.sourceCodeLocation;
252
+ if (!(innerLoc === null || innerLoc === void 0 ? void 0 : innerLoc.startTag)) {
253
+ return '';
254
+ }
255
+ const legacyAttr = inner.attrs.find((a) => LEGACY_INPUT_ATTRS.has(a.name.toLowerCase()));
256
+ const legacyAttrLoc = legacyAttr
257
+ ? (_a = innerLoc.attrs) === null || _a === void 0 ? void 0 : _a[legacyAttr.name.toLowerCase()]
258
+ : undefined;
259
+ let startTag = template.slice(innerLoc.startTag.startOffset, innerLoc.startTag.endOffset);
260
+ if (legacyAttrLoc) {
261
+ const relStart = legacyAttrLoc.startOffset - innerLoc.startTag.startOffset;
262
+ const relEnd = legacyAttrLoc.endOffset - innerLoc.startTag.startOffset;
263
+ startTag = `${startTag.slice(0, relStart)}tuiTextfield${startTag.slice(relEnd)}`;
264
+ }
265
+ // <input> is a void element — insert the extra attrs before the closing `>` or `/>`.
266
+ const closePos = startTag.endsWith('/>')
267
+ ? startTag.length - 2
268
+ : startTag.lastIndexOf('>');
269
+ const extraAttrs = attrsToAdd.filter((a) => a !== 'tuiTextfield').join(' ');
270
+ const insertStr = `${extraAttrs ? ` ${extraAttrs}` : ''}${controlStateStr}`;
271
+ startTag = `${startTag.slice(0, closePos).trimEnd()}${insertStr}${startTag.slice(closePos)}`;
272
+ const innerStart = innerLoc.startOffset;
273
+ const siblingsAfter = parent.childNodes
274
+ .filter((child) => {
275
+ if (child === inner ||
276
+ child.nodeName === '#text' ||
277
+ child.nodeName === '#comment') {
278
+ return false;
279
+ }
280
+ const childLoc = child.sourceCodeLocation;
281
+ return !!childLoc && childLoc.startOffset > innerStart;
282
+ })
283
+ .map((child) => {
284
+ const childLoc = child.sourceCodeLocation;
285
+ return childLoc
286
+ ? template.slice(childLoc.startOffset, childLoc.endOffset)
287
+ : '';
288
+ })
289
+ .join('');
290
+ return `${indent}${startTag}\n${siblingsAfter}`;
291
+ }
292
+ // labelOutside=false → floating <label tuiLabel>; ='dynamic' → keep raw text (a TODO explains it);
293
+ // =true → text becomes the input placeholder, handled by the caller, so no label element here.
294
+ function buildLabelEl(placeholder, labelOutside, indent) {
295
+ if (!placeholder) {
296
+ return '';
297
+ }
298
+ if (labelOutside === false) {
299
+ return `${indent}<label tuiLabel>${placeholder}</label>\n`;
300
+ }
301
+ return labelOutside === 'dynamic' ? `${indent}${placeholder}\n` : '';
302
+ }
303
+ function getPlaceholderText(element) {
304
+ var _a;
305
+ const textNode = element.childNodes.find((node) => node.nodeName === '#text' ? !!node.value.trim() : false);
306
+ return (_a = textNode === null || textNode === void 0 ? void 0 : textNode.value.trim()) !== null && _a !== void 0 ? _a : '';
307
+ }
308
+ //# sourceMappingURL=migrate-primitive-textfield.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-primitive-textfield.js","sourceRoot":"","sources":["../../../../../../../projects/cdk/schematics/ng-update/v5/steps/templates/migrate-primitive-textfield.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type TuiSchema } from '../ng-add/schema';
2
+ export declare function removeImportFromStandaloneComponent(componentPath: string, moduleName: string): void;
3
+ export declare function saveRemovedImports(_options: TuiSchema): void;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeImportFromStandaloneComponent = removeImportFromStandaloneComponent;
4
+ exports.saveRemovedImports = saveRemovedImports;
5
+ const ng_morph_1 = require("ng-morph");
6
+ const importsToRemove = new Map();
7
+ // Standalone-only by design: drops the entry from the component's own `imports: [...]`.
8
+ // A non-standalone component has no such array, so this is a no-op there — we deliberately
9
+ // never touch a shared @NgModule, where removing a pipe a sibling still uses would be unsafe.
10
+ // Only the imports[] entry is dropped (unused there = NG8113); the now-unused import statement
11
+ // is left for organize-imports (harmless TS6133).
12
+ function removeImportFromStandaloneComponent(componentPath, moduleName) {
13
+ importsToRemove.set(`${componentPath}_${moduleName}`, { componentPath, moduleName });
14
+ }
15
+ function saveRemovedImports(_options) {
16
+ importsToRemove.forEach(({ componentPath, moduleName }) => {
17
+ const [ngComponent] = (0, ng_morph_1.getNgComponents)(componentPath);
18
+ if (!ngComponent) {
19
+ return;
20
+ }
21
+ const decorator = ngComponent.getDecorator('Component');
22
+ const metadata = decorator === null || decorator === void 0 ? void 0 : decorator.getArguments()[0];
23
+ if (!ng_morph_1.Node.isObjectLiteralExpression(metadata)) {
24
+ return;
25
+ }
26
+ const importsProperty = metadata.getProperty('imports');
27
+ if (!ng_morph_1.Node.isPropertyAssignment(importsProperty)) {
28
+ return;
29
+ }
30
+ const importsArray = importsProperty.getInitializer();
31
+ if (!ng_morph_1.Node.isArrayLiteralExpression(importsArray)) {
32
+ return;
33
+ }
34
+ const index = importsArray
35
+ .getElements()
36
+ .findIndex((element) => element.getText() === moduleName);
37
+ if (index !== -1) {
38
+ importsArray.removeElement(index);
39
+ }
40
+ });
41
+ importsToRemove.clear();
42
+ }
43
+ //# sourceMappingURL=remove-import-from-standalone-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-import-from-standalone-component.js","sourceRoot":"","sources":["../../../../projects/cdk/schematics/utils/remove-import-from-standalone-component.ts"],"names":[],"mappings":";;AAiBA,kFAKC;AAED,gDAqCC;AA7DD,uCAA+C;AAI/C,MAAM,eAAe,GAAG,IAAI,GAAG,EAM5B,CAAC;AAEJ,wFAAwF;AACxF,2FAA2F;AAC3F,8FAA8F;AAC9F,+FAA+F;AAC/F,kDAAkD;AAClD,SAAgB,mCAAmC,CAC/C,aAAqB,EACrB,UAAkB;IAElB,eAAe,CAAC,GAAG,CAAC,GAAG,aAAa,IAAI,UAAU,EAAE,EAAE,EAAC,aAAa,EAAE,UAAU,EAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAgB,kBAAkB,CAAC,QAAmB;IAClD,eAAe,CAAC,OAAO,CAAC,CAAC,EAAC,aAAa,EAAE,UAAU,EAAC,EAAE,EAAE;QACpD,MAAM,CAAC,WAAW,CAAC,GAAG,IAAA,0BAAe,EAAC,aAAa,CAAC,CAAC;QAErD,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,GAAG,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,eAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO;QACX,CAAC;QAED,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAExD,IAAI,CAAC,eAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,EAAE,CAAC;YAC9C,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,eAAe,CAAC,cAAc,EAAE,CAAC;QAEtD,IAAI,CAAC,eAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,YAAY;aACrB,WAAW,EAAE;aACb,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC;QAE9D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,eAAe,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from './create-options';
2
2
  export * from './directive-binding';
3
+ export * from './inject-form-field';
3
4
  export * from './provide';
4
5
  export * from './provide-options';
@@ -0,0 +1,5 @@
1
+ import { type InjectOptions, type Signal } from '@angular/core';
2
+ /**
3
+ * @deprecated use inject(FORM_FIELD) from `@angular/forms/signals` if Angular >= 21
4
+ */
5
+ export declare function tuiInjectFormField(options?: InjectOptions): Signal<unknown>;