@eui/core 22.0.0-alpha.20 → 22.0.0-alpha.21

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.
@@ -2139,63 +2139,7 @@
2139
2139
  },
2140
2140
  {
2141
2141
  "name": "Schema",
2142
- "id": "interface-Schema-9c5e016857e1416ac7bbb881973e644c0f578a53bd432bb951c1676ac3f2a6631bfe3344860346a081b841217278723e0bb0bf2fa35fb869de67cb0cc8d99849",
2143
- "file": "packages/core/schematics/add-eui-imports/index.ts",
2144
- "deprecated": false,
2145
- "deprecationMessage": "",
2146
- "type": "interface",
2147
- "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode, TmplAstTemplate } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\nimport { SELECTOR_MAP, SelectorEntry, getClassNamesForArray } from './selector-map';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n useClassArray?: boolean;\n}\n\ninterface ImportToAdd {\n /** The symbol to add to imports array (class name or array name for spread) */\n symbol: string;\n /** Whether this should be spread (...EUI_BUTTON) */\n isSpread: boolean;\n /** ES import path */\n importPath: string;\n}\n\nexport function addEuiImports(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n const useClassArray = options.useClassArray ?? false;\n let filesUpdated = 0;\n\n // Index NgModules for standalone:false support\n const ngModuleIndex = buildNgModuleIndex(tree, tree.getDir(scanPath || '/'));\n\n visitDir(tree.getDir(scanPath || '/'), (path) => {\n if (!path.endsWith('.ts') || path.endsWith('.spec.ts')) return;\n\n const buffer = tree.read(path);\n if (!buffer) return;\n const source = buffer.toString('utf-8');\n\n const sourceFile = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);\n const components = findComponentDecorators(sourceFile);\n if (components.length === 0) return;\n\n let modified = false;\n\n for (const { decorator, className: componentClassName, isNonStandalone } of components) {\n const templateHtml = getTemplateContent(tree, path, decorator, source);\n if (!templateHtml) continue;\n\n const matched = matchSelectorsInTemplate(templateHtml);\n if (matched.length === 0) continue;\n\n const importsToAdd = resolveImports(matched, useClassArray);\n if (importsToAdd.length === 0) continue;\n\n if (isNonStandalone) {\n // Find the NgModule that declares this component and add imports there\n const moduleInfo = findDeclaringModule(ngModuleIndex, componentClassName);\n if (!moduleInfo) {\n context.logger.warn(`⚠ Could not find declaring NgModule for ${componentClassName} in ${path}`);\n continue;\n }\n const moduleBuffer = tree.read(moduleInfo.path);\n if (!moduleBuffer) continue;\n const moduleSource = moduleBuffer.toString('utf-8');\n const result = addImportsToFile(moduleSource, moduleInfo.path, moduleInfo.decoratorPos, importsToAdd, useClassArray);\n if (result !== moduleSource) {\n if (options.dryRun) {\n logDryRun(context, `Would add EUI imports to NgModule in ${moduleInfo.path} for component ${componentClassName}`);\n } else {\n tree.overwrite(moduleInfo.path, result);\n }\n modified = true;\n }\n } else {\n // Standalone component — add imports directly\n const currentSource = tree.read(path)!.toString('utf-8');\n const result = addImportsToFile(currentSource, path, decorator.getStart(), importsToAdd, useClassArray);\n if (result !== currentSource) {\n if (options.dryRun) {\n logDryRun(context, `Would add EUI imports to ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n modified = true;\n }\n }\n }\n\n if (modified) filesUpdated++;\n });\n\n context.logger.info(`add-eui-imports: ${filesUpdated} file(s) updated.`);\n if (options.dryRun) logDryRunNote(context);\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\n// --- Selector Matching ---\n\nfunction matchSelectorsInTemplate(html: string): SelectorEntry[] {\n const parsed = parseTemplate(html, '', { preserveWhitespaces: true });\n if (parsed.errors?.length) return [];\n\n const matched: SelectorEntry[] = [];\n visitTemplateNodes(parsed.nodes, matched);\n return matched;\n}\n\nfunction visitTemplateNodes(nodes: TmplAstNode[], matched: SelectorEntry[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n matchElement(node, matched);\n visitTemplateNodes(node.children, matched);\n } else if (node instanceof TmplAstTemplate) {\n visitTemplateNodes(node.children, matched);\n }\n }\n}\n\nfunction matchElement(element: TmplAstElement, matched: SelectorEntry[]): void {\n const tagName = element.name;\n const attrNames = new Set([\n ...element.attributes.map(a => a.name),\n ...element.inputs.map(i => i.name),\n ]);\n\n for (const entry of SELECTOR_MAP) {\n if (entry.element && entry.element !== tagName) continue;\n if (!entry.element && entry.attributes.length === 0) continue;\n if (!entry.attributes.every(attr => attrNames.has(attr))) continue;\n // If no element specified, at least one attribute must match on this element\n if (!entry.element && entry.attributes.length > 0 && !entry.attributes.some(attr => attrNames.has(attr))) continue;\n matched.push(entry);\n }\n}\n\n// --- Import Resolution ---\n\nfunction resolveImports(matched: SelectorEntry[], useClassArray: boolean): ImportToAdd[] {\n const seen = new Set<string>();\n const result: ImportToAdd[] = [];\n\n for (const entry of matched) {\n if (useClassArray && entry.classArray) {\n if (seen.has(entry.classArray)) continue;\n seen.add(entry.classArray);\n result.push({ symbol: entry.classArray, isSpread: true, importPath: entry.importPath });\n } else {\n if (seen.has(entry.className)) continue;\n seen.add(entry.className);\n result.push({ symbol: entry.className, isSpread: false, importPath: entry.importPath });\n }\n }\n\n return result;\n}\n\n// --- Template Extraction ---\n\nfunction getTemplateContent(tree: Tree, tsPath: string, decorator: ts.Decorator, source: string): string | null {\n const call = decorator.expression as ts.CallExpression;\n if (!call.arguments[0] || !ts.isObjectLiteralExpression(call.arguments[0])) return null;\n const metadata = call.arguments[0];\n\n for (const prop of metadata.properties) {\n if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) continue;\n if (prop.name.text === 'template') {\n const init = prop.initializer;\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n return init.text;\n }\n }\n if (prop.name.text === 'templateUrl') {\n if (ts.isStringLiteral(prop.initializer)) {\n const dir = tsPath.substring(0, tsPath.lastIndexOf('/'));\n const templateBuffer = tree.read(`${dir}/${prop.initializer.text}`);\n if (templateBuffer) return templateBuffer.toString('utf-8');\n }\n }\n }\n return null;\n}\n\n// --- Component Decorator Detection ---\n\ninterface ComponentInfo {\n decorator: ts.Decorator;\n className: string;\n isNonStandalone: boolean;\n}\n\nfunction findComponentDecorators(sourceFile: ts.SourceFile): ComponentInfo[] {\n const results: ComponentInfo[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node) && node.name) {\n const decs = ts.getDecorators(node);\n if (decs) {\n for (const dec of decs) {\n if (ts.isCallExpression(dec.expression) && ts.isIdentifier(dec.expression.expression) && dec.expression.expression.text === 'Component') {\n const isNonStandalone = hasStandaloneFalse(dec);\n results.push({ decorator: dec, className: node.name.text, isNonStandalone });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return results;\n}\n\nfunction hasStandaloneFalse(decorator: ts.Decorator): boolean {\n const call = decorator.expression as ts.CallExpression;\n if (!call.arguments[0] || !ts.isObjectLiteralExpression(call.arguments[0])) return false;\n for (const prop of call.arguments[0].properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name) && prop.name.text === 'standalone') {\n return prop.initializer.kind === ts.SyntaxKind.FalseKeyword;\n }\n }\n return false;\n}\n\n// --- NgModule Index ---\n\ninterface NgModuleInfo {\n path: string;\n declarations: string[];\n decoratorPos: number;\n}\n\nfunction buildNgModuleIndex(tree: Tree, dir: DirEntry): NgModuleInfo[] {\n const modules: NgModuleInfo[] = [];\n\n visitDir(dir, (path) => {\n if (!path.endsWith('.ts') || path.endsWith('.spec.ts')) return;\n\n const buffer = tree.read(path);\n if (!buffer) return;\n const source = buffer.toString('utf-8');\n if (!source.includes('NgModule')) return;\n\n const sf = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node)) {\n const decs = ts.getDecorators(node);\n if (decs) {\n for (const dec of decs) {\n if (ts.isCallExpression(dec.expression) && ts.isIdentifier(dec.expression.expression) && dec.expression.expression.text === 'NgModule') {\n const declarations = extractArrayProperty(dec, 'declarations', source);\n modules.push({ path, declarations, decoratorPos: dec.getStart() });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sf);\n });\n\n return modules;\n}\n\nfunction extractArrayProperty(decorator: ts.Decorator, propName: string, source: string): string[] {\n const call = decorator.expression as ts.CallExpression;\n if (!call.arguments[0] || !ts.isObjectLiteralExpression(call.arguments[0])) return [];\n for (const prop of call.arguments[0].properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name) && prop.name.text === propName) {\n if (ts.isArrayLiteralExpression(prop.initializer)) {\n return prop.initializer.elements\n .filter(ts.isIdentifier)\n .map(id => id.text);\n }\n }\n }\n return [];\n}\n\nfunction findDeclaringModule(modules: NgModuleInfo[], componentClassName: string): NgModuleInfo | undefined {\n return modules.find(m => m.declarations.includes(componentClassName));\n}\n\n// --- Import Addition ---\n\nfunction addImportsToFile(source: string, filePath: string, decoratorStartHint: number, imports: ImportToAdd[], useClassArray: boolean): string {\n const sf = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n\n // Find the imports array in the decorator closest to decoratorStartHint\n const importsArrayInfo = findDecoratorImportsArray(sf, source, decoratorStartHint);\n if (!importsArrayInfo) return source;\n\n const { arrayNode, decoratorType } = importsArrayInfo;\n\n // Determine what's already in the imports array\n const existingSymbols = new Set<string>();\n const existingSpreads = new Set<string>();\n for (const el of arrayNode.elements) {\n if (ts.isSpreadElement(el) && ts.isIdentifier(el.expression)) {\n existingSpreads.add(el.expression.text);\n } else if (ts.isIdentifier(el)) {\n existingSymbols.add(el.text);\n }\n }\n\n // Filter out already-present imports and compute what to add/remove\n const toAdd: ImportToAdd[] = [];\n const toRemoveFromArray: string[] = []; // individual class names to consolidate\n\n for (const imp of imports) {\n if (imp.isSpread) {\n if (existingSpreads.has(imp.symbol)) continue; // Already has ...EUI_X\n toAdd.push(imp);\n // Consolidate: remove individual class names covered by this array\n if (useClassArray) {\n const coveredClasses = getClassNamesForArray(imp.symbol);\n for (const cls of coveredClasses) {\n if (existingSymbols.has(cls)) toRemoveFromArray.push(cls);\n }\n }\n } else {\n if (existingSymbols.has(imp.symbol)) continue;\n // Also skip if a spread already covers this class\n const coveringArray = imports.find(i => i.isSpread && getClassNamesForArray(i.symbol).includes(imp.symbol));\n if (coveringArray && (existingSpreads.has(coveringArray.symbol) || toAdd.some(a => a.symbol === coveringArray.symbol))) continue;\n toAdd.push(imp);\n }\n }\n\n if (toAdd.length === 0 && toRemoveFromArray.length === 0) return source;\n\n // Build new array content\n let result = source;\n result = updateDecoratorImportsArray(result, filePath, arrayNode, toAdd, toRemoveFromArray);\n\n // Add ES imports\n result = addEsImports(result, filePath, toAdd);\n\n // Remove consolidated class names from ES imports\n if (toRemoveFromArray.length > 0) {\n result = removeFromEsImports(result, filePath, toRemoveFromArray);\n }\n\n return result;\n}\n\ninterface ImportsArrayInfo {\n arrayNode: ts.ArrayLiteralExpression;\n decoratorType: 'Component' | 'NgModule';\n}\n\nfunction findDecoratorImportsArray(sf: ts.SourceFile, source: string, decoratorStartHint: number): ImportsArrayInfo | null {\n let found: ImportsArrayInfo | null = null;\n\n const visit = (node: ts.Node): void => {\n if (found) return;\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)) continue;\n if (!ts.isIdentifier(dec.expression.expression)) continue;\n const decName = dec.expression.expression.text;\n if (decName !== 'Component' && decName !== 'NgModule') continue;\n if (Math.abs(dec.getStart() - decoratorStartHint) > 5) continue; // Match by position\n\n const metadata = dec.expression.arguments[0];\n if (!ts.isObjectLiteralExpression(metadata)) continue;\n\n for (const prop of metadata.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name) && prop.name.text === 'imports') {\n if (ts.isArrayLiteralExpression(prop.initializer)) {\n found = { arrayNode: prop.initializer, decoratorType: decName as 'Component' | 'NgModule' };\n return;\n }\n }\n }\n\n // No imports array found — create one\n if (!found && decName === 'Component') {\n // We need to add `imports: []` to the decorator\n // Insert after the last property\n const lastProp = metadata.properties[metadata.properties.length - 1];\n if (lastProp) {\n const insertPos = lastProp.getEnd();\n const indent = detectIndent(source, metadata.getStart());\n const insertion = `,\\n${indent} imports: []`;\n const newSource = source.slice(0, insertPos) + insertion + source.slice(insertPos);\n // Re-parse to get the array node\n const newSf = ts.createSourceFile('', newSource, ts.ScriptTarget.Latest, true);\n const newArray = findImportsArrayInSource(newSf);\n if (newArray) {\n // We can't return a node from a different source file in the general case.\n // Instead, we'll handle the \"no imports array\" case by adding it inline.\n found = null; // Will be handled separately\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sf);\n return found;\n}\n\nfunction findImportsArrayInSource(sf: ts.SourceFile): ts.ArrayLiteralExpression | null {\n let found: ts.ArrayLiteralExpression | null = null;\n const visit = (node: ts.Node): void => {\n if (found) return;\n if (ts.isPropertyAssignment(node) && ts.isIdentifier(node.name) && node.name.text === 'imports' && ts.isArrayLiteralExpression(node.initializer)) {\n found = node.initializer;\n }\n ts.forEachChild(node, visit);\n };\n visit(sf);\n return found;\n}\n\nfunction updateDecoratorImportsArray(source: string, filePath: string, arrayNode: ts.ArrayLiteralExpression, toAdd: ImportToAdd[], toRemove: string[]): string {\n const sf = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n\n // Rebuild the array content\n const existingElements: string[] = [];\n for (const el of arrayNode.elements) {\n const text = source.slice(el.getStart(sf), el.getEnd()).trim();\n // Check if this element should be removed (consolidation)\n if (ts.isIdentifier(el) && toRemove.includes(el.text)) continue;\n existingElements.push(text);\n }\n\n // Add new entries\n for (const imp of toAdd) {\n const entry = imp.isSpread ? `...${imp.symbol}` : imp.symbol;\n if (!existingElements.includes(entry)) {\n existingElements.push(entry);\n }\n }\n\n // Determine formatting\n const arrayStart = arrayNode.getStart(sf);\n const arrayEnd = arrayNode.getEnd();\n const originalText = source.slice(arrayStart, arrayEnd);\n const isMultiline = originalText.includes('\\n');\n\n let newArrayText: string;\n if (isMultiline || existingElements.length > 3) {\n const indent = detectIndent(source, arrayStart);\n const itemIndent = indent + ' ';\n newArrayText = `[\\n${existingElements.map(e => `${itemIndent}${e},`).join('\\n')}\\n${indent}]`;\n } else {\n newArrayText = `[${existingElements.join(', ')}]`;\n }\n\n return source.slice(0, arrayStart) + newArrayText + source.slice(arrayEnd);\n}\n\nfunction addEsImports(source: string, filePath: string, imports: ImportToAdd[]): string {\n let result = source;\n\n // Group by import path\n const byPath = new Map<string, string[]>();\n for (const imp of imports) {\n const existing = byPath.get(imp.importPath) || [];\n existing.push(imp.symbol);\n byPath.set(imp.importPath, existing);\n }\n\n for (const [importPath, symbols] of byPath) {\n const sf = ts.createSourceFile(filePath, result, ts.ScriptTarget.Latest, true);\n\n // Check if there's already an import from this path\n const existingImport = sf.statements.find(\n (s): s is ts.ImportDeclaration =>\n ts.isImportDeclaration(s) && ts.isStringLiteral(s.moduleSpecifier) && s.moduleSpecifier.text === importPath,\n );\n\n if (existingImport?.importClause?.namedBindings && ts.isNamedImports(existingImport.importClause.namedBindings)) {\n // Extend existing import\n const namedBindings = existingImport.importClause.namedBindings;\n const existingNames = namedBindings.elements.map(el => el.name.text);\n const newNames = symbols.filter(s => !existingNames.includes(s));\n if (newNames.length === 0) continue;\n\n const allNames = [...existingNames, ...newNames].sort();\n const newClause = `{ ${allNames.join(', ')} }`;\n result = result.slice(0, namedBindings.getStart(sf)) + newClause + result.slice(namedBindings.getEnd());\n } else {\n // Add new import statement\n const sortedSymbols = [...symbols].sort();\n const newImport = `import { ${sortedSymbols.join(', ')} } from '${importPath}';\\n`;\n\n // Insert after the last existing import\n const lastImport = [...sf.statements].reverse().find(ts.isImportDeclaration);\n if (lastImport) {\n const pos = lastImport.getEnd();\n result = result.slice(0, pos) + '\\n' + newImport.trimEnd() + result.slice(pos);\n } else {\n result = newImport + result;\n }\n }\n }\n\n return result;\n}\n\nfunction detectIndent(source: string, pos: number): string {\n const lineStart = source.lastIndexOf('\\n', pos - 1) + 1;\n const match = source.slice(lineStart, pos).match(/^(\\s*)/);\n return match ? match[1] : '';\n}\n\nfunction removeFromEsImports(source: string, filePath: string, symbolsToRemove: string[]): string {\n let result = source;\n const sf = ts.createSourceFile(filePath, result, ts.ScriptTarget.Latest, true);\n\n for (const stmt of sf.statements) {\n if (!ts.isImportDeclaration(stmt) || !stmt.importClause?.namedBindings || !ts.isNamedImports(stmt.importClause.namedBindings)) continue;\n const namedBindings = stmt.importClause.namedBindings;\n const existingNames = namedBindings.elements.map(el => el.name.text);\n const remaining = existingNames.filter(n => !symbolsToRemove.includes(n));\n\n if (remaining.length === existingNames.length) continue; // Nothing to remove from this import\n\n if (remaining.length === 0) {\n // Remove the entire import statement\n result = result.slice(0, stmt.getStart(sf)) + result.slice(stmt.getEnd()).replace(/^\\r?\\n/, '');\n } else {\n const newClause = `{ ${remaining.join(', ')} }`;\n result = result.slice(0, namedBindings.getStart(sf)) + newClause + result.slice(namedBindings.getEnd());\n }\n break; // Only process the first matching import for the consolidated symbols\n }\n\n return result;\n}\n",
2148
- "displayName": "Schema",
2149
- "properties": [
2150
- {
2151
- "name": "dryRun",
2152
- "coverageIgnore": false,
2153
- "deprecated": false,
2154
- "deprecationMessage": "",
2155
- "type": "boolean",
2156
- "indexKey": "",
2157
- "optional": true,
2158
- "description": "",
2159
- "line": 9,
2160
- "rawdescription": "\n"
2161
- },
2162
- {
2163
- "name": "path",
2164
- "coverageIgnore": false,
2165
- "deprecated": false,
2166
- "deprecationMessage": "",
2167
- "type": "string",
2168
- "indexKey": "",
2169
- "optional": true,
2170
- "description": "",
2171
- "line": 8,
2172
- "rawdescription": "\n"
2173
- },
2174
- {
2175
- "name": "useClassArray",
2176
- "coverageIgnore": false,
2177
- "deprecated": false,
2178
- "deprecationMessage": "",
2179
- "type": "boolean",
2180
- "indexKey": "",
2181
- "optional": true,
2182
- "description": "",
2183
- "line": 10,
2184
- "rawdescription": "\n"
2185
- }
2186
- ],
2187
- "indexSignatures": [],
2188
- "kind": 172,
2189
- "methods": [],
2190
- "extends": [],
2191
- "relationships": {
2192
- "incoming": [],
2193
- "outgoing": []
2194
- }
2195
- },
2196
- {
2197
- "name": "Schema",
2198
- "id": "interface-Schema-4fe31ff3e9f1d34845a6b865d605e215f33552094b88c3d0eab0b180187fe64ce4d68d687516cb3d62c57d2678a103969b2dacbb18a49b26060f78096678fcce-1",
2142
+ "id": "interface-Schema-4fe31ff3e9f1d34845a6b865d605e215f33552094b88c3d0eab0b180187fe64ce4d68d687516cb3d62c57d2678a103969b2dacbb18a49b26060f78096678fcce",
2199
2143
  "file": "packages/core/schematics/fix-no-multiple-empty-lines/index.ts",
2200
2144
  "deprecated": false,
2201
2145
  "deprecationMessage": "",
@@ -2232,9 +2176,6 @@
2232
2176
  "kind": 172,
2233
2177
  "methods": [],
2234
2178
  "extends": [],
2235
- "isDuplicate": true,
2236
- "duplicateId": 1,
2237
- "duplicateName": "Schema-1",
2238
2179
  "relationships": {
2239
2180
  "incoming": [],
2240
2181
  "outgoing": []
@@ -2242,7 +2183,7 @@
2242
2183
  },
2243
2184
  {
2244
2185
  "name": "Schema",
2245
- "id": "interface-Schema-5cd6db1920bd5b70a44c0b8a7f7e30f600bfd16a9950f218e6d451a1755ced95b462ef9a62ee87e39bcb8c392981b8d2597895bf0a272fd8aea71f03429ed976-2",
2186
+ "id": "interface-Schema-5cd6db1920bd5b70a44c0b8a7f7e30f600bfd16a9950f218e6d451a1755ced95b462ef9a62ee87e39bcb8c392981b8d2597895bf0a272fd8aea71f03429ed976-1",
2246
2187
  "file": "packages/core/schematics/icon-migrate/schema.ts",
2247
2188
  "deprecated": false,
2248
2189
  "deprecationMessage": "",
@@ -2280,8 +2221,8 @@
2280
2221
  "methods": [],
2281
2222
  "extends": [],
2282
2223
  "isDuplicate": true,
2283
- "duplicateId": 2,
2284
- "duplicateName": "Schema-2",
2224
+ "duplicateId": 1,
2225
+ "duplicateName": "Schema-1",
2285
2226
  "relationships": {
2286
2227
  "incoming": [],
2287
2228
  "outgoing": []
@@ -2289,7 +2230,7 @@
2289
2230
  },
2290
2231
  {
2291
2232
  "name": "Schema",
2292
- "id": "interface-Schema-56b9fe60701ca349dc90e152829b0a18bb7a8a9bb303c4bac05f9764cd2e933cce0879775ca17168b4c881e202d0258af3668a2a3a1b940e561f7e4b2349b5cc-3",
2233
+ "id": "interface-Schema-56b9fe60701ca349dc90e152829b0a18bb7a8a9bb303c4bac05f9764cd2e933cce0879775ca17168b4c881e202d0258af3668a2a3a1b940e561f7e4b2349b5cc-2",
2293
2234
  "file": "packages/core/schematics/migrate/schema.ts",
2294
2235
  "deprecated": false,
2295
2236
  "deprecationMessage": "",
@@ -2339,8 +2280,8 @@
2339
2280
  "methods": [],
2340
2281
  "extends": [],
2341
2282
  "isDuplicate": true,
2342
- "duplicateId": 3,
2343
- "duplicateName": "Schema-3",
2283
+ "duplicateId": 2,
2284
+ "duplicateName": "Schema-2",
2344
2285
  "relationships": {
2345
2286
  "incoming": [],
2346
2287
  "outgoing": []
@@ -2348,7 +2289,7 @@
2348
2289
  },
2349
2290
  {
2350
2291
  "name": "Schema",
2351
- "id": "interface-Schema-e96d29c1785a16147de773cebe7ab5d4ed82aa23c6b1f7737113252a14d156e236f46f7a16340432dec900b664c8005be0aef5d0a628c2f5b8dd2ec7e41edf56-4",
2292
+ "id": "interface-Schema-e96d29c1785a16147de773cebe7ab5d4ed82aa23c6b1f7737113252a14d156e236f46f7a16340432dec900b664c8005be0aef5d0a628c2f5b8dd2ec7e41edf56-3",
2352
2293
  "file": "packages/core/schematics/migrate-eui-accent/index.ts",
2353
2294
  "deprecated": false,
2354
2295
  "deprecationMessage": "",
@@ -2386,8 +2327,8 @@
2386
2327
  "methods": [],
2387
2328
  "extends": [],
2388
2329
  "isDuplicate": true,
2389
- "duplicateId": 4,
2390
- "duplicateName": "Schema-4",
2330
+ "duplicateId": 3,
2331
+ "duplicateName": "Schema-3",
2391
2332
  "relationships": {
2392
2333
  "incoming": [],
2393
2334
  "outgoing": []
@@ -2395,7 +2336,7 @@
2395
2336
  },
2396
2337
  {
2397
2338
  "name": "Schema",
2398
- "id": "interface-Schema-585b211d989563bbec5bd67bcdb58d5f264396adbe0ed2e51d0b4a0ecaf8b3ec36d821647c170d616bb409fc603c5a4c0e699eb7511e02c6add8d8670fc9cb9f-5",
2339
+ "id": "interface-Schema-585b211d989563bbec5bd67bcdb58d5f264396adbe0ed2e51d0b4a0ecaf8b3ec36d821647c170d616bb409fc603c5a4c0e699eb7511e02c6add8d8670fc9cb9f-4",
2399
2340
  "file": "packages/core/schematics/migrate-eui-alert/index.ts",
2400
2341
  "deprecated": false,
2401
2342
  "deprecationMessage": "",
@@ -2433,8 +2374,8 @@
2433
2374
  "methods": [],
2434
2375
  "extends": [],
2435
2376
  "isDuplicate": true,
2436
- "duplicateId": 5,
2437
- "duplicateName": "Schema-5",
2377
+ "duplicateId": 4,
2378
+ "duplicateName": "Schema-4",
2438
2379
  "relationships": {
2439
2380
  "incoming": [],
2440
2381
  "outgoing": []
@@ -2442,7 +2383,7 @@
2442
2383
  },
2443
2384
  {
2444
2385
  "name": "Schema",
2445
- "id": "interface-Schema-c7e2cc0add09c97d83ec2675d59c86951681f8e2d49f133fb2f216ca98d0da1fdf892d45af31f19ecbbfd0d32f4ad70dd99e862f75725d3812f66a73ec34362c-6",
2386
+ "id": "interface-Schema-c7e2cc0add09c97d83ec2675d59c86951681f8e2d49f133fb2f216ca98d0da1fdf892d45af31f19ecbbfd0d32f4ad70dd99e862f75725d3812f66a73ec34362c-5",
2446
2387
  "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
2447
2388
  "deprecated": false,
2448
2389
  "deprecationMessage": "",
@@ -2480,8 +2421,8 @@
2480
2421
  "methods": [],
2481
2422
  "extends": [],
2482
2423
  "isDuplicate": true,
2483
- "duplicateId": 6,
2484
- "duplicateName": "Schema-6",
2424
+ "duplicateId": 5,
2425
+ "duplicateName": "Schema-5",
2485
2426
  "relationships": {
2486
2427
  "incoming": [],
2487
2428
  "outgoing": []
@@ -2489,7 +2430,7 @@
2489
2430
  },
2490
2431
  {
2491
2432
  "name": "Schema",
2492
- "id": "interface-Schema-c0c08f5e83da9afa13ce8375f982fb280b9bde854e00c914f41b04d44deecd531496c2cee264b50314e92a6260c26cebe35741a2cf5ec068d8b6da5c5267539e-7",
2433
+ "id": "interface-Schema-c0c08f5e83da9afa13ce8375f982fb280b9bde854e00c914f41b04d44deecd531496c2cee264b50314e92a6260c26cebe35741a2cf5ec068d8b6da5c5267539e-6",
2493
2434
  "file": "packages/core/schematics/migrate-eui-button/index.ts",
2494
2435
  "deprecated": false,
2495
2436
  "deprecationMessage": "",
@@ -2527,8 +2468,8 @@
2527
2468
  "methods": [],
2528
2469
  "extends": [],
2529
2470
  "isDuplicate": true,
2530
- "duplicateId": 7,
2531
- "duplicateName": "Schema-7",
2471
+ "duplicateId": 6,
2472
+ "duplicateName": "Schema-6",
2532
2473
  "relationships": {
2533
2474
  "incoming": [],
2534
2475
  "outgoing": []
@@ -2536,7 +2477,7 @@
2536
2477
  },
2537
2478
  {
2538
2479
  "name": "Schema",
2539
- "id": "interface-Schema-39d3d52e788050bebc4e0b99ed0756f7e9727556cb090ae8796bd4261a56463fe1f479c322b23028cd4134d71e4d1dc44cd248ac62a9a148b5fc46a665466f7c-8",
2480
+ "id": "interface-Schema-39d3d52e788050bebc4e0b99ed0756f7e9727556cb090ae8796bd4261a56463fe1f479c322b23028cd4134d71e4d1dc44cd248ac62a9a148b5fc46a665466f7c-7",
2540
2481
  "file": "packages/core/schematics/migrate-eui-chip/index.ts",
2541
2482
  "deprecated": false,
2542
2483
  "deprecationMessage": "",
@@ -2574,8 +2515,8 @@
2574
2515
  "methods": [],
2575
2516
  "extends": [],
2576
2517
  "isDuplicate": true,
2577
- "duplicateId": 8,
2578
- "duplicateName": "Schema-8",
2518
+ "duplicateId": 7,
2519
+ "duplicateName": "Schema-7",
2579
2520
  "relationships": {
2580
2521
  "incoming": [],
2581
2522
  "outgoing": []
@@ -2583,7 +2524,7 @@
2583
2524
  },
2584
2525
  {
2585
2526
  "name": "Schema",
2586
- "id": "interface-Schema-311bef7d5e4b40b356b0fdb5e35dd89e48a5c5beec29eeb865c22c2ca1c4c4fb1fd0bb4391ed0b33825a6d1d744bc3a2e9822b347fbc686a537e15b170c279dd-9",
2527
+ "id": "interface-Schema-311bef7d5e4b40b356b0fdb5e35dd89e48a5c5beec29eeb865c22c2ca1c4c4fb1fd0bb4391ed0b33825a6d1d744bc3a2e9822b347fbc686a537e15b170c279dd-8",
2587
2528
  "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
2588
2529
  "deprecated": false,
2589
2530
  "deprecationMessage": "",
@@ -2621,8 +2562,8 @@
2621
2562
  "methods": [],
2622
2563
  "extends": [],
2623
2564
  "isDuplicate": true,
2624
- "duplicateId": 9,
2625
- "duplicateName": "Schema-9",
2565
+ "duplicateId": 8,
2566
+ "duplicateName": "Schema-8",
2626
2567
  "relationships": {
2627
2568
  "incoming": [],
2628
2569
  "outgoing": []
@@ -2630,7 +2571,7 @@
2630
2571
  },
2631
2572
  {
2632
2573
  "name": "Schema",
2633
- "id": "interface-Schema-869dfc324e9111966817cbebb3553eabfe200acfe33bb77efa71a6c46e1cba0ff5852de7b9ade3060f87264035b99591361331a9e0622daaac22b8d59146c761-10",
2574
+ "id": "interface-Schema-869dfc324e9111966817cbebb3553eabfe200acfe33bb77efa71a6c46e1cba0ff5852de7b9ade3060f87264035b99591361331a9e0622daaac22b8d59146c761-9",
2634
2575
  "file": "packages/core/schematics/migrate-eui-discussion-thread/index.ts",
2635
2576
  "deprecated": false,
2636
2577
  "deprecationMessage": "",
@@ -2668,8 +2609,8 @@
2668
2609
  "methods": [],
2669
2610
  "extends": [],
2670
2611
  "isDuplicate": true,
2671
- "duplicateId": 10,
2672
- "duplicateName": "Schema-10",
2612
+ "duplicateId": 9,
2613
+ "duplicateName": "Schema-9",
2673
2614
  "relationships": {
2674
2615
  "incoming": [],
2675
2616
  "outgoing": []
@@ -2677,7 +2618,7 @@
2677
2618
  },
2678
2619
  {
2679
2620
  "name": "Schema",
2680
- "id": "interface-Schema-375dc0924084a2acbafe4a6a32577d59f631c9a386d151180d8fb1c89e7e7cd23da9fd459e597592ed823692adb6ad2633c50baf16621f003246e8c9bb1c6ce0-11",
2621
+ "id": "interface-Schema-375dc0924084a2acbafe4a6a32577d59f631c9a386d151180d8fb1c89e7e7cd23da9fd459e597592ed823692adb6ad2633c50baf16621f003246e8c9bb1c6ce0-10",
2681
2622
  "file": "packages/core/schematics/migrate-eui-editor/index.ts",
2682
2623
  "deprecated": false,
2683
2624
  "deprecationMessage": "",
@@ -2715,8 +2656,8 @@
2715
2656
  "methods": [],
2716
2657
  "extends": [],
2717
2658
  "isDuplicate": true,
2718
- "duplicateId": 11,
2719
- "duplicateName": "Schema-11",
2659
+ "duplicateId": 10,
2660
+ "duplicateName": "Schema-10",
2720
2661
  "relationships": {
2721
2662
  "incoming": [],
2722
2663
  "outgoing": []
@@ -2724,7 +2665,7 @@
2724
2665
  },
2725
2666
  {
2726
2667
  "name": "Schema",
2727
- "id": "interface-Schema-0ee574e11dd651dd971057cb66220845e5b87b2949c69c623c8ddf7355af92a396c58c237a52a05f18c22a5332a2695b717bcfeb8ea840c4e7df8d0084c2b49c-12",
2668
+ "id": "interface-Schema-0ee574e11dd651dd971057cb66220845e5b87b2949c69c623c8ddf7355af92a396c58c237a52a05f18c22a5332a2695b717bcfeb8ea840c4e7df8d0084c2b49c-11",
2728
2669
  "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
2729
2670
  "deprecated": false,
2730
2671
  "deprecationMessage": "",
@@ -2762,8 +2703,8 @@
2762
2703
  "methods": [],
2763
2704
  "extends": [],
2764
2705
  "isDuplicate": true,
2765
- "duplicateId": 12,
2766
- "duplicateName": "Schema-12",
2706
+ "duplicateId": 11,
2707
+ "duplicateName": "Schema-11",
2767
2708
  "relationships": {
2768
2709
  "incoming": [],
2769
2710
  "outgoing": []
@@ -2771,7 +2712,7 @@
2771
2712
  },
2772
2713
  {
2773
2714
  "name": "Schema",
2774
- "id": "interface-Schema-b3ff4600c4a5ca1888c45e5baf3600fa6dc6477f1e473e5241ff6682e2929dc8950a5dfa8b1048a348dba7ad1f0ce8cc3681471933911b689e04713334ef4811-13",
2715
+ "id": "interface-Schema-b3ff4600c4a5ca1888c45e5baf3600fa6dc6477f1e473e5241ff6682e2929dc8950a5dfa8b1048a348dba7ad1f0ce8cc3681471933911b689e04713334ef4811-12",
2775
2716
  "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
2776
2717
  "deprecated": false,
2777
2718
  "deprecationMessage": "",
@@ -2809,8 +2750,8 @@
2809
2750
  "methods": [],
2810
2751
  "extends": [],
2811
2752
  "isDuplicate": true,
2812
- "duplicateId": 13,
2813
- "duplicateName": "Schema-13",
2753
+ "duplicateId": 12,
2754
+ "duplicateName": "Schema-12",
2814
2755
  "relationships": {
2815
2756
  "incoming": [],
2816
2757
  "outgoing": []
@@ -2818,7 +2759,7 @@
2818
2759
  },
2819
2760
  {
2820
2761
  "name": "Schema",
2821
- "id": "interface-Schema-21147930d3fbc38fbb3052a2ed9e7aa2b7505e6ed8c88c28796ce7101bd2ad914726eb230dda5826647036190edec6dae7e7e1d172387cd3803aa00bcdf790be-14",
2762
+ "id": "interface-Schema-21147930d3fbc38fbb3052a2ed9e7aa2b7505e6ed8c88c28796ce7101bd2ad914726eb230dda5826647036190edec6dae7e7e1d172387cd3803aa00bcdf790be-13",
2822
2763
  "file": "packages/core/schematics/migrate-eui-icon-toggle/index.ts",
2823
2764
  "deprecated": false,
2824
2765
  "deprecationMessage": "",
@@ -2856,8 +2797,8 @@
2856
2797
  "methods": [],
2857
2798
  "extends": [],
2858
2799
  "isDuplicate": true,
2859
- "duplicateId": 14,
2860
- "duplicateName": "Schema-14",
2800
+ "duplicateId": 13,
2801
+ "duplicateName": "Schema-13",
2861
2802
  "relationships": {
2862
2803
  "incoming": [],
2863
2804
  "outgoing": []
@@ -2865,7 +2806,7 @@
2865
2806
  },
2866
2807
  {
2867
2808
  "name": "Schema",
2868
- "id": "interface-Schema-a806c1769fb526271565003a6a3ef9ab4c67e421d93ee0cb54e1f6de223807afc1f16ad294656ef614a77a91a38cc914ce41ac97ed3a8a4195a1e74a729c0c08-15",
2809
+ "id": "interface-Schema-a806c1769fb526271565003a6a3ef9ab4c67e421d93ee0cb54e1f6de223807afc1f16ad294656ef614a77a91a38cc914ce41ac97ed3a8a4195a1e74a729c0c08-14",
2869
2810
  "file": "packages/core/schematics/migrate-eui-popover/index.ts",
2870
2811
  "deprecated": false,
2871
2812
  "deprecationMessage": "",
@@ -2903,8 +2844,8 @@
2903
2844
  "methods": [],
2904
2845
  "extends": [],
2905
2846
  "isDuplicate": true,
2906
- "duplicateId": 15,
2907
- "duplicateName": "Schema-15",
2847
+ "duplicateId": 14,
2848
+ "duplicateName": "Schema-14",
2908
2849
  "relationships": {
2909
2850
  "incoming": [],
2910
2851
  "outgoing": []
@@ -2912,7 +2853,7 @@
2912
2853
  },
2913
2854
  {
2914
2855
  "name": "Schema",
2915
- "id": "interface-Schema-90e62c16ce9ada881e8d434336bb633dae9745236106ddf60964afbd11de6aa579255a13d6036b384281860eb6ed2ee329194b519c51fdaf20f79bc511d0f64f-16",
2856
+ "id": "interface-Schema-90e62c16ce9ada881e8d434336bb633dae9745236106ddf60964afbd11de6aa579255a13d6036b384281860eb6ed2ee329194b519c51fdaf20f79bc511d0f64f-15",
2916
2857
  "file": "packages/core/schematics/migrate-eui-progress-circle/index.ts",
2917
2858
  "deprecated": false,
2918
2859
  "deprecationMessage": "",
@@ -2950,8 +2891,8 @@
2950
2891
  "methods": [],
2951
2892
  "extends": [],
2952
2893
  "isDuplicate": true,
2953
- "duplicateId": 16,
2954
- "duplicateName": "Schema-16",
2894
+ "duplicateId": 15,
2895
+ "duplicateName": "Schema-15",
2955
2896
  "relationships": {
2956
2897
  "incoming": [],
2957
2898
  "outgoing": []
@@ -2959,7 +2900,7 @@
2959
2900
  },
2960
2901
  {
2961
2902
  "name": "Schema",
2962
- "id": "interface-Schema-91c9f900bf3ebb82488fb65644938ef486ceaa447cff8bfd9d710df9595d82acb267b26f3c252173bc684353f362473120226426ed7ee5d98b33e30011dd9383-17",
2903
+ "id": "interface-Schema-91c9f900bf3ebb82488fb65644938ef486ceaa447cff8bfd9d710df9595d82acb267b26f3c252173bc684353f362473120226426ed7ee5d98b33e30011dd9383-16",
2963
2904
  "file": "packages/core/schematics/migrate-eui-table/index.ts",
2964
2905
  "deprecated": false,
2965
2906
  "deprecationMessage": "",
@@ -2997,8 +2938,8 @@
2997
2938
  "methods": [],
2998
2939
  "extends": [],
2999
2940
  "isDuplicate": true,
3000
- "duplicateId": 17,
3001
- "duplicateName": "Schema-17",
2941
+ "duplicateId": 16,
2942
+ "duplicateName": "Schema-16",
3002
2943
  "relationships": {
3003
2944
  "incoming": [],
3004
2945
  "outgoing": []
@@ -3006,7 +2947,7 @@
3006
2947
  },
3007
2948
  {
3008
2949
  "name": "Schema",
3009
- "id": "interface-Schema-760dec88d3f709d5b38226e55f7cbfb1e5fabcea6c004fd46e611be1dd563b8b247e9e6c77667e5582fe7b443374ba2c4facd2b2db2985edb46c9a4a37a8a876-18",
2950
+ "id": "interface-Schema-760dec88d3f709d5b38226e55f7cbfb1e5fabcea6c004fd46e611be1dd563b8b247e9e6c77667e5582fe7b443374ba2c4facd2b2db2985edb46c9a4a37a8a876-17",
3010
2951
  "file": "packages/core/schematics/migrate-eui-tabs/index.ts",
3011
2952
  "deprecated": false,
3012
2953
  "deprecationMessage": "",
@@ -3044,8 +2985,8 @@
3044
2985
  "methods": [],
3045
2986
  "extends": [],
3046
2987
  "isDuplicate": true,
3047
- "duplicateId": 18,
3048
- "duplicateName": "Schema-18",
2988
+ "duplicateId": 17,
2989
+ "duplicateName": "Schema-17",
3049
2990
  "relationships": {
3050
2991
  "incoming": [],
3051
2992
  "outgoing": []
@@ -3053,7 +2994,7 @@
3053
2994
  },
3054
2995
  {
3055
2996
  "name": "Schema",
3056
- "id": "interface-Schema-e1cd02924eb82a618c71a0b26c081bdd020519d2699aa0e2dc98640c4e0f347c3649b967c5fc87543e41bbbfabd1304835850ccc38f40684d6521c242b2030ed-19",
2997
+ "id": "interface-Schema-e1cd02924eb82a618c71a0b26c081bdd020519d2699aa0e2dc98640c4e0f347c3649b967c5fc87543e41bbbfabd1304835850ccc38f40684d6521c242b2030ed-18",
3057
2998
  "file": "packages/core/schematics/migrate-eui-toolbar-menu/index.ts",
3058
2999
  "deprecated": false,
3059
3000
  "deprecationMessage": "",
@@ -3091,8 +3032,8 @@
3091
3032
  "methods": [],
3092
3033
  "extends": [],
3093
3034
  "isDuplicate": true,
3094
- "duplicateId": 19,
3095
- "duplicateName": "Schema-19",
3035
+ "duplicateId": 18,
3036
+ "duplicateName": "Schema-18",
3096
3037
  "relationships": {
3097
3038
  "incoming": [],
3098
3039
  "outgoing": []
@@ -3100,7 +3041,7 @@
3100
3041
  },
3101
3042
  {
3102
3043
  "name": "Schema",
3103
- "id": "interface-Schema-d36032102ed30a7ada1e3d36bb9ca41b7234b855760cac9783a25818f7ffe2097e1ebd8e808b574ddec0760f827272f6cd561f45f3eb1578f87f39ee2633730a-20",
3044
+ "id": "interface-Schema-d36032102ed30a7ada1e3d36bb9ca41b7234b855760cac9783a25818f7ffe2097e1ebd8e808b574ddec0760f827272f6cd561f45f3eb1578f87f39ee2633730a-19",
3104
3045
  "file": "packages/core/schematics/migrate-eui-tooltip/index.ts",
3105
3046
  "deprecated": false,
3106
3047
  "deprecationMessage": "",
@@ -3138,8 +3079,8 @@
3138
3079
  "methods": [],
3139
3080
  "extends": [],
3140
3081
  "isDuplicate": true,
3141
- "duplicateId": 20,
3142
- "duplicateName": "Schema-20",
3082
+ "duplicateId": 19,
3083
+ "duplicateName": "Schema-19",
3143
3084
  "relationships": {
3144
3085
  "incoming": [],
3145
3086
  "outgoing": []
@@ -3147,7 +3088,7 @@
3147
3088
  },
3148
3089
  {
3149
3090
  "name": "Schema",
3150
- "id": "interface-Schema-cac2ac952d8245647e8a48b450e8f127a36bcffb394cf2cd81fe9c0810ed02c19e5e1629dbf29a68a5c6f675aed99570e9ac04ae470e13315e20c92cc0c6c453-21",
3091
+ "id": "interface-Schema-cac2ac952d8245647e8a48b450e8f127a36bcffb394cf2cd81fe9c0810ed02c19e5e1629dbf29a68a5c6f675aed99570e9ac04ae470e13315e20c92cc0c6c453-20",
3151
3092
  "file": "packages/core/schematics/migrate-to-signals/index.ts",
3152
3093
  "deprecated": false,
3153
3094
  "deprecationMessage": "",
@@ -3185,8 +3126,8 @@
3185
3126
  "methods": [],
3186
3127
  "extends": [],
3187
3128
  "isDuplicate": true,
3188
- "duplicateId": 21,
3189
- "duplicateName": "Schema-21",
3129
+ "duplicateId": 20,
3130
+ "duplicateName": "Schema-20",
3190
3131
  "relationships": {
3191
3132
  "incoming": [],
3192
3133
  "outgoing": []
@@ -3194,7 +3135,7 @@
3194
3135
  },
3195
3136
  {
3196
3137
  "name": "Schema",
3197
- "id": "interface-Schema-817c4b549cc3eab9fcf4936acab2e71182d90a4480369f5c003cbbda10792efa587ad99d65acf049f64e7030e32589e4fabc4a6d7a5621e4fe54725ef91dc9e8-22",
3138
+ "id": "interface-Schema-817c4b549cc3eab9fcf4936acab2e71182d90a4480369f5c003cbbda10792efa587ad99d65acf049f64e7030e32589e4fabc4a6d7a5621e4fe54725ef91dc9e8-21",
3198
3139
  "file": "packages/core/schematics/migrate-to-standalone/index.ts",
3199
3140
  "deprecated": false,
3200
3141
  "deprecationMessage": "",
@@ -3232,6 +3173,65 @@
3232
3173
  "methods": [],
3233
3174
  "extends": [],
3234
3175
  "isDuplicate": true,
3176
+ "duplicateId": 21,
3177
+ "duplicateName": "Schema-21",
3178
+ "relationships": {
3179
+ "incoming": [],
3180
+ "outgoing": []
3181
+ }
3182
+ },
3183
+ {
3184
+ "name": "Schema",
3185
+ "id": "interface-Schema-9c5e016857e1416ac7bbb881973e644c0f578a53bd432bb951c1676ac3f2a6631bfe3344860346a081b841217278723e0bb0bf2fa35fb869de67cb0cc8d99849-22",
3186
+ "file": "packages/core/schematics/add-eui-imports/index.ts",
3187
+ "deprecated": false,
3188
+ "deprecationMessage": "",
3189
+ "type": "interface",
3190
+ "sourceCode": "import { parseTemplate, TmplAstElement, TmplAstNode, TmplAstTemplate } from '@angular/compiler';\nimport { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\nimport { SELECTOR_MAP, SelectorEntry, getClassNamesForArray } from './selector-map';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n useClassArray?: boolean;\n}\n\ninterface ImportToAdd {\n /** The symbol to add to imports array (class name or array name for spread) */\n symbol: string;\n /** Whether this should be spread (...EUI_BUTTON) */\n isSpread: boolean;\n /** ES import path */\n importPath: string;\n}\n\nexport function addEuiImports(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n const useClassArray = options.useClassArray ?? false;\n let filesUpdated = 0;\n\n // Index NgModules for standalone:false support\n const ngModuleIndex = buildNgModuleIndex(tree, tree.getDir(scanPath || '/'));\n\n visitDir(tree.getDir(scanPath || '/'), (path) => {\n if (!path.endsWith('.ts') || path.endsWith('.spec.ts')) return;\n\n const buffer = tree.read(path);\n if (!buffer) return;\n const source = buffer.toString('utf-8');\n\n const sourceFile = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);\n const components = findComponentDecorators(sourceFile);\n if (components.length === 0) return;\n\n let modified = false;\n\n for (const { decorator, className: componentClassName, isNonStandalone } of components) {\n const templateHtml = getTemplateContent(tree, path, decorator, source);\n if (!templateHtml) continue;\n\n const matched = matchSelectorsInTemplate(templateHtml);\n if (matched.length === 0) continue;\n\n const importsToAdd = resolveImports(matched, useClassArray);\n if (importsToAdd.length === 0) continue;\n\n if (isNonStandalone) {\n // Find the NgModule that declares this component and add imports there\n const moduleInfo = findDeclaringModule(ngModuleIndex, componentClassName);\n if (!moduleInfo) {\n context.logger.warn(`⚠ Could not find declaring NgModule for ${componentClassName} in ${path}`);\n continue;\n }\n const moduleBuffer = tree.read(moduleInfo.path);\n if (!moduleBuffer) continue;\n const moduleSource = moduleBuffer.toString('utf-8');\n const result = addImportsToFile(moduleSource, moduleInfo.path, moduleInfo.decoratorPos, importsToAdd, useClassArray);\n if (result !== moduleSource) {\n if (options.dryRun) {\n logDryRun(context, `Would add EUI imports to NgModule in ${moduleInfo.path} for component ${componentClassName}`);\n } else {\n tree.overwrite(moduleInfo.path, result);\n }\n modified = true;\n }\n } else {\n // Standalone component — add imports directly\n const currentSource = tree.read(path)!.toString('utf-8');\n const result = addImportsToFile(currentSource, path, decorator.getStart(), importsToAdd, useClassArray);\n if (result !== currentSource) {\n if (options.dryRun) {\n logDryRun(context, `Would add EUI imports to ${path}`);\n } else {\n tree.overwrite(path, result);\n }\n modified = true;\n }\n }\n }\n\n if (modified) filesUpdated++;\n });\n\n context.logger.info(`add-eui-imports: ${filesUpdated} file(s) updated.`);\n if (options.dryRun) logDryRunNote(context);\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\n// --- Selector Matching ---\n\nfunction matchSelectorsInTemplate(html: string): SelectorEntry[] {\n const parsed = parseTemplate(html, '', { preserveWhitespaces: true });\n if (parsed.errors?.length) return [];\n\n const matched: SelectorEntry[] = [];\n visitTemplateNodes(parsed.nodes, matched);\n return matched;\n}\n\nfunction visitTemplateNodes(nodes: TmplAstNode[], matched: SelectorEntry[]): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n matchElement(node, matched);\n visitTemplateNodes(node.children, matched);\n } else if (node instanceof TmplAstTemplate) {\n visitTemplateNodes(node.children, matched);\n }\n }\n}\n\nfunction matchElement(element: TmplAstElement, matched: SelectorEntry[]): void {\n const tagName = element.name;\n const attrNames = new Set([\n ...element.attributes.map(a => a.name),\n ...element.inputs.map(i => i.name),\n ]);\n\n for (const entry of SELECTOR_MAP) {\n if (entry.element && entry.element !== tagName) continue;\n if (!entry.element && entry.attributes.length === 0) continue;\n if (!entry.attributes.every(attr => attrNames.has(attr))) continue;\n // If no element specified, at least one attribute must match on this element\n if (!entry.element && entry.attributes.length > 0 && !entry.attributes.some(attr => attrNames.has(attr))) continue;\n matched.push(entry);\n }\n}\n\n// --- Import Resolution ---\n\nfunction resolveImports(matched: SelectorEntry[], useClassArray: boolean): ImportToAdd[] {\n const seen = new Set<string>();\n const result: ImportToAdd[] = [];\n\n for (const entry of matched) {\n if (useClassArray && entry.classArray) {\n if (seen.has(entry.classArray)) continue;\n seen.add(entry.classArray);\n result.push({ symbol: entry.classArray, isSpread: true, importPath: entry.importPath });\n } else {\n if (seen.has(entry.className)) continue;\n seen.add(entry.className);\n result.push({ symbol: entry.className, isSpread: false, importPath: entry.importPath });\n }\n }\n\n return result;\n}\n\n// --- Template Extraction ---\n\nfunction getTemplateContent(tree: Tree, tsPath: string, decorator: ts.Decorator, source: string): string | null {\n const call = decorator.expression as ts.CallExpression;\n if (!call.arguments[0] || !ts.isObjectLiteralExpression(call.arguments[0])) return null;\n const metadata = call.arguments[0];\n\n for (const prop of metadata.properties) {\n if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) continue;\n if (prop.name.text === 'template') {\n const init = prop.initializer;\n if (ts.isStringLiteral(init) || ts.isNoSubstitutionTemplateLiteral(init)) {\n return init.text;\n }\n }\n if (prop.name.text === 'templateUrl') {\n if (ts.isStringLiteral(prop.initializer)) {\n const dir = tsPath.substring(0, tsPath.lastIndexOf('/'));\n const templateBuffer = tree.read(`${dir}/${prop.initializer.text}`);\n if (templateBuffer) return templateBuffer.toString('utf-8');\n }\n }\n }\n return null;\n}\n\n// --- Component Decorator Detection ---\n\ninterface ComponentInfo {\n decorator: ts.Decorator;\n className: string;\n isNonStandalone: boolean;\n}\n\nfunction findComponentDecorators(sourceFile: ts.SourceFile): ComponentInfo[] {\n const results: ComponentInfo[] = [];\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node) && node.name) {\n const decs = ts.getDecorators(node);\n if (decs) {\n for (const dec of decs) {\n if (ts.isCallExpression(dec.expression) && ts.isIdentifier(dec.expression.expression) && dec.expression.expression.text === 'Component') {\n const isNonStandalone = hasStandaloneFalse(dec);\n results.push({ decorator: dec, className: node.name.text, isNonStandalone });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sourceFile);\n return results;\n}\n\nfunction hasStandaloneFalse(decorator: ts.Decorator): boolean {\n const call = decorator.expression as ts.CallExpression;\n if (!call.arguments[0] || !ts.isObjectLiteralExpression(call.arguments[0])) return false;\n for (const prop of call.arguments[0].properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name) && prop.name.text === 'standalone') {\n return prop.initializer.kind === ts.SyntaxKind.FalseKeyword;\n }\n }\n return false;\n}\n\n// --- NgModule Index ---\n\ninterface NgModuleInfo {\n path: string;\n declarations: string[];\n decoratorPos: number;\n}\n\nfunction buildNgModuleIndex(tree: Tree, dir: DirEntry): NgModuleInfo[] {\n const modules: NgModuleInfo[] = [];\n\n visitDir(dir, (path) => {\n if (!path.endsWith('.ts') || path.endsWith('.spec.ts')) return;\n\n const buffer = tree.read(path);\n if (!buffer) return;\n const source = buffer.toString('utf-8');\n if (!source.includes('NgModule')) return;\n\n const sf = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);\n const visit = (node: ts.Node): void => {\n if (ts.isClassDeclaration(node)) {\n const decs = ts.getDecorators(node);\n if (decs) {\n for (const dec of decs) {\n if (ts.isCallExpression(dec.expression) && ts.isIdentifier(dec.expression.expression) && dec.expression.expression.text === 'NgModule') {\n const declarations = extractArrayProperty(dec, 'declarations', source);\n modules.push({ path, declarations, decoratorPos: dec.getStart() });\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sf);\n });\n\n return modules;\n}\n\nfunction extractArrayProperty(decorator: ts.Decorator, propName: string, source: string): string[] {\n const call = decorator.expression as ts.CallExpression;\n if (!call.arguments[0] || !ts.isObjectLiteralExpression(call.arguments[0])) return [];\n for (const prop of call.arguments[0].properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name) && prop.name.text === propName) {\n if (ts.isArrayLiteralExpression(prop.initializer)) {\n return prop.initializer.elements\n .filter(ts.isIdentifier)\n .map(id => id.text);\n }\n }\n }\n return [];\n}\n\nfunction findDeclaringModule(modules: NgModuleInfo[], componentClassName: string): NgModuleInfo | undefined {\n return modules.find(m => m.declarations.includes(componentClassName));\n}\n\n// --- Import Addition ---\n\nfunction addImportsToFile(source: string, filePath: string, decoratorStartHint: number, imports: ImportToAdd[], useClassArray: boolean): string {\n const sf = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n\n // Find the imports array in the decorator closest to decoratorStartHint\n const importsArrayInfo = findDecoratorImportsArray(sf, source, decoratorStartHint);\n if (!importsArrayInfo) return source;\n\n const { arrayNode, decoratorType } = importsArrayInfo;\n\n // Determine what's already in the imports array\n const existingSymbols = new Set<string>();\n const existingSpreads = new Set<string>();\n for (const el of arrayNode.elements) {\n if (ts.isSpreadElement(el) && ts.isIdentifier(el.expression)) {\n existingSpreads.add(el.expression.text);\n } else if (ts.isIdentifier(el)) {\n existingSymbols.add(el.text);\n }\n }\n\n // Filter out already-present imports and compute what to add/remove\n const toAdd: ImportToAdd[] = [];\n const toRemoveFromArray: string[] = []; // individual class names to consolidate\n\n for (const imp of imports) {\n if (imp.isSpread) {\n if (existingSpreads.has(imp.symbol)) continue; // Already has ...EUI_X\n toAdd.push(imp);\n // Consolidate: remove individual class names covered by this array\n if (useClassArray) {\n const coveredClasses = getClassNamesForArray(imp.symbol);\n for (const cls of coveredClasses) {\n if (existingSymbols.has(cls)) toRemoveFromArray.push(cls);\n }\n }\n } else {\n if (existingSymbols.has(imp.symbol)) continue;\n // Also skip if a spread already covers this class\n const coveringArray = imports.find(i => i.isSpread && getClassNamesForArray(i.symbol).includes(imp.symbol));\n if (coveringArray && (existingSpreads.has(coveringArray.symbol) || toAdd.some(a => a.symbol === coveringArray.symbol))) continue;\n toAdd.push(imp);\n }\n }\n\n if (toAdd.length === 0 && toRemoveFromArray.length === 0) return source;\n\n // Build new array content\n let result = source;\n result = updateDecoratorImportsArray(result, filePath, arrayNode, toAdd, toRemoveFromArray);\n\n // Add ES imports\n result = addEsImports(result, filePath, toAdd);\n\n // Remove consolidated class names from ES imports\n if (toRemoveFromArray.length > 0) {\n result = removeFromEsImports(result, filePath, toRemoveFromArray);\n }\n\n return result;\n}\n\ninterface ImportsArrayInfo {\n arrayNode: ts.ArrayLiteralExpression;\n decoratorType: 'Component' | 'NgModule';\n}\n\nfunction findDecoratorImportsArray(sf: ts.SourceFile, source: string, decoratorStartHint: number): ImportsArrayInfo | null {\n let found: ImportsArrayInfo | null = null;\n\n const visit = (node: ts.Node): void => {\n if (found) return;\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)) continue;\n if (!ts.isIdentifier(dec.expression.expression)) continue;\n const decName = dec.expression.expression.text;\n if (decName !== 'Component' && decName !== 'NgModule') continue;\n if (Math.abs(dec.getStart() - decoratorStartHint) > 5) continue; // Match by position\n\n const metadata = dec.expression.arguments[0];\n if (!ts.isObjectLiteralExpression(metadata)) continue;\n\n for (const prop of metadata.properties) {\n if (ts.isPropertyAssignment(prop) && ts.isIdentifier(prop.name) && prop.name.text === 'imports') {\n if (ts.isArrayLiteralExpression(prop.initializer)) {\n found = { arrayNode: prop.initializer, decoratorType: decName as 'Component' | 'NgModule' };\n return;\n }\n }\n }\n\n // No imports array found — create one\n if (!found && decName === 'Component') {\n // We need to add `imports: []` to the decorator\n // Insert after the last property\n const lastProp = metadata.properties[metadata.properties.length - 1];\n if (lastProp) {\n const insertPos = lastProp.getEnd();\n const indent = detectIndent(source, metadata.getStart());\n const insertion = `,\\n${indent} imports: []`;\n const newSource = source.slice(0, insertPos) + insertion + source.slice(insertPos);\n // Re-parse to get the array node\n const newSf = ts.createSourceFile('', newSource, ts.ScriptTarget.Latest, true);\n const newArray = findImportsArrayInSource(newSf);\n if (newArray) {\n // We can't return a node from a different source file in the general case.\n // Instead, we'll handle the \"no imports array\" case by adding it inline.\n found = null; // Will be handled separately\n }\n }\n }\n }\n }\n ts.forEachChild(node, visit);\n };\n visit(sf);\n return found;\n}\n\nfunction findImportsArrayInSource(sf: ts.SourceFile): ts.ArrayLiteralExpression | null {\n let found: ts.ArrayLiteralExpression | null = null;\n const visit = (node: ts.Node): void => {\n if (found) return;\n if (ts.isPropertyAssignment(node) && ts.isIdentifier(node.name) && node.name.text === 'imports' && ts.isArrayLiteralExpression(node.initializer)) {\n found = node.initializer;\n }\n ts.forEachChild(node, visit);\n };\n visit(sf);\n return found;\n}\n\nfunction updateDecoratorImportsArray(source: string, filePath: string, arrayNode: ts.ArrayLiteralExpression, toAdd: ImportToAdd[], toRemove: string[]): string {\n const sf = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true);\n\n // Rebuild the array content\n const existingElements: string[] = [];\n for (const el of arrayNode.elements) {\n const text = source.slice(el.getStart(sf), el.getEnd()).trim();\n // Check if this element should be removed (consolidation)\n if (ts.isIdentifier(el) && toRemove.includes(el.text)) continue;\n existingElements.push(text);\n }\n\n // Add new entries\n for (const imp of toAdd) {\n const entry = imp.isSpread ? `...${imp.symbol}` : imp.symbol;\n if (!existingElements.includes(entry)) {\n existingElements.push(entry);\n }\n }\n\n // Determine formatting\n const arrayStart = arrayNode.getStart(sf);\n const arrayEnd = arrayNode.getEnd();\n const originalText = source.slice(arrayStart, arrayEnd);\n const isMultiline = originalText.includes('\\n');\n\n let newArrayText: string;\n if (isMultiline || existingElements.length > 3) {\n const indent = detectIndent(source, arrayStart);\n const itemIndent = indent + ' ';\n newArrayText = `[\\n${existingElements.map(e => `${itemIndent}${e},`).join('\\n')}\\n${indent}]`;\n } else {\n newArrayText = `[${existingElements.join(', ')}]`;\n }\n\n return source.slice(0, arrayStart) + newArrayText + source.slice(arrayEnd);\n}\n\nfunction addEsImports(source: string, filePath: string, imports: ImportToAdd[]): string {\n let result = source;\n\n // Group by import path\n const byPath = new Map<string, string[]>();\n for (const imp of imports) {\n const existing = byPath.get(imp.importPath) || [];\n existing.push(imp.symbol);\n byPath.set(imp.importPath, existing);\n }\n\n for (const [importPath, symbols] of byPath) {\n const sf = ts.createSourceFile(filePath, result, ts.ScriptTarget.Latest, true);\n\n // Check if there's already an import from this path\n const existingImport = sf.statements.find(\n (s): s is ts.ImportDeclaration =>\n ts.isImportDeclaration(s) && ts.isStringLiteral(s.moduleSpecifier) && s.moduleSpecifier.text === importPath,\n );\n\n if (existingImport?.importClause?.namedBindings && ts.isNamedImports(existingImport.importClause.namedBindings)) {\n // Extend existing import\n const namedBindings = existingImport.importClause.namedBindings;\n const existingNames = namedBindings.elements.map(el => el.name.text);\n const newNames = symbols.filter(s => !existingNames.includes(s));\n if (newNames.length === 0) continue;\n\n const allNames = [...existingNames, ...newNames].sort();\n const newClause = `{ ${allNames.join(', ')} }`;\n result = result.slice(0, namedBindings.getStart(sf)) + newClause + result.slice(namedBindings.getEnd());\n } else {\n // Add new import statement\n const sortedSymbols = [...symbols].sort();\n const newImport = `import { ${sortedSymbols.join(', ')} } from '${importPath}';\\n`;\n\n // Insert after the last existing import\n const lastImport = [...sf.statements].reverse().find(ts.isImportDeclaration);\n if (lastImport) {\n const pos = lastImport.getEnd();\n result = result.slice(0, pos) + '\\n' + newImport.trimEnd() + result.slice(pos);\n } else {\n result = newImport + result;\n }\n }\n }\n\n return result;\n}\n\nfunction detectIndent(source: string, pos: number): string {\n const lineStart = source.lastIndexOf('\\n', pos - 1) + 1;\n const match = source.slice(lineStart, pos).match(/^(\\s*)/);\n return match ? match[1] : '';\n}\n\nfunction removeFromEsImports(source: string, filePath: string, symbolsToRemove: string[]): string {\n let result = source;\n const sf = ts.createSourceFile(filePath, result, ts.ScriptTarget.Latest, true);\n\n for (const stmt of sf.statements) {\n if (!ts.isImportDeclaration(stmt) || !stmt.importClause?.namedBindings || !ts.isNamedImports(stmt.importClause.namedBindings)) continue;\n const namedBindings = stmt.importClause.namedBindings;\n const existingNames = namedBindings.elements.map(el => el.name.text);\n const remaining = existingNames.filter(n => !symbolsToRemove.includes(n));\n\n if (remaining.length === existingNames.length) continue; // Nothing to remove from this import\n\n if (remaining.length === 0) {\n // Remove the entire import statement\n result = result.slice(0, stmt.getStart(sf)) + result.slice(stmt.getEnd()).replace(/^\\r?\\n/, '');\n } else {\n const newClause = `{ ${remaining.join(', ')} }`;\n result = result.slice(0, namedBindings.getStart(sf)) + newClause + result.slice(namedBindings.getEnd());\n }\n break; // Only process the first matching import for the consolidated symbols\n }\n\n return result;\n}\n",
3191
+ "displayName": "Schema",
3192
+ "properties": [
3193
+ {
3194
+ "name": "dryRun",
3195
+ "coverageIgnore": false,
3196
+ "deprecated": false,
3197
+ "deprecationMessage": "",
3198
+ "type": "boolean",
3199
+ "indexKey": "",
3200
+ "optional": true,
3201
+ "description": "",
3202
+ "line": 9,
3203
+ "rawdescription": "\n"
3204
+ },
3205
+ {
3206
+ "name": "path",
3207
+ "coverageIgnore": false,
3208
+ "deprecated": false,
3209
+ "deprecationMessage": "",
3210
+ "type": "string",
3211
+ "indexKey": "",
3212
+ "optional": true,
3213
+ "description": "",
3214
+ "line": 8,
3215
+ "rawdescription": "\n"
3216
+ },
3217
+ {
3218
+ "name": "useClassArray",
3219
+ "coverageIgnore": false,
3220
+ "deprecated": false,
3221
+ "deprecationMessage": "",
3222
+ "type": "boolean",
3223
+ "indexKey": "",
3224
+ "optional": true,
3225
+ "description": "",
3226
+ "line": 10,
3227
+ "rawdescription": "\n"
3228
+ }
3229
+ ],
3230
+ "indexSignatures": [],
3231
+ "kind": 172,
3232
+ "methods": [],
3233
+ "extends": [],
3234
+ "isDuplicate": true,
3235
3235
  "duplicateId": 22,
3236
3236
  "duplicateName": "Schema-22",
3237
3237
  "relationships": {
@@ -27692,7 +27692,7 @@
27692
27692
  },
27693
27693
  {
27694
27694
  "name": "findComponentDecorators",
27695
- "file": "packages/core/schematics/add-eui-imports/index.ts",
27695
+ "file": "packages/core/schematics/migrate-to-standalone/index.ts",
27696
27696
  "ctype": "miscellaneous",
27697
27697
  "subtype": "function",
27698
27698
  "coverageIgnore": false,
@@ -27708,7 +27708,7 @@
27708
27708
  "deprecationMessage": ""
27709
27709
  }
27710
27710
  ],
27711
- "returnType": "ComponentInfo[]",
27711
+ "returnType": "ts.Decorator[]",
27712
27712
  "jsdoctags": [
27713
27713
  {
27714
27714
  "name": "sourceFile",
@@ -27722,7 +27722,7 @@
27722
27722
  },
27723
27723
  {
27724
27724
  "name": "findComponentDecorators",
27725
- "file": "packages/core/schematics/migrate-to-standalone/index.ts",
27725
+ "file": "packages/core/schematics/add-eui-imports/index.ts",
27726
27726
  "ctype": "miscellaneous",
27727
27727
  "subtype": "function",
27728
27728
  "coverageIgnore": false,
@@ -27738,7 +27738,7 @@
27738
27738
  "deprecationMessage": ""
27739
27739
  }
27740
27740
  ],
27741
- "returnType": "ts.Decorator[]",
27741
+ "returnType": "ComponentInfo[]",
27742
27742
  "jsdoctags": [
27743
27743
  {
27744
27744
  "name": "sourceFile",
@@ -35854,7 +35854,7 @@
35854
35854
  },
35855
35855
  {
35856
35856
  "name": "visitDir",
35857
- "file": "packages/core/schematics/add-eui-imports/index.ts",
35857
+ "file": "packages/core/schematics/fix-no-multiple-empty-lines/index.ts",
35858
35858
  "ctype": "miscellaneous",
35859
35859
  "subtype": "function",
35860
35860
  "coverageIgnore": false,
@@ -35899,7 +35899,7 @@
35899
35899
  },
35900
35900
  {
35901
35901
  "name": "visitDir",
35902
- "file": "packages/core/schematics/fix-no-multiple-empty-lines/index.ts",
35902
+ "file": "packages/core/schematics/migrate-eui-accent/index.ts",
35903
35903
  "ctype": "miscellaneous",
35904
35904
  "subtype": "function",
35905
35905
  "coverageIgnore": false,
@@ -35944,7 +35944,7 @@
35944
35944
  },
35945
35945
  {
35946
35946
  "name": "visitDir",
35947
- "file": "packages/core/schematics/migrate-eui-accent/index.ts",
35947
+ "file": "packages/core/schematics/migrate-eui-alert/index.ts",
35948
35948
  "ctype": "miscellaneous",
35949
35949
  "subtype": "function",
35950
35950
  "coverageIgnore": false,
@@ -35989,7 +35989,7 @@
35989
35989
  },
35990
35990
  {
35991
35991
  "name": "visitDir",
35992
- "file": "packages/core/schematics/migrate-eui-alert/index.ts",
35992
+ "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
35993
35993
  "ctype": "miscellaneous",
35994
35994
  "subtype": "function",
35995
35995
  "coverageIgnore": false,
@@ -36034,7 +36034,7 @@
36034
36034
  },
36035
36035
  {
36036
36036
  "name": "visitDir",
36037
- "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
36037
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
36038
36038
  "ctype": "miscellaneous",
36039
36039
  "subtype": "function",
36040
36040
  "coverageIgnore": false,
@@ -36079,7 +36079,7 @@
36079
36079
  },
36080
36080
  {
36081
36081
  "name": "visitDir",
36082
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
36082
+ "file": "packages/core/schematics/migrate-eui-chip/index.ts",
36083
36083
  "ctype": "miscellaneous",
36084
36084
  "subtype": "function",
36085
36085
  "coverageIgnore": false,
@@ -36124,7 +36124,7 @@
36124
36124
  },
36125
36125
  {
36126
36126
  "name": "visitDir",
36127
- "file": "packages/core/schematics/migrate-eui-chip/index.ts",
36127
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
36128
36128
  "ctype": "miscellaneous",
36129
36129
  "subtype": "function",
36130
36130
  "coverageIgnore": false,
@@ -36169,7 +36169,7 @@
36169
36169
  },
36170
36170
  {
36171
36171
  "name": "visitDir",
36172
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
36172
+ "file": "packages/core/schematics/migrate-eui-discussion-thread/index.ts",
36173
36173
  "ctype": "miscellaneous",
36174
36174
  "subtype": "function",
36175
36175
  "coverageIgnore": false,
@@ -36214,7 +36214,7 @@
36214
36214
  },
36215
36215
  {
36216
36216
  "name": "visitDir",
36217
- "file": "packages/core/schematics/migrate-eui-discussion-thread/index.ts",
36217
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
36218
36218
  "ctype": "miscellaneous",
36219
36219
  "subtype": "function",
36220
36220
  "coverageIgnore": false,
@@ -36259,7 +36259,7 @@
36259
36259
  },
36260
36260
  {
36261
36261
  "name": "visitDir",
36262
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
36262
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
36263
36263
  "ctype": "miscellaneous",
36264
36264
  "subtype": "function",
36265
36265
  "coverageIgnore": false,
@@ -36304,7 +36304,7 @@
36304
36304
  },
36305
36305
  {
36306
36306
  "name": "visitDir",
36307
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
36307
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
36308
36308
  "ctype": "miscellaneous",
36309
36309
  "subtype": "function",
36310
36310
  "coverageIgnore": false,
@@ -36349,7 +36349,7 @@
36349
36349
  },
36350
36350
  {
36351
36351
  "name": "visitDir",
36352
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
36352
+ "file": "packages/core/schematics/migrate-eui-icon-toggle/index.ts",
36353
36353
  "ctype": "miscellaneous",
36354
36354
  "subtype": "function",
36355
36355
  "coverageIgnore": false,
@@ -36394,7 +36394,7 @@
36394
36394
  },
36395
36395
  {
36396
36396
  "name": "visitDir",
36397
- "file": "packages/core/schematics/migrate-eui-icon-toggle/index.ts",
36397
+ "file": "packages/core/schematics/migrate-eui-popover/index.ts",
36398
36398
  "ctype": "miscellaneous",
36399
36399
  "subtype": "function",
36400
36400
  "coverageIgnore": false,
@@ -36439,7 +36439,7 @@
36439
36439
  },
36440
36440
  {
36441
36441
  "name": "visitDir",
36442
- "file": "packages/core/schematics/migrate-eui-popover/index.ts",
36442
+ "file": "packages/core/schematics/migrate-eui-progress-circle/index.ts",
36443
36443
  "ctype": "miscellaneous",
36444
36444
  "subtype": "function",
36445
36445
  "coverageIgnore": false,
@@ -36484,7 +36484,7 @@
36484
36484
  },
36485
36485
  {
36486
36486
  "name": "visitDir",
36487
- "file": "packages/core/schematics/migrate-eui-progress-circle/index.ts",
36487
+ "file": "packages/core/schematics/migrate-eui-table/index.ts",
36488
36488
  "ctype": "miscellaneous",
36489
36489
  "subtype": "function",
36490
36490
  "coverageIgnore": false,
@@ -36529,7 +36529,7 @@
36529
36529
  },
36530
36530
  {
36531
36531
  "name": "visitDir",
36532
- "file": "packages/core/schematics/migrate-eui-table/index.ts",
36532
+ "file": "packages/core/schematics/migrate-eui-tabs/index.ts",
36533
36533
  "ctype": "miscellaneous",
36534
36534
  "subtype": "function",
36535
36535
  "coverageIgnore": false,
@@ -36574,7 +36574,7 @@
36574
36574
  },
36575
36575
  {
36576
36576
  "name": "visitDir",
36577
- "file": "packages/core/schematics/migrate-eui-tabs/index.ts",
36577
+ "file": "packages/core/schematics/migrate-eui-toolbar-menu/index.ts",
36578
36578
  "ctype": "miscellaneous",
36579
36579
  "subtype": "function",
36580
36580
  "coverageIgnore": false,
@@ -36619,7 +36619,7 @@
36619
36619
  },
36620
36620
  {
36621
36621
  "name": "visitDir",
36622
- "file": "packages/core/schematics/migrate-eui-toolbar-menu/index.ts",
36622
+ "file": "packages/core/schematics/migrate-eui-tooltip/index.ts",
36623
36623
  "ctype": "miscellaneous",
36624
36624
  "subtype": "function",
36625
36625
  "coverageIgnore": false,
@@ -36664,7 +36664,7 @@
36664
36664
  },
36665
36665
  {
36666
36666
  "name": "visitDir",
36667
- "file": "packages/core/schematics/migrate-eui-tooltip/index.ts",
36667
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
36668
36668
  "ctype": "miscellaneous",
36669
36669
  "subtype": "function",
36670
36670
  "coverageIgnore": false,
@@ -36709,7 +36709,7 @@
36709
36709
  },
36710
36710
  {
36711
36711
  "name": "visitDir",
36712
- "file": "packages/core/schematics/migrate-to-signals/index.ts",
36712
+ "file": "packages/core/schematics/migrate-to-standalone/index.ts",
36713
36713
  "ctype": "miscellaneous",
36714
36714
  "subtype": "function",
36715
36715
  "coverageIgnore": false,
@@ -36754,7 +36754,7 @@
36754
36754
  },
36755
36755
  {
36756
36756
  "name": "visitDir",
36757
- "file": "packages/core/schematics/migrate-to-standalone/index.ts",
36757
+ "file": "packages/core/schematics/add-eui-imports/index.ts",
36758
36758
  "ctype": "miscellaneous",
36759
36759
  "subtype": "function",
36760
36760
  "coverageIgnore": false,