@eui/core 22.0.0-alpha.3 → 22.0.0-alpha.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +538 -0
  2. package/docs/changelog.html +744 -0
  3. package/docs/directives/TranslateMockDirective.html +0 -6
  4. package/docs/interfaces/Edit-4.html +395 -0
  5. package/docs/interfaces/MigrateResult.html +356 -0
  6. package/docs/interfaces/Schema-10.html +1 -1
  7. package/docs/interfaces/Schema-13.html +1 -1
  8. package/docs/interfaces/Schema-14.html +1 -1
  9. package/docs/interfaces/Schema-15.html +1 -1
  10. package/docs/interfaces/Schema-16.html +1 -1
  11. package/docs/interfaces/Schema-18.html +1 -1
  12. package/docs/interfaces/Schema-19.html +1 -1
  13. package/docs/interfaces/Schema-20.html +1 -1
  14. package/docs/interfaces/Schema-21.html +1 -1
  15. package/docs/interfaces/Schema-22.html +368 -0
  16. package/docs/interfaces/Schema-8.html +1 -1
  17. package/docs/interfaces/Schema-9.html +1 -1
  18. package/docs/js/menu-wc.js +15 -6
  19. package/docs/js/search/search_index.js +2 -2
  20. package/docs/json/TranslateMockDirective.md +1 -1
  21. package/docs/json/documentation.json +2191 -315
  22. package/docs/llms.txt +123 -56
  23. package/docs/miscellaneous/functions.html +1701 -260
  24. package/docs/miscellaneous/variables.html +440 -33
  25. package/docs/overview.html +1 -1
  26. package/docs/properties.html +1 -1
  27. package/fesm2022/eui-core.mjs +5 -5
  28. package/fesm2022/eui-core.mjs.map +1 -1
  29. package/package.json +2 -2
  30. package/schematics/collection.json +5 -0
  31. package/schematics/migrate-all/index.js +1 -0
  32. package/schematics/migrate-all/index.js.map +1 -1
  33. package/schematics/migrate-to-signals/index.d.ts +24 -0
  34. package/schematics/migrate-to-signals/index.js +514 -0
  35. package/schematics/migrate-to-signals/index.js.map +1 -0
  36. package/schematics/migrate-to-signals/signal-map.d.ts +17 -0
  37. package/schematics/migrate-to-signals/signal-map.js +354 -0
  38. package/schematics/migrate-to-signals/signal-map.js.map +1 -0
  39. package/types/eui-core.d.ts +2 -2
  40. package/types/eui-core.d.ts.map +1 -1
@@ -2,7 +2,7 @@
2
2
  "pipes": [
3
3
  {
4
4
  "name": "TranslateMockPipe",
5
- "id": "pipe-TranslateMockPipe-a6db37044983724bfab8f8eb6fbaf6bb1f4b1de1651ef5303a344a4b606cbe68e1bf0bdbe45bd473e1c77e446058e133e85517ed7e8fda4b4be59a70ef96bd06",
5
+ "id": "pipe-TranslateMockPipe-d42afa990d476989657d92ef3f9c88346ef461191fc8641719f83d538694483a6f785c8618d8ee729faee7c37e723a1fdfcac95badfa6e5259f869ebe95cccad",
6
6
  "file": "packages/core/src/lib/mocks/translate.module.mock.ts",
7
7
  "type": "pipe",
8
8
  "coverageIgnore": false,
@@ -28,7 +28,7 @@
28
28
  "optional": false,
29
29
  "returnType": "string",
30
30
  "typeParameters": [],
31
- "line": 63,
31
+ "line": 74,
32
32
  "deprecated": false,
33
33
  "deprecationMessage": "",
34
34
  "rawdescription": "\n",
@@ -50,7 +50,7 @@
50
50
  ],
51
51
  "standalone": false,
52
52
  "ngname": "translate",
53
- "sourceCode": "import { AfterViewChecked, Directive, ElementRef, Input, NgModule, Pipe, PipeTransform, inject, signal } from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n @Input()\n translateParams: any;\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
53
+ "sourceCode": "import {\n AfterViewChecked,\n Directive,\n ElementRef,\n Input,\n NgModule,\n Pipe,\n PipeTransform,\n inject,\n signal,\n input,\n} from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n readonly translateParams = input();\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
54
54
  "relationships": {
55
55
  "incoming": [
56
56
  {
@@ -1025,6 +1025,65 @@
1025
1025
  "outgoing": []
1026
1026
  }
1027
1027
  },
1028
+ {
1029
+ "name": "Edit",
1030
+ "id": "interface-Edit-cac2ac952d8245647e8a48b450e8f127a36bcffb394cf2cd81fe9c0810ed02c19e5e1629dbf29a68a5c6f675aed99570e9ac04ae470e13315e20c92cc0c6c453-4",
1031
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
1032
+ "deprecated": false,
1033
+ "deprecationMessage": "",
1034
+ "type": "interface",
1035
+ "sourceCode": "import { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\nimport { EUI_SIGNAL_MAP, EUI_SELECTOR_TO_CLASS } from './signal-map';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\ninterface Edit {\n start: number;\n end: number;\n replacement: string;\n}\n\n/**\n * Migrates consumer code that accesses EUI component instances programmatically.\n *\n * When EUI migrated @Input() → input(), @ViewChild() → viewChild(), and\n * @ContentChild() → contentChild(), properties that were plain class fields\n * became signal getters. Consumers who access them via @ViewChild need to\n * change `comp.prop` to `comp.prop()`.\n *\n * This schematic:\n * 1. Finds @ViewChild / @ContentChild fields typed as EUI component classes\n * 2. Resolves untyped @ViewChild('refName') by reading the component template\n * and matching #refName to an EUI element tag/selector\n * 3. Tracks which local variable names hold EUI component references (incl. aliases)\n * 4. Rewrites property accesses on those references: `ref.prop` → `ref.prop()`\n * (only for properties listed in the signal map)\n * 5. Does NOT touch template bindings — those are unaffected by signal migrations\n */\nexport function migrateToSignals(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let fileCount = 0;\n let propCount = 0;\n\n visitDir(tree.getDir(scanPath || '/'), (path) => {\n if (!path.endsWith('.ts')) return;\n // Skip spec files — test code may use different patterns\n if (path.endsWith('.spec.ts')) return;\n\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n\n // Fast bail: file must mention at least one EUI class name or have\n // ViewChild/ContentChild with string refs (which might reference EUI elements)\n if (!hasEuiReference(original) && !hasStringRefQuery(original)) return;\n\n const result = migrateTypeScript(original, path, tree, context); if (result.source !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would migrate ${result.editCount} signal property access(es) in ${path}`);\n } else {\n tree.overwrite(path, result.source);\n }\n fileCount++;\n propCount += result.editCount;\n }\n });\n\n context.logger.info(`Migrated ${propCount} property access(es) to signal getters in ${fileCount} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\n/** Quick check: does the file reference any EUI class name from the signal map? */\nfunction hasEuiReference(source: string): boolean {\n for (const className of Object.keys(EUI_SIGNAL_MAP)) {\n if (source.includes(className)) return true;\n }\n return false;\n}\n\n/** Quick check: does the file have @ViewChild('...') or @ContentChild('...') with string refs? */\nfunction hasStringRefQuery(source: string): boolean {\n return /(@ViewChild|@ContentChild|@ViewChildren|@ContentChildren)\\s*\\(\\s*['\"]/.test(source);\n}\n\ninterface MigrateResult {\n source: string;\n editCount: number;\n}\n\nfunction migrateTypeScript(source: string, filePath: string, tree: Tree, context: SchematicContext): MigrateResult {\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const edits: Edit[] = [];\n\n // Phase 0: Build template ref map (#refName → EUI class name) from the component's template\n const templateRefMap = buildTemplateRefMap(sourceFile, source, filePath, tree);\n\n // Phase 1: Collect all variables/properties typed as EUI classes\n const euiRefs = collectEuiReferences(sourceFile, source, templateRefMap);\n\n if (euiRefs.size === 0) {\n return { source, editCount: 0 };\n }\n\n // Phase 2: Find property accesses on those references and rewrite signal props\n const visitNode = (node: ts.Node): void => {\n // Match: ref.prop (PropertyAccessExpression)\n if (ts.isPropertyAccessExpression(node)) {\n const rewrite = tryRewritePropertyAccess(node, euiRefs, sourceFile, source);\n if (rewrite) {\n edits.push(rewrite);\n }\n }\n ts.forEachChild(node, visitNode);\n };\n\n ts.forEachChild(sourceFile, visitNode);\n\n if (edits.length === 0) {\n return { source, editCount: 0 };\n }\n\n return {\n source: applyEdits(source, edits),\n editCount: edits.length,\n };\n}\n\n/**\n * Scans the source file for class properties or variables typed as EUI component classes.\n * Returns a map: localName → Set of signal property names.\n *\n * Handles:\n * @ViewChild(EuiXxxComponent) name: EuiXxxComponent;\n * @ViewChild(EuiXxxComponent) name!: EuiXxxComponent;\n * @ViewChild('ref') name: EuiXxxComponent;\n * @ContentChild(EuiXxxComponent) name: EuiXxxComponent;\n * @ViewChild('ref') name: ElementRef; (resolved via template #ref → EUI selector)\n * someVar: EuiXxxComponent; (typed class field, even without decorator)\n * const alias = this.viewChildRef; (alias tracking)\n */\nfunction collectEuiReferences(\n sourceFile: ts.SourceFile,\n source: string,\n templateRefMap: Map<string, string>,\n): Map<string, ReadonlySet<string>> {\n const refs = new Map<string, ReadonlySet<string>>();\n\n // Pass 1: collect directly-typed references\n const visitDirect = (node: ts.Node): void => {\n // Class property declarations\n if (ts.isPropertyDeclaration(node) && node.name && ts.isIdentifier(node.name)) {\n const euiClass = resolveEuiClassName(node, sourceFile, templateRefMap);\n if (euiClass && EUI_SIGNAL_MAP[euiClass]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[euiClass]);\n }\n }\n\n // Variable declarations (const x: EuiXxxComponent = ...)\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[typeName]);\n }\n }\n\n // Parameter declarations (method(ref: EuiXxxComponent))\n if (ts.isParameter(node) && ts.isIdentifier(node.name)) {\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[typeName]);\n }\n }\n\n ts.forEachChild(node, visitDirect);\n };\n\n ts.forEachChild(sourceFile, visitDirect);\n\n // Pass 2: track aliases — variables assigned from already-tracked references\n // e.g. const alias = this.viewChildRef; or const alias = someParam;\n const visitAlias = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n // Skip if already tracked (has explicit type annotation)\n if (refs.has(node.name.text)) {\n ts.forEachChild(node, visitAlias);\n return;\n }\n\n const aliasedRef = resolveRefName(node.initializer);\n if (aliasedRef && refs.has(aliasedRef)) {\n refs.set(node.name.text, refs.get(aliasedRef)!);\n }\n }\n\n ts.forEachChild(node, visitAlias);\n };\n\n ts.forEachChild(sourceFile, visitAlias);\n return refs;\n}\n\n/**\n * Resolves the EUI class name from a property declaration.\n * Checks: type annotation → decorator class argument → template ref map.\n */\nfunction resolveEuiClassName(\n node: ts.PropertyDeclaration,\n sourceFile: ts.SourceFile,\n templateRefMap: Map<string, string>,\n): string | null {\n // Check type annotation first\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n return typeName;\n }\n\n // Check generic type argument: ElementRef<EuiXxxComponent>\n if (node.type && ts.isTypeReferenceNode(node.type) && node.type.typeArguments?.length) {\n const genericArg = getTypeAnnotationName(node.type.typeArguments[0]);\n if (genericArg && EUI_SIGNAL_MAP[genericArg]) {\n return genericArg;\n }\n }\n\n // Check decorator arguments: @ViewChild(EuiXxxComponent) or @ViewChild('refName')\n if (node.modifiers) {\n for (const modifier of node.modifiers) {\n if (!ts.isDecorator(modifier)) continue;\n if (!ts.isCallExpression(modifier.expression)) continue;\n\n const decoratorName = getDecoratorName(modifier.expression);\n if (!decoratorName) continue;\n if (!['ViewChild', 'ViewChildren', 'ContentChild', 'ContentChildren'].includes(decoratorName)) continue;\n\n const args = modifier.expression.arguments;\n if (args.length > 0) {\n const firstArg = args[0];\n\n // @ViewChild(EuiXxxComponent) — class reference\n if (ts.isIdentifier(firstArg) && EUI_SIGNAL_MAP[firstArg.text]) {\n return firstArg.text;\n }\n\n // @ViewChild('refName') — string template ref, resolve via template\n if (ts.isStringLiteralLike(firstArg)) {\n const refName = firstArg.text;\n const euiClass = templateRefMap.get(refName);\n if (euiClass && EUI_SIGNAL_MAP[euiClass]) {\n return euiClass;\n }\n }\n }\n }\n }\n\n return null;\n}\n\nfunction getDecoratorName(callExpr: ts.CallExpression): string | null {\n if (ts.isIdentifier(callExpr.expression)) {\n return callExpr.expression.text;\n }\n return null;\n}\n\nfunction getTypeAnnotationName(typeNode: ts.TypeNode | undefined): string | null {\n if (!typeNode) return null;\n if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {\n return typeNode.typeName.text;\n }\n return null;\n}\n\n/**\n * Checks if a property access `ref.prop` should be rewritten to `ref.prop()`.\n *\n * We rewrite if:\n * - `ref` is tracked in euiRefs\n * - `prop` is in the signal set for that EUI class\n * - The access is NOT already a call expression (not `ref.prop()` or `ref.prop(args)`)\n * - The access is NOT a write target (not `ref.prop = value`)\n * - The access is NOT a template binding argument (those are unaffected)\n */\nfunction tryRewritePropertyAccess(\n node: ts.PropertyAccessExpression,\n euiRefs: Map<string, ReadonlySet<string>>,\n sourceFile: ts.SourceFile,\n source: string,\n): Edit | null {\n const propName = node.name.text;\n\n // Resolve the reference name — handle `this.ref.prop` and `ref.prop`\n const refName = resolveRefName(node.expression);\n if (!refName) return null;\n\n const signalProps = euiRefs.get(refName);\n if (!signalProps || !signalProps.has(propName)) return null;\n\n // Skip if parent is already a call expression on this property: ref.prop(...)\n if (ts.isCallExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip if this is the left side of an assignment: ref.prop = value\n if (ts.isBinaryExpression(node.parent) &&\n node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n node.parent.left === node) {\n return null;\n }\n\n // Skip if this is a compound assignment: ref.prop += value, ref.prop &&= value, etc.\n if (ts.isBinaryExpression(node.parent) && isAssignmentOperator(node.parent.operatorToken.kind) && node.parent.left === node) {\n return null;\n }\n\n // Skip if this is used with delete: delete ref.prop\n if (ts.isDeleteExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip if inside a typeof: typeof ref.prop\n if (ts.isTypeOfExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip property access chains that go deeper: ref.prop.something → ref.prop().something\n // This IS correct — we still want to add ()\n\n // Rewrite: insert () after the property name\n const end = node.name.getEnd();\n return {\n start: end,\n end: end,\n replacement: '()',\n };\n}\n\nfunction isAssignmentOperator(kind: ts.SyntaxKind): boolean {\n return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;\n}\n\n/**\n * Resolves a reference name from an expression.\n * Handles: `ref`, `this.ref`, `this._ref`\n */\nfunction resolveRefName(expr: ts.Expression): string | null {\n // Direct identifier: ref.prop\n if (ts.isIdentifier(expr)) {\n return expr.text;\n }\n\n // this.ref.prop\n if (ts.isPropertyAccessExpression(expr) && expr.expression.kind === ts.SyntaxKind.ThisKeyword) {\n return expr.name.text;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Template ref resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a map of template reference variable names (#ref) to EUI class names.\n *\n * Parses the component's template (inline or external) and finds elements like:\n * <eui-alert #myAlert> → myAlert → EuiAlertComponent\n * <input euiAutocomplete #ac> → ac → EuiAutocompleteComponent\n *\n * Returns Map<refName, euiClassName>.\n */\nfunction buildTemplateRefMap(\n sourceFile: ts.SourceFile,\n source: string,\n filePath: string,\n tree: Tree,\n): Map<string, string> {\n const refMap = new Map<string, string>();\n\n // Find @Component decorator\n const componentMeta = findComponentMetadata(sourceFile, source);\n if (!componentMeta) return refMap;\n\n let templateSource: string | null = null;\n\n if (componentMeta.inlineTemplate !== null) {\n templateSource = componentMeta.inlineTemplate;\n } else if (componentMeta.templateUrl) {\n // Resolve templateUrl relative to the TS file\n const dir = filePath.substring(0, filePath.lastIndexOf('/'));\n const templatePath = `${dir}/${componentMeta.templateUrl}`;\n const buffer = tree.read(templatePath);\n if (buffer) {\n templateSource = buffer.toString('utf-8');\n }\n }\n\n if (!templateSource) return refMap;\n\n // Parse the template and collect #refs\n try {\n const parsed = parseTemplate(templateSource, '', { preserveWhitespaces: true });\n collectTemplateRefs(parsed.nodes, refMap);\n } catch {\n // Template parse failure — silently skip (might be malformed or use third-party syntax)\n }\n\n return refMap;\n}\n\n/**\n * Extracts @Component metadata: templateUrl or inline template content.\n */\nfunction findComponentMetadata(\n sourceFile: ts.SourceFile,\n source: string,\n): { templateUrl: string | null; inlineTemplate: string | null } | null {\n let result: { templateUrl: string | null; inlineTemplate: string | null } | null = null;\n\n const visit = (node: ts.Node): void => {\n if (result) return;\n\n if (ts.isDecorator(node) && ts.isCallExpression(node.expression)) {\n const name = getDecoratorName(node.expression);\n if (name !== 'Component') {\n ts.forEachChild(node, visit);\n return;\n }\n\n const args = node.expression.arguments;\n if (args.length === 0 || !ts.isObjectLiteralExpression(args[0])) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const meta: { templateUrl: string | null; inlineTemplate: string | null } = {\n templateUrl: null,\n inlineTemplate: null,\n };\n\n for (const prop of args[0].properties) {\n if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) continue;\n\n if (prop.name.text === 'templateUrl') {\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteralLike(init)) {\n meta.templateUrl = init.text;\n }\n }\n\n if (prop.name.text === 'template') {\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteralLike(init)) {\n meta.inlineTemplate = init.text;\n } else if (ts.isNoSubstitutionTemplateLiteral(init)) {\n meta.inlineTemplate = init.text;\n }\n }\n }\n\n result = meta;\n return;\n }\n\n ts.forEachChild(node, visit);\n };\n\n ts.forEachChild(sourceFile, visit);\n return result;\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\n/**\n * Recursively walks template AST nodes, collecting #refName → EUI class name mappings.\n *\n * For each element with a template reference (#ref), we try to resolve its EUI class:\n * 1. Match element tag name against EUI_SELECTOR_TO_CLASS (e.g. 'eui-alert' → EuiAlertComponent)\n * 2. Match element attributes against attribute selectors (e.g. [euiAutocomplete] → EuiAutocompleteComponent)\n */\nfunction collectTemplateRefs(nodes: TmplAstNode[], refMap: Map<string, string>): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.references && node.references.length > 0) {\n const euiClass = resolveElementToEuiClass(node);\n if (euiClass) {\n for (const ref of node.references) {\n refMap.set(ref.name, euiClass);\n }\n }\n }\n collectTemplateRefs(node.children, refMap);\n }\n }\n}\n\n/**\n * Given a template element, resolves it to an EUI class name by checking:\n * 1. Tag name: <eui-alert> → look up 'eui-alert' in EUI_SELECTOR_TO_CLASS\n * 2. Attribute selectors: <input euiAutocomplete> → look up 'input[euiAutocomplete]' or '[euiAutocomplete]'\n */\nfunction resolveElementToEuiClass(element: TmplAstElement): string | null {\n const tag = element.name;\n\n // Direct tag match: eui-alert, eui-dialog, etc.\n if (EUI_SELECTOR_TO_CLASS[tag]) {\n return EUI_SELECTOR_TO_CLASS[tag];\n }\n\n // Attribute selector match: check all attributes against known patterns\n const allAttrNames = [\n ...element.attributes.map((a) => a.name),\n ...element.inputs.map((i) => i.name),\n ];\n\n for (const attrName of allAttrNames) {\n // Try tag[attr] pattern first (e.g. 'button[euiButton]', 'input[euiAutocomplete]')\n const tagAttrSelector = `${tag}[${attrName}]`;\n if (EUI_SELECTOR_TO_CLASS[tagAttrSelector]) {\n return EUI_SELECTOR_TO_CLASS[tagAttrSelector];\n }\n\n // Try [attr] pattern (e.g. '[euiTooltip]', '[euiLoading]')\n const attrSelector = `[${attrName}]`;\n if (EUI_SELECTOR_TO_CLASS[attrSelector]) {\n return EUI_SELECTOR_TO_CLASS[attrSelector];\n }\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Edit helpers\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 const key = `${edit.start}:${edit.end}`;\n seen.set(key, edit);\n }\n return Array.from(seen.values());\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('.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",
1036
+ "displayName": "Edit",
1037
+ "properties": [
1038
+ {
1039
+ "name": "end",
1040
+ "coverageIgnore": false,
1041
+ "deprecated": false,
1042
+ "deprecationMessage": "",
1043
+ "type": "number",
1044
+ "indexKey": "",
1045
+ "optional": false,
1046
+ "description": "",
1047
+ "line": 14,
1048
+ "rawdescription": "\n"
1049
+ },
1050
+ {
1051
+ "name": "replacement",
1052
+ "coverageIgnore": false,
1053
+ "deprecated": false,
1054
+ "deprecationMessage": "",
1055
+ "type": "string",
1056
+ "indexKey": "",
1057
+ "optional": false,
1058
+ "description": "",
1059
+ "line": 15,
1060
+ "rawdescription": "\n"
1061
+ },
1062
+ {
1063
+ "name": "start",
1064
+ "coverageIgnore": false,
1065
+ "deprecated": false,
1066
+ "deprecationMessage": "",
1067
+ "type": "number",
1068
+ "indexKey": "",
1069
+ "optional": false,
1070
+ "description": "",
1071
+ "line": 13,
1072
+ "rawdescription": "\n"
1073
+ }
1074
+ ],
1075
+ "indexSignatures": [],
1076
+ "kind": 172,
1077
+ "methods": [],
1078
+ "extends": [],
1079
+ "isDuplicate": true,
1080
+ "duplicateId": 4,
1081
+ "duplicateName": "Edit-4",
1082
+ "relationships": {
1083
+ "incoming": [],
1084
+ "outgoing": []
1085
+ }
1086
+ },
1028
1087
  {
1029
1088
  "name": "EuiComponentEntry",
1030
1089
  "id": "interface-EuiComponentEntry-e1068f4f156ce8f48ed51476e062ee969ff7e7d064af3045181da54f7aba582003387dd6cf5412d907b9637791a85232c11b467fbdfa8c5545d9e7c3e181e873",
@@ -1642,12 +1701,12 @@
1642
1701
  },
1643
1702
  {
1644
1703
  "name": "MigrateAllSchema",
1645
- "id": "interface-MigrateAllSchema-37175caf2db4e728d285d5a8d2261bef3f77ac6b132960846be25241de1387993b11f30e57a3c71bb7a5a5b2b8ebcae465c22562e7b570e634ab547299274e59",
1704
+ "id": "interface-MigrateAllSchema-9f5c8421d830e497010dd27404a71efd86022343f3a2f75cfe42a96145e90bbd446cb032e3768b3f4698f469ea0b07a13a087f6eefc0fce74196e29ec8785099",
1646
1705
  "file": "packages/core/schematics/migrate-all/index.ts",
1647
1706
  "deprecated": false,
1648
1707
  "deprecationMessage": "",
1649
1708
  "type": "interface",
1650
- "sourceCode": "import { Rule, chain, schematic } from '@angular-devkit/schematics';\n\nexport interface MigrateAllSchema {\n path?: string;\n dryRun?: boolean;\n mwp?: boolean;\n useClassArray?: boolean;\n}\n\nexport function migrateAll(options: MigrateAllSchema): Rule {\n const base = { path: options.path || './src', dryRun: options.dryRun || false };\n\n return chain([\n schematic('migrate', { ...base, mwp: options.mwp || false }),\n schematic('migrate-eui-tabs', base),\n schematic('migrate-to-standalone', base),\n schematic('migrate-eui-alert', base),\n schematic('migrate-eui-progress-circle', base),\n schematic('migrate-eui-popover', base),\n schematic('migrate-eui-icon-toggle', base),\n schematic('migrate-eui-icon-svg', base),\n schematic('migrate-eui-fieldset', base),\n schematic('migrate-eui-avatar', base),\n schematic('migrate-eui-editor', base),\n schematic('migrate-eui-discussion-thread', base),\n schematic('migrate-eui-button', base),\n schematic('migrate-eui-accent', base),\n schematic('migrate-eui-toolbar-menu', base),\n schematic('migrate-eui-table', base),\n schematic('migrate-eui-chip-list', base),\n schematic('migrate-eui-chip', base),\n schematic('migrate-eui-tooltip', base),\n schematic('add-eui-imports', { ...base, useClassArray: options.useClassArray || false }),\n schematic('fix-no-multiple-empty-lines', base),\n ]);\n}\n",
1709
+ "sourceCode": "import { Rule, chain, schematic } from '@angular-devkit/schematics';\n\nexport interface MigrateAllSchema {\n path?: string;\n dryRun?: boolean;\n mwp?: boolean;\n useClassArray?: boolean;\n}\n\nexport function migrateAll(options: MigrateAllSchema): Rule {\n const base = { path: options.path || './src', dryRun: options.dryRun || false };\n\n return chain([\n schematic('migrate', { ...base, mwp: options.mwp || false }),\n schematic('migrate-eui-tabs', base),\n schematic('migrate-to-standalone', base),\n schematic('migrate-eui-alert', base),\n schematic('migrate-eui-progress-circle', base),\n schematic('migrate-eui-popover', base),\n schematic('migrate-eui-icon-toggle', base),\n schematic('migrate-eui-icon-svg', base),\n schematic('migrate-eui-fieldset', base),\n schematic('migrate-eui-avatar', base),\n schematic('migrate-eui-editor', base),\n schematic('migrate-eui-discussion-thread', base),\n schematic('migrate-eui-button', base),\n schematic('migrate-eui-accent', base),\n schematic('migrate-eui-toolbar-menu', base),\n schematic('migrate-eui-table', base),\n schematic('migrate-eui-chip-list', base),\n schematic('migrate-eui-chip', base),\n schematic('migrate-eui-tooltip', base),\n schematic('migrate-to-signals', base),\n schematic('add-eui-imports', { ...base, useClassArray: options.useClassArray || false }),\n schematic('fix-no-multiple-empty-lines', base),\n ]);\n}\n",
1651
1710
  "displayName": "MigrateAllSchema",
1652
1711
  "properties": [
1653
1712
  {
@@ -1708,6 +1767,50 @@
1708
1767
  "outgoing": []
1709
1768
  }
1710
1769
  },
1770
+ {
1771
+ "name": "MigrateResult",
1772
+ "id": "interface-MigrateResult-cac2ac952d8245647e8a48b450e8f127a36bcffb394cf2cd81fe9c0810ed02c19e5e1629dbf29a68a5c6f675aed99570e9ac04ae470e13315e20c92cc0c6c453",
1773
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
1774
+ "deprecated": false,
1775
+ "deprecationMessage": "",
1776
+ "type": "interface",
1777
+ "sourceCode": "import { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\nimport { EUI_SIGNAL_MAP, EUI_SELECTOR_TO_CLASS } from './signal-map';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\ninterface Edit {\n start: number;\n end: number;\n replacement: string;\n}\n\n/**\n * Migrates consumer code that accesses EUI component instances programmatically.\n *\n * When EUI migrated @Input() → input(), @ViewChild() → viewChild(), and\n * @ContentChild() → contentChild(), properties that were plain class fields\n * became signal getters. Consumers who access them via @ViewChild need to\n * change `comp.prop` to `comp.prop()`.\n *\n * This schematic:\n * 1. Finds @ViewChild / @ContentChild fields typed as EUI component classes\n * 2. Resolves untyped @ViewChild('refName') by reading the component template\n * and matching #refName to an EUI element tag/selector\n * 3. Tracks which local variable names hold EUI component references (incl. aliases)\n * 4. Rewrites property accesses on those references: `ref.prop` → `ref.prop()`\n * (only for properties listed in the signal map)\n * 5. Does NOT touch template bindings — those are unaffected by signal migrations\n */\nexport function migrateToSignals(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let fileCount = 0;\n let propCount = 0;\n\n visitDir(tree.getDir(scanPath || '/'), (path) => {\n if (!path.endsWith('.ts')) return;\n // Skip spec files — test code may use different patterns\n if (path.endsWith('.spec.ts')) return;\n\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n\n // Fast bail: file must mention at least one EUI class name or have\n // ViewChild/ContentChild with string refs (which might reference EUI elements)\n if (!hasEuiReference(original) && !hasStringRefQuery(original)) return;\n\n const result = migrateTypeScript(original, path, tree, context); if (result.source !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would migrate ${result.editCount} signal property access(es) in ${path}`);\n } else {\n tree.overwrite(path, result.source);\n }\n fileCount++;\n propCount += result.editCount;\n }\n });\n\n context.logger.info(`Migrated ${propCount} property access(es) to signal getters in ${fileCount} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\n/** Quick check: does the file reference any EUI class name from the signal map? */\nfunction hasEuiReference(source: string): boolean {\n for (const className of Object.keys(EUI_SIGNAL_MAP)) {\n if (source.includes(className)) return true;\n }\n return false;\n}\n\n/** Quick check: does the file have @ViewChild('...') or @ContentChild('...') with string refs? */\nfunction hasStringRefQuery(source: string): boolean {\n return /(@ViewChild|@ContentChild|@ViewChildren|@ContentChildren)\\s*\\(\\s*['\"]/.test(source);\n}\n\ninterface MigrateResult {\n source: string;\n editCount: number;\n}\n\nfunction migrateTypeScript(source: string, filePath: string, tree: Tree, context: SchematicContext): MigrateResult {\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const edits: Edit[] = [];\n\n // Phase 0: Build template ref map (#refName → EUI class name) from the component's template\n const templateRefMap = buildTemplateRefMap(sourceFile, source, filePath, tree);\n\n // Phase 1: Collect all variables/properties typed as EUI classes\n const euiRefs = collectEuiReferences(sourceFile, source, templateRefMap);\n\n if (euiRefs.size === 0) {\n return { source, editCount: 0 };\n }\n\n // Phase 2: Find property accesses on those references and rewrite signal props\n const visitNode = (node: ts.Node): void => {\n // Match: ref.prop (PropertyAccessExpression)\n if (ts.isPropertyAccessExpression(node)) {\n const rewrite = tryRewritePropertyAccess(node, euiRefs, sourceFile, source);\n if (rewrite) {\n edits.push(rewrite);\n }\n }\n ts.forEachChild(node, visitNode);\n };\n\n ts.forEachChild(sourceFile, visitNode);\n\n if (edits.length === 0) {\n return { source, editCount: 0 };\n }\n\n return {\n source: applyEdits(source, edits),\n editCount: edits.length,\n };\n}\n\n/**\n * Scans the source file for class properties or variables typed as EUI component classes.\n * Returns a map: localName → Set of signal property names.\n *\n * Handles:\n * @ViewChild(EuiXxxComponent) name: EuiXxxComponent;\n * @ViewChild(EuiXxxComponent) name!: EuiXxxComponent;\n * @ViewChild('ref') name: EuiXxxComponent;\n * @ContentChild(EuiXxxComponent) name: EuiXxxComponent;\n * @ViewChild('ref') name: ElementRef; (resolved via template #ref → EUI selector)\n * someVar: EuiXxxComponent; (typed class field, even without decorator)\n * const alias = this.viewChildRef; (alias tracking)\n */\nfunction collectEuiReferences(\n sourceFile: ts.SourceFile,\n source: string,\n templateRefMap: Map<string, string>,\n): Map<string, ReadonlySet<string>> {\n const refs = new Map<string, ReadonlySet<string>>();\n\n // Pass 1: collect directly-typed references\n const visitDirect = (node: ts.Node): void => {\n // Class property declarations\n if (ts.isPropertyDeclaration(node) && node.name && ts.isIdentifier(node.name)) {\n const euiClass = resolveEuiClassName(node, sourceFile, templateRefMap);\n if (euiClass && EUI_SIGNAL_MAP[euiClass]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[euiClass]);\n }\n }\n\n // Variable declarations (const x: EuiXxxComponent = ...)\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[typeName]);\n }\n }\n\n // Parameter declarations (method(ref: EuiXxxComponent))\n if (ts.isParameter(node) && ts.isIdentifier(node.name)) {\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[typeName]);\n }\n }\n\n ts.forEachChild(node, visitDirect);\n };\n\n ts.forEachChild(sourceFile, visitDirect);\n\n // Pass 2: track aliases — variables assigned from already-tracked references\n // e.g. const alias = this.viewChildRef; or const alias = someParam;\n const visitAlias = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n // Skip if already tracked (has explicit type annotation)\n if (refs.has(node.name.text)) {\n ts.forEachChild(node, visitAlias);\n return;\n }\n\n const aliasedRef = resolveRefName(node.initializer);\n if (aliasedRef && refs.has(aliasedRef)) {\n refs.set(node.name.text, refs.get(aliasedRef)!);\n }\n }\n\n ts.forEachChild(node, visitAlias);\n };\n\n ts.forEachChild(sourceFile, visitAlias);\n return refs;\n}\n\n/**\n * Resolves the EUI class name from a property declaration.\n * Checks: type annotation → decorator class argument → template ref map.\n */\nfunction resolveEuiClassName(\n node: ts.PropertyDeclaration,\n sourceFile: ts.SourceFile,\n templateRefMap: Map<string, string>,\n): string | null {\n // Check type annotation first\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n return typeName;\n }\n\n // Check generic type argument: ElementRef<EuiXxxComponent>\n if (node.type && ts.isTypeReferenceNode(node.type) && node.type.typeArguments?.length) {\n const genericArg = getTypeAnnotationName(node.type.typeArguments[0]);\n if (genericArg && EUI_SIGNAL_MAP[genericArg]) {\n return genericArg;\n }\n }\n\n // Check decorator arguments: @ViewChild(EuiXxxComponent) or @ViewChild('refName')\n if (node.modifiers) {\n for (const modifier of node.modifiers) {\n if (!ts.isDecorator(modifier)) continue;\n if (!ts.isCallExpression(modifier.expression)) continue;\n\n const decoratorName = getDecoratorName(modifier.expression);\n if (!decoratorName) continue;\n if (!['ViewChild', 'ViewChildren', 'ContentChild', 'ContentChildren'].includes(decoratorName)) continue;\n\n const args = modifier.expression.arguments;\n if (args.length > 0) {\n const firstArg = args[0];\n\n // @ViewChild(EuiXxxComponent) — class reference\n if (ts.isIdentifier(firstArg) && EUI_SIGNAL_MAP[firstArg.text]) {\n return firstArg.text;\n }\n\n // @ViewChild('refName') — string template ref, resolve via template\n if (ts.isStringLiteralLike(firstArg)) {\n const refName = firstArg.text;\n const euiClass = templateRefMap.get(refName);\n if (euiClass && EUI_SIGNAL_MAP[euiClass]) {\n return euiClass;\n }\n }\n }\n }\n }\n\n return null;\n}\n\nfunction getDecoratorName(callExpr: ts.CallExpression): string | null {\n if (ts.isIdentifier(callExpr.expression)) {\n return callExpr.expression.text;\n }\n return null;\n}\n\nfunction getTypeAnnotationName(typeNode: ts.TypeNode | undefined): string | null {\n if (!typeNode) return null;\n if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {\n return typeNode.typeName.text;\n }\n return null;\n}\n\n/**\n * Checks if a property access `ref.prop` should be rewritten to `ref.prop()`.\n *\n * We rewrite if:\n * - `ref` is tracked in euiRefs\n * - `prop` is in the signal set for that EUI class\n * - The access is NOT already a call expression (not `ref.prop()` or `ref.prop(args)`)\n * - The access is NOT a write target (not `ref.prop = value`)\n * - The access is NOT a template binding argument (those are unaffected)\n */\nfunction tryRewritePropertyAccess(\n node: ts.PropertyAccessExpression,\n euiRefs: Map<string, ReadonlySet<string>>,\n sourceFile: ts.SourceFile,\n source: string,\n): Edit | null {\n const propName = node.name.text;\n\n // Resolve the reference name — handle `this.ref.prop` and `ref.prop`\n const refName = resolveRefName(node.expression);\n if (!refName) return null;\n\n const signalProps = euiRefs.get(refName);\n if (!signalProps || !signalProps.has(propName)) return null;\n\n // Skip if parent is already a call expression on this property: ref.prop(...)\n if (ts.isCallExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip if this is the left side of an assignment: ref.prop = value\n if (ts.isBinaryExpression(node.parent) &&\n node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n node.parent.left === node) {\n return null;\n }\n\n // Skip if this is a compound assignment: ref.prop += value, ref.prop &&= value, etc.\n if (ts.isBinaryExpression(node.parent) && isAssignmentOperator(node.parent.operatorToken.kind) && node.parent.left === node) {\n return null;\n }\n\n // Skip if this is used with delete: delete ref.prop\n if (ts.isDeleteExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip if inside a typeof: typeof ref.prop\n if (ts.isTypeOfExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip property access chains that go deeper: ref.prop.something → ref.prop().something\n // This IS correct — we still want to add ()\n\n // Rewrite: insert () after the property name\n const end = node.name.getEnd();\n return {\n start: end,\n end: end,\n replacement: '()',\n };\n}\n\nfunction isAssignmentOperator(kind: ts.SyntaxKind): boolean {\n return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;\n}\n\n/**\n * Resolves a reference name from an expression.\n * Handles: `ref`, `this.ref`, `this._ref`\n */\nfunction resolveRefName(expr: ts.Expression): string | null {\n // Direct identifier: ref.prop\n if (ts.isIdentifier(expr)) {\n return expr.text;\n }\n\n // this.ref.prop\n if (ts.isPropertyAccessExpression(expr) && expr.expression.kind === ts.SyntaxKind.ThisKeyword) {\n return expr.name.text;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Template ref resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a map of template reference variable names (#ref) to EUI class names.\n *\n * Parses the component's template (inline or external) and finds elements like:\n * <eui-alert #myAlert> → myAlert → EuiAlertComponent\n * <input euiAutocomplete #ac> → ac → EuiAutocompleteComponent\n *\n * Returns Map<refName, euiClassName>.\n */\nfunction buildTemplateRefMap(\n sourceFile: ts.SourceFile,\n source: string,\n filePath: string,\n tree: Tree,\n): Map<string, string> {\n const refMap = new Map<string, string>();\n\n // Find @Component decorator\n const componentMeta = findComponentMetadata(sourceFile, source);\n if (!componentMeta) return refMap;\n\n let templateSource: string | null = null;\n\n if (componentMeta.inlineTemplate !== null) {\n templateSource = componentMeta.inlineTemplate;\n } else if (componentMeta.templateUrl) {\n // Resolve templateUrl relative to the TS file\n const dir = filePath.substring(0, filePath.lastIndexOf('/'));\n const templatePath = `${dir}/${componentMeta.templateUrl}`;\n const buffer = tree.read(templatePath);\n if (buffer) {\n templateSource = buffer.toString('utf-8');\n }\n }\n\n if (!templateSource) return refMap;\n\n // Parse the template and collect #refs\n try {\n const parsed = parseTemplate(templateSource, '', { preserveWhitespaces: true });\n collectTemplateRefs(parsed.nodes, refMap);\n } catch {\n // Template parse failure — silently skip (might be malformed or use third-party syntax)\n }\n\n return refMap;\n}\n\n/**\n * Extracts @Component metadata: templateUrl or inline template content.\n */\nfunction findComponentMetadata(\n sourceFile: ts.SourceFile,\n source: string,\n): { templateUrl: string | null; inlineTemplate: string | null } | null {\n let result: { templateUrl: string | null; inlineTemplate: string | null } | null = null;\n\n const visit = (node: ts.Node): void => {\n if (result) return;\n\n if (ts.isDecorator(node) && ts.isCallExpression(node.expression)) {\n const name = getDecoratorName(node.expression);\n if (name !== 'Component') {\n ts.forEachChild(node, visit);\n return;\n }\n\n const args = node.expression.arguments;\n if (args.length === 0 || !ts.isObjectLiteralExpression(args[0])) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const meta: { templateUrl: string | null; inlineTemplate: string | null } = {\n templateUrl: null,\n inlineTemplate: null,\n };\n\n for (const prop of args[0].properties) {\n if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) continue;\n\n if (prop.name.text === 'templateUrl') {\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteralLike(init)) {\n meta.templateUrl = init.text;\n }\n }\n\n if (prop.name.text === 'template') {\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteralLike(init)) {\n meta.inlineTemplate = init.text;\n } else if (ts.isNoSubstitutionTemplateLiteral(init)) {\n meta.inlineTemplate = init.text;\n }\n }\n }\n\n result = meta;\n return;\n }\n\n ts.forEachChild(node, visit);\n };\n\n ts.forEachChild(sourceFile, visit);\n return result;\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\n/**\n * Recursively walks template AST nodes, collecting #refName → EUI class name mappings.\n *\n * For each element with a template reference (#ref), we try to resolve its EUI class:\n * 1. Match element tag name against EUI_SELECTOR_TO_CLASS (e.g. 'eui-alert' → EuiAlertComponent)\n * 2. Match element attributes against attribute selectors (e.g. [euiAutocomplete] → EuiAutocompleteComponent)\n */\nfunction collectTemplateRefs(nodes: TmplAstNode[], refMap: Map<string, string>): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.references && node.references.length > 0) {\n const euiClass = resolveElementToEuiClass(node);\n if (euiClass) {\n for (const ref of node.references) {\n refMap.set(ref.name, euiClass);\n }\n }\n }\n collectTemplateRefs(node.children, refMap);\n }\n }\n}\n\n/**\n * Given a template element, resolves it to an EUI class name by checking:\n * 1. Tag name: <eui-alert> → look up 'eui-alert' in EUI_SELECTOR_TO_CLASS\n * 2. Attribute selectors: <input euiAutocomplete> → look up 'input[euiAutocomplete]' or '[euiAutocomplete]'\n */\nfunction resolveElementToEuiClass(element: TmplAstElement): string | null {\n const tag = element.name;\n\n // Direct tag match: eui-alert, eui-dialog, etc.\n if (EUI_SELECTOR_TO_CLASS[tag]) {\n return EUI_SELECTOR_TO_CLASS[tag];\n }\n\n // Attribute selector match: check all attributes against known patterns\n const allAttrNames = [\n ...element.attributes.map((a) => a.name),\n ...element.inputs.map((i) => i.name),\n ];\n\n for (const attrName of allAttrNames) {\n // Try tag[attr] pattern first (e.g. 'button[euiButton]', 'input[euiAutocomplete]')\n const tagAttrSelector = `${tag}[${attrName}]`;\n if (EUI_SELECTOR_TO_CLASS[tagAttrSelector]) {\n return EUI_SELECTOR_TO_CLASS[tagAttrSelector];\n }\n\n // Try [attr] pattern (e.g. '[euiTooltip]', '[euiLoading]')\n const attrSelector = `[${attrName}]`;\n if (EUI_SELECTOR_TO_CLASS[attrSelector]) {\n return EUI_SELECTOR_TO_CLASS[attrSelector];\n }\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Edit helpers\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 const key = `${edit.start}:${edit.end}`;\n seen.set(key, edit);\n }\n return Array.from(seen.values());\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('.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",
1778
+ "displayName": "MigrateResult",
1779
+ "properties": [
1780
+ {
1781
+ "name": "editCount",
1782
+ "coverageIgnore": false,
1783
+ "deprecated": false,
1784
+ "deprecationMessage": "",
1785
+ "type": "number",
1786
+ "indexKey": "",
1787
+ "optional": false,
1788
+ "description": "",
1789
+ "line": 89,
1790
+ "rawdescription": "\n"
1791
+ },
1792
+ {
1793
+ "name": "source",
1794
+ "coverageIgnore": false,
1795
+ "deprecated": false,
1796
+ "deprecationMessage": "",
1797
+ "type": "string",
1798
+ "indexKey": "",
1799
+ "optional": false,
1800
+ "description": "",
1801
+ "line": 88,
1802
+ "rawdescription": "\n"
1803
+ }
1804
+ ],
1805
+ "indexSignatures": [],
1806
+ "kind": 172,
1807
+ "methods": [],
1808
+ "extends": [],
1809
+ "relationships": {
1810
+ "incoming": [],
1811
+ "outgoing": []
1812
+ }
1813
+ },
1711
1814
  {
1712
1815
  "name": "MigrationResult",
1713
1816
  "id": "interface-MigrationResult-760dec88d3f709d5b38226e55f7cbfb1e5fabcea6c004fd46e611be1dd563b8b247e9e6c77667e5582fe7b443374ba2c4facd2b2db2985edb46c9a4a37a8a876",
@@ -2036,12 +2139,12 @@
2036
2139
  },
2037
2140
  {
2038
2141
  "name": "Schema",
2039
- "id": "interface-Schema-4fe31ff3e9f1d34845a6b865d605e215f33552094b88c3d0eab0b180187fe64ce4d68d687516cb3d62c57d2678a103969b2dacbb18a49b26060f78096678fcce",
2040
- "file": "packages/core/schematics/fix-no-multiple-empty-lines/index.ts",
2142
+ "id": "interface-Schema-9c5e016857e1416ac7bbb881973e644c0f578a53bd432bb951c1676ac3f2a6631bfe3344860346a081b841217278723e0bb0bf2fa35fb869de67cb0cc8d99849",
2143
+ "file": "packages/core/schematics/add-eui-imports/index.ts",
2041
2144
  "deprecated": false,
2042
2145
  "deprecationMessage": "",
2043
2146
  "type": "interface",
2044
- "sourceCode": "import { 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 MULTIPLE_EMPTY_LINES = /\\n{3,}/g;\n\nexport function fixNoMultipleEmptyLines(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, (filePath) => {\n const buffer = tree.read(filePath);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n const result = original.replace(MULTIPLE_EMPTY_LINES, '\\n\\n');\n\n if (result !== original) {\n if (filePath.endsWith('.ts')) {\n const sourceFile = ts.createSourceFile(filePath, result, ts.ScriptTarget.Latest, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((sourceFile as any).parseDiagnostics?.length) {\n context.logger.warn(`Skipping ${filePath}: file would not parse after transformation.`);\n return;\n }\n }\n if (options.dryRun) {\n logDryRun(context, `Would collapse multiple empty lines in ${filePath}`);\n } else {\n tree.overwrite(filePath, result);\n }\n count++;\n }\n });\n\n context.logger.info(`Fixed multiple empty lines 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('.ts') && !file.endsWith('.html') && !file.endsWith('.scss') && !file.endsWith('.css')) 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",
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",
2045
2148
  "displayName": "Schema",
2046
2149
  "properties": [
2047
2150
  {
@@ -2053,7 +2156,7 @@
2053
2156
  "indexKey": "",
2054
2157
  "optional": true,
2055
2158
  "description": "",
2056
- "line": 7,
2159
+ "line": 9,
2057
2160
  "rawdescription": "\n"
2058
2161
  },
2059
2162
  {
@@ -2065,7 +2168,19 @@
2065
2168
  "indexKey": "",
2066
2169
  "optional": true,
2067
2170
  "description": "",
2068
- "line": 6,
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,
2069
2184
  "rawdescription": "\n"
2070
2185
  }
2071
2186
  ],
@@ -2080,12 +2195,12 @@
2080
2195
  },
2081
2196
  {
2082
2197
  "name": "Schema",
2083
- "id": "interface-Schema-5cd6db1920bd5b70a44c0b8a7f7e30f600bfd16a9950f218e6d451a1755ced95b462ef9a62ee87e39bcb8c392981b8d2597895bf0a272fd8aea71f03429ed976-1",
2084
- "file": "packages/core/schematics/icon-migrate/schema.ts",
2198
+ "id": "interface-Schema-4fe31ff3e9f1d34845a6b865d605e215f33552094b88c3d0eab0b180187fe64ce4d68d687516cb3d62c57d2678a103969b2dacbb18a49b26060f78096678fcce-1",
2199
+ "file": "packages/core/schematics/fix-no-multiple-empty-lines/index.ts",
2085
2200
  "deprecated": false,
2086
2201
  "deprecationMessage": "",
2087
2202
  "type": "interface",
2088
- "sourceCode": "export interface Schema {\n /** The path to scan for files to migrate */\n path?: string;\n /** Whether to perform a dry run without making changes */\n dryRun?: boolean;\n}\n",
2203
+ "sourceCode": "import { 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 MULTIPLE_EMPTY_LINES = /\\n{3,}/g;\n\nexport function fixNoMultipleEmptyLines(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, (filePath) => {\n const buffer = tree.read(filePath);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n const result = original.replace(MULTIPLE_EMPTY_LINES, '\\n\\n');\n\n if (result !== original) {\n if (filePath.endsWith('.ts')) {\n const sourceFile = ts.createSourceFile(filePath, result, ts.ScriptTarget.Latest, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((sourceFile as any).parseDiagnostics?.length) {\n context.logger.warn(`Skipping ${filePath}: file would not parse after transformation.`);\n return;\n }\n }\n if (options.dryRun) {\n logDryRun(context, `Would collapse multiple empty lines in ${filePath}`);\n } else {\n tree.overwrite(filePath, result);\n }\n count++;\n }\n });\n\n context.logger.info(`Fixed multiple empty lines 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('.ts') && !file.endsWith('.html') && !file.endsWith('.scss') && !file.endsWith('.css')) 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",
2089
2204
  "displayName": "Schema",
2090
2205
  "properties": [
2091
2206
  {
@@ -2096,9 +2211,9 @@
2096
2211
  "type": "boolean",
2097
2212
  "indexKey": "",
2098
2213
  "optional": true,
2099
- "description": "<p>Whether to perform a dry run without making changes</p>\n",
2100
- "line": 5,
2101
- "rawdescription": "\nWhether to perform a dry run without making changes"
2214
+ "description": "",
2215
+ "line": 7,
2216
+ "rawdescription": "\n"
2102
2217
  },
2103
2218
  {
2104
2219
  "name": "path",
@@ -2108,9 +2223,9 @@
2108
2223
  "type": "string",
2109
2224
  "indexKey": "",
2110
2225
  "optional": true,
2111
- "description": "<p>The path to scan for files to migrate</p>\n",
2112
- "line": 3,
2113
- "rawdescription": "\nThe path to scan for files to migrate"
2226
+ "description": "",
2227
+ "line": 6,
2228
+ "rawdescription": "\n"
2114
2229
  }
2115
2230
  ],
2116
2231
  "indexSignatures": [],
@@ -2127,12 +2242,12 @@
2127
2242
  },
2128
2243
  {
2129
2244
  "name": "Schema",
2130
- "id": "interface-Schema-56b9fe60701ca349dc90e152829b0a18bb7a8a9bb303c4bac05f9764cd2e933cce0879775ca17168b4c881e202d0258af3668a2a3a1b940e561f7e4b2349b5cc-2",
2131
- "file": "packages/core/schematics/migrate/schema.ts",
2245
+ "id": "interface-Schema-5cd6db1920bd5b70a44c0b8a7f7e30f600bfd16a9950f218e6d451a1755ced95b462ef9a62ee87e39bcb8c392981b8d2597895bf0a272fd8aea71f03429ed976-2",
2246
+ "file": "packages/core/schematics/icon-migrate/schema.ts",
2132
2247
  "deprecated": false,
2133
2248
  "deprecationMessage": "",
2134
2249
  "type": "interface",
2135
- "sourceCode": "export interface Schema {\n /** The path to scan for files to migrate */\n path?: string;\n /** Whether to apply MyWorkplace-specific replacements */\n mwp?: boolean;\n /** Whether to perform a dry run without making changes */\n dryRun?: boolean;\n}\n",
2250
+ "sourceCode": "export interface Schema {\n /** The path to scan for files to migrate */\n path?: string;\n /** Whether to perform a dry run without making changes */\n dryRun?: boolean;\n}\n",
2136
2251
  "displayName": "Schema",
2137
2252
  "properties": [
2138
2253
  {
@@ -2144,20 +2259,8 @@
2144
2259
  "indexKey": "",
2145
2260
  "optional": true,
2146
2261
  "description": "<p>Whether to perform a dry run without making changes</p>\n",
2147
- "line": 7,
2148
- "rawdescription": "\nWhether to perform a dry run without making changes"
2149
- },
2150
- {
2151
- "name": "mwp",
2152
- "coverageIgnore": false,
2153
- "deprecated": false,
2154
- "deprecationMessage": "",
2155
- "type": "boolean",
2156
- "indexKey": "",
2157
- "optional": true,
2158
- "description": "<p>Whether to apply MyWorkplace-specific replacements</p>\n",
2159
2262
  "line": 5,
2160
- "rawdescription": "\nWhether to apply MyWorkplace-specific replacements"
2263
+ "rawdescription": "\nWhether to perform a dry run without making changes"
2161
2264
  },
2162
2265
  {
2163
2266
  "name": "path",
@@ -2186,12 +2289,12 @@
2186
2289
  },
2187
2290
  {
2188
2291
  "name": "Schema",
2189
- "id": "interface-Schema-9c5e016857e1416ac7bbb881973e644c0f578a53bd432bb951c1676ac3f2a6631bfe3344860346a081b841217278723e0bb0bf2fa35fb869de67cb0cc8d99849-3",
2190
- "file": "packages/core/schematics/add-eui-imports/index.ts",
2292
+ "id": "interface-Schema-56b9fe60701ca349dc90e152829b0a18bb7a8a9bb303c4bac05f9764cd2e933cce0879775ca17168b4c881e202d0258af3668a2a3a1b940e561f7e4b2349b5cc-3",
2293
+ "file": "packages/core/schematics/migrate/schema.ts",
2191
2294
  "deprecated": false,
2192
2295
  "deprecationMessage": "",
2193
2296
  "type": "interface",
2194
- "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",
2297
+ "sourceCode": "export interface Schema {\n /** The path to scan for files to migrate */\n path?: string;\n /** Whether to apply MyWorkplace-specific replacements */\n mwp?: boolean;\n /** Whether to perform a dry run without making changes */\n dryRun?: boolean;\n}\n",
2195
2298
  "displayName": "Schema",
2196
2299
  "properties": [
2197
2300
  {
@@ -2202,33 +2305,33 @@
2202
2305
  "type": "boolean",
2203
2306
  "indexKey": "",
2204
2307
  "optional": true,
2205
- "description": "",
2206
- "line": 9,
2207
- "rawdescription": "\n"
2308
+ "description": "<p>Whether to perform a dry run without making changes</p>\n",
2309
+ "line": 7,
2310
+ "rawdescription": "\nWhether to perform a dry run without making changes"
2208
2311
  },
2209
2312
  {
2210
- "name": "path",
2313
+ "name": "mwp",
2211
2314
  "coverageIgnore": false,
2212
2315
  "deprecated": false,
2213
2316
  "deprecationMessage": "",
2214
- "type": "string",
2317
+ "type": "boolean",
2215
2318
  "indexKey": "",
2216
2319
  "optional": true,
2217
- "description": "",
2218
- "line": 8,
2219
- "rawdescription": "\n"
2320
+ "description": "<p>Whether to apply MyWorkplace-specific replacements</p>\n",
2321
+ "line": 5,
2322
+ "rawdescription": "\nWhether to apply MyWorkplace-specific replacements"
2220
2323
  },
2221
2324
  {
2222
- "name": "useClassArray",
2325
+ "name": "path",
2223
2326
  "coverageIgnore": false,
2224
2327
  "deprecated": false,
2225
2328
  "deprecationMessage": "",
2226
- "type": "boolean",
2329
+ "type": "string",
2227
2330
  "indexKey": "",
2228
2331
  "optional": true,
2229
- "description": "",
2230
- "line": 10,
2231
- "rawdescription": "\n"
2332
+ "description": "<p>The path to scan for files to migrate</p>\n",
2333
+ "line": 3,
2334
+ "rawdescription": "\nThe path to scan for files to migrate"
2232
2335
  }
2233
2336
  ],
2234
2337
  "indexSignatures": [],
@@ -3044,7 +3147,54 @@
3044
3147
  },
3045
3148
  {
3046
3149
  "name": "Schema",
3047
- "id": "interface-Schema-817c4b549cc3eab9fcf4936acab2e71182d90a4480369f5c003cbbda10792efa587ad99d65acf049f64e7030e32589e4fabc4a6d7a5621e4fe54725ef91dc9e8-21",
3150
+ "id": "interface-Schema-cac2ac952d8245647e8a48b450e8f127a36bcffb394cf2cd81fe9c0810ed02c19e5e1629dbf29a68a5c6f675aed99570e9ac04ae470e13315e20c92cc0c6c453-21",
3151
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
3152
+ "deprecated": false,
3153
+ "deprecationMessage": "",
3154
+ "type": "interface",
3155
+ "sourceCode": "import { DirEntry, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';\nimport { parseTemplate, TmplAstElement, TmplAstNode } from '@angular/compiler';\nimport * as ts from 'typescript';\nimport { logDryRun, logDryRunNote } from '../utils/dry-run';\nimport { EUI_SIGNAL_MAP, EUI_SELECTOR_TO_CLASS } from './signal-map';\n\ninterface Schema {\n path?: string;\n dryRun?: boolean;\n}\n\ninterface Edit {\n start: number;\n end: number;\n replacement: string;\n}\n\n/**\n * Migrates consumer code that accesses EUI component instances programmatically.\n *\n * When EUI migrated @Input() → input(), @ViewChild() → viewChild(), and\n * @ContentChild() → contentChild(), properties that were plain class fields\n * became signal getters. Consumers who access them via @ViewChild need to\n * change `comp.prop` to `comp.prop()`.\n *\n * This schematic:\n * 1. Finds @ViewChild / @ContentChild fields typed as EUI component classes\n * 2. Resolves untyped @ViewChild('refName') by reading the component template\n * and matching #refName to an EUI element tag/selector\n * 3. Tracks which local variable names hold EUI component references (incl. aliases)\n * 4. Rewrites property accesses on those references: `ref.prop` → `ref.prop()`\n * (only for properties listed in the signal map)\n * 5. Does NOT touch template bindings — those are unaffected by signal migrations\n */\nexport function migrateToSignals(options: Schema = {}): Rule {\n return (tree: Tree, context: SchematicContext) => {\n const scanPath = options.path ? '/' + options.path.replace(/^\\.?\\//, '').replace(/\\/$/, '') : '';\n let fileCount = 0;\n let propCount = 0;\n\n visitDir(tree.getDir(scanPath || '/'), (path) => {\n if (!path.endsWith('.ts')) return;\n // Skip spec files — test code may use different patterns\n if (path.endsWith('.spec.ts')) return;\n\n const buffer = tree.read(path);\n if (!buffer) return;\n\n const original = buffer.toString('utf-8');\n\n // Fast bail: file must mention at least one EUI class name or have\n // ViewChild/ContentChild with string refs (which might reference EUI elements)\n if (!hasEuiReference(original) && !hasStringRefQuery(original)) return;\n\n const result = migrateTypeScript(original, path, tree, context); if (result.source !== original) {\n if (options.dryRun) {\n logDryRun(context, `Would migrate ${result.editCount} signal property access(es) in ${path}`);\n } else {\n tree.overwrite(path, result.source);\n }\n fileCount++;\n propCount += result.editCount;\n }\n });\n\n context.logger.info(`Migrated ${propCount} property access(es) to signal getters in ${fileCount} file(s).`);\n if (options.dryRun) {\n logDryRunNote(context);\n }\n return tree;\n };\n}\n\n/** Quick check: does the file reference any EUI class name from the signal map? */\nfunction hasEuiReference(source: string): boolean {\n for (const className of Object.keys(EUI_SIGNAL_MAP)) {\n if (source.includes(className)) return true;\n }\n return false;\n}\n\n/** Quick check: does the file have @ViewChild('...') or @ContentChild('...') with string refs? */\nfunction hasStringRefQuery(source: string): boolean {\n return /(@ViewChild|@ContentChild|@ViewChildren|@ContentChildren)\\s*\\(\\s*['\"]/.test(source);\n}\n\ninterface MigrateResult {\n source: string;\n editCount: number;\n}\n\nfunction migrateTypeScript(source: string, filePath: string, tree: Tree, context: SchematicContext): MigrateResult {\n const sourceFile = ts.createSourceFile(filePath, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);\n const edits: Edit[] = [];\n\n // Phase 0: Build template ref map (#refName → EUI class name) from the component's template\n const templateRefMap = buildTemplateRefMap(sourceFile, source, filePath, tree);\n\n // Phase 1: Collect all variables/properties typed as EUI classes\n const euiRefs = collectEuiReferences(sourceFile, source, templateRefMap);\n\n if (euiRefs.size === 0) {\n return { source, editCount: 0 };\n }\n\n // Phase 2: Find property accesses on those references and rewrite signal props\n const visitNode = (node: ts.Node): void => {\n // Match: ref.prop (PropertyAccessExpression)\n if (ts.isPropertyAccessExpression(node)) {\n const rewrite = tryRewritePropertyAccess(node, euiRefs, sourceFile, source);\n if (rewrite) {\n edits.push(rewrite);\n }\n }\n ts.forEachChild(node, visitNode);\n };\n\n ts.forEachChild(sourceFile, visitNode);\n\n if (edits.length === 0) {\n return { source, editCount: 0 };\n }\n\n return {\n source: applyEdits(source, edits),\n editCount: edits.length,\n };\n}\n\n/**\n * Scans the source file for class properties or variables typed as EUI component classes.\n * Returns a map: localName → Set of signal property names.\n *\n * Handles:\n * @ViewChild(EuiXxxComponent) name: EuiXxxComponent;\n * @ViewChild(EuiXxxComponent) name!: EuiXxxComponent;\n * @ViewChild('ref') name: EuiXxxComponent;\n * @ContentChild(EuiXxxComponent) name: EuiXxxComponent;\n * @ViewChild('ref') name: ElementRef; (resolved via template #ref → EUI selector)\n * someVar: EuiXxxComponent; (typed class field, even without decorator)\n * const alias = this.viewChildRef; (alias tracking)\n */\nfunction collectEuiReferences(\n sourceFile: ts.SourceFile,\n source: string,\n templateRefMap: Map<string, string>,\n): Map<string, ReadonlySet<string>> {\n const refs = new Map<string, ReadonlySet<string>>();\n\n // Pass 1: collect directly-typed references\n const visitDirect = (node: ts.Node): void => {\n // Class property declarations\n if (ts.isPropertyDeclaration(node) && node.name && ts.isIdentifier(node.name)) {\n const euiClass = resolveEuiClassName(node, sourceFile, templateRefMap);\n if (euiClass && EUI_SIGNAL_MAP[euiClass]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[euiClass]);\n }\n }\n\n // Variable declarations (const x: EuiXxxComponent = ...)\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[typeName]);\n }\n }\n\n // Parameter declarations (method(ref: EuiXxxComponent))\n if (ts.isParameter(node) && ts.isIdentifier(node.name)) {\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n refs.set(node.name.text, EUI_SIGNAL_MAP[typeName]);\n }\n }\n\n ts.forEachChild(node, visitDirect);\n };\n\n ts.forEachChild(sourceFile, visitDirect);\n\n // Pass 2: track aliases — variables assigned from already-tracked references\n // e.g. const alias = this.viewChildRef; or const alias = someParam;\n const visitAlias = (node: ts.Node): void => {\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {\n // Skip if already tracked (has explicit type annotation)\n if (refs.has(node.name.text)) {\n ts.forEachChild(node, visitAlias);\n return;\n }\n\n const aliasedRef = resolveRefName(node.initializer);\n if (aliasedRef && refs.has(aliasedRef)) {\n refs.set(node.name.text, refs.get(aliasedRef)!);\n }\n }\n\n ts.forEachChild(node, visitAlias);\n };\n\n ts.forEachChild(sourceFile, visitAlias);\n return refs;\n}\n\n/**\n * Resolves the EUI class name from a property declaration.\n * Checks: type annotation → decorator class argument → template ref map.\n */\nfunction resolveEuiClassName(\n node: ts.PropertyDeclaration,\n sourceFile: ts.SourceFile,\n templateRefMap: Map<string, string>,\n): string | null {\n // Check type annotation first\n const typeName = getTypeAnnotationName(node.type);\n if (typeName && EUI_SIGNAL_MAP[typeName]) {\n return typeName;\n }\n\n // Check generic type argument: ElementRef<EuiXxxComponent>\n if (node.type && ts.isTypeReferenceNode(node.type) && node.type.typeArguments?.length) {\n const genericArg = getTypeAnnotationName(node.type.typeArguments[0]);\n if (genericArg && EUI_SIGNAL_MAP[genericArg]) {\n return genericArg;\n }\n }\n\n // Check decorator arguments: @ViewChild(EuiXxxComponent) or @ViewChild('refName')\n if (node.modifiers) {\n for (const modifier of node.modifiers) {\n if (!ts.isDecorator(modifier)) continue;\n if (!ts.isCallExpression(modifier.expression)) continue;\n\n const decoratorName = getDecoratorName(modifier.expression);\n if (!decoratorName) continue;\n if (!['ViewChild', 'ViewChildren', 'ContentChild', 'ContentChildren'].includes(decoratorName)) continue;\n\n const args = modifier.expression.arguments;\n if (args.length > 0) {\n const firstArg = args[0];\n\n // @ViewChild(EuiXxxComponent) — class reference\n if (ts.isIdentifier(firstArg) && EUI_SIGNAL_MAP[firstArg.text]) {\n return firstArg.text;\n }\n\n // @ViewChild('refName') — string template ref, resolve via template\n if (ts.isStringLiteralLike(firstArg)) {\n const refName = firstArg.text;\n const euiClass = templateRefMap.get(refName);\n if (euiClass && EUI_SIGNAL_MAP[euiClass]) {\n return euiClass;\n }\n }\n }\n }\n }\n\n return null;\n}\n\nfunction getDecoratorName(callExpr: ts.CallExpression): string | null {\n if (ts.isIdentifier(callExpr.expression)) {\n return callExpr.expression.text;\n }\n return null;\n}\n\nfunction getTypeAnnotationName(typeNode: ts.TypeNode | undefined): string | null {\n if (!typeNode) return null;\n if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {\n return typeNode.typeName.text;\n }\n return null;\n}\n\n/**\n * Checks if a property access `ref.prop` should be rewritten to `ref.prop()`.\n *\n * We rewrite if:\n * - `ref` is tracked in euiRefs\n * - `prop` is in the signal set for that EUI class\n * - The access is NOT already a call expression (not `ref.prop()` or `ref.prop(args)`)\n * - The access is NOT a write target (not `ref.prop = value`)\n * - The access is NOT a template binding argument (those are unaffected)\n */\nfunction tryRewritePropertyAccess(\n node: ts.PropertyAccessExpression,\n euiRefs: Map<string, ReadonlySet<string>>,\n sourceFile: ts.SourceFile,\n source: string,\n): Edit | null {\n const propName = node.name.text;\n\n // Resolve the reference name — handle `this.ref.prop` and `ref.prop`\n const refName = resolveRefName(node.expression);\n if (!refName) return null;\n\n const signalProps = euiRefs.get(refName);\n if (!signalProps || !signalProps.has(propName)) return null;\n\n // Skip if parent is already a call expression on this property: ref.prop(...)\n if (ts.isCallExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip if this is the left side of an assignment: ref.prop = value\n if (ts.isBinaryExpression(node.parent) &&\n node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n node.parent.left === node) {\n return null;\n }\n\n // Skip if this is a compound assignment: ref.prop += value, ref.prop &&= value, etc.\n if (ts.isBinaryExpression(node.parent) && isAssignmentOperator(node.parent.operatorToken.kind) && node.parent.left === node) {\n return null;\n }\n\n // Skip if this is used with delete: delete ref.prop\n if (ts.isDeleteExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip if inside a typeof: typeof ref.prop\n if (ts.isTypeOfExpression(node.parent) && node.parent.expression === node) {\n return null;\n }\n\n // Skip property access chains that go deeper: ref.prop.something → ref.prop().something\n // This IS correct — we still want to add ()\n\n // Rewrite: insert () after the property name\n const end = node.name.getEnd();\n return {\n start: end,\n end: end,\n replacement: '()',\n };\n}\n\nfunction isAssignmentOperator(kind: ts.SyntaxKind): boolean {\n return kind >= ts.SyntaxKind.FirstAssignment && kind <= ts.SyntaxKind.LastAssignment;\n}\n\n/**\n * Resolves a reference name from an expression.\n * Handles: `ref`, `this.ref`, `this._ref`\n */\nfunction resolveRefName(expr: ts.Expression): string | null {\n // Direct identifier: ref.prop\n if (ts.isIdentifier(expr)) {\n return expr.text;\n }\n\n // this.ref.prop\n if (ts.isPropertyAccessExpression(expr) && expr.expression.kind === ts.SyntaxKind.ThisKeyword) {\n return expr.name.text;\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Template ref resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Builds a map of template reference variable names (#ref) to EUI class names.\n *\n * Parses the component's template (inline or external) and finds elements like:\n * <eui-alert #myAlert> → myAlert → EuiAlertComponent\n * <input euiAutocomplete #ac> → ac → EuiAutocompleteComponent\n *\n * Returns Map<refName, euiClassName>.\n */\nfunction buildTemplateRefMap(\n sourceFile: ts.SourceFile,\n source: string,\n filePath: string,\n tree: Tree,\n): Map<string, string> {\n const refMap = new Map<string, string>();\n\n // Find @Component decorator\n const componentMeta = findComponentMetadata(sourceFile, source);\n if (!componentMeta) return refMap;\n\n let templateSource: string | null = null;\n\n if (componentMeta.inlineTemplate !== null) {\n templateSource = componentMeta.inlineTemplate;\n } else if (componentMeta.templateUrl) {\n // Resolve templateUrl relative to the TS file\n const dir = filePath.substring(0, filePath.lastIndexOf('/'));\n const templatePath = `${dir}/${componentMeta.templateUrl}`;\n const buffer = tree.read(templatePath);\n if (buffer) {\n templateSource = buffer.toString('utf-8');\n }\n }\n\n if (!templateSource) return refMap;\n\n // Parse the template and collect #refs\n try {\n const parsed = parseTemplate(templateSource, '', { preserveWhitespaces: true });\n collectTemplateRefs(parsed.nodes, refMap);\n } catch {\n // Template parse failure — silently skip (might be malformed or use third-party syntax)\n }\n\n return refMap;\n}\n\n/**\n * Extracts @Component metadata: templateUrl or inline template content.\n */\nfunction findComponentMetadata(\n sourceFile: ts.SourceFile,\n source: string,\n): { templateUrl: string | null; inlineTemplate: string | null } | null {\n let result: { templateUrl: string | null; inlineTemplate: string | null } | null = null;\n\n const visit = (node: ts.Node): void => {\n if (result) return;\n\n if (ts.isDecorator(node) && ts.isCallExpression(node.expression)) {\n const name = getDecoratorName(node.expression);\n if (name !== 'Component') {\n ts.forEachChild(node, visit);\n return;\n }\n\n const args = node.expression.arguments;\n if (args.length === 0 || !ts.isObjectLiteralExpression(args[0])) {\n ts.forEachChild(node, visit);\n return;\n }\n\n const meta: { templateUrl: string | null; inlineTemplate: string | null } = {\n templateUrl: null,\n inlineTemplate: null,\n };\n\n for (const prop of args[0].properties) {\n if (!ts.isPropertyAssignment(prop) || !ts.isIdentifier(prop.name)) continue;\n\n if (prop.name.text === 'templateUrl') {\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteralLike(init)) {\n meta.templateUrl = init.text;\n }\n }\n\n if (prop.name.text === 'template') {\n const init = unwrapExpression(prop.initializer);\n if (ts.isStringLiteralLike(init)) {\n meta.inlineTemplate = init.text;\n } else if (ts.isNoSubstitutionTemplateLiteral(init)) {\n meta.inlineTemplate = init.text;\n }\n }\n }\n\n result = meta;\n return;\n }\n\n ts.forEachChild(node, visit);\n };\n\n ts.forEachChild(sourceFile, visit);\n return result;\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\n/**\n * Recursively walks template AST nodes, collecting #refName → EUI class name mappings.\n *\n * For each element with a template reference (#ref), we try to resolve its EUI class:\n * 1. Match element tag name against EUI_SELECTOR_TO_CLASS (e.g. 'eui-alert' → EuiAlertComponent)\n * 2. Match element attributes against attribute selectors (e.g. [euiAutocomplete] → EuiAutocompleteComponent)\n */\nfunction collectTemplateRefs(nodes: TmplAstNode[], refMap: Map<string, string>): void {\n for (const node of nodes) {\n if (node instanceof TmplAstElement) {\n if (node.references && node.references.length > 0) {\n const euiClass = resolveElementToEuiClass(node);\n if (euiClass) {\n for (const ref of node.references) {\n refMap.set(ref.name, euiClass);\n }\n }\n }\n collectTemplateRefs(node.children, refMap);\n }\n }\n}\n\n/**\n * Given a template element, resolves it to an EUI class name by checking:\n * 1. Tag name: <eui-alert> → look up 'eui-alert' in EUI_SELECTOR_TO_CLASS\n * 2. Attribute selectors: <input euiAutocomplete> → look up 'input[euiAutocomplete]' or '[euiAutocomplete]'\n */\nfunction resolveElementToEuiClass(element: TmplAstElement): string | null {\n const tag = element.name;\n\n // Direct tag match: eui-alert, eui-dialog, etc.\n if (EUI_SELECTOR_TO_CLASS[tag]) {\n return EUI_SELECTOR_TO_CLASS[tag];\n }\n\n // Attribute selector match: check all attributes against known patterns\n const allAttrNames = [\n ...element.attributes.map((a) => a.name),\n ...element.inputs.map((i) => i.name),\n ];\n\n for (const attrName of allAttrNames) {\n // Try tag[attr] pattern first (e.g. 'button[euiButton]', 'input[euiAutocomplete]')\n const tagAttrSelector = `${tag}[${attrName}]`;\n if (EUI_SELECTOR_TO_CLASS[tagAttrSelector]) {\n return EUI_SELECTOR_TO_CLASS[tagAttrSelector];\n }\n\n // Try [attr] pattern (e.g. '[euiTooltip]', '[euiLoading]')\n const attrSelector = `[${attrName}]`;\n if (EUI_SELECTOR_TO_CLASS[attrSelector]) {\n return EUI_SELECTOR_TO_CLASS[attrSelector];\n }\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Edit helpers\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 const key = `${edit.start}:${edit.end}`;\n seen.set(key, edit);\n }\n return Array.from(seen.values());\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('.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",
3156
+ "displayName": "Schema",
3157
+ "properties": [
3158
+ {
3159
+ "name": "dryRun",
3160
+ "coverageIgnore": false,
3161
+ "deprecated": false,
3162
+ "deprecationMessage": "",
3163
+ "type": "boolean",
3164
+ "indexKey": "",
3165
+ "optional": true,
3166
+ "description": "",
3167
+ "line": 9,
3168
+ "rawdescription": "\n"
3169
+ },
3170
+ {
3171
+ "name": "path",
3172
+ "coverageIgnore": false,
3173
+ "deprecated": false,
3174
+ "deprecationMessage": "",
3175
+ "type": "string",
3176
+ "indexKey": "",
3177
+ "optional": true,
3178
+ "description": "",
3179
+ "line": 8,
3180
+ "rawdescription": "\n"
3181
+ }
3182
+ ],
3183
+ "indexSignatures": [],
3184
+ "kind": 172,
3185
+ "methods": [],
3186
+ "extends": [],
3187
+ "isDuplicate": true,
3188
+ "duplicateId": 21,
3189
+ "duplicateName": "Schema-21",
3190
+ "relationships": {
3191
+ "incoming": [],
3192
+ "outgoing": []
3193
+ }
3194
+ },
3195
+ {
3196
+ "name": "Schema",
3197
+ "id": "interface-Schema-817c4b549cc3eab9fcf4936acab2e71182d90a4480369f5c003cbbda10792efa587ad99d65acf049f64e7030e32589e4fabc4a6d7a5621e4fe54725ef91dc9e8-22",
3048
3198
  "file": "packages/core/schematics/migrate-to-standalone/index.ts",
3049
3199
  "deprecated": false,
3050
3200
  "deprecationMessage": "",
@@ -3082,8 +3232,8 @@
3082
3232
  "methods": [],
3083
3233
  "extends": [],
3084
3234
  "isDuplicate": true,
3085
- "duplicateId": 21,
3086
- "duplicateName": "Schema-21",
3235
+ "duplicateId": 22,
3236
+ "duplicateName": "Schema-22",
3087
3237
  "relationships": {
3088
3238
  "incoming": [],
3089
3239
  "outgoing": []
@@ -19523,13 +19673,13 @@
19523
19673
  },
19524
19674
  {
19525
19675
  "name": "TranslateLoaderMock",
19526
- "id": "class-TranslateLoaderMock-a6db37044983724bfab8f8eb6fbaf6bb1f4b1de1651ef5303a344a4b606cbe68e1bf0bdbe45bd473e1c77e446058e133e85517ed7e8fda4b4be59a70ef96bd06",
19676
+ "id": "class-TranslateLoaderMock-d42afa990d476989657d92ef3f9c88346ef461191fc8641719f83d538694483a6f785c8618d8ee729faee7c37e723a1fdfcac95badfa6e5259f869ebe95cccad",
19527
19677
  "file": "packages/core/src/lib/mocks/translate.module.mock.ts",
19528
19678
  "coverageIgnore": false,
19529
19679
  "deprecated": false,
19530
19680
  "deprecationMessage": "",
19531
19681
  "type": "class",
19532
- "sourceCode": "import { AfterViewChecked, Directive, ElementRef, Input, NgModule, Pipe, PipeTransform, inject, signal } from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n @Input()\n translateParams: any;\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
19682
+ "sourceCode": "import {\n AfterViewChecked,\n Directive,\n ElementRef,\n Input,\n NgModule,\n Pipe,\n PipeTransform,\n inject,\n signal,\n input,\n} from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n readonly translateParams = input();\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
19533
19683
  "displayName": "TranslateLoaderMock",
19534
19684
  "inputsClass": [],
19535
19685
  "outputsClass": [],
@@ -19542,7 +19692,7 @@
19542
19692
  "optional": false,
19543
19693
  "returnType": "Observable<Record<string, string>>",
19544
19694
  "typeParameters": [],
19545
- "line": 85,
19695
+ "line": 95,
19546
19696
  "deprecated": false,
19547
19697
  "deprecationMessage": "",
19548
19698
  "rawdescription": "\n",
@@ -19568,13 +19718,13 @@
19568
19718
  },
19569
19719
  {
19570
19720
  "name": "TranslateServiceMock",
19571
- "id": "class-TranslateServiceMock-a6db37044983724bfab8f8eb6fbaf6bb1f4b1de1651ef5303a344a4b606cbe68e1bf0bdbe45bd473e1c77e446058e133e85517ed7e8fda4b4be59a70ef96bd06",
19721
+ "id": "class-TranslateServiceMock-d42afa990d476989657d92ef3f9c88346ef461191fc8641719f83d538694483a6f785c8618d8ee729faee7c37e723a1fdfcac95badfa6e5259f869ebe95cccad",
19572
19722
  "file": "packages/core/src/lib/mocks/translate.module.mock.ts",
19573
19723
  "coverageIgnore": false,
19574
19724
  "deprecated": false,
19575
19725
  "deprecationMessage": "",
19576
19726
  "type": "class",
19577
- "sourceCode": "import { AfterViewChecked, Directive, ElementRef, Input, NgModule, Pipe, PipeTransform, inject, signal } from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n @Input()\n translateParams: any;\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
19727
+ "sourceCode": "import {\n AfterViewChecked,\n Directive,\n ElementRef,\n Input,\n NgModule,\n Pipe,\n PipeTransform,\n inject,\n signal,\n input,\n} from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n readonly translateParams = input();\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
19578
19728
  "displayName": "TranslateServiceMock",
19579
19729
  "inputsClass": [],
19580
19730
  "outputsClass": [],
@@ -19589,7 +19739,7 @@
19589
19739
  "indexKey": "",
19590
19740
  "optional": false,
19591
19741
  "description": "",
19592
- "line": 21,
19742
+ "line": 32,
19593
19743
  "rawdescription": "\n"
19594
19744
  },
19595
19745
  {
@@ -19602,7 +19752,7 @@
19602
19752
  "indexKey": "",
19603
19753
  "optional": false,
19604
19754
  "description": "",
19605
- "line": 19,
19755
+ "line": 30,
19606
19756
  "rawdescription": "\n"
19607
19757
  },
19608
19758
  {
@@ -19615,7 +19765,7 @@
19615
19765
  "indexKey": "",
19616
19766
  "optional": false,
19617
19767
  "description": "",
19618
- "line": 14,
19768
+ "line": 25,
19619
19769
  "rawdescription": "\n"
19620
19770
  },
19621
19771
  {
@@ -19628,7 +19778,7 @@
19628
19778
  "indexKey": "",
19629
19779
  "optional": false,
19630
19780
  "description": "",
19631
- "line": 23,
19781
+ "line": 34,
19632
19782
  "rawdescription": "\n"
19633
19783
  },
19634
19784
  {
@@ -19641,7 +19791,7 @@
19641
19791
  "indexKey": "",
19642
19792
  "optional": false,
19643
19793
  "description": "",
19644
- "line": 18,
19794
+ "line": 29,
19645
19795
  "rawdescription": "\n"
19646
19796
  },
19647
19797
  {
@@ -19654,7 +19804,7 @@
19654
19804
  "indexKey": "",
19655
19805
  "optional": false,
19656
19806
  "description": "",
19657
- "line": 13,
19807
+ "line": 24,
19658
19808
  "rawdescription": "\n"
19659
19809
  },
19660
19810
  {
@@ -19667,7 +19817,7 @@
19667
19817
  "indexKey": "",
19668
19818
  "optional": false,
19669
19819
  "description": "",
19670
- "line": 16,
19820
+ "line": 27,
19671
19821
  "rawdescription": "\n"
19672
19822
  },
19673
19823
  {
@@ -19680,7 +19830,7 @@
19680
19830
  "indexKey": "",
19681
19831
  "optional": false,
19682
19832
  "description": "",
19683
- "line": 11,
19833
+ "line": 22,
19684
19834
  "rawdescription": "\n"
19685
19835
  },
19686
19836
  {
@@ -19693,7 +19843,7 @@
19693
19843
  "indexKey": "",
19694
19844
  "optional": false,
19695
19845
  "description": "",
19696
- "line": 17,
19846
+ "line": 28,
19697
19847
  "rawdescription": "\n"
19698
19848
  },
19699
19849
  {
@@ -19706,7 +19856,7 @@
19706
19856
  "indexKey": "",
19707
19857
  "optional": false,
19708
19858
  "description": "",
19709
- "line": 12,
19859
+ "line": 23,
19710
19860
  "rawdescription": "\n"
19711
19861
  }
19712
19862
  ],
@@ -19727,7 +19877,7 @@
19727
19877
  "optional": false,
19728
19878
  "returnType": "void",
19729
19879
  "typeParameters": [],
19730
- "line": 34,
19880
+ "line": 45,
19731
19881
  "deprecated": false,
19732
19882
  "deprecationMessage": "",
19733
19883
  "rawdescription": "\n",
@@ -19762,7 +19912,7 @@
19762
19912
  "optional": false,
19763
19913
  "returnType": "Observable<string>",
19764
19914
  "typeParameters": [],
19765
- "line": 25,
19915
+ "line": 36,
19766
19916
  "deprecated": false,
19767
19917
  "deprecationMessage": "",
19768
19918
  "rawdescription": "\n",
@@ -19788,7 +19938,7 @@
19788
19938
  "optional": false,
19789
19939
  "returnType": "string",
19790
19940
  "typeParameters": [],
19791
- "line": 38,
19941
+ "line": 49,
19792
19942
  "deprecated": false,
19793
19943
  "deprecationMessage": "",
19794
19944
  "rawdescription": "\n",
@@ -19801,7 +19951,7 @@
19801
19951
  "optional": false,
19802
19952
  "returnType": "string[]",
19803
19953
  "typeParameters": [],
19804
- "line": 42,
19954
+ "line": 53,
19805
19955
  "deprecated": false,
19806
19956
  "deprecationMessage": "",
19807
19957
  "rawdescription": "\n",
@@ -19814,7 +19964,7 @@
19814
19964
  "optional": false,
19815
19965
  "returnType": "Observable<any>",
19816
19966
  "typeParameters": [],
19817
- "line": 48,
19967
+ "line": 59,
19818
19968
  "deprecated": false,
19819
19969
  "deprecationMessage": "",
19820
19970
  "rawdescription": "\n",
@@ -19836,7 +19986,7 @@
19836
19986
  "optional": false,
19837
19987
  "returnType": "string",
19838
19988
  "typeParameters": [],
19839
- "line": 52,
19989
+ "line": 63,
19840
19990
  "deprecated": false,
19841
19991
  "deprecationMessage": "",
19842
19992
  "rawdescription": "\n",
@@ -19871,7 +20021,7 @@
19871
20021
  "optional": false,
19872
20022
  "returnType": "void",
19873
20023
  "typeParameters": [],
19874
- "line": 56,
20024
+ "line": 67,
19875
20025
  "deprecated": false,
19876
20026
  "deprecationMessage": "",
19877
20027
  "rawdescription": "\n",
@@ -19906,7 +20056,7 @@
19906
20056
  "optional": false,
19907
20057
  "returnType": "void",
19908
20058
  "typeParameters": [],
19909
- "line": 29,
20059
+ "line": 40,
19910
20060
  "deprecated": false,
19911
20061
  "deprecationMessage": "",
19912
20062
  "rawdescription": "\n",
@@ -21031,27 +21181,31 @@
21031
21181
  "directives": [
21032
21182
  {
21033
21183
  "name": "TranslateMockDirective",
21034
- "id": "directive-TranslateMockDirective-a6db37044983724bfab8f8eb6fbaf6bb1f4b1de1651ef5303a344a4b606cbe68e1bf0bdbe45bd473e1c77e446058e133e85517ed7e8fda4b4be59a70ef96bd06",
21184
+ "id": "directive-TranslateMockDirective-d42afa990d476989657d92ef3f9c88346ef461191fc8641719f83d538694483a6f785c8618d8ee729faee7c37e723a1fdfcac95badfa6e5259f869ebe95cccad",
21035
21185
  "file": "packages/core/src/lib/mocks/translate.module.mock.ts",
21036
21186
  "type": "directive",
21037
21187
  "description": "",
21038
21188
  "rawdescription": "\n",
21039
- "sourceCode": "import { AfterViewChecked, Directive, ElementRef, Input, NgModule, Pipe, PipeTransform, inject, signal } from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n @Input()\n translateParams: any;\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
21189
+ "sourceCode": "import {\n AfterViewChecked,\n Directive,\n ElementRef,\n Input,\n NgModule,\n Pipe,\n PipeTransform,\n inject,\n signal,\n input,\n} from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n readonly translateParams = input();\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
21040
21190
  "selector": "[translate]",
21041
21191
  "providers": [],
21042
21192
  "hostDirectives": [],
21043
21193
  "standalone": false,
21044
21194
  "inputsClass": [
21045
21195
  {
21046
- "coverageIgnore": false,
21047
21196
  "name": "translateParams",
21197
+ "coverageIgnore": false,
21048
21198
  "deprecated": false,
21049
21199
  "deprecationMessage": "",
21050
- "rawdescription": "\n",
21200
+ "indexKey": "",
21201
+ "optional": false,
21051
21202
  "description": "",
21052
- "line": 75,
21053
- "type": "any",
21054
- "decorators": []
21203
+ "line": 85,
21204
+ "rawdescription": "\n",
21205
+ "modifierKind": [
21206
+ 148
21207
+ ],
21208
+ "required": false
21055
21209
  }
21056
21210
  ],
21057
21211
  "outputsClass": [],
@@ -21068,7 +21222,7 @@
21068
21222
  "optional": false,
21069
21223
  "returnType": "void",
21070
21224
  "typeParameters": [],
21071
- "line": 79,
21225
+ "line": 89,
21072
21226
  "deprecated": false,
21073
21227
  "deprecationMessage": "",
21074
21228
  "rawdescription": "\n",
@@ -21918,13 +22072,13 @@
21918
22072
  },
21919
22073
  {
21920
22074
  "name": "TranslateMockModule",
21921
- "id": "module-TranslateMockModule-a6db37044983724bfab8f8eb6fbaf6bb1f4b1de1651ef5303a344a4b606cbe68e1bf0bdbe45bd473e1c77e446058e133e85517ed7e8fda4b4be59a70ef96bd06",
22075
+ "id": "module-TranslateMockModule-d42afa990d476989657d92ef3f9c88346ef461191fc8641719f83d538694483a6f785c8618d8ee729faee7c37e723a1fdfcac95badfa6e5259f869ebe95cccad",
21922
22076
  "description": "",
21923
22077
  "deprecationMessage": "",
21924
22078
  "deprecated": false,
21925
22079
  "file": "packages/core/src/lib/mocks/translate.module.mock.ts",
21926
22080
  "methods": [],
21927
- "sourceCode": "/* istanbul ignore file */\n\nimport { AfterViewChecked, Directive, ElementRef, Input, NgModule, Pipe, PipeTransform, inject, signal } from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n @Input()\n translateParams: any;\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
22081
+ "sourceCode": "/* istanbul ignore file */\n\nimport {\n AfterViewChecked,\n Directive,\n ElementRef,\n Input,\n NgModule,\n Pipe,\n PipeTransform,\n inject,\n signal,\n input,\n} from '@angular/core';\nimport { LangChangeEvent, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, of, Subject } from 'rxjs';\n\nexport const TRANSLATED_STRING = 'i18n';\nexport const DEFAULT_LANGUAGE = 'en';\n\nexport class TranslateServiceMock {\n onLangChangeSubject: Subject<LangChangeEvent> = new Subject();\n onTranslationChangeSubject: Subject<string> = new Subject();\n onFallbackLangChangeSubject: Subject<string> = new Subject();\n isLoadedSubject: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\n onLangChange: Observable<LangChangeEvent> = this.onLangChangeSubject.asObservable();\n onTranslationChange: Observable<string> = this.onTranslationChangeSubject.asObservable();\n onFallbackLangChange: Observable<string> = this.onFallbackLangChangeSubject.asObservable();\n isLoaded: Observable<boolean> = this.isLoadedSubject.asObservable();\n\n currentLang = signal<string | null>(null);\n\n languages: string[] = [DEFAULT_LANGUAGE];\n\n get(content: string): Observable<string> {\n return of(TRANSLATED_STRING + content);\n }\n\n use(lang: string): void {\n this.currentLang.set(lang);\n this.onLangChangeSubject.next({ lang } as LangChangeEvent);\n }\n\n addLangs(langs: string[]): void {\n this.languages = [...this.languages, ...langs];\n }\n\n getBrowserLang(): string {\n return DEFAULT_LANGUAGE;\n }\n\n getLangs(): string[] {\n return this.languages;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n getTranslation(): Observable<any> {\n return of({});\n }\n\n instant(key: string | string[]): string {\n return TRANSLATED_STRING + key.toString();\n }\n\n setFallbackLang(lang: string): void {\n this.onFallbackLangChangeSubject.next(lang);\n }\n}\n\n@Pipe({ name: 'translate' })\nexport class TranslateMockPipe implements PipeTransform {\n transform(text: string): string {\n return !text ? TRANSLATED_STRING : `${text}-${TRANSLATED_STRING}`;\n }\n}\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[translate]',\n})\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport class TranslateMockDirective implements AfterViewChecked {\n readonly translateParams = input();\n\n private readonly _element = inject(ElementRef);\n\n ngAfterViewChecked(): void {\n this._element.nativeElement.innerText += TRANSLATED_STRING;\n }\n}\n\nexport class TranslateLoaderMock implements TranslateLoader {\n getTranslation(): Observable<Record<string, string>> {\n return of({});\n }\n}\n\n@NgModule({\n imports: [TranslateMockPipe, TranslateMockDirective],\n exports: [TranslateMockPipe, TranslateMockDirective],\n providers: [\n { provide: TranslateService, useClass: TranslateServiceMock },\n { provide: TranslateLoader, useClass: TranslateLoaderMock },\n ],\n})\nexport class TranslateMockModule {}\n",
21928
22082
  "children": [
21929
22083
  {
21930
22084
  "type": "providers",
@@ -22534,6 +22688,32 @@
22534
22688
  "type": "[]",
22535
22689
  "defaultValue": "['euiButton', 'euiList', 'euiListItem']"
22536
22690
  },
22691
+ {
22692
+ "name": "EUI_SELECTOR_TO_CLASS",
22693
+ "ctype": "miscellaneous",
22694
+ "subtype": "variable",
22695
+ "file": "packages/core/schematics/migrate-to-signals/signal-map.ts",
22696
+ "coverageIgnore": false,
22697
+ "deprecated": false,
22698
+ "deprecationMessage": "",
22699
+ "type": "Record<string, string>",
22700
+ "defaultValue": "{\n '[euiBase]': 'BaseStatesDirective',\n '[euiDropdownItem]': 'EuiDropdownItemComponent',\n '[euiIconColored]': 'EuiIconColorComponent',\n '[euiListItem]': 'EuiListItemComponent',\n '[euiLoading]': 'EuiLoadingDirective',\n '[euiScrollHandler]': 'EuiScrollHandlerDirective',\n '[euiScrollTo]': 'EuiSmoothScrollToDirective',\n '[euiTemplate]': 'EuiTemplateDirective',\n '[euiTooltip]': 'EuiTooltipDirective',\n '[formControlName][euiEditorMaxlength]': 'EuiEditorMaxlengthDirective',\n 'a[euiButton]': 'EuiButtonComponent',\n 'button[euiButton]': 'EuiButtonComponent',\n 'div[euiAlert]': 'EuiAlertComponent',\n 'div[euiAvatar]': 'EuiAvatarComponent',\n 'div[euiBadge]': 'EuiBadgeComponent',\n 'div[euiInputGroupAddOnItem]': 'EuiInputGroupAddOnItemComponent',\n 'div[euiInputGroupAddOn]': 'EuiInputGroupAddOnComponent',\n 'div[euiInputGroup]': 'EuiInputGroupComponent',\n 'div[euiStatusBadge]': 'EuiStatusBadgeComponent',\n 'eds-tab-body': 'EdsTabBody',\n 'eds-tab-header': 'EdsTabHeader',\n 'eds-tabs': 'EdsTabs',\n 'eui-alert': 'EuiAlertComponent',\n 'eui-app': 'AppComponent',\n 'eui-app-side-container': 'EuiAppSideContainerComponent',\n 'eui-app-sidebar-drawer': 'EuiAppSidebarDrawerComponent',\n 'eui-app-sidebar-header-user-profile': 'EuiAppSidebarHeaderUserProfileComponent',\n 'eui-app-sidebar-menu': 'EuiAppSidebarMenuComponent',\n 'eui-app-toolbar': 'EuiAppToolbarComponent',\n 'eui-app-top-message': 'EuiAppTopMessageComponent',\n 'eui-autocomplete': 'EuiAutocompleteComponent',\n 'eui-autocomplete-panel': 'EuiAutocompletePanelComponent',\n 'eui-avatar': 'EuiAvatarComponent',\n 'eui-avatar-badge': 'EuiAvatarBadgeComponent',\n 'eui-avatar-image': 'EuiAvatarImageComponent',\n 'eui-badge': 'EuiBadgeComponent',\n 'eui-banner': 'EuiBannerComponent',\n 'eui-block-document': 'EuiBlockDocumentComponent',\n 'eui-breadcrumb-item': 'EuiBreadcrumbItemComponent',\n 'eui-button-group': 'EuiButtonGroupComponent',\n 'eui-card': 'EuiCardComponent',\n 'eui-card-footer-menu-content': 'EuiCardFooterMenuContentComponent',\n 'eui-card-header': 'EuiCardHeaderComponent',\n 'eui-card-header-left-content': 'EuiCardHeaderLeftContentComponent',\n 'eui-card-media': 'EuiCardMediaComponent',\n 'eui-chip': 'EuiChipComponent',\n 'eui-chip-button': 'EuiChipButtonComponent',\n 'eui-chip-group': 'EuiChipGroupComponent',\n 'eui-chip-list-append-content': 'EuiChipListAppendContentDirective',\n 'eui-comment-item': 'EuiCommentItemComponent',\n 'eui-comment-textarea': 'EuiCommentTextareaComponent',\n 'eui-comment-thread': 'EuiCommentThreadComponent',\n 'eui-content-card': 'EuiContentCardComponent',\n 'eui-content-card-header-end': 'EuiContentCardHeaderEndComponent',\n 'eui-dashboard-card': 'EuiDashboardCardComponent',\n 'eui-dashboard-card-content-header-icon': 'EuiDashboardCardContentHeaderIconComponent',\n 'eui-date-block': 'EuiDateBlockComponent',\n 'eui-date-range-selector': 'EuiDateRangeSelectorComponent',\n 'eui-datepicker': 'EuiDatepickerComponent',\n 'eui-dialog': 'EuiDialogComponent',\n 'eui-dialog-container': 'EuiDialogContainerComponent',\n 'eui-dimmer': 'EuiDimmerComponent',\n 'eui-discussion-thread': 'EuiDiscussionThreadComponent',\n 'eui-discussion-thread-item': 'EuiDiscussionThreadItemComponent',\n 'eui-dropdown': 'EuiDropdownComponent',\n 'eui-dropdown-item': 'EuiDropdownItemComponent',\n 'eui-dropdown[euiDropdownTree]': 'EuiDropdownTreeDirective',\n 'eui-editor': 'EuiEditorComponent',\n 'eui-editor-counters': 'EuiEditorCountersComponent',\n 'eui-editor-json-view': 'EuiEditorJsonViewComponent',\n 'eui-feedback-message': 'EuiFeedbackMessageComponent',\n 'eui-file-preview': 'EuiFilePreviewComponent',\n 'eui-file-upload': 'EuiFileUploadComponent',\n 'eui-file-upload-progress': 'EuiFileUploadProgressComponent',\n 'eui-footer': 'EuiFooterComponent',\n 'eui-growl': 'EuiGrowlComponent',\n 'eui-header': 'EuiHeaderComponent',\n 'eui-header-app': 'EuiHeaderAppComponent',\n 'eui-header-app-name-logo': 'EuiHeaderAppNameLogoComponent',\n 'eui-header-logo': 'EuiHeaderLogoComponent',\n 'eui-header-search': 'EuiHeaderSearchComponent',\n 'eui-header-user-profile': 'EuiHeaderUserProfileComponent',\n 'eui-icon-button': 'EuiIconButtonComponent',\n 'eui-icon-button-expander': 'EuiIconButtonExpanderComponent',\n 'eui-icon-colored': 'EuiIconColorComponent',\n 'eui-icon-input': 'EuiIconInputComponent',\n 'eui-icon-state': 'EuiIconStateComponent',\n 'eui-icon-svg': 'EuiIconSvgComponent',\n 'eui-icon-toggle': 'EuiIconToggleComponent',\n 'eui-input-button': 'EuiInputButtonComponent',\n 'eui-input-group-addon': 'EuiInputGroupAddOnComponent',\n 'eui-input-group-addon-item': 'EuiInputGroupAddOnItemComponent',\n 'eui-language-selector': 'EuiLanguageSelectorComponent',\n 'eui-list-item': 'EuiListItemComponent',\n 'eui-menu': 'EuiMenuComponent',\n 'eui-menu-item': 'EuiMenuItemComponent',\n 'eui-message-box': 'EuiMessageBoxComponent',\n 'eui-navbar-item': 'EuiNavbarItemComponent',\n 'eui-notification-item': 'EuiNotificationItemComponent',\n 'eui-notification-item-v2': 'EuiNotificationItemV2Component',\n 'eui-notifications': 'EuiNotificationsComponent',\n 'eui-notifications-v2': 'EuiNotificationsV2Component',\n 'eui-overlay': 'EuiOverlayComponent',\n 'eui-overlay-header-title': 'EuiOverlayHeaderTitleComponent',\n 'eui-page': 'EuiPageComponent',\n 'eui-page-column': 'EuiPageColumnComponent',\n 'eui-page-columns': 'EuiPageColumnsComponent',\n 'eui-page-footer': 'EuiPageFooterComponent',\n 'eui-page-header': 'EuiPageHeaderComponent',\n 'eui-page-hero-header': 'EuiPageHeroHeaderComponent',\n 'eui-page-panel': 'EuiPagePanelComponent',\n 'eui-page-top-content': 'EuiPageTopContentComponent',\n 'eui-paginator': 'EuiPaginatorComponent',\n 'eui-popover': 'EuiPopoverComponent',\n 'eui-progress-bar': 'EuiProgressBarComponent',\n 'eui-progress-circle': 'EuiProgressCircleComponent',\n 'eui-rating': 'EuiRatingComponent',\n 'eui-resizable': 'EuiResizableComponent',\n 'eui-section-header': 'EuiSectionHeaderComponent',\n 'eui-section-header-icon': 'EuiSectionHeaderIconComponent',\n 'eui-sidebar-toggle': 'EuiSidebarToggleComponent',\n 'eui-skeleton': 'EuiSkeletonComponent',\n 'eui-slide-toggle': 'EuiSlideToggleComponent',\n 'eui-slider': 'EuiSliderComponent',\n 'eui-status-badge': 'EuiStatusBadgeComponent',\n 'eui-tab': 'EuiTabComponent',\n 'eui-tab-body': 'EuiTabBodyComponent',\n 'eui-tab-header': 'EuiTabHeaderComponent',\n 'eui-table': 'EuiTableComponent',\n 'eui-table-filter': 'EuiTableFilterComponent',\n 'eui-tabs': 'EuiTabsComponent',\n 'eui-timeline': 'EuiTimelineComponent',\n 'eui-timeline-item': 'EuiTimelineItemComponent',\n 'eui-timepicker': 'EuiTimepickerComponent',\n 'eui-toggle-group': 'EuiToggleGroupComponent',\n 'eui-toggle-group-item': 'EuiToggleGroupItemComponent',\n 'eui-toolbar-app': 'EuiToolbarAppComponent',\n 'eui-toolbar-items': 'EuiToolbarItemsComponent',\n 'eui-toolbar-logo': 'EuiToolbarLogoComponent',\n 'eui-toolbar-mega-menu': 'EuiToolbarMegaMenuComponent',\n 'eui-toolbar-mega-menu-container': 'EuiToolbarMegaMenuContainerComponent',\n 'eui-toolbar-navbar-item': 'EuiToolbarNavbarItemComponent',\n 'eui-toolbar-search': 'EuiToolbarSearchComponent',\n 'eui-toolbar-selector': 'EuiToolbarSelectorComponent',\n 'eui-tooltip-container.component': 'EuiTooltipContainerComponent',\n 'eui-tree': 'EuiTreeComponent',\n 'eui-tree-list': 'EuiTreeListComponent',\n 'eui-tree-list-item': 'EuiTreeListItemComponent',\n 'eui-tree-list-toolbar': 'EuiTreeListToolbarComponent',\n 'eui-tree[euiTreeFormControl]': 'EuiTreeFormControlDirective',\n 'eui-user-profile': 'EuiUserProfileComponent',\n 'eui-user-profile-card': 'EuiUserProfileCardComponent',\n 'eui-wizard': 'EuiWizardComponent',\n euiFieldsetLabelRightContent: 'EuiFieldsetLabelRightContentTagDirective',\n 'i[euiIconSvg]': 'EuiIconSvgComponent',\n 'input[euiAutocomplete]': 'EuiAutocompleteComponent',\n 'input[euiClearable]': 'EuiClearableDirective',\n 'input[euiInputCheckBox]': 'EuiInputCheckboxComponent',\n 'input[euiInputRadio]': 'EuiInputRadioComponent',\n 'input[euiInput]': 'InputDirective',\n 'li[euiChipButton]': 'EuiChipButtonComponent',\n 'li[euiChip]': 'EuiChipComponent',\n 'option:not([eclSelectOption]):not([eclMultiselectOption])': 'EuiNgSelectOptionDirective',\n 'option[euiOption]': 'EuiNgSelectOptionDirective',\n 'quill-editor': 'QuillEditorComponent',\n 'select[euiSelect]': 'EuiSelectComponent',\n 'span[euiAvatar]': 'EuiAvatarComponent',\n 'span[euiBadge]': 'EuiBadgeComponent',\n 'span[euiChipButton]': 'EuiChipButtonComponent',\n 'span[euiChip]': 'EuiChipComponent',\n 'span[euiIconColored]': 'EuiIconColorComponent',\n 'span[euiIconSvg]': 'EuiIconSvgComponent',\n 'span[euiStatusBadge]': 'EuiStatusBadgeComponent',\n 'table[euiTable]': 'EuiTableComponent',\n 'th[isSortable]': 'EuiTableSortableColComponent',\n 'tr[isDataSelectable]': 'EuiTableSelectableRowComponent',\n 'tr[isHeaderSelectable]': 'EuiTableSelectableHeaderComponent',\n}",
22701
+ "rawdescription": "Map of component/directive selectors to their class names.\nUsed to resolve",
22702
+ "description": "<p>Map of component/directive selectors to their class names.\nUsed to resolve</p>\n"
22703
+ },
22704
+ {
22705
+ "name": "EUI_SIGNAL_MAP",
22706
+ "ctype": "miscellaneous",
22707
+ "subtype": "variable",
22708
+ "file": "packages/core/schematics/migrate-to-signals/signal-map.ts",
22709
+ "coverageIgnore": false,
22710
+ "deprecated": false,
22711
+ "deprecationMessage": "",
22712
+ "type": "Record<string, ReadonlySet<string>>",
22713
+ "defaultValue": "{\n AppComponent: new Set(['appSubTitle', 'isShrinkHeaderActive', 'isSidebarHidden', 'isSidebarOpen', 'themeClass']),\n BaseStatesDirective: new Set(['euiBranding', 'euiClearable', 'euiCompact', 'euiDanger', 'euiDisabled', 'euiEnd', 'euiHighlighted', 'euiInfo', 'euiInverse', 'euiInverted', 'euiLoading', 'euiOutline', 'euiPrimary', 'euiResponsive', 'euiRounded', 'euiSecondary', 'euiSecondaryLight', 'euiSize2XL', 'euiSize2XS', 'euiSize3XL', 'euiSize4XL', 'euiSize5XL', 'euiSize6XL', 'euiSizeAuto', 'euiSizeL', 'euiSizeM', 'euiSizeS', 'euiSizeVariant', 'euiSizeXL', 'euiSizeXS', 'euiStart', 'euiSuccess', 'euiVariant', 'euiWarning']),\n EdsTabBody: new Set(['templateRef']),\n EdsTabHeader: new Set(['templateRef']),\n EdsTabs: new Set(['edsTabListItems', 'edsTabsHeaders', 'edsTabsHeadersContainer', 'edsTabsRightContent']),\n EuiAlertComponent: new Set(['cssClasses']),\n EuiAppSideContainerComponent: new Set(['euiResizableMinWidth', 'euiResizablePosition', 'hasOverlayClosedOnClickOutside', 'isActive', 'isOverlayActive']),\n EuiAppSidebarDrawerComponent: new Set(['isExpanded']),\n EuiAppSidebarHeaderUserProfileComponent: new Set(['avatarUrl', 'hasProfileDrawer', 'hasTabNavigation', 'hasToggle', 'hasWelcomeLabel', 'impersonateLabel', 'isOnline', 'isShowAvatarInitials', 'isShowUserInfos', 'welcomeLabel']),\n EuiAppSidebarMenuComponent: new Set(['expandAllItems', 'hasBoldRootLevel', 'hasCollapsedInitials', 'hasFilter', 'hasIcons', 'hasIconsLabels', 'hasScrollToItem', 'hasTooltip', 'hasTooltipOnExpanded', 'hasTooltipOnlyOnExpanded', 'isCollapsed', 'isFlat', 'items', 'menu']),\n EuiAppToolbarComponent: new Set(['euiSecondary']),\n EuiAppTopMessageComponent: new Set(['appTopMessage', 'hasCustomContent', 'isCloseable', 'isVisible']),\n EuiAutocompleteComponent: new Set(['autocompletePanel', 'input', 'inputContainerRef', 'templatePortalContent', 'templates']),\n EuiAutocompletePanelComponent: new Set(['virtualScrolling']),\n EuiAvatarBadgeComponent: new Set(['isPositionBottom']),\n EuiAvatarComponent: new Set(['ariaLabel', 'colorPalette', 'e2eAttr', 'hasNoBackground', 'hasShadow', 'isReverse', 'isShapeSquare']),\n EuiAvatarImageComponent: new Set(['imageUrl']),\n EuiBadgeComponent: new Set(['ariaLabel', 'charReplacement', 'colorPalette', 'content', 'e2eAttr', 'euiDottedBadge', 'euiIconBadge', 'maxCharCount']),\n EuiBannerComponent: new Set(['e2eAttr', 'euiInverse', 'euiPositionCenter', 'euiPositionTop', 'imageUrl', 'isVideoBanner']),\n EuiBlockDocumentComponent: new Set(['isBlocked']),\n EuiBreadcrumbItemComponent: new Set(['ariaLabel', 'iconSvgName', 'id', 'label', 'link', 'navigationExtras']),\n EuiButtonComponent: new Set(['e2eAttr', 'euiAvatarButton', 'euiBasicButton', 'euiBlockButton', 'euiCTAButton', 'euiDisabled', 'euiIconButton', 'euiLineWrap', 'hasNoFocusRing', 'id', 'isChecked', 'isCompact']),\n EuiButtonGroupComponent: new Set(['isCheckboxButtons', 'isRadioButtons']),\n EuiCardComponent: new Set(['e2eAttr', 'euiCollapsed', 'euiCollapsible', 'euiHoverable', 'euiNoContentPadding', 'euiNoShadow', 'euiSelected', 'euiUrgent', 'hasLeftExpander', 'isCompact']),\n EuiCardFooterMenuContentComponent: new Set(['tooltipText']),\n EuiCardHeaderComponent: new Set(['collapseLabel', 'expandLabel', 'hasBottomExpander', 'hasFullTitle', 'hasHeaderClickToggle', 'isClickeable', 'isHeaderMultilines']),\n EuiCardHeaderLeftContentComponent: new Set(['isTopAligned']),\n EuiCardMediaComponent: new Set(['imageClickUrl', 'imageClickUrlExternal', 'imageDescription', 'imageHeight', 'imageLegend', 'imageUrl']),\n EuiChipButtonComponent: new Set(['cssClasses', 'e2eAttr', 'euiInternalId', 'id', 'isFilled', 'tooltipMessage']),\n EuiChipComponent: new Set(['chipLabel', 'colorPalette', 'cssClasses', 'data', 'e2eAttr', 'euiInternalId', 'id', 'isChipRemovable', 'isFilled', 'tooltipMessage']),\n EuiChipGroupComponent: new Set(['cssClasses']),\n EuiChipListAppendContentDirective: new Set(['ariaLabel', 'cssClasses']),\n EuiClearableDirective: new Set(['euiClearable']),\n EuiCommentItemComponent: new Set(['authorAvatarUrl', 'authorName', 'comment', 'commentCharLimit', 'createdAt', 'currentAuthorAvatarUrl', 'hasChildren', 'nbSubCommentItems', 'subCommentItems']),\n EuiCommentTextareaComponent: new Set(['currentAuthorAvatarUrl', 'placeholder']),\n EuiCommentThreadComponent: new Set(['currentAuthorAvatarUrl', 'hasTextarea', 'isCollapsable', 'isOpen', 'nbSubCommentItems', 'placeholder', 'subCommentItems', 'textareaPosition']),\n EuiContentCardComponent: new Set(['e2eAttr', 'isBookmarkable', 'isBookmarked', 'isCollapsed', 'isCollapsible', 'isSelectable', 'isSelected']),\n EuiContentCardHeaderEndComponent: new Set(['bookmarkAccessKey']),\n EuiDashboardCardComponent: new Set(['colorPalette', 'e2eAttr', 'hasNoBackgroundAvatar', 'iconLabel', 'iconSvgName', 'iconSvgSize', 'imageUrl', 'isClickeable', 'isFlat', 'isFlatAvatar', 'isHorizontal', 'isStacked', 'label', 'labelMaxLines', 'subLabel', 'subLabelMaxLines', 'url', 'urlExternal', 'urlExternalTarget']),\n EuiDashboardCardContentHeaderIconComponent: new Set(['icon']),\n EuiDateBlockComponent: new Set(['blockDate', 'dateFormat', 'e2eAttr']),\n EuiDateRangeSelectorComponent: new Set(['comparisonEnd', 'comparisonStart', 'e2eAttr', 'endDateDefaultValue', 'firstInputAriaLabel', 'firstInputPlaceholder', 'hasSeconds', 'isClearable', 'isDisabled', 'isReadOnly', 'isResponsive', 'isTimeRange', 'islongDateFormat', 'maxDate', 'minDate', 'secondInputAriaLabel', 'secondInputPlaceholder', 'startDateDefaultValue', 'startDateId', 'startView', 'stepHours', 'stepMinutes', 'stepSeconds', 'togglerIconSvg', 'togglerLabel']),\n EuiDatepickerComponent: new Set(['calendar', 'customHeader', 'customPanelClass', 'dateClass', 'dateOutputFormat', 'datepickerFilter', 'e2eAttr', 'hasNoButton', 'hasSeconds', 'inputAriaLabel', 'inputId', 'inputRef', 'isButtonDisabled', 'isClearable', 'isDatepickerBlock', 'isDatetimepicker', 'isDisabled', 'isInputDisabled', 'isOneInputField', 'isPickerDisabled', 'isReadOnly', 'isShownOnInputClick', 'maxDate', 'minDate', 'placeholder', 'restrictToRegex', 'startView', 'stepHours', 'stepMinutes', 'stepSeconds', 'templatePortalRef', 'togglerIconSvg', 'togglerLabel', 'type', 'value']),\n EuiDialogComponent: new Set(['acceptLabel', 'classList', 'dismissLabel', 'e2eAttr', 'hasAcceptButton', 'hasCloseButton', 'hasClosedOnClickOutside', 'hasClosedOnEscape', 'hasDismissButton', 'hasFooter', 'hasMobileCustomSize', 'hasNoBodyPadding', 'height', 'isDraggable', 'isFullScreen', 'isHandleCloseOnAccept', 'isHandleCloseOnClickOutside', 'isHandleCloseOnClose', 'isHandleCloseOnDismiss', 'isHandleCloseOnEscape', 'isMessageBox', 'templateRefContent', 'templateRefFooter', 'templateRefHeader', 'title', 'verticalPosition', 'width']),\n EuiDialogContainerComponent: new Set(['closeButtonAriaLabel', 'dialogBody']),\n EuiDimmerComponent: new Set(['cssClasses', 'e2eAttr', 'isDimmerActive']),\n EuiDiscussionThreadComponent: new Set(['items', 'subTitleLabel', 'titleLabel', 'tooltip']),\n EuiDiscussionThreadItemComponent: new Set(['author', 'body', 'date', 'id', 'isOdd', 'tooltip', 'typeClass']),\n EuiDropdownComponent: new Set(['e2eAttr', 'euiDisabled', 'euiDropdownItems', 'hasClosedOnClickInside', 'hasTabNavigation', 'height', 'isBlock', 'isDropDownRightAligned', 'isExpandOnHover', 'isLabelUpdatedFromSelectedItem', 'isRightClickEnabled', 'isTriggerToggle', 'position', 'subDropdownPosition', 'tabIndex', 'templatePortalContent', 'triggerRef', 'width']),\n EuiDropdownItemComponent: new Set(['isActive', 'isFocus']),\n EuiDropdownTreeDirective: new Set(['buttonTemplateRef', 'euiTree']),\n EuiEditorComponent: new Set(['customToolbarConfig', 'customToolbarPosition', 'debug', 'e2eAttr', 'formats', 'height', 'id', 'isEnabledOnFocus', 'isMinimalToolbar', 'isReadOnly', 'modules', 'placeholder', 'showCounters', 'tabindex', 'theme']),\n EuiEditorCountersComponent: new Set(['charactersCounter', 'charactersLabel', 'hasCharactersCounter', 'hasWordsCounter', 'isMaxLengthValid', 'wordsCounter', 'wordsLabel']),\n EuiEditorJsonViewComponent: new Set(['content', 'theme']),\n EuiEditorMaxlengthDirective: new Set(['euiEditorMaxlength', 'format', 'isShowMaxlength']),\n EuiFeedbackMessageComponent: new Set(['cssClasses', 'isMuted']),\n EuiFieldsetLabelRightContentTagDirective: new Set(['e2eAttr', 'hasDefaultIcon', 'hasLeftExpander', 'iconClass', 'iconSvgFillColor', 'iconSvgName', 'id', 'isExpandable', 'isExpanded', 'isFirst', 'isLarge', 'label', 'templates']),\n EuiFilePreviewComponent: new Set(['file', 'hasPreview', 'hasPreviewAsIcon', 'hasPreviewAsImage', 'index', 'isFileObject', 'isFilenameDisplayed', 'isFilesizeDisplayed', 'isFiletypeDisplayed', 'isItemsClickable', 'previewAsIconConfig', 'templates', 'uploadedFileTemplate']),\n EuiFileUploadComponent: new Set(['accept', 'e2eAttr', 'fileInputs', 'hasDragArea', 'hasPreview', 'hasPreviewAsIcon', 'hasPreviewAsImage', 'hasProgressBar', 'hasResetButton', 'hasTotalSizeDisplayed', 'isItemsClickable', 'isMultiple', 'maxFiles', 'progress', 'templates']),\n EuiFileUploadProgressComponent: new Set(['progress']),\n EuiFooterComponent: new Set(['euiPrimary']),\n EuiGrowlComponent: new Set(['ariaLive', 'callback', 'closeAllSticky', 'cssClasses', 'e2eAttr', 'life', 'position', 'sticky', 'value']),\n EuiHeaderAppComponent: new Set(['appName', 'appShortName', 'appSubTitle']),\n EuiHeaderAppNameLogoComponent: new Set(['homeUrl', 'logoAltText', 'logoFilename']),\n EuiHeaderComponent: new Set(['rightContent']),\n EuiHeaderLogoComponent: new Set(['homeUrl', 'logoHeight', 'logoUrl', 'logoWidth']),\n EuiHeaderSearchComponent: new Set(['placeholder']),\n EuiHeaderUserProfileComponent: new Set(['avatarUrl', 'hasTabNavigation', 'hasWelcomeLabel', 'impersonateLabel', 'isShowAvatarInitials', 'isShowUserInfos', 'subInfos', 'userProfile', 'welcomeLabel']),\n EuiIconButtonComponent: new Set(['ariaLabel', 'euiDisabled', 'euiRounded', 'fillColor', 'hasFocusHoverBg', 'hasFocusHoverColor', 'hasNoPadding', 'hasOverflowHover', 'icon', 'iconUrl', 'size', 'tabindex']),\n EuiIconButtonExpanderComponent: new Set(['ariaLabel', 'euiDisabled', 'fillColor', 'isDirectionForward', 'isExpanded', 'size']),\n EuiIconColorComponent: new Set(['iconClass']),\n EuiIconInputComponent: new Set(['cssClasses', 'euiIconPositionEnd', 'euiIconPositionStart']),\n EuiIconStateComponent: new Set(['ariaLabel', 'cssClasses', 'size']),\n EuiIconSvgComponent: new Set(['euiEnd', 'euiStart', 'fillColor', 'focusable', 'iconUrl', 'isInputIcon', 'isLoading', 'style', 'transform']),\n EuiIconToggleComponent: new Set(['ariaLabel', 'e2eAttr', 'iconSvgFillColorOff', 'iconSvgFillColorOn', 'iconSvgNameOff', 'iconSvgNameOn', 'iconSvgSize', 'id', 'isChecked', 'isReadOnly', 'keyboardAccessKey', 'tabindex']),\n EuiInputButtonComponent: new Set(['cssClasses', 'euiButtonPositionEnd', 'euiButtonPositionStart']),\n EuiInputCheckboxComponent: new Set(['isInvalid']),\n EuiInputGroupAddOnComponent: new Set(['e2eAttr']),\n EuiInputGroupAddOnItemComponent: new Set(['e2eAttr']),\n EuiInputGroupComponent: new Set(['e2eAttr']),\n EuiInputRadioComponent: new Set(['isInvalid']),\n EuiLanguageSelectorComponent: new Set(['cssClasses', 'euiPrimary', 'hasLanguageSelection', 'isShowDropDown', 'isShowModal', 'isToolbarSelector']),\n EuiListItemComponent: new Set(['cssClasses', 'e2eAttr', 'isActive']),\n EuiLoadingDirective: new Set(['euiLoading']),\n EuiMenuComponent: new Set(['expandAllItems', 'externalLinkLabel', 'filterValue', 'fragmentId', 'hasBoldRootLevel', 'hasCollapsedInitials', 'hasFilter', 'hasIcons', 'hasIconsLabels', 'hasScrollToItem', 'hasTooltip', 'hasTooltipOnExpanded', 'hasTooltipOnlyOnExpanded', 'isCollapsed', 'isFlat', 'items', 'menubar', 'searchFilterLabel']),\n EuiMenuItemComponent: new Set(['hasBoldRootLevel', 'hasCollapsedInitials', 'hasExpandIcon', 'hasIcon', 'hasIconLabel', 'hasTooltip', 'hasTooltipOnExpanded', 'hasTooltipOnlyOnExpanded', 'isCollapsed', 'item', 'parent']),\n EuiMessageBoxComponent: new Set(['acceptLabel', 'dismissLabel', 'e2eAttr', 'hasAcceptButton', 'hasDismissButton', 'hasNoBodyPadding', 'height', 'isDraggable', 'isHandleCloseOnAccept', 'isHandleCloseOnClose', 'isHandleCloseOnDismiss', 'templateRefContent', 'templateRefFooter', 'title', 'width']),\n EuiNavbarItemComponent: new Set(['id', 'isActive', 'label']),\n EuiNgSelectOptionDirective: new Set(['label', 'selected']),\n EuiNotificationItemComponent: new Set(['dateFormat', 'isShowMarkAsRead', 'item', 'markAsReadLabel']),\n EuiNotificationItemV2Component: new Set(['dateFormat', 'isShowMarkAsRead', 'item', 'markAsReadLabel']),\n EuiNotificationsComponent: new Set(['count', 'customUnreadCount', 'dateFormat', 'headerHideLabel', 'headerTitleLabel', 'isHidePanelOnViewAllAction', 'isShowHideButton', 'isShowMarkAllAsReadButton', 'isShowMarkAsRead', 'isShowRefreshButton', 'isShowSettingsButton', 'isShowViewAllAction', 'items', 'markAllAsReadLabel', 'markAsReadLabel', 'markAsUnReadLabel', 'nbUnreadCount', 'noNotificationFoundLabel', 'noNotificationFoundLink', 'refreshLabel', 'settingsLabel', 'totalLabel', 'unreadLabel', 'viewAllNotificationsLabel']),\n EuiNotificationsV2Component: new Set(['count', 'dateFormat', 'headerHideLabel', 'headerTitleLabel', 'headerUnreadCountLabel', 'headerUnreadSinceLastCheckCountLabel', 'isHidePanelOnViewAllAction', 'isShowMarkAllAsReadButton', 'isShowMarkAsRead', 'isShowRefreshButton', 'isShowSettingsButton', 'isShowViewAllAction', 'items', 'markAllAsReadLabel', 'markAsReadLabel', 'markAsUnReadLabel', 'noNotificationFoundLabel', 'noNotificationFoundLink', 'refreshLabel', 'settingsLabel', 'totalLabel', 'unreadCount', 'unreadLabel', 'unreadSinceLastCheckCount', 'viewAllNotificationsLabel']),\n EuiOverlayComponent: new Set(['ariaLabel', 'euiHighlighted', 'fixedWidth', 'hasClosedOnClickOutside', 'isActive', 'position', 'width']),\n EuiOverlayHeaderTitleComponent: new Set(['headerTitleCount', 'headerTitleHideLabel', 'headerTitleLabel']),\n EuiPageColumnComponent: new Set(['autocloseContainerWidth', 'collapseAriaLabel', 'expandAriaLabel', 'hasHeaderBodyShrinkable', 'hasSidebarMenu', 'hasSubColumns', 'hasSubPanels', 'isAutocloseOnContainerResize', 'isAutocloseOnMobile', 'isCollapsed', 'isCollapsedHidden', 'isCollapsedWithIcons', 'isCollapsible', 'isHighlighted', 'isRightCollapsible', 'label', 'subLabel']),\n EuiPageColumnsComponent: new Set(['hasPreventMobileRendering']),\n EuiPageComponent: new Set(['columns']),\n EuiPageFooterComponent: new Set(['e2eAttr']),\n EuiPageHeaderComponent: new Set(['collapsedLabel', 'expandedLabel', 'isCollapsed', 'isCollapsible', 'isHeaderMultilines', 'label', 'labelTooltip', 'subLabel', 'subLabelTooltip']),\n EuiPageHeroHeaderComponent: new Set(['label', 'subLabel']),\n EuiPagePanelComponent: new Set(['collapseAriaLabel', 'collapsedLabel', 'expandAriaLabel', 'isCollapsed', 'isCollapsible', 'isRightCollapsible']),\n EuiPageTopContentComponent: new Set(['e2eAttr']),\n EuiPaginatorComponent: new Set(['e2eAttr', 'hasDynamicLength', 'hasPageNumberNavigation', 'hasPageNumberNavigationCompact', 'hasPageSize', 'isBasicMode', 'isHidden', 'length', 'nbPageNumberNavigation', 'page', 'pageSize', 'pageSizeOptions']),\n EuiPopoverComponent: new Set(['hasBackDrop', 'hasCloseButton', 'hasNoContentPadding', 'isDismissable', 'position', 'templatePortalContent', 'title', 'width']),\n EuiProgressBarComponent: new Set(['e2eAttr', 'hasStatusIcon', 'isIndeterminate', 'label', 'progress']),\n EuiProgressCircleComponent: new Set(['ariaLabel', 'labelValueEl', 'tabindex']),\n EuiRatingComponent: new Set(['ariaLabel', 'cssClasses', 'euiDisabled', 'numberOfStars', 'rating', 'ratingButtons']),\n EuiResizableComponent: new Set(['cssClasses']),\n EuiScrollHandlerDirective: new Set(['euiScrollHandler', 'euiScrollHandlerElement', 'toggleActiveHeight', 'toggleClass']),\n EuiSectionHeaderComponent: new Set(['e2eAttr', 'id', 'isExpandable', 'isExpanded', 'isFirst']),\n EuiSectionHeaderIconComponent: new Set(['icon']),\n EuiSelectComponent: new Set(['ariaLabel', 'isInvalid', 'placeholder', 'readonly']),\n EuiSidebarToggleComponent: new Set(['e2eAttr', 'iconSvgFillColor']),\n EuiSkeletonComponent: new Set(['cssClasses']),\n EuiSlideToggleComponent: new Set(['ariaLabel', 'cssClasses', 'disabled', 'iconSvgFillColorOff', 'iconSvgFillColorOn', 'iconSvgNameOff', 'iconSvgNameOn', 'id', 'isChecked']),\n EuiSliderComponent: new Set(['cssClasses', 'endHandler', 'endHandlerContainer', 'endInputRange', 'formattedEndValue', 'formattedStartValue', 'handlers', 'inputRanges', 'sliderContainer', 'startHandler', 'startHandlerContainer', 'startInputRange', 'trackActive']),\n EuiSmoothScrollToDirective: new Set(['callbackAfter', 'callbackBefore', 'containerId', 'duration', 'easing', 'middleAlign', 'offset', 'scrollIf', 'scrollOnClick', 'scrollTo']),\n EuiStatusBadgeComponent: new Set(['ariaLabel', 'colorPalette', 'cssClasses', 'e2eAttr', 'euiDottedBadge']),\n EuiTabBodyComponent: new Set(['hasNoContentPadding', 'templateRef']),\n EuiTabComponent: new Set(['e2eAttr', 'euiVariant', 'id', 'isClosable', 'isDisabled', 'isHandleActivateTab', 'isHandleCloseOnClose', 'isVisible', 'tooltip', 'url']),\n EuiTabHeaderComponent: new Set(['templateRef']),\n EuiTableComponent: new Set(['data', 'filter', 'hasStickyCols', 'hasStickyFooter', 'hasStickyHeader', 'isAsync', 'isColsOrderable', 'isLoading', 'isSelectOnlyVisibleRows', 'isTableBordered', 'isTableCompact', 'isTableFixedLayout', 'isTableResponsive', 'isVirtualScroll', 'isVirtualScrollCache', 'itemSize', 'paginator', 'preselectedRows', 'propId', 'tbodyRef', 'templates', 'tfootRef', 'theadRef', 'virtualScrollAsyncItemsLength', 'virtualScrollNbRows']),\n EuiTableFilterComponent: new Set(['filterInput', 'placeholder']),\n EuiTableSelectableHeaderComponent: new Set(['isHeaderSelectable']),\n EuiTableSelectableRowComponent: new Set(['isChecked', 'isDataSelectable', 'isKeyboardSelectable', 'isSingleSelectable']),\n EuiTableSortableColComponent: new Set(['defaultOrder', 'euiDropdown', 'isMultiSortable', 'sortDisabled']),\n EuiTabsComponent: new Set(['activeTabIndex', 'ariaLabel', 'e2eAttr', 'euiTabListItems', 'euiTabsHeaders', 'euiTabsHeadersContainer', 'euiTabsRightContent', 'isFlat', 'isMainNavigation']),\n EuiTemplateDirective: new Set(['name', 'type']),\n EuiTimelineComponent: new Set(['cssClasses', 'e2eAttr', 'isLeftAligned']),\n EuiTimelineItemComponent: new Set(['cssClasses', 'date', 'dateStyleClass', 'e2eAttr', 'isGroup', 'isLeftAligned', 'label', 'subLabel', 'time', 'timeStyleClass']),\n EuiTimepickerComponent: new Set(['e2eAttr', 'hasSeconds', 'iconSize', 'inputId', 'isDisabled', 'isOneInputField', 'isreadOnly', 'placeholder', 'stepHours', 'stepMinutes', 'stepSeconds', 'timeMask']),\n EuiToggleGroupComponent: new Set(['isFluid', 'isMultiple']),\n EuiToggleGroupItemComponent: new Set(['id', 'isChecked']),\n EuiToolbarAppComponent: new Set(['appName', 'appSubTitle']),\n EuiToolbarItemsComponent: new Set(['euiEnd', 'euiPositionRight']),\n EuiToolbarLogoComponent: new Set(['homeUrl', 'logoAltText', 'logoHeight', 'logoUrl', 'logoWidth']),\n EuiToolbarMegaMenuComponent: new Set(['ariaLabel', 'id', 'items', 'menuItemLinks', 'subMenuComponent', 'templatePortalContent']),\n EuiToolbarMegaMenuContainerComponent: new Set(['activeMenu', 'ariaLabel', 'megaMenuItemsGrouped', 'submenuItemLinks']),\n EuiToolbarNavbarItemComponent: new Set(['id', 'isActive', 'label']),\n EuiToolbarSearchComponent: new Set(['hasExpandAnimation', 'hasSearchButton', 'isAutocomplete', 'isInputText', 'panelWidth', 'placeholderLabel', 'searchResults', 'templates']),\n EuiToolbarSelectorComponent: new Set(['euiDisabled', 'iconSvgName', 'label']),\n EuiTooltipContainerComponent: new Set(['cssClasses']),\n EuiTooltipDirective: new Set(['contentAlignment', 'e2eAttr', 'euiTooltipAccent', 'euiTooltipDanger', 'euiTooltipInfo', 'euiTooltipPrimary', 'euiTooltipSecondary', 'euiTooltipSuccess', 'euiTooltipWarning', 'hideDelay', 'isDisabled', 'position', 'showDelay']),\n EuiTreeComponent: new Set(['autoTranslate', 'cdkScrollableRef', 'collapsedSvgIconClass', 'customNodeSelectFn', 'e2eAttr', 'expandedSvgIconClass', 'highlightPath', 'isClickTogglingNode', 'isMultiselect', 'isRecursiveParentSelection', 'isRecursiveSelection', 'isSingleSelect', 'nodeContentMetadataTemplateRef', 'nodeTemplateRef', 'rightContextMenuTemplateRef', 'showLines', 'showUnderlinedLinks', 'treeComponentInstance', 'virtualScrollPageSize', 'virtualScrollThreshold']),\n EuiTreeFormControlDirective: new Set(['euiTreeControlModelMapper', 'euiTreeControlValueSetter']),\n EuiTreeListComponent: new Set(['ariaLabel', 'collapseAllLabel', 'e2eAttr', 'expandAllLabel', 'filterFunction', 'filterLabel', 'hasItemsUrl', 'isExpanded', 'isShowToolbar', 'isShowToolbarToggle', 'tabindex', 'toolbarFilterValue']),\n EuiTreeListItemComponent: new Set(['focusable', 'isActive', 'isAlwaysExpanded', 'isDisplaySubLinksOnHover', 'isNavigateOnlyOnLabelClick', 'label', 'linkUrl', 'subLinks', 'url']),\n EuiTreeListToolbarComponent: new Set(['collapseAllLabel', 'e2eAttr', 'expandAllLabel', 'filterLabel', 'hasLabels', 'isFilterVisible', 'isToggleVisible', 'isVisible']),\n EuiUserProfileCardComponent: new Set(['avatarUrl', 'impersonateLabel', 'isShowAvatar', 'isShowAvatarInitials', 'isShowClose', 'isShowUserInfos', 'profileCardHideLabel', 'reverseNameOrder', 'showDetailsLabel']),\n EuiUserProfileComponent: new Set(['avatarUrl', 'dropContentWidth', 'dropdown', 'euiStatusDanger', 'euiStatusSecondary', 'euiStatusSuccess', 'hasMenu', 'hasTabNavigation', 'hasToggle', 'hasWelcomeLabel', 'impersonateLabel', 'isHeaderUserProfile', 'isMobileOnly', 'isReverse', 'isShowAvatarInitials', 'isShowUserInfos', 'isToolbarUserProfile', 'reverseNameOrder', 'statusVariant', 'subInfos', 'welcomeLabel']),\n EuiWizardComponent: new Set(['activeStepIndex', 'canBeFocused', 'childrenSteps', 'e2eAttr', 'isCustomContent', 'isNavigationAllowed', 'isShowStepTitle', 'steps', 'tabindex']),\n InputDirective: new Set(['disabled', 'euiDanger', 'euiDisabled', 'placeholder', 'readonly']),\n QuillEditorComponent: new Set(['bounds', 'customOptions', 'customToolbarPosition', 'debug', 'format', 'formats', 'hasImageFeature', 'id', 'maxLength', 'minLength', 'modules', 'placeholder', 'preserveWhitespace', 'readOnly', 'required', 'sanitize', 'scrollingContainer', 'strict', 'styles', 'theme', 'trackChanges', 'valueGetter', 'valueSetter']),\n}",
22714
+ "rawdescription": "Auto-generated map of EUI component classes whose",
22715
+ "description": "<p>Auto-generated map of EUI component classes whose</p>\n"
22716
+ },
22537
22717
  {
22538
22718
  "name": "EUI_TIMEZONES",
22539
22719
  "ctype": "miscellaneous",
@@ -24696,6 +24876,51 @@
24696
24876
  }
24697
24877
  ]
24698
24878
  },
24879
+ {
24880
+ "name": "applyEdits",
24881
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
24882
+ "ctype": "miscellaneous",
24883
+ "subtype": "function",
24884
+ "coverageIgnore": false,
24885
+ "deprecated": false,
24886
+ "deprecationMessage": "",
24887
+ "rawdescription": "",
24888
+ "description": "",
24889
+ "displayName": "applyEdits",
24890
+ "args": [
24891
+ {
24892
+ "name": "source",
24893
+ "type": "string",
24894
+ "deprecated": false,
24895
+ "deprecationMessage": ""
24896
+ },
24897
+ {
24898
+ "name": "edits",
24899
+ "deprecated": false,
24900
+ "deprecationMessage": ""
24901
+ }
24902
+ ],
24903
+ "returnType": "string",
24904
+ "jsdoctags": [
24905
+ {
24906
+ "name": "source",
24907
+ "type": "string",
24908
+ "deprecated": false,
24909
+ "deprecationMessage": "",
24910
+ "tagName": {
24911
+ "text": "param"
24912
+ }
24913
+ },
24914
+ {
24915
+ "name": "edits",
24916
+ "deprecated": false,
24917
+ "deprecationMessage": "",
24918
+ "tagName": {
24919
+ "text": "param"
24920
+ }
24921
+ }
24922
+ ]
24923
+ },
24699
24924
  {
24700
24925
  "name": "applyReplacements",
24701
24926
  "file": "packages/core/schematics/migrate-to-standalone/index.ts",
@@ -24958,6 +25183,81 @@
24958
25183
  "args": [],
24959
25184
  "returnType": "SelectorEntry[]"
24960
25185
  },
25186
+ {
25187
+ "name": "buildTemplateRefMap",
25188
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
25189
+ "ctype": "miscellaneous",
25190
+ "subtype": "function",
25191
+ "coverageIgnore": false,
25192
+ "deprecated": false,
25193
+ "deprecationMessage": "",
25194
+ "rawdescription": "Builds a map of template reference variable names (#ref) to EUI class names.\n\nParses the component's template (inline or external) and finds elements like:\n <eui-alert #myAlert> → myAlert → EuiAlertComponent\n <input euiAutocomplete #ac> → ac → EuiAutocompleteComponent\n\nReturns Map<refName, euiClassName>.",
25195
+ "description": "<p>Builds a map of template reference variable names (#ref) to EUI class names.</p>\n<p>Parses the component&#39;s template (inline or external) and finds elements like:\n &lt;eui-alert #myAlert&gt; → myAlert → EuiAlertComponent\n &lt;input euiAutocomplete #ac&gt; → ac → EuiAutocompleteComponent</p>\n<p>Returns Map&lt;refName, euiClassName&gt;.</p>\n",
25196
+ "displayName": "buildTemplateRefMap",
25197
+ "args": [
25198
+ {
25199
+ "name": "sourceFile",
25200
+ "deprecated": false,
25201
+ "deprecationMessage": ""
25202
+ },
25203
+ {
25204
+ "name": "source",
25205
+ "type": "string",
25206
+ "deprecated": false,
25207
+ "deprecationMessage": ""
25208
+ },
25209
+ {
25210
+ "name": "filePath",
25211
+ "type": "string",
25212
+ "deprecated": false,
25213
+ "deprecationMessage": ""
25214
+ },
25215
+ {
25216
+ "name": "tree",
25217
+ "type": "Tree",
25218
+ "deprecated": false,
25219
+ "deprecationMessage": ""
25220
+ }
25221
+ ],
25222
+ "returnType": "Map<string, string>",
25223
+ "jsdoctags": [
25224
+ {
25225
+ "name": "sourceFile",
25226
+ "deprecated": false,
25227
+ "deprecationMessage": "",
25228
+ "tagName": {
25229
+ "text": "param"
25230
+ }
25231
+ },
25232
+ {
25233
+ "name": "source",
25234
+ "type": "string",
25235
+ "deprecated": false,
25236
+ "deprecationMessage": "",
25237
+ "tagName": {
25238
+ "text": "param"
25239
+ }
25240
+ },
25241
+ {
25242
+ "name": "filePath",
25243
+ "type": "string",
25244
+ "deprecated": false,
25245
+ "deprecationMessage": "",
25246
+ "tagName": {
25247
+ "text": "param"
25248
+ }
25249
+ },
25250
+ {
25251
+ "name": "tree",
25252
+ "type": "Tree",
25253
+ "deprecated": false,
25254
+ "deprecationMessage": "",
25255
+ "tagName": {
25256
+ "text": "param"
25257
+ }
25258
+ }
25259
+ ]
25260
+ },
24961
25261
  {
24962
25262
  "name": "buildTruncatePipeEdit",
24963
25263
  "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
@@ -25201,20 +25501,19 @@
25201
25501
  ]
25202
25502
  },
25203
25503
  {
25204
- "name": "collectInputRemovals",
25205
- "file": "packages/core/schematics/migrate-eui-table/index.ts",
25504
+ "name": "collectEuiReferences",
25505
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
25206
25506
  "ctype": "miscellaneous",
25207
25507
  "subtype": "function",
25208
25508
  "coverageIgnore": false,
25209
25509
  "deprecated": false,
25210
25510
  "deprecationMessage": "",
25211
- "rawdescription": "",
25212
- "description": "",
25213
- "displayName": "collectInputRemovals",
25511
+ "rawdescription": "Scans the source file for class properties or variables typed as EUI component classes.\nReturns a map: localName → Set of signal property names.\n\nHandles:",
25512
+ "description": "<p>Scans the source file for class properties or variables typed as EUI component classes.\nReturns a map: localName → Set of signal property names.</p>\n<p>Handles:</p>\n",
25513
+ "displayName": "collectEuiReferences",
25214
25514
  "args": [
25215
25515
  {
25216
- "name": "element",
25217
- "type": "TmplAstElement",
25516
+ "name": "sourceFile",
25218
25517
  "deprecated": false,
25219
25518
  "deprecationMessage": ""
25220
25519
  },
@@ -25225,28 +25524,16 @@
25225
25524
  "deprecationMessage": ""
25226
25525
  },
25227
25526
  {
25228
- "name": "edits",
25229
- "deprecated": false,
25230
- "deprecationMessage": ""
25231
- },
25232
- {
25233
- "name": "filePath",
25234
- "type": "string",
25235
- "deprecated": false,
25236
- "deprecationMessage": ""
25237
- },
25238
- {
25239
- "name": "context",
25240
- "type": "SchematicContext",
25527
+ "name": "templateRefMap",
25528
+ "type": "Map",
25241
25529
  "deprecated": false,
25242
25530
  "deprecationMessage": ""
25243
25531
  }
25244
25532
  ],
25245
- "returnType": "void",
25533
+ "returnType": "Map<string, ReadonlySet<string>>",
25246
25534
  "jsdoctags": [
25247
25535
  {
25248
- "name": "element",
25249
- "type": "TmplAstElement",
25536
+ "name": "sourceFile",
25250
25537
  "deprecated": false,
25251
25538
  "deprecationMessage": "",
25252
25539
  "tagName": {
@@ -25263,25 +25550,8 @@
25263
25550
  }
25264
25551
  },
25265
25552
  {
25266
- "name": "edits",
25267
- "deprecated": false,
25268
- "deprecationMessage": "",
25269
- "tagName": {
25270
- "text": "param"
25271
- }
25272
- },
25273
- {
25274
- "name": "filePath",
25275
- "type": "string",
25276
- "deprecated": false,
25277
- "deprecationMessage": "",
25278
- "tagName": {
25279
- "text": "param"
25280
- }
25281
- },
25282
- {
25283
- "name": "context",
25284
- "type": "SchematicContext",
25553
+ "name": "templateRefMap",
25554
+ "type": "Map",
25285
25555
  "deprecated": false,
25286
25556
  "deprecationMessage": "",
25287
25557
  "tagName": {
@@ -25291,7 +25561,7 @@
25291
25561
  ]
25292
25562
  },
25293
25563
  {
25294
- "name": "collectOutputChanges",
25564
+ "name": "collectInputRemovals",
25295
25565
  "file": "packages/core/schematics/migrate-eui-table/index.ts",
25296
25566
  "ctype": "miscellaneous",
25297
25567
  "subtype": "function",
@@ -25300,7 +25570,7 @@
25300
25570
  "deprecationMessage": "",
25301
25571
  "rawdescription": "",
25302
25572
  "description": "",
25303
- "displayName": "collectOutputChanges",
25573
+ "displayName": "collectInputRemovals",
25304
25574
  "args": [
25305
25575
  {
25306
25576
  "name": "element",
@@ -25381,8 +25651,8 @@
25381
25651
  ]
25382
25652
  },
25383
25653
  {
25384
- "name": "collectOutputRemovals",
25385
- "file": "packages/core/schematics/migrate-eui-toolbar-menu/index.ts",
25654
+ "name": "collectOutputChanges",
25655
+ "file": "packages/core/schematics/migrate-eui-table/index.ts",
25386
25656
  "ctype": "miscellaneous",
25387
25657
  "subtype": "function",
25388
25658
  "coverageIgnore": false,
@@ -25390,7 +25660,7 @@
25390
25660
  "deprecationMessage": "",
25391
25661
  "rawdescription": "",
25392
25662
  "description": "",
25393
- "displayName": "collectOutputRemovals",
25663
+ "displayName": "collectOutputChanges",
25394
25664
  "args": [
25395
25665
  {
25396
25666
  "name": "element",
@@ -25471,8 +25741,8 @@
25471
25741
  ]
25472
25742
  },
25473
25743
  {
25474
- "name": "collectPaginatorMigration",
25475
- "file": "packages/core/schematics/migrate-eui-table/index.ts",
25744
+ "name": "collectOutputRemovals",
25745
+ "file": "packages/core/schematics/migrate-eui-toolbar-menu/index.ts",
25476
25746
  "ctype": "miscellaneous",
25477
25747
  "subtype": "function",
25478
25748
  "coverageIgnore": false,
@@ -25480,7 +25750,7 @@
25480
25750
  "deprecationMessage": "",
25481
25751
  "rawdescription": "",
25482
25752
  "description": "",
25483
- "displayName": "collectPaginatorMigration",
25753
+ "displayName": "collectOutputRemovals",
25484
25754
  "args": [
25485
25755
  {
25486
25756
  "name": "element",
@@ -25498,63 +25768,16 @@
25498
25768
  "name": "edits",
25499
25769
  "deprecated": false,
25500
25770
  "deprecationMessage": ""
25501
- }
25502
- ],
25503
- "returnType": "boolean",
25504
- "jsdoctags": [
25505
- {
25506
- "name": "element",
25507
- "type": "TmplAstElement",
25508
- "deprecated": false,
25509
- "deprecationMessage": "",
25510
- "tagName": {
25511
- "text": "param"
25512
- }
25513
- },
25514
- {
25515
- "name": "source",
25516
- "type": "string",
25517
- "deprecated": false,
25518
- "deprecationMessage": "",
25519
- "tagName": {
25520
- "text": "param"
25521
- }
25522
25771
  },
25523
25772
  {
25524
- "name": "edits",
25525
- "deprecated": false,
25526
- "deprecationMessage": "",
25527
- "tagName": {
25528
- "text": "param"
25529
- }
25530
- }
25531
- ]
25532
- },
25533
- {
25534
- "name": "collectPipeRenames",
25535
- "file": "packages/core/schematics/migrate-eui-table/index.ts",
25536
- "ctype": "miscellaneous",
25537
- "subtype": "function",
25538
- "coverageIgnore": false,
25539
- "deprecated": false,
25540
- "deprecationMessage": "",
25541
- "rawdescription": "",
25542
- "description": "",
25543
- "displayName": "collectPipeRenames",
25544
- "args": [
25545
- {
25546
- "name": "nodes",
25547
- "deprecated": false,
25548
- "deprecationMessage": ""
25549
- },
25550
- {
25551
- "name": "source",
25773
+ "name": "filePath",
25552
25774
  "type": "string",
25553
25775
  "deprecated": false,
25554
25776
  "deprecationMessage": ""
25555
25777
  },
25556
25778
  {
25557
- "name": "edits",
25779
+ "name": "context",
25780
+ "type": "SchematicContext",
25558
25781
  "deprecated": false,
25559
25782
  "deprecationMessage": ""
25560
25783
  }
@@ -25562,7 +25785,144 @@
25562
25785
  "returnType": "void",
25563
25786
  "jsdoctags": [
25564
25787
  {
25565
- "name": "nodes",
25788
+ "name": "element",
25789
+ "type": "TmplAstElement",
25790
+ "deprecated": false,
25791
+ "deprecationMessage": "",
25792
+ "tagName": {
25793
+ "text": "param"
25794
+ }
25795
+ },
25796
+ {
25797
+ "name": "source",
25798
+ "type": "string",
25799
+ "deprecated": false,
25800
+ "deprecationMessage": "",
25801
+ "tagName": {
25802
+ "text": "param"
25803
+ }
25804
+ },
25805
+ {
25806
+ "name": "edits",
25807
+ "deprecated": false,
25808
+ "deprecationMessage": "",
25809
+ "tagName": {
25810
+ "text": "param"
25811
+ }
25812
+ },
25813
+ {
25814
+ "name": "filePath",
25815
+ "type": "string",
25816
+ "deprecated": false,
25817
+ "deprecationMessage": "",
25818
+ "tagName": {
25819
+ "text": "param"
25820
+ }
25821
+ },
25822
+ {
25823
+ "name": "context",
25824
+ "type": "SchematicContext",
25825
+ "deprecated": false,
25826
+ "deprecationMessage": "",
25827
+ "tagName": {
25828
+ "text": "param"
25829
+ }
25830
+ }
25831
+ ]
25832
+ },
25833
+ {
25834
+ "name": "collectPaginatorMigration",
25835
+ "file": "packages/core/schematics/migrate-eui-table/index.ts",
25836
+ "ctype": "miscellaneous",
25837
+ "subtype": "function",
25838
+ "coverageIgnore": false,
25839
+ "deprecated": false,
25840
+ "deprecationMessage": "",
25841
+ "rawdescription": "",
25842
+ "description": "",
25843
+ "displayName": "collectPaginatorMigration",
25844
+ "args": [
25845
+ {
25846
+ "name": "element",
25847
+ "type": "TmplAstElement",
25848
+ "deprecated": false,
25849
+ "deprecationMessage": ""
25850
+ },
25851
+ {
25852
+ "name": "source",
25853
+ "type": "string",
25854
+ "deprecated": false,
25855
+ "deprecationMessage": ""
25856
+ },
25857
+ {
25858
+ "name": "edits",
25859
+ "deprecated": false,
25860
+ "deprecationMessage": ""
25861
+ }
25862
+ ],
25863
+ "returnType": "boolean",
25864
+ "jsdoctags": [
25865
+ {
25866
+ "name": "element",
25867
+ "type": "TmplAstElement",
25868
+ "deprecated": false,
25869
+ "deprecationMessage": "",
25870
+ "tagName": {
25871
+ "text": "param"
25872
+ }
25873
+ },
25874
+ {
25875
+ "name": "source",
25876
+ "type": "string",
25877
+ "deprecated": false,
25878
+ "deprecationMessage": "",
25879
+ "tagName": {
25880
+ "text": "param"
25881
+ }
25882
+ },
25883
+ {
25884
+ "name": "edits",
25885
+ "deprecated": false,
25886
+ "deprecationMessage": "",
25887
+ "tagName": {
25888
+ "text": "param"
25889
+ }
25890
+ }
25891
+ ]
25892
+ },
25893
+ {
25894
+ "name": "collectPipeRenames",
25895
+ "file": "packages/core/schematics/migrate-eui-table/index.ts",
25896
+ "ctype": "miscellaneous",
25897
+ "subtype": "function",
25898
+ "coverageIgnore": false,
25899
+ "deprecated": false,
25900
+ "deprecationMessage": "",
25901
+ "rawdescription": "",
25902
+ "description": "",
25903
+ "displayName": "collectPipeRenames",
25904
+ "args": [
25905
+ {
25906
+ "name": "nodes",
25907
+ "deprecated": false,
25908
+ "deprecationMessage": ""
25909
+ },
25910
+ {
25911
+ "name": "source",
25912
+ "type": "string",
25913
+ "deprecated": false,
25914
+ "deprecationMessage": ""
25915
+ },
25916
+ {
25917
+ "name": "edits",
25918
+ "deprecated": false,
25919
+ "deprecationMessage": ""
25920
+ }
25921
+ ],
25922
+ "returnType": "void",
25923
+ "jsdoctags": [
25924
+ {
25925
+ "name": "nodes",
25566
25926
  "deprecated": false,
25567
25927
  "deprecationMessage": "",
25568
25928
  "tagName": {
@@ -26293,6 +26653,51 @@
26293
26653
  }
26294
26654
  ]
26295
26655
  },
26656
+ {
26657
+ "name": "collectTemplateRefs",
26658
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
26659
+ "ctype": "miscellaneous",
26660
+ "subtype": "function",
26661
+ "coverageIgnore": false,
26662
+ "deprecated": false,
26663
+ "deprecationMessage": "",
26664
+ "rawdescription": "Recursively walks template AST nodes, collecting #refName → EUI class name mappings.\n\nFor each element with a template reference (#ref), we try to resolve its EUI class:\n1. Match element tag name against EUI_SELECTOR_TO_CLASS (e.g. 'eui-alert' → EuiAlertComponent)\n2. Match element attributes against attribute selectors (e.g. [euiAutocomplete] → EuiAutocompleteComponent)",
26665
+ "description": "<p>Recursively walks template AST nodes, collecting #refName → EUI class name mappings.</p>\n<p>For each element with a template reference (#ref), we try to resolve its EUI class:</p>\n<ol>\n<li>Match element tag name against EUI_SELECTOR_TO_CLASS (e.g. &#39;eui-alert&#39; → EuiAlertComponent)</li>\n<li>Match element attributes against attribute selectors (e.g. [euiAutocomplete] → EuiAutocompleteComponent)</li>\n</ol>\n",
26666
+ "displayName": "collectTemplateRefs",
26667
+ "args": [
26668
+ {
26669
+ "name": "nodes",
26670
+ "deprecated": false,
26671
+ "deprecationMessage": ""
26672
+ },
26673
+ {
26674
+ "name": "refMap",
26675
+ "type": "Map",
26676
+ "deprecated": false,
26677
+ "deprecationMessage": ""
26678
+ }
26679
+ ],
26680
+ "returnType": "void",
26681
+ "jsdoctags": [
26682
+ {
26683
+ "name": "nodes",
26684
+ "deprecated": false,
26685
+ "deprecationMessage": "",
26686
+ "tagName": {
26687
+ "text": "param"
26688
+ }
26689
+ },
26690
+ {
26691
+ "name": "refMap",
26692
+ "type": "Map",
26693
+ "deprecated": false,
26694
+ "deprecationMessage": "",
26695
+ "tagName": {
26696
+ "text": "param"
26697
+ }
26698
+ }
26699
+ ]
26700
+ },
26296
26701
  {
26297
26702
  "name": "ConsoleHttpErrorCallbackFn",
26298
26703
  "file": "packages/core/src/lib/services/errors/http-error-handler-callback-functions.ts",
@@ -26691,6 +27096,36 @@
26691
27096
  }
26692
27097
  ]
26693
27098
  },
27099
+ {
27100
+ "name": "deduplicateEdits",
27101
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
27102
+ "ctype": "miscellaneous",
27103
+ "subtype": "function",
27104
+ "coverageIgnore": false,
27105
+ "deprecated": false,
27106
+ "deprecationMessage": "",
27107
+ "rawdescription": "",
27108
+ "description": "",
27109
+ "displayName": "deduplicateEdits",
27110
+ "args": [
27111
+ {
27112
+ "name": "edits",
27113
+ "deprecated": false,
27114
+ "deprecationMessage": ""
27115
+ }
27116
+ ],
27117
+ "returnType": "Edit[]",
27118
+ "jsdoctags": [
27119
+ {
27120
+ "name": "edits",
27121
+ "deprecated": false,
27122
+ "deprecationMessage": "",
27123
+ "tagName": {
27124
+ "text": "param"
27125
+ }
27126
+ }
27127
+ ]
27128
+ },
26694
27129
  {
26695
27130
  "name": "defaultMemoize",
26696
27131
  "file": "packages/core/src/lib/services/store/ngrx_kit.ts",
@@ -27315,6 +27750,51 @@
27315
27750
  }
27316
27751
  ]
27317
27752
  },
27753
+ {
27754
+ "name": "findComponentMetadata",
27755
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
27756
+ "ctype": "miscellaneous",
27757
+ "subtype": "function",
27758
+ "coverageIgnore": false,
27759
+ "deprecated": false,
27760
+ "deprecationMessage": "",
27761
+ "rawdescription": "Extracts",
27762
+ "description": "<p>Extracts</p>\n",
27763
+ "displayName": "findComponentMetadata",
27764
+ "args": [
27765
+ {
27766
+ "name": "sourceFile",
27767
+ "deprecated": false,
27768
+ "deprecationMessage": ""
27769
+ },
27770
+ {
27771
+ "name": "source",
27772
+ "type": "string",
27773
+ "deprecated": false,
27774
+ "deprecationMessage": ""
27775
+ }
27776
+ ],
27777
+ "returnType": "literal type | null",
27778
+ "jsdoctags": [
27779
+ {
27780
+ "name": "sourceFile",
27781
+ "deprecated": false,
27782
+ "deprecationMessage": "",
27783
+ "tagName": {
27784
+ "text": "param"
27785
+ }
27786
+ },
27787
+ {
27788
+ "name": "source",
27789
+ "type": "string",
27790
+ "deprecated": false,
27791
+ "deprecationMessage": "",
27792
+ "tagName": {
27793
+ "text": "param"
27794
+ }
27795
+ }
27796
+ ]
27797
+ },
27318
27798
  {
27319
27799
  "name": "findDeclaringModule",
27320
27800
  "file": "packages/core/schematics/add-eui-imports/index.ts",
@@ -27988,6 +28468,36 @@
27988
28468
  "args": [],
27989
28469
  "returnType": "Provider[]"
27990
28470
  },
28471
+ {
28472
+ "name": "getDecoratorName",
28473
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
28474
+ "ctype": "miscellaneous",
28475
+ "subtype": "function",
28476
+ "coverageIgnore": false,
28477
+ "deprecated": false,
28478
+ "deprecationMessage": "",
28479
+ "rawdescription": "",
28480
+ "description": "",
28481
+ "displayName": "getDecoratorName",
28482
+ "args": [
28483
+ {
28484
+ "name": "callExpr",
28485
+ "deprecated": false,
28486
+ "deprecationMessage": ""
28487
+ }
28488
+ ],
28489
+ "returnType": "string | null",
28490
+ "jsdoctags": [
28491
+ {
28492
+ "name": "callExpr",
28493
+ "deprecated": false,
28494
+ "deprecationMessage": "",
28495
+ "tagName": {
28496
+ "text": "param"
28497
+ }
28498
+ }
28499
+ ]
28500
+ },
27991
28501
  {
27992
28502
  "name": "getDependencyProviders",
27993
28503
  "file": "packages/core/src/lib/services/app/eui-startup.ts",
@@ -28653,6 +29163,36 @@
28653
29163
  }
28654
29164
  ]
28655
29165
  },
29166
+ {
29167
+ "name": "getTypeAnnotationName",
29168
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
29169
+ "ctype": "miscellaneous",
29170
+ "subtype": "function",
29171
+ "coverageIgnore": false,
29172
+ "deprecated": false,
29173
+ "deprecationMessage": "",
29174
+ "rawdescription": "",
29175
+ "description": "",
29176
+ "displayName": "getTypeAnnotationName",
29177
+ "args": [
29178
+ {
29179
+ "name": "typeNode",
29180
+ "deprecated": false,
29181
+ "deprecationMessage": ""
29182
+ }
29183
+ ],
29184
+ "returnType": "string | null",
29185
+ "jsdoctags": [
29186
+ {
29187
+ "name": "typeNode",
29188
+ "deprecated": false,
29189
+ "deprecationMessage": "",
29190
+ "tagName": {
29191
+ "text": "param"
29192
+ }
29193
+ }
29194
+ ]
29195
+ },
28656
29196
  {
28657
29197
  "name": "GrowlHttpErrorCallbackFn",
28658
29198
  "file": "packages/core/src/lib/services/errors/http-error-handler-callback-functions.ts",
@@ -28779,6 +29319,38 @@
28779
29319
  }
28780
29320
  ]
28781
29321
  },
29322
+ {
29323
+ "name": "hasEuiReference",
29324
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
29325
+ "ctype": "miscellaneous",
29326
+ "subtype": "function",
29327
+ "coverageIgnore": false,
29328
+ "deprecated": false,
29329
+ "deprecationMessage": "",
29330
+ "rawdescription": "Quick check: does the file reference any EUI class name from the signal map?",
29331
+ "description": "<p>Quick check: does the file reference any EUI class name from the signal map?</p>\n",
29332
+ "displayName": "hasEuiReference",
29333
+ "args": [
29334
+ {
29335
+ "name": "source",
29336
+ "type": "string",
29337
+ "deprecated": false,
29338
+ "deprecationMessage": ""
29339
+ }
29340
+ ],
29341
+ "returnType": "boolean",
29342
+ "jsdoctags": [
29343
+ {
29344
+ "name": "source",
29345
+ "type": "string",
29346
+ "deprecated": false,
29347
+ "deprecationMessage": "",
29348
+ "tagName": {
29349
+ "text": "param"
29350
+ }
29351
+ }
29352
+ ]
29353
+ },
28782
29354
  {
28783
29355
  "name": "hasEuiTableAttribute",
28784
29356
  "file": "packages/core/schematics/migrate-eui-table/index.ts",
@@ -28901,6 +29473,38 @@
28901
29473
  }
28902
29474
  ]
28903
29475
  },
29476
+ {
29477
+ "name": "hasStringRefQuery",
29478
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
29479
+ "ctype": "miscellaneous",
29480
+ "subtype": "function",
29481
+ "coverageIgnore": false,
29482
+ "deprecated": false,
29483
+ "deprecationMessage": "",
29484
+ "rawdescription": "Quick check: does the file have",
29485
+ "description": "<p>Quick check: does the file have</p>\n",
29486
+ "displayName": "hasStringRefQuery",
29487
+ "args": [
29488
+ {
29489
+ "name": "source",
29490
+ "type": "string",
29491
+ "deprecated": false,
29492
+ "deprecationMessage": ""
29493
+ }
29494
+ ],
29495
+ "returnType": "boolean",
29496
+ "jsdoctags": [
29497
+ {
29498
+ "name": "source",
29499
+ "type": "string",
29500
+ "deprecated": false,
29501
+ "deprecationMessage": "",
29502
+ "tagName": {
29503
+ "text": "param"
29504
+ }
29505
+ }
29506
+ ]
29507
+ },
28904
29508
  {
28905
29509
  "name": "iconMigrate",
28906
29510
  "file": "packages/core/schematics/icon-migrate/index.ts",
@@ -29086,6 +29690,36 @@
29086
29690
  }
29087
29691
  ]
29088
29692
  },
29693
+ {
29694
+ "name": "isAssignmentOperator",
29695
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
29696
+ "ctype": "miscellaneous",
29697
+ "subtype": "function",
29698
+ "coverageIgnore": false,
29699
+ "deprecated": false,
29700
+ "deprecationMessage": "",
29701
+ "rawdescription": "",
29702
+ "description": "",
29703
+ "displayName": "isAssignmentOperator",
29704
+ "args": [
29705
+ {
29706
+ "name": "kind",
29707
+ "deprecated": false,
29708
+ "deprecationMessage": ""
29709
+ }
29710
+ ],
29711
+ "returnType": "boolean",
29712
+ "jsdoctags": [
29713
+ {
29714
+ "name": "kind",
29715
+ "deprecated": false,
29716
+ "deprecationMessage": "",
29717
+ "tagName": {
29718
+ "text": "param"
29719
+ }
29720
+ }
29721
+ ]
29722
+ },
29089
29723
  {
29090
29724
  "name": "isAvatarElement",
29091
29725
  "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
@@ -32795,6 +33429,40 @@
32795
33429
  }
32796
33430
  ]
32797
33431
  },
33432
+ {
33433
+ "name": "migrateToSignals",
33434
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
33435
+ "ctype": "miscellaneous",
33436
+ "subtype": "function",
33437
+ "coverageIgnore": false,
33438
+ "deprecated": false,
33439
+ "deprecationMessage": "",
33440
+ "rawdescription": "Migrates consumer code that accesses EUI component instances programmatically.\n\nWhen EUI migrated",
33441
+ "description": "<p>Migrates consumer code that accesses EUI component instances programmatically.</p>\n<p>When EUI migrated</p>\n",
33442
+ "displayName": "migrateToSignals",
33443
+ "args": [
33444
+ {
33445
+ "name": "options",
33446
+ "type": "Schema",
33447
+ "deprecated": false,
33448
+ "deprecationMessage": "",
33449
+ "defaultValue": "{}"
33450
+ }
33451
+ ],
33452
+ "returnType": "Rule",
33453
+ "jsdoctags": [
33454
+ {
33455
+ "name": "options",
33456
+ "type": "Schema",
33457
+ "deprecated": false,
33458
+ "deprecationMessage": "",
33459
+ "defaultValue": "{}",
33460
+ "tagName": {
33461
+ "text": "param"
33462
+ }
33463
+ }
33464
+ ]
33465
+ },
32798
33466
  {
32799
33467
  "name": "migrateToStandalone",
32800
33468
  "file": "packages/core/schematics/migrate-to-standalone/index.ts",
@@ -33015,6 +33683,83 @@
33015
33683
  }
33016
33684
  ]
33017
33685
  },
33686
+ {
33687
+ "name": "migrateTypeScript",
33688
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
33689
+ "ctype": "miscellaneous",
33690
+ "subtype": "function",
33691
+ "coverageIgnore": false,
33692
+ "deprecated": false,
33693
+ "deprecationMessage": "",
33694
+ "rawdescription": "",
33695
+ "description": "",
33696
+ "displayName": "migrateTypeScript",
33697
+ "args": [
33698
+ {
33699
+ "name": "source",
33700
+ "type": "string",
33701
+ "deprecated": false,
33702
+ "deprecationMessage": ""
33703
+ },
33704
+ {
33705
+ "name": "filePath",
33706
+ "type": "string",
33707
+ "deprecated": false,
33708
+ "deprecationMessage": ""
33709
+ },
33710
+ {
33711
+ "name": "tree",
33712
+ "type": "Tree",
33713
+ "deprecated": false,
33714
+ "deprecationMessage": ""
33715
+ },
33716
+ {
33717
+ "name": "context",
33718
+ "type": "SchematicContext",
33719
+ "deprecated": false,
33720
+ "deprecationMessage": ""
33721
+ }
33722
+ ],
33723
+ "returnType": "MigrateResult",
33724
+ "jsdoctags": [
33725
+ {
33726
+ "name": "source",
33727
+ "type": "string",
33728
+ "deprecated": false,
33729
+ "deprecationMessage": "",
33730
+ "tagName": {
33731
+ "text": "param"
33732
+ }
33733
+ },
33734
+ {
33735
+ "name": "filePath",
33736
+ "type": "string",
33737
+ "deprecated": false,
33738
+ "deprecationMessage": "",
33739
+ "tagName": {
33740
+ "text": "param"
33741
+ }
33742
+ },
33743
+ {
33744
+ "name": "tree",
33745
+ "type": "Tree",
33746
+ "deprecated": false,
33747
+ "deprecationMessage": "",
33748
+ "tagName": {
33749
+ "text": "param"
33750
+ }
33751
+ },
33752
+ {
33753
+ "name": "context",
33754
+ "type": "SchematicContext",
33755
+ "deprecated": false,
33756
+ "deprecationMessage": "",
33757
+ "tagName": {
33758
+ "text": "param"
33759
+ }
33760
+ }
33761
+ ]
33762
+ },
33018
33763
  {
33019
33764
  "name": "parseSelector",
33020
33765
  "file": "packages/core/schematics/add-eui-imports/selector-map.ts",
@@ -34101,6 +34846,96 @@
34101
34846
  }
34102
34847
  ]
34103
34848
  },
34849
+ {
34850
+ "name": "resolveElementToEuiClass",
34851
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
34852
+ "ctype": "miscellaneous",
34853
+ "subtype": "function",
34854
+ "coverageIgnore": false,
34855
+ "deprecated": false,
34856
+ "deprecationMessage": "",
34857
+ "rawdescription": "Given a template element, resolves it to an EUI class name by checking:\n1. Tag name: <eui-alert> → look up 'eui-alert' in EUI_SELECTOR_TO_CLASS\n2. Attribute selectors: <input euiAutocomplete> → look up 'input[euiAutocomplete]' or '[euiAutocomplete]'",
34858
+ "description": "<p>Given a template element, resolves it to an EUI class name by checking:</p>\n<ol>\n<li>Tag name: <eui-alert> → look up &#39;eui-alert&#39; in EUI_SELECTOR_TO_CLASS</li>\n<li>Attribute selectors: <input euiAutocomplete> → look up &#39;input[euiAutocomplete]&#39; or &#39;[euiAutocomplete]&#39;</li>\n</ol>\n",
34859
+ "displayName": "resolveElementToEuiClass",
34860
+ "args": [
34861
+ {
34862
+ "name": "element",
34863
+ "type": "TmplAstElement",
34864
+ "deprecated": false,
34865
+ "deprecationMessage": ""
34866
+ }
34867
+ ],
34868
+ "returnType": "string | null",
34869
+ "jsdoctags": [
34870
+ {
34871
+ "name": "element",
34872
+ "type": "TmplAstElement",
34873
+ "deprecated": false,
34874
+ "deprecationMessage": "",
34875
+ "tagName": {
34876
+ "text": "param"
34877
+ }
34878
+ }
34879
+ ]
34880
+ },
34881
+ {
34882
+ "name": "resolveEuiClassName",
34883
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
34884
+ "ctype": "miscellaneous",
34885
+ "subtype": "function",
34886
+ "coverageIgnore": false,
34887
+ "deprecated": false,
34888
+ "deprecationMessage": "",
34889
+ "rawdescription": "Resolves the EUI class name from a property declaration.\nChecks: type annotation → decorator class argument → template ref map.",
34890
+ "description": "<p>Resolves the EUI class name from a property declaration.\nChecks: type annotation → decorator class argument → template ref map.</p>\n",
34891
+ "displayName": "resolveEuiClassName",
34892
+ "args": [
34893
+ {
34894
+ "name": "node",
34895
+ "deprecated": false,
34896
+ "deprecationMessage": ""
34897
+ },
34898
+ {
34899
+ "name": "sourceFile",
34900
+ "deprecated": false,
34901
+ "deprecationMessage": ""
34902
+ },
34903
+ {
34904
+ "name": "templateRefMap",
34905
+ "type": "Map",
34906
+ "deprecated": false,
34907
+ "deprecationMessage": ""
34908
+ }
34909
+ ],
34910
+ "returnType": "string | null",
34911
+ "jsdoctags": [
34912
+ {
34913
+ "name": "node",
34914
+ "deprecated": false,
34915
+ "deprecationMessage": "",
34916
+ "tagName": {
34917
+ "text": "param"
34918
+ }
34919
+ },
34920
+ {
34921
+ "name": "sourceFile",
34922
+ "deprecated": false,
34923
+ "deprecationMessage": "",
34924
+ "tagName": {
34925
+ "text": "param"
34926
+ }
34927
+ },
34928
+ {
34929
+ "name": "templateRefMap",
34930
+ "type": "Map",
34931
+ "deprecated": false,
34932
+ "deprecationMessage": "",
34933
+ "tagName": {
34934
+ "text": "param"
34935
+ }
34936
+ }
34937
+ ]
34938
+ },
34104
34939
  {
34105
34940
  "name": "resolveIcon",
34106
34941
  "file": "packages/core/schematics/icon-migrate/index.ts",
@@ -34178,6 +35013,36 @@
34178
35013
  }
34179
35014
  ]
34180
35015
  },
35016
+ {
35017
+ "name": "resolveRefName",
35018
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
35019
+ "ctype": "miscellaneous",
35020
+ "subtype": "function",
35021
+ "coverageIgnore": false,
35022
+ "deprecated": false,
35023
+ "deprecationMessage": "",
35024
+ "rawdescription": "Resolves a reference name from an expression.\nHandles: `ref`, `this.ref`, `this._ref`",
35025
+ "description": "<p>Resolves a reference name from an expression.\nHandles: <code>ref</code>, <code>this.ref</code>, <code>this._ref</code></p>\n",
35026
+ "displayName": "resolveRefName",
35027
+ "args": [
35028
+ {
35029
+ "name": "expr",
35030
+ "deprecated": false,
35031
+ "deprecationMessage": ""
35032
+ }
35033
+ ],
35034
+ "returnType": "string | null",
35035
+ "jsdoctags": [
35036
+ {
35037
+ "name": "expr",
35038
+ "deprecated": false,
35039
+ "deprecationMessage": "",
35040
+ "tagName": {
35041
+ "text": "param"
35042
+ }
35043
+ }
35044
+ ]
35045
+ },
34181
35046
  {
34182
35047
  "name": "sessionStorageSync",
34183
35048
  "file": "packages/core/src/lib/services/store/reducers/meta.reducers.ts",
@@ -34361,6 +35226,79 @@
34361
35226
  }
34362
35227
  ]
34363
35228
  },
35229
+ {
35230
+ "name": "tryRewritePropertyAccess",
35231
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
35232
+ "ctype": "miscellaneous",
35233
+ "subtype": "function",
35234
+ "coverageIgnore": false,
35235
+ "deprecated": false,
35236
+ "deprecationMessage": "",
35237
+ "rawdescription": "Checks if a property access `ref.prop` should be rewritten to `ref.prop()`.\n\nWe rewrite if:\n- `ref` is tracked in euiRefs\n- `prop` is in the signal set for that EUI class\n- The access is NOT already a call expression (not `ref.prop()` or `ref.prop(args)`)\n- The access is NOT a write target (not `ref.prop = value`)\n- The access is NOT a template binding argument (those are unaffected)",
35238
+ "description": "<p>Checks if a property access <code>ref.prop</code> should be rewritten to <code>ref.prop()</code>.</p>\n<p>We rewrite if:</p>\n<ul>\n<li><code>ref</code> is tracked in euiRefs</li>\n<li><code>prop</code> is in the signal set for that EUI class</li>\n<li>The access is NOT already a call expression (not <code>ref.prop()</code> or <code>ref.prop(args)</code>)</li>\n<li>The access is NOT a write target (not <code>ref.prop = value</code>)</li>\n<li>The access is NOT a template binding argument (those are unaffected)</li>\n</ul>\n",
35239
+ "displayName": "tryRewritePropertyAccess",
35240
+ "args": [
35241
+ {
35242
+ "name": "node",
35243
+ "deprecated": false,
35244
+ "deprecationMessage": ""
35245
+ },
35246
+ {
35247
+ "name": "euiRefs",
35248
+ "type": "Map",
35249
+ "deprecated": false,
35250
+ "deprecationMessage": ""
35251
+ },
35252
+ {
35253
+ "name": "sourceFile",
35254
+ "deprecated": false,
35255
+ "deprecationMessage": ""
35256
+ },
35257
+ {
35258
+ "name": "source",
35259
+ "type": "string",
35260
+ "deprecated": false,
35261
+ "deprecationMessage": ""
35262
+ }
35263
+ ],
35264
+ "returnType": "Edit | null",
35265
+ "jsdoctags": [
35266
+ {
35267
+ "name": "node",
35268
+ "deprecated": false,
35269
+ "deprecationMessage": "",
35270
+ "tagName": {
35271
+ "text": "param"
35272
+ }
35273
+ },
35274
+ {
35275
+ "name": "euiRefs",
35276
+ "type": "Map",
35277
+ "deprecated": false,
35278
+ "deprecationMessage": "",
35279
+ "tagName": {
35280
+ "text": "param"
35281
+ }
35282
+ },
35283
+ {
35284
+ "name": "sourceFile",
35285
+ "deprecated": false,
35286
+ "deprecationMessage": "",
35287
+ "tagName": {
35288
+ "text": "param"
35289
+ }
35290
+ },
35291
+ {
35292
+ "name": "source",
35293
+ "type": "string",
35294
+ "deprecated": false,
35295
+ "deprecationMessage": "",
35296
+ "tagName": {
35297
+ "text": "param"
35298
+ }
35299
+ }
35300
+ ]
35301
+ },
34364
35302
  {
34365
35303
  "name": "unwrapExpression",
34366
35304
  "file": "packages/core/schematics/migrate-eui-accent/index.ts",
@@ -34691,6 +35629,36 @@
34691
35629
  }
34692
35630
  ]
34693
35631
  },
35632
+ {
35633
+ "name": "unwrapExpression",
35634
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
35635
+ "ctype": "miscellaneous",
35636
+ "subtype": "function",
35637
+ "coverageIgnore": false,
35638
+ "deprecated": false,
35639
+ "deprecationMessage": "",
35640
+ "rawdescription": "",
35641
+ "description": "",
35642
+ "displayName": "unwrapExpression",
35643
+ "args": [
35644
+ {
35645
+ "name": "expression",
35646
+ "deprecated": false,
35647
+ "deprecationMessage": ""
35648
+ }
35649
+ ],
35650
+ "returnType": "ts.Expression",
35651
+ "jsdoctags": [
35652
+ {
35653
+ "name": "expression",
35654
+ "deprecated": false,
35655
+ "deprecationMessage": "",
35656
+ "tagName": {
35657
+ "text": "param"
35658
+ }
35659
+ }
35660
+ ]
35661
+ },
34694
35662
  {
34695
35663
  "name": "updateDecoratorImportsArray",
34696
35664
  "file": "packages/core/schematics/add-eui-imports/index.ts",
@@ -34886,7 +35854,7 @@
34886
35854
  },
34887
35855
  {
34888
35856
  "name": "visitDir",
34889
- "file": "packages/core/schematics/fix-no-multiple-empty-lines/index.ts",
35857
+ "file": "packages/core/schematics/add-eui-imports/index.ts",
34890
35858
  "ctype": "miscellaneous",
34891
35859
  "subtype": "function",
34892
35860
  "coverageIgnore": false,
@@ -34931,7 +35899,7 @@
34931
35899
  },
34932
35900
  {
34933
35901
  "name": "visitDir",
34934
- "file": "packages/core/schematics/add-eui-imports/index.ts",
35902
+ "file": "packages/core/schematics/fix-no-multiple-empty-lines/index.ts",
34935
35903
  "ctype": "miscellaneous",
34936
35904
  "subtype": "function",
34937
35905
  "coverageIgnore": false,
@@ -35741,7 +36709,7 @@
35741
36709
  },
35742
36710
  {
35743
36711
  "name": "visitDir",
35744
- "file": "packages/core/schematics/migrate-to-standalone/index.ts",
36712
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
35745
36713
  "ctype": "miscellaneous",
35746
36714
  "subtype": "function",
35747
36715
  "coverageIgnore": false,
@@ -35785,8 +36753,8 @@
35785
36753
  ]
35786
36754
  },
35787
36755
  {
35788
- "name": "visitExpressionForPipes",
35789
- "file": "packages/core/schematics/migrate-eui-table/index.ts",
36756
+ "name": "visitDir",
36757
+ "file": "packages/core/schematics/migrate-to-standalone/index.ts",
35790
36758
  "ctype": "miscellaneous",
35791
36759
  "subtype": "function",
35792
36760
  "coverageIgnore": false,
@@ -35794,16 +36762,16 @@
35794
36762
  "deprecationMessage": "",
35795
36763
  "rawdescription": "",
35796
36764
  "description": "",
35797
- "displayName": "visitExpressionForPipes",
36765
+ "displayName": "visitDir",
35798
36766
  "args": [
35799
36767
  {
35800
- "name": "expr",
35801
- "type": "AST",
36768
+ "name": "dir",
36769
+ "type": "DirEntry",
35802
36770
  "deprecated": false,
35803
36771
  "deprecationMessage": ""
35804
36772
  },
35805
36773
  {
35806
- "name": "edits",
36774
+ "name": "callback",
35807
36775
  "deprecated": false,
35808
36776
  "deprecationMessage": ""
35809
36777
  }
@@ -35811,8 +36779,8 @@
35811
36779
  "returnType": "void",
35812
36780
  "jsdoctags": [
35813
36781
  {
35814
- "name": "expr",
35815
- "type": "AST",
36782
+ "name": "dir",
36783
+ "type": "DirEntry",
35816
36784
  "deprecated": false,
35817
36785
  "deprecationMessage": "",
35818
36786
  "tagName": {
@@ -35820,7 +36788,7 @@
35820
36788
  }
35821
36789
  },
35822
36790
  {
35823
- "name": "edits",
36791
+ "name": "callback",
35824
36792
  "deprecated": false,
35825
36793
  "deprecationMessage": "",
35826
36794
  "tagName": {
@@ -35830,8 +36798,8 @@
35830
36798
  ]
35831
36799
  },
35832
36800
  {
35833
- "name": "visitNodes",
35834
- "file": "packages/core/schematics/migrate-eui-accent/index.ts",
36801
+ "name": "visitExpressionForPipes",
36802
+ "file": "packages/core/schematics/migrate-eui-table/index.ts",
35835
36803
  "ctype": "miscellaneous",
35836
36804
  "subtype": "function",
35837
36805
  "coverageIgnore": false,
@@ -35839,10 +36807,11 @@
35839
36807
  "deprecationMessage": "",
35840
36808
  "rawdescription": "",
35841
36809
  "description": "",
35842
- "displayName": "visitNodes",
36810
+ "displayName": "visitExpressionForPipes",
35843
36811
  "args": [
35844
36812
  {
35845
- "name": "nodes",
36813
+ "name": "expr",
36814
+ "type": "AST",
35846
36815
  "deprecated": false,
35847
36816
  "deprecationMessage": ""
35848
36817
  },
@@ -35855,7 +36824,8 @@
35855
36824
  "returnType": "void",
35856
36825
  "jsdoctags": [
35857
36826
  {
35858
- "name": "nodes",
36827
+ "name": "expr",
36828
+ "type": "AST",
35859
36829
  "deprecated": false,
35860
36830
  "deprecationMessage": "",
35861
36831
  "tagName": {
@@ -35874,7 +36844,7 @@
35874
36844
  },
35875
36845
  {
35876
36846
  "name": "visitNodes",
35877
- "file": "packages/core/schematics/migrate-eui-alert/index.ts",
36847
+ "file": "packages/core/schematics/migrate-eui-accent/index.ts",
35878
36848
  "ctype": "miscellaneous",
35879
36849
  "subtype": "function",
35880
36850
  "coverageIgnore": false,
@@ -35890,7 +36860,7 @@
35890
36860
  "deprecationMessage": ""
35891
36861
  },
35892
36862
  {
35893
- "name": "removals",
36863
+ "name": "edits",
35894
36864
  "deprecated": false,
35895
36865
  "deprecationMessage": ""
35896
36866
  }
@@ -35906,7 +36876,7 @@
35906
36876
  }
35907
36877
  },
35908
36878
  {
35909
- "name": "removals",
36879
+ "name": "edits",
35910
36880
  "deprecated": false,
35911
36881
  "deprecationMessage": "",
35912
36882
  "tagName": {
@@ -35917,7 +36887,7 @@
35917
36887
  },
35918
36888
  {
35919
36889
  "name": "visitNodes",
35920
- "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
36890
+ "file": "packages/core/schematics/migrate-eui-alert/index.ts",
35921
36891
  "ctype": "miscellaneous",
35922
36892
  "subtype": "function",
35923
36893
  "coverageIgnore": false,
@@ -35960,7 +36930,7 @@
35960
36930
  },
35961
36931
  {
35962
36932
  "name": "visitNodes",
35963
- "file": "packages/core/schematics/migrate-eui-button/index.ts",
36933
+ "file": "packages/core/schematics/migrate-eui-avatar/index.ts",
35964
36934
  "ctype": "miscellaneous",
35965
36935
  "subtype": "function",
35966
36936
  "coverageIgnore": false,
@@ -35976,7 +36946,7 @@
35976
36946
  "deprecationMessage": ""
35977
36947
  },
35978
36948
  {
35979
- "name": "edits",
36949
+ "name": "removals",
35980
36950
  "deprecated": false,
35981
36951
  "deprecationMessage": ""
35982
36952
  }
@@ -35992,7 +36962,7 @@
35992
36962
  }
35993
36963
  },
35994
36964
  {
35995
- "name": "edits",
36965
+ "name": "removals",
35996
36966
  "deprecated": false,
35997
36967
  "deprecationMessage": "",
35998
36968
  "tagName": {
@@ -36003,7 +36973,7 @@
36003
36973
  },
36004
36974
  {
36005
36975
  "name": "visitNodes",
36006
- "file": "packages/core/schematics/migrate-eui-chip/index.ts",
36976
+ "file": "packages/core/schematics/migrate-eui-button/index.ts",
36007
36977
  "ctype": "miscellaneous",
36008
36978
  "subtype": "function",
36009
36979
  "coverageIgnore": false,
@@ -36019,7 +36989,7 @@
36019
36989
  "deprecationMessage": ""
36020
36990
  },
36021
36991
  {
36022
- "name": "removals",
36992
+ "name": "edits",
36023
36993
  "deprecated": false,
36024
36994
  "deprecationMessage": ""
36025
36995
  }
@@ -36035,7 +37005,7 @@
36035
37005
  }
36036
37006
  },
36037
37007
  {
36038
- "name": "removals",
37008
+ "name": "edits",
36039
37009
  "deprecated": false,
36040
37010
  "deprecationMessage": "",
36041
37011
  "tagName": {
@@ -36046,7 +37016,7 @@
36046
37016
  },
36047
37017
  {
36048
37018
  "name": "visitNodes",
36049
- "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
37019
+ "file": "packages/core/schematics/migrate-eui-chip/index.ts",
36050
37020
  "ctype": "miscellaneous",
36051
37021
  "subtype": "function",
36052
37022
  "coverageIgnore": false,
@@ -36062,13 +37032,7 @@
36062
37032
  "deprecationMessage": ""
36063
37033
  },
36064
37034
  {
36065
- "name": "source",
36066
- "type": "string",
36067
- "deprecated": false,
36068
- "deprecationMessage": ""
36069
- },
36070
- {
36071
- "name": "edits",
37035
+ "name": "removals",
36072
37036
  "deprecated": false,
36073
37037
  "deprecationMessage": ""
36074
37038
  }
@@ -36084,16 +37048,7 @@
36084
37048
  }
36085
37049
  },
36086
37050
  {
36087
- "name": "source",
36088
- "type": "string",
36089
- "deprecated": false,
36090
- "deprecationMessage": "",
36091
- "tagName": {
36092
- "text": "param"
36093
- }
36094
- },
36095
- {
36096
- "name": "edits",
37051
+ "name": "removals",
36097
37052
  "deprecated": false,
36098
37053
  "deprecationMessage": "",
36099
37054
  "tagName": {
@@ -36104,7 +37059,7 @@
36104
37059
  },
36105
37060
  {
36106
37061
  "name": "visitNodes",
36107
- "file": "packages/core/schematics/migrate-eui-discussion-thread/index.ts",
37062
+ "file": "packages/core/schematics/migrate-eui-chip-list/index.ts",
36108
37063
  "ctype": "miscellaneous",
36109
37064
  "subtype": "function",
36110
37065
  "coverageIgnore": false,
@@ -36126,7 +37081,7 @@
36126
37081
  "deprecationMessage": ""
36127
37082
  },
36128
37083
  {
36129
- "name": "removals",
37084
+ "name": "edits",
36130
37085
  "deprecated": false,
36131
37086
  "deprecationMessage": ""
36132
37087
  }
@@ -36151,7 +37106,7 @@
36151
37106
  }
36152
37107
  },
36153
37108
  {
36154
- "name": "removals",
37109
+ "name": "edits",
36155
37110
  "deprecated": false,
36156
37111
  "deprecationMessage": "",
36157
37112
  "tagName": {
@@ -36162,7 +37117,7 @@
36162
37117
  },
36163
37118
  {
36164
37119
  "name": "visitNodes",
36165
- "file": "packages/core/schematics/migrate-eui-editor/index.ts",
37120
+ "file": "packages/core/schematics/migrate-eui-discussion-thread/index.ts",
36166
37121
  "ctype": "miscellaneous",
36167
37122
  "subtype": "function",
36168
37123
  "coverageIgnore": false,
@@ -36178,50 +37133,13 @@
36178
37133
  "deprecationMessage": ""
36179
37134
  },
36180
37135
  {
36181
- "name": "edits",
36182
- "deprecated": false,
36183
- "deprecationMessage": ""
36184
- }
36185
- ],
36186
- "returnType": "void",
36187
- "jsdoctags": [
36188
- {
36189
- "name": "nodes",
36190
- "deprecated": false,
36191
- "deprecationMessage": "",
36192
- "tagName": {
36193
- "text": "param"
36194
- }
36195
- },
36196
- {
36197
- "name": "edits",
36198
- "deprecated": false,
36199
- "deprecationMessage": "",
36200
- "tagName": {
36201
- "text": "param"
36202
- }
36203
- }
36204
- ]
36205
- },
36206
- {
36207
- "name": "visitNodes",
36208
- "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
36209
- "ctype": "miscellaneous",
36210
- "subtype": "function",
36211
- "coverageIgnore": false,
36212
- "deprecated": false,
36213
- "deprecationMessage": "",
36214
- "rawdescription": "",
36215
- "description": "",
36216
- "displayName": "visitNodes",
36217
- "args": [
36218
- {
36219
- "name": "nodes",
37136
+ "name": "source",
37137
+ "type": "string",
36220
37138
  "deprecated": false,
36221
37139
  "deprecationMessage": ""
36222
37140
  },
36223
37141
  {
36224
- "name": "edits",
37142
+ "name": "removals",
36225
37143
  "deprecated": false,
36226
37144
  "deprecationMessage": ""
36227
37145
  }
@@ -36237,42 +37155,8 @@
36237
37155
  }
36238
37156
  },
36239
37157
  {
36240
- "name": "edits",
36241
- "deprecated": false,
36242
- "deprecationMessage": "",
36243
- "tagName": {
36244
- "text": "param"
36245
- }
36246
- }
36247
- ]
36248
- },
36249
- {
36250
- "name": "visitNodes",
36251
- "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
36252
- "ctype": "miscellaneous",
36253
- "subtype": "function",
36254
- "coverageIgnore": false,
36255
- "deprecated": false,
36256
- "deprecationMessage": "",
36257
- "rawdescription": "",
36258
- "description": "",
36259
- "displayName": "visitNodes",
36260
- "args": [
36261
- {
36262
- "name": "nodes",
36263
- "deprecated": false,
36264
- "deprecationMessage": ""
36265
- },
36266
- {
36267
- "name": "edits",
36268
- "deprecated": false,
36269
- "deprecationMessage": ""
36270
- }
36271
- ],
36272
- "returnType": "void",
36273
- "jsdoctags": [
36274
- {
36275
- "name": "nodes",
37158
+ "name": "source",
37159
+ "type": "string",
36276
37160
  "deprecated": false,
36277
37161
  "deprecationMessage": "",
36278
37162
  "tagName": {
@@ -36280,7 +37164,7 @@
36280
37164
  }
36281
37165
  },
36282
37166
  {
36283
- "name": "edits",
37167
+ "name": "removals",
36284
37168
  "deprecated": false,
36285
37169
  "deprecationMessage": "",
36286
37170
  "tagName": {
@@ -36291,7 +37175,136 @@
36291
37175
  },
36292
37176
  {
36293
37177
  "name": "visitNodes",
36294
- "file": "packages/core/schematics/migrate-eui-icon-toggle/index.ts",
37178
+ "file": "packages/core/schematics/migrate-eui-editor/index.ts",
37179
+ "ctype": "miscellaneous",
37180
+ "subtype": "function",
37181
+ "coverageIgnore": false,
37182
+ "deprecated": false,
37183
+ "deprecationMessage": "",
37184
+ "rawdescription": "",
37185
+ "description": "",
37186
+ "displayName": "visitNodes",
37187
+ "args": [
37188
+ {
37189
+ "name": "nodes",
37190
+ "deprecated": false,
37191
+ "deprecationMessage": ""
37192
+ },
37193
+ {
37194
+ "name": "edits",
37195
+ "deprecated": false,
37196
+ "deprecationMessage": ""
37197
+ }
37198
+ ],
37199
+ "returnType": "void",
37200
+ "jsdoctags": [
37201
+ {
37202
+ "name": "nodes",
37203
+ "deprecated": false,
37204
+ "deprecationMessage": "",
37205
+ "tagName": {
37206
+ "text": "param"
37207
+ }
37208
+ },
37209
+ {
37210
+ "name": "edits",
37211
+ "deprecated": false,
37212
+ "deprecationMessage": "",
37213
+ "tagName": {
37214
+ "text": "param"
37215
+ }
37216
+ }
37217
+ ]
37218
+ },
37219
+ {
37220
+ "name": "visitNodes",
37221
+ "file": "packages/core/schematics/migrate-eui-fieldset/index.ts",
37222
+ "ctype": "miscellaneous",
37223
+ "subtype": "function",
37224
+ "coverageIgnore": false,
37225
+ "deprecated": false,
37226
+ "deprecationMessage": "",
37227
+ "rawdescription": "",
37228
+ "description": "",
37229
+ "displayName": "visitNodes",
37230
+ "args": [
37231
+ {
37232
+ "name": "nodes",
37233
+ "deprecated": false,
37234
+ "deprecationMessage": ""
37235
+ },
37236
+ {
37237
+ "name": "edits",
37238
+ "deprecated": false,
37239
+ "deprecationMessage": ""
37240
+ }
37241
+ ],
37242
+ "returnType": "void",
37243
+ "jsdoctags": [
37244
+ {
37245
+ "name": "nodes",
37246
+ "deprecated": false,
37247
+ "deprecationMessage": "",
37248
+ "tagName": {
37249
+ "text": "param"
37250
+ }
37251
+ },
37252
+ {
37253
+ "name": "edits",
37254
+ "deprecated": false,
37255
+ "deprecationMessage": "",
37256
+ "tagName": {
37257
+ "text": "param"
37258
+ }
37259
+ }
37260
+ ]
37261
+ },
37262
+ {
37263
+ "name": "visitNodes",
37264
+ "file": "packages/core/schematics/migrate-eui-icon-svg/index.ts",
37265
+ "ctype": "miscellaneous",
37266
+ "subtype": "function",
37267
+ "coverageIgnore": false,
37268
+ "deprecated": false,
37269
+ "deprecationMessage": "",
37270
+ "rawdescription": "",
37271
+ "description": "",
37272
+ "displayName": "visitNodes",
37273
+ "args": [
37274
+ {
37275
+ "name": "nodes",
37276
+ "deprecated": false,
37277
+ "deprecationMessage": ""
37278
+ },
37279
+ {
37280
+ "name": "edits",
37281
+ "deprecated": false,
37282
+ "deprecationMessage": ""
37283
+ }
37284
+ ],
37285
+ "returnType": "void",
37286
+ "jsdoctags": [
37287
+ {
37288
+ "name": "nodes",
37289
+ "deprecated": false,
37290
+ "deprecationMessage": "",
37291
+ "tagName": {
37292
+ "text": "param"
37293
+ }
37294
+ },
37295
+ {
37296
+ "name": "edits",
37297
+ "deprecated": false,
37298
+ "deprecationMessage": "",
37299
+ "tagName": {
37300
+ "text": "param"
37301
+ }
37302
+ }
37303
+ ]
37304
+ },
37305
+ {
37306
+ "name": "visitNodes",
37307
+ "file": "packages/core/schematics/migrate-eui-icon-toggle/index.ts",
36295
37308
  "ctype": "miscellaneous",
36296
37309
  "subtype": "function",
36297
37310
  "coverageIgnore": false,
@@ -38539,6 +39552,34 @@
38539
39552
  "defaultValue": "'euiAccent'"
38540
39553
  }
38541
39554
  ],
39555
+ "packages/core/schematics/migrate-to-signals/signal-map.ts": [
39556
+ {
39557
+ "name": "EUI_SELECTOR_TO_CLASS",
39558
+ "ctype": "miscellaneous",
39559
+ "subtype": "variable",
39560
+ "file": "packages/core/schematics/migrate-to-signals/signal-map.ts",
39561
+ "coverageIgnore": false,
39562
+ "deprecated": false,
39563
+ "deprecationMessage": "",
39564
+ "type": "Record<string, string>",
39565
+ "defaultValue": "{\n '[euiBase]': 'BaseStatesDirective',\n '[euiDropdownItem]': 'EuiDropdownItemComponent',\n '[euiIconColored]': 'EuiIconColorComponent',\n '[euiListItem]': 'EuiListItemComponent',\n '[euiLoading]': 'EuiLoadingDirective',\n '[euiScrollHandler]': 'EuiScrollHandlerDirective',\n '[euiScrollTo]': 'EuiSmoothScrollToDirective',\n '[euiTemplate]': 'EuiTemplateDirective',\n '[euiTooltip]': 'EuiTooltipDirective',\n '[formControlName][euiEditorMaxlength]': 'EuiEditorMaxlengthDirective',\n 'a[euiButton]': 'EuiButtonComponent',\n 'button[euiButton]': 'EuiButtonComponent',\n 'div[euiAlert]': 'EuiAlertComponent',\n 'div[euiAvatar]': 'EuiAvatarComponent',\n 'div[euiBadge]': 'EuiBadgeComponent',\n 'div[euiInputGroupAddOnItem]': 'EuiInputGroupAddOnItemComponent',\n 'div[euiInputGroupAddOn]': 'EuiInputGroupAddOnComponent',\n 'div[euiInputGroup]': 'EuiInputGroupComponent',\n 'div[euiStatusBadge]': 'EuiStatusBadgeComponent',\n 'eds-tab-body': 'EdsTabBody',\n 'eds-tab-header': 'EdsTabHeader',\n 'eds-tabs': 'EdsTabs',\n 'eui-alert': 'EuiAlertComponent',\n 'eui-app': 'AppComponent',\n 'eui-app-side-container': 'EuiAppSideContainerComponent',\n 'eui-app-sidebar-drawer': 'EuiAppSidebarDrawerComponent',\n 'eui-app-sidebar-header-user-profile': 'EuiAppSidebarHeaderUserProfileComponent',\n 'eui-app-sidebar-menu': 'EuiAppSidebarMenuComponent',\n 'eui-app-toolbar': 'EuiAppToolbarComponent',\n 'eui-app-top-message': 'EuiAppTopMessageComponent',\n 'eui-autocomplete': 'EuiAutocompleteComponent',\n 'eui-autocomplete-panel': 'EuiAutocompletePanelComponent',\n 'eui-avatar': 'EuiAvatarComponent',\n 'eui-avatar-badge': 'EuiAvatarBadgeComponent',\n 'eui-avatar-image': 'EuiAvatarImageComponent',\n 'eui-badge': 'EuiBadgeComponent',\n 'eui-banner': 'EuiBannerComponent',\n 'eui-block-document': 'EuiBlockDocumentComponent',\n 'eui-breadcrumb-item': 'EuiBreadcrumbItemComponent',\n 'eui-button-group': 'EuiButtonGroupComponent',\n 'eui-card': 'EuiCardComponent',\n 'eui-card-footer-menu-content': 'EuiCardFooterMenuContentComponent',\n 'eui-card-header': 'EuiCardHeaderComponent',\n 'eui-card-header-left-content': 'EuiCardHeaderLeftContentComponent',\n 'eui-card-media': 'EuiCardMediaComponent',\n 'eui-chip': 'EuiChipComponent',\n 'eui-chip-button': 'EuiChipButtonComponent',\n 'eui-chip-group': 'EuiChipGroupComponent',\n 'eui-chip-list-append-content': 'EuiChipListAppendContentDirective',\n 'eui-comment-item': 'EuiCommentItemComponent',\n 'eui-comment-textarea': 'EuiCommentTextareaComponent',\n 'eui-comment-thread': 'EuiCommentThreadComponent',\n 'eui-content-card': 'EuiContentCardComponent',\n 'eui-content-card-header-end': 'EuiContentCardHeaderEndComponent',\n 'eui-dashboard-card': 'EuiDashboardCardComponent',\n 'eui-dashboard-card-content-header-icon': 'EuiDashboardCardContentHeaderIconComponent',\n 'eui-date-block': 'EuiDateBlockComponent',\n 'eui-date-range-selector': 'EuiDateRangeSelectorComponent',\n 'eui-datepicker': 'EuiDatepickerComponent',\n 'eui-dialog': 'EuiDialogComponent',\n 'eui-dialog-container': 'EuiDialogContainerComponent',\n 'eui-dimmer': 'EuiDimmerComponent',\n 'eui-discussion-thread': 'EuiDiscussionThreadComponent',\n 'eui-discussion-thread-item': 'EuiDiscussionThreadItemComponent',\n 'eui-dropdown': 'EuiDropdownComponent',\n 'eui-dropdown-item': 'EuiDropdownItemComponent',\n 'eui-dropdown[euiDropdownTree]': 'EuiDropdownTreeDirective',\n 'eui-editor': 'EuiEditorComponent',\n 'eui-editor-counters': 'EuiEditorCountersComponent',\n 'eui-editor-json-view': 'EuiEditorJsonViewComponent',\n 'eui-feedback-message': 'EuiFeedbackMessageComponent',\n 'eui-file-preview': 'EuiFilePreviewComponent',\n 'eui-file-upload': 'EuiFileUploadComponent',\n 'eui-file-upload-progress': 'EuiFileUploadProgressComponent',\n 'eui-footer': 'EuiFooterComponent',\n 'eui-growl': 'EuiGrowlComponent',\n 'eui-header': 'EuiHeaderComponent',\n 'eui-header-app': 'EuiHeaderAppComponent',\n 'eui-header-app-name-logo': 'EuiHeaderAppNameLogoComponent',\n 'eui-header-logo': 'EuiHeaderLogoComponent',\n 'eui-header-search': 'EuiHeaderSearchComponent',\n 'eui-header-user-profile': 'EuiHeaderUserProfileComponent',\n 'eui-icon-button': 'EuiIconButtonComponent',\n 'eui-icon-button-expander': 'EuiIconButtonExpanderComponent',\n 'eui-icon-colored': 'EuiIconColorComponent',\n 'eui-icon-input': 'EuiIconInputComponent',\n 'eui-icon-state': 'EuiIconStateComponent',\n 'eui-icon-svg': 'EuiIconSvgComponent',\n 'eui-icon-toggle': 'EuiIconToggleComponent',\n 'eui-input-button': 'EuiInputButtonComponent',\n 'eui-input-group-addon': 'EuiInputGroupAddOnComponent',\n 'eui-input-group-addon-item': 'EuiInputGroupAddOnItemComponent',\n 'eui-language-selector': 'EuiLanguageSelectorComponent',\n 'eui-list-item': 'EuiListItemComponent',\n 'eui-menu': 'EuiMenuComponent',\n 'eui-menu-item': 'EuiMenuItemComponent',\n 'eui-message-box': 'EuiMessageBoxComponent',\n 'eui-navbar-item': 'EuiNavbarItemComponent',\n 'eui-notification-item': 'EuiNotificationItemComponent',\n 'eui-notification-item-v2': 'EuiNotificationItemV2Component',\n 'eui-notifications': 'EuiNotificationsComponent',\n 'eui-notifications-v2': 'EuiNotificationsV2Component',\n 'eui-overlay': 'EuiOverlayComponent',\n 'eui-overlay-header-title': 'EuiOverlayHeaderTitleComponent',\n 'eui-page': 'EuiPageComponent',\n 'eui-page-column': 'EuiPageColumnComponent',\n 'eui-page-columns': 'EuiPageColumnsComponent',\n 'eui-page-footer': 'EuiPageFooterComponent',\n 'eui-page-header': 'EuiPageHeaderComponent',\n 'eui-page-hero-header': 'EuiPageHeroHeaderComponent',\n 'eui-page-panel': 'EuiPagePanelComponent',\n 'eui-page-top-content': 'EuiPageTopContentComponent',\n 'eui-paginator': 'EuiPaginatorComponent',\n 'eui-popover': 'EuiPopoverComponent',\n 'eui-progress-bar': 'EuiProgressBarComponent',\n 'eui-progress-circle': 'EuiProgressCircleComponent',\n 'eui-rating': 'EuiRatingComponent',\n 'eui-resizable': 'EuiResizableComponent',\n 'eui-section-header': 'EuiSectionHeaderComponent',\n 'eui-section-header-icon': 'EuiSectionHeaderIconComponent',\n 'eui-sidebar-toggle': 'EuiSidebarToggleComponent',\n 'eui-skeleton': 'EuiSkeletonComponent',\n 'eui-slide-toggle': 'EuiSlideToggleComponent',\n 'eui-slider': 'EuiSliderComponent',\n 'eui-status-badge': 'EuiStatusBadgeComponent',\n 'eui-tab': 'EuiTabComponent',\n 'eui-tab-body': 'EuiTabBodyComponent',\n 'eui-tab-header': 'EuiTabHeaderComponent',\n 'eui-table': 'EuiTableComponent',\n 'eui-table-filter': 'EuiTableFilterComponent',\n 'eui-tabs': 'EuiTabsComponent',\n 'eui-timeline': 'EuiTimelineComponent',\n 'eui-timeline-item': 'EuiTimelineItemComponent',\n 'eui-timepicker': 'EuiTimepickerComponent',\n 'eui-toggle-group': 'EuiToggleGroupComponent',\n 'eui-toggle-group-item': 'EuiToggleGroupItemComponent',\n 'eui-toolbar-app': 'EuiToolbarAppComponent',\n 'eui-toolbar-items': 'EuiToolbarItemsComponent',\n 'eui-toolbar-logo': 'EuiToolbarLogoComponent',\n 'eui-toolbar-mega-menu': 'EuiToolbarMegaMenuComponent',\n 'eui-toolbar-mega-menu-container': 'EuiToolbarMegaMenuContainerComponent',\n 'eui-toolbar-navbar-item': 'EuiToolbarNavbarItemComponent',\n 'eui-toolbar-search': 'EuiToolbarSearchComponent',\n 'eui-toolbar-selector': 'EuiToolbarSelectorComponent',\n 'eui-tooltip-container.component': 'EuiTooltipContainerComponent',\n 'eui-tree': 'EuiTreeComponent',\n 'eui-tree-list': 'EuiTreeListComponent',\n 'eui-tree-list-item': 'EuiTreeListItemComponent',\n 'eui-tree-list-toolbar': 'EuiTreeListToolbarComponent',\n 'eui-tree[euiTreeFormControl]': 'EuiTreeFormControlDirective',\n 'eui-user-profile': 'EuiUserProfileComponent',\n 'eui-user-profile-card': 'EuiUserProfileCardComponent',\n 'eui-wizard': 'EuiWizardComponent',\n euiFieldsetLabelRightContent: 'EuiFieldsetLabelRightContentTagDirective',\n 'i[euiIconSvg]': 'EuiIconSvgComponent',\n 'input[euiAutocomplete]': 'EuiAutocompleteComponent',\n 'input[euiClearable]': 'EuiClearableDirective',\n 'input[euiInputCheckBox]': 'EuiInputCheckboxComponent',\n 'input[euiInputRadio]': 'EuiInputRadioComponent',\n 'input[euiInput]': 'InputDirective',\n 'li[euiChipButton]': 'EuiChipButtonComponent',\n 'li[euiChip]': 'EuiChipComponent',\n 'option:not([eclSelectOption]):not([eclMultiselectOption])': 'EuiNgSelectOptionDirective',\n 'option[euiOption]': 'EuiNgSelectOptionDirective',\n 'quill-editor': 'QuillEditorComponent',\n 'select[euiSelect]': 'EuiSelectComponent',\n 'span[euiAvatar]': 'EuiAvatarComponent',\n 'span[euiBadge]': 'EuiBadgeComponent',\n 'span[euiChipButton]': 'EuiChipButtonComponent',\n 'span[euiChip]': 'EuiChipComponent',\n 'span[euiIconColored]': 'EuiIconColorComponent',\n 'span[euiIconSvg]': 'EuiIconSvgComponent',\n 'span[euiStatusBadge]': 'EuiStatusBadgeComponent',\n 'table[euiTable]': 'EuiTableComponent',\n 'th[isSortable]': 'EuiTableSortableColComponent',\n 'tr[isDataSelectable]': 'EuiTableSelectableRowComponent',\n 'tr[isHeaderSelectable]': 'EuiTableSelectableHeaderComponent',\n}",
39566
+ "rawdescription": "Map of component/directive selectors to their class names.\nUsed to resolve",
39567
+ "description": "<p>Map of component/directive selectors to their class names.\nUsed to resolve</p>\n"
39568
+ },
39569
+ {
39570
+ "name": "EUI_SIGNAL_MAP",
39571
+ "ctype": "miscellaneous",
39572
+ "subtype": "variable",
39573
+ "file": "packages/core/schematics/migrate-to-signals/signal-map.ts",
39574
+ "coverageIgnore": false,
39575
+ "deprecated": false,
39576
+ "deprecationMessage": "",
39577
+ "type": "Record<string, ReadonlySet<string>>",
39578
+ "defaultValue": "{\n AppComponent: new Set(['appSubTitle', 'isShrinkHeaderActive', 'isSidebarHidden', 'isSidebarOpen', 'themeClass']),\n BaseStatesDirective: new Set(['euiBranding', 'euiClearable', 'euiCompact', 'euiDanger', 'euiDisabled', 'euiEnd', 'euiHighlighted', 'euiInfo', 'euiInverse', 'euiInverted', 'euiLoading', 'euiOutline', 'euiPrimary', 'euiResponsive', 'euiRounded', 'euiSecondary', 'euiSecondaryLight', 'euiSize2XL', 'euiSize2XS', 'euiSize3XL', 'euiSize4XL', 'euiSize5XL', 'euiSize6XL', 'euiSizeAuto', 'euiSizeL', 'euiSizeM', 'euiSizeS', 'euiSizeVariant', 'euiSizeXL', 'euiSizeXS', 'euiStart', 'euiSuccess', 'euiVariant', 'euiWarning']),\n EdsTabBody: new Set(['templateRef']),\n EdsTabHeader: new Set(['templateRef']),\n EdsTabs: new Set(['edsTabListItems', 'edsTabsHeaders', 'edsTabsHeadersContainer', 'edsTabsRightContent']),\n EuiAlertComponent: new Set(['cssClasses']),\n EuiAppSideContainerComponent: new Set(['euiResizableMinWidth', 'euiResizablePosition', 'hasOverlayClosedOnClickOutside', 'isActive', 'isOverlayActive']),\n EuiAppSidebarDrawerComponent: new Set(['isExpanded']),\n EuiAppSidebarHeaderUserProfileComponent: new Set(['avatarUrl', 'hasProfileDrawer', 'hasTabNavigation', 'hasToggle', 'hasWelcomeLabel', 'impersonateLabel', 'isOnline', 'isShowAvatarInitials', 'isShowUserInfos', 'welcomeLabel']),\n EuiAppSidebarMenuComponent: new Set(['expandAllItems', 'hasBoldRootLevel', 'hasCollapsedInitials', 'hasFilter', 'hasIcons', 'hasIconsLabels', 'hasScrollToItem', 'hasTooltip', 'hasTooltipOnExpanded', 'hasTooltipOnlyOnExpanded', 'isCollapsed', 'isFlat', 'items', 'menu']),\n EuiAppToolbarComponent: new Set(['euiSecondary']),\n EuiAppTopMessageComponent: new Set(['appTopMessage', 'hasCustomContent', 'isCloseable', 'isVisible']),\n EuiAutocompleteComponent: new Set(['autocompletePanel', 'input', 'inputContainerRef', 'templatePortalContent', 'templates']),\n EuiAutocompletePanelComponent: new Set(['virtualScrolling']),\n EuiAvatarBadgeComponent: new Set(['isPositionBottom']),\n EuiAvatarComponent: new Set(['ariaLabel', 'colorPalette', 'e2eAttr', 'hasNoBackground', 'hasShadow', 'isReverse', 'isShapeSquare']),\n EuiAvatarImageComponent: new Set(['imageUrl']),\n EuiBadgeComponent: new Set(['ariaLabel', 'charReplacement', 'colorPalette', 'content', 'e2eAttr', 'euiDottedBadge', 'euiIconBadge', 'maxCharCount']),\n EuiBannerComponent: new Set(['e2eAttr', 'euiInverse', 'euiPositionCenter', 'euiPositionTop', 'imageUrl', 'isVideoBanner']),\n EuiBlockDocumentComponent: new Set(['isBlocked']),\n EuiBreadcrumbItemComponent: new Set(['ariaLabel', 'iconSvgName', 'id', 'label', 'link', 'navigationExtras']),\n EuiButtonComponent: new Set(['e2eAttr', 'euiAvatarButton', 'euiBasicButton', 'euiBlockButton', 'euiCTAButton', 'euiDisabled', 'euiIconButton', 'euiLineWrap', 'hasNoFocusRing', 'id', 'isChecked', 'isCompact']),\n EuiButtonGroupComponent: new Set(['isCheckboxButtons', 'isRadioButtons']),\n EuiCardComponent: new Set(['e2eAttr', 'euiCollapsed', 'euiCollapsible', 'euiHoverable', 'euiNoContentPadding', 'euiNoShadow', 'euiSelected', 'euiUrgent', 'hasLeftExpander', 'isCompact']),\n EuiCardFooterMenuContentComponent: new Set(['tooltipText']),\n EuiCardHeaderComponent: new Set(['collapseLabel', 'expandLabel', 'hasBottomExpander', 'hasFullTitle', 'hasHeaderClickToggle', 'isClickeable', 'isHeaderMultilines']),\n EuiCardHeaderLeftContentComponent: new Set(['isTopAligned']),\n EuiCardMediaComponent: new Set(['imageClickUrl', 'imageClickUrlExternal', 'imageDescription', 'imageHeight', 'imageLegend', 'imageUrl']),\n EuiChipButtonComponent: new Set(['cssClasses', 'e2eAttr', 'euiInternalId', 'id', 'isFilled', 'tooltipMessage']),\n EuiChipComponent: new Set(['chipLabel', 'colorPalette', 'cssClasses', 'data', 'e2eAttr', 'euiInternalId', 'id', 'isChipRemovable', 'isFilled', 'tooltipMessage']),\n EuiChipGroupComponent: new Set(['cssClasses']),\n EuiChipListAppendContentDirective: new Set(['ariaLabel', 'cssClasses']),\n EuiClearableDirective: new Set(['euiClearable']),\n EuiCommentItemComponent: new Set(['authorAvatarUrl', 'authorName', 'comment', 'commentCharLimit', 'createdAt', 'currentAuthorAvatarUrl', 'hasChildren', 'nbSubCommentItems', 'subCommentItems']),\n EuiCommentTextareaComponent: new Set(['currentAuthorAvatarUrl', 'placeholder']),\n EuiCommentThreadComponent: new Set(['currentAuthorAvatarUrl', 'hasTextarea', 'isCollapsable', 'isOpen', 'nbSubCommentItems', 'placeholder', 'subCommentItems', 'textareaPosition']),\n EuiContentCardComponent: new Set(['e2eAttr', 'isBookmarkable', 'isBookmarked', 'isCollapsed', 'isCollapsible', 'isSelectable', 'isSelected']),\n EuiContentCardHeaderEndComponent: new Set(['bookmarkAccessKey']),\n EuiDashboardCardComponent: new Set(['colorPalette', 'e2eAttr', 'hasNoBackgroundAvatar', 'iconLabel', 'iconSvgName', 'iconSvgSize', 'imageUrl', 'isClickeable', 'isFlat', 'isFlatAvatar', 'isHorizontal', 'isStacked', 'label', 'labelMaxLines', 'subLabel', 'subLabelMaxLines', 'url', 'urlExternal', 'urlExternalTarget']),\n EuiDashboardCardContentHeaderIconComponent: new Set(['icon']),\n EuiDateBlockComponent: new Set(['blockDate', 'dateFormat', 'e2eAttr']),\n EuiDateRangeSelectorComponent: new Set(['comparisonEnd', 'comparisonStart', 'e2eAttr', 'endDateDefaultValue', 'firstInputAriaLabel', 'firstInputPlaceholder', 'hasSeconds', 'isClearable', 'isDisabled', 'isReadOnly', 'isResponsive', 'isTimeRange', 'islongDateFormat', 'maxDate', 'minDate', 'secondInputAriaLabel', 'secondInputPlaceholder', 'startDateDefaultValue', 'startDateId', 'startView', 'stepHours', 'stepMinutes', 'stepSeconds', 'togglerIconSvg', 'togglerLabel']),\n EuiDatepickerComponent: new Set(['calendar', 'customHeader', 'customPanelClass', 'dateClass', 'dateOutputFormat', 'datepickerFilter', 'e2eAttr', 'hasNoButton', 'hasSeconds', 'inputAriaLabel', 'inputId', 'inputRef', 'isButtonDisabled', 'isClearable', 'isDatepickerBlock', 'isDatetimepicker', 'isDisabled', 'isInputDisabled', 'isOneInputField', 'isPickerDisabled', 'isReadOnly', 'isShownOnInputClick', 'maxDate', 'minDate', 'placeholder', 'restrictToRegex', 'startView', 'stepHours', 'stepMinutes', 'stepSeconds', 'templatePortalRef', 'togglerIconSvg', 'togglerLabel', 'type', 'value']),\n EuiDialogComponent: new Set(['acceptLabel', 'classList', 'dismissLabel', 'e2eAttr', 'hasAcceptButton', 'hasCloseButton', 'hasClosedOnClickOutside', 'hasClosedOnEscape', 'hasDismissButton', 'hasFooter', 'hasMobileCustomSize', 'hasNoBodyPadding', 'height', 'isDraggable', 'isFullScreen', 'isHandleCloseOnAccept', 'isHandleCloseOnClickOutside', 'isHandleCloseOnClose', 'isHandleCloseOnDismiss', 'isHandleCloseOnEscape', 'isMessageBox', 'templateRefContent', 'templateRefFooter', 'templateRefHeader', 'title', 'verticalPosition', 'width']),\n EuiDialogContainerComponent: new Set(['closeButtonAriaLabel', 'dialogBody']),\n EuiDimmerComponent: new Set(['cssClasses', 'e2eAttr', 'isDimmerActive']),\n EuiDiscussionThreadComponent: new Set(['items', 'subTitleLabel', 'titleLabel', 'tooltip']),\n EuiDiscussionThreadItemComponent: new Set(['author', 'body', 'date', 'id', 'isOdd', 'tooltip', 'typeClass']),\n EuiDropdownComponent: new Set(['e2eAttr', 'euiDisabled', 'euiDropdownItems', 'hasClosedOnClickInside', 'hasTabNavigation', 'height', 'isBlock', 'isDropDownRightAligned', 'isExpandOnHover', 'isLabelUpdatedFromSelectedItem', 'isRightClickEnabled', 'isTriggerToggle', 'position', 'subDropdownPosition', 'tabIndex', 'templatePortalContent', 'triggerRef', 'width']),\n EuiDropdownItemComponent: new Set(['isActive', 'isFocus']),\n EuiDropdownTreeDirective: new Set(['buttonTemplateRef', 'euiTree']),\n EuiEditorComponent: new Set(['customToolbarConfig', 'customToolbarPosition', 'debug', 'e2eAttr', 'formats', 'height', 'id', 'isEnabledOnFocus', 'isMinimalToolbar', 'isReadOnly', 'modules', 'placeholder', 'showCounters', 'tabindex', 'theme']),\n EuiEditorCountersComponent: new Set(['charactersCounter', 'charactersLabel', 'hasCharactersCounter', 'hasWordsCounter', 'isMaxLengthValid', 'wordsCounter', 'wordsLabel']),\n EuiEditorJsonViewComponent: new Set(['content', 'theme']),\n EuiEditorMaxlengthDirective: new Set(['euiEditorMaxlength', 'format', 'isShowMaxlength']),\n EuiFeedbackMessageComponent: new Set(['cssClasses', 'isMuted']),\n EuiFieldsetLabelRightContentTagDirective: new Set(['e2eAttr', 'hasDefaultIcon', 'hasLeftExpander', 'iconClass', 'iconSvgFillColor', 'iconSvgName', 'id', 'isExpandable', 'isExpanded', 'isFirst', 'isLarge', 'label', 'templates']),\n EuiFilePreviewComponent: new Set(['file', 'hasPreview', 'hasPreviewAsIcon', 'hasPreviewAsImage', 'index', 'isFileObject', 'isFilenameDisplayed', 'isFilesizeDisplayed', 'isFiletypeDisplayed', 'isItemsClickable', 'previewAsIconConfig', 'templates', 'uploadedFileTemplate']),\n EuiFileUploadComponent: new Set(['accept', 'e2eAttr', 'fileInputs', 'hasDragArea', 'hasPreview', 'hasPreviewAsIcon', 'hasPreviewAsImage', 'hasProgressBar', 'hasResetButton', 'hasTotalSizeDisplayed', 'isItemsClickable', 'isMultiple', 'maxFiles', 'progress', 'templates']),\n EuiFileUploadProgressComponent: new Set(['progress']),\n EuiFooterComponent: new Set(['euiPrimary']),\n EuiGrowlComponent: new Set(['ariaLive', 'callback', 'closeAllSticky', 'cssClasses', 'e2eAttr', 'life', 'position', 'sticky', 'value']),\n EuiHeaderAppComponent: new Set(['appName', 'appShortName', 'appSubTitle']),\n EuiHeaderAppNameLogoComponent: new Set(['homeUrl', 'logoAltText', 'logoFilename']),\n EuiHeaderComponent: new Set(['rightContent']),\n EuiHeaderLogoComponent: new Set(['homeUrl', 'logoHeight', 'logoUrl', 'logoWidth']),\n EuiHeaderSearchComponent: new Set(['placeholder']),\n EuiHeaderUserProfileComponent: new Set(['avatarUrl', 'hasTabNavigation', 'hasWelcomeLabel', 'impersonateLabel', 'isShowAvatarInitials', 'isShowUserInfos', 'subInfos', 'userProfile', 'welcomeLabel']),\n EuiIconButtonComponent: new Set(['ariaLabel', 'euiDisabled', 'euiRounded', 'fillColor', 'hasFocusHoverBg', 'hasFocusHoverColor', 'hasNoPadding', 'hasOverflowHover', 'icon', 'iconUrl', 'size', 'tabindex']),\n EuiIconButtonExpanderComponent: new Set(['ariaLabel', 'euiDisabled', 'fillColor', 'isDirectionForward', 'isExpanded', 'size']),\n EuiIconColorComponent: new Set(['iconClass']),\n EuiIconInputComponent: new Set(['cssClasses', 'euiIconPositionEnd', 'euiIconPositionStart']),\n EuiIconStateComponent: new Set(['ariaLabel', 'cssClasses', 'size']),\n EuiIconSvgComponent: new Set(['euiEnd', 'euiStart', 'fillColor', 'focusable', 'iconUrl', 'isInputIcon', 'isLoading', 'style', 'transform']),\n EuiIconToggleComponent: new Set(['ariaLabel', 'e2eAttr', 'iconSvgFillColorOff', 'iconSvgFillColorOn', 'iconSvgNameOff', 'iconSvgNameOn', 'iconSvgSize', 'id', 'isChecked', 'isReadOnly', 'keyboardAccessKey', 'tabindex']),\n EuiInputButtonComponent: new Set(['cssClasses', 'euiButtonPositionEnd', 'euiButtonPositionStart']),\n EuiInputCheckboxComponent: new Set(['isInvalid']),\n EuiInputGroupAddOnComponent: new Set(['e2eAttr']),\n EuiInputGroupAddOnItemComponent: new Set(['e2eAttr']),\n EuiInputGroupComponent: new Set(['e2eAttr']),\n EuiInputRadioComponent: new Set(['isInvalid']),\n EuiLanguageSelectorComponent: new Set(['cssClasses', 'euiPrimary', 'hasLanguageSelection', 'isShowDropDown', 'isShowModal', 'isToolbarSelector']),\n EuiListItemComponent: new Set(['cssClasses', 'e2eAttr', 'isActive']),\n EuiLoadingDirective: new Set(['euiLoading']),\n EuiMenuComponent: new Set(['expandAllItems', 'externalLinkLabel', 'filterValue', 'fragmentId', 'hasBoldRootLevel', 'hasCollapsedInitials', 'hasFilter', 'hasIcons', 'hasIconsLabels', 'hasScrollToItem', 'hasTooltip', 'hasTooltipOnExpanded', 'hasTooltipOnlyOnExpanded', 'isCollapsed', 'isFlat', 'items', 'menubar', 'searchFilterLabel']),\n EuiMenuItemComponent: new Set(['hasBoldRootLevel', 'hasCollapsedInitials', 'hasExpandIcon', 'hasIcon', 'hasIconLabel', 'hasTooltip', 'hasTooltipOnExpanded', 'hasTooltipOnlyOnExpanded', 'isCollapsed', 'item', 'parent']),\n EuiMessageBoxComponent: new Set(['acceptLabel', 'dismissLabel', 'e2eAttr', 'hasAcceptButton', 'hasDismissButton', 'hasNoBodyPadding', 'height', 'isDraggable', 'isHandleCloseOnAccept', 'isHandleCloseOnClose', 'isHandleCloseOnDismiss', 'templateRefContent', 'templateRefFooter', 'title', 'width']),\n EuiNavbarItemComponent: new Set(['id', 'isActive', 'label']),\n EuiNgSelectOptionDirective: new Set(['label', 'selected']),\n EuiNotificationItemComponent: new Set(['dateFormat', 'isShowMarkAsRead', 'item', 'markAsReadLabel']),\n EuiNotificationItemV2Component: new Set(['dateFormat', 'isShowMarkAsRead', 'item', 'markAsReadLabel']),\n EuiNotificationsComponent: new Set(['count', 'customUnreadCount', 'dateFormat', 'headerHideLabel', 'headerTitleLabel', 'isHidePanelOnViewAllAction', 'isShowHideButton', 'isShowMarkAllAsReadButton', 'isShowMarkAsRead', 'isShowRefreshButton', 'isShowSettingsButton', 'isShowViewAllAction', 'items', 'markAllAsReadLabel', 'markAsReadLabel', 'markAsUnReadLabel', 'nbUnreadCount', 'noNotificationFoundLabel', 'noNotificationFoundLink', 'refreshLabel', 'settingsLabel', 'totalLabel', 'unreadLabel', 'viewAllNotificationsLabel']),\n EuiNotificationsV2Component: new Set(['count', 'dateFormat', 'headerHideLabel', 'headerTitleLabel', 'headerUnreadCountLabel', 'headerUnreadSinceLastCheckCountLabel', 'isHidePanelOnViewAllAction', 'isShowMarkAllAsReadButton', 'isShowMarkAsRead', 'isShowRefreshButton', 'isShowSettingsButton', 'isShowViewAllAction', 'items', 'markAllAsReadLabel', 'markAsReadLabel', 'markAsUnReadLabel', 'noNotificationFoundLabel', 'noNotificationFoundLink', 'refreshLabel', 'settingsLabel', 'totalLabel', 'unreadCount', 'unreadLabel', 'unreadSinceLastCheckCount', 'viewAllNotificationsLabel']),\n EuiOverlayComponent: new Set(['ariaLabel', 'euiHighlighted', 'fixedWidth', 'hasClosedOnClickOutside', 'isActive', 'position', 'width']),\n EuiOverlayHeaderTitleComponent: new Set(['headerTitleCount', 'headerTitleHideLabel', 'headerTitleLabel']),\n EuiPageColumnComponent: new Set(['autocloseContainerWidth', 'collapseAriaLabel', 'expandAriaLabel', 'hasHeaderBodyShrinkable', 'hasSidebarMenu', 'hasSubColumns', 'hasSubPanels', 'isAutocloseOnContainerResize', 'isAutocloseOnMobile', 'isCollapsed', 'isCollapsedHidden', 'isCollapsedWithIcons', 'isCollapsible', 'isHighlighted', 'isRightCollapsible', 'label', 'subLabel']),\n EuiPageColumnsComponent: new Set(['hasPreventMobileRendering']),\n EuiPageComponent: new Set(['columns']),\n EuiPageFooterComponent: new Set(['e2eAttr']),\n EuiPageHeaderComponent: new Set(['collapsedLabel', 'expandedLabel', 'isCollapsed', 'isCollapsible', 'isHeaderMultilines', 'label', 'labelTooltip', 'subLabel', 'subLabelTooltip']),\n EuiPageHeroHeaderComponent: new Set(['label', 'subLabel']),\n EuiPagePanelComponent: new Set(['collapseAriaLabel', 'collapsedLabel', 'expandAriaLabel', 'isCollapsed', 'isCollapsible', 'isRightCollapsible']),\n EuiPageTopContentComponent: new Set(['e2eAttr']),\n EuiPaginatorComponent: new Set(['e2eAttr', 'hasDynamicLength', 'hasPageNumberNavigation', 'hasPageNumberNavigationCompact', 'hasPageSize', 'isBasicMode', 'isHidden', 'length', 'nbPageNumberNavigation', 'page', 'pageSize', 'pageSizeOptions']),\n EuiPopoverComponent: new Set(['hasBackDrop', 'hasCloseButton', 'hasNoContentPadding', 'isDismissable', 'position', 'templatePortalContent', 'title', 'width']),\n EuiProgressBarComponent: new Set(['e2eAttr', 'hasStatusIcon', 'isIndeterminate', 'label', 'progress']),\n EuiProgressCircleComponent: new Set(['ariaLabel', 'labelValueEl', 'tabindex']),\n EuiRatingComponent: new Set(['ariaLabel', 'cssClasses', 'euiDisabled', 'numberOfStars', 'rating', 'ratingButtons']),\n EuiResizableComponent: new Set(['cssClasses']),\n EuiScrollHandlerDirective: new Set(['euiScrollHandler', 'euiScrollHandlerElement', 'toggleActiveHeight', 'toggleClass']),\n EuiSectionHeaderComponent: new Set(['e2eAttr', 'id', 'isExpandable', 'isExpanded', 'isFirst']),\n EuiSectionHeaderIconComponent: new Set(['icon']),\n EuiSelectComponent: new Set(['ariaLabel', 'isInvalid', 'placeholder', 'readonly']),\n EuiSidebarToggleComponent: new Set(['e2eAttr', 'iconSvgFillColor']),\n EuiSkeletonComponent: new Set(['cssClasses']),\n EuiSlideToggleComponent: new Set(['ariaLabel', 'cssClasses', 'disabled', 'iconSvgFillColorOff', 'iconSvgFillColorOn', 'iconSvgNameOff', 'iconSvgNameOn', 'id', 'isChecked']),\n EuiSliderComponent: new Set(['cssClasses', 'endHandler', 'endHandlerContainer', 'endInputRange', 'formattedEndValue', 'formattedStartValue', 'handlers', 'inputRanges', 'sliderContainer', 'startHandler', 'startHandlerContainer', 'startInputRange', 'trackActive']),\n EuiSmoothScrollToDirective: new Set(['callbackAfter', 'callbackBefore', 'containerId', 'duration', 'easing', 'middleAlign', 'offset', 'scrollIf', 'scrollOnClick', 'scrollTo']),\n EuiStatusBadgeComponent: new Set(['ariaLabel', 'colorPalette', 'cssClasses', 'e2eAttr', 'euiDottedBadge']),\n EuiTabBodyComponent: new Set(['hasNoContentPadding', 'templateRef']),\n EuiTabComponent: new Set(['e2eAttr', 'euiVariant', 'id', 'isClosable', 'isDisabled', 'isHandleActivateTab', 'isHandleCloseOnClose', 'isVisible', 'tooltip', 'url']),\n EuiTabHeaderComponent: new Set(['templateRef']),\n EuiTableComponent: new Set(['data', 'filter', 'hasStickyCols', 'hasStickyFooter', 'hasStickyHeader', 'isAsync', 'isColsOrderable', 'isLoading', 'isSelectOnlyVisibleRows', 'isTableBordered', 'isTableCompact', 'isTableFixedLayout', 'isTableResponsive', 'isVirtualScroll', 'isVirtualScrollCache', 'itemSize', 'paginator', 'preselectedRows', 'propId', 'tbodyRef', 'templates', 'tfootRef', 'theadRef', 'virtualScrollAsyncItemsLength', 'virtualScrollNbRows']),\n EuiTableFilterComponent: new Set(['filterInput', 'placeholder']),\n EuiTableSelectableHeaderComponent: new Set(['isHeaderSelectable']),\n EuiTableSelectableRowComponent: new Set(['isChecked', 'isDataSelectable', 'isKeyboardSelectable', 'isSingleSelectable']),\n EuiTableSortableColComponent: new Set(['defaultOrder', 'euiDropdown', 'isMultiSortable', 'sortDisabled']),\n EuiTabsComponent: new Set(['activeTabIndex', 'ariaLabel', 'e2eAttr', 'euiTabListItems', 'euiTabsHeaders', 'euiTabsHeadersContainer', 'euiTabsRightContent', 'isFlat', 'isMainNavigation']),\n EuiTemplateDirective: new Set(['name', 'type']),\n EuiTimelineComponent: new Set(['cssClasses', 'e2eAttr', 'isLeftAligned']),\n EuiTimelineItemComponent: new Set(['cssClasses', 'date', 'dateStyleClass', 'e2eAttr', 'isGroup', 'isLeftAligned', 'label', 'subLabel', 'time', 'timeStyleClass']),\n EuiTimepickerComponent: new Set(['e2eAttr', 'hasSeconds', 'iconSize', 'inputId', 'isDisabled', 'isOneInputField', 'isreadOnly', 'placeholder', 'stepHours', 'stepMinutes', 'stepSeconds', 'timeMask']),\n EuiToggleGroupComponent: new Set(['isFluid', 'isMultiple']),\n EuiToggleGroupItemComponent: new Set(['id', 'isChecked']),\n EuiToolbarAppComponent: new Set(['appName', 'appSubTitle']),\n EuiToolbarItemsComponent: new Set(['euiEnd', 'euiPositionRight']),\n EuiToolbarLogoComponent: new Set(['homeUrl', 'logoAltText', 'logoHeight', 'logoUrl', 'logoWidth']),\n EuiToolbarMegaMenuComponent: new Set(['ariaLabel', 'id', 'items', 'menuItemLinks', 'subMenuComponent', 'templatePortalContent']),\n EuiToolbarMegaMenuContainerComponent: new Set(['activeMenu', 'ariaLabel', 'megaMenuItemsGrouped', 'submenuItemLinks']),\n EuiToolbarNavbarItemComponent: new Set(['id', 'isActive', 'label']),\n EuiToolbarSearchComponent: new Set(['hasExpandAnimation', 'hasSearchButton', 'isAutocomplete', 'isInputText', 'panelWidth', 'placeholderLabel', 'searchResults', 'templates']),\n EuiToolbarSelectorComponent: new Set(['euiDisabled', 'iconSvgName', 'label']),\n EuiTooltipContainerComponent: new Set(['cssClasses']),\n EuiTooltipDirective: new Set(['contentAlignment', 'e2eAttr', 'euiTooltipAccent', 'euiTooltipDanger', 'euiTooltipInfo', 'euiTooltipPrimary', 'euiTooltipSecondary', 'euiTooltipSuccess', 'euiTooltipWarning', 'hideDelay', 'isDisabled', 'position', 'showDelay']),\n EuiTreeComponent: new Set(['autoTranslate', 'cdkScrollableRef', 'collapsedSvgIconClass', 'customNodeSelectFn', 'e2eAttr', 'expandedSvgIconClass', 'highlightPath', 'isClickTogglingNode', 'isMultiselect', 'isRecursiveParentSelection', 'isRecursiveSelection', 'isSingleSelect', 'nodeContentMetadataTemplateRef', 'nodeTemplateRef', 'rightContextMenuTemplateRef', 'showLines', 'showUnderlinedLinks', 'treeComponentInstance', 'virtualScrollPageSize', 'virtualScrollThreshold']),\n EuiTreeFormControlDirective: new Set(['euiTreeControlModelMapper', 'euiTreeControlValueSetter']),\n EuiTreeListComponent: new Set(['ariaLabel', 'collapseAllLabel', 'e2eAttr', 'expandAllLabel', 'filterFunction', 'filterLabel', 'hasItemsUrl', 'isExpanded', 'isShowToolbar', 'isShowToolbarToggle', 'tabindex', 'toolbarFilterValue']),\n EuiTreeListItemComponent: new Set(['focusable', 'isActive', 'isAlwaysExpanded', 'isDisplaySubLinksOnHover', 'isNavigateOnlyOnLabelClick', 'label', 'linkUrl', 'subLinks', 'url']),\n EuiTreeListToolbarComponent: new Set(['collapseAllLabel', 'e2eAttr', 'expandAllLabel', 'filterLabel', 'hasLabels', 'isFilterVisible', 'isToggleVisible', 'isVisible']),\n EuiUserProfileCardComponent: new Set(['avatarUrl', 'impersonateLabel', 'isShowAvatar', 'isShowAvatarInitials', 'isShowClose', 'isShowUserInfos', 'profileCardHideLabel', 'reverseNameOrder', 'showDetailsLabel']),\n EuiUserProfileComponent: new Set(['avatarUrl', 'dropContentWidth', 'dropdown', 'euiStatusDanger', 'euiStatusSecondary', 'euiStatusSuccess', 'hasMenu', 'hasTabNavigation', 'hasToggle', 'hasWelcomeLabel', 'impersonateLabel', 'isHeaderUserProfile', 'isMobileOnly', 'isReverse', 'isShowAvatarInitials', 'isShowUserInfos', 'isToolbarUserProfile', 'reverseNameOrder', 'statusVariant', 'subInfos', 'welcomeLabel']),\n EuiWizardComponent: new Set(['activeStepIndex', 'canBeFocused', 'childrenSteps', 'e2eAttr', 'isCustomContent', 'isNavigationAllowed', 'isShowStepTitle', 'steps', 'tabindex']),\n InputDirective: new Set(['disabled', 'euiDanger', 'euiDisabled', 'placeholder', 'readonly']),\n QuillEditorComponent: new Set(['bounds', 'customOptions', 'customToolbarPosition', 'debug', 'format', 'formats', 'hasImageFeature', 'id', 'maxLength', 'minLength', 'modules', 'placeholder', 'preserveWhitespace', 'readOnly', 'required', 'sanitize', 'scrollingContainer', 'strict', 'styles', 'theme', 'trackChanges', 'valueGetter', 'valueSetter']),\n}",
39579
+ "rawdescription": "Auto-generated map of EUI component classes whose",
39580
+ "description": "<p>Auto-generated map of EUI component classes whose</p>\n"
39581
+ }
39582
+ ],
38542
39583
  "packages/core/src/lib/helpers/format-helpers.ts": [
38543
39584
  {
38544
39585
  "name": "formatNumber",
@@ -47666,6 +48707,841 @@
47666
48707
  ]
47667
48708
  }
47668
48709
  ],
48710
+ "packages/core/schematics/migrate-to-signals/index.ts": [
48711
+ {
48712
+ "name": "applyEdits",
48713
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
48714
+ "ctype": "miscellaneous",
48715
+ "subtype": "function",
48716
+ "coverageIgnore": false,
48717
+ "deprecated": false,
48718
+ "deprecationMessage": "",
48719
+ "rawdescription": "",
48720
+ "description": "",
48721
+ "displayName": "applyEdits",
48722
+ "args": [
48723
+ {
48724
+ "name": "source",
48725
+ "type": "string",
48726
+ "deprecated": false,
48727
+ "deprecationMessage": ""
48728
+ },
48729
+ {
48730
+ "name": "edits",
48731
+ "deprecated": false,
48732
+ "deprecationMessage": ""
48733
+ }
48734
+ ],
48735
+ "returnType": "string",
48736
+ "jsdoctags": [
48737
+ {
48738
+ "name": "source",
48739
+ "type": "string",
48740
+ "deprecated": false,
48741
+ "deprecationMessage": "",
48742
+ "tagName": {
48743
+ "text": "param"
48744
+ }
48745
+ },
48746
+ {
48747
+ "name": "edits",
48748
+ "deprecated": false,
48749
+ "deprecationMessage": "",
48750
+ "tagName": {
48751
+ "text": "param"
48752
+ }
48753
+ }
48754
+ ]
48755
+ },
48756
+ {
48757
+ "name": "buildTemplateRefMap",
48758
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
48759
+ "ctype": "miscellaneous",
48760
+ "subtype": "function",
48761
+ "coverageIgnore": false,
48762
+ "deprecated": false,
48763
+ "deprecationMessage": "",
48764
+ "rawdescription": "Builds a map of template reference variable names (#ref) to EUI class names.\n\nParses the component's template (inline or external) and finds elements like:\n <eui-alert #myAlert> → myAlert → EuiAlertComponent\n <input euiAutocomplete #ac> → ac → EuiAutocompleteComponent\n\nReturns Map<refName, euiClassName>.",
48765
+ "description": "<p>Builds a map of template reference variable names (#ref) to EUI class names.</p>\n<p>Parses the component&#39;s template (inline or external) and finds elements like:\n &lt;eui-alert #myAlert&gt; → myAlert → EuiAlertComponent\n &lt;input euiAutocomplete #ac&gt; → ac → EuiAutocompleteComponent</p>\n<p>Returns Map&lt;refName, euiClassName&gt;.</p>\n",
48766
+ "displayName": "buildTemplateRefMap",
48767
+ "args": [
48768
+ {
48769
+ "name": "sourceFile",
48770
+ "deprecated": false,
48771
+ "deprecationMessage": ""
48772
+ },
48773
+ {
48774
+ "name": "source",
48775
+ "type": "string",
48776
+ "deprecated": false,
48777
+ "deprecationMessage": ""
48778
+ },
48779
+ {
48780
+ "name": "filePath",
48781
+ "type": "string",
48782
+ "deprecated": false,
48783
+ "deprecationMessage": ""
48784
+ },
48785
+ {
48786
+ "name": "tree",
48787
+ "type": "Tree",
48788
+ "deprecated": false,
48789
+ "deprecationMessage": ""
48790
+ }
48791
+ ],
48792
+ "returnType": "Map<string, string>",
48793
+ "jsdoctags": [
48794
+ {
48795
+ "name": "sourceFile",
48796
+ "deprecated": false,
48797
+ "deprecationMessage": "",
48798
+ "tagName": {
48799
+ "text": "param"
48800
+ }
48801
+ },
48802
+ {
48803
+ "name": "source",
48804
+ "type": "string",
48805
+ "deprecated": false,
48806
+ "deprecationMessage": "",
48807
+ "tagName": {
48808
+ "text": "param"
48809
+ }
48810
+ },
48811
+ {
48812
+ "name": "filePath",
48813
+ "type": "string",
48814
+ "deprecated": false,
48815
+ "deprecationMessage": "",
48816
+ "tagName": {
48817
+ "text": "param"
48818
+ }
48819
+ },
48820
+ {
48821
+ "name": "tree",
48822
+ "type": "Tree",
48823
+ "deprecated": false,
48824
+ "deprecationMessage": "",
48825
+ "tagName": {
48826
+ "text": "param"
48827
+ }
48828
+ }
48829
+ ]
48830
+ },
48831
+ {
48832
+ "name": "collectEuiReferences",
48833
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
48834
+ "ctype": "miscellaneous",
48835
+ "subtype": "function",
48836
+ "coverageIgnore": false,
48837
+ "deprecated": false,
48838
+ "deprecationMessage": "",
48839
+ "rawdescription": "Scans the source file for class properties or variables typed as EUI component classes.\nReturns a map: localName → Set of signal property names.\n\nHandles:",
48840
+ "description": "<p>Scans the source file for class properties or variables typed as EUI component classes.\nReturns a map: localName → Set of signal property names.</p>\n<p>Handles:</p>\n",
48841
+ "displayName": "collectEuiReferences",
48842
+ "args": [
48843
+ {
48844
+ "name": "sourceFile",
48845
+ "deprecated": false,
48846
+ "deprecationMessage": ""
48847
+ },
48848
+ {
48849
+ "name": "source",
48850
+ "type": "string",
48851
+ "deprecated": false,
48852
+ "deprecationMessage": ""
48853
+ },
48854
+ {
48855
+ "name": "templateRefMap",
48856
+ "type": "Map",
48857
+ "deprecated": false,
48858
+ "deprecationMessage": ""
48859
+ }
48860
+ ],
48861
+ "returnType": "Map<string, ReadonlySet<string>>",
48862
+ "jsdoctags": [
48863
+ {
48864
+ "name": "sourceFile",
48865
+ "deprecated": false,
48866
+ "deprecationMessage": "",
48867
+ "tagName": {
48868
+ "text": "param"
48869
+ }
48870
+ },
48871
+ {
48872
+ "name": "source",
48873
+ "type": "string",
48874
+ "deprecated": false,
48875
+ "deprecationMessage": "",
48876
+ "tagName": {
48877
+ "text": "param"
48878
+ }
48879
+ },
48880
+ {
48881
+ "name": "templateRefMap",
48882
+ "type": "Map",
48883
+ "deprecated": false,
48884
+ "deprecationMessage": "",
48885
+ "tagName": {
48886
+ "text": "param"
48887
+ }
48888
+ }
48889
+ ]
48890
+ },
48891
+ {
48892
+ "name": "collectTemplateRefs",
48893
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
48894
+ "ctype": "miscellaneous",
48895
+ "subtype": "function",
48896
+ "coverageIgnore": false,
48897
+ "deprecated": false,
48898
+ "deprecationMessage": "",
48899
+ "rawdescription": "Recursively walks template AST nodes, collecting #refName → EUI class name mappings.\n\nFor each element with a template reference (#ref), we try to resolve its EUI class:\n1. Match element tag name against EUI_SELECTOR_TO_CLASS (e.g. 'eui-alert' → EuiAlertComponent)\n2. Match element attributes against attribute selectors (e.g. [euiAutocomplete] → EuiAutocompleteComponent)",
48900
+ "description": "<p>Recursively walks template AST nodes, collecting #refName → EUI class name mappings.</p>\n<p>For each element with a template reference (#ref), we try to resolve its EUI class:</p>\n<ol>\n<li>Match element tag name against EUI_SELECTOR_TO_CLASS (e.g. &#39;eui-alert&#39; → EuiAlertComponent)</li>\n<li>Match element attributes against attribute selectors (e.g. [euiAutocomplete] → EuiAutocompleteComponent)</li>\n</ol>\n",
48901
+ "displayName": "collectTemplateRefs",
48902
+ "args": [
48903
+ {
48904
+ "name": "nodes",
48905
+ "deprecated": false,
48906
+ "deprecationMessage": ""
48907
+ },
48908
+ {
48909
+ "name": "refMap",
48910
+ "type": "Map",
48911
+ "deprecated": false,
48912
+ "deprecationMessage": ""
48913
+ }
48914
+ ],
48915
+ "returnType": "void",
48916
+ "jsdoctags": [
48917
+ {
48918
+ "name": "nodes",
48919
+ "deprecated": false,
48920
+ "deprecationMessage": "",
48921
+ "tagName": {
48922
+ "text": "param"
48923
+ }
48924
+ },
48925
+ {
48926
+ "name": "refMap",
48927
+ "type": "Map",
48928
+ "deprecated": false,
48929
+ "deprecationMessage": "",
48930
+ "tagName": {
48931
+ "text": "param"
48932
+ }
48933
+ }
48934
+ ]
48935
+ },
48936
+ {
48937
+ "name": "deduplicateEdits",
48938
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
48939
+ "ctype": "miscellaneous",
48940
+ "subtype": "function",
48941
+ "coverageIgnore": false,
48942
+ "deprecated": false,
48943
+ "deprecationMessage": "",
48944
+ "rawdescription": "",
48945
+ "description": "",
48946
+ "displayName": "deduplicateEdits",
48947
+ "args": [
48948
+ {
48949
+ "name": "edits",
48950
+ "deprecated": false,
48951
+ "deprecationMessage": ""
48952
+ }
48953
+ ],
48954
+ "returnType": "Edit[]",
48955
+ "jsdoctags": [
48956
+ {
48957
+ "name": "edits",
48958
+ "deprecated": false,
48959
+ "deprecationMessage": "",
48960
+ "tagName": {
48961
+ "text": "param"
48962
+ }
48963
+ }
48964
+ ]
48965
+ },
48966
+ {
48967
+ "name": "findComponentMetadata",
48968
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
48969
+ "ctype": "miscellaneous",
48970
+ "subtype": "function",
48971
+ "coverageIgnore": false,
48972
+ "deprecated": false,
48973
+ "deprecationMessage": "",
48974
+ "rawdescription": "Extracts",
48975
+ "description": "<p>Extracts</p>\n",
48976
+ "displayName": "findComponentMetadata",
48977
+ "args": [
48978
+ {
48979
+ "name": "sourceFile",
48980
+ "deprecated": false,
48981
+ "deprecationMessage": ""
48982
+ },
48983
+ {
48984
+ "name": "source",
48985
+ "type": "string",
48986
+ "deprecated": false,
48987
+ "deprecationMessage": ""
48988
+ }
48989
+ ],
48990
+ "returnType": "literal type | null",
48991
+ "jsdoctags": [
48992
+ {
48993
+ "name": "sourceFile",
48994
+ "deprecated": false,
48995
+ "deprecationMessage": "",
48996
+ "tagName": {
48997
+ "text": "param"
48998
+ }
48999
+ },
49000
+ {
49001
+ "name": "source",
49002
+ "type": "string",
49003
+ "deprecated": false,
49004
+ "deprecationMessage": "",
49005
+ "tagName": {
49006
+ "text": "param"
49007
+ }
49008
+ }
49009
+ ]
49010
+ },
49011
+ {
49012
+ "name": "getDecoratorName",
49013
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49014
+ "ctype": "miscellaneous",
49015
+ "subtype": "function",
49016
+ "coverageIgnore": false,
49017
+ "deprecated": false,
49018
+ "deprecationMessage": "",
49019
+ "rawdescription": "",
49020
+ "description": "",
49021
+ "displayName": "getDecoratorName",
49022
+ "args": [
49023
+ {
49024
+ "name": "callExpr",
49025
+ "deprecated": false,
49026
+ "deprecationMessage": ""
49027
+ }
49028
+ ],
49029
+ "returnType": "string | null",
49030
+ "jsdoctags": [
49031
+ {
49032
+ "name": "callExpr",
49033
+ "deprecated": false,
49034
+ "deprecationMessage": "",
49035
+ "tagName": {
49036
+ "text": "param"
49037
+ }
49038
+ }
49039
+ ]
49040
+ },
49041
+ {
49042
+ "name": "getTypeAnnotationName",
49043
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49044
+ "ctype": "miscellaneous",
49045
+ "subtype": "function",
49046
+ "coverageIgnore": false,
49047
+ "deprecated": false,
49048
+ "deprecationMessage": "",
49049
+ "rawdescription": "",
49050
+ "description": "",
49051
+ "displayName": "getTypeAnnotationName",
49052
+ "args": [
49053
+ {
49054
+ "name": "typeNode",
49055
+ "deprecated": false,
49056
+ "deprecationMessage": ""
49057
+ }
49058
+ ],
49059
+ "returnType": "string | null",
49060
+ "jsdoctags": [
49061
+ {
49062
+ "name": "typeNode",
49063
+ "deprecated": false,
49064
+ "deprecationMessage": "",
49065
+ "tagName": {
49066
+ "text": "param"
49067
+ }
49068
+ }
49069
+ ]
49070
+ },
49071
+ {
49072
+ "name": "hasEuiReference",
49073
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49074
+ "ctype": "miscellaneous",
49075
+ "subtype": "function",
49076
+ "coverageIgnore": false,
49077
+ "deprecated": false,
49078
+ "deprecationMessage": "",
49079
+ "rawdescription": "Quick check: does the file reference any EUI class name from the signal map?",
49080
+ "description": "<p>Quick check: does the file reference any EUI class name from the signal map?</p>\n",
49081
+ "displayName": "hasEuiReference",
49082
+ "args": [
49083
+ {
49084
+ "name": "source",
49085
+ "type": "string",
49086
+ "deprecated": false,
49087
+ "deprecationMessage": ""
49088
+ }
49089
+ ],
49090
+ "returnType": "boolean",
49091
+ "jsdoctags": [
49092
+ {
49093
+ "name": "source",
49094
+ "type": "string",
49095
+ "deprecated": false,
49096
+ "deprecationMessage": "",
49097
+ "tagName": {
49098
+ "text": "param"
49099
+ }
49100
+ }
49101
+ ]
49102
+ },
49103
+ {
49104
+ "name": "hasStringRefQuery",
49105
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49106
+ "ctype": "miscellaneous",
49107
+ "subtype": "function",
49108
+ "coverageIgnore": false,
49109
+ "deprecated": false,
49110
+ "deprecationMessage": "",
49111
+ "rawdescription": "Quick check: does the file have",
49112
+ "description": "<p>Quick check: does the file have</p>\n",
49113
+ "displayName": "hasStringRefQuery",
49114
+ "args": [
49115
+ {
49116
+ "name": "source",
49117
+ "type": "string",
49118
+ "deprecated": false,
49119
+ "deprecationMessage": ""
49120
+ }
49121
+ ],
49122
+ "returnType": "boolean",
49123
+ "jsdoctags": [
49124
+ {
49125
+ "name": "source",
49126
+ "type": "string",
49127
+ "deprecated": false,
49128
+ "deprecationMessage": "",
49129
+ "tagName": {
49130
+ "text": "param"
49131
+ }
49132
+ }
49133
+ ]
49134
+ },
49135
+ {
49136
+ "name": "isAssignmentOperator",
49137
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49138
+ "ctype": "miscellaneous",
49139
+ "subtype": "function",
49140
+ "coverageIgnore": false,
49141
+ "deprecated": false,
49142
+ "deprecationMessage": "",
49143
+ "rawdescription": "",
49144
+ "description": "",
49145
+ "displayName": "isAssignmentOperator",
49146
+ "args": [
49147
+ {
49148
+ "name": "kind",
49149
+ "deprecated": false,
49150
+ "deprecationMessage": ""
49151
+ }
49152
+ ],
49153
+ "returnType": "boolean",
49154
+ "jsdoctags": [
49155
+ {
49156
+ "name": "kind",
49157
+ "deprecated": false,
49158
+ "deprecationMessage": "",
49159
+ "tagName": {
49160
+ "text": "param"
49161
+ }
49162
+ }
49163
+ ]
49164
+ },
49165
+ {
49166
+ "name": "migrateToSignals",
49167
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49168
+ "ctype": "miscellaneous",
49169
+ "subtype": "function",
49170
+ "coverageIgnore": false,
49171
+ "deprecated": false,
49172
+ "deprecationMessage": "",
49173
+ "rawdescription": "Migrates consumer code that accesses EUI component instances programmatically.\n\nWhen EUI migrated",
49174
+ "description": "<p>Migrates consumer code that accesses EUI component instances programmatically.</p>\n<p>When EUI migrated</p>\n",
49175
+ "displayName": "migrateToSignals",
49176
+ "args": [
49177
+ {
49178
+ "name": "options",
49179
+ "type": "Schema",
49180
+ "deprecated": false,
49181
+ "deprecationMessage": "",
49182
+ "defaultValue": "{}"
49183
+ }
49184
+ ],
49185
+ "returnType": "Rule",
49186
+ "jsdoctags": [
49187
+ {
49188
+ "name": "options",
49189
+ "type": "Schema",
49190
+ "deprecated": false,
49191
+ "deprecationMessage": "",
49192
+ "defaultValue": "{}",
49193
+ "tagName": {
49194
+ "text": "param"
49195
+ }
49196
+ }
49197
+ ]
49198
+ },
49199
+ {
49200
+ "name": "migrateTypeScript",
49201
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49202
+ "ctype": "miscellaneous",
49203
+ "subtype": "function",
49204
+ "coverageIgnore": false,
49205
+ "deprecated": false,
49206
+ "deprecationMessage": "",
49207
+ "rawdescription": "",
49208
+ "description": "",
49209
+ "displayName": "migrateTypeScript",
49210
+ "args": [
49211
+ {
49212
+ "name": "source",
49213
+ "type": "string",
49214
+ "deprecated": false,
49215
+ "deprecationMessage": ""
49216
+ },
49217
+ {
49218
+ "name": "filePath",
49219
+ "type": "string",
49220
+ "deprecated": false,
49221
+ "deprecationMessage": ""
49222
+ },
49223
+ {
49224
+ "name": "tree",
49225
+ "type": "Tree",
49226
+ "deprecated": false,
49227
+ "deprecationMessage": ""
49228
+ },
49229
+ {
49230
+ "name": "context",
49231
+ "type": "SchematicContext",
49232
+ "deprecated": false,
49233
+ "deprecationMessage": ""
49234
+ }
49235
+ ],
49236
+ "returnType": "MigrateResult",
49237
+ "jsdoctags": [
49238
+ {
49239
+ "name": "source",
49240
+ "type": "string",
49241
+ "deprecated": false,
49242
+ "deprecationMessage": "",
49243
+ "tagName": {
49244
+ "text": "param"
49245
+ }
49246
+ },
49247
+ {
49248
+ "name": "filePath",
49249
+ "type": "string",
49250
+ "deprecated": false,
49251
+ "deprecationMessage": "",
49252
+ "tagName": {
49253
+ "text": "param"
49254
+ }
49255
+ },
49256
+ {
49257
+ "name": "tree",
49258
+ "type": "Tree",
49259
+ "deprecated": false,
49260
+ "deprecationMessage": "",
49261
+ "tagName": {
49262
+ "text": "param"
49263
+ }
49264
+ },
49265
+ {
49266
+ "name": "context",
49267
+ "type": "SchematicContext",
49268
+ "deprecated": false,
49269
+ "deprecationMessage": "",
49270
+ "tagName": {
49271
+ "text": "param"
49272
+ }
49273
+ }
49274
+ ]
49275
+ },
49276
+ {
49277
+ "name": "resolveElementToEuiClass",
49278
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49279
+ "ctype": "miscellaneous",
49280
+ "subtype": "function",
49281
+ "coverageIgnore": false,
49282
+ "deprecated": false,
49283
+ "deprecationMessage": "",
49284
+ "rawdescription": "Given a template element, resolves it to an EUI class name by checking:\n1. Tag name: <eui-alert> → look up 'eui-alert' in EUI_SELECTOR_TO_CLASS\n2. Attribute selectors: <input euiAutocomplete> → look up 'input[euiAutocomplete]' or '[euiAutocomplete]'",
49285
+ "description": "<p>Given a template element, resolves it to an EUI class name by checking:</p>\n<ol>\n<li>Tag name: <eui-alert> → look up &#39;eui-alert&#39; in EUI_SELECTOR_TO_CLASS</li>\n<li>Attribute selectors: <input euiAutocomplete> → look up &#39;input[euiAutocomplete]&#39; or &#39;[euiAutocomplete]&#39;</li>\n</ol>\n",
49286
+ "displayName": "resolveElementToEuiClass",
49287
+ "args": [
49288
+ {
49289
+ "name": "element",
49290
+ "type": "TmplAstElement",
49291
+ "deprecated": false,
49292
+ "deprecationMessage": ""
49293
+ }
49294
+ ],
49295
+ "returnType": "string | null",
49296
+ "jsdoctags": [
49297
+ {
49298
+ "name": "element",
49299
+ "type": "TmplAstElement",
49300
+ "deprecated": false,
49301
+ "deprecationMessage": "",
49302
+ "tagName": {
49303
+ "text": "param"
49304
+ }
49305
+ }
49306
+ ]
49307
+ },
49308
+ {
49309
+ "name": "resolveEuiClassName",
49310
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49311
+ "ctype": "miscellaneous",
49312
+ "subtype": "function",
49313
+ "coverageIgnore": false,
49314
+ "deprecated": false,
49315
+ "deprecationMessage": "",
49316
+ "rawdescription": "Resolves the EUI class name from a property declaration.\nChecks: type annotation → decorator class argument → template ref map.",
49317
+ "description": "<p>Resolves the EUI class name from a property declaration.\nChecks: type annotation → decorator class argument → template ref map.</p>\n",
49318
+ "displayName": "resolveEuiClassName",
49319
+ "args": [
49320
+ {
49321
+ "name": "node",
49322
+ "deprecated": false,
49323
+ "deprecationMessage": ""
49324
+ },
49325
+ {
49326
+ "name": "sourceFile",
49327
+ "deprecated": false,
49328
+ "deprecationMessage": ""
49329
+ },
49330
+ {
49331
+ "name": "templateRefMap",
49332
+ "type": "Map",
49333
+ "deprecated": false,
49334
+ "deprecationMessage": ""
49335
+ }
49336
+ ],
49337
+ "returnType": "string | null",
49338
+ "jsdoctags": [
49339
+ {
49340
+ "name": "node",
49341
+ "deprecated": false,
49342
+ "deprecationMessage": "",
49343
+ "tagName": {
49344
+ "text": "param"
49345
+ }
49346
+ },
49347
+ {
49348
+ "name": "sourceFile",
49349
+ "deprecated": false,
49350
+ "deprecationMessage": "",
49351
+ "tagName": {
49352
+ "text": "param"
49353
+ }
49354
+ },
49355
+ {
49356
+ "name": "templateRefMap",
49357
+ "type": "Map",
49358
+ "deprecated": false,
49359
+ "deprecationMessage": "",
49360
+ "tagName": {
49361
+ "text": "param"
49362
+ }
49363
+ }
49364
+ ]
49365
+ },
49366
+ {
49367
+ "name": "resolveRefName",
49368
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49369
+ "ctype": "miscellaneous",
49370
+ "subtype": "function",
49371
+ "coverageIgnore": false,
49372
+ "deprecated": false,
49373
+ "deprecationMessage": "",
49374
+ "rawdescription": "Resolves a reference name from an expression.\nHandles: `ref`, `this.ref`, `this._ref`",
49375
+ "description": "<p>Resolves a reference name from an expression.\nHandles: <code>ref</code>, <code>this.ref</code>, <code>this._ref</code></p>\n",
49376
+ "displayName": "resolveRefName",
49377
+ "args": [
49378
+ {
49379
+ "name": "expr",
49380
+ "deprecated": false,
49381
+ "deprecationMessage": ""
49382
+ }
49383
+ ],
49384
+ "returnType": "string | null",
49385
+ "jsdoctags": [
49386
+ {
49387
+ "name": "expr",
49388
+ "deprecated": false,
49389
+ "deprecationMessage": "",
49390
+ "tagName": {
49391
+ "text": "param"
49392
+ }
49393
+ }
49394
+ ]
49395
+ },
49396
+ {
49397
+ "name": "tryRewritePropertyAccess",
49398
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49399
+ "ctype": "miscellaneous",
49400
+ "subtype": "function",
49401
+ "coverageIgnore": false,
49402
+ "deprecated": false,
49403
+ "deprecationMessage": "",
49404
+ "rawdescription": "Checks if a property access `ref.prop` should be rewritten to `ref.prop()`.\n\nWe rewrite if:\n- `ref` is tracked in euiRefs\n- `prop` is in the signal set for that EUI class\n- The access is NOT already a call expression (not `ref.prop()` or `ref.prop(args)`)\n- The access is NOT a write target (not `ref.prop = value`)\n- The access is NOT a template binding argument (those are unaffected)",
49405
+ "description": "<p>Checks if a property access <code>ref.prop</code> should be rewritten to <code>ref.prop()</code>.</p>\n<p>We rewrite if:</p>\n<ul>\n<li><code>ref</code> is tracked in euiRefs</li>\n<li><code>prop</code> is in the signal set for that EUI class</li>\n<li>The access is NOT already a call expression (not <code>ref.prop()</code> or <code>ref.prop(args)</code>)</li>\n<li>The access is NOT a write target (not <code>ref.prop = value</code>)</li>\n<li>The access is NOT a template binding argument (those are unaffected)</li>\n</ul>\n",
49406
+ "displayName": "tryRewritePropertyAccess",
49407
+ "args": [
49408
+ {
49409
+ "name": "node",
49410
+ "deprecated": false,
49411
+ "deprecationMessage": ""
49412
+ },
49413
+ {
49414
+ "name": "euiRefs",
49415
+ "type": "Map",
49416
+ "deprecated": false,
49417
+ "deprecationMessage": ""
49418
+ },
49419
+ {
49420
+ "name": "sourceFile",
49421
+ "deprecated": false,
49422
+ "deprecationMessage": ""
49423
+ },
49424
+ {
49425
+ "name": "source",
49426
+ "type": "string",
49427
+ "deprecated": false,
49428
+ "deprecationMessage": ""
49429
+ }
49430
+ ],
49431
+ "returnType": "Edit | null",
49432
+ "jsdoctags": [
49433
+ {
49434
+ "name": "node",
49435
+ "deprecated": false,
49436
+ "deprecationMessage": "",
49437
+ "tagName": {
49438
+ "text": "param"
49439
+ }
49440
+ },
49441
+ {
49442
+ "name": "euiRefs",
49443
+ "type": "Map",
49444
+ "deprecated": false,
49445
+ "deprecationMessage": "",
49446
+ "tagName": {
49447
+ "text": "param"
49448
+ }
49449
+ },
49450
+ {
49451
+ "name": "sourceFile",
49452
+ "deprecated": false,
49453
+ "deprecationMessage": "",
49454
+ "tagName": {
49455
+ "text": "param"
49456
+ }
49457
+ },
49458
+ {
49459
+ "name": "source",
49460
+ "type": "string",
49461
+ "deprecated": false,
49462
+ "deprecationMessage": "",
49463
+ "tagName": {
49464
+ "text": "param"
49465
+ }
49466
+ }
49467
+ ]
49468
+ },
49469
+ {
49470
+ "name": "unwrapExpression",
49471
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49472
+ "ctype": "miscellaneous",
49473
+ "subtype": "function",
49474
+ "coverageIgnore": false,
49475
+ "deprecated": false,
49476
+ "deprecationMessage": "",
49477
+ "rawdescription": "",
49478
+ "description": "",
49479
+ "displayName": "unwrapExpression",
49480
+ "args": [
49481
+ {
49482
+ "name": "expression",
49483
+ "deprecated": false,
49484
+ "deprecationMessage": ""
49485
+ }
49486
+ ],
49487
+ "returnType": "ts.Expression",
49488
+ "jsdoctags": [
49489
+ {
49490
+ "name": "expression",
49491
+ "deprecated": false,
49492
+ "deprecationMessage": "",
49493
+ "tagName": {
49494
+ "text": "param"
49495
+ }
49496
+ }
49497
+ ]
49498
+ },
49499
+ {
49500
+ "name": "visitDir",
49501
+ "file": "packages/core/schematics/migrate-to-signals/index.ts",
49502
+ "ctype": "miscellaneous",
49503
+ "subtype": "function",
49504
+ "coverageIgnore": false,
49505
+ "deprecated": false,
49506
+ "deprecationMessage": "",
49507
+ "rawdescription": "",
49508
+ "description": "",
49509
+ "displayName": "visitDir",
49510
+ "args": [
49511
+ {
49512
+ "name": "dir",
49513
+ "type": "DirEntry",
49514
+ "deprecated": false,
49515
+ "deprecationMessage": ""
49516
+ },
49517
+ {
49518
+ "name": "callback",
49519
+ "deprecated": false,
49520
+ "deprecationMessage": ""
49521
+ }
49522
+ ],
49523
+ "returnType": "void",
49524
+ "jsdoctags": [
49525
+ {
49526
+ "name": "dir",
49527
+ "type": "DirEntry",
49528
+ "deprecated": false,
49529
+ "deprecationMessage": "",
49530
+ "tagName": {
49531
+ "text": "param"
49532
+ }
49533
+ },
49534
+ {
49535
+ "name": "callback",
49536
+ "deprecated": false,
49537
+ "deprecationMessage": "",
49538
+ "tagName": {
49539
+ "text": "param"
49540
+ }
49541
+ }
49542
+ ]
49543
+ }
49544
+ ],
47669
49545
  "packages/core/schematics/migrate-to-standalone/index.ts": [
47670
49546
  {
47671
49547
  "name": "applyReplacements",