@eui/core 23.0.0-alpha.11 → 23.0.0-alpha.12

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.
@@ -2245,12 +2245,12 @@
2245
2245
  },
2246
2246
  {
2247
2247
  "name": "Schema",
2248
- "id": "interface-Schema-585b211d989563bbec5bd67bcdb58d5f264396adbe0ed2e51d0b4a0ecaf8b3ec36d821647c170d616bb409fc603c5a4c0e699eb7511e02c6add8d8670fc9cb9f-4",
2249
- "file": "packages/core/schematics/migrate-eui-alert/index.ts",
2248
+ "id": "interface-Schema-e96d29c1785a16147de773cebe7ab5d4ed82aa23c6b1f7737113252a14d156e236f46f7a16340432dec900b664c8005be0aef5d0a628c2f5b8dd2ec7e41edf56-4",
2249
+ "file": "packages/core/schematics/migrate-eui-accent/index.ts",
2250
2250
  "deprecated": false,
2251
2251
  "deprecationMessage": "",
2252
2252
  "type": "interface",
2253
- "sourceCode": "import { parseTemplate, TmplAstBoundAttribute, TmplAstElement, TmplAstNode, TmplAstTextAttribute } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst REMOVED_INPUTS = new Set(['alertIconType', 'alertIconFillColor', 'isMuted', 'isBordered']);\n\nexport function migrateEuiAlert(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes('eui-alert') && !original.includes('euiAlert')) return;\n\n const result = path.endsWith('.html')\n ? migrateTemplate(original)\n : migrateInlineTemplates(original);\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would remove deprecated inputs in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS property access usages\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts')) {\n if (![...REMOVED_INPUTS].some((input) => original.includes(input))) return;\n\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && REMOVED_INPUTS.has(node.name.text)) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(\n `${path}:${line + 1} - Manual action needed: \"${node.name.text}\" is no longer a valid input on eui-alert. Remove this assignment.`,\n );\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Removed deprecated eui-alert inputs from ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const removals: { start: number; end: number }[] = [];\n\n visitNodes(parsed.nodes, removals);\n\n // Apply removals in reverse order\n let result = source;\n for (const { start, end } of removals.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, start) + result.slice(end);\n }\n\n return result;\n}\n\nfunction migrateInlineTemplates(source: string): string {\n // Simple approach: find template strings containing eui-alert and process them\n const templateRegex = /template\\s*:\\s*`([^`]*)`/gs;\n return source.replace(templateRegex, (match, templateContent: string) => {\n if (!templateContent.includes('eui-alert') && !templateContent.includes('euiAlert')) return match;\n const migrated = migrateTemplate(templateContent);\n if (migrated === templateContent) return match;\n return match.replace(templateContent, migrated);\n });\n}\n\nfunction visitNodes(nodes: TmplAstNode[], removals: { start: number; end: number }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === 'eui-alert' || hasAttribute(node, 'euiAlert')) {\n collectRemovals(node, removals);\n }\n visitNodes(node.children, removals);\n }\n }\n}\n\nfunction hasAttribute(element: TmplAstElement, name: string): boolean {\n return element.attributes.some((a) => a.name === name);\n}\n\nfunction collectRemovals(element: TmplAstElement, removals: { start: number; end: number }[]): void {\n for (const attr of element.attributes) {\n if (REMOVED_INPUTS.has(attr.name)) {\n removals.push(getAttributeSpan(attr));\n }\n }\n for (const input of element.inputs) {\n if (REMOVED_INPUTS.has(input.name)) {\n removals.push(getAttributeSpan(input));\n }\n }\n}\n\nfunction getAttributeSpan(attr: TmplAstTextAttribute | TmplAstBoundAttribute): { start: number; end: number } {\n return { start: attr.sourceSpan.start.offset, end: attr.sourceSpan.end.offset };\n}\n",
2253
+ "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst OLD_NAME = 'euiAccent';\nconst NEW_NAME = 'euiPrimary';\nconst EUI_DIRECTIVES = ['euiButton', 'euiList', 'euiListItem'];\n\nexport function migrateEuiAccent(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(OLD_NAME)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n result = renameTsPropertyAccesses(result);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would replace '${OLD_NAME}' '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n });\n\n context.logger.info(`Renamed '${OLD_NAME}' '${NEW_NAME}' on EUI components in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction isEuiElement(element: TmplAstElement): boolean {\n if (element.name.startsWith('eui-')) return true;\n return element.attributes.some((a) => EUI_DIRECTIVES.includes(a.name)) ||\n element.inputs.some((i) => EUI_DIRECTIVES.includes(i.name));\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(OLD_NAME)) {\n ts.forEachChild(node, visit); return; \n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction renameTsPropertyAccesses(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n edits.push({ start: node.name.getStart(sourceFile), end: node.name.getEnd(), replacement: NEW_NAME });\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n return applyEdits(source, edits);\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isEuiElement(node)) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n if (attr.name === OLD_NAME) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n for (const input of element.inputs) {\n if (input.name === OLD_NAME) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2254
2254
  "displayName": "Schema",
2255
2255
  "properties": [
2256
2256
  {
@@ -2292,12 +2292,12 @@
2292
2292
  },
2293
2293
  {
2294
2294
  "name": "Schema",
2295
- "id": "interface-Schema-e96d29c1785a16147de773cebe7ab5d4ed82aa23c6b1f7737113252a14d156e236f46f7a16340432dec900b664c8005be0aef5d0a628c2f5b8dd2ec7e41edf56-5",
2296
- "file": "packages/core/schematics/migrate-eui-accent/index.ts",
2295
+ "id": "interface-Schema-585b211d989563bbec5bd67bcdb58d5f264396adbe0ed2e51d0b4a0ecaf8b3ec36d821647c170d616bb409fc603c5a4c0e699eb7511e02c6add8d8670fc9cb9f-5",
2296
+ "file": "packages/core/schematics/migrate-eui-alert/index.ts",
2297
2297
  "deprecated": false,
2298
2298
  "deprecationMessage": "",
2299
2299
  "type": "interface",
2300
- "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst OLD_NAME = 'euiAccent';\nconst NEW_NAME = 'euiPrimary';\nconst EUI_DIRECTIVES = ['euiButton', 'euiList', 'euiListItem'];\n\nexport function migrateEuiAccent(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(OLD_NAME)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n result = renameTsPropertyAccesses(result);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would replace '${OLD_NAME}' '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n });\n\n context.logger.info(`Renamed '${OLD_NAME}' '${NEW_NAME}' on EUI components in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction isEuiElement(element: TmplAstElement): boolean {\n if (element.name.startsWith('eui-')) return true;\n return element.attributes.some((a) => EUI_DIRECTIVES.includes(a.name)) ||\n element.inputs.some((i) => EUI_DIRECTIVES.includes(i.name));\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(OLD_NAME)) {\n ts.forEachChild(node, visit); return; \n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction renameTsPropertyAccesses(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n edits.push({ start: node.name.getStart(sourceFile), end: node.name.getEnd(), replacement: NEW_NAME });\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n return applyEdits(source, edits);\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isEuiElement(node)) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n if (attr.name === OLD_NAME) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n for (const input of element.inputs) {\n if (input.name === OLD_NAME) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2300
+ "sourceCode": "import { parseTemplate, TmplAstBoundAttribute, TmplAstElement, TmplAstNode, TmplAstTextAttribute } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst REMOVED_INPUTS = new Set(['alertIconType', 'alertIconFillColor', 'isMuted', 'isBordered']);\n\nexport function migrateEuiAlert(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes('eui-alert') && !original.includes('euiAlert')) return;\n\n const result = path.endsWith('.html')\n ? migrateTemplate(original)\n : migrateInlineTemplates(original);\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would remove deprecated inputs in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS property access usages\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts')) {\n if (![...REMOVED_INPUTS].some((input) => original.includes(input))) return;\n\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && REMOVED_INPUTS.has(node.name.text)) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(\n `${path}:${line + 1} - Manual action needed: \"${node.name.text}\" is no longer a valid input on eui-alert. Remove this assignment.`,\n );\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Removed deprecated eui-alert inputs from ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const removals: { start: number; end: number }[] = [];\n\n visitNodes(parsed.nodes, removals);\n\n // Apply removals in reverse order\n let result = source;\n for (const { start, end } of removals.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, start) + result.slice(end);\n }\n\n return result;\n}\n\nfunction migrateInlineTemplates(source: string): string {\n // Simple approach: find template strings containing eui-alert and process them\n const templateRegex = /template\\s*:\\s*`([^`]*)`/gs;\n return source.replace(templateRegex, (match, templateContent: string) => {\n if (!templateContent.includes('eui-alert') && !templateContent.includes('euiAlert')) return match;\n const migrated = migrateTemplate(templateContent);\n if (migrated === templateContent) return match;\n return match.replace(templateContent, migrated);\n });\n}\n\nfunction visitNodes(nodes: TmplAstNode[], removals: { start: number; end: number }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === 'eui-alert' || hasAttribute(node, 'euiAlert')) {\n collectRemovals(node, removals);\n }\n visitNodes(node.children, removals);\n }\n }\n}\n\nfunction hasAttribute(element: TmplAstElement, name: string): boolean {\n return element.attributes.some((a) => a.name === name);\n}\n\nfunction collectRemovals(element: TmplAstElement, removals: { start: number; end: number }[]): void {\n for (const attr of element.attributes) {\n if (REMOVED_INPUTS.has(attr.name)) {\n removals.push(getAttributeSpan(attr));\n }\n }\n for (const input of element.inputs) {\n if (REMOVED_INPUTS.has(input.name)) {\n removals.push(getAttributeSpan(input));\n }\n }\n}\n\nfunction getAttributeSpan(attr: TmplAstTextAttribute | TmplAstBoundAttribute): { start: number; end: number } {\n return { start: attr.sourceSpan.start.offset, end: attr.sourceSpan.end.offset };\n}\n",
2301
2301
  "displayName": "Schema",
2302
2302
  "properties": [
2303
2303
  {
@@ -2386,12 +2386,12 @@
2386
2386
  },
2387
2387
  {
2388
2388
  "name": "Schema",
2389
- "id": "interface-Schema-39d3d52e788050bebc4e0b99ed0756f7e9727556cb090ae8796bd4261a56463fe1f479c322b23028cd4134d71e4d1dc44cd248ac62a9a148b5fc46a665466f7c-7",
2390
- "file": "packages/core/schematics/migrate-eui-chip/index.ts",
2389
+ "id": "interface-Schema-c0c08f5e83da9afa13ce8375f982fb280b9bde854e00c914f41b04d44deecd531496c2cee264b50314e92a6260c26cebe35741a2cf5ec068d8b6da5c5267539e-7",
2390
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
2391
2391
  "deprecated": false,
2392
2392
  "deprecationMessage": "",
2393
2393
  "type": "interface",
2394
- "sourceCode": "import { parseTemplate, TmplAstBoundAttribute, TmplAstElement, TmplAstNode, TmplAstTextAttribute } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst REMOVED_INPUTS = new Set(['isSquared']);\n\nexport function migrateEuiChip(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes('eui-chip') && !original.includes('euiChip')) return;\n\n const result = path.endsWith('.html')\n ? migrateTemplate(original)\n : migrateInlineTemplates(original);\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would remove 'isSquared' input in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS usages inline\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts') && original.includes('isSquared')) {\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === 'isSquared') {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"isSquared\" is no longer a valid input on eui-chip. Remove this assignment.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Removed deprecated eui-chip 'isSquared' input from ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const removals: { start: number; end: number }[] = [];\n\n visitNodes(parsed.nodes, removals);\n\n let result = source;\n for (const { start, end } of removals.sort((a, b) => b.start - a.start)) {\n let adjustedStart = start;\n while (adjustedStart > 0 && (result[adjustedStart - 1] === ' ' || result[adjustedStart - 1] === '\\t')) {\n adjustedStart--;\n }\n result = result.slice(0, adjustedStart) + result.slice(end);\n }\n\n return result;\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const templateRegex = /template\\s*:\\s*`([^`]*)`/gs;\n return source.replace(templateRegex, (match, templateContent: string) => {\n if (!templateContent.includes('eui-chip') && !templateContent.includes('euiChip')) return match;\n const migrated = migrateTemplate(templateContent);\n if (migrated === templateContent) return match;\n return match.replace(templateContent, migrated);\n });\n}\n\nfunction isChipElement(element: TmplAstElement): boolean {\n if (element.name === 'eui-chip') return true;\n return element.attributes.some((a) => a.name === 'euiChip');\n}\n\nfunction visitNodes(nodes: TmplAstNode[], removals: { start: number; end: number }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isChipElement(node)) collectRemovals(node, removals);\n visitNodes(node.children, removals);\n }\n }\n}\n\nfunction collectRemovals(element: TmplAstElement, removals: { start: number; end: number }[]): void {\n for (const attr of element.attributes) {\n if (REMOVED_INPUTS.has(attr.name)) {\n removals.push(getAttributeSpan(attr));\n }\n }\n for (const input of element.inputs) {\n if (REMOVED_INPUTS.has(input.name)) {\n removals.push(getAttributeSpan(input));\n }\n }\n}\n\nfunction getAttributeSpan(attr: TmplAstTextAttribute | TmplAstBoundAttribute): { start: number; end: number } {\n return { start: attr.sourceSpan.start.offset, end: attr.sourceSpan.end.offset };\n}\n",
2394
+ "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst OLD_NAME = 'euiButtonCall';\nconst NEW_NAME = 'euiCTAButton';\n\nexport function migrateEuiButton(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(OLD_NAME)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS property access usages\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts')) {\n if (!original.includes(OLD_NAME)) return;\n\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"${OLD_NAME}\" has been renamed to \"${NEW_NAME}\". Update this reference manually.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Renamed '${OLD_NAME}' '${NEW_NAME}' on elements with euiButton in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(OLD_NAME)) {\n ts.forEachChild(node, visit); return; \n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction hasEuiButtonAttribute(element: TmplAstElement): boolean {\n return element.attributes.some((a) => a.name === 'euiButton') ||\n element.inputs.some((i) => i.name === 'euiButton');\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (hasEuiButtonAttribute(node)) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n if (attr.name === OLD_NAME) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n for (const input of element.inputs) {\n if (input.name === OLD_NAME) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2395
2395
  "displayName": "Schema",
2396
2396
  "properties": [
2397
2397
  {
@@ -2433,12 +2433,12 @@
2433
2433
  },
2434
2434
  {
2435
2435
  "name": "Schema",
2436
- "id": "interface-Schema-311bef7d5e4b40b356b0fdb5e35dd89e48a5c5beec29eeb865c22c2ca1c4c4fb1fd0bb4391ed0b33825a6d1d744bc3a2e9822b347fbc686a537e15b170c279dd-8",
2437
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
2436
+ "id": "interface-Schema-39d3d52e788050bebc4e0b99ed0756f7e9727556cb090ae8796bd4261a56463fe1f479c322b23028cd4134d71e4d1dc44cd248ac62a9a148b5fc46a665466f7c-8",
2437
+ "file": "packages/core/schematics/migrate-eui-chip/index.ts",
2438
2438
  "deprecated": false,
2439
2439
  "deprecationMessage": "",
2440
2440
  "type": "interface",
2441
- "sourceCode": "import { parseTemplate, TmplAstBoundAttribute, TmplAstBoundEvent, TmplAstElement, TmplAstNode, TmplAstTextAttribute } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\nconst CHIP_LIST_TAG = 'eui-chip-list';\nconst CHIP_LIST_ATTR = 'euiChipList';\nconst CHIP_TAG = 'eui-chip';\nconst CHIP_ATTR = 'euiChip';\n\nconst PROPAGATED_INPUTS = new Set([\n 'euiPrimary', 'euiSecondary', 'euiSuccess', 'euiInfo', 'euiWarning',\n 'euiDanger', 'euiAccent', 'euiVariant', 'euiSizeS', 'euiSizeVariant',\n 'euiOutline', 'euiDisabled',\n]);\n\nconst WARN_PROPERTIES = new Set([...PROPAGATED_INPUTS, 'chipRemove', 'isChipsRemovable', 'chipsLabelTruncateCount',\n 'maxVisibleChipsCount', 'isMaxVisibleChipsOpened', 'toggleLinkMoreLabel', 'toggleLinkLessLabel',\n 'isChipsSorted', 'chipsSortOrder']);\n\nconst REMOVED_INPUTS = new Set(['maxVisibleChipsCount', 'isMaxVisibleChipsOpened', 'toggleLinkMoreLabel', 'toggleLinkLessLabel', 'isChipsSorted', 'chipsSortOrder']);\n\nconst TRUNCATE_PIPE_IMPORT = 'EuiTruncatePipe';\nconst TRUNCATE_PIPE_PATH = '@eui/components/pipes';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\ninterface Edit {\n start: number;\n end: number;\n replacement: string;\n}\n\nexport function migrateEuiChipList(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n const filesNeedingTruncateImport = new Set<string>();\n\n visitDir(tree.getDir(scanPath || '/'), (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(CHIP_LIST_TAG) && !original.includes(CHIP_LIST_ATTR)) return;\n\n let result: string;\n let addedTruncate = false;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n if (result !== original && result.includes('euiTruncate') && !original.includes('euiTruncate')) {\n // Find the associated .ts file\n const tsPath = path.replace(/\\.html$/, '.ts');\n if (tree.exists(tsPath)) {\n filesNeedingTruncateImport.add(tsPath);\n } else {\n // Try component naming convention\n const componentTsPath = path.replace(/\\.html$/, '.component.ts');\n if (tree.exists(componentTsPath)) {\n filesNeedingTruncateImport.add(componentTsPath);\n }\n }\n }\n } else {\n result = migrateInlineTemplates(original);\n if (result !== original && result.includes('euiTruncate') && !original.includes('euiTruncate')) {\n addedTruncate = true;\n }\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would move variant/size/outline inputs to child eui-chip in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n if (addedTruncate) {\n filesNeedingTruncateImport.add(path);\n }\n\n // Warn about TS usages of removed properties\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts')) {\n if ([...WARN_PROPERTIES].some((p) => original.includes(p))) {\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && WARN_PROPERTIES.has(node.name.text)) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(\n `${path}:${line + 1} - \"${node.name.text}\" has been removed from eui-chip-list. Move it to individual eui-chip elements.`,\n );\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n }\n });\n\n // Add EuiTruncatePipe import to component files that need it\n for (const tsPath of filesNeedingTruncateImport) {\n const buffer = tree.read(tsPath);\n if (!buffer) continue;\n const source = buffer.toString('utf-8');\n if (source.includes(TRUNCATE_PIPE_IMPORT)) continue;\n const result = addTruncatePipeImport(source, tsPath);\n if (result !== source) {\n if (!options.dryRun) {\n tree.overwrite(tsPath, result);\n }\n }\n }\n\n context.logger.info(`Migrated eui-chip-list inputs/outputs to child eui-chip in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction addTruncatePipeImport(source: string, filePath: string): string {\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n const edits: Edit[] = [];\n\n // 1. Add ES import statement for EuiTruncatePipe\n let hasEsImport = false;\n let lastImportEnd = 0;\n\n for (const stmt of sourceFile.statements) {\n if (ts.isImportDeclaration(stmt)) {\n lastImportEnd = stmt.getEnd();\n const moduleSpec = (stmt.moduleSpecifier as ts.StringLiteral).text;\n if (moduleSpec === TRUNCATE_PIPE_PATH) {\n const namedBindings = stmt.importClause?.namedBindings;\n if (namedBindings && ts.isNamedImports(namedBindings)) {\n if (namedBindings.elements.some((el) => el.name.text === TRUNCATE_PIPE_IMPORT)) {\n hasEsImport = true;\n } else {\n // Add to existing import from same path\n const lastEl = namedBindings.elements[namedBindings.elements.length - 1];\n edits.push({ start: lastEl.getEnd(), end: lastEl.getEnd(), replacement: `, ${TRUNCATE_PIPE_IMPORT}` });\n hasEsImport = true;\n }\n }\n }\n }\n }\n\n if (!hasEsImport) {\n const importStatement = `\\nimport { ${TRUNCATE_PIPE_IMPORT} } from '${TRUNCATE_PIPE_PATH}';`;\n edits.push({ start: lastImportEnd, end: lastImportEnd, replacement: importStatement });\n }\n\n // 2. Add EuiTruncatePipe to @Component imports array\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node)) {\n const decs = ts.getDecorators(node);\n if (!decs) return;\n for (const dec of decs) {\n if (!ts.isCallExpression(dec.expression) || !ts.isIdentifier(dec.expression.expression) || dec.expression.expression.text !== 'Component') continue;\n const metadata = dec.expression.arguments[0];\n if (!ts.isObjectLiteralExpression(metadata)) continue;\n for (const prop of metadata.properties) {\n if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name) || prop.name.text !== 'imports') continue;\n if (!ts.isArrayLiteralExpression(prop.initializer)) continue;\n const arr = prop.initializer;\n const arrText = source.slice(arr.getStart(sourceFile), arr.getEnd());\n if (arrText.includes(TRUNCATE_PIPE_IMPORT)) continue;\n if (arr.elements.length > 0) {\n const lastElement = arr.elements[arr.elements.length - 1];\n edits.push({ start: lastElement.getEnd(), end: lastElement.getEnd(), replacement: `,\\n ${TRUNCATE_PIPE_IMPORT}` });\n } else {\n edits.push({ start: arr.getStart(sourceFile) + 1, end: arr.getEnd() - 1, replacement: TRUNCATE_PIPE_IMPORT });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: Edit[] = [];\n\n visitNodes(parsed.nodes, source, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: Edit[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(CHIP_LIST_TAG) && !rawTemplate.includes(CHIP_LIST_ATTR)) {\n ts.forEachChild(node, visit);\n return;\n }\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, replacement: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n return applyEdits(source, changes);\n}\n\nfunction visitNodes(nodes: TmplAstNode[], source: string, edits: Edit[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isChipListElement(node)) {\n migrateChipListElement(node, source, edits);\n }\n visitNodes(node.children, source, edits);\n }\n }\n}\n\nfunction isChipListElement(element: TmplAstElement): boolean {\n if (element.name === CHIP_LIST_TAG) return true;\n return element.attributes.some((a) => a.name === CHIP_LIST_ATTR);\n}\n\nfunction isChipElement(element: TmplAstElement): boolean {\n if (element.name === CHIP_TAG) return true;\n return element.attributes.some((a) => a.name === CHIP_ATTR);\n}\n\nfunction findChildChips(nodes: TmplAstNode[]): TmplAstElement[] {\n const chips: TmplAstElement[] = [];\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isChipElement(node)) {\n chips.push(node);\n } else {\n chips.push(...findChildChips(node.children));\n }\n }\n }\n return chips;\n}\n\nfunction migrateChipListElement(element: TmplAstElement, source: string, edits: Edit[]): void {\n const childChips = findChildChips(element.children);\n const insertions: string[] = [];\n let truncateValue: string | null = null;\n\n // Collect and remove propagated static attributes\n for (const attr of element.attributes) {\n if (PROPAGATED_INPUTS.has(attr.name)) {\n edits.push(removalEdit(attr, source));\n insertions.push(attr.value ? `${attr.name}=\"${attr.value}\"` : attr.name);\n }\n if (attr.name === 'isChipsRemovable') {\n edits.push(removalEdit(attr, source));\n insertions.push('isChipRemovable');\n }\n if (attr.name === 'chipsLabelTruncateCount') {\n edits.push(removalEdit(attr, source));\n truncateValue = attr.value || null;\n }\n if (REMOVED_INPUTS.has(attr.name)) {\n edits.push(removalEdit(attr, source));\n }\n }\n\n // Collect and remove propagated bound inputs\n for (const input of element.inputs) {\n if (PROPAGATED_INPUTS.has(input.name)) {\n edits.push(removalEdit(input, source));\n const raw = source.slice(input.sourceSpan.start.offset, input.sourceSpan.end.offset);\n insertions.push(raw);\n }\n if (input.name === 'isChipsRemovable') {\n edits.push(removalEdit(input, source));\n const valueText = extractBindingValue(input, source);\n insertions.push(`[isChipRemovable]=\"${valueText}\"`);\n }\n if (input.name === 'chipsLabelTruncateCount') {\n edits.push(removalEdit(input, source));\n truncateValue = extractBindingValue(input, source);\n }\n if (REMOVED_INPUTS.has(input.name)) {\n edits.push(removalEdit(input, source));\n }\n }\n\n // Collect and remove (chipRemove) output\n let chipRemoveHandler: string | null = null;\n for (const output of element.outputs) {\n if (output.name === 'chipRemove') {\n edits.push(removalEdit(output, source));\n chipRemoveHandler = extractHandlerExpression(output, source);\n }\n }\n\n if (chipRemoveHandler) {\n insertions.push(`(remove)=\"${chipRemoveHandler}\"`);\n }\n\n // Add collected attributes to each child eui-chip\n if (insertions.length > 0) {\n for (const chip of childChips) {\n const existingNames = getExistingAttrNames(chip);\n const toInsert = insertions.filter((ins) => {\n const name = extractAttrName(ins);\n return !existingNames.has(name);\n });\n if (toInsert.length > 0) {\n const insertPos = chip.startSourceSpan.end.offset - 1;\n edits.push({ start: insertPos, end: insertPos, replacement: ' ' + toInsert.join(' ') });\n }\n }\n }\n\n // Add euiTruncate pipe to chip label content\n if (truncateValue) {\n for (const chip of childChips) {\n const labelEdit = buildTruncatePipeEdit(chip, source, truncateValue);\n if (labelEdit) edits.push(labelEdit);\n }\n }\n}\n\nfunction buildTruncatePipeEdit(chip: TmplAstElement, source: string, truncateValue: string): Edit | null {\n // Find <span euiLabel>...</span> inside the chip\n const labelEl = findLabelElement(chip.children);\n if (labelEl && labelEl.endSourceSpan) {\n const contentStart = labelEl.startSourceSpan.end.offset;\n const contentEnd = labelEl.endSourceSpan.start.offset;\n const content = source.slice(contentStart, contentEnd);\n if (content && !content.includes('euiTruncate')) {\n const trimmed = content.trim();\n const interpMatch = trimmed.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (interpMatch) {\n return { start: contentStart, end: contentEnd, replacement: `{{ ${interpMatch[1]} | euiTruncate: ${truncateValue} }}` };\n }\n return { start: contentStart, end: contentEnd, replacement: `{{ '${trimmed}' | euiTruncate: ${truncateValue} }}` };\n }\n }\n\n // Check direct text content inside chip (no label element)\n if (chip.endSourceSpan) {\n const chipContentStart = chip.startSourceSpan.end.offset;\n const chipContentEnd = chip.endSourceSpan.start.offset;\n const chipContent = source.slice(chipContentStart, chipContentEnd);\n const trimmed = chipContent.trim();\n const interpMatch = trimmed.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (interpMatch && !chipContent.includes('euiTruncate')) {\n return { start: chipContentStart, end: chipContentEnd, replacement: `{{ ${interpMatch[1]} | euiTruncate: ${truncateValue} }}` };\n }\n }\n return null;\n}\n\nfunction findLabelElement(nodes: TmplAstNode[]): TmplAstElement | null {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.attributes.some((a) => a.name === 'euiLabel')) return node;\n const nested = findLabelElement(node.children);\n if (nested) return nested;\n }\n }\n return null;\n}\n\nfunction getExistingAttrNames(element: TmplAstElement): Set<string> {\n const names = new Set<string>();\n for (const attr of element.attributes) names.add(attr.name);\n for (const input of element.inputs) names.add(input.name);\n for (const output of element.outputs) names.add(output.name);\n return names;\n}\n\nfunction extractAttrName(insertion: string): string {\n const outputMatch = insertion.match(/^\\(([^)]+)\\)/);\n if (outputMatch) return outputMatch[1];\n const inputMatch = insertion.match(/^\\[([^\\]]+)\\]/);\n if (inputMatch) return inputMatch[1];\n return insertion.split('=')[0];\n}\n\nfunction removalEdit(node: TmplAstTextAttribute | TmplAstBoundAttribute | TmplAstBoundEvent, source: string): Edit {\n let start = node.sourceSpan.start.offset;\n while (start > 0 && (source[start - 1] === ' ' || source[start - 1] === '\\t')) {\n start--;\n }\n return { start, end: node.sourceSpan.end.offset, replacement: '' };\n}\n\nfunction extractBindingValue(input: TmplAstBoundAttribute, source: string): string {\n const raw = source.slice(input.sourceSpan.start.offset, input.sourceSpan.end.offset);\n const match = raw.match(/=[\"']([^\"']*)[\"']/);\n return match ? match[1] : 'true';\n}\n\nfunction extractHandlerExpression(output: TmplAstBoundEvent, source: string): string {\n const raw = source.slice(output.sourceSpan.start.offset, output.sourceSpan.end.offset);\n const match = raw.match(/=[\"']([^\"']*)[\"']/);\n return match ? match[1] : '';\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction applyEdits(source: string, edits: Edit[]): string {\n const unique = deduplicateEdits(edits);\n let result = source;\n for (const edit of unique.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n\nfunction deduplicateEdits(edits: Edit[]): Edit[] {\n const seen = new Map<string, Edit>();\n for (const edit of edits) {\n seen.set(`${edit.start}:${edit.end}`, edit);\n }\n return Array.from(seen.values());\n}\n",
2441
+ "sourceCode": "import { parseTemplate, TmplAstBoundAttribute, TmplAstElement, TmplAstNode, TmplAstTextAttribute } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst REMOVED_INPUTS = new Set(['isSquared']);\n\nexport function migrateEuiChip(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes('eui-chip') && !original.includes('euiChip')) return;\n\n const result = path.endsWith('.html')\n ? migrateTemplate(original)\n : migrateInlineTemplates(original);\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would remove 'isSquared' input in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS usages inline\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts') && original.includes('isSquared')) {\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === 'isSquared') {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"isSquared\" is no longer a valid input on eui-chip. Remove this assignment.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Removed deprecated eui-chip 'isSquared' input from ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const removals: { start: number; end: number }[] = [];\n\n visitNodes(parsed.nodes, removals);\n\n let result = source;\n for (const { start, end } of removals.sort((a, b) => b.start - a.start)) {\n let adjustedStart = start;\n while (adjustedStart > 0 && (result[adjustedStart - 1] === ' ' || result[adjustedStart - 1] === '\\t')) {\n adjustedStart--;\n }\n result = result.slice(0, adjustedStart) + result.slice(end);\n }\n\n return result;\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const templateRegex = /template\\s*:\\s*`([^`]*)`/gs;\n return source.replace(templateRegex, (match, templateContent: string) => {\n if (!templateContent.includes('eui-chip') && !templateContent.includes('euiChip')) return match;\n const migrated = migrateTemplate(templateContent);\n if (migrated === templateContent) return match;\n return match.replace(templateContent, migrated);\n });\n}\n\nfunction isChipElement(element: TmplAstElement): boolean {\n if (element.name === 'eui-chip') return true;\n return element.attributes.some((a) => a.name === 'euiChip');\n}\n\nfunction visitNodes(nodes: TmplAstNode[], removals: { start: number; end: number }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isChipElement(node)) collectRemovals(node, removals);\n visitNodes(node.children, removals);\n }\n }\n}\n\nfunction collectRemovals(element: TmplAstElement, removals: { start: number; end: number }[]): void {\n for (const attr of element.attributes) {\n if (REMOVED_INPUTS.has(attr.name)) {\n removals.push(getAttributeSpan(attr));\n }\n }\n for (const input of element.inputs) {\n if (REMOVED_INPUTS.has(input.name)) {\n removals.push(getAttributeSpan(input));\n }\n }\n}\n\nfunction getAttributeSpan(attr: TmplAstTextAttribute | TmplAstBoundAttribute): { start: number; end: number } {\n return { start: attr.sourceSpan.start.offset, end: attr.sourceSpan.end.offset };\n}\n",
2442
2442
  "displayName": "Schema",
2443
2443
  "properties": [
2444
2444
  {
@@ -2450,7 +2450,7 @@
2450
2450
  "indexKey": "",
2451
2451
  "optional": true,
2452
2452
  "description": "",
2453
- "line": 28,
2453
+ "line": 8,
2454
2454
  "rawdescription": "\n"
2455
2455
  },
2456
2456
  {
@@ -2462,7 +2462,7 @@
2462
2462
  "indexKey": "",
2463
2463
  "optional": true,
2464
2464
  "description": "",
2465
- "line": 27,
2465
+ "line": 7,
2466
2466
  "rawdescription": "\n"
2467
2467
  }
2468
2468
  ],
@@ -2480,12 +2480,12 @@
2480
2480
  },
2481
2481
  {
2482
2482
  "name": "Schema",
2483
- "id": "interface-Schema-c0c08f5e83da9afa13ce8375f982fb280b9bde854e00c914f41b04d44deecd531496c2cee264b50314e92a6260c26cebe35741a2cf5ec068d8b6da5c5267539e-9",
2484
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
2483
+ "id": "interface-Schema-311bef7d5e4b40b356b0fdb5e35dd89e48a5c5beec29eeb865c22c2ca1c4c4fb1fd0bb4391ed0b33825a6d1d744bc3a2e9822b347fbc686a537e15b170c279dd-9",
2484
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
2485
2485
  "deprecated": false,
2486
2486
  "deprecationMessage": "",
2487
2487
  "type": "interface",
2488
- "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst OLD_NAME = 'euiButtonCall';\nconst NEW_NAME = 'euiCTAButton';\n\nexport function migrateEuiButton(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(OLD_NAME)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' → '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS property access usages\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts')) {\n if (!original.includes(OLD_NAME)) return;\n\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"${OLD_NAME}\" has been renamed to \"${NEW_NAME}\". Update this reference manually.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Renamed '${OLD_NAME}' → '${NEW_NAME}' on elements with euiButton in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(OLD_NAME)) {\n ts.forEachChild(node, visit); return; \n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction hasEuiButtonAttribute(element: TmplAstElement): boolean {\n return element.attributes.some((a) => a.name === 'euiButton') ||\n element.inputs.some((i) => i.name === 'euiButton');\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (hasEuiButtonAttribute(node)) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n if (attr.name === OLD_NAME) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n for (const input of element.inputs) {\n if (input.name === OLD_NAME) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2488
+ "sourceCode": "import { parseTemplate, TmplAstBoundAttribute, TmplAstBoundEvent, TmplAstElement, TmplAstNode, TmplAstTextAttribute } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\nconst CHIP_LIST_TAG = 'eui-chip-list';\nconst CHIP_LIST_ATTR = 'euiChipList';\nconst CHIP_TAG = 'eui-chip';\nconst CHIP_ATTR = 'euiChip';\n\nconst PROPAGATED_INPUTS = new Set([\n 'euiPrimary', 'euiSecondary', 'euiSuccess', 'euiInfo', 'euiWarning',\n 'euiDanger', 'euiAccent', 'euiVariant', 'euiSizeS', 'euiSizeVariant',\n 'euiOutline', 'euiDisabled',\n]);\n\nconst WARN_PROPERTIES = new Set([...PROPAGATED_INPUTS, 'chipRemove', 'isChipsRemovable', 'chipsLabelTruncateCount',\n 'maxVisibleChipsCount', 'isMaxVisibleChipsOpened', 'toggleLinkMoreLabel', 'toggleLinkLessLabel',\n 'isChipsSorted', 'chipsSortOrder']);\n\nconst REMOVED_INPUTS = new Set(['maxVisibleChipsCount', 'isMaxVisibleChipsOpened', 'toggleLinkMoreLabel', 'toggleLinkLessLabel', 'isChipsSorted', 'chipsSortOrder']);\n\nconst TRUNCATE_PIPE_IMPORT = 'EuiTruncatePipe';\nconst TRUNCATE_PIPE_PATH = '@eui/components/pipes';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\ninterface Edit {\n start: number;\n end: number;\n replacement: string;\n}\n\nexport function migrateEuiChipList(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n const filesNeedingTruncateImport = new Set<string>();\n\n visitDir(tree.getDir(scanPath || '/'), (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(CHIP_LIST_TAG) && !original.includes(CHIP_LIST_ATTR)) return;\n\n let result: string;\n let addedTruncate = false;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n if (result !== original && result.includes('euiTruncate') && !original.includes('euiTruncate')) {\n // Find the associated .ts file\n const tsPath = path.replace(/\\.html$/, '.ts');\n if (tree.exists(tsPath)) {\n filesNeedingTruncateImport.add(tsPath);\n } else {\n // Try component naming convention\n const componentTsPath = path.replace(/\\.html$/, '.component.ts');\n if (tree.exists(componentTsPath)) {\n filesNeedingTruncateImport.add(componentTsPath);\n }\n }\n }\n } else {\n result = migrateInlineTemplates(original);\n if (result !== original && result.includes('euiTruncate') && !original.includes('euiTruncate')) {\n addedTruncate = true;\n }\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would move variant/size/outline inputs to child eui-chip in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n if (addedTruncate) {\n filesNeedingTruncateImport.add(path);\n }\n\n // Warn about TS usages of removed properties\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts')) {\n if ([...WARN_PROPERTIES].some((p) => original.includes(p))) {\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && WARN_PROPERTIES.has(node.name.text)) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(\n `${path}:${line + 1} - \"${node.name.text}\" has been removed from eui-chip-list. Move it to individual eui-chip elements.`,\n );\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n }\n });\n\n // Add EuiTruncatePipe import to component files that need it\n for (const tsPath of filesNeedingTruncateImport) {\n const buffer = tree.read(tsPath);\n if (!buffer) continue;\n const source = buffer.toString('utf-8');\n if (source.includes(TRUNCATE_PIPE_IMPORT)) continue;\n const result = addTruncatePipeImport(source, tsPath);\n if (result !== source) {\n if (!options.dryRun) {\n tree.overwrite(tsPath, result);\n }\n }\n }\n\n context.logger.info(`Migrated eui-chip-list inputs/outputs to child eui-chip in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction addTruncatePipeImport(source: string, filePath: string): string {\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n const edits: Edit[] = [];\n\n // 1. Add ES import statement for EuiTruncatePipe\n let hasEsImport = false;\n let lastImportEnd = 0;\n\n for (const stmt of sourceFile.statements) {\n if (ts.isImportDeclaration(stmt)) {\n lastImportEnd = stmt.getEnd();\n const moduleSpec = (stmt.moduleSpecifier as ts.StringLiteral).text;\n if (moduleSpec === TRUNCATE_PIPE_PATH) {\n const namedBindings = stmt.importClause?.namedBindings;\n if (namedBindings && ts.isNamedImports(namedBindings)) {\n if (namedBindings.elements.some((el) => el.name.text === TRUNCATE_PIPE_IMPORT)) {\n hasEsImport = true;\n } else {\n // Add to existing import from same path\n const lastEl = namedBindings.elements[namedBindings.elements.length - 1];\n edits.push({ start: lastEl.getEnd(), end: lastEl.getEnd(), replacement: `, ${TRUNCATE_PIPE_IMPORT}` });\n hasEsImport = true;\n }\n }\n }\n }\n }\n\n if (!hasEsImport) {\n const importStatement = `\\nimport { ${TRUNCATE_PIPE_IMPORT} } from '${TRUNCATE_PIPE_PATH}';`;\n edits.push({ start: lastImportEnd, end: lastImportEnd, replacement: importStatement });\n }\n\n // 2. Add EuiTruncatePipe to @Component imports array\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node)) {\n const decs = ts.getDecorators(node);\n if (!decs) return;\n for (const dec of decs) {\n if (!ts.isCallExpression(dec.expression) || !ts.isIdentifier(dec.expression.expression) || dec.expression.expression.text !== 'Component') continue;\n const metadata = dec.expression.arguments[0];\n if (!ts.isObjectLiteralExpression(metadata)) continue;\n for (const prop of metadata.properties) {\n if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name) || prop.name.text !== 'imports') continue;\n if (!ts.isArrayLiteralExpression(prop.initializer)) continue;\n const arr = prop.initializer;\n const arrText = source.slice(arr.getStart(sourceFile), arr.getEnd());\n if (arrText.includes(TRUNCATE_PIPE_IMPORT)) continue;\n if (arr.elements.length > 0) {\n const lastElement = arr.elements[arr.elements.length - 1];\n edits.push({ start: lastElement.getEnd(), end: lastElement.getEnd(), replacement: `,\\n ${TRUNCATE_PIPE_IMPORT}` });\n } else {\n edits.push({ start: arr.getStart(sourceFile) + 1, end: arr.getEnd() - 1, replacement: TRUNCATE_PIPE_IMPORT });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: Edit[] = [];\n\n visitNodes(parsed.nodes, source, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: Edit[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(CHIP_LIST_TAG) && !rawTemplate.includes(CHIP_LIST_ATTR)) {\n ts.forEachChild(node, visit);\n return;\n }\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, replacement: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n return applyEdits(source, changes);\n}\n\nfunction visitNodes(nodes: TmplAstNode[], source: string, edits: Edit[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isChipListElement(node)) {\n migrateChipListElement(node, source, edits);\n }\n visitNodes(node.children, source, edits);\n }\n }\n}\n\nfunction isChipListElement(element: TmplAstElement): boolean {\n if (element.name === CHIP_LIST_TAG) return true;\n return element.attributes.some((a) => a.name === CHIP_LIST_ATTR);\n}\n\nfunction isChipElement(element: TmplAstElement): boolean {\n if (element.name === CHIP_TAG) return true;\n return element.attributes.some((a) => a.name === CHIP_ATTR);\n}\n\nfunction findChildChips(nodes: TmplAstNode[]): TmplAstElement[] {\n const chips: TmplAstElement[] = [];\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (isChipElement(node)) {\n chips.push(node);\n } else {\n chips.push(...findChildChips(node.children));\n }\n }\n }\n return chips;\n}\n\nfunction migrateChipListElement(element: TmplAstElement, source: string, edits: Edit[]): void {\n const childChips = findChildChips(element.children);\n const insertions: string[] = [];\n let truncateValue: string | null = null;\n\n // Collect and remove propagated static attributes\n for (const attr of element.attributes) {\n if (PROPAGATED_INPUTS.has(attr.name)) {\n edits.push(removalEdit(attr, source));\n insertions.push(attr.value ? `${attr.name}=\"${attr.value}\"` : attr.name);\n }\n if (attr.name === 'isChipsRemovable') {\n edits.push(removalEdit(attr, source));\n insertions.push('isChipRemovable');\n }\n if (attr.name === 'chipsLabelTruncateCount') {\n edits.push(removalEdit(attr, source));\n truncateValue = attr.value || null;\n }\n if (REMOVED_INPUTS.has(attr.name)) {\n edits.push(removalEdit(attr, source));\n }\n }\n\n // Collect and remove propagated bound inputs\n for (const input of element.inputs) {\n if (PROPAGATED_INPUTS.has(input.name)) {\n edits.push(removalEdit(input, source));\n const raw = source.slice(input.sourceSpan.start.offset, input.sourceSpan.end.offset);\n insertions.push(raw);\n }\n if (input.name === 'isChipsRemovable') {\n edits.push(removalEdit(input, source));\n const valueText = extractBindingValue(input, source);\n insertions.push(`[isChipRemovable]=\"${valueText}\"`);\n }\n if (input.name === 'chipsLabelTruncateCount') {\n edits.push(removalEdit(input, source));\n truncateValue = extractBindingValue(input, source);\n }\n if (REMOVED_INPUTS.has(input.name)) {\n edits.push(removalEdit(input, source));\n }\n }\n\n // Collect and remove (chipRemove) output\n let chipRemoveHandler: string | null = null;\n for (const output of element.outputs) {\n if (output.name === 'chipRemove') {\n edits.push(removalEdit(output, source));\n chipRemoveHandler = extractHandlerExpression(output, source);\n }\n }\n\n if (chipRemoveHandler) {\n insertions.push(`(remove)=\"${chipRemoveHandler}\"`);\n }\n\n // Add collected attributes to each child eui-chip\n if (insertions.length > 0) {\n for (const chip of childChips) {\n const existingNames = getExistingAttrNames(chip);\n const toInsert = insertions.filter((ins) => {\n const name = extractAttrName(ins);\n return !existingNames.has(name);\n });\n if (toInsert.length > 0) {\n const insertPos = chip.startSourceSpan.end.offset - 1;\n edits.push({ start: insertPos, end: insertPos, replacement: ' ' + toInsert.join(' ') });\n }\n }\n }\n\n // Add euiTruncate pipe to chip label content\n if (truncateValue) {\n for (const chip of childChips) {\n const labelEdit = buildTruncatePipeEdit(chip, source, truncateValue);\n if (labelEdit) edits.push(labelEdit);\n }\n }\n}\n\nfunction buildTruncatePipeEdit(chip: TmplAstElement, source: string, truncateValue: string): Edit | null {\n // Find <span euiLabel>...</span> inside the chip\n const labelEl = findLabelElement(chip.children);\n if (labelEl && labelEl.endSourceSpan) {\n const contentStart = labelEl.startSourceSpan.end.offset;\n const contentEnd = labelEl.endSourceSpan.start.offset;\n const content = source.slice(contentStart, contentEnd);\n if (content && !content.includes('euiTruncate')) {\n const trimmed = content.trim();\n const interpMatch = trimmed.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (interpMatch) {\n return { start: contentStart, end: contentEnd, replacement: `{{ ${interpMatch[1]} | euiTruncate: ${truncateValue} }}` };\n }\n return { start: contentStart, end: contentEnd, replacement: `{{ '${trimmed}' | euiTruncate: ${truncateValue} }}` };\n }\n }\n\n // Check direct text content inside chip (no label element)\n if (chip.endSourceSpan) {\n const chipContentStart = chip.startSourceSpan.end.offset;\n const chipContentEnd = chip.endSourceSpan.start.offset;\n const chipContent = source.slice(chipContentStart, chipContentEnd);\n const trimmed = chipContent.trim();\n const interpMatch = trimmed.match(/^\\{\\{\\s*(.+?)\\s*\\}\\}$/);\n if (interpMatch && !chipContent.includes('euiTruncate')) {\n return { start: chipContentStart, end: chipContentEnd, replacement: `{{ ${interpMatch[1]} | euiTruncate: ${truncateValue} }}` };\n }\n }\n return null;\n}\n\nfunction findLabelElement(nodes: TmplAstNode[]): TmplAstElement | null {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.attributes.some((a) => a.name === 'euiLabel')) return node;\n const nested = findLabelElement(node.children);\n if (nested) return nested;\n }\n }\n return null;\n}\n\nfunction getExistingAttrNames(element: TmplAstElement): Set<string> {\n const names = new Set<string>();\n for (const attr of element.attributes) names.add(attr.name);\n for (const input of element.inputs) names.add(input.name);\n for (const output of element.outputs) names.add(output.name);\n return names;\n}\n\nfunction extractAttrName(insertion: string): string {\n const outputMatch = insertion.match(/^\\(([^)]+)\\)/);\n if (outputMatch) return outputMatch[1];\n const inputMatch = insertion.match(/^\\[([^\\]]+)\\]/);\n if (inputMatch) return inputMatch[1];\n return insertion.split('=')[0];\n}\n\nfunction removalEdit(node: TmplAstTextAttribute | TmplAstBoundAttribute | TmplAstBoundEvent, source: string): Edit {\n let start = node.sourceSpan.start.offset;\n while (start > 0 && (source[start - 1] === ' ' || source[start - 1] === '\\t')) {\n start--;\n }\n return { start, end: node.sourceSpan.end.offset, replacement: '' };\n}\n\nfunction extractBindingValue(input: TmplAstBoundAttribute, source: string): string {\n const raw = source.slice(input.sourceSpan.start.offset, input.sourceSpan.end.offset);\n const match = raw.match(/=[\"']([^\"']*)[\"']/);\n return match ? match[1] : 'true';\n}\n\nfunction extractHandlerExpression(output: TmplAstBoundEvent, source: string): string {\n const raw = source.slice(output.sourceSpan.start.offset, output.sourceSpan.end.offset);\n const match = raw.match(/=[\"']([^\"']*)[\"']/);\n return match ? match[1] : '';\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction applyEdits(source: string, edits: Edit[]): string {\n const unique = deduplicateEdits(edits);\n let result = source;\n for (const edit of unique.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n\nfunction deduplicateEdits(edits: Edit[]): Edit[] {\n const seen = new Map<string, Edit>();\n for (const edit of edits) {\n seen.set(`${edit.start}:${edit.end}`, edit);\n }\n return Array.from(seen.values());\n}\n",
2489
2489
  "displayName": "Schema",
2490
2490
  "properties": [
2491
2491
  {
@@ -2497,7 +2497,7 @@
2497
2497
  "indexKey": "",
2498
2498
  "optional": true,
2499
2499
  "description": "",
2500
- "line": 8,
2500
+ "line": 28,
2501
2501
  "rawdescription": "\n"
2502
2502
  },
2503
2503
  {
@@ -2509,7 +2509,7 @@
2509
2509
  "indexKey": "",
2510
2510
  "optional": true,
2511
2511
  "description": "",
2512
- "line": 7,
2512
+ "line": 27,
2513
2513
  "rawdescription": "\n"
2514
2514
  }
2515
2515
  ],
@@ -2574,12 +2574,12 @@
2574
2574
  },
2575
2575
  {
2576
2576
  "name": "Schema",
2577
- "id": "interface-Schema-0ee574e11dd651dd971057cb66220845e5b87b2949c69c623c8ddf7355af92a396c58c237a52a05f18c22a5332a2695b717bcfeb8ea840c4e7df8d0084c2b49c-11",
2578
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
2577
+ "id": "interface-Schema-375dc0924084a2acbafe4a6a32577d59f631c9a386d151180d8fb1c89e7e7cd23da9fd459e597592ed823692adb6ad2633c50baf16621f003246e8c9bb1c6ce0-11",
2578
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
2579
2579
  "deprecated": false,
2580
2580
  "deprecationMessage": "",
2581
2581
  "type": "interface",
2582
- "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst COMPONENT_TAG = 'eui-fieldset';\nconst OLD_NAME = 'iconSvgType';\nconst NEW_NAME = 'iconSvgName';\n\nexport function migrateEuiFieldset(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(COMPONENT_TAG)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' → '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS property access usages (merged from warnTsUsages)\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts') && original.includes(OLD_NAME)) {\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"${OLD_NAME}\" has been renamed to \"${NEW_NAME}\" on ${COMPONENT_TAG}. Update this reference manually.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Renamed '${OLD_NAME}' → '${NEW_NAME}' on ${COMPONENT_TAG} in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(COMPONENT_TAG)) {\n ts.forEachChild(node, visit); return; \n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === COMPONENT_TAG) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n if (attr.name === OLD_NAME) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n for (const input of element.inputs) {\n if (input.name === OLD_NAME) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2582
+ "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\nconst COMPONENT_TAG = 'eui-editor';\nconst OLD_NAME = 'onEditorChanged';\nconst NEW_NAME = 'contentChange';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nexport function migrateEuiEditor(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n\n if (path.endsWith('.html')) {\n if (!original.includes(COMPONENT_TAG)) return;\n const result = migrateTemplate(original);\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' → '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n return;\n }\n\n // .ts file handle both migration and warnings in one pass\n const hasTag = original.includes(COMPONENT_TAG);\n const hasOldName = original.includes(OLD_NAME);\n if (!hasTag && !hasOldName) return;\n\n if (hasTag) {\n const result = migrateInlineTemplates(original);\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n }\n\n // Warn about TS property access usages (skip spec files)\n if (hasOldName && !path.endsWith('.spec.ts')) {\n warnPropertyAccesses(path, original, context);\n }\n });\n\n context.logger.info(`Renamed '(${OLD_NAME})' → '(${NEW_NAME})' on ${COMPONENT_TAG} in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(COMPONENT_TAG)) {\n ts.forEachChild(node, visit); return;\n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction warnPropertyAccesses(path: string, source: string, context: SchematicContext): void {\n const sourceFile = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"${OLD_NAME}\" has been renamed to \"${NEW_NAME}\" on ${COMPONENT_TAG}. Update this reference manually.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === COMPONENT_TAG) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const output of element.outputs) {\n if (output.name === OLD_NAME) {\n edits.push({ start: output.keySpan!.start.offset, end: output.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2583
2583
  "displayName": "Schema",
2584
2584
  "properties": [
2585
2585
  {
@@ -2591,7 +2591,7 @@
2591
2591
  "indexKey": "",
2592
2592
  "optional": true,
2593
2593
  "description": "",
2594
- "line": 8,
2594
+ "line": 12,
2595
2595
  "rawdescription": "\n"
2596
2596
  },
2597
2597
  {
@@ -2603,7 +2603,7 @@
2603
2603
  "indexKey": "",
2604
2604
  "optional": true,
2605
2605
  "description": "",
2606
- "line": 7,
2606
+ "line": 11,
2607
2607
  "rawdescription": "\n"
2608
2608
  }
2609
2609
  ],
@@ -2621,12 +2621,12 @@
2621
2621
  },
2622
2622
  {
2623
2623
  "name": "Schema",
2624
- "id": "interface-Schema-b3ff4600c4a5ca1888c45e5baf3600fa6dc6477f1e473e5241ff6682e2929dc8950a5dfa8b1048a348dba7ad1f0ce8cc3681471933911b689e04713334ef4811-12",
2625
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
2624
+ "id": "interface-Schema-0ee574e11dd651dd971057cb66220845e5b87b2949c69c623c8ddf7355af92a396c58c237a52a05f18c22a5332a2695b717bcfeb8ea840c4e7df8d0084c2b49c-12",
2625
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
2626
2626
  "deprecated": false,
2627
2627
  "deprecationMessage": "",
2628
2628
  "type": "interface",
2629
- "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst COMPONENT_TAG = 'eui-icon-svg';\n\nconst INPUT_RENAMES = new Map([\n ['variant', 'fillColor'],\n ['aria-label', 'ariaLabel'],\n]);\n\nconst TS_PROPERTY_RENAMES = new Map([\n ['variant', 'fillColor'],\n]);\n\nexport function migrateEuiIconSvg(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(COMPONENT_TAG)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n result = renameTsPropertyAccesses(result);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename deprecated inputs in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n });\n\n context.logger.info(`Migrated eui-icon-svg inputs in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(COMPONENT_TAG)) {\n ts.forEachChild(node, visit);\n return;\n }\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) {\n changes.push({ start, end, text: migrated });\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction renameTsPropertyAccesses(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && TS_PROPERTY_RENAMES.has(node.name.text)) {\n edits.push({ start: node.name.getStart(sourceFile), end: node.name.getEnd(), replacement: TS_PROPERTY_RENAMES.get(node.name.text)! });\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n return applyEdits(source, edits);\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === COMPONENT_TAG) {\n collectRenames(node, edits);\n }\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n const newName = INPUT_RENAMES.get(attr.name);\n if (newName) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: newName });\n }\n }\n for (const input of element.inputs) {\n const newName = INPUT_RENAMES.get(input.name);\n if (newName) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: newName });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2629
+ "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst COMPONENT_TAG = 'eui-fieldset';\nconst OLD_NAME = 'iconSvgType';\nconst NEW_NAME = 'iconSvgName';\n\nexport function migrateEuiFieldset(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(COMPONENT_TAG)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n\n // Warn about TS property access usages (merged from warnTsUsages)\n if (path.endsWith('.ts') && !path.endsWith('.spec.ts') && original.includes(OLD_NAME)) {\n const sourceFile = ts.createSourceFile(path, original, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"${OLD_NAME}\" has been renamed to \"${NEW_NAME}\" on ${COMPONENT_TAG}. Update this reference manually.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n }\n });\n\n context.logger.info(`Renamed '${OLD_NAME}' '${NEW_NAME}' on ${COMPONENT_TAG} in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(COMPONENT_TAG)) {\n ts.forEachChild(node, visit); return; \n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === COMPONENT_TAG) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n if (attr.name === OLD_NAME) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n for (const input of element.inputs) {\n if (input.name === OLD_NAME) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2630
2630
  "displayName": "Schema",
2631
2631
  "properties": [
2632
2632
  {
@@ -2668,12 +2668,12 @@
2668
2668
  },
2669
2669
  {
2670
2670
  "name": "Schema",
2671
- "id": "interface-Schema-375dc0924084a2acbafe4a6a32577d59f631c9a386d151180d8fb1c89e7e7cd23da9fd459e597592ed823692adb6ad2633c50baf16621f003246e8c9bb1c6ce0-13",
2672
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
2671
+ "id": "interface-Schema-b3ff4600c4a5ca1888c45e5baf3600fa6dc6477f1e473e5241ff6682e2929dc8950a5dfa8b1048a348dba7ad1f0ce8cc3681471933911b689e04713334ef4811-13",
2672
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
2673
2673
  "deprecated": false,
2674
2674
  "deprecationMessage": "",
2675
2675
  "type": "interface",
2676
- "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\nconst COMPONENT_TAG = 'eui-editor';\nconst OLD_NAME = 'onEditorChanged';\nconst NEW_NAME = 'contentChange';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nexport function migrateEuiEditor(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n\n if (path.endsWith('.html')) {\n if (!original.includes(COMPONENT_TAG)) return;\n const result = migrateTemplate(original);\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' → '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n return;\n }\n\n // .ts file — handle both migration and warnings in one pass\n const hasTag = original.includes(COMPONENT_TAG);\n const hasOldName = original.includes(OLD_NAME);\n if (!hasTag && !hasOldName) return;\n\n if (hasTag) {\n const result = migrateInlineTemplates(original);\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename '${OLD_NAME}' '${NEW_NAME}' in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n }\n\n // Warn about TS property access usages (skip spec files)\n if (hasOldName && !path.endsWith('.spec.ts')) {\n warnPropertyAccesses(path, original, context);\n }\n });\n\n context.logger.info(`Renamed '(${OLD_NAME})' '(${NEW_NAME})' on ${COMPONENT_TAG} in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(COMPONENT_TAG)) {\n ts.forEachChild(node, visit); return;\n}\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) changes.push({ start, end, text: migrated });\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction warnPropertyAccesses(path: string, source: string, context: SchematicContext): void {\n const sourceFile = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && node.name.text === OLD_NAME) {\n const { line } = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n context.logger.warn(`${path}:${line + 1} - \"${OLD_NAME}\" has been renamed to \"${NEW_NAME}\" on ${COMPONENT_TAG}. Update this reference manually.`);\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) current = current.expression;\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === COMPONENT_TAG) collectRenames(node, edits);\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const output of element.outputs) {\n if (output.name === OLD_NAME) {\n edits.push({ start: output.keySpan!.start.offset, end: output.keySpan!.end.offset, replacement: NEW_NAME });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2676
+ "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\nconst COMPONENT_TAG = 'eui-icon-svg';\n\nconst INPUT_RENAMES = new Map([\n ['variant', 'fillColor'],\n ['aria-label', 'ariaLabel'],\n]);\n\nconst TS_PROPERTY_RENAMES = new Map([\n ['variant', 'fillColor'],\n]);\n\nexport function migrateEuiIconSvg(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let count = 0;\n\n const dir = tree.getDir(scanPath || '/');\n visitDir(dir, (path) => {\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n if (!original.includes(COMPONENT_TAG)) return;\n\n let result: string;\n\n if (path.endsWith('.html')) {\n result = migrateTemplate(original);\n } else {\n result = migrateInlineTemplates(original);\n result = renameTsPropertyAccesses(result);\n }\n\n if (result !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would rename deprecated inputs in ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n count++;\n }\n });\n\n context.logger.info(`Migrated eui-icon-svg inputs in ${count} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\nfunction visitDir(dir: DirEntry, callback: (path: string) => void): void {\n for (const file of dir.subfiles) {\n if (file.endsWith('.d.ts')) continue;\n if (!file.endsWith('.html') && !file.endsWith('.ts')) continue;\n callback(`${dir.path}/${file}`);\n }\n for (const sub of dir.subdirs) {\n if (sub === 'node_modules' || sub === 'dist') continue;\n visitDir(dir.dir(sub), callback);\n }\n}\n\nfunction migrateTemplate(source: string): string {\n const parsed = parseTemplate(source, '', { preserveWhitespaces: true });\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n visitNodes(parsed.nodes, edits);\n\n return applyEdits(source, edits);\n}\n\nfunction migrateInlineTemplates(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const changes: { start: number; end: number; text: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAssignment(node) && isTemplateProperty(node) && isComponentMetadataProperty(node)) {\n const init = unwrapExpression(node.initializer);\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n const start = init.getStart(sourceFile) + 1;\n const end = init.getEnd() - 1;\n const rawTemplate = source.slice(start, end);\n if (!rawTemplate.includes(COMPONENT_TAG)) {\n ts.forEachChild(node, visit);\n return;\n }\n const migrated = migrateTemplate(rawTemplate);\n if (migrated !== rawTemplate) {\n changes.push({ start, end, text: migrated });\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n let result = source;\n for (const change of changes.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, change.start) + change.text + result.slice(change.end);\n }\n return result;\n}\n\nfunction renameTsPropertyAccesses(source: string): string {\n const sourceFile = ts.createSourceFile('', source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const edits: { start: number; end: number; replacement: string }[] = [];\n\n const visit = (node: ts.Node): void => {\n if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && TS_PROPERTY_RENAMES.has(node.name.text)) {\n edits.push({ start: node.name.getStart(sourceFile), end: node.name.getEnd(), replacement: TS_PROPERTY_RENAMES.get(node.name.text)! });\n }\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n\n return applyEdits(source, edits);\n}\n\nfunction isTemplateProperty(node: ts.PropertyAssignment): boolean {\n const name = node.name;\n return (ts.isIdentifier(name) && name.text === 'template') || (ts.isStringLiteral(name) && name.text === 'template');\n}\n\nfunction isComponentMetadataProperty(node: ts.PropertyAssignment): boolean {\n const objectLiteral = node.parent;\n if (!ts.isObjectLiteralExpression(objectLiteral)) return false;\n const callExpression = objectLiteral.parent;\n if (!ts.isCallExpression(callExpression) || callExpression.arguments[0] !== objectLiteral) return false;\n return ts.isDecorator(callExpression.parent) && ts.isIdentifier(callExpression.expression) && callExpression.expression.text === 'Component';\n}\n\nfunction unwrapExpression(expression: ts.Expression): ts.Expression {\n let current = expression;\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\nfunction visitNodes(nodes: TmplAstNode[], edits: { start: number; end: number; replacement: string }[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.name === COMPONENT_TAG) {\n collectRenames(node, edits);\n }\n visitNodes(node.children, edits);\n }\n }\n}\n\nfunction collectRenames(element: TmplAstElement, edits: { start: number; end: number; replacement: string }[]): void {\n for (const attr of element.attributes) {\n const newName = INPUT_RENAMES.get(attr.name);\n if (newName) {\n edits.push({ start: attr.keySpan!.start.offset, end: attr.keySpan!.end.offset, replacement: newName });\n }\n }\n for (const input of element.inputs) {\n const newName = INPUT_RENAMES.get(input.name);\n if (newName) {\n edits.push({ start: input.keySpan!.start.offset, end: input.keySpan!.end.offset, replacement: newName });\n }\n }\n}\n\nfunction applyEdits(source: string, edits: { start: number; end: number; replacement: string }[]): string {\n let result = source;\n for (const edit of edits.sort((a, b) => b.start - a.start)) {\n result = result.slice(0, edit.start) + edit.replacement + result.slice(edit.end);\n }\n return result;\n}\n",
2677
2677
  "displayName": "Schema",
2678
2678
  "properties": [
2679
2679
  {
@@ -2685,7 +2685,7 @@
2685
2685
  "indexKey": "",
2686
2686
  "optional": true,
2687
2687
  "description": "",
2688
- "line": 12,
2688
+ "line": 8,
2689
2689
  "rawdescription": "\n"
2690
2690
  },
2691
2691
  {
@@ -2697,7 +2697,7 @@
2697
2697
  "indexKey": "",
2698
2698
  "optional": true,
2699
2699
  "description": "",
2700
- "line": 11,
2700
+ "line": 7,
2701
2701
  "rawdescription": "\n"
2702
2702
  }
2703
2703
  ],
@@ -22104,34 +22104,34 @@
22104
22104
  "name": "COMPONENT_TAG",
22105
22105
  "ctype": "miscellaneous",
22106
22106
  "subtype": "variable",
22107
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
22107
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
22108
22108
  "coverageIgnore": false,
22109
22109
  "deprecated": false,
22110
22110
  "deprecationMessage": "",
22111
22111
  "type": "string",
22112
- "defaultValue": "'eui-fieldset'"
22112
+ "defaultValue": "'eui-editor'"
22113
22113
  },
22114
22114
  {
22115
22115
  "name": "COMPONENT_TAG",
22116
22116
  "ctype": "miscellaneous",
22117
22117
  "subtype": "variable",
22118
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
22118
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
22119
22119
  "coverageIgnore": false,
22120
22120
  "deprecated": false,
22121
22121
  "deprecationMessage": "",
22122
22122
  "type": "string",
22123
- "defaultValue": "'eui-icon-svg'"
22123
+ "defaultValue": "'eui-fieldset'"
22124
22124
  },
22125
22125
  {
22126
22126
  "name": "COMPONENT_TAG",
22127
22127
  "ctype": "miscellaneous",
22128
22128
  "subtype": "variable",
22129
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
22129
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
22130
22130
  "coverageIgnore": false,
22131
22131
  "deprecated": false,
22132
22132
  "deprecationMessage": "",
22133
22133
  "type": "string",
22134
- "defaultValue": "'eui-editor'"
22134
+ "defaultValue": "'eui-icon-svg'"
22135
22135
  },
22136
22136
  {
22137
22137
  "name": "COMPONENT_TAG",
@@ -23043,23 +23043,23 @@
23043
23043
  "name": "NEW_NAME",
23044
23044
  "ctype": "miscellaneous",
23045
23045
  "subtype": "variable",
23046
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
23046
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
23047
23047
  "coverageIgnore": false,
23048
23048
  "deprecated": false,
23049
23049
  "deprecationMessage": "",
23050
23050
  "type": "string",
23051
- "defaultValue": "'iconSvgName'"
23051
+ "defaultValue": "'contentChange'"
23052
23052
  },
23053
23053
  {
23054
23054
  "name": "NEW_NAME",
23055
23055
  "ctype": "miscellaneous",
23056
23056
  "subtype": "variable",
23057
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
23057
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
23058
23058
  "coverageIgnore": false,
23059
23059
  "deprecated": false,
23060
23060
  "deprecationMessage": "",
23061
23061
  "type": "string",
23062
- "defaultValue": "'contentChange'"
23062
+ "defaultValue": "'iconSvgName'"
23063
23063
  },
23064
23064
  {
23065
23065
  "name": "NEW_NAME",
@@ -23188,23 +23188,23 @@
23188
23188
  "name": "OLD_NAME",
23189
23189
  "ctype": "miscellaneous",
23190
23190
  "subtype": "variable",
23191
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
23191
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
23192
23192
  "coverageIgnore": false,
23193
23193
  "deprecated": false,
23194
23194
  "deprecationMessage": "",
23195
23195
  "type": "string",
23196
- "defaultValue": "'iconSvgType'"
23196
+ "defaultValue": "'onEditorChanged'"
23197
23197
  },
23198
23198
  {
23199
23199
  "name": "OLD_NAME",
23200
23200
  "ctype": "miscellaneous",
23201
23201
  "subtype": "variable",
23202
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
23202
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
23203
23203
  "coverageIgnore": false,
23204
23204
  "deprecated": false,
23205
23205
  "deprecationMessage": "",
23206
23206
  "type": "string",
23207
- "defaultValue": "'onEditorChanged'"
23207
+ "defaultValue": "'iconSvgType'"
23208
23208
  },
23209
23209
  {
23210
23210
  "name": "OLD_NAME",
@@ -24203,7 +24203,7 @@
24203
24203
  },
24204
24204
  {
24205
24205
  "name": "applyEdits",
24206
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
24206
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
24207
24207
  "ctype": "miscellaneous",
24208
24208
  "subtype": "function",
24209
24209
  "coverageIgnore": false,
@@ -24248,7 +24248,7 @@
24248
24248
  },
24249
24249
  {
24250
24250
  "name": "applyEdits",
24251
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
24251
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
24252
24252
  "ctype": "miscellaneous",
24253
24253
  "subtype": "function",
24254
24254
  "coverageIgnore": false,
@@ -24293,7 +24293,7 @@
24293
24293
  },
24294
24294
  {
24295
24295
  "name": "applyEdits",
24296
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
24296
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
24297
24297
  "ctype": "miscellaneous",
24298
24298
  "subtype": "function",
24299
24299
  "coverageIgnore": false,
@@ -24338,7 +24338,7 @@
24338
24338
  },
24339
24339
  {
24340
24340
  "name": "applyEdits",
24341
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
24341
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
24342
24342
  "ctype": "miscellaneous",
24343
24343
  "subtype": "function",
24344
24344
  "coverageIgnore": false,
@@ -24383,7 +24383,7 @@
24383
24383
  },
24384
24384
  {
24385
24385
  "name": "applyEdits",
24386
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
24386
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
24387
24387
  "ctype": "miscellaneous",
24388
24388
  "subtype": "function",
24389
24389
  "coverageIgnore": false,
@@ -25875,7 +25875,7 @@
25875
25875
  },
25876
25876
  {
25877
25877
  "name": "collectRenames",
25878
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
25878
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
25879
25879
  "ctype": "miscellaneous",
25880
25880
  "subtype": "function",
25881
25881
  "coverageIgnore": false,
@@ -25920,7 +25920,7 @@
25920
25920
  },
25921
25921
  {
25922
25922
  "name": "collectRenames",
25923
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
25923
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
25924
25924
  "ctype": "miscellaneous",
25925
25925
  "subtype": "function",
25926
25926
  "coverageIgnore": false,
@@ -25965,7 +25965,7 @@
25965
25965
  },
25966
25966
  {
25967
25967
  "name": "collectRenames",
25968
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
25968
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
25969
25969
  "ctype": "miscellaneous",
25970
25970
  "subtype": "function",
25971
25971
  "coverageIgnore": false,
@@ -29201,7 +29201,7 @@
29201
29201
  },
29202
29202
  {
29203
29203
  "name": "isComponentMetadataProperty",
29204
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
29204
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
29205
29205
  "ctype": "miscellaneous",
29206
29206
  "subtype": "function",
29207
29207
  "coverageIgnore": false,
@@ -29231,7 +29231,7 @@
29231
29231
  },
29232
29232
  {
29233
29233
  "name": "isComponentMetadataProperty",
29234
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
29234
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
29235
29235
  "ctype": "miscellaneous",
29236
29236
  "subtype": "function",
29237
29237
  "coverageIgnore": false,
@@ -29261,7 +29261,7 @@
29261
29261
  },
29262
29262
  {
29263
29263
  "name": "isComponentMetadataProperty",
29264
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
29264
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
29265
29265
  "ctype": "miscellaneous",
29266
29266
  "subtype": "function",
29267
29267
  "coverageIgnore": false,
@@ -29291,7 +29291,7 @@
29291
29291
  },
29292
29292
  {
29293
29293
  "name": "isComponentMetadataProperty",
29294
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
29294
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
29295
29295
  "ctype": "miscellaneous",
29296
29296
  "subtype": "function",
29297
29297
  "coverageIgnore": false,
@@ -29321,7 +29321,7 @@
29321
29321
  },
29322
29322
  {
29323
29323
  "name": "isComponentMetadataProperty",
29324
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
29324
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
29325
29325
  "ctype": "miscellaneous",
29326
29326
  "subtype": "function",
29327
29327
  "coverageIgnore": false,
@@ -29746,7 +29746,7 @@
29746
29746
  },
29747
29747
  {
29748
29748
  "name": "isTemplateProperty",
29749
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
29749
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
29750
29750
  "ctype": "miscellaneous",
29751
29751
  "subtype": "function",
29752
29752
  "coverageIgnore": false,
@@ -29776,7 +29776,7 @@
29776
29776
  },
29777
29777
  {
29778
29778
  "name": "isTemplateProperty",
29779
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
29779
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
29780
29780
  "ctype": "miscellaneous",
29781
29781
  "subtype": "function",
29782
29782
  "coverageIgnore": false,
@@ -29806,7 +29806,7 @@
29806
29806
  },
29807
29807
  {
29808
29808
  "name": "isTemplateProperty",
29809
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
29809
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
29810
29810
  "ctype": "miscellaneous",
29811
29811
  "subtype": "function",
29812
29812
  "coverageIgnore": false,
@@ -29836,7 +29836,7 @@
29836
29836
  },
29837
29837
  {
29838
29838
  "name": "isTemplateProperty",
29839
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
29839
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
29840
29840
  "ctype": "miscellaneous",
29841
29841
  "subtype": "function",
29842
29842
  "coverageIgnore": false,
@@ -29866,7 +29866,7 @@
29866
29866
  },
29867
29867
  {
29868
29868
  "name": "isTemplateProperty",
29869
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
29869
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
29870
29870
  "ctype": "miscellaneous",
29871
29871
  "subtype": "function",
29872
29872
  "coverageIgnore": false,
@@ -31548,7 +31548,7 @@
31548
31548
  },
31549
31549
  {
31550
31550
  "name": "migrateInlineTemplates",
31551
- "file": "packages/core/schematics/migrate-eui-alert/index.ts",
31551
+ "file": "packages/core/schematics/migrate-eui-accent/index.ts",
31552
31552
  "ctype": "miscellaneous",
31553
31553
  "subtype": "function",
31554
31554
  "coverageIgnore": false,
@@ -31580,7 +31580,7 @@
31580
31580
  },
31581
31581
  {
31582
31582
  "name": "migrateInlineTemplates",
31583
- "file": "packages/core/schematics/migrate-eui-accent/index.ts",
31583
+ "file": "packages/core/schematics/migrate-eui-alert/index.ts",
31584
31584
  "ctype": "miscellaneous",
31585
31585
  "subtype": "function",
31586
31586
  "coverageIgnore": false,
@@ -31644,7 +31644,7 @@
31644
31644
  },
31645
31645
  {
31646
31646
  "name": "migrateInlineTemplates",
31647
- "file": "packages/core/schematics/migrate-eui-chip/index.ts",
31647
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
31648
31648
  "ctype": "miscellaneous",
31649
31649
  "subtype": "function",
31650
31650
  "coverageIgnore": false,
@@ -31676,7 +31676,7 @@
31676
31676
  },
31677
31677
  {
31678
31678
  "name": "migrateInlineTemplates",
31679
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
31679
+ "file": "packages/core/schematics/migrate-eui-chip/index.ts",
31680
31680
  "ctype": "miscellaneous",
31681
31681
  "subtype": "function",
31682
31682
  "coverageIgnore": false,
@@ -31708,7 +31708,7 @@
31708
31708
  },
31709
31709
  {
31710
31710
  "name": "migrateInlineTemplates",
31711
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
31711
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
31712
31712
  "ctype": "miscellaneous",
31713
31713
  "subtype": "function",
31714
31714
  "coverageIgnore": false,
@@ -31772,7 +31772,7 @@
31772
31772
  },
31773
31773
  {
31774
31774
  "name": "migrateInlineTemplates",
31775
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
31775
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
31776
31776
  "ctype": "miscellaneous",
31777
31777
  "subtype": "function",
31778
31778
  "coverageIgnore": false,
@@ -31804,7 +31804,7 @@
31804
31804
  },
31805
31805
  {
31806
31806
  "name": "migrateInlineTemplates",
31807
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
31807
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
31808
31808
  "ctype": "miscellaneous",
31809
31809
  "subtype": "function",
31810
31810
  "coverageIgnore": false,
@@ -31836,7 +31836,7 @@
31836
31836
  },
31837
31837
  {
31838
31838
  "name": "migrateInlineTemplates",
31839
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
31839
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
31840
31840
  "ctype": "miscellaneous",
31841
31841
  "subtype": "function",
31842
31842
  "coverageIgnore": false,
@@ -32088,7 +32088,7 @@
32088
32088
  },
32089
32089
  {
32090
32090
  "name": "migrateTemplate",
32091
- "file": "packages/core/schematics/migrate-eui-alert/index.ts",
32091
+ "file": "packages/core/schematics/migrate-eui-accent/index.ts",
32092
32092
  "ctype": "miscellaneous",
32093
32093
  "subtype": "function",
32094
32094
  "coverageIgnore": false,
@@ -32120,7 +32120,7 @@
32120
32120
  },
32121
32121
  {
32122
32122
  "name": "migrateTemplate",
32123
- "file": "packages/core/schematics/migrate-eui-accent/index.ts",
32123
+ "file": "packages/core/schematics/migrate-eui-alert/index.ts",
32124
32124
  "ctype": "miscellaneous",
32125
32125
  "subtype": "function",
32126
32126
  "coverageIgnore": false,
@@ -32184,7 +32184,7 @@
32184
32184
  },
32185
32185
  {
32186
32186
  "name": "migrateTemplate",
32187
- "file": "packages/core/schematics/migrate-eui-chip/index.ts",
32187
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
32188
32188
  "ctype": "miscellaneous",
32189
32189
  "subtype": "function",
32190
32190
  "coverageIgnore": false,
@@ -32216,7 +32216,7 @@
32216
32216
  },
32217
32217
  {
32218
32218
  "name": "migrateTemplate",
32219
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
32219
+ "file": "packages/core/schematics/migrate-eui-chip/index.ts",
32220
32220
  "ctype": "miscellaneous",
32221
32221
  "subtype": "function",
32222
32222
  "coverageIgnore": false,
@@ -32248,7 +32248,7 @@
32248
32248
  },
32249
32249
  {
32250
32250
  "name": "migrateTemplate",
32251
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
32251
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
32252
32252
  "ctype": "miscellaneous",
32253
32253
  "subtype": "function",
32254
32254
  "coverageIgnore": false,
@@ -32312,7 +32312,7 @@
32312
32312
  },
32313
32313
  {
32314
32314
  "name": "migrateTemplate",
32315
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
32315
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
32316
32316
  "ctype": "miscellaneous",
32317
32317
  "subtype": "function",
32318
32318
  "coverageIgnore": false,
@@ -32344,7 +32344,7 @@
32344
32344
  },
32345
32345
  {
32346
32346
  "name": "migrateTemplate",
32347
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
32347
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
32348
32348
  "ctype": "miscellaneous",
32349
32349
  "subtype": "function",
32350
32350
  "coverageIgnore": false,
@@ -32376,7 +32376,7 @@
32376
32376
  },
32377
32377
  {
32378
32378
  "name": "migrateTemplate",
32379
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
32379
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
32380
32380
  "ctype": "miscellaneous",
32381
32381
  "subtype": "function",
32382
32382
  "coverageIgnore": false,
@@ -34348,7 +34348,7 @@
34348
34348
  },
34349
34349
  {
34350
34350
  "name": "unwrapExpression",
34351
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
34351
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
34352
34352
  "ctype": "miscellaneous",
34353
34353
  "subtype": "function",
34354
34354
  "coverageIgnore": false,
@@ -34378,7 +34378,7 @@
34378
34378
  },
34379
34379
  {
34380
34380
  "name": "unwrapExpression",
34381
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
34381
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
34382
34382
  "ctype": "miscellaneous",
34383
34383
  "subtype": "function",
34384
34384
  "coverageIgnore": false,
@@ -34408,7 +34408,7 @@
34408
34408
  },
34409
34409
  {
34410
34410
  "name": "unwrapExpression",
34411
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
34411
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
34412
34412
  "ctype": "miscellaneous",
34413
34413
  "subtype": "function",
34414
34414
  "coverageIgnore": false,
@@ -34438,7 +34438,7 @@
34438
34438
  },
34439
34439
  {
34440
34440
  "name": "unwrapExpression",
34441
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
34441
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
34442
34442
  "ctype": "miscellaneous",
34443
34443
  "subtype": "function",
34444
34444
  "coverageIgnore": false,
@@ -34468,7 +34468,7 @@
34468
34468
  },
34469
34469
  {
34470
34470
  "name": "unwrapExpression",
34471
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
34471
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
34472
34472
  "ctype": "miscellaneous",
34473
34473
  "subtype": "function",
34474
34474
  "coverageIgnore": false,
@@ -34931,7 +34931,7 @@
34931
34931
  },
34932
34932
  {
34933
34933
  "name": "visitDir",
34934
- "file": "packages/core/schematics/migrate-eui-alert/index.ts",
34934
+ "file": "packages/core/schematics/migrate-eui-accent/index.ts",
34935
34935
  "ctype": "miscellaneous",
34936
34936
  "subtype": "function",
34937
34937
  "coverageIgnore": false,
@@ -34976,7 +34976,7 @@
34976
34976
  },
34977
34977
  {
34978
34978
  "name": "visitDir",
34979
- "file": "packages/core/schematics/migrate-eui-accent/index.ts",
34979
+ "file": "packages/core/schematics/migrate-eui-alert/index.ts",
34980
34980
  "ctype": "miscellaneous",
34981
34981
  "subtype": "function",
34982
34982
  "coverageIgnore": false,
@@ -35066,7 +35066,7 @@
35066
35066
  },
35067
35067
  {
35068
35068
  "name": "visitDir",
35069
- "file": "packages/core/schematics/migrate-eui-chip/index.ts",
35069
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
35070
35070
  "ctype": "miscellaneous",
35071
35071
  "subtype": "function",
35072
35072
  "coverageIgnore": false,
@@ -35111,7 +35111,7 @@
35111
35111
  },
35112
35112
  {
35113
35113
  "name": "visitDir",
35114
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
35114
+ "file": "packages/core/schematics/migrate-eui-chip/index.ts",
35115
35115
  "ctype": "miscellaneous",
35116
35116
  "subtype": "function",
35117
35117
  "coverageIgnore": false,
@@ -35156,7 +35156,7 @@
35156
35156
  },
35157
35157
  {
35158
35158
  "name": "visitDir",
35159
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
35159
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
35160
35160
  "ctype": "miscellaneous",
35161
35161
  "subtype": "function",
35162
35162
  "coverageIgnore": false,
@@ -35246,7 +35246,7 @@
35246
35246
  },
35247
35247
  {
35248
35248
  "name": "visitDir",
35249
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
35249
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
35250
35250
  "ctype": "miscellaneous",
35251
35251
  "subtype": "function",
35252
35252
  "coverageIgnore": false,
@@ -35291,7 +35291,7 @@
35291
35291
  },
35292
35292
  {
35293
35293
  "name": "visitDir",
35294
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
35294
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
35295
35295
  "ctype": "miscellaneous",
35296
35296
  "subtype": "function",
35297
35297
  "coverageIgnore": false,
@@ -35336,7 +35336,7 @@
35336
35336
  },
35337
35337
  {
35338
35338
  "name": "visitDir",
35339
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
35339
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
35340
35340
  "ctype": "miscellaneous",
35341
35341
  "subtype": "function",
35342
35342
  "coverageIgnore": false,
@@ -35784,49 +35784,6 @@
35784
35784
  }
35785
35785
  ]
35786
35786
  },
35787
- {
35788
- "name": "visitNodes",
35789
- "file": "packages/core/schematics/migrate-eui-alert/index.ts",
35790
- "ctype": "miscellaneous",
35791
- "subtype": "function",
35792
- "coverageIgnore": false,
35793
- "deprecated": false,
35794
- "deprecationMessage": "",
35795
- "rawdescription": "",
35796
- "description": "",
35797
- "displayName": "visitNodes",
35798
- "args": [
35799
- {
35800
- "name": "nodes",
35801
- "deprecated": false,
35802
- "deprecationMessage": ""
35803
- },
35804
- {
35805
- "name": "removals",
35806
- "deprecated": false,
35807
- "deprecationMessage": ""
35808
- }
35809
- ],
35810
- "returnType": "void",
35811
- "jsdoctags": [
35812
- {
35813
- "name": "nodes",
35814
- "deprecated": false,
35815
- "deprecationMessage": "",
35816
- "tagName": {
35817
- "text": "param"
35818
- }
35819
- },
35820
- {
35821
- "name": "removals",
35822
- "deprecated": false,
35823
- "deprecationMessage": "",
35824
- "tagName": {
35825
- "text": "param"
35826
- }
35827
- }
35828
- ]
35829
- },
35830
35787
  {
35831
35788
  "name": "visitNodes",
35832
35789
  "file": "packages/core/schematics/migrate-eui-accent/index.ts",
@@ -35872,50 +35829,7 @@
35872
35829
  },
35873
35830
  {
35874
35831
  "name": "visitNodes",
35875
- "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
35876
- "ctype": "miscellaneous",
35877
- "subtype": "function",
35878
- "coverageIgnore": false,
35879
- "deprecated": false,
35880
- "deprecationMessage": "",
35881
- "rawdescription": "",
35882
- "description": "",
35883
- "displayName": "visitNodes",
35884
- "args": [
35885
- {
35886
- "name": "nodes",
35887
- "deprecated": false,
35888
- "deprecationMessage": ""
35889
- },
35890
- {
35891
- "name": "removals",
35892
- "deprecated": false,
35893
- "deprecationMessage": ""
35894
- }
35895
- ],
35896
- "returnType": "void",
35897
- "jsdoctags": [
35898
- {
35899
- "name": "nodes",
35900
- "deprecated": false,
35901
- "deprecationMessage": "",
35902
- "tagName": {
35903
- "text": "param"
35904
- }
35905
- },
35906
- {
35907
- "name": "removals",
35908
- "deprecated": false,
35909
- "deprecationMessage": "",
35910
- "tagName": {
35911
- "text": "param"
35912
- }
35913
- }
35914
- ]
35915
- },
35916
- {
35917
- "name": "visitNodes",
35918
- "file": "packages/core/schematics/migrate-eui-chip/index.ts",
35832
+ "file": "packages/core/schematics/migrate-eui-alert/index.ts",
35919
35833
  "ctype": "miscellaneous",
35920
35834
  "subtype": "function",
35921
35835
  "coverageIgnore": false,
@@ -35958,7 +35872,7 @@
35958
35872
  },
35959
35873
  {
35960
35874
  "name": "visitNodes",
35961
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
35875
+ "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
35962
35876
  "ctype": "miscellaneous",
35963
35877
  "subtype": "function",
35964
35878
  "coverageIgnore": false,
@@ -35974,8 +35888,45 @@
35974
35888
  "deprecationMessage": ""
35975
35889
  },
35976
35890
  {
35977
- "name": "source",
35978
- "type": "string",
35891
+ "name": "removals",
35892
+ "deprecated": false,
35893
+ "deprecationMessage": ""
35894
+ }
35895
+ ],
35896
+ "returnType": "void",
35897
+ "jsdoctags": [
35898
+ {
35899
+ "name": "nodes",
35900
+ "deprecated": false,
35901
+ "deprecationMessage": "",
35902
+ "tagName": {
35903
+ "text": "param"
35904
+ }
35905
+ },
35906
+ {
35907
+ "name": "removals",
35908
+ "deprecated": false,
35909
+ "deprecationMessage": "",
35910
+ "tagName": {
35911
+ "text": "param"
35912
+ }
35913
+ }
35914
+ ]
35915
+ },
35916
+ {
35917
+ "name": "visitNodes",
35918
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
35919
+ "ctype": "miscellaneous",
35920
+ "subtype": "function",
35921
+ "coverageIgnore": false,
35922
+ "deprecated": false,
35923
+ "deprecationMessage": "",
35924
+ "rawdescription": "",
35925
+ "description": "",
35926
+ "displayName": "visitNodes",
35927
+ "args": [
35928
+ {
35929
+ "name": "nodes",
35979
35930
  "deprecated": false,
35980
35931
  "deprecationMessage": ""
35981
35932
  },
@@ -35996,16 +35947,50 @@
35996
35947
  }
35997
35948
  },
35998
35949
  {
35999
- "name": "source",
36000
- "type": "string",
35950
+ "name": "edits",
36001
35951
  "deprecated": false,
36002
35952
  "deprecationMessage": "",
36003
35953
  "tagName": {
36004
35954
  "text": "param"
36005
35955
  }
35956
+ }
35957
+ ]
35958
+ },
35959
+ {
35960
+ "name": "visitNodes",
35961
+ "file": "packages/core/schematics/migrate-eui-chip/index.ts",
35962
+ "ctype": "miscellaneous",
35963
+ "subtype": "function",
35964
+ "coverageIgnore": false,
35965
+ "deprecated": false,
35966
+ "deprecationMessage": "",
35967
+ "rawdescription": "",
35968
+ "description": "",
35969
+ "displayName": "visitNodes",
35970
+ "args": [
35971
+ {
35972
+ "name": "nodes",
35973
+ "deprecated": false,
35974
+ "deprecationMessage": ""
36006
35975
  },
36007
35976
  {
36008
- "name": "edits",
35977
+ "name": "removals",
35978
+ "deprecated": false,
35979
+ "deprecationMessage": ""
35980
+ }
35981
+ ],
35982
+ "returnType": "void",
35983
+ "jsdoctags": [
35984
+ {
35985
+ "name": "nodes",
35986
+ "deprecated": false,
35987
+ "deprecationMessage": "",
35988
+ "tagName": {
35989
+ "text": "param"
35990
+ }
35991
+ },
35992
+ {
35993
+ "name": "removals",
36009
35994
  "deprecated": false,
36010
35995
  "deprecationMessage": "",
36011
35996
  "tagName": {
@@ -36016,7 +36001,7 @@
36016
36001
  },
36017
36002
  {
36018
36003
  "name": "visitNodes",
36019
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
36004
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
36020
36005
  "ctype": "miscellaneous",
36021
36006
  "subtype": "function",
36022
36007
  "coverageIgnore": false,
@@ -36031,6 +36016,12 @@
36031
36016
  "deprecated": false,
36032
36017
  "deprecationMessage": ""
36033
36018
  },
36019
+ {
36020
+ "name": "source",
36021
+ "type": "string",
36022
+ "deprecated": false,
36023
+ "deprecationMessage": ""
36024
+ },
36034
36025
  {
36035
36026
  "name": "edits",
36036
36027
  "deprecated": false,
@@ -36047,6 +36038,15 @@
36047
36038
  "text": "param"
36048
36039
  }
36049
36040
  },
36041
+ {
36042
+ "name": "source",
36043
+ "type": "string",
36044
+ "deprecated": false,
36045
+ "deprecationMessage": "",
36046
+ "tagName": {
36047
+ "text": "param"
36048
+ }
36049
+ },
36050
36050
  {
36051
36051
  "name": "edits",
36052
36052
  "deprecated": false,
@@ -36117,7 +36117,7 @@
36117
36117
  },
36118
36118
  {
36119
36119
  "name": "visitNodes",
36120
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
36120
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
36121
36121
  "ctype": "miscellaneous",
36122
36122
  "subtype": "function",
36123
36123
  "coverageIgnore": false,
@@ -36160,7 +36160,7 @@
36160
36160
  },
36161
36161
  {
36162
36162
  "name": "visitNodes",
36163
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
36163
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
36164
36164
  "ctype": "miscellaneous",
36165
36165
  "subtype": "function",
36166
36166
  "coverageIgnore": false,
@@ -36203,7 +36203,7 @@
36203
36203
  },
36204
36204
  {
36205
36205
  "name": "visitNodes",
36206
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
36206
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
36207
36207
  "ctype": "miscellaneous",
36208
36208
  "subtype": "function",
36209
36209
  "coverageIgnore": false,
@@ -38031,109 +38031,109 @@
38031
38031
  "defaultValue": "'eui-discussion-thread'"
38032
38032
  }
38033
38033
  ],
38034
- "packages/core/schematics/migrate-eui-fieldset/index.ts": [
38034
+ "packages/core/schematics/migrate-eui-editor/index.ts": [
38035
38035
  {
38036
38036
  "name": "COMPONENT_TAG",
38037
38037
  "ctype": "miscellaneous",
38038
38038
  "subtype": "variable",
38039
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
38039
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
38040
38040
  "coverageIgnore": false,
38041
38041
  "deprecated": false,
38042
38042
  "deprecationMessage": "",
38043
38043
  "type": "string",
38044
- "defaultValue": "'eui-fieldset'"
38044
+ "defaultValue": "'eui-editor'"
38045
38045
  },
38046
38046
  {
38047
38047
  "name": "NEW_NAME",
38048
38048
  "ctype": "miscellaneous",
38049
38049
  "subtype": "variable",
38050
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
38050
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
38051
38051
  "coverageIgnore": false,
38052
38052
  "deprecated": false,
38053
38053
  "deprecationMessage": "",
38054
38054
  "type": "string",
38055
- "defaultValue": "'iconSvgName'"
38055
+ "defaultValue": "'contentChange'"
38056
38056
  },
38057
38057
  {
38058
38058
  "name": "OLD_NAME",
38059
38059
  "ctype": "miscellaneous",
38060
38060
  "subtype": "variable",
38061
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
38061
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
38062
38062
  "coverageIgnore": false,
38063
38063
  "deprecated": false,
38064
38064
  "deprecationMessage": "",
38065
38065
  "type": "string",
38066
- "defaultValue": "'iconSvgType'"
38066
+ "defaultValue": "'onEditorChanged'"
38067
38067
  }
38068
38068
  ],
38069
- "packages/core/schematics/migrate-eui-icon-svg/index.ts": [
38069
+ "packages/core/schematics/migrate-eui-fieldset/index.ts": [
38070
38070
  {
38071
38071
  "name": "COMPONENT_TAG",
38072
38072
  "ctype": "miscellaneous",
38073
38073
  "subtype": "variable",
38074
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
38074
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
38075
38075
  "coverageIgnore": false,
38076
38076
  "deprecated": false,
38077
38077
  "deprecationMessage": "",
38078
38078
  "type": "string",
38079
- "defaultValue": "'eui-icon-svg'"
38079
+ "defaultValue": "'eui-fieldset'"
38080
38080
  },
38081
38081
  {
38082
- "name": "INPUT_RENAMES",
38082
+ "name": "NEW_NAME",
38083
38083
  "ctype": "miscellaneous",
38084
38084
  "subtype": "variable",
38085
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
38085
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
38086
38086
  "coverageIgnore": false,
38087
38087
  "deprecated": false,
38088
38088
  "deprecationMessage": "",
38089
- "type": "unknown",
38090
- "defaultValue": "new Map([\n ['variant', 'fillColor'],\n ['aria-label', 'ariaLabel'],\n])"
38089
+ "type": "string",
38090
+ "defaultValue": "'iconSvgName'"
38091
38091
  },
38092
38092
  {
38093
- "name": "TS_PROPERTY_RENAMES",
38093
+ "name": "OLD_NAME",
38094
38094
  "ctype": "miscellaneous",
38095
38095
  "subtype": "variable",
38096
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
38096
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
38097
38097
  "coverageIgnore": false,
38098
38098
  "deprecated": false,
38099
38099
  "deprecationMessage": "",
38100
- "type": "unknown",
38101
- "defaultValue": "new Map([\n ['variant', 'fillColor'],\n])"
38100
+ "type": "string",
38101
+ "defaultValue": "'iconSvgType'"
38102
38102
  }
38103
38103
  ],
38104
- "packages/core/schematics/migrate-eui-editor/index.ts": [
38104
+ "packages/core/schematics/migrate-eui-icon-svg/index.ts": [
38105
38105
  {
38106
38106
  "name": "COMPONENT_TAG",
38107
38107
  "ctype": "miscellaneous",
38108
38108
  "subtype": "variable",
38109
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
38109
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
38110
38110
  "coverageIgnore": false,
38111
38111
  "deprecated": false,
38112
38112
  "deprecationMessage": "",
38113
38113
  "type": "string",
38114
- "defaultValue": "'eui-editor'"
38114
+ "defaultValue": "'eui-icon-svg'"
38115
38115
  },
38116
38116
  {
38117
- "name": "NEW_NAME",
38117
+ "name": "INPUT_RENAMES",
38118
38118
  "ctype": "miscellaneous",
38119
38119
  "subtype": "variable",
38120
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
38120
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
38121
38121
  "coverageIgnore": false,
38122
38122
  "deprecated": false,
38123
38123
  "deprecationMessage": "",
38124
- "type": "string",
38125
- "defaultValue": "'contentChange'"
38124
+ "type": "unknown",
38125
+ "defaultValue": "new Map([\n ['variant', 'fillColor'],\n ['aria-label', 'ariaLabel'],\n])"
38126
38126
  },
38127
38127
  {
38128
- "name": "OLD_NAME",
38128
+ "name": "TS_PROPERTY_RENAMES",
38129
38129
  "ctype": "miscellaneous",
38130
38130
  "subtype": "variable",
38131
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
38131
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
38132
38132
  "coverageIgnore": false,
38133
38133
  "deprecated": false,
38134
38134
  "deprecationMessage": "",
38135
- "type": "string",
38136
- "defaultValue": "'onEditorChanged'"
38135
+ "type": "unknown",
38136
+ "defaultValue": "new Map([\n ['variant', 'fillColor'],\n])"
38137
38137
  }
38138
38138
  ],
38139
38139
  "packages/core/schematics/migrate-eui-icon-toggle/index.ts": [
@@ -44477,10 +44477,10 @@
44477
44477
  ]
44478
44478
  }
44479
44479
  ],
44480
- "packages/core/schematics/migrate-eui-fieldset/index.ts": [
44480
+ "packages/core/schematics/migrate-eui-editor/index.ts": [
44481
44481
  {
44482
44482
  "name": "applyEdits",
44483
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44483
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44484
44484
  "ctype": "miscellaneous",
44485
44485
  "subtype": "function",
44486
44486
  "coverageIgnore": false,
@@ -44525,7 +44525,7 @@
44525
44525
  },
44526
44526
  {
44527
44527
  "name": "collectRenames",
44528
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44528
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44529
44529
  "ctype": "miscellaneous",
44530
44530
  "subtype": "function",
44531
44531
  "coverageIgnore": false,
@@ -44570,7 +44570,7 @@
44570
44570
  },
44571
44571
  {
44572
44572
  "name": "isComponentMetadataProperty",
44573
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44573
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44574
44574
  "ctype": "miscellaneous",
44575
44575
  "subtype": "function",
44576
44576
  "coverageIgnore": false,
@@ -44600,7 +44600,7 @@
44600
44600
  },
44601
44601
  {
44602
44602
  "name": "isTemplateProperty",
44603
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44603
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44604
44604
  "ctype": "miscellaneous",
44605
44605
  "subtype": "function",
44606
44606
  "coverageIgnore": false,
@@ -44629,8 +44629,8 @@
44629
44629
  ]
44630
44630
  },
44631
44631
  {
44632
- "name": "migrateEuiFieldset",
44633
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44632
+ "name": "migrateEuiEditor",
44633
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44634
44634
  "ctype": "miscellaneous",
44635
44635
  "subtype": "function",
44636
44636
  "coverageIgnore": false,
@@ -44638,7 +44638,7 @@
44638
44638
  "deprecationMessage": "",
44639
44639
  "rawdescription": "",
44640
44640
  "description": "",
44641
- "displayName": "migrateEuiFieldset",
44641
+ "displayName": "migrateEuiEditor",
44642
44642
  "args": [
44643
44643
  {
44644
44644
  "name": "options",
@@ -44664,7 +44664,7 @@
44664
44664
  },
44665
44665
  {
44666
44666
  "name": "migrateInlineTemplates",
44667
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44667
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44668
44668
  "ctype": "miscellaneous",
44669
44669
  "subtype": "function",
44670
44670
  "coverageIgnore": false,
@@ -44696,7 +44696,7 @@
44696
44696
  },
44697
44697
  {
44698
44698
  "name": "migrateTemplate",
44699
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44699
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44700
44700
  "ctype": "miscellaneous",
44701
44701
  "subtype": "function",
44702
44702
  "coverageIgnore": false,
@@ -44728,7 +44728,7 @@
44728
44728
  },
44729
44729
  {
44730
44730
  "name": "unwrapExpression",
44731
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44731
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44732
44732
  "ctype": "miscellaneous",
44733
44733
  "subtype": "function",
44734
44734
  "coverageIgnore": false,
@@ -44758,7 +44758,7 @@
44758
44758
  },
44759
44759
  {
44760
44760
  "name": "visitDir",
44761
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44761
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44762
44762
  "ctype": "miscellaneous",
44763
44763
  "subtype": "function",
44764
44764
  "coverageIgnore": false,
@@ -44803,7 +44803,7 @@
44803
44803
  },
44804
44804
  {
44805
44805
  "name": "visitNodes",
44806
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44806
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44807
44807
  "ctype": "miscellaneous",
44808
44808
  "subtype": "function",
44809
44809
  "coverageIgnore": false,
@@ -44843,12 +44843,74 @@
44843
44843
  }
44844
44844
  }
44845
44845
  ]
44846
+ },
44847
+ {
44848
+ "name": "warnPropertyAccesses",
44849
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
44850
+ "ctype": "miscellaneous",
44851
+ "subtype": "function",
44852
+ "coverageIgnore": false,
44853
+ "deprecated": false,
44854
+ "deprecationMessage": "",
44855
+ "rawdescription": "",
44856
+ "description": "",
44857
+ "displayName": "warnPropertyAccesses",
44858
+ "args": [
44859
+ {
44860
+ "name": "path",
44861
+ "type": "string",
44862
+ "deprecated": false,
44863
+ "deprecationMessage": ""
44864
+ },
44865
+ {
44866
+ "name": "source",
44867
+ "type": "string",
44868
+ "deprecated": false,
44869
+ "deprecationMessage": ""
44870
+ },
44871
+ {
44872
+ "name": "context",
44873
+ "type": "SchematicContext",
44874
+ "deprecated": false,
44875
+ "deprecationMessage": ""
44876
+ }
44877
+ ],
44878
+ "returnType": "void",
44879
+ "jsdoctags": [
44880
+ {
44881
+ "name": "path",
44882
+ "type": "string",
44883
+ "deprecated": false,
44884
+ "deprecationMessage": "",
44885
+ "tagName": {
44886
+ "text": "param"
44887
+ }
44888
+ },
44889
+ {
44890
+ "name": "source",
44891
+ "type": "string",
44892
+ "deprecated": false,
44893
+ "deprecationMessage": "",
44894
+ "tagName": {
44895
+ "text": "param"
44896
+ }
44897
+ },
44898
+ {
44899
+ "name": "context",
44900
+ "type": "SchematicContext",
44901
+ "deprecated": false,
44902
+ "deprecationMessage": "",
44903
+ "tagName": {
44904
+ "text": "param"
44905
+ }
44906
+ }
44907
+ ]
44846
44908
  }
44847
44909
  ],
44848
- "packages/core/schematics/migrate-eui-icon-svg/index.ts": [
44910
+ "packages/core/schematics/migrate-eui-fieldset/index.ts": [
44849
44911
  {
44850
44912
  "name": "applyEdits",
44851
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
44913
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44852
44914
  "ctype": "miscellaneous",
44853
44915
  "subtype": "function",
44854
44916
  "coverageIgnore": false,
@@ -44893,7 +44955,7 @@
44893
44955
  },
44894
44956
  {
44895
44957
  "name": "collectRenames",
44896
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
44958
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44897
44959
  "ctype": "miscellaneous",
44898
44960
  "subtype": "function",
44899
44961
  "coverageIgnore": false,
@@ -44938,7 +45000,7 @@
44938
45000
  },
44939
45001
  {
44940
45002
  "name": "isComponentMetadataProperty",
44941
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45003
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44942
45004
  "ctype": "miscellaneous",
44943
45005
  "subtype": "function",
44944
45006
  "coverageIgnore": false,
@@ -44968,7 +45030,7 @@
44968
45030
  },
44969
45031
  {
44970
45032
  "name": "isTemplateProperty",
44971
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45033
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
44972
45034
  "ctype": "miscellaneous",
44973
45035
  "subtype": "function",
44974
45036
  "coverageIgnore": false,
@@ -44997,8 +45059,8 @@
44997
45059
  ]
44998
45060
  },
44999
45061
  {
45000
- "name": "migrateEuiIconSvg",
45001
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45062
+ "name": "migrateEuiFieldset",
45063
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
45002
45064
  "ctype": "miscellaneous",
45003
45065
  "subtype": "function",
45004
45066
  "coverageIgnore": false,
@@ -45006,7 +45068,7 @@
45006
45068
  "deprecationMessage": "",
45007
45069
  "rawdescription": "",
45008
45070
  "description": "",
45009
- "displayName": "migrateEuiIconSvg",
45071
+ "displayName": "migrateEuiFieldset",
45010
45072
  "args": [
45011
45073
  {
45012
45074
  "name": "options",
@@ -45032,7 +45094,7 @@
45032
45094
  },
45033
45095
  {
45034
45096
  "name": "migrateInlineTemplates",
45035
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45097
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
45036
45098
  "ctype": "miscellaneous",
45037
45099
  "subtype": "function",
45038
45100
  "coverageIgnore": false,
@@ -45064,7 +45126,7 @@
45064
45126
  },
45065
45127
  {
45066
45128
  "name": "migrateTemplate",
45067
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45129
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
45068
45130
  "ctype": "miscellaneous",
45069
45131
  "subtype": "function",
45070
45132
  "coverageIgnore": false,
@@ -45094,41 +45156,9 @@
45094
45156
  }
45095
45157
  ]
45096
45158
  },
45097
- {
45098
- "name": "renameTsPropertyAccesses",
45099
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45100
- "ctype": "miscellaneous",
45101
- "subtype": "function",
45102
- "coverageIgnore": false,
45103
- "deprecated": false,
45104
- "deprecationMessage": "",
45105
- "rawdescription": "",
45106
- "description": "",
45107
- "displayName": "renameTsPropertyAccesses",
45108
- "args": [
45109
- {
45110
- "name": "source",
45111
- "type": "string",
45112
- "deprecated": false,
45113
- "deprecationMessage": ""
45114
- }
45115
- ],
45116
- "returnType": "string",
45117
- "jsdoctags": [
45118
- {
45119
- "name": "source",
45120
- "type": "string",
45121
- "deprecated": false,
45122
- "deprecationMessage": "",
45123
- "tagName": {
45124
- "text": "param"
45125
- }
45126
- }
45127
- ]
45128
- },
45129
45159
  {
45130
45160
  "name": "unwrapExpression",
45131
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45161
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
45132
45162
  "ctype": "miscellaneous",
45133
45163
  "subtype": "function",
45134
45164
  "coverageIgnore": false,
@@ -45158,7 +45188,7 @@
45158
45188
  },
45159
45189
  {
45160
45190
  "name": "visitDir",
45161
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45191
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
45162
45192
  "ctype": "miscellaneous",
45163
45193
  "subtype": "function",
45164
45194
  "coverageIgnore": false,
@@ -45203,7 +45233,7 @@
45203
45233
  },
45204
45234
  {
45205
45235
  "name": "visitNodes",
45206
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45236
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
45207
45237
  "ctype": "miscellaneous",
45208
45238
  "subtype": "function",
45209
45239
  "coverageIgnore": false,
@@ -45245,10 +45275,10 @@
45245
45275
  ]
45246
45276
  }
45247
45277
  ],
45248
- "packages/core/schematics/migrate-eui-editor/index.ts": [
45278
+ "packages/core/schematics/migrate-eui-icon-svg/index.ts": [
45249
45279
  {
45250
45280
  "name": "applyEdits",
45251
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45281
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45252
45282
  "ctype": "miscellaneous",
45253
45283
  "subtype": "function",
45254
45284
  "coverageIgnore": false,
@@ -45293,7 +45323,7 @@
45293
45323
  },
45294
45324
  {
45295
45325
  "name": "collectRenames",
45296
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45326
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45297
45327
  "ctype": "miscellaneous",
45298
45328
  "subtype": "function",
45299
45329
  "coverageIgnore": false,
@@ -45338,7 +45368,7 @@
45338
45368
  },
45339
45369
  {
45340
45370
  "name": "isComponentMetadataProperty",
45341
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45371
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45342
45372
  "ctype": "miscellaneous",
45343
45373
  "subtype": "function",
45344
45374
  "coverageIgnore": false,
@@ -45368,7 +45398,7 @@
45368
45398
  },
45369
45399
  {
45370
45400
  "name": "isTemplateProperty",
45371
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45401
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45372
45402
  "ctype": "miscellaneous",
45373
45403
  "subtype": "function",
45374
45404
  "coverageIgnore": false,
@@ -45397,8 +45427,8 @@
45397
45427
  ]
45398
45428
  },
45399
45429
  {
45400
- "name": "migrateEuiEditor",
45401
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45430
+ "name": "migrateEuiIconSvg",
45431
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45402
45432
  "ctype": "miscellaneous",
45403
45433
  "subtype": "function",
45404
45434
  "coverageIgnore": false,
@@ -45406,7 +45436,7 @@
45406
45436
  "deprecationMessage": "",
45407
45437
  "rawdescription": "",
45408
45438
  "description": "",
45409
- "displayName": "migrateEuiEditor",
45439
+ "displayName": "migrateEuiIconSvg",
45410
45440
  "args": [
45411
45441
  {
45412
45442
  "name": "options",
@@ -45432,7 +45462,7 @@
45432
45462
  },
45433
45463
  {
45434
45464
  "name": "migrateInlineTemplates",
45435
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45465
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45436
45466
  "ctype": "miscellaneous",
45437
45467
  "subtype": "function",
45438
45468
  "coverageIgnore": false,
@@ -45464,7 +45494,7 @@
45464
45494
  },
45465
45495
  {
45466
45496
  "name": "migrateTemplate",
45467
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45497
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45468
45498
  "ctype": "miscellaneous",
45469
45499
  "subtype": "function",
45470
45500
  "coverageIgnore": false,
@@ -45495,8 +45525,8 @@
45495
45525
  ]
45496
45526
  },
45497
45527
  {
45498
- "name": "unwrapExpression",
45499
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45528
+ "name": "renameTsPropertyAccesses",
45529
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45500
45530
  "ctype": "miscellaneous",
45501
45531
  "subtype": "function",
45502
45532
  "coverageIgnore": false,
@@ -45504,18 +45534,20 @@
45504
45534
  "deprecationMessage": "",
45505
45535
  "rawdescription": "",
45506
45536
  "description": "",
45507
- "displayName": "unwrapExpression",
45537
+ "displayName": "renameTsPropertyAccesses",
45508
45538
  "args": [
45509
45539
  {
45510
- "name": "expression",
45540
+ "name": "source",
45541
+ "type": "string",
45511
45542
  "deprecated": false,
45512
45543
  "deprecationMessage": ""
45513
45544
  }
45514
45545
  ],
45515
- "returnType": "ts.Expression",
45546
+ "returnType": "string",
45516
45547
  "jsdoctags": [
45517
45548
  {
45518
- "name": "expression",
45549
+ "name": "source",
45550
+ "type": "string",
45519
45551
  "deprecated": false,
45520
45552
  "deprecationMessage": "",
45521
45553
  "tagName": {
@@ -45525,8 +45557,8 @@
45525
45557
  ]
45526
45558
  },
45527
45559
  {
45528
- "name": "visitDir",
45529
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45560
+ "name": "unwrapExpression",
45561
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45530
45562
  "ctype": "miscellaneous",
45531
45563
  "subtype": "function",
45532
45564
  "coverageIgnore": false,
@@ -45534,33 +45566,18 @@
45534
45566
  "deprecationMessage": "",
45535
45567
  "rawdescription": "",
45536
45568
  "description": "",
45537
- "displayName": "visitDir",
45569
+ "displayName": "unwrapExpression",
45538
45570
  "args": [
45539
45571
  {
45540
- "name": "dir",
45541
- "type": "DirEntry",
45542
- "deprecated": false,
45543
- "deprecationMessage": ""
45544
- },
45545
- {
45546
- "name": "callback",
45572
+ "name": "expression",
45547
45573
  "deprecated": false,
45548
45574
  "deprecationMessage": ""
45549
45575
  }
45550
45576
  ],
45551
- "returnType": "void",
45577
+ "returnType": "ts.Expression",
45552
45578
  "jsdoctags": [
45553
45579
  {
45554
- "name": "dir",
45555
- "type": "DirEntry",
45556
- "deprecated": false,
45557
- "deprecationMessage": "",
45558
- "tagName": {
45559
- "text": "param"
45560
- }
45561
- },
45562
- {
45563
- "name": "callback",
45580
+ "name": "expression",
45564
45581
  "deprecated": false,
45565
45582
  "deprecationMessage": "",
45566
45583
  "tagName": {
@@ -45570,8 +45587,8 @@
45570
45587
  ]
45571
45588
  },
45572
45589
  {
45573
- "name": "visitNodes",
45574
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45590
+ "name": "visitDir",
45591
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45575
45592
  "ctype": "miscellaneous",
45576
45593
  "subtype": "function",
45577
45594
  "coverageIgnore": false,
@@ -45579,15 +45596,16 @@
45579
45596
  "deprecationMessage": "",
45580
45597
  "rawdescription": "",
45581
45598
  "description": "",
45582
- "displayName": "visitNodes",
45599
+ "displayName": "visitDir",
45583
45600
  "args": [
45584
45601
  {
45585
- "name": "nodes",
45602
+ "name": "dir",
45603
+ "type": "DirEntry",
45586
45604
  "deprecated": false,
45587
45605
  "deprecationMessage": ""
45588
45606
  },
45589
45607
  {
45590
- "name": "edits",
45608
+ "name": "callback",
45591
45609
  "deprecated": false,
45592
45610
  "deprecationMessage": ""
45593
45611
  }
@@ -45595,7 +45613,8 @@
45595
45613
  "returnType": "void",
45596
45614
  "jsdoctags": [
45597
45615
  {
45598
- "name": "nodes",
45616
+ "name": "dir",
45617
+ "type": "DirEntry",
45599
45618
  "deprecated": false,
45600
45619
  "deprecationMessage": "",
45601
45620
  "tagName": {
@@ -45603,7 +45622,7 @@
45603
45622
  }
45604
45623
  },
45605
45624
  {
45606
- "name": "edits",
45625
+ "name": "callback",
45607
45626
  "deprecated": false,
45608
45627
  "deprecationMessage": "",
45609
45628
  "tagName": {
@@ -45613,8 +45632,8 @@
45613
45632
  ]
45614
45633
  },
45615
45634
  {
45616
- "name": "warnPropertyAccesses",
45617
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
45635
+ "name": "visitNodes",
45636
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
45618
45637
  "ctype": "miscellaneous",
45619
45638
  "subtype": "function",
45620
45639
  "coverageIgnore": false,
@@ -45622,23 +45641,15 @@
45622
45641
  "deprecationMessage": "",
45623
45642
  "rawdescription": "",
45624
45643
  "description": "",
45625
- "displayName": "warnPropertyAccesses",
45644
+ "displayName": "visitNodes",
45626
45645
  "args": [
45627
45646
  {
45628
- "name": "path",
45629
- "type": "string",
45630
- "deprecated": false,
45631
- "deprecationMessage": ""
45632
- },
45633
- {
45634
- "name": "source",
45635
- "type": "string",
45647
+ "name": "nodes",
45636
45648
  "deprecated": false,
45637
45649
  "deprecationMessage": ""
45638
45650
  },
45639
45651
  {
45640
- "name": "context",
45641
- "type": "SchematicContext",
45652
+ "name": "edits",
45642
45653
  "deprecated": false,
45643
45654
  "deprecationMessage": ""
45644
45655
  }
@@ -45646,17 +45657,7 @@
45646
45657
  "returnType": "void",
45647
45658
  "jsdoctags": [
45648
45659
  {
45649
- "name": "path",
45650
- "type": "string",
45651
- "deprecated": false,
45652
- "deprecationMessage": "",
45653
- "tagName": {
45654
- "text": "param"
45655
- }
45656
- },
45657
- {
45658
- "name": "source",
45659
- "type": "string",
45660
+ "name": "nodes",
45660
45661
  "deprecated": false,
45661
45662
  "deprecationMessage": "",
45662
45663
  "tagName": {
@@ -45664,8 +45665,7 @@
45664
45665
  }
45665
45666
  },
45666
45667
  {
45667
- "name": "context",
45668
- "type": "SchematicContext",
45668
+ "name": "edits",
45669
45669
  "deprecated": false,
45670
45670
  "deprecationMessage": "",
45671
45671
  "tagName": {