From 10a110237c9aac3fe7ef7cd48963c334140fc531 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Thu, 31 Jul 2025 17:27:56 +0100 Subject: [PATCH 01/16] feat(runtime): allow class extending --- .../component-lazy/lazy-constructor.ts | 15 +++++--- .../component-decorator.ts | 10 ----- .../test/convert-decorators.spec.ts | 3 ++ .../transformers/test/lazy-component.spec.ts | 8 ++-- src/compiler/transformers/transform-utils.ts | 37 ++++++++++++++----- 5 files changed, 43 insertions(+), 30 deletions(-) diff --git a/src/compiler/transformers/component-lazy/lazy-constructor.ts b/src/compiler/transformers/component-lazy/lazy-constructor.ts index d507d621baf..58826828a02 100644 --- a/src/compiler/transformers/component-lazy/lazy-constructor.ts +++ b/src/compiler/transformers/component-lazy/lazy-constructor.ts @@ -46,13 +46,16 @@ export const updateLazyComponentConstructor = ( * @param moduleFile information about a module containing a Stencil component * @returns an expression statement for a call to the `registerInstance` helper */ -const registerInstanceStatement = (moduleFile: d.Module): ts.ExpressionStatement => { +const registerInstanceStatement = (moduleFile: d.Module) => { addCoreRuntimeApi(moduleFile, RUNTIME_APIS.registerInstance); - return ts.factory.createExpressionStatement( - ts.factory.createCallExpression(ts.factory.createIdentifier(REGISTER_INSTANCE), undefined, [ - ts.factory.createThis(), - ts.factory.createIdentifier(HOST_REF_ARG), - ]), + return ts.factory.createIfStatement( + ts.factory.createIdentifier(HOST_REF_ARG), + ts.factory.createExpressionStatement( + ts.factory.createCallExpression(ts.factory.createIdentifier(REGISTER_INSTANCE), undefined, [ + ts.factory.createThis(), + ts.factory.createIdentifier(HOST_REF_ARG), + ]), + ), ); }; diff --git a/src/compiler/transformers/decorators-to-static/component-decorator.ts b/src/compiler/transformers/decorators-to-static/component-decorator.ts index 26f19198f89..0ca76c0fb08 100644 --- a/src/compiler/transformers/decorators-to-static/component-decorator.ts +++ b/src/compiler/transformers/decorators-to-static/component-decorator.ts @@ -95,16 +95,6 @@ const validateComponent = ( cmpNode: ts.ClassDeclaration, componentDecorator: ts.Decorator, ) => { - const extendNode = - cmpNode.heritageClauses && cmpNode.heritageClauses.find((c) => c.token === ts.SyntaxKind.ExtendsKeyword); - if (extendNode) { - const err = buildError(diagnostics); - err.messageText = `Classes decorated with @Component can not extend from a base class. - Stencil needs to be able to switch between different base classes in order to implement the different output targets such as: lazy and raw web components.`; - augmentDiagnosticWithNode(err, extendNode); - return false; - } - if (componentOptions.shadow && componentOptions.scoped) { const err = buildError(diagnostics); err.messageText = `Components cannot be "scoped" and "shadow" at the same time, they are mutually exclusive configurations.`; diff --git a/src/compiler/transformers/test/convert-decorators.spec.ts b/src/compiler/transformers/test/convert-decorators.spec.ts index 018a0a22e7a..23a8031bbe7 100644 --- a/src/compiler/transformers/test/convert-decorators.spec.ts +++ b/src/compiler/transformers/test/convert-decorators.spec.ts @@ -194,6 +194,9 @@ describe('convert-decorators', () => { this.count = 0; super(); } + static get is() { + return 'cmp-a'; + } static get states() { return { "count": {} }; }}`, diff --git a/src/compiler/transformers/test/lazy-component.spec.ts b/src/compiler/transformers/test/lazy-component.spec.ts index 17e017397d5..16a2c805cb8 100644 --- a/src/compiler/transformers/test/lazy-component.spec.ts +++ b/src/compiler/transformers/test/lazy-component.spec.ts @@ -93,7 +93,7 @@ describe('lazy-component', () => { await c`import { registerInstance as __stencil_registerInstance } from "@stencil/core"; export const CmpA = class { constructor (hostRef) { - __stencil_registerInstance(this, hostRef); + if (hostRef) __stencil_registerInstance(this, hostRef); if (hostRef.$hostElement$["s-ei"]) { this.internals = hostRef.$hostElement$["s-ei"]; } else { @@ -144,7 +144,7 @@ describe('lazy-component', () => { import CmpAStyle0 from './cmp-a.css'; export const CmpA = class { constructor (hostRef) { - __stencil_registerInstance(this, hostRef); + if (hostRef) __stencil_registerInstance(this, hostRef); } }; CmpA.style = CmpAStyle0; @@ -172,7 +172,7 @@ describe('lazy-component', () => { import CmpAFooStyle0 from './cmp-a.foo.css'; export const CmpA = class { constructor (hostRef) { - __stencil_registerInstance(this, hostRef); + if (hostRef) __stencil_registerInstance(this, hostRef); } }; CmpA.style = { bar: CmpABarStyle0, foo: CmpAFooStyle0 }; @@ -197,7 +197,7 @@ describe('lazy-component', () => { import CmpAStyle1 from './cmp-a.foo.css'; export const CmpA = class { constructor (hostRef) { - __stencil_registerInstance(this, hostRef); + if (hostRef) __stencil_registerInstance(this, hostRef); } }; CmpA.style = CmpAStyle0 + CmpAStyle1; diff --git a/src/compiler/transformers/transform-utils.ts b/src/compiler/transformers/transform-utils.ts index 07e69cec380..3c9280ae45a 100644 --- a/src/compiler/transformers/transform-utils.ts +++ b/src/compiler/transformers/transform-utils.ts @@ -949,6 +949,20 @@ export const retrieveTsModifiers = (node: ts.Node): ReadonlyArray | return ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined; }; +/** + * Helper method for finding a `super()` call in a constructor body. + * @param constructorBodyStatements the body statements of a constructor + * @returns the first statement in the constructor body that is a call to `super()` + */ +function foundSuper(constructorBodyStatements: ts.NodeArray) { + return constructorBodyStatements?.find( + (s) => + ts.isExpressionStatement(s) && + ts.isCallExpression(s.expression) && + s.expression.expression.kind === ts.SyntaxKind.SuperKeyword, + ); +} + /** * Helper util for updating the constructor on a class declaration AST node. * @@ -971,11 +985,9 @@ export const updateConstructor = ( if (constructorIndex < 0 && !statements?.length && !needsSuper(classNode)) return classMembers; if (constructorIndex >= 0 && ts.isConstructorDeclaration(constructorMethod)) { - const constructorBodyStatements: ts.NodeArray = - constructorMethod.body?.statements ?? ts.factory.createNodeArray(); - const hasSuper = constructorBodyStatements.some((s) => s.kind === ts.SyntaxKind.SuperKeyword); + const constructorBodyStatements = constructorMethod.body?.statements; - if (!hasSuper && needsSuper(classNode)) { + if (!foundSuper(constructorBodyStatements) && needsSuper(classNode)) { // if there is no super and it needs one the statements comprising the // body of the constructor should be: // @@ -984,11 +996,17 @@ export const updateConstructor = ( // 3. the statements currently comprising the body of the constructor statements = [createConstructorBodyWithSuper(), ...statements, ...constructorBodyStatements]; } else { - // if no super is needed then the body of the constructor should be: - // - // 1. the new statements we've created - // 2. the statements currently comprising the body of the constructor - statements = [...statements, ...constructorBodyStatements]; + const superCall = foundSuper(constructorBodyStatements); + const updatedStatements = constructorBodyStatements.filter((s) => s !== superCall); + // if no new super is needed. The body of the constructor should be: + // 1. Any current super call + // 2. the new statements we've created + // 3. the statements currently comprising the body of the constructor + if (superCall) { + statements = [superCall, ...statements, ...updatedStatements]; + } else { + statements = [...statements, ...updatedStatements]; + } } classMembers[constructorIndex] = ts.factory.updateConstructorDeclaration( @@ -1010,7 +1028,6 @@ export const updateConstructor = ( ts.factory.createConstructorDeclaration(undefined, parameters ?? [], ts.factory.createBlock(statements, true)), ); } - return classMembers; }; From 062301ccca7bdd60a4dc71f42479f3002ecf031c Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Thu, 31 Jul 2025 23:19:11 +0100 Subject: [PATCH 02/16] chore: fix tests --- src/client/client-host-ref.ts | 1 + .../transformers/component-lazy/lazy-constructor.ts | 13 +++++-------- .../transformers/test/lazy-component.spec.ts | 8 ++++---- src/hydrate/platform/index.ts | 1 + 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/client/client-host-ref.ts b/src/client/client-host-ref.ts index 00d0c3f633a..14f870b52a0 100644 --- a/src/client/client-host-ref.ts +++ b/src/client/client-host-ref.ts @@ -25,6 +25,7 @@ export const getHostRef = (ref: d.RuntimeRef): d.HostRef | undefined => { * @param hostRef that instances `HostRef` object */ export const registerInstance = (lazyInstance: any, hostRef: d.HostRef) => { + if (!hostRef) return; lazyInstance.__stencil__getHostRef = () => hostRef; hostRef.$lazyInstance$ = lazyInstance; diff --git a/src/compiler/transformers/component-lazy/lazy-constructor.ts b/src/compiler/transformers/component-lazy/lazy-constructor.ts index 58826828a02..1d6251da6d8 100644 --- a/src/compiler/transformers/component-lazy/lazy-constructor.ts +++ b/src/compiler/transformers/component-lazy/lazy-constructor.ts @@ -49,13 +49,10 @@ export const updateLazyComponentConstructor = ( const registerInstanceStatement = (moduleFile: d.Module) => { addCoreRuntimeApi(moduleFile, RUNTIME_APIS.registerInstance); - return ts.factory.createIfStatement( - ts.factory.createIdentifier(HOST_REF_ARG), - ts.factory.createExpressionStatement( - ts.factory.createCallExpression(ts.factory.createIdentifier(REGISTER_INSTANCE), undefined, [ - ts.factory.createThis(), - ts.factory.createIdentifier(HOST_REF_ARG), - ]), - ), + return ts.factory.createExpressionStatement( + ts.factory.createCallExpression(ts.factory.createIdentifier(REGISTER_INSTANCE), undefined, [ + ts.factory.createThis(), + ts.factory.createIdentifier(HOST_REF_ARG), + ]), ); }; diff --git a/src/compiler/transformers/test/lazy-component.spec.ts b/src/compiler/transformers/test/lazy-component.spec.ts index 16a2c805cb8..17e017397d5 100644 --- a/src/compiler/transformers/test/lazy-component.spec.ts +++ b/src/compiler/transformers/test/lazy-component.spec.ts @@ -93,7 +93,7 @@ describe('lazy-component', () => { await c`import { registerInstance as __stencil_registerInstance } from "@stencil/core"; export const CmpA = class { constructor (hostRef) { - if (hostRef) __stencil_registerInstance(this, hostRef); + __stencil_registerInstance(this, hostRef); if (hostRef.$hostElement$["s-ei"]) { this.internals = hostRef.$hostElement$["s-ei"]; } else { @@ -144,7 +144,7 @@ describe('lazy-component', () => { import CmpAStyle0 from './cmp-a.css'; export const CmpA = class { constructor (hostRef) { - if (hostRef) __stencil_registerInstance(this, hostRef); + __stencil_registerInstance(this, hostRef); } }; CmpA.style = CmpAStyle0; @@ -172,7 +172,7 @@ describe('lazy-component', () => { import CmpAFooStyle0 from './cmp-a.foo.css'; export const CmpA = class { constructor (hostRef) { - if (hostRef) __stencil_registerInstance(this, hostRef); + __stencil_registerInstance(this, hostRef); } }; CmpA.style = { bar: CmpABarStyle0, foo: CmpAFooStyle0 }; @@ -197,7 +197,7 @@ describe('lazy-component', () => { import CmpAStyle1 from './cmp-a.foo.css'; export const CmpA = class { constructor (hostRef) { - if (hostRef) __stencil_registerInstance(this, hostRef); + __stencil_registerInstance(this, hostRef); } }; CmpA.style = CmpAStyle0 + CmpAStyle1; diff --git a/src/hydrate/platform/index.ts b/src/hydrate/platform/index.ts index 710b09b87db..6269669aa44 100644 --- a/src/hydrate/platform/index.ts +++ b/src/hydrate/platform/index.ts @@ -135,6 +135,7 @@ export const getHostRef = (ref: d.RuntimeRef) => { }; export const registerInstance = (lazyInstance: any, hostRef: d.HostRef) => { + if (!hostRef) return undefined; lazyInstance.__stencil__getHostRef = () => hostRef; hostRef.$lazyInstance$ = lazyInstance; From de9c45d14ca89df4a61cfe446c41e237adcd09ee Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Mon, 4 Aug 2025 23:42:10 +0100 Subject: [PATCH 03/16] feat: extend Stencil decorated classes! --- src/compiler/build/compiler-ctx.ts | 2 + src/compiler/bundle/typescript-plugin.ts | 2 +- .../tranform-to-hydrate-component.ts | 4 +- .../component-lazy/attach-internals.ts | 3 + .../transform-lazy-component.ts | 4 +- .../component-native/native-component.ts | 66 ++++++- .../component-native/native-constructor.ts | 42 ++++- .../tranform-to-native-component.ts | 6 +- src/compiler/transformers/create-event.ts | 4 + .../convert-decorators.ts | 21 ++- .../transformers/detect-modern-prop-decls.ts | 7 +- .../transformers/static-to-meta/component.ts | 171 +++++++++++++++++- .../static-to-meta/parse-static.ts | 2 +- .../transformers/static-to-meta/visitor.ts | 2 +- .../test/native-component.spec.ts | 18 +- src/compiler/transformers/transform-utils.ts | 43 ++++- src/compiler/transpile/transpiled-module.ts | 2 + src/declarations/stencil-private.ts | 2 + src/testing/mocks.ts | 2 + src/utils/es2022-rewire-class-members.ts | 28 +-- 20 files changed, 369 insertions(+), 62 deletions(-) diff --git a/src/compiler/build/compiler-ctx.ts b/src/compiler/build/compiler-ctx.ts index 69eac45fb0b..9bbb1146441 100644 --- a/src/compiler/build/compiler-ctx.ts +++ b/src/compiler/build/compiler-ctx.ts @@ -88,6 +88,8 @@ export const getModuleLegacy = (compilerCtx: d.CompilerCtx, sourceFilePath: stri sourceFilePath: sourceFilePath, jsFilePath: jsFilePath, cmps: [], + isExtended: false, + isMixin: false, coreRuntimeApis: [], outputTargetCoreRuntimeApis: {}, collectionName: null, diff --git a/src/compiler/bundle/typescript-plugin.ts b/src/compiler/bundle/typescript-plugin.ts index ad8d491b81a..aac201466cf 100644 --- a/src/compiler/bundle/typescript-plugin.ts +++ b/src/compiler/bundle/typescript-plugin.ts @@ -57,7 +57,7 @@ export const typescriptPlugin = ( if (isAbsolute(id)) { const fsFilePath = normalizeFsPath(id); const mod = getModule(compilerCtx, fsFilePath); - if (mod && mod.cmps.length > 0) { + if (mod && mod.cmps != null) { const tsResult = ts.transpileModule(mod.staticSourceFileText, { compilerOptions: config.tsCompilerOptions, fileName: mod.sourceFilePath, diff --git a/src/compiler/transformers/component-hydrate/tranform-to-hydrate-component.ts b/src/compiler/transformers/component-hydrate/tranform-to-hydrate-component.ts index 535e53a9179..6286b5c3bca 100644 --- a/src/compiler/transformers/component-hydrate/tranform-to-hydrate-component.ts +++ b/src/compiler/transformers/component-hydrate/tranform-to-hydrate-component.ts @@ -4,7 +4,7 @@ import type * as d from '../../../declarations'; import { addImports } from '../add-imports'; import { addLegacyApis } from '../core-runtime-apis'; import { updateStyleImports } from '../style-imports'; -import { getComponentMeta, getModuleFromSourceFile } from '../transform-utils'; +import { getComponentMeta, getModuleFromSourceFile, updateMixin } from '../transform-utils'; import { updateHydrateComponentClass } from './hydrate-component'; export const hydrateComponentTransform = ( @@ -20,6 +20,8 @@ export const hydrateComponentTransform = ( const cmp = getComponentMeta(compilerCtx, tsSourceFile, node); if (cmp != null) { return updateHydrateComponentClass(node, moduleFile, cmp); + } else if (compilerCtx.moduleMap.get(tsSourceFile.fileName)?.isMixin) { + return updateMixin(node, moduleFile, cmp, transformOpts); } } diff --git a/src/compiler/transformers/component-lazy/attach-internals.ts b/src/compiler/transformers/component-lazy/attach-internals.ts index 5f09699e521..c553ccc3bda 100644 --- a/src/compiler/transformers/component-lazy/attach-internals.ts +++ b/src/compiler/transformers/component-lazy/attach-internals.ts @@ -42,6 +42,9 @@ import { HOST_REF_ARG } from './constants'; * @returns a list of expression statements */ export function createLazyAttachInternalsBinding(cmp: d.ComponentCompilerMeta): ts.Statement[] { + if (!cmp?.attachInternalsMemberName) { + return []; + } if (cmp.attachInternalsMemberName) { return [ ts.factory.createIfStatement( diff --git a/src/compiler/transformers/component-lazy/transform-lazy-component.ts b/src/compiler/transformers/component-lazy/transform-lazy-component.ts index 7f55679b0bd..eb48dccd7e5 100644 --- a/src/compiler/transformers/component-lazy/transform-lazy-component.ts +++ b/src/compiler/transformers/component-lazy/transform-lazy-component.ts @@ -4,7 +4,7 @@ import type * as d from '../../../declarations'; import { addImports } from '../add-imports'; import { addLegacyApis } from '../core-runtime-apis'; import { updateStyleImports } from '../style-imports'; -import { getComponentMeta, getModuleFromSourceFile } from '../transform-utils'; +import { getComponentMeta, getModuleFromSourceFile, updateMixin } from '../transform-utils'; import { updateLazyComponentClass } from './lazy-component'; /** @@ -34,6 +34,8 @@ export const lazyComponentTransform = ( const cmp = getComponentMeta(compilerCtx, tsSourceFile, node); if (cmp != null) { return updateLazyComponentClass(transformOpts, styleStatements, node, moduleFile, cmp); + } else if (compilerCtx.moduleMap.get(tsSourceFile.fileName)?.isMixin) { + return updateMixin(node, moduleFile, cmp, transformOpts); } } return ts.visitEachChild(node, visitNode, transformCtx); diff --git a/src/compiler/transformers/component-native/native-component.ts b/src/compiler/transformers/component-native/native-component.ts index cf1a53b80b7..2d532559475 100644 --- a/src/compiler/transformers/component-native/native-component.ts +++ b/src/compiler/transformers/component-native/native-component.ts @@ -5,6 +5,7 @@ import type * as d from '../../../declarations'; import { addOutputTargetCoreRuntimeApi, HTML_ELEMENT, RUNTIME_APIS } from '../core-runtime-apis'; import { transformHostData } from '../host-data-transform'; import { removeStaticMetaProperties } from '../remove-static-meta-properties'; +import { foundSuper, updateConstructor } from '../transform-utils'; import { updateComponentClass } from '../update-component-class'; import { addWatchers } from '../watcher-meta-transform'; import { addNativeConnectedCallback } from './native-connected-callback'; @@ -27,6 +28,8 @@ import { addNativeStaticStyle } from './native-static-style'; * @param classNode the class to transform * @param moduleFile information about the class' home module * @param cmp metadata about the stencil component of interest + * @param compilerCtx the compiler context + * @param tsSourceFile the TypeScript source file containing the class * @returns an updated class */ export const updateNativeComponentClass = ( @@ -34,12 +37,61 @@ export const updateNativeComponentClass = ( classNode: ts.ClassDeclaration, moduleFile: d.Module, cmp: d.ComponentCompilerMeta, + compilerCtx: d.CompilerCtx, + tsSourceFile: ts.SourceFile, ): ts.ClassDeclaration | ts.VariableStatement => { const withHeritageClauses = updateNativeHostComponentHeritageClauses(classNode, moduleFile); - const members = updateNativeHostComponentMembers(transformOpts, withHeritageClauses, moduleFile, cmp); + const members = updateNativeHostComponentMembers( + transformOpts, + withHeritageClauses, + moduleFile, + cmp, + compilerCtx, + tsSourceFile, + ); return updateComponentClass(transformOpts, withHeritageClauses, withHeritageClauses.heritageClauses, members); }; +/** + * Updates classes that are extended by Stencil components: + * - extend `HTMLElement` if necessary + * - ensure the constructor has a `super()` call + * - remove static metadata properties + * + * @param node the class node to update + * @param moduleFile the module file containing the class + * @param transformOpts transformation options + * @returns the updated class node + */ +export const updateNativeExtendedClass = ( + node: ts.ClassDeclaration, + moduleFile: d.Module, + transformOpts: d.TransformOptions, +) => { + let withHeritageClauses = updateNativeHostComponentHeritageClauses(node, moduleFile); + const ctor = withHeritageClauses.members.find(ts.isConstructorDeclaration); + + if (!foundSuper(ctor?.body?.statements)) { + const params: ts.ParameterDeclaration[] = Array.from(ctor?.parameters ?? []); + + withHeritageClauses = ts.factory.updateClassDeclaration( + withHeritageClauses, + withHeritageClauses.modifiers, + withHeritageClauses.name, + withHeritageClauses.typeParameters, + withHeritageClauses.heritageClauses, + updateConstructor(withHeritageClauses, Array.from(withHeritageClauses.members), [], params, true), + ); + } + + return updateComponentClass( + transformOpts, + withHeritageClauses, + withHeritageClauses.heritageClauses, + removeStaticMetaProperties(withHeritageClauses), + ); +}; + /** * Update or generate a heritage clause (e.g. `extends [IDENTIFIER]`) for a * Stencil component to extend `HTMLElement` @@ -57,10 +109,8 @@ const updateNativeHostComponentHeritageClauses = ( return classNode; } - if (moduleFile.cmps.length >= 1) { - // we'll need to import `HTMLElement` in order to extend it - addOutputTargetCoreRuntimeApi(moduleFile, DIST_CUSTOM_ELEMENTS, RUNTIME_APIS.HTMLElement); - } + // we'll need to import `HTMLElement` in order to extend it + addOutputTargetCoreRuntimeApi(moduleFile, DIST_CUSTOM_ELEMENTS, RUNTIME_APIS.HTMLElement); const heritageClause = ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ ts.factory.createExpressionWithTypeArguments(ts.factory.createIdentifier(HTML_ELEMENT), []), @@ -89,6 +139,8 @@ const updateNativeHostComponentHeritageClauses = ( * @param classNode the class to transform * @param moduleFile information about the class' home module * @param cmp metadata about the stencil component of interest + * @param compilerCtx the compiler context + * @param tsSourceFile the TypeScript source file containing the class * @returns an updated list of class elements */ const updateNativeHostComponentMembers = ( @@ -96,10 +148,12 @@ const updateNativeHostComponentMembers = ( classNode: ts.ClassDeclaration, moduleFile: d.Module, cmp: d.ComponentCompilerMeta, + compilerCtx: d.CompilerCtx, + tsSourceFile: ts.SourceFile, ): ts.ClassElement[] => { const classMembers = removeStaticMetaProperties(classNode); - updateNativeConstructor(classMembers, moduleFile, cmp, classNode); + updateNativeConstructor(classMembers, moduleFile, cmp, classNode, compilerCtx, tsSourceFile); addNativeConnectedCallback(classMembers, cmp); addNativeElementGetter(classMembers, cmp); addWatchers(classMembers, cmp); diff --git a/src/compiler/transformers/component-native/native-constructor.ts b/src/compiler/transformers/component-native/native-constructor.ts index e3ee5e4919e..c70a8bba4cd 100644 --- a/src/compiler/transformers/component-native/native-constructor.ts +++ b/src/compiler/transformers/component-native/native-constructor.ts @@ -18,23 +18,33 @@ import { createNativeAttachInternalsBinding } from './attach-internals'; * @param moduleFile the Stencil module representation of the component class * @param cmp the component metadata generated for the component * @param classNode the TypeScript syntax tree node for the class + * @param compilerCtx the compiler context, which provides access to the module map + * @param tsSourceFile the TypeScript source file containing the class */ export const updateNativeConstructor = ( classMembers: ts.ClassElement[], moduleFile: d.Module, cmp: d.ComponentCompilerMeta, classNode: ts.ClassDeclaration, + compilerCtx: d.CompilerCtx, + tsSourceFile: ts.SourceFile, ): void => { if (cmp.isPlain) { return; } + const cstrMethodArgs = [ + ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('registerHost')), + ]; + const nativeCstrStatements: ts.Statement[] = [ ...nativeInit(cmp), ...addCreateEvents(moduleFile, cmp), ...createNativeAttachInternalsBinding(cmp), ]; - updateConstructor(classNode, classMembers, nativeCstrStatements); + + const requiresSuperOptout = compilerCtx?.moduleMap.get(tsSourceFile.fileName)?.isExtended; + updateConstructor(classNode, classMembers, nativeCstrStatements, cstrMethodArgs, requiresSuperOptout); }; /** @@ -42,8 +52,8 @@ export const updateNativeConstructor = ( * @param cmp the component's metadata * @returns the generated expression statements */ -const nativeInit = (cmp: d.ComponentCompilerMeta): ReadonlyArray => { - const initStatements = [nativeRegisterHostStatement()]; +const nativeInit = (cmp: d.ComponentCompilerMeta): ReadonlyArray => { + const initStatements: (ts.ExpressionStatement | ts.IfStatement)[] = [nativeRegisterHostStatement()]; if (cmp.encapsulation === 'shadow') { initStatements.push(nativeAttachShadowStatement()); } @@ -55,14 +65,26 @@ const nativeInit = (cmp: d.ComponentCompilerMeta): ReadonlyArray { - // Create an expression statement, `this.__registerHost();` - return ts.factory.createExpressionStatement( - ts.factory.createCallExpression( - ts.factory.createPropertyAccessExpression(ts.factory.createThis(), ts.factory.createIdentifier('__registerHost')), - undefined, - undefined, +const nativeRegisterHostStatement = (): ts.IfStatement => { + // Create an expression statement, `if (registerHost !== false) this.__registerHost();` + return ts.factory.createIfStatement( + ts.factory.createBinaryExpression( + ts.factory.createIdentifier('registerHost'), + ts.SyntaxKind.ExclamationEqualsEqualsToken, + ts.factory.createFalse(), ), + ts.factory.createBlock([ + ts.factory.createExpressionStatement( + ts.factory.createCallExpression( + ts.factory.createPropertyAccessExpression( + ts.factory.createThis(), + ts.factory.createIdentifier('__registerHost'), + ), + undefined, + undefined, + ), + ), + ]), ); }; diff --git a/src/compiler/transformers/component-native/tranform-to-native-component.ts b/src/compiler/transformers/component-native/tranform-to-native-component.ts index 62fa9db526a..34ab877a913 100644 --- a/src/compiler/transformers/component-native/tranform-to-native-component.ts +++ b/src/compiler/transformers/component-native/tranform-to-native-component.ts @@ -8,7 +8,7 @@ import { addLegacyApis } from '../core-runtime-apis'; import { defineCustomElement } from '../define-custom-element'; import { updateStyleImports } from '../style-imports'; import { getComponentMeta, getModuleFromSourceFile } from '../transform-utils'; -import { updateNativeComponentClass } from './native-component'; +import { updateNativeComponentClass, updateNativeExtendedClass } from './native-component'; /** * A function that returns a transformation factory. The returned factory @@ -45,7 +45,9 @@ export const nativeComponentTransform = ( if (ts.isClassDeclaration(node)) { const cmp = getComponentMeta(compilerCtx, tsSourceFile, node); if (cmp != null) { - return updateNativeComponentClass(transformOpts, node, moduleFile, cmp); + return updateNativeComponentClass(transformOpts, node, moduleFile, cmp, compilerCtx, tsSourceFile); + } else if (compilerCtx.moduleMap.get(tsSourceFile.fileName)?.isExtended) { + return updateNativeExtendedClass(node, moduleFile, transformOpts); } } diff --git a/src/compiler/transformers/create-event.ts b/src/compiler/transformers/create-event.ts index 3ace3bfdc13..4aa3d4499bb 100644 --- a/src/compiler/transformers/create-event.ts +++ b/src/compiler/transformers/create-event.ts @@ -11,6 +11,10 @@ import { addCoreRuntimeApi, CREATE_EVENT, RUNTIME_APIS } from './core-runtime-ap * @returns the generated event creation code */ export const addCreateEvents = (moduleFile: d.Module, cmp: d.ComponentCompilerMeta): ts.ExpressionStatement[] => { + if (!cmp?.events || cmp.events.length === 0) { + // no events to create, so return an empty array + return []; + } return cmp.events.map((ev) => { addCoreRuntimeApi(moduleFile, RUNTIME_APIS.createEvent); diff --git a/src/compiler/transformers/decorators-to-static/convert-decorators.ts b/src/compiler/transformers/decorators-to-static/convert-decorators.ts index 0f0387375dd..b10f178ad4d 100644 --- a/src/compiler/transformers/decorators-to-static/convert-decorators.ts +++ b/src/compiler/transformers/decorators-to-static/convert-decorators.ts @@ -91,20 +91,29 @@ const visitClassDeclaration = ( const importAliasMap = new ImportAliasMap(sourceFile); const componentDecorator = retrieveTsDecorators(classNode)?.find(isDecoratorNamed(importAliasMap.get('Component'))); - if (!componentDecorator) { - return classNode; - } - const classMembers = classNode.members; const decoratedMembers = classMembers.filter((member) => (retrieveTsDecorators(member)?.length ?? 0) > 0); + if (!decoratedMembers.length && !componentDecorator) { + return classNode; + } + // create an array of all class members which are _not_ methods decorated // with a Stencil decorator. We do this here because we'll implement the // behavior specified for those decorated methods later on. const filteredMethodsAndFields = removeStencilMethodDecorators(Array.from(classMembers), diagnostics, importAliasMap); - // parse component decorator - componentDecoratorToStatic(config, typeChecker, diagnostics, classNode, filteredMethodsAndFields, componentDecorator); + if (componentDecorator) { + // parse component decorator + componentDecoratorToStatic( + config, + typeChecker, + diagnostics, + classNode, + filteredMethodsAndFields, + componentDecorator, + ); + } // stores a reference to fields that should be watched for changes // parse member decorators (Prop, State, Listen, Event, Method, Element and Watch) diff --git a/src/compiler/transformers/detect-modern-prop-decls.ts b/src/compiler/transformers/detect-modern-prop-decls.ts index b7401f57e8c..fbf6cbbe27e 100644 --- a/src/compiler/transformers/detect-modern-prop-decls.ts +++ b/src/compiler/transformers/detect-modern-prop-decls.ts @@ -23,10 +23,11 @@ import { getStaticValue } from './transform-utils'; * } * ``` * This detects the presence of these prop declarations, - * switches on a flag so we can handle them ar runtime. + * switches on a flag so we can handle them at runtime. * * @param classNode the parental class node * @param cmp metadata about the stencil component of interest + * @returns true if the class has modern property declarations, false otherwise */ export const detectModernPropDeclarations = (classNode: ts.ClassDeclaration, cmp: d.ComponentCompilerFeatures) => { const parsedProps: { [key: string]: d.ComponentCompilerProperty } = getStaticValue(classNode.members, 'properties'); @@ -34,7 +35,7 @@ export const detectModernPropDeclarations = (classNode: ts.ClassDeclaration, cmp if (!parsedProps && !parsedStates) { cmp.hasModernPropertyDecls = false; - return; + return false; } const members = [...Object.entries(parsedProps || {}), ...Object.entries(parsedStates || {})]; @@ -57,4 +58,6 @@ export const detectModernPropDeclarations = (classNode: ts.ClassDeclaration, cmp cmp.hasModernPropertyDecls = true; break; } + + return cmp.hasModernPropertyDecls; }; diff --git a/src/compiler/transformers/static-to-meta/component.ts b/src/compiler/transformers/static-to-meta/component.ts index def44c6de12..6f4c47b1eed 100644 --- a/src/compiler/transformers/static-to-meta/component.ts +++ b/src/compiler/transformers/static-to-meta/component.ts @@ -1,8 +1,9 @@ -import { join, normalizePath, relative, unique } from '@utils'; +import { augmentDiagnosticWithNode, buildError, join, normalizePath, relative, unique } from '@utils'; import { dirname, isAbsolute } from 'path'; import ts from 'typescript'; import type * as d from '../../../declarations'; +import { tsResolveModuleName } from '../../sys/typescript/typescript-resolve-module'; import { addComponentMetaStatic } from '../add-component-meta-static'; import { setComponentBuildConditionals } from '../component-build-conditionals'; import { detectModernPropDeclarations } from '../detect-modern-prop-decls'; @@ -30,6 +31,118 @@ const BLACKLISTED_COMPONENT_METHODS = [ 'shadowRoot', ]; +/** + * A recursive function that builds a tree of classes that extend from each other. + * Ensures that the current component class in-question receives all the static meta-data required at runtime. + * + * @param compilerCtx the current compiler context + * @param classDeclaration a class declaration to analyze + * @param dependentClasses a flat array tree of classes that extend from each other + * @param typeChecker the TypeScript type checker + * @param config the Stencil configuration + * @returns a flat array of classes that extend from each other, including the current class + */ +const buildExtendsTree = ( + compilerCtx: d.CompilerCtx, + classDeclaration: ts.ClassDeclaration, + dependentClasses: { classNode: ts.ClassDeclaration; fileName: string }[], + typeChecker: ts.TypeChecker, + config: d.ValidatedConfig, +) => { + const hasHeritageClauses = classDeclaration.heritageClauses && classDeclaration.heritageClauses.length > 0; + if (!hasHeritageClauses) return dependentClasses; + + const extendsClause = classDeclaration.heritageClauses.find( + (clause) => clause.token === ts.SyntaxKind.ExtendsKeyword, + ); + if (!extendsClause) { + return dependentClasses; + } + + extendsClause.types.forEach((type) => { + try { + // happy path (normally 1 level deep): the extends type resolves to a class declaration in another file + const aliasedSymbol = typeChecker.getAliasedSymbol(typeChecker.getSymbolAtLocation(type.expression)); + classDeclaration = aliasedSymbol?.declarations?.find(ts.isClassDeclaration); + + if (classDeclaration && !dependentClasses.some((dc) => dc.classNode === classDeclaration)) { + const foundModule = compilerCtx.moduleMap.get(classDeclaration.getSourceFile().fileName); + + if (foundModule) { + const source = foundModule.staticSourceFile as ts.SourceFile; + source.statements.forEach((statement) => { + if (ts.isClassDeclaration(statement)) { + dependentClasses.push({ classNode: statement, fileName: source.fileName }); + buildExtendsTree(compilerCtx, statement, dependentClasses, typeChecker, config); + } + }); + } + } + } catch (e) { + // sad path (normally >1 levels deep): the extends type does not resolve so let's find it manually: + const currentSource = classDeclaration.getSourceFile(); + classDeclaration.getSourceFile()?.statements.forEach((statement) => { + if (ts.isImportDeclaration(statement)) { + // 1) loop through import declarations in the current source file + if (ts.isNamedImports(statement.importClause?.namedBindings)) { + statement.importClause?.namedBindings.elements.forEach((element) => { + // 2) loop through the named bindings of the import declaration + if (element.name.getText() === type.expression.getText()) { + // 3) check the name matches the `extends` type expression + const className = element.propertyName?.getText() || element.name.getText(); + const foundFile = tsResolveModuleName( + config, + compilerCtx, + statement.moduleSpecifier.getText().replaceAll(/['"]/g, ''), + currentSource.fileName, + ); + if (foundFile) { + // 4) resolve the module name to a file + const foundModule = compilerCtx.moduleMap.get(foundFile.resolvedModule.resolvedFileName); + (foundModule?.staticSourceFile as ts.SourceFile).statements.forEach((statement) => { + if ( + ts.isClassDeclaration(statement) && + statement.name?.getText() === className && + !dependentClasses.some((dc) => dc.classNode === statement) + ) { + // 5) find the class declaration + dependentClasses.push({ classNode: statement, fileName: foundModule.staticSourceFile.fileName }); + // 6) check if the class declaration extends from another class + buildExtendsTree(compilerCtx, statement, dependentClasses, typeChecker, config); + } + }); + } + } + }); + } + } + }); + } + }); + + return dependentClasses; +}; + +type DeDupeMember = + | d.ComponentCompilerProperty + | d.ComponentCompilerState + | d.ComponentCompilerMethod + | d.ComponentCompilerListener + | d.ComponentCompilerEvent; + +/** + * Given two arrays of static members, return a new array containing only the + * members from the first array that are not present in the second array. + * This is used to de-dupe static members that are inherited from a parent class. + * + * @param dedupeMembers the array of static members to de-dupe + * @param staticMembers the array of static members to compare against + * @returns an array of static members that are not present in the second array + */ +const deDupeMembers = (dedupeMembers: T[], staticMembers: T[]) => { + return dedupeMembers.filter((s) => !staticMembers.some((d) => d.name === s.name)); +}; + /** * Given a {@see ts.ClassDeclaration} which represents a Stencil component * class declaration, parse and format various pieces of data about static class @@ -47,8 +160,10 @@ const BLACKLISTED_COMPONENT_METHODS = [ * @param typeChecker a TypeScript type checker instance * @param cmpNode the TypeScript class declaration for the component * @param moduleFile Stencil's IR for a module, used here as an out param + * @param buildCtx the current build context, used to surface diagnostics * @param transformOpts options which control various aspects of the * transformation + * @param config stencil configuration * @returns the TypeScript class declaration IR instance with which the * function was called */ @@ -57,7 +172,9 @@ export const parseStaticComponentMeta = ( typeChecker: ts.TypeChecker, cmpNode: ts.ClassDeclaration, moduleFile: d.Module, + buildCtx: d.BuildCtx, transformOpts?: d.TransformOptions, + config?: d.ValidatedConfig, ): ts.ClassDeclaration => { if (cmpNode.members == null) { return cmpNode; @@ -68,6 +185,37 @@ export const parseStaticComponentMeta = ( return cmpNode; } + let properties = parseStaticProps(staticMembers); + let states = parseStaticStates(staticMembers); + let methods = parseStaticMethods(staticMembers); + let listeners = parseStaticListeners(staticMembers); + let events = parseStaticEvents(staticMembers); + let watchers = parseStaticWatchers(staticMembers); + let hasMixin = false; + + const tree = buildExtendsTree(compilerCtx, cmpNode, [], typeChecker, config); + tree.map((extendedClass) => { + const extendedStaticMembers = extendedClass.classNode.members.filter(isStaticGetter); + const mixinProps = parseStaticProps(extendedStaticMembers) ?? []; + const mixinStates = parseStaticStates(extendedStaticMembers) ?? []; + const isMixin = mixinProps.length > 0 || mixinStates.length > 0; + const module = compilerCtx.moduleMap.get(extendedClass.fileName); + + module.isMixin = isMixin; + module.isExtended = true; + + properties = [...deDupeMembers(mixinProps, properties), ...properties]; + states = [...deDupeMembers(mixinStates, states), ...states]; + methods = [...deDupeMembers(parseStaticMethods(extendedStaticMembers) ?? [], methods), ...methods]; + listeners = [...deDupeMembers(parseStaticListeners(extendedStaticMembers) ?? [], listeners), ...listeners]; + events = [...deDupeMembers(parseStaticEvents(extendedStaticMembers) ?? [], events), ...events]; + watchers = [...(parseStaticWatchers(extendedStaticMembers) ?? []), ...watchers]; + + if (isMixin) { + hasMixin = true; + } + }); + const symbol = typeChecker ? typeChecker.getSymbolAtLocation(cmpNode.name) : undefined; const docs = serializeSymbol(typeChecker, symbol); const isCollectionDependency = moduleFile.isCollectionDependency; @@ -82,13 +230,13 @@ export const parseStaticComponentMeta = ( elementRef: parseStaticElementRef(staticMembers), encapsulation, shadowDelegatesFocus: !!parseStaticShadowDelegatesFocus(encapsulation, staticMembers), - properties: parseStaticProps(staticMembers), + properties, virtualProperties: parseVirtualProps(docs), - states: parseStaticStates(staticMembers), - methods: parseStaticMethods(staticMembers), - listeners: parseStaticListeners(staticMembers), - events: parseStaticEvents(staticMembers), - watchers: parseStaticWatchers(staticMembers), + states, + methods, + listeners, + events, + watchers, styles: parseStaticStyles(compilerCtx, tagName, moduleFile.sourceFilePath, isCollectionDependency, staticMembers), internal: isInternal(docs), assetsDirs: parseAssetsDirs(staticMembers, moduleFile.jsFilePath), @@ -168,7 +316,14 @@ export const parseStaticComponentMeta = ( }; visitComponentChildNode(cmpNode); parseClassMethods(cmpNode, cmp); - detectModernPropDeclarations(cmpNode, cmp); + const hasModernPropertyDecls = detectModernPropDeclarations(cmpNode, cmp); + + if (!hasModernPropertyDecls && hasMixin) { + const err = buildError(buildCtx.diagnostics); + err.messageText = `Component classes can only extend from other Stencil decorated base classes when targetting more modern JavaScript (ES2022 and above). + Your current TypeScript configuration is set to target \`${ts.ScriptTarget[config.tsCompilerOptions.target]}\` - please amend your tsconfig.json.`; + augmentDiagnosticWithNode(err, cmpNode); + } cmp.htmlAttrNames = unique(cmp.htmlAttrNames); cmp.htmlTagNames = unique(cmp.htmlTagNames); diff --git a/src/compiler/transformers/static-to-meta/parse-static.ts b/src/compiler/transformers/static-to-meta/parse-static.ts index 8b3b4bcfc4a..9ddb32882db 100644 --- a/src/compiler/transformers/static-to-meta/parse-static.ts +++ b/src/compiler/transformers/static-to-meta/parse-static.ts @@ -46,7 +46,7 @@ export const updateModule = ( const visitNode = (node: ts.Node) => { if (ts.isClassDeclaration(node)) { - parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile); + parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile, buildCtx, undefined, config); return; } else if (ts.isImportDeclaration(node)) { parseModuleImport(config, compilerCtx, buildCtx, moduleFile, srcDirPath, node, true); diff --git a/src/compiler/transformers/static-to-meta/visitor.ts b/src/compiler/transformers/static-to-meta/visitor.ts index 0d9a6aa8545..f3285dd6aaa 100644 --- a/src/compiler/transformers/static-to-meta/visitor.ts +++ b/src/compiler/transformers/static-to-meta/visitor.ts @@ -22,7 +22,7 @@ export const convertStaticToMeta = ( const visitNode = (node: ts.Node): ts.VisitResult => { if (ts.isClassDeclaration(node)) { - return parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile, transformOpts); + return parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile, buildCtx, transformOpts, config); } else if (ts.isImportDeclaration(node)) { parseModuleImport(config, compilerCtx, buildCtx, moduleFile, dirPath, node, !transformOpts.isolatedModules); } else if (ts.isCallExpression(node)) { diff --git a/src/compiler/transformers/test/native-component.spec.ts b/src/compiler/transformers/test/native-component.spec.ts index b1a62944a05..aab80a07ab4 100644 --- a/src/compiler/transformers/test/native-component.spec.ts +++ b/src/compiler/transformers/test/native-component.spec.ts @@ -127,9 +127,11 @@ describe('nativeComponentTransform', () => { expect(await formatCode(transpiledModule.outputText)).toContain( await c`const CmpA = class extends HTMLElement { - constructor() { + constructor(registerHost) { super(); - this.__registerHost(); + if (registerHost !== false) { + this.__registerHost(); + } } static get formAssociated() { return true; @@ -154,9 +156,11 @@ describe('nativeComponentTransform', () => { expect(await formatCode(transpiledModule.outputText)).toContain( await c`const CmpA = class extends HTMLElement { - constructor() { + constructor(registerHost) { super(); - this.__registerHost(); + if (registerHost !== false) { + this.__registerHost(); + } this.internals = this.attachInternals(); } static get formAssociated() { @@ -197,9 +201,11 @@ describe('nativeComponentTransform', () => { await formatCode(`import { defineCustomElement as __stencil_defineCustomElement, HTMLElement } from '@stencil/core'; ${expectedImport} const CmpA = class extends HTMLElement { - constructor() { + constructor(registerHost) { super(); - this.__registerHost(); + if (registerHost !== false) { + this.__registerHost(); + } } static get style() { return ${expectedStyleReturn}; diff --git a/src/compiler/transformers/transform-utils.ts b/src/compiler/transformers/transform-utils.ts index 3c9280ae45a..dceea06cae2 100644 --- a/src/compiler/transformers/transform-utils.ts +++ b/src/compiler/transformers/transform-utils.ts @@ -2,8 +2,11 @@ import { normalizePath } from '@utils'; import ts from 'typescript'; import type * as d from '../../declarations'; +import { updateLazyComponentConstructor } from './component-lazy/lazy-constructor'; import { StencilStaticGetter } from './decorators-to-static/decorators-constants'; +import { removeStaticMetaProperties } from './remove-static-meta-properties'; import { addToLibrary, findTypeWithName, getHomeModule, getOriginalTypeName } from './type-library'; +import { updateComponentClass } from './update-component-class'; export const getScriptTarget = () => { // using a fn so the browser compiler doesn't require the global ts for startup @@ -731,6 +734,27 @@ export const getComponentMeta = ( return undefined; }; +/** + * Updates a mixin class; cleans up static metadata properties and + * adds the `registerInstance` method to the constructor + * + * @param classNode the class node to update + * @param moduleFile the module file containing the class node + * @param cmp the component metadata to update + * @param transformOpts the transformation options to use + * @returns the updated class node + */ +export const updateMixin = ( + classNode: ts.ClassDeclaration, + moduleFile: d.Module, + cmp: d.ComponentCompilerMeta, + transformOpts: d.TransformOptions, +) => { + const classMembers = removeStaticMetaProperties(classNode); + updateLazyComponentConstructor(classMembers, classNode, moduleFile, cmp); + return updateComponentClass(transformOpts, classNode, classNode.heritageClauses, classMembers); +}; + /** * Retrieves the tag name associated with a Stencil component, based on the 'is' static getter assigned to the class at compile time * @param staticMembers the static getters belonging to the Stencil component class @@ -954,7 +978,7 @@ export const retrieveTsModifiers = (node: ts.Node): ReadonlyArray | * @param constructorBodyStatements the body statements of a constructor * @returns the first statement in the constructor body that is a call to `super()` */ -function foundSuper(constructorBodyStatements: ts.NodeArray) { +export function foundSuper(constructorBodyStatements: ts.NodeArray) { return constructorBodyStatements?.find( (s) => ts.isExpressionStatement(s) && @@ -971,6 +995,8 @@ function foundSuper(constructorBodyStatements: ts.NodeArray) { * @param statements a list of statements which should be added to the * constructor * @param parameters an optional list of parameters for the constructor + * @param includeFalseArg whether to include a `false` argument in the `super()` call. + * This is used in native Stencil components which extend other Stencil components to stop the base component from being initialized. * @returns a list of updated class elements */ export const updateConstructor = ( @@ -978,6 +1004,7 @@ export const updateConstructor = ( classMembers: ts.ClassElement[], statements: ts.Statement[], parameters?: ts.ParameterDeclaration[], + includeFalseArg?: boolean, ): ts.ClassElement[] => { const constructorIndex = classMembers.findIndex((m) => m.kind === ts.SyntaxKind.Constructor); const constructorMethod = classMembers[constructorIndex]; @@ -994,7 +1021,7 @@ export const updateConstructor = ( // 1. the `super()` call // 2. the new statements we've created to initialize fields // 3. the statements currently comprising the body of the constructor - statements = [createConstructorBodyWithSuper(), ...statements, ...constructorBodyStatements]; + statements = [createConstructorBodyWithSuper(includeFalseArg), ...statements, ...constructorBodyStatements]; } else { const superCall = foundSuper(constructorBodyStatements); const updatedStatements = constructorBodyStatements.filter((s) => s !== superCall); @@ -1019,7 +1046,7 @@ export const updateConstructor = ( // we don't seem to have a constructor, so let's create one and stick it // into the array of class elements if (needsSuper(classNode)) { - statements = [createConstructorBodyWithSuper(), ...statements]; + statements = [createConstructorBodyWithSuper(includeFalseArg), ...statements]; } // add the new constructor to the class members, putting it at the @@ -1056,11 +1083,17 @@ const needsSuper = (classDeclaration: ts.ClassDeclaration): boolean => { /** * Create a statement with a call to `super()` suitable for including in the body of a constructor. + * @param includeFalseArg whether to include a `false` argument in the `super()` call. + * This is used in native Stencil components which extend other Stencil components to stop the base component from being initialized. * @returns a {@link ts.ExpressionStatement} node equivalent to `super()` */ -const createConstructorBodyWithSuper = (): ts.ExpressionStatement => { +const createConstructorBodyWithSuper = (includeFalseArg?: boolean): ts.ExpressionStatement => { return ts.factory.createExpressionStatement( - ts.factory.createCallExpression(ts.factory.createIdentifier('super'), undefined, undefined), + ts.factory.createCallExpression( + ts.factory.createIdentifier('super'), + undefined, + includeFalseArg ? [ts.factory.createFalse()] : undefined, + ), ); }; diff --git a/src/compiler/transpile/transpiled-module.ts b/src/compiler/transpile/transpiled-module.ts index 28588ffcd93..5c8b7dd7d60 100644 --- a/src/compiler/transpile/transpiled-module.ts +++ b/src/compiler/transpile/transpiled-module.ts @@ -31,6 +31,8 @@ export const createModule = ( staticSourceFile, staticSourceFileText, cmps: [], + isExtended: false, + isMixin: false, coreRuntimeApis: [], outputTargetCoreRuntimeApis: {}, collectionName: null, diff --git a/src/declarations/stencil-private.ts b/src/declarations/stencil-private.ts index 55b784cc1a5..669c9482fbc 100644 --- a/src/declarations/stencil-private.ts +++ b/src/declarations/stencil-private.ts @@ -1247,6 +1247,8 @@ export type ModuleMap = Map; */ export interface Module { cmps: ComponentCompilerMeta[]; + isMixin: boolean; + isExtended: boolean; /** * A collection of modules that a component will need. The modules in this list must have import statements generated * in order for the component to function. diff --git a/src/testing/mocks.ts b/src/testing/mocks.ts index d4e8e0ce684..531f3851cb7 100644 --- a/src/testing/mocks.ts +++ b/src/testing/mocks.ts @@ -241,6 +241,8 @@ export function mockWindow(html?: string) { */ export const mockModule = (mod: Partial = {}): d.Module => ({ cmps: [], + isExtended: false, + isMixin: false, coreRuntimeApis: [], outputTargetCoreRuntimeApis: {}, collectionName: '', diff --git a/src/utils/es2022-rewire-class-members.ts b/src/utils/es2022-rewire-class-members.ts index fe9a3a261fb..1bc9fdeacb3 100644 --- a/src/utils/es2022-rewire-class-members.ts +++ b/src/utils/es2022-rewire-class-members.ts @@ -41,19 +41,23 @@ export const reWireGetterSetter = (instance: any, hostRef: d.HostRef) => { const ogValue = instance[memberName]; // Get the original Stencil prototype `get` / `set` - const ogDescriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), memberName); + const ogDescriptor = + Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), memberName) || + Object.getOwnPropertyDescriptor(instance, memberName); - // Re-wire original accessors to the new instance - Object.defineProperty(instance, memberName, { - get() { - return ogDescriptor.get.call(this); - }, - set(newValue) { - ogDescriptor.set.call(this, newValue); - }, - configurable: true, - enumerable: true, - }); + if (ogDescriptor) { + // Re-wire original accessors to the new instance + Object.defineProperty(instance, memberName, { + get() { + return ogDescriptor.get.call(this); + }, + set(newValue) { + ogDescriptor.set.call(this, newValue); + }, + configurable: true, + enumerable: true, + }); + } instance[memberName] = hostRef.$instanceValues$.has(memberName) ? hostRef.$instanceValues$.get(memberName) From 4f7e3bebd382a7b390186e395fdced9dc2171dec Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Mon, 4 Aug 2025 23:46:16 +0100 Subject: [PATCH 04/16] chore: assign / reuse `foundSuper` --- src/compiler/transformers/transform-utils.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/compiler/transformers/transform-utils.ts b/src/compiler/transformers/transform-utils.ts index dceea06cae2..81de9750ddd 100644 --- a/src/compiler/transformers/transform-utils.ts +++ b/src/compiler/transformers/transform-utils.ts @@ -1013,8 +1013,9 @@ export const updateConstructor = ( if (constructorIndex >= 0 && ts.isConstructorDeclaration(constructorMethod)) { const constructorBodyStatements = constructorMethod.body?.statements; + const foundSuperCall = foundSuper(constructorBodyStatements); - if (!foundSuper(constructorBodyStatements) && needsSuper(classNode)) { + if (!foundSuperCall && needsSuper(classNode)) { // if there is no super and it needs one the statements comprising the // body of the constructor should be: // @@ -1023,14 +1024,13 @@ export const updateConstructor = ( // 3. the statements currently comprising the body of the constructor statements = [createConstructorBodyWithSuper(includeFalseArg), ...statements, ...constructorBodyStatements]; } else { - const superCall = foundSuper(constructorBodyStatements); - const updatedStatements = constructorBodyStatements.filter((s) => s !== superCall); + const updatedStatements = constructorBodyStatements.filter((s) => s !== foundSuperCall); // if no new super is needed. The body of the constructor should be: // 1. Any current super call // 2. the new statements we've created // 3. the statements currently comprising the body of the constructor - if (superCall) { - statements = [superCall, ...statements, ...updatedStatements]; + if (foundSuperCall) { + statements = [foundSuperCall, ...statements, ...updatedStatements]; } else { statements = [...statements, ...updatedStatements]; } From b90abc2a3d51f460f638eb70f24e23afc90368e9 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Tue, 5 Aug 2025 00:33:23 +0100 Subject: [PATCH 05/16] chore: fix test --- test/wdio/test-sibling/src/global.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/wdio/test-sibling/src/global.ts b/test/wdio/test-sibling/src/global.ts index fece2b1d8a9..28fe71c8b13 100644 --- a/test/wdio/test-sibling/src/global.ts +++ b/test/wdio/test-sibling/src/global.ts @@ -1 +1,2 @@ declare const Context: any; +export default Context; \ No newline at end of file From 678ae84d3b22b397dacfa0fa1ed00a25d6913c4c Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Tue, 5 Aug 2025 00:35:24 +0100 Subject: [PATCH 06/16] chore: format --- test/wdio/test-sibling/src/global.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/wdio/test-sibling/src/global.ts b/test/wdio/test-sibling/src/global.ts index 28fe71c8b13..f08eecf4a42 100644 --- a/test/wdio/test-sibling/src/global.ts +++ b/test/wdio/test-sibling/src/global.ts @@ -1,2 +1,2 @@ declare const Context: any; -export default Context; \ No newline at end of file +export default Context; From ab914e457ea0ea7156566fb8c777c1e646a8b728 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Tue, 5 Aug 2025 01:07:58 +0100 Subject: [PATCH 07/16] chore: fix test --- test/wdio/test-sibling/src/global.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/wdio/test-sibling/src/global.ts b/test/wdio/test-sibling/src/global.ts index f08eecf4a42..884bb469279 100644 --- a/test/wdio/test-sibling/src/global.ts +++ b/test/wdio/test-sibling/src/global.ts @@ -1,2 +1,3 @@ -declare const Context: any; -export default Context; +const Context: any = {}; +export { Context }; +export default () => {}; From 2d8bab7f9de6179c7b14276152956089704cc383 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Wed, 6 Aug 2025 00:26:08 +0100 Subject: [PATCH 08/16] chore: read all the extended tree class methods --- .../static-to-meta/class-methods.ts | 9 ++------ .../transformers/static-to-meta/component.ts | 21 +++++++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/compiler/transformers/static-to-meta/class-methods.ts b/src/compiler/transformers/static-to-meta/class-methods.ts index 3cfa8f82e35..f189eb4a75e 100644 --- a/src/compiler/transformers/static-to-meta/class-methods.ts +++ b/src/compiler/transformers/static-to-meta/class-methods.ts @@ -3,16 +3,11 @@ import ts from 'typescript'; import type * as d from '../../../declarations'; import { isMethod } from '../transform-utils'; -export const parseClassMethods = (cmpNode: ts.ClassDeclaration, cmpMeta: d.ComponentCompilerMeta) => { - const classMembers = cmpNode.members; - if (!classMembers || classMembers.length === 0) { +export const parseClassMethods = (classMethods: ts.MethodDeclaration[], cmpMeta: d.ComponentCompilerMeta) => { + if (!classMethods?.length) { return; } - const classMethods = classMembers.filter((m) => ts.isMethodDeclaration(m)); - if (classMethods.length === 0) { - return; - } const hasHostData = classMethods.some((m) => isMethod(m, 'hostData')); cmpMeta.hasAttributeChangedCallbackFn = classMethods.some((m) => isMethod(m, 'attributeChangedCallback')); diff --git a/src/compiler/transformers/static-to-meta/component.ts b/src/compiler/transformers/static-to-meta/component.ts index 6f4c47b1eed..9e3313cc88f 100644 --- a/src/compiler/transformers/static-to-meta/component.ts +++ b/src/compiler/transformers/static-to-meta/component.ts @@ -192,6 +192,7 @@ export const parseStaticComponentMeta = ( let events = parseStaticEvents(staticMembers); let watchers = parseStaticWatchers(staticMembers); let hasMixin = false; + let classMethods = cmpNode.members.filter(ts.isMethodDeclaration); const tree = buildExtendsTree(compilerCtx, cmpNode, [], typeChecker, config); tree.map((extendedClass) => { @@ -210,6 +211,7 @@ export const parseStaticComponentMeta = ( listeners = [...deDupeMembers(parseStaticListeners(extendedStaticMembers) ?? [], listeners), ...listeners]; events = [...deDupeMembers(parseStaticEvents(extendedStaticMembers) ?? [], events), ...events]; watchers = [...(parseStaticWatchers(extendedStaticMembers) ?? []), ...watchers]; + classMethods = [...classMethods, ...(extendedClass.classNode.members.filter(ts.isMethodDeclaration) ?? [])]; if (isMixin) { hasMixin = true; @@ -304,18 +306,18 @@ export const parseStaticComponentMeta = ( directDependencies: [], }; - const visitComponentChildNode = (node: ts.Node) => { - validateComponentMembers(node); + const visitComponentChildNode = (node: ts.Node, buildCtx: d.BuildCtx) => { + validateComponentMembers(node, buildCtx); if (ts.isCallExpression(node)) { parseCallExpression(cmp, node); } else if (ts.isStringLiteral(node)) { parseStringLiteral(cmp, node); } - node.forEachChild(visitComponentChildNode); + node.forEachChild((child) => visitComponentChildNode(child, buildCtx)); }; - visitComponentChildNode(cmpNode); - parseClassMethods(cmpNode, cmp); + visitComponentChildNode(cmpNode, buildCtx); + parseClassMethods(classMethods, cmp); const hasModernPropertyDecls = detectModernPropDeclarations(cmpNode, cmp); if (!hasModernPropertyDecls && hasMixin) { @@ -347,7 +349,7 @@ export const parseStaticComponentMeta = ( return cmpNode; }; -const validateComponentMembers = (node: ts.Node) => { +const validateComponentMembers = (node: ts.Node, buildCtx: d.BuildCtx) => { /** * validate if: */ @@ -379,9 +381,10 @@ const validateComponentMembers = (node: ts.Node) => { ) ) { const componentName = node.parent.name.getText(); - throw new Error( - `The component "${componentName}" has a getter called "${propName}". This getter is reserved for use by Stencil components and should not be defined by the user.`, - ); + const err = buildError(buildCtx.diagnostics); + err.messageText = `The component "${componentName}" has a getter called "${propName}". + This getter is reserved for use by Stencil components and should not be defined by the user.`; + augmentDiagnosticWithNode(err, node); } } }; From be7d1e3771bb8b3fd9070481a2e016c71d8d8444 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Thu, 7 Aug 2025 01:14:51 +0100 Subject: [PATCH 09/16] chore: added some unit tests --- .../transformers/static-to-meta/component.ts | 116 +++--- .../static-to-meta/parse-static.ts | 2 +- .../transformers/static-to-meta/visitor.ts | 2 +- .../test/convert-decorators.spec.ts | 362 +++++++++++++++++- src/compiler/transformers/test/transpile.ts | 19 + 5 files changed, 450 insertions(+), 51 deletions(-) diff --git a/src/compiler/transformers/static-to-meta/component.ts b/src/compiler/transformers/static-to-meta/component.ts index 9e3313cc88f..89c5bc3cce2 100644 --- a/src/compiler/transformers/static-to-meta/component.ts +++ b/src/compiler/transformers/static-to-meta/component.ts @@ -39,7 +39,6 @@ const BLACKLISTED_COMPONENT_METHODS = [ * @param classDeclaration a class declaration to analyze * @param dependentClasses a flat array tree of classes that extend from each other * @param typeChecker the TypeScript type checker - * @param config the Stencil configuration * @returns a flat array of classes that extend from each other, including the current class */ const buildExtendsTree = ( @@ -47,7 +46,7 @@ const buildExtendsTree = ( classDeclaration: ts.ClassDeclaration, dependentClasses: { classNode: ts.ClassDeclaration; fileName: string }[], typeChecker: ts.TypeChecker, - config: d.ValidatedConfig, + buildCtx: d.BuildCtx, ) => { const hasHeritageClauses = classDeclaration.heritageClauses && classDeclaration.heritageClauses.length > 0; if (!hasHeritageClauses) return dependentClasses; @@ -73,7 +72,7 @@ const buildExtendsTree = ( source.statements.forEach((statement) => { if (ts.isClassDeclaration(statement)) { dependentClasses.push({ classNode: statement, fileName: source.fileName }); - buildExtendsTree(compilerCtx, statement, dependentClasses, typeChecker, config); + buildExtendsTree(compilerCtx, statement, dependentClasses, typeChecker, buildCtx); } }); } @@ -81,40 +80,58 @@ const buildExtendsTree = ( } catch (e) { // sad path (normally >1 levels deep): the extends type does not resolve so let's find it manually: const currentSource = classDeclaration.getSourceFile(); - classDeclaration.getSourceFile()?.statements.forEach((statement) => { - if (ts.isImportDeclaration(statement)) { - // 1) loop through import declarations in the current source file - if (ts.isNamedImports(statement.importClause?.namedBindings)) { - statement.importClause?.namedBindings.elements.forEach((element) => { - // 2) loop through the named bindings of the import declaration - if (element.name.getText() === type.expression.getText()) { - // 3) check the name matches the `extends` type expression - const className = element.propertyName?.getText() || element.name.getText(); - const foundFile = tsResolveModuleName( - config, - compilerCtx, - statement.moduleSpecifier.getText().replaceAll(/['"]/g, ''), - currentSource.fileName, - ); - if (foundFile) { - // 4) resolve the module name to a file - const foundModule = compilerCtx.moduleMap.get(foundFile.resolvedModule.resolvedFileName); - (foundModule?.staticSourceFile as ts.SourceFile).statements.forEach((statement) => { - if ( - ts.isClassDeclaration(statement) && - statement.name?.getText() === className && - !dependentClasses.some((dc) => dc.classNode === statement) - ) { - // 5) find the class declaration - dependentClasses.push({ classNode: statement, fileName: foundModule.staticSourceFile.fileName }); - // 6) check if the class declaration extends from another class - buildExtendsTree(compilerCtx, statement, dependentClasses, typeChecker, config); - } - }); - } - } - }); + const importStatements = currentSource.statements.filter(ts.isImportDeclaration); + const classDeclarations = currentSource.statements.filter(ts.isClassDeclaration); + let found = false; + + // let's first check if the class is in the current source file + if (classDeclarations.length > 1) { + classDeclarations.forEach((statement) => { + if ( + statement.name?.getText() === type.expression.getText() && + !dependentClasses.some((dc) => dc.classNode === statement) + ) { + found = true; + dependentClasses.push({ classNode: statement, fileName: currentSource.fileName }); + buildExtendsTree(compilerCtx, statement, dependentClasses, typeChecker, buildCtx); } + }); + } + if (found) return; + + // if not found, let's check the import statements + importStatements.forEach((statement) => { + // 1) loop through import declarations in the current source file + if (ts.isNamedImports(statement.importClause?.namedBindings)) { + statement.importClause?.namedBindings.elements.forEach((element) => { + // 2) loop through the named bindings of the import declaration + if (element.name.getText() === type.expression.getText()) { + // 3) check the name matches the `extends` type expression + const className = element.propertyName?.getText() || element.name.getText(); + const foundFile = tsResolveModuleName( + buildCtx.config, + compilerCtx, + statement.moduleSpecifier.getText().replaceAll(/['"]/g, ''), + currentSource.fileName, + ); + if (foundFile) { + // 4) resolve the module name to a file + const foundModule = compilerCtx.moduleMap.get(foundFile.resolvedModule.resolvedFileName); + (foundModule?.staticSourceFile as ts.SourceFile).statements.forEach((statement) => { + if ( + ts.isClassDeclaration(statement) && + statement.name?.getText() === className && + !dependentClasses.some((dc) => dc.classNode === statement) + ) { + // 5) find the class declaration + dependentClasses.push({ classNode: statement, fileName: foundModule.staticSourceFile.fileName }); + // 6) check if the class declaration extends from another class + buildExtendsTree(compilerCtx, statement, dependentClasses, typeChecker, buildCtx); + } + }); + } + } + }); } }); } @@ -128,7 +145,8 @@ type DeDupeMember = | d.ComponentCompilerState | d.ComponentCompilerMethod | d.ComponentCompilerListener - | d.ComponentCompilerEvent; + | d.ComponentCompilerEvent + | d.ComponentCompilerWatch; /** * Given two arrays of static members, return a new array containing only the @@ -140,7 +158,15 @@ type DeDupeMember = * @returns an array of static members that are not present in the second array */ const deDupeMembers = (dedupeMembers: T[], staticMembers: T[]) => { - return dedupeMembers.filter((s) => !staticMembers.some((d) => d.name === s.name)); + return dedupeMembers.filter( + (s) => + !staticMembers.some((d) => { + if ((d as d.ComponentCompilerWatch).methodName) { + return (d as any).methodName === (s as any).methodName; + } + return (d as any).name === (s as any).name; + }), + ); }; /** @@ -163,7 +189,6 @@ const deDupeMembers = (dedupeMembers: T[], staticMembers * @param buildCtx the current build context, used to surface diagnostics * @param transformOpts options which control various aspects of the * transformation - * @param config stencil configuration * @returns the TypeScript class declaration IR instance with which the * function was called */ @@ -174,7 +199,6 @@ export const parseStaticComponentMeta = ( moduleFile: d.Module, buildCtx: d.BuildCtx, transformOpts?: d.TransformOptions, - config?: d.ValidatedConfig, ): ts.ClassDeclaration => { if (cmpNode.members == null) { return cmpNode; @@ -194,7 +218,7 @@ export const parseStaticComponentMeta = ( let hasMixin = false; let classMethods = cmpNode.members.filter(ts.isMethodDeclaration); - const tree = buildExtendsTree(compilerCtx, cmpNode, [], typeChecker, config); + const tree = buildExtendsTree(compilerCtx, cmpNode, [], typeChecker, buildCtx); tree.map((extendedClass) => { const extendedStaticMembers = extendedClass.classNode.members.filter(isStaticGetter); const mixinProps = parseStaticProps(extendedStaticMembers) ?? []; @@ -210,7 +234,7 @@ export const parseStaticComponentMeta = ( methods = [...deDupeMembers(parseStaticMethods(extendedStaticMembers) ?? [], methods), ...methods]; listeners = [...deDupeMembers(parseStaticListeners(extendedStaticMembers) ?? [], listeners), ...listeners]; events = [...deDupeMembers(parseStaticEvents(extendedStaticMembers) ?? [], events), ...events]; - watchers = [...(parseStaticWatchers(extendedStaticMembers) ?? []), ...watchers]; + watchers = [...deDupeMembers(parseStaticWatchers(extendedStaticMembers) ?? [], watchers), ...watchers]; classMethods = [...classMethods, ...(extendedClass.classNode.members.filter(ts.isMethodDeclaration) ?? [])]; if (isMixin) { @@ -322,9 +346,10 @@ export const parseStaticComponentMeta = ( if (!hasModernPropertyDecls && hasMixin) { const err = buildError(buildCtx.diagnostics); + const target = buildCtx.config.tsCompilerOptions?.target; err.messageText = `Component classes can only extend from other Stencil decorated base classes when targetting more modern JavaScript (ES2022 and above). - Your current TypeScript configuration is set to target \`${ts.ScriptTarget[config.tsCompilerOptions.target]}\` - please amend your tsconfig.json.`; - augmentDiagnosticWithNode(err, cmpNode); + ${target ? `Your current TypeScript configuration is set to target \`${ts.ScriptTarget[target]}\`.` : ''} Please amend your tsconfig.json.`; + if (!buildCtx.config._isTesting) augmentDiagnosticWithNode(err, cmpNode); } cmp.htmlAttrNames = unique(cmp.htmlAttrNames); @@ -382,8 +407,7 @@ const validateComponentMembers = (node: ts.Node, buildCtx: d.BuildCtx) => { ) { const componentName = node.parent.name.getText(); const err = buildError(buildCtx.diagnostics); - err.messageText = `The component "${componentName}" has a getter called "${propName}". - This getter is reserved for use by Stencil components and should not be defined by the user.`; + err.messageText = `The component "${componentName}" has a getter called "${propName}". This getter is reserved for use by Stencil components and should not be defined by the user.`; augmentDiagnosticWithNode(err, node); } } diff --git a/src/compiler/transformers/static-to-meta/parse-static.ts b/src/compiler/transformers/static-to-meta/parse-static.ts index 9ddb32882db..07b4ec40e96 100644 --- a/src/compiler/transformers/static-to-meta/parse-static.ts +++ b/src/compiler/transformers/static-to-meta/parse-static.ts @@ -46,7 +46,7 @@ export const updateModule = ( const visitNode = (node: ts.Node) => { if (ts.isClassDeclaration(node)) { - parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile, buildCtx, undefined, config); + parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile, buildCtx, undefined); return; } else if (ts.isImportDeclaration(node)) { parseModuleImport(config, compilerCtx, buildCtx, moduleFile, srcDirPath, node, true); diff --git a/src/compiler/transformers/static-to-meta/visitor.ts b/src/compiler/transformers/static-to-meta/visitor.ts index f3285dd6aaa..82a5c082b3a 100644 --- a/src/compiler/transformers/static-to-meta/visitor.ts +++ b/src/compiler/transformers/static-to-meta/visitor.ts @@ -22,7 +22,7 @@ export const convertStaticToMeta = ( const visitNode = (node: ts.Node): ts.VisitResult => { if (ts.isClassDeclaration(node)) { - return parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile, buildCtx, transformOpts, config); + return parseStaticComponentMeta(compilerCtx, typeChecker, node, moduleFile, buildCtx, transformOpts); } else if (ts.isImportDeclaration(node)) { parseModuleImport(config, compilerCtx, buildCtx, moduleFile, dirPath, node, !transformOpts.isolatedModules); } else if (ts.isCallExpression(node)) { diff --git a/src/compiler/transformers/test/convert-decorators.spec.ts b/src/compiler/transformers/test/convert-decorators.spec.ts index 23a8031bbe7..4025ab38169 100644 --- a/src/compiler/transformers/test/convert-decorators.spec.ts +++ b/src/compiler/transformers/test/convert-decorators.spec.ts @@ -272,7 +272,7 @@ describe('convert-decorators', () => { it('should preserve statements in an existing constructor w/ non-decorated field', async () => { const t = transpileModule(` @Component({ - tag: 'example', + tag: 'example-tag', }) export class Example implements FooBar { private classProps: Array; @@ -286,14 +286,18 @@ describe('convert-decorators', () => { await c`export class Example { constructor() { this.classProps = ["variant", "theme"]; - }}`, + } + static get is() { + return 'example-tag'; + } + }`, ); }); it('should preserve statements in an existing constructor super, decorated field', async () => { const t = transpileModule(` @Component({ - tag: 'example', + tag: 'example-tag', }) export class Example extends Parent { @Prop() foo: string = "bar"; @@ -426,6 +430,358 @@ describe('convert-decorators', () => { expect(getStaticGetter(t.outputText, 'attachInternalsMemberName')).toBe('elementInternals'); }); + it('should derive meta data from extended tree of classes', async () => { + const t = transpileModule(` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Prop() foo: string; + } + class Parent extends GrandParent { + render() {} + } + class GrandParent { + connectedCallback() {} + } + `); + + expect(t.cmp.hasRenderFn).toBe(true); + expect(t.cmp.hasConnectedCallbackFn).toBe(true); + }); + + it('should throw error if target is less than es2022', async () => { + try { + transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Prop() foo: string = 'cmp a foo'; + } + class Parent { + @Prop() foo: string = 'parent foo'; + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ES2021 }, + ); + } catch (e: any) { + expect(e.message).toContain('ES2022 and above'); + } + }); + + it('should merge extended class property meta', async () => { + const t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Prop() foo: string = 'cmp a foo'; + } + class Parent extends GrandParent { + @Prop() foo: string = 'parent foo'; + } + class GrandParent { + @Prop() bar: string = 'grandparent bar'; + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ESNext }, + ); + + expect(t.properties).toEqual([ + { + attribute: 'bar', + complexType: { + original: 'string', + references: {}, + resolved: 'string', + }, + defaultValue: "'grandparent bar'", + docs: { + tags: [], + text: '', + }, + getter: false, + internal: false, + mutable: false, + name: 'bar', + optional: false, + reflect: false, + required: false, + setter: false, + type: 'string', + }, + { + attribute: 'foo', + complexType: { + original: 'string', + references: {}, + resolved: 'string', + }, + defaultValue: "'cmp a foo'", + docs: { + tags: [], + text: '', + }, + getter: false, + internal: false, + mutable: false, + name: 'foo', + optional: false, + reflect: false, + required: false, + setter: false, + type: 'string', + }, + ]); + }); + + it('should merge extended class state meta', async () => { + const t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @State() foo: string = 'cmp a foo'; + } + class Parent extends GrandParent { + @State() foo: string = 'parent foo'; + } + class GrandParent { + @State() bar: string = 'grandparent bar'; + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ESNext }, + ); + + expect(t.states).toEqual([{ name: 'bar' }, { name: 'foo' }]); + }); + + it('should merge extended class method meta', async () => { + const t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Method() async foo(): string { + return 'CmpA'; + } + } + class Parent extends GrandParent { + @Method() async foo(): string[] { + return ['Parent']; + } + } + class GrandParent { + @Method() async bar(): string { + return 'GrandParent'; + } + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ESNext }, + ); + + expect(t.methods).toEqual([ + { + complexType: { + parameters: [], + references: {}, + return: 'string', + signature: '() => string', + }, + docs: { + tags: [], + text: '', + }, + internal: false, + name: 'bar', + }, + { + complexType: { + parameters: [], + references: {}, + return: 'string', + signature: '() => string', + }, + docs: { + tags: [], + text: '', + }, + internal: false, + name: 'foo', + }, + ]); + }); + + it('should merge extended class listeners meta', async () => { + const t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Listen('foo', {target: 'body'}) + fooHandler() {} + } + class Parent extends GrandParent { + @Listen('foo') + fooHandler() {} + } + class GrandParent { + @Listen('bar') + barHandler() {} + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ESNext }, + ); + + expect(t.listeners).toEqual([ + { + capture: false, + method: 'barHandler', + name: 'bar', + passive: false, + target: undefined, + }, + { + capture: false, + method: 'fooHandler', + name: 'foo', + passive: false, + target: 'body', + }, + ]); + }); + + it('should merge extended class watchers meta', async () => { + const t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Watch('foo') + fooHandler() { + return 'CmpA'; + } + } + class Parent extends GrandParent { + @Watch('foo') + anotherFooHandler() { + return 'Parent'; + } + } + class GrandParent { + @Watch('bar') + barHandler() { + return 'GrandParent'; + } + + @Watch('foo') + fooHandler() { + return 'GrandParent'; + } + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ESNext }, + ); + + expect(t.watchers).toEqual([ + { + methodName: 'barHandler', + propName: 'bar', + }, + { + methodName: 'anotherFooHandler', + propName: 'foo', + }, + { + methodName: 'fooHandler', + propName: 'foo', + }, + ]); + }); + + it('should merge extended class events meta', async () => { + const t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Event({bubbles: true}) anEvent: EventEmitter; + } + class Parent extends GrandParent { + @Event({bubbles: false}) anEvent: EventEmitter; + } + class GrandParent { + @Event({bubbles: false}) anGrandParentEvent: EventEmitter; + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ESNext }, + ); + + expect(t.events).toEqual([ + { + bubbles: false, + cancelable: true, + complexType: { + original: 'string', + references: {}, + resolved: 'string', + }, + composed: true, + docs: { + tags: [], + text: '', + }, + internal: false, + method: 'anGrandParentEvent', + name: 'anGrandParentEvent', + }, + { + bubbles: true, + cancelable: true, + complexType: { + original: 'string', + references: {}, + resolved: 'string', + }, + composed: true, + docs: { + tags: [], + text: '', + }, + internal: false, + method: 'anEvent', + name: 'anEvent', + }, + ]); + }); + describe('filterDecorators', () => { it.each>>([[[]], [['ExcludedDecorator']]])( 'returns undefined when no decorators are provided', diff --git a/src/compiler/transformers/test/transpile.ts b/src/compiler/transformers/test/transpile.ts index 48bd4b7419d..5f1cdf8a59b 100644 --- a/src/compiler/transformers/test/transpile.ts +++ b/src/compiler/transformers/test/transpile.ts @@ -116,6 +116,19 @@ export function transpileModule( ...beforeTransformers, ], after: [ + (context) => { + let newSource: ts.SourceFile; + const visitNode = (node: ts.Node): ts.Node => { + // just a patch for testing - source file resolution gets + // lost in the after transform phase + node.getSourceFile = () => newSource; + return ts.visitEachChild(node, visitNode, context); + }; + return (sourceFile: ts.SourceFile): ts.SourceFile => { + newSource = sourceFile; + return visitNode(sourceFile) as ts.SourceFile; + }; + }, convertStaticToMeta(config, compilerCtx, buildCtx, tsTypeChecker, null, transformOpts), ...afterTransformers, ], @@ -139,6 +152,11 @@ export function transpileModule( const methods = cmp ? cmp.methods : null; const method = methods ? methods[0] : null; const elementRef = cmp ? cmp.elementRef : null; + const watchers = cmp ? cmp.watchers : null; + + if (buildCtx.hasError) { + throw new Error(buildCtx.diagnostics[0].messageText as string); + } return { buildCtx, @@ -158,6 +176,7 @@ export function transpileModule( moduleFile, outputText, properties, + watchers, property, state, states, From 2ecafebb0d8bc9bd2eeb8e0d4d6ab466d32671ff Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Wed, 20 Aug 2025 22:15:34 +0100 Subject: [PATCH 10/16] chore: more unit tests --- .../test/convert-decorators.spec.ts | 74 ++++++++++- .../test/native-component.spec.ts | 56 ++++++++ .../transformers/test/transform-utils.spec.ts | 120 ++++++++++++++++++ src/compiler/transformers/test/transpile.ts | 4 + 4 files changed, 253 insertions(+), 1 deletion(-) diff --git a/src/compiler/transformers/test/convert-decorators.spec.ts b/src/compiler/transformers/test/convert-decorators.spec.ts index 4025ab38169..849ebf66a4a 100644 --- a/src/compiler/transformers/test/convert-decorators.spec.ts +++ b/src/compiler/transformers/test/convert-decorators.spec.ts @@ -448,6 +448,54 @@ describe('convert-decorators', () => { expect(t.cmp.hasConnectedCallbackFn).toBe(true); }); + it('should derive `isExtended` and `isMixin`', async () => { + let t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA extends Parent { + @Prop() foo: string; + } + class Parent extends GrandParent { + render() {} + } + class GrandParent { + connectedCallback() {} + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ES2022 }, + ); + + expect(t.isExtended).toBe(true); + expect(t.isMixin).toBe(false); + + t = transpileModule( + ` + @Component({tag: 'cmp-a'}) + class CmpA { + @Prop() foo: string; + } + @Component({tag: 'cmp-b'}) + class CmpB extends CmpA { + @Prop() foo: string; + } + `, + undefined, + undefined, + [], + [], + [], + { target: ts.ScriptTarget.ES2022 }, + ); + + expect(t.isExtended).toBe(true); + expect(t.isMixin).toBe(true); + }); + it('should throw error if target is less than es2022', async () => { try { transpileModule( @@ -481,9 +529,11 @@ describe('convert-decorators', () => { } class Parent extends GrandParent { @Prop() foo: string = 'parent foo'; + @Prop() bar: string = 'parent bar'; } class GrandParent { @Prop() bar: string = 'grandparent bar'; + @Prop() baz: string = 'grandparent baz'; } `, undefined, @@ -495,6 +545,28 @@ describe('convert-decorators', () => { ); expect(t.properties).toEqual([ + { + attribute: 'baz', + complexType: { + original: 'string', + references: {}, + resolved: 'string', + }, + defaultValue: "'grandparent baz'", + docs: { + tags: [], + text: '', + }, + getter: false, + internal: false, + mutable: false, + name: 'baz', + optional: false, + reflect: false, + required: false, + setter: false, + type: 'string', + }, { attribute: 'bar', complexType: { @@ -502,7 +574,7 @@ describe('convert-decorators', () => { references: {}, resolved: 'string', }, - defaultValue: "'grandparent bar'", + defaultValue: "'parent bar'", docs: { tags: [], text: '', diff --git a/src/compiler/transformers/test/native-component.spec.ts b/src/compiler/transformers/test/native-component.spec.ts index aab80a07ab4..2ddae7b2863 100644 --- a/src/compiler/transformers/test/native-component.spec.ts +++ b/src/compiler/transformers/test/native-component.spec.ts @@ -1,3 +1,4 @@ +import * as ts from 'typescript'; import * as d from '@stencil/core/declarations'; import { mockCompilerCtx } from '@stencil/core/testing'; @@ -45,6 +46,61 @@ describe('nativeComponentTransform', () => { ); }); + it('passes false to super calls', async () => { + const code = ` + class PlainClass { + @Prop() baz: number; + } + @Component({ + tag: 'cmp-b', + }) + export class CmpB extends PlainClass { + @Prop() bar: number; + } + @Component({ + tag: 'cmp-a', + }) + export class CmpA extends CmpB { + @Prop() foo: number; + } + `; + + const transformer = nativeComponentTransform(compilerCtx, transformOpts); + const transpiledModule = transpileModule(code, null, compilerCtx, [], [transformer], [], { + target: ts.ScriptTarget.ESNext, + }); + + expect(await formatCode(transpiledModule.outputText)).toContain( + await c`__stencil_defineCustomElement(CmpA, [0, 'cmp-a', { baz: [2], bar: [2], foo: [2] }])`, + ); + + expect(await formatCode(transpiledModule.outputText)).toContain( + await c`const CmpB = class extends PlainClass { + constructor(registerHost) { + super(false); + if (registerHost !== false) { + this.__registerHost(); + } + super(); + } + bar; + };`, + ); + + expect(await formatCode(transpiledModule.outputText)).toContain( + await c`const CmpA = class extends CmpB { + constructor(registerHost) { + super(false); + if (registerHost !== false) { + this.__registerHost(); + } + super(); + } + foo; + };`, + ); + }); + describe('updateNativeComponentClass', () => { it("adds __attachShadow() calls when a component doesn't have a constructor", () => { const code = ` diff --git a/src/compiler/transformers/test/transform-utils.spec.ts b/src/compiler/transformers/test/transform-utils.spec.ts index 5350f3ea4b3..14bce653b0d 100644 --- a/src/compiler/transformers/test/transform-utils.spec.ts +++ b/src/compiler/transformers/test/transform-utils.spec.ts @@ -6,6 +6,7 @@ import { retrieveModifierLike, retrieveTsDecorators, retrieveTsModifiers, + updateConstructor, } from '../transform-utils'; describe('transform-utils', () => { @@ -200,4 +201,123 @@ describe('transform-utils', () => { expect(modifiers![0]).toEqual(initialModifiers[0]); }); }); + + describe('updateConstructor', () => { + function printClassMembers(classNode: ts.ClassDeclaration, classMembers: ts.ClassElement[]) { + const updatedClass = ts.factory.updateClassDeclaration( + classNode, + classNode.modifiers, + classNode.name, + classNode.typeParameters, + classNode.heritageClauses, + classMembers, + ); + const printer: ts.Printer = ts.createPrinter(); + let sourceFile = ts.createSourceFile('dummy.ts', '', ts.ScriptTarget.ESNext, false, ts.ScriptKind.TS); + sourceFile = ts.factory.updateSourceFile(sourceFile, [updatedClass]); + return printer.printFile(sourceFile).replace(/\n/g, '').replace(/ /g, ' '); + } + + it('returns the same constructor when no parameters are provided', () => { + const classNode = ts.factory.createClassDeclaration([], 'MyClass', undefined, undefined, [ + ts.factory.createConstructorDeclaration([], [], ts.factory.createBlock([], false)), + ]); + const updatedMembers = updateConstructor(classNode, Array.from(classNode.members), []); + + expect(printClassMembers(classNode, updatedMembers)).toBe(`class MyClass { constructor() { }}`); + }); + + it('adds a constructor when none is present and statements are provided', () => { + const ctorStatements = [ts.factory.createExpressionStatement(ts.factory.createIdentifier('someMethod()'))]; + + const classNode = ts.factory.createClassDeclaration([], 'MyClass', undefined, undefined, [ + ts.factory.createMethodDeclaration( + [], + undefined, + ts.factory.createIdentifier('myMethod'), + undefined, + undefined, + [], + undefined, + ts.factory.createBlock([], false), + ), + ts.factory.createPropertyDeclaration( + [], + ts.factory.createIdentifier('myProperty'), + undefined, + undefined, + undefined, + ), + ]); + + const updatedMembers = updateConstructor(classNode, Array.from(classNode.members), ctorStatements); + + expect(printClassMembers(classNode, updatedMembers)).toBe( + `class MyClass { constructor() { someMethod(); } myMethod() { } myProperty;}`, + ); + }); + + it('adds super call when class extends another class', () => { + const classNode = ts.factory.createClassDeclaration( + [], + 'MyClass', + undefined, + [ + ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ + ts.factory.createExpressionWithTypeArguments(ts.factory.createIdentifier('BaseClass'), []), + ]), + ], + [ts.factory.createConstructorDeclaration([], [], ts.factory.createBlock([], false))], + ); + + expect(printClassMembers(classNode, updateConstructor(classNode, Array.from(classNode.members), []))).toBe( + `class MyClass extends BaseClass { constructor() { super(); }}`, + ); + }); + + it('makes sure super call is the first statement in the constructor body', () => { + const classNode = ts.factory.createClassDeclaration( + [], + 'MyClass', + undefined, + [ + ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ + ts.factory.createExpressionWithTypeArguments(ts.factory.createIdentifier('BaseClass'), []), + ]), + ], + [ + ts.factory.createConstructorDeclaration( + [], + [], + ts.factory.createBlock( + [ts.factory.createExpressionStatement(ts.factory.createIdentifier('someMethod()'))], + false, + ), + ), + ], + ); + + expect(printClassMembers(classNode, updateConstructor(classNode, Array.from(classNode.members), []))).toBe( + `class MyClass extends BaseClass { constructor() { super(); someMethod(); }}`, + ); + }); + + it('adds false argument to super call when no parameters are provided', () => { + const classNode = ts.factory.createClassDeclaration( + [], + 'MyClass', + undefined, + [ + ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ + ts.factory.createExpressionWithTypeArguments(ts.factory.createIdentifier('BaseClass'), []), + ]), + ], + [ts.factory.createConstructorDeclaration([], [], ts.factory.createBlock([], false))], + ); + + expect( + printClassMembers(classNode, updateConstructor(classNode, Array.from(classNode.members), [], [], true)), + ).toBe(`class MyClass extends BaseClass { constructor() { super(false); }}`); + }); + }); }); diff --git a/src/compiler/transformers/test/transpile.ts b/src/compiler/transformers/test/transpile.ts index 5f1cdf8a59b..8eacb059b02 100644 --- a/src/compiler/transformers/test/transpile.ts +++ b/src/compiler/transformers/test/transpile.ts @@ -153,6 +153,8 @@ export function transpileModule( const method = methods ? methods[0] : null; const elementRef = cmp ? cmp.elementRef : null; const watchers = cmp ? cmp.watchers : null; + const isMixin = cmp ? moduleFile.isMixin : false; + const isExtended = cmp ? moduleFile.isExtended : false; if (buildCtx.hasError) { throw new Error(buildCtx.diagnostics[0].messageText as string); @@ -182,6 +184,8 @@ export function transpileModule( states, tagName, virtualProperties, + isMixin, + isExtended, }; } From 0e6bbe6e71910d419e652139272d7a63852f77fc Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Fri, 29 Aug 2025 15:13:20 +0100 Subject: [PATCH 11/16] chore: wdio tests and bundleid fixing --- .../output-targets/dist-lazy/generate-cjs.ts | 3 +- .../dist-lazy/generate-esm-browser.ts | 5 +- .../output-targets/dist-lazy/generate-esm.ts | 4 +- .../dist-lazy/generate-lazy-module.ts | 16 +- .../dist-lazy/generate-system.ts | 3 +- .../dist-lazy/lazy-bundleid-plugin.ts | 67 +++++++ .../dist-lazy/write-lazy-entry-module.ts | 30 +-- .../component-native/native-component.ts | 15 +- .../component-native/native-constructor.ts | 6 +- .../tranform-to-native-component.ts | 2 +- .../transformers/static-to-meta/component.ts | 9 +- src/compiler/transformers/test/transpile.ts | 2 +- src/compiler/transformers/transform-utils.ts | 5 +- .../types/tests/ComponentCompilerMeta.stub.ts | 1 + src/declarations/stencil-private.ts | 1 + src/utils/es2022-rewire-class-members.ts | 17 +- test/type-tests/tsconfig.json | 2 +- test/wdio/global.ts | 2 +- test/wdio/package-lock.json | 10 +- test/wdio/package.json | 1 + test/wdio/stencil.config-es2022.ts | 2 +- test/wdio/test-sibling/package.json | 6 + test/wdio/test-sibling/src/components.d.ts | 31 +++ .../src/sibling-extended/sibling-extended.tsx | 49 +++++ test/wdio/test-sibling/tsconfig.json | 2 +- test/wdio/ts-target-props/components.d.ts | 57 ------ test/wdio/ts-target/components.d.ts | 181 ++++++++++++++++++ test/wdio/ts-target/extends-cmp/cmp.test.ts | 95 +++++++++ test/wdio/ts-target/extends-cmp/cmp.tsx | 35 ++++ .../extends-cmp/es2022.custom-element.html | 16 ++ .../ts-target/extends-cmp/es2022.dist.html | 11 ++ .../ts-target/extends-cmp/extended-cmp.tsx | 49 +++++ .../ts-target/extends-external/cmp.test.ts | 96 ++++++++++ test/wdio/ts-target/extends-external/cmp.tsx | 35 ++++ .../es2022.custom-element.html | 16 ++ .../extends-external/es2022.dist.html | 11 ++ test/wdio/ts-target/extends-mixin/cmp.test.ts | 95 +++++++++ test/wdio/ts-target/extends-mixin/cmp.tsx | 35 ++++ .../extends-mixin/es2022.custom-element.html | 13 ++ .../ts-target/extends-mixin/es2022.dist.html | 10 + .../ts-target/extends-mixin/mixin-class.ts | 35 ++++ .../wdio/ts-target/extends-test-suite.test.ts | 162 ++++++++++++++++ .../ts-target-props/cmp.test.tsx | 2 +- .../{ => ts-target}/ts-target-props/cmp.tsx | 0 .../es2022.custom-element.html | 0 .../ts-target-props/es2022.dist.html | 0 test/wdio/tsconfig-es2022.json | 7 +- test/wdio/tsconfig-stencil.json | 3 +- test/wdio/tsconfig.json | 2 +- test/wdio/wdio.conf.ts | 12 +- 50 files changed, 1122 insertions(+), 147 deletions(-) create mode 100644 src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts create mode 100644 test/wdio/test-sibling/src/sibling-extended/sibling-extended.tsx delete mode 100644 test/wdio/ts-target-props/components.d.ts create mode 100644 test/wdio/ts-target/components.d.ts create mode 100644 test/wdio/ts-target/extends-cmp/cmp.test.ts create mode 100644 test/wdio/ts-target/extends-cmp/cmp.tsx create mode 100644 test/wdio/ts-target/extends-cmp/es2022.custom-element.html create mode 100644 test/wdio/ts-target/extends-cmp/es2022.dist.html create mode 100644 test/wdio/ts-target/extends-cmp/extended-cmp.tsx create mode 100644 test/wdio/ts-target/extends-external/cmp.test.ts create mode 100644 test/wdio/ts-target/extends-external/cmp.tsx create mode 100644 test/wdio/ts-target/extends-external/es2022.custom-element.html create mode 100644 test/wdio/ts-target/extends-external/es2022.dist.html create mode 100644 test/wdio/ts-target/extends-mixin/cmp.test.ts create mode 100644 test/wdio/ts-target/extends-mixin/cmp.tsx create mode 100644 test/wdio/ts-target/extends-mixin/es2022.custom-element.html create mode 100644 test/wdio/ts-target/extends-mixin/es2022.dist.html create mode 100644 test/wdio/ts-target/extends-mixin/mixin-class.ts create mode 100644 test/wdio/ts-target/extends-test-suite.test.ts rename test/wdio/{ => ts-target}/ts-target-props/cmp.test.tsx (99%) rename test/wdio/{ => ts-target}/ts-target-props/cmp.tsx (100%) rename test/wdio/{ => ts-target}/ts-target-props/es2022.custom-element.html (100%) rename test/wdio/{ => ts-target}/ts-target-props/es2022.dist.html (100%) diff --git a/src/compiler/output-targets/dist-lazy/generate-cjs.ts b/src/compiler/output-targets/dist-lazy/generate-cjs.ts index c3070e0963d..9a94baf62aa 100644 --- a/src/compiler/output-targets/dist-lazy/generate-cjs.ts +++ b/src/compiler/output-targets/dist-lazy/generate-cjs.ts @@ -4,6 +4,7 @@ import type { OutputOptions, RollupBuild } from 'rollup'; import type * as d from '../../../declarations'; import { generateRollupOutput } from '../../app-core/bundle-app-core'; import { generateLazyModules } from './generate-lazy-module'; +import { lazyBundleIdPlugin } from './lazy-bundleid-plugin'; export const generateCjs = async ( config: d.ValidatedConfig, @@ -22,6 +23,7 @@ export const generateCjs = async ( entryFileNames: '[name].cjs.js', assetFileNames: '[name]-[hash][extname]', sourcemap: config.sourceMap, + plugins: [lazyBundleIdPlugin(buildCtx, config, false, '.cjs')], }; if (!!config.extras.experimentalImportInjection || !!config.extras.enableImportInjection) { @@ -44,7 +46,6 @@ export const generateCjs = async ( results, 'es2017', false, - '.cjs', ); await generateShortcuts(compilerCtx, results, cjsOutputs); diff --git a/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts b/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts index dae0165c9fe..49fddff9e27 100644 --- a/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts +++ b/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts @@ -4,6 +4,7 @@ import type { OutputOptions, RollupBuild } from 'rollup'; import type * as d from '../../../declarations'; import { generateRollupOutput } from '../../app-core/bundle-app-core'; import { generateLazyModules } from './generate-lazy-module'; +import { lazyBundleIdPlugin } from './lazy-bundleid-plugin'; export const generateEsmBrowser = async ( config: d.ValidatedConfig, @@ -22,10 +23,13 @@ export const generateEsmBrowser = async ( chunkFileNames: config.hashFileNames ? 'p-[hash].js' : '[name]-[hash].js', assetFileNames: config.hashFileNames ? 'p-[hash][extname]' : '[name]-[hash][extname]', sourcemap: config.sourceMap, + plugins: [lazyBundleIdPlugin(buildCtx, config, config.hashFileNames, '')], }; const output = await generateRollupOutput(rollupBuild, esmOpts, config, buildCtx.entryModules); + // console.log(`generateEsmBrowser, output:`, output); + if (output != null) { const es2017destinations = esmOutputs .map((o) => o.esmDir) @@ -39,7 +43,6 @@ export const generateEsmBrowser = async ( output, 'es2017', true, - '', ); } } diff --git a/src/compiler/output-targets/dist-lazy/generate-esm.ts b/src/compiler/output-targets/dist-lazy/generate-esm.ts index c3f33ee6cfb..fdf9920bced 100644 --- a/src/compiler/output-targets/dist-lazy/generate-esm.ts +++ b/src/compiler/output-targets/dist-lazy/generate-esm.ts @@ -5,6 +5,7 @@ import type * as d from '../../../declarations'; import type { RollupResult } from '../../../declarations'; import { generateRollupOutput } from '../../app-core/bundle-app-core'; import { generateLazyModules } from './generate-lazy-module'; +import { lazyBundleIdPlugin } from './lazy-bundleid-plugin'; export const generateEsm = async ( config: d.ValidatedConfig, @@ -22,6 +23,7 @@ export const generateEsm = async ( entryFileNames: '[name].js', assetFileNames: '[name]-[hash][extname]', sourcemap: config.sourceMap, + plugins: [lazyBundleIdPlugin(buildCtx, config, false, '')], }; const outputTargetType = esmOutputs[0].type; const output = await generateRollupOutput(rollupBuild, esmOpts, config, buildCtx.entryModules); @@ -39,7 +41,6 @@ export const generateEsm = async ( output, 'es2017', false, - '', ); const es5destinations = esmEs5Outputs @@ -54,7 +55,6 @@ export const generateEsm = async ( output, 'es5', false, - '', ); if (config.buildEs5) { diff --git a/src/compiler/output-targets/dist-lazy/generate-lazy-module.ts b/src/compiler/output-targets/dist-lazy/generate-lazy-module.ts index c888c5da39f..f9460cfea48 100644 --- a/src/compiler/output-targets/dist-lazy/generate-lazy-module.ts +++ b/src/compiler/output-targets/dist-lazy/generate-lazy-module.ts @@ -21,7 +21,6 @@ export const generateLazyModules = async ( results: d.RollupResult[], sourceTarget: d.SourceTarget, isBrowserBuild: boolean, - sufix: string, ): Promise => { if (!Array.isArray(destinations) || destinations.length === 0) { return []; @@ -43,7 +42,6 @@ export const generateLazyModules = async ( sourceTarget, shouldMinify, isBrowserBuild, - sufix, ); }), ); @@ -190,10 +188,8 @@ const generateLazyEntryModule = async ( sourceTarget: d.SourceTarget, shouldMinify: boolean, isBrowserBuild: boolean, - sufix: string, ): Promise => { const entryModule = buildCtx.entryModules.find((entryModule) => entryModule.entryKey === rollupResult.entryKey); - const shouldHash = config.hashFileNames && isBrowserBuild; const { code, sourceMap } = await convertChunk( config, @@ -207,17 +203,7 @@ const generateLazyEntryModule = async ( rollupResult.map, ); - const output = await writeLazyModule( - config, - compilerCtx, - outputTargetType, - destinations, - entryModule, - shouldHash, - code, - sourceMap, - sufix, - ); + const output = await writeLazyModule(compilerCtx, outputTargetType, destinations, code, sourceMap, rollupResult); return { rollupResult, diff --git a/src/compiler/output-targets/dist-lazy/generate-system.ts b/src/compiler/output-targets/dist-lazy/generate-system.ts index 6a9cb9666c2..70c74a460f4 100644 --- a/src/compiler/output-targets/dist-lazy/generate-system.ts +++ b/src/compiler/output-targets/dist-lazy/generate-system.ts @@ -5,6 +5,7 @@ import type * as d from '../../../declarations'; import { getAppBrowserCorePolyfills } from '../../app-core/app-polyfills'; import { generateRollupOutput } from '../../app-core/bundle-app-core'; import { generateLazyModules } from './generate-lazy-module'; +import { lazyBundleIdPlugin } from './lazy-bundleid-plugin'; export const generateSystem = async ( config: d.ValidatedConfig, @@ -23,6 +24,7 @@ export const generateSystem = async ( chunkFileNames: config.hashFileNames ? 'p-[hash].system.js' : '[name]-[hash].system.js', assetFileNames: config.hashFileNames ? 'p-[hash][extname]' : '[name]-[hash][extname]', sourcemap: config.sourceMap, + plugins: [lazyBundleIdPlugin(buildCtx, config, config.hashFileNames, '.system')], }; const results = await generateRollupOutput(rollupBuild, esmOpts, config, buildCtx.entryModules); if (results != null) { @@ -38,7 +40,6 @@ export const generateSystem = async ( results, 'es5', true, - '.system', ); await generateSystemLoaders(config, compilerCtx, results, systemOutputs); diff --git a/src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts b/src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts new file mode 100644 index 00000000000..14a62bea7fd --- /dev/null +++ b/src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts @@ -0,0 +1,67 @@ +import MagicString from 'magic-string'; + +import type { OutputChunk, Plugin } from 'rollup'; +import type * as d from '../../../declarations'; + +export const lazyBundleIdPlugin = ( + buildCtx: d.BuildCtx, + config: d.ValidatedConfig, + shouldHash: boolean, + suffix: string, +): Plugin => { + const getBundleId = async (entryKey: string, code: string, suffix: string): Promise => { + if (shouldHash && config.sys?.generateContentHash) { + const hash = await config.sys.generateContentHash(code, config.hashedFileNameLength); + return `p-${hash}${suffix}`; + } + + const components = entryKey.split('.'); + let bundleId = components[0]; + if (components.length > 2) { + bundleId = `${bundleId}_${components.length - 1}`; + } + + return bundleId + suffix; + }; + + return { + name: 'lazyBundleIdPlugin', + async generateBundle(_, bundle) { + const files = Object.entries(bundle as any); + const map = new Map(); + + for (const [_key, file] of files) { + if (!file.isEntry) continue; + + const entryModule = buildCtx.entryModules.find((em) => em.entryKey === file.name); + if (!entryModule) continue; + + map.set(file.fileName, (await getBundleId(file.name, file.code, suffix)) + '.entry.js'); + } + + if (!map.size) return; + + for (const [_key, file] of files) { + if (!file.isEntry) continue; + + file.facadeModuleId = map.get(file.fileName) || file.facadeModuleId; + file.fileName = map.get(file.fileName) || file.fileName; + + const magicString = new MagicString(file.code); + + file.imports.forEach((imported: string, i) => { + const replaced = map.get(imported); + if (replaced) { + magicString.replaceAll(imported, replaced); + file.imports[i] = replaced; + } + }); + file.code = magicString.toString(); + + if (config.sourceMap) { + file.map = magicString.generateMap(); + } + } + }, + }; +}; diff --git a/src/compiler/output-targets/dist-lazy/write-lazy-entry-module.ts b/src/compiler/output-targets/dist-lazy/write-lazy-entry-module.ts index 36cc6289373..d6a46f92b06 100644 --- a/src/compiler/output-targets/dist-lazy/write-lazy-entry-module.ts +++ b/src/compiler/output-targets/dist-lazy/write-lazy-entry-module.ts @@ -3,20 +3,17 @@ import { getSourceMappingUrlForEndOfFile, join } from '@utils'; import type * as d from '../../../declarations'; export const writeLazyModule = async ( - config: d.ValidatedConfig, compilerCtx: d.CompilerCtx, outputTargetType: string, destinations: string[], - entryModule: d.EntryModule, - shouldHash: boolean, code: string, sourceMap: d.SourceMap, - sufix: string, + rollupResult?: d.RollupChunkResult, ): Promise => { // code = replaceStylePlaceholders(entryModule.cmps, modeName, code); - const bundleId = await getBundleId(config, entryModule.entryKey, shouldHash, code, sufix); - const fileName = `${bundleId}.entry.js`; + const fileName = rollupResult.fileName; + const bundleId = fileName.replace('.entry.js', ''); if (sourceMap) { code = code + getSourceMappingUrlForEndOfFile(fileName); @@ -37,24 +34,3 @@ export const writeLazyModule = async ( code, }; }; - -const getBundleId = async ( - config: d.ValidatedConfig, - entryKey: string, - shouldHash: boolean, - code: string, - sufix: string, -): Promise => { - if (shouldHash) { - const hash = await config.sys.generateContentHash(code, config.hashedFileNameLength); - return `p-${hash}${sufix}`; - } - - const components = entryKey.split('.'); - let bundleId = components[0]; - if (components.length > 2) { - bundleId = `${bundleId}_${components.length - 1}`; - } - - return bundleId + sufix; -}; diff --git a/src/compiler/transformers/component-native/native-component.ts b/src/compiler/transformers/component-native/native-component.ts index 2d532559475..30f9b872e56 100644 --- a/src/compiler/transformers/component-native/native-component.ts +++ b/src/compiler/transformers/component-native/native-component.ts @@ -37,18 +37,9 @@ export const updateNativeComponentClass = ( classNode: ts.ClassDeclaration, moduleFile: d.Module, cmp: d.ComponentCompilerMeta, - compilerCtx: d.CompilerCtx, - tsSourceFile: ts.SourceFile, ): ts.ClassDeclaration | ts.VariableStatement => { const withHeritageClauses = updateNativeHostComponentHeritageClauses(classNode, moduleFile); - const members = updateNativeHostComponentMembers( - transformOpts, - withHeritageClauses, - moduleFile, - cmp, - compilerCtx, - tsSourceFile, - ); + const members = updateNativeHostComponentMembers(transformOpts, withHeritageClauses, moduleFile, cmp); return updateComponentClass(transformOpts, withHeritageClauses, withHeritageClauses.heritageClauses, members); }; @@ -148,12 +139,10 @@ const updateNativeHostComponentMembers = ( classNode: ts.ClassDeclaration, moduleFile: d.Module, cmp: d.ComponentCompilerMeta, - compilerCtx: d.CompilerCtx, - tsSourceFile: ts.SourceFile, ): ts.ClassElement[] => { const classMembers = removeStaticMetaProperties(classNode); - updateNativeConstructor(classMembers, moduleFile, cmp, classNode, compilerCtx, tsSourceFile); + updateNativeConstructor(classMembers, moduleFile, cmp, classNode); addNativeConnectedCallback(classMembers, cmp); addNativeElementGetter(classMembers, cmp); addWatchers(classMembers, cmp); diff --git a/src/compiler/transformers/component-native/native-constructor.ts b/src/compiler/transformers/component-native/native-constructor.ts index c70a8bba4cd..e6fd0c8dae4 100644 --- a/src/compiler/transformers/component-native/native-constructor.ts +++ b/src/compiler/transformers/component-native/native-constructor.ts @@ -26,8 +26,6 @@ export const updateNativeConstructor = ( moduleFile: d.Module, cmp: d.ComponentCompilerMeta, classNode: ts.ClassDeclaration, - compilerCtx: d.CompilerCtx, - tsSourceFile: ts.SourceFile, ): void => { if (cmp.isPlain) { return; @@ -42,9 +40,7 @@ export const updateNativeConstructor = ( ...addCreateEvents(moduleFile, cmp), ...createNativeAttachInternalsBinding(cmp), ]; - - const requiresSuperOptout = compilerCtx?.moduleMap.get(tsSourceFile.fileName)?.isExtended; - updateConstructor(classNode, classMembers, nativeCstrStatements, cstrMethodArgs, requiresSuperOptout); + updateConstructor(classNode, classMembers, nativeCstrStatements, cstrMethodArgs, cmp.doesExtend); }; /** diff --git a/src/compiler/transformers/component-native/tranform-to-native-component.ts b/src/compiler/transformers/component-native/tranform-to-native-component.ts index 34ab877a913..215c18dd4f4 100644 --- a/src/compiler/transformers/component-native/tranform-to-native-component.ts +++ b/src/compiler/transformers/component-native/tranform-to-native-component.ts @@ -45,7 +45,7 @@ export const nativeComponentTransform = ( if (ts.isClassDeclaration(node)) { const cmp = getComponentMeta(compilerCtx, tsSourceFile, node); if (cmp != null) { - return updateNativeComponentClass(transformOpts, node, moduleFile, cmp, compilerCtx, tsSourceFile); + return updateNativeComponentClass(transformOpts, node, moduleFile, cmp); } else if (compilerCtx.moduleMap.get(tsSourceFile.fileName)?.isExtended) { return updateNativeExtendedClass(node, moduleFile, transformOpts); } diff --git a/src/compiler/transformers/static-to-meta/component.ts b/src/compiler/transformers/static-to-meta/component.ts index 89c5bc3cce2..01f00674811 100644 --- a/src/compiler/transformers/static-to-meta/component.ts +++ b/src/compiler/transformers/static-to-meta/component.ts @@ -1,4 +1,4 @@ -import { augmentDiagnosticWithNode, buildError, join, normalizePath, relative, unique } from '@utils'; +import { augmentDiagnosticWithNode, buildWarn, join, normalizePath, relative, unique } from '@utils'; import { dirname, isAbsolute } from 'path'; import ts from 'typescript'; @@ -217,6 +217,7 @@ export const parseStaticComponentMeta = ( let watchers = parseStaticWatchers(staticMembers); let hasMixin = false; let classMethods = cmpNode.members.filter(ts.isMethodDeclaration); + let doesExtend = false; const tree = buildExtendsTree(compilerCtx, cmpNode, [], typeChecker, buildCtx); tree.map((extendedClass) => { @@ -228,6 +229,7 @@ export const parseStaticComponentMeta = ( module.isMixin = isMixin; module.isExtended = true; + doesExtend = true; properties = [...deDupeMembers(mixinProps, properties), ...properties]; states = [...deDupeMembers(mixinStates, states), ...states]; @@ -263,6 +265,7 @@ export const parseStaticComponentMeta = ( listeners, events, watchers, + doesExtend, styles: parseStaticStyles(compilerCtx, tagName, moduleFile.sourceFilePath, isCollectionDependency, staticMembers), internal: isInternal(docs), assetsDirs: parseAssetsDirs(staticMembers, moduleFile.jsFilePath), @@ -345,7 +348,7 @@ export const parseStaticComponentMeta = ( const hasModernPropertyDecls = detectModernPropDeclarations(cmpNode, cmp); if (!hasModernPropertyDecls && hasMixin) { - const err = buildError(buildCtx.diagnostics); + const err = buildWarn(buildCtx.diagnostics); const target = buildCtx.config.tsCompilerOptions?.target; err.messageText = `Component classes can only extend from other Stencil decorated base classes when targetting more modern JavaScript (ES2022 and above). ${target ? `Your current TypeScript configuration is set to target \`${ts.ScriptTarget[target]}\`.` : ''} Please amend your tsconfig.json.`; @@ -406,7 +409,7 @@ const validateComponentMembers = (node: ts.Node, buildCtx: d.BuildCtx) => { ) ) { const componentName = node.parent.name.getText(); - const err = buildError(buildCtx.diagnostics); + const err = buildWarn(buildCtx.diagnostics); err.messageText = `The component "${componentName}" has a getter called "${propName}". This getter is reserved for use by Stencil components and should not be defined by the user.`; augmentDiagnosticWithNode(err, node); } diff --git a/src/compiler/transformers/test/transpile.ts b/src/compiler/transformers/test/transpile.ts index 8eacb059b02..8ac6b0c1ccf 100644 --- a/src/compiler/transformers/test/transpile.ts +++ b/src/compiler/transformers/test/transpile.ts @@ -156,7 +156,7 @@ export function transpileModule( const isMixin = cmp ? moduleFile.isMixin : false; const isExtended = cmp ? moduleFile.isExtended : false; - if (buildCtx.hasError) { + if (buildCtx.hasError || buildCtx.hasWarning) { throw new Error(buildCtx.diagnostics[0].messageText as string); } diff --git a/src/compiler/transformers/transform-utils.ts b/src/compiler/transformers/transform-utils.ts index 81de9750ddd..16be791ff3a 100644 --- a/src/compiler/transformers/transform-utils.ts +++ b/src/compiler/transformers/transform-utils.ts @@ -1013,7 +1013,7 @@ export const updateConstructor = ( if (constructorIndex >= 0 && ts.isConstructorDeclaration(constructorMethod)) { const constructorBodyStatements = constructorMethod.body?.statements; - const foundSuperCall = foundSuper(constructorBodyStatements); + let foundSuperCall = foundSuper(constructorBodyStatements); if (!foundSuperCall && needsSuper(classNode)) { // if there is no super and it needs one the statements comprising the @@ -1030,6 +1030,9 @@ export const updateConstructor = ( // 2. the new statements we've created // 3. the statements currently comprising the body of the constructor if (foundSuperCall) { + if (includeFalseArg) { + foundSuperCall = createConstructorBodyWithSuper(includeFalseArg); + } statements = [foundSuperCall, ...statements, ...updatedStatements]; } else { statements = [...statements, ...updatedStatements]; diff --git a/src/compiler/types/tests/ComponentCompilerMeta.stub.ts b/src/compiler/types/tests/ComponentCompilerMeta.stub.ts index 8bbfc1e59ac..e3c81cab9c1 100644 --- a/src/compiler/types/tests/ComponentCompilerMeta.stub.ts +++ b/src/compiler/types/tests/ComponentCompilerMeta.stub.ts @@ -18,6 +18,7 @@ export const stubComponentCompilerMeta = ( directDependencies: [], directDependents: [], docs: { text: 'docs', tags: [] }, + doesExtend: false, elementRef: '', encapsulation: 'none', events: [], diff --git a/src/declarations/stencil-private.ts b/src/declarations/stencil-private.ts index 669c9482fbc..7c848c2dc82 100644 --- a/src/declarations/stencil-private.ts +++ b/src/declarations/stencil-private.ts @@ -633,6 +633,7 @@ export interface ComponentCompilerMeta extends ComponentCompilerFeatures { */ directDependents: string[]; docs: CompilerJsDoc; + doesExtend: boolean; elementRef: string; encapsulation: Encapsulation; events: ComponentCompilerEvent[]; diff --git a/src/utils/es2022-rewire-class-members.ts b/src/utils/es2022-rewire-class-members.ts index 1bc9fdeacb3..b947a60268f 100644 --- a/src/utils/es2022-rewire-class-members.ts +++ b/src/utils/es2022-rewire-class-members.ts @@ -42,7 +42,7 @@ export const reWireGetterSetter = (instance: any, hostRef: d.HostRef) => { // Get the original Stencil prototype `get` / `set` const ogDescriptor = - Object.getOwnPropertyDescriptor(Object.getPrototypeOf(instance), memberName) || + getPropertyDescriptor(Object.getPrototypeOf(instance), memberName) || Object.getOwnPropertyDescriptor(instance, memberName); if (ogDescriptor) { @@ -65,3 +65,18 @@ export const reWireGetterSetter = (instance: any, hostRef: d.HostRef) => { } }); }; + +/** + * Iterate through the prototype chain to find the property get / set descriptor for the provided member name. + * @param obj - The object to search on. + * @param memberName - The name of the member to find. + * @returns The property descriptor if found, otherwise undefined. + */ +function getPropertyDescriptor(obj: object, memberName: string): PropertyDescriptor | undefined { + while (obj) { + const desc = Object.getOwnPropertyDescriptor(obj, memberName); + if (desc?.get) return desc; + obj = Object.getPrototypeOf(obj); + } + return undefined; +} diff --git a/test/type-tests/tsconfig.json b/test/type-tests/tsconfig.json index 55bfae9c99a..80c62bde7d0 100644 --- a/test/type-tests/tsconfig.json +++ b/test/type-tests/tsconfig.json @@ -26,7 +26,7 @@ "paths": { "@stencil/core": ["../../internal"], "@stencil/core/internal": ["../../internal"], - "@test-sibling": ["./test-sibling"] + "test-sibling": ["./test-sibling"] } }, "include": [ diff --git a/test/wdio/global.ts b/test/wdio/global.ts index aa50ecd8292..5a173dd23b9 100644 --- a/test/wdio/global.ts +++ b/test/wdio/global.ts @@ -1,7 +1,7 @@ // this imports the build from the `./test-sibling` project. The ability to use // a Stencil component defined in that 'sibling' project is tested in the // `stencil-sibling` test suite -import '@test-sibling'; +import 'test-sibling'; import { setMode } from '@stencil/core'; // @ts-expect-error - tests that rollup warnings don't break the build import { setAssetPath } from '@stencil/core/internal/client/index'; diff --git a/test/wdio/package-lock.json b/test/wdio/package-lock.json index c7040981f1d..f911aedc17f 100644 --- a/test/wdio/package-lock.json +++ b/test/wdio/package-lock.json @@ -19,6 +19,7 @@ "bootstrap": "^5.3.3", "normalize.css": "^8.0.1", "npm-run-all": "^4.1.5", + "test-sibling": "file:./test-sibling", "ts-node": "^10.9.2", "webdriverio": "^9.5.4", "workbox-build": "^4.3.1" @@ -26,7 +27,7 @@ }, "../..": { "name": "@stencil/core", - "version": "4.28.2", + "version": "4.36.2", "dev": true, "license": "MIT", "bin": { @@ -11902,6 +11903,10 @@ "node": "*" } }, + "node_modules/test-sibling": { + "resolved": "test-sibling", + "link": true + }, "node_modules/text-decoder": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", @@ -13887,6 +13892,9 @@ "engines": { "node": ">= 14" } + }, + "test-sibling": { + "dev": true } } } diff --git a/test/wdio/package.json b/test/wdio/package.json index 7825b9d01d9..7ca9e440a69 100644 --- a/test/wdio/package.json +++ b/test/wdio/package.json @@ -28,6 +28,7 @@ "bootstrap": "^5.3.3", "normalize.css": "^8.0.1", "npm-run-all": "^4.1.5", + "test-sibling": "file:./test-sibling", "ts-node": "^10.9.2", "webdriverio": "^9.5.4", "workbox-build": "^4.3.1" diff --git a/test/wdio/stencil.config-es2022.ts b/test/wdio/stencil.config-es2022.ts index fc1efb3f353..0d9f1c583b9 100644 --- a/test/wdio/stencil.config-es2022.ts +++ b/test/wdio/stencil.config-es2022.ts @@ -3,7 +3,7 @@ import type { Config } from '../../internal/index.js'; export const config: Config = { namespace: 'TestTSTarget', tsconfig: 'tsconfig-es2022.json', - srcDir: 'ts-target-props', + srcDir: 'ts-target', outputTargets: [ { type: 'dist', diff --git a/test/wdio/test-sibling/package.json b/test/wdio/test-sibling/package.json index e33739c6245..d13aef3eda1 100644 --- a/test/wdio/test-sibling/package.json +++ b/test/wdio/test-sibling/package.json @@ -4,6 +4,12 @@ "module": "dist/index.js", "collection": "dist/collection/collection-manifest.json", "types": "dist/types/components.d.ts", + "exports": { + "./dist/collection/sibling-extended/sibling-extended.js": { + "import": "./dist/collection/sibling-extended/sibling-extended.js", + "types": "./dist/types/sibling-extended/sibling-extended.d.ts" + } + }, "volta": { "extends": "../package.json" }, diff --git a/test/wdio/test-sibling/src/components.d.ts b/test/wdio/test-sibling/src/components.d.ts index 1c2c926dbca..4925ed861b5 100644 --- a/test/wdio/test-sibling/src/components.d.ts +++ b/test/wdio/test-sibling/src/components.d.ts @@ -6,10 +6,28 @@ */ import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; export namespace Components { + interface SiblingExtended { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'ExtendedCmp text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } interface SiblingRoot { } } declare global { + interface HTMLSiblingExtendedElement extends Components.SiblingExtended, HTMLStencilElement { + } + var HTMLSiblingExtendedElement: { + prototype: HTMLSiblingExtendedElement; + new (): HTMLSiblingExtendedElement; + }; interface HTMLSiblingRootElement extends Components.SiblingRoot, HTMLStencilElement { } var HTMLSiblingRootElement: { @@ -17,13 +35,25 @@ declare global { new (): HTMLSiblingRootElement; }; interface HTMLElementTagNameMap { + "sibling-extended": HTMLSiblingExtendedElement; "sibling-root": HTMLSiblingRootElement; } } declare namespace LocalJSX { + interface SiblingExtended { + /** + * @default 'ExtendedCmp text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } interface SiblingRoot { } interface IntrinsicElements { + "sibling-extended": SiblingExtended; "sibling-root": SiblingRoot; } } @@ -31,6 +61,7 @@ export { LocalJSX as JSX }; declare module "@stencil/core" { export namespace JSX { interface IntrinsicElements { + "sibling-extended": LocalJSX.SiblingExtended & JSXBase.HTMLAttributes; "sibling-root": LocalJSX.SiblingRoot & JSXBase.HTMLAttributes; } } diff --git a/test/wdio/test-sibling/src/sibling-extended/sibling-extended.tsx b/test/wdio/test-sibling/src/sibling-extended/sibling-extended.tsx new file mode 100644 index 00000000000..cf480cc3ff1 --- /dev/null +++ b/test/wdio/test-sibling/src/sibling-extended/sibling-extended.tsx @@ -0,0 +1,49 @@ +import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; + +@Component({ + tag: 'sibling-extended', +}) +export class SiblingExtended { + @Prop() prop1: string = 'ExtendedCmp text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('extended class handler prop1:', newValue); + } + @Prop() prop2: string = 'ExtendedCmp prop2 text'; + @Watch('prop2') + prop2Changed(newValue: string) { + console.info('extended class handler prop2:', newValue); + } + + @State() state1: string = 'ExtendedCmp state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('extended class handler state1:', newValue); + } + @State() state2: string = 'ExtendedCmp state2 text'; + @Watch('state2') + state2Changed(newValue: string) { + console.info('extended class handler state2:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'ExtendedCmp method1 called'; + } + + @Method() + async method2() { + this.prop1 = 'ExtendedCmp method2 called'; + } + + render() { + return ( +
+

Extended class prop 1: {this.prop1}

+

Extended class prop 2: {this.prop2}

+

Extended class state 1: {this.state1}

+

Extended class state 2: {this.state2}

+
+ ); + } +} diff --git a/test/wdio/test-sibling/tsconfig.json b/test/wdio/test-sibling/tsconfig.json index 898049404db..e9625a15042 100644 --- a/test/wdio/test-sibling/tsconfig.json +++ b/test/wdio/test-sibling/tsconfig.json @@ -21,7 +21,7 @@ "noUnusedLocals": false, "noUnusedParameters": false, "pretty": true, - "target": "es2017", + "target": "es2022", "useUnknownInCatchVariables": true, "baseUrl": ".", "paths": { diff --git a/test/wdio/ts-target-props/components.d.ts b/test/wdio/ts-target-props/components.d.ts deleted file mode 100644 index 841b701ee06..00000000000 --- a/test/wdio/ts-target-props/components.d.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/** - * This is an autogenerated file created by the Stencil compiler. - * It contains typing information for all components that exist in this project. - */ -import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; -export namespace Components { - interface TsTargetProps { - /** - * @default 'basicProp' - */ - "basicProp": string; - "decoratedGetterSetterProp": number; - /** - * @default -10 - */ - "decoratedProp": number; - "dynamicLifecycle": string[]; - } -} -declare global { - interface HTMLTsTargetPropsElement extends Components.TsTargetProps, HTMLStencilElement { - } - var HTMLTsTargetPropsElement: { - prototype: HTMLTsTargetPropsElement; - new (): HTMLTsTargetPropsElement; - }; - interface HTMLElementTagNameMap { - "ts-target-props": HTMLTsTargetPropsElement; - } -} -declare namespace LocalJSX { - interface TsTargetProps { - /** - * @default 'basicProp' - */ - "basicProp"?: string; - "decoratedGetterSetterProp"?: number; - /** - * @default -10 - */ - "decoratedProp"?: number; - "dynamicLifecycle"?: string[]; - } - interface IntrinsicElements { - "ts-target-props": TsTargetProps; - } -} -export { LocalJSX as JSX }; -declare module "@stencil/core" { - export namespace JSX { - interface IntrinsicElements { - "ts-target-props": LocalJSX.TsTargetProps & JSXBase.HTMLAttributes; - } - } -} diff --git a/test/wdio/ts-target/components.d.ts b/test/wdio/ts-target/components.d.ts new file mode 100644 index 00000000000..eeab498ef92 --- /dev/null +++ b/test/wdio/ts-target/components.d.ts @@ -0,0 +1,181 @@ +/* eslint-disable */ +/* tslint:disable */ +/** + * This is an autogenerated file created by the Stencil compiler. + * It contains typing information for all components that exist in this project. + */ +import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; +export namespace Components { + interface ExtendedCmp { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'ExtendedCmp text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface ExtendsCmpCmp { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'default text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface ExtendsExternal { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'default text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface ExtendsMixin { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'default text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface TsTargetProps { + /** + * @default 'basicProp' + */ + "basicProp": string; + "decoratedGetterSetterProp": number; + /** + * @default -10 + */ + "decoratedProp": number; + "dynamicLifecycle": string[]; + } +} +declare global { + interface HTMLExtendedCmpElement extends Components.ExtendedCmp, HTMLStencilElement { + } + var HTMLExtendedCmpElement: { + prototype: HTMLExtendedCmpElement; + new (): HTMLExtendedCmpElement; + }; + interface HTMLExtendsCmpCmpElement extends Components.ExtendsCmpCmp, HTMLStencilElement { + } + var HTMLExtendsCmpCmpElement: { + prototype: HTMLExtendsCmpCmpElement; + new (): HTMLExtendsCmpCmpElement; + }; + interface HTMLExtendsExternalElement extends Components.ExtendsExternal, HTMLStencilElement { + } + var HTMLExtendsExternalElement: { + prototype: HTMLExtendsExternalElement; + new (): HTMLExtendsExternalElement; + }; + interface HTMLExtendsMixinElement extends Components.ExtendsMixin, HTMLStencilElement { + } + var HTMLExtendsMixinElement: { + prototype: HTMLExtendsMixinElement; + new (): HTMLExtendsMixinElement; + }; + interface HTMLTsTargetPropsElement extends Components.TsTargetProps, HTMLStencilElement { + } + var HTMLTsTargetPropsElement: { + prototype: HTMLTsTargetPropsElement; + new (): HTMLTsTargetPropsElement; + }; + interface HTMLElementTagNameMap { + "extended-cmp": HTMLExtendedCmpElement; + "extends-cmp-cmp": HTMLExtendsCmpCmpElement; + "extends-external": HTMLExtendsExternalElement; + "extends-mixin": HTMLExtendsMixinElement; + "ts-target-props": HTMLTsTargetPropsElement; + } +} +declare namespace LocalJSX { + interface ExtendedCmp { + /** + * @default 'ExtendedCmp text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface ExtendsCmpCmp { + /** + * @default 'default text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface ExtendsExternal { + /** + * @default 'default text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface ExtendsMixin { + /** + * @default 'default text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface TsTargetProps { + /** + * @default 'basicProp' + */ + "basicProp"?: string; + "decoratedGetterSetterProp"?: number; + /** + * @default -10 + */ + "decoratedProp"?: number; + "dynamicLifecycle"?: string[]; + } + interface IntrinsicElements { + "extended-cmp": ExtendedCmp; + "extends-cmp-cmp": ExtendsCmpCmp; + "extends-external": ExtendsExternal; + "extends-mixin": ExtendsMixin; + "ts-target-props": TsTargetProps; + } +} +export { LocalJSX as JSX }; +declare module "@stencil/core" { + export namespace JSX { + interface IntrinsicElements { + "extended-cmp": LocalJSX.ExtendedCmp & JSXBase.HTMLAttributes; + "extends-cmp-cmp": LocalJSX.ExtendsCmpCmp & JSXBase.HTMLAttributes; + "extends-external": LocalJSX.ExtendsExternal & JSXBase.HTMLAttributes; + "extends-mixin": LocalJSX.ExtendsMixin & JSXBase.HTMLAttributes; + "ts-target-props": LocalJSX.TsTargetProps & JSXBase.HTMLAttributes; + } + } +} diff --git a/test/wdio/ts-target/extends-cmp/cmp.test.ts b/test/wdio/ts-target/extends-cmp/cmp.test.ts new file mode 100644 index 00000000000..b3aac7e4148 --- /dev/null +++ b/test/wdio/ts-target/extends-cmp/cmp.test.ts @@ -0,0 +1,95 @@ +import { browser } from '@wdio/globals'; +import { setupIFrameTest } from '../../util.js'; +import { testSuites } from '../extends-test-suite.test.js'; + +/** + * Smoke tests for extending component classes. + * `tsconfig.json` > `"target": "es2022"` `dist` and `dist-custom-elements` outputs. + */ + +describe('Checks component classes can extend from other component classes', () => { + describe('es2022 dist output', () => { + let frameContent: HTMLElement; + + beforeEach(async () => { + frameContent = await setupIFrameTest('/extends-cmp/es2022.dist.html', 'es2022-dist'); + const frameEle = await browser.$('#es2022-dist'); + await frameEle.waitUntil(async () => !!frameContent.querySelector('.extended-prop-1'), { timeout: 5000 }); + }); + + it('renders default values', async () => { + const { defaultValue } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await defaultValue(); + }); + + it('re-renders values via attributes', async () => { + const { viaAttributes } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await viaAttributes(); + }); + + it('re-renders values via props', async () => { + const { viaProps } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await viaProps(); + }); + + it('calls watch handlers', async () => { + const { watchHandlers } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await watchHandlers(); + }); + + it('calls methods', async () => { + const { methods } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await methods(); + }); + }); + + describe('es2022 dist-custom-elements output', () => { + let frameContent: HTMLElement; + + beforeEach(async () => { + await browser.switchToParentFrame(); + frameContent = await setupIFrameTest('/extends-cmp/es2022.custom-element.html', 'es2022-custom-elements'); + const frameEle = await browser.$('iframe#es2022-custom-elements'); + frameEle.waitUntil(async () => !!frameContent.querySelector('.extended-prop-1'), { timeout: 5000 }); + }); + + it('renders default values', async () => { + const { defaultValue } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await defaultValue(); + }); + + it('re-renders values via attributes', async () => { + const { viaAttributes } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await viaAttributes(); + }); + + it('re-renders values via props', async () => { + const { viaProps } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await viaProps(); + }); + + it('calls watch handlers', async () => { + const { watchHandlers } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await watchHandlers(); + }); + + it('calls methods', async () => { + const { methods } = await testSuites(frameContent, 'extends-cmp-cmp', 'extended-cmp'); + await methods(); + }); + }); + + describe('hydrate output', () => { + it('renders component during SSR hydration via attributes', async () => { + // @ts-ignore may not be existing when project hasn't been built + const mod = await import('/test-ts-target-output/hydrate/index.mjs'); + await (await testSuites(document.body, 'extends-cmp-cmp', 'extended-cmp')).ssrViaAttrs(mod); + }); + + it('renders component during SSR hydration via props', async () => { + // @ts-ignore may not be existing when project hasn't been built + const mod = await import('/test-ts-target-output/hydrate/index.mjs'); + await (await testSuites(document.body, 'extends-cmp-cmp', 'extended-cmp')).ssrViaProps(mod); + }); + }); +}); diff --git a/test/wdio/ts-target/extends-cmp/cmp.tsx b/test/wdio/ts-target/extends-cmp/cmp.tsx new file mode 100644 index 00000000000..61e73980051 --- /dev/null +++ b/test/wdio/ts-target/extends-cmp/cmp.tsx @@ -0,0 +1,35 @@ +import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; +import { ExtendedCmp } from './extended-cmp.js'; + +@Component({ + tag: 'extends-cmp-cmp', +}) +export class ExtendsCmpCmp extends ExtendedCmp { + @Prop() prop1: string = 'default text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('main class handler prop1:', newValue); + } + + @State() state1: string = 'default state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('main class handler state1:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'main class method1 called'; + } + + render() { + return ( +
+

Main class prop1: {this.prop1}

+

Main class prop2: {this.prop2}

+

Main class state1: {this.state1}

+

Main class state2: {this.state2}

+
+ ); + } +} diff --git a/test/wdio/ts-target/extends-cmp/es2022.custom-element.html b/test/wdio/ts-target/extends-cmp/es2022.custom-element.html new file mode 100644 index 00000000000..923a2a32e54 --- /dev/null +++ b/test/wdio/ts-target/extends-cmp/es2022.custom-element.html @@ -0,0 +1,16 @@ + + + ES2022 dist-custom-elements output + + + +

ES2022 dist-custom-elements output

+ + + + \ No newline at end of file diff --git a/test/wdio/ts-target/extends-cmp/es2022.dist.html b/test/wdio/ts-target/extends-cmp/es2022.dist.html new file mode 100644 index 00000000000..2a852b3a191 --- /dev/null +++ b/test/wdio/ts-target/extends-cmp/es2022.dist.html @@ -0,0 +1,11 @@ + + + ES2022 dist output + + + +

ES2022 dist output

+ + + + \ No newline at end of file diff --git a/test/wdio/ts-target/extends-cmp/extended-cmp.tsx b/test/wdio/ts-target/extends-cmp/extended-cmp.tsx new file mode 100644 index 00000000000..7ccd3646c9a --- /dev/null +++ b/test/wdio/ts-target/extends-cmp/extended-cmp.tsx @@ -0,0 +1,49 @@ +import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; + +@Component({ + tag: 'extended-cmp', +}) +export class ExtendedCmp { + @Prop() prop1: string = 'ExtendedCmp text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('extended class handler prop1:', newValue); + } + @Prop() prop2: string = 'ExtendedCmp prop2 text'; + @Watch('prop2') + prop2Changed(newValue: string) { + console.info('extended class handler prop2:', newValue); + } + + @State() state1: string = 'ExtendedCmp state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('extended class handler state1:', newValue); + } + @State() state2: string = 'ExtendedCmp state2 text'; + @Watch('state2') + state2Changed(newValue: string) { + console.info('extended class handler state2:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'ExtendedCmp method1 called'; + } + + @Method() + async method2() { + this.prop1 = 'ExtendedCmp method2 called'; + } + + render() { + return ( +
+

Extended class prop 1: {this.prop1}

+

Extended class prop 2: {this.prop2}

+

Extended class state 1: {this.state1}

+

Extended class state 2: {this.state2}

+
+ ); + } +} diff --git a/test/wdio/ts-target/extends-external/cmp.test.ts b/test/wdio/ts-target/extends-external/cmp.test.ts new file mode 100644 index 00000000000..62b3b325274 --- /dev/null +++ b/test/wdio/ts-target/extends-external/cmp.test.ts @@ -0,0 +1,96 @@ +import { browser } from '@wdio/globals'; +import { setupIFrameTest } from '../../util.js'; +import { testSuites } from '../extends-test-suite.test.js'; + +/** + * Smoke tests for extending from external library component classes + * (The external library is built via as a separate Stencil project in `test-sibling`). + * `tsconfig.json` > `"target": "es2022"` `dist` and `dist-custom-elements` outputs. + */ + +describe('Checks component classes can extend from external library component classes', () => { + describe('es2022 dist output', () => { + let frameContent: HTMLElement; + + beforeEach(async () => { + frameContent = await setupIFrameTest('/extends-external/es2022.dist.html', 'es2022-dist'); + const frameEle = await browser.$('#es2022-dist'); + await frameEle.waitUntil(async () => !!frameContent.querySelector('.extended-prop-1'), { timeout: 5000 }); + }); + + it('renders default values', async () => { + const { defaultValue } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await defaultValue(); + }); + + it('re-renders values via attributes', async () => { + const { viaAttributes } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await viaAttributes(); + }); + + it('re-renders values via props', async () => { + const { viaProps } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await viaProps(); + }); + + it('calls watch handlers', async () => { + const { watchHandlers } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await watchHandlers(); + }); + + it('calls methods', async () => { + const { methods } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await methods(); + }); + }); + + describe('es2022 dist-custom-elements output', () => { + let frameContent: HTMLElement; + + beforeEach(async () => { + await browser.switchToParentFrame(); + frameContent = await setupIFrameTest('/extends-external/es2022.custom-element.html', 'es2022-custom-elements'); + const frameEle = await browser.$('iframe#es2022-custom-elements'); + frameEle.waitUntil(async () => !!frameContent.querySelector('.extended-prop-1'), { timeout: 5000 }); + }); + + it('renders default values', async () => { + const { defaultValue } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await defaultValue(); + }); + + it('re-renders values via attributes', async () => { + const { viaAttributes } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await viaAttributes(); + }); + + it('re-renders values via props', async () => { + const { viaProps } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await viaProps(); + }); + + it('calls watch handlers', async () => { + const { watchHandlers } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await watchHandlers(); + }); + + it('calls methods', async () => { + const { methods } = await testSuites(frameContent, 'extends-external', 'sibling-extended'); + await methods(); + }); + }); + + describe('hydrate output', () => { + it('renders component during SSR hydration via attributes', async () => { + // @ts-ignore may not be existing when project hasn't been built + const mod = await import('/test-ts-target-output/hydrate/index.mjs'); + await (await testSuites(document.body, 'extends-external', 'sibling-extended')).ssrViaAttrs(mod); + }); + + it('renders component during SSR hydration via props', async () => { + // @ts-ignore may not be existing when project hasn't been built + const mod = await import('/test-ts-target-output/hydrate/index.mjs'); + await (await testSuites(document.body, 'extends-external', 'sibling-extended')).ssrViaProps(mod); + }); + }); +}); diff --git a/test/wdio/ts-target/extends-external/cmp.tsx b/test/wdio/ts-target/extends-external/cmp.tsx new file mode 100644 index 00000000000..6a5279469d1 --- /dev/null +++ b/test/wdio/ts-target/extends-external/cmp.tsx @@ -0,0 +1,35 @@ +import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; +import { SiblingExtended } from 'test-sibling/dist/collection/sibling-extended/sibling-extended.js'; + +@Component({ + tag: 'extends-external', +}) +export class ExtendsCmpCmp extends SiblingExtended { + @Prop() prop1: string = 'default text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('main class handler prop1:', newValue); + } + + @State() state1: string = 'default state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('main class handler state1:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'main class method1 called'; + } + + render() { + return ( +
+

Main class prop1: {this.prop1}

+

Main class prop2: {this.prop2}

+

Main class state1: {this.state1}

+

Main class state2: {this.state2}

+
+ ); + } +} diff --git a/test/wdio/ts-target/extends-external/es2022.custom-element.html b/test/wdio/ts-target/extends-external/es2022.custom-element.html new file mode 100644 index 00000000000..d8ae8f39452 --- /dev/null +++ b/test/wdio/ts-target/extends-external/es2022.custom-element.html @@ -0,0 +1,16 @@ + + + ES2022 dist-custom-elements output + + + +

ES2022 dist-custom-elements output

+ + + + \ No newline at end of file diff --git a/test/wdio/ts-target/extends-external/es2022.dist.html b/test/wdio/ts-target/extends-external/es2022.dist.html new file mode 100644 index 00000000000..c4b9956ff2b --- /dev/null +++ b/test/wdio/ts-target/extends-external/es2022.dist.html @@ -0,0 +1,11 @@ + + + ES2022 dist output + + + +

ES2022 dist output

+ + + + \ No newline at end of file diff --git a/test/wdio/ts-target/extends-mixin/cmp.test.ts b/test/wdio/ts-target/extends-mixin/cmp.test.ts new file mode 100644 index 00000000000..de2287e05a0 --- /dev/null +++ b/test/wdio/ts-target/extends-mixin/cmp.test.ts @@ -0,0 +1,95 @@ +import { browser } from '@wdio/globals'; +import { setupIFrameTest } from '../../util.js'; +import { testSuites } from '../extends-test-suite.test.js'; + +/** + * Smoke tests for extending mixin classes. + * `tsconfig.json` > `"target": "es2022"` `dist` and `dist-custom-elements` outputs. + */ + +describe('Checks component classes can extend from other mixin classes', () => { + describe('es2022 dist output', () => { + let frameContent: HTMLElement; + + beforeEach(async () => { + frameContent = await setupIFrameTest('/extends-mixin/es2022.dist.html', 'es2022-dist'); + const frameEle = await browser.$('#es2022-dist'); + await frameEle.waitUntil(async () => !!frameContent.querySelector('.main-prop-1'), { timeout: 5000 }); + }); + + it('renders default values', async () => { + const { defaultValue } = await testSuites(frameContent, 'extends-mixin'); + await defaultValue(); + }); + + it('re-renders values via attributes', async () => { + const { viaAttributes } = await testSuites(frameContent, 'extends-mixin'); + await viaAttributes(); + }); + + it('re-renders values via props', async () => { + const { viaProps } = await testSuites(frameContent, 'extends-mixin'); + await viaProps(); + }); + + it('calls watch handlers', async () => { + const { watchHandlers } = await testSuites(frameContent, 'extends-mixin'); + await watchHandlers(); + }); + + it('calls methods', async () => { + const { methods } = await testSuites(frameContent, 'extends-mixin'); + await methods(); + }); + }); + + describe('es2022 dist-custom-elements output', () => { + let frameContent: HTMLElement; + + beforeEach(async () => { + await browser.switchToParentFrame(); + frameContent = await setupIFrameTest('/extends-mixin/es2022.custom-element.html', 'es2022-custom-elements'); + const frameEle = await browser.$('iframe#es2022-custom-elements'); + await frameEle.waitUntil(async () => !!frameContent.querySelector('.main-prop-1'), { timeout: 5000 }); + }); + + it('renders default values', async () => { + const { defaultValue } = await testSuites(frameContent, 'extends-mixin'); + await defaultValue(); + }); + + it('re-renders values via attributes', async () => { + const { viaAttributes } = await testSuites(frameContent, 'extends-mixin'); + await viaAttributes(); + }); + + it('re-renders values via props', async () => { + const { viaProps } = await testSuites(frameContent, 'extends-mixin'); + await viaProps(); + }); + + it('calls watch handlers', async () => { + const { watchHandlers } = await testSuites(frameContent, 'extends-mixin'); + await watchHandlers(); + }); + + it('calls methods', async () => { + const { methods } = await testSuites(frameContent, 'extends-mixin'); + await methods(); + }); + }); + + describe('hydrate output', () => { + it('renders component during SSR hydration via attributes', async () => { + // @ts-ignore may not be existing when project hasn't been built + const mod = await import('/test-ts-target-output/hydrate/index.mjs'); + await (await testSuites(document.body, 'extends-mixin')).ssrViaAttrs(mod); + }); + + it('renders component during SSR hydration via props', async () => { + // @ts-ignore may not be existing when project hasn't been built + const mod = await import('/test-ts-target-output/hydrate/index.mjs'); + await (await testSuites(document.body, 'extends-mixin')).ssrViaProps(mod); + }); + }); +}); diff --git a/test/wdio/ts-target/extends-mixin/cmp.tsx b/test/wdio/ts-target/extends-mixin/cmp.tsx new file mode 100644 index 00000000000..c210773a3d7 --- /dev/null +++ b/test/wdio/ts-target/extends-mixin/cmp.tsx @@ -0,0 +1,35 @@ +import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; +import { Mixin } from './mixin-class.js'; + +@Component({ + tag: 'extends-mixin', +}) +export class MixinCmp extends Mixin { + @Prop() prop1: string = 'default text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('main class handler prop1:', newValue); + } + + @State() state1: string = 'default state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('main class handler state1:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'main class method1 called'; + } + + render() { + return ( +
+

Main class prop1: {this.prop1}

+

Main class prop2: {this.prop2}

+

Main class state1: {this.state1}

+

Main class state2: {this.state2}

+
+ ); + } +} diff --git a/test/wdio/ts-target/extends-mixin/es2022.custom-element.html b/test/wdio/ts-target/extends-mixin/es2022.custom-element.html new file mode 100644 index 00000000000..3d7bc73245b --- /dev/null +++ b/test/wdio/ts-target/extends-mixin/es2022.custom-element.html @@ -0,0 +1,13 @@ + + + ES2022 dist-custom-elements output + + + +

ES2022 dist-custom-elements output

+ + + \ No newline at end of file diff --git a/test/wdio/ts-target/extends-mixin/es2022.dist.html b/test/wdio/ts-target/extends-mixin/es2022.dist.html new file mode 100644 index 00000000000..11bdb6cb836 --- /dev/null +++ b/test/wdio/ts-target/extends-mixin/es2022.dist.html @@ -0,0 +1,10 @@ + + + ES2022 dist output + + + +

ES2022 dist output

+ + + \ No newline at end of file diff --git a/test/wdio/ts-target/extends-mixin/mixin-class.ts b/test/wdio/ts-target/extends-mixin/mixin-class.ts new file mode 100644 index 00000000000..72571ec90f6 --- /dev/null +++ b/test/wdio/ts-target/extends-mixin/mixin-class.ts @@ -0,0 +1,35 @@ +import { Prop, State, Method, Watch } from '@stencil/core'; + +export class Mixin { + @Prop() prop1: string = 'ExtendedCmp text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('extended class handler prop1:', newValue); + } + @Prop() prop2: string = 'ExtendedCmp prop2 text'; + @Watch('prop2') + prop2Changed(newValue: string) { + console.info('extended class handler prop2:', newValue); + } + + @State() state1: string = 'ExtendedCmp state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('extended class handler state1:', newValue); + } + @State() state2: string = 'ExtendedCmp state2 text'; + @Watch('state2') + state2Changed(newValue: string) { + console.info('extended class handler state2:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'ExtendedCmp method1 called'; + } + + @Method() + async method2() { + this.prop1 = 'ExtendedCmp method2 called'; + } +} diff --git a/test/wdio/ts-target/extends-test-suite.test.ts b/test/wdio/ts-target/extends-test-suite.test.ts new file mode 100644 index 00000000000..a793d158193 --- /dev/null +++ b/test/wdio/ts-target/extends-test-suite.test.ts @@ -0,0 +1,162 @@ +import { browser } from '@wdio/globals'; + +// @ts-ignore may not be existing when project hasn't been built +type HydrateModule = typeof import('../../hydrate/index.js'); + +export const testSuites = async (root: HTMLElement, mainTag: string, extendedTag?: string) => { + async function getTxt(selector: string) { + await browser.waitUntil(() => !!root.querySelector(selector), { timeout: 5000 }); + return root.querySelector(selector).textContent.trim(); + } + + function getTxtHtml(html: string, className: string) { + const match = html.match(new RegExp(`

(.*?)

`, 'g')); + if (match && match[0]) { + const textMatch = match[0].match(new RegExp(`

(.*?)

`)); + return textMatch ? textMatch[1].replace(//g, '').trim() : null; + } + return null; + } + + return { + defaultValue: async () => { + if (extendedTag) { + expect(await getTxt('.extended-prop-1')).toBe('Extended class prop 1: ExtendedCmp text'); + expect(await getTxt('.extended-prop-2')).toBe('Extended class prop 2: ExtendedCmp prop2 text'); + expect(await getTxt('.extended-state-1')).toBe('Extended class state 1: ExtendedCmp state text'); + expect(await getTxt('.extended-state-2')).toBe('Extended class state 2: ExtendedCmp state2 text'); + } + expect(await getTxt('.main-prop-1')).toBe('Main class prop1: default text'); + expect(await getTxt('.main-prop-2')).toBe('Main class prop2: ExtendedCmp prop2 text'); + expect(await getTxt('.main-state-1')).toBe('Main class state1: default state text'); + expect(await getTxt('.main-state-2')).toBe('Main class state2: ExtendedCmp state2 text'); + }, + viaAttributes: async () => { + if (extendedTag) { + root.querySelector(extendedTag).setAttribute('prop-1', 'extended via attribute'); + root.querySelector(extendedTag).setAttribute('prop-2', 'extended via attribute'); + } + root.querySelector(mainTag).setAttribute('prop-1', 'main via attribute'); + root.querySelector(mainTag).setAttribute('prop-2', 'main via attribute'); + + await browser.pause(100); + + if (extendedTag) { + expect(await getTxt('.extended-prop-1')).toBe('Extended class prop 1: extended via attribute'); + expect(await getTxt('.extended-prop-2')).toBe('Extended class prop 2: extended via attribute'); + } + expect(await getTxt('.main-prop-1')).toBe('Main class prop1: main via attribute'); + expect(await getTxt('.main-prop-2')).toBe('Main class prop2: main via attribute'); + }, + viaProps: async () => { + if (extendedTag) { + root.querySelector(extendedTag).prop1 = 'extended via prop'; + root.querySelector(extendedTag).prop2 = 'extended via prop'; + } + root.querySelector(mainTag).prop1 = 'main via prop'; + root.querySelector(mainTag).prop2 = 'main via prop'; + + await browser.pause(100); + + if (extendedTag) { + expect(await getTxt('.extended-prop-1')).toBe('Extended class prop 1: extended via prop'); + expect(await getTxt('.extended-prop-2')).toBe('Extended class prop 2: extended via prop'); + } + expect(await getTxt('.main-prop-1')).toBe('Main class prop1: main via prop'); + expect(await getTxt('.main-prop-2')).toBe('Main class prop2: main via prop'); + }, + watchHandlers: async () => { + const iframeWin = root.ownerDocument.defaultView; + let originalConsoleLog = iframeWin.console.info; + + const logMessages: string[] = []; + iframeWin.console.info = (...args: any[]) => { + logMessages.push(args.map(String).join(' ')); + }; + + if (extendedTag) { + root.querySelector(extendedTag).setAttribute('prop-1', 'extended via attribute'); + root.querySelector(extendedTag).setAttribute('prop-2', 'extended via attribute'); + } + root.querySelector(mainTag).setAttribute('prop-1', 'main via attribute'); + root.querySelector(mainTag).setAttribute('prop-2', 'main via attribute'); + + await browser.pause(100); + + if (extendedTag) { + root.querySelector(extendedTag).prop1 = 'extended via prop'; + root.querySelector(extendedTag).prop2 = 'extended via prop'; + } + root.querySelector(mainTag).prop1 = 'main via prop'; + root.querySelector(mainTag).prop2 = 'main via prop'; + + await browser.pause(100); + + if (extendedTag) { + expect(logMessages).toEqual([ + 'extended class handler prop1: extended via attribute', + 'extended class handler prop2: extended via attribute', + 'main class handler prop1: main via attribute', + 'extended class handler prop2: main via attribute', + 'extended class handler prop1: extended via prop', + 'extended class handler prop2: extended via prop', + 'main class handler prop1: main via prop', + 'extended class handler prop2: main via prop', + ]); + } else { + expect(logMessages).toEqual([ + 'main class handler prop1: main via attribute', + 'extended class handler prop2: main via attribute', + 'main class handler prop1: main via prop', + 'extended class handler prop2: main via prop', + ]); + } + + iframeWin.console.info = originalConsoleLog; + }, + methods: async () => { + if (extendedTag) { + const component1 = root.querySelector(extendedTag); + await component1.method1(); + await browser.pause(50); + expect(await getTxt('.extended-prop-1')).toBe('Extended class prop 1: ExtendedCmp method1 called'); + + await component1.method2(); + await browser.pause(50); + expect(await getTxt('.extended-prop-1')).toBe('Extended class prop 1: ExtendedCmp method2 called'); + } + + const component2 = root.querySelector(mainTag); + await component2.method1(); + await browser.pause(50); + expect(await getTxt('.main-prop-1')).toBe('Main class prop1: main class method1 called'); + + await component2.method2(); + await browser.pause(50); + expect(await getTxt('.main-prop-1')).toBe('Main class prop1: ExtendedCmp method2 called'); + }, + ssrViaAttrs: async (hydrationModule: any) => { + const renderToString: HydrateModule['renderToString'] = hydrationModule.renderToString; + const { html } = await renderToString(` + <${mainTag} + prop-1="main via attr" + prop-2="main via attr" + > + `); + expect(await getTxtHtml(html, 'main-prop-1')).toBe('Main class prop1: main via attr'); + expect(await getTxtHtml(html, 'main-prop-2')).toBe('Main class prop2: main via attr'); + }, + ssrViaProps: async (hydrationModule: any) => { + const renderToString: HydrateModule['renderToString'] = hydrationModule.renderToString; + const { html } = await renderToString(`<${mainTag}>`, { + beforeHydrate: (doc: Document) => { + const el = doc.querySelector(mainTag); + el.prop1 = 'main via prop'; + el.prop2 = 'main via prop'; + }, + }); + expect(await getTxtHtml(html, 'main-prop-1')).toBe('Main class prop1: main via prop'); + expect(await getTxtHtml(html, 'main-prop-2')).toBe('Main class prop2: main via prop'); + }, + }; +}; diff --git a/test/wdio/ts-target-props/cmp.test.tsx b/test/wdio/ts-target/ts-target-props/cmp.test.tsx similarity index 99% rename from test/wdio/ts-target-props/cmp.test.tsx rename to test/wdio/ts-target/ts-target-props/cmp.test.tsx index b1f85c14b92..281a0a49f70 100644 --- a/test/wdio/ts-target-props/cmp.test.tsx +++ b/test/wdio/ts-target/ts-target-props/cmp.test.tsx @@ -2,7 +2,7 @@ import { h } from '@stencil/core'; import { render } from '@wdio/browser-runner/stencil'; import { $, browser } from '@wdio/globals'; -import { setupIFrameTest } from '../util.js'; +import { setupIFrameTest } from '../../util.js'; /** * Smoke tests for `tsconfig.json` > `"target": "es2022"` `dist` and `dist-custom-elements` outputs. diff --git a/test/wdio/ts-target-props/cmp.tsx b/test/wdio/ts-target/ts-target-props/cmp.tsx similarity index 100% rename from test/wdio/ts-target-props/cmp.tsx rename to test/wdio/ts-target/ts-target-props/cmp.tsx diff --git a/test/wdio/ts-target-props/es2022.custom-element.html b/test/wdio/ts-target/ts-target-props/es2022.custom-element.html similarity index 100% rename from test/wdio/ts-target-props/es2022.custom-element.html rename to test/wdio/ts-target/ts-target-props/es2022.custom-element.html diff --git a/test/wdio/ts-target-props/es2022.dist.html b/test/wdio/ts-target/ts-target-props/es2022.dist.html similarity index 100% rename from test/wdio/ts-target-props/es2022.dist.html rename to test/wdio/ts-target/ts-target-props/es2022.dist.html diff --git a/test/wdio/tsconfig-es2022.json b/test/wdio/tsconfig-es2022.json index e21308c86db..b84f282a580 100644 --- a/test/wdio/tsconfig-es2022.json +++ b/test/wdio/tsconfig-es2022.json @@ -1,9 +1,8 @@ { "extends": "./tsconfig-stencil.json", "compilerOptions": { - "target": "es2022", - "useDefineForClassFields": true + "target": "es2022" }, - "include": ["ts-target-props"], - "exclude": ["ts-target-props/*.test.tsx"] + "include": ["ts-target"], + "exclude": ["ts-target/**/*.test.tsx", "ts-target/**/*.test.ts"] } diff --git a/test/wdio/tsconfig-stencil.json b/test/wdio/tsconfig-stencil.json index d94514fdf31..8a4f2ceedb9 100644 --- a/test/wdio/tsconfig-stencil.json +++ b/test/wdio/tsconfig-stencil.json @@ -4,6 +4,7 @@ "alwaysStrict": true, "allowSyntheticDefaultImports": true, "allowUnreachableCode": false, + "allowJs": true, "declaration": false, "resolveJsonModule": true, "experimentalDecorators": true, @@ -24,7 +25,7 @@ "baseUrl": ".", "skipLibCheck": true, "paths": { - "@test-sibling": ["./test-sibling"] + "test-sibling": ["./test-sibling"] } }, "include": ["./src/components.d.ts", "./**/*.spec.ts", "./**/*.tsx", "./util.ts", "./global.ts"], diff --git a/test/wdio/tsconfig.json b/test/wdio/tsconfig.json index e611bc4dbaa..e3d34e2fc43 100644 --- a/test/wdio/tsconfig.json +++ b/test/wdio/tsconfig.json @@ -25,7 +25,7 @@ "paths": { "@stencil/core": ["../../internal"], "@stencil/core/internal": ["../../internal"], - "@test-sibling": ["./test-sibling"] + "test-sibling": ["./test-sibling"] } }, "include": [ diff --git a/test/wdio/wdio.conf.ts b/test/wdio/wdio.conf.ts index 0d25965d457..76e4ecb3f3b 100644 --- a/test/wdio/wdio.conf.ts +++ b/test/wdio/wdio.conf.ts @@ -67,7 +67,7 @@ export const config: WebdriverIO.Config = { // The path of the spec files will be resolved relative from the directory of // of the config file unless it's absolute. // - specs: [['./**/*.test.tsx']], + specs: [['./**/*.test.tsx', './**/*.test.ts']], // Patterns to exclude. exclude: [ // 'path/to/excluded/files' @@ -341,11 +341,11 @@ if (['CHROME', 'ALL'].includes(BROWSER_CONFIGURATION)) { /** * Disable FF tests due to issues in the WebDriver protocol */ -// if (['FIREFOX', 'ALL'].includes(BROWSER_CONFIGURATION)) { -// (config.capabilities as WebdriverIO.Capabilities[]).push({ -// browserName: 'firefox' -// }); -// } +if (['FIREFOX'].includes(BROWSER_CONFIGURATION)) { + (config.capabilities as WebdriverIO.Capabilities[]).push({ + browserName: 'firefox', + }); +} if (['EDGE', 'ALL'].includes(BROWSER_CONFIGURATION)) { (config.capabilities as WebdriverIO.Capabilities[]).push({ From cb6e944797c3054b417f60f90ba9995ba2f69282 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Fri, 29 Aug 2025 16:36:09 +0100 Subject: [PATCH 12/16] chore: get tests to pass --- src/compiler/bundle/typescript-plugin.ts | 2 +- .../dist-lazy/generate-esm-browser.ts | 2 - .../dist-lazy/lazy-bundleid-plugin.ts | 8 + .../transform-lazy-component.ts | 4 +- src/compiler/transformers/create-event.ts | 2 +- test/wdio/src/components.d.ts | 3774 ++++++++++++++++- test/wdio/test-sibling/package.json | 2 +- test/wdio/ts-target/extends-external/cmp.tsx | 2 +- test/wdio/tsconfig-es2022.json | 3 +- test/wdio/wdio.conf.ts | 4 +- 10 files changed, 3701 insertions(+), 102 deletions(-) diff --git a/src/compiler/bundle/typescript-plugin.ts b/src/compiler/bundle/typescript-plugin.ts index aac201466cf..c3fa2ae4a96 100644 --- a/src/compiler/bundle/typescript-plugin.ts +++ b/src/compiler/bundle/typescript-plugin.ts @@ -57,7 +57,7 @@ export const typescriptPlugin = ( if (isAbsolute(id)) { const fsFilePath = normalizeFsPath(id); const mod = getModule(compilerCtx, fsFilePath); - if (mod && mod.cmps != null) { + if (mod?.cmps) { const tsResult = ts.transpileModule(mod.staticSourceFileText, { compilerOptions: config.tsCompilerOptions, fileName: mod.sourceFilePath, diff --git a/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts b/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts index 49fddff9e27..9ad86d3d4f4 100644 --- a/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts +++ b/src/compiler/output-targets/dist-lazy/generate-esm-browser.ts @@ -28,8 +28,6 @@ export const generateEsmBrowser = async ( const output = await generateRollupOutput(rollupBuild, esmOpts, config, buildCtx.entryModules); - // console.log(`generateEsmBrowser, output:`, output); - if (output != null) { const es2017destinations = esmOutputs .map((o) => o.esmDir) diff --git a/src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts b/src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts index 14a62bea7fd..39a3bfaeaca 100644 --- a/src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts +++ b/src/compiler/output-targets/dist-lazy/lazy-bundleid-plugin.ts @@ -3,6 +3,14 @@ import MagicString from 'magic-string'; import type { OutputChunk, Plugin } from 'rollup'; import type * as d from '../../../declarations'; +/** + * A Rollup plugin to generate unique bundle IDs for lazy-loaded modules. + * @param buildCtx The build context + * @param config The validated configuration + * @param shouldHash Whether to hash the bundle ID + * @param suffix The suffix to append to the bundle ID + * @returns A Rollup plugin + */ export const lazyBundleIdPlugin = ( buildCtx: d.BuildCtx, config: d.ValidatedConfig, diff --git a/src/compiler/transformers/component-lazy/transform-lazy-component.ts b/src/compiler/transformers/component-lazy/transform-lazy-component.ts index eb48dccd7e5..a18d5fdc658 100644 --- a/src/compiler/transformers/component-lazy/transform-lazy-component.ts +++ b/src/compiler/transformers/component-lazy/transform-lazy-component.ts @@ -32,9 +32,11 @@ export const lazyComponentTransform = ( const visitNode = (node: ts.Node): any => { if (ts.isClassDeclaration(node)) { const cmp = getComponentMeta(compilerCtx, tsSourceFile, node); + const module = compilerCtx.moduleMap.get(tsSourceFile.fileName); + if (cmp != null) { return updateLazyComponentClass(transformOpts, styleStatements, node, moduleFile, cmp); - } else if (compilerCtx.moduleMap.get(tsSourceFile.fileName)?.isMixin) { + } else if (module?.isMixin) { return updateMixin(node, moduleFile, cmp, transformOpts); } } diff --git a/src/compiler/transformers/create-event.ts b/src/compiler/transformers/create-event.ts index 4aa3d4499bb..c1546b38587 100644 --- a/src/compiler/transformers/create-event.ts +++ b/src/compiler/transformers/create-event.ts @@ -11,7 +11,7 @@ import { addCoreRuntimeApi, CREATE_EVENT, RUNTIME_APIS } from './core-runtime-ap * @returns the generated event creation code */ export const addCreateEvents = (moduleFile: d.Module, cmp: d.ComponentCompilerMeta): ts.ExpressionStatement[] => { - if (!cmp?.events || cmp.events.length === 0) { + if (!cmp?.events?.length) { // no events to create, so return an empty array return []; } diff --git a/test/wdio/src/components.d.ts b/test/wdio/src/components.d.ts index ef4d1b33a89..360870c90c6 100644 --- a/test/wdio/src/components.d.ts +++ b/test/wdio/src/components.d.ts @@ -5,11 +5,90 @@ * It contains typing information for all components that exist in this project. */ import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; +import { SomeTypes } from "../util.js"; +import { TestEventDetail } from "../event-custom-type/cmp"; +import { RadioGroupCompareFn } from "../radio-group-blur/test-radio-group"; +import { Item } from "../scoped-add-remove-classes/cmp"; +export { SomeTypes } from "../util.js"; +export { TestEventDetail } from "../event-custom-type/cmp"; +export { RadioGroupCompareFn } from "../radio-group-blur/test-radio-group"; +export { Item } from "../scoped-add-remove-classes/cmp"; export namespace Components { interface AppRoot { } + interface AsyncRerender { + } + interface AttributeBasic { + /** + * @default 'my-custom-attr' + */ + "customAttr": string; + /** + * @default 'getter' + */ + "getter": string; + /** + * @default 'multiWord' + */ + "multiWord": string; + /** + * @default 'single' + */ + "single": string; + } + interface AttributeBasicRoot { + } + interface AttributeBoolean { + "boolState"?: boolean; + "noreflect"?: boolean; + "strState"?: string; + } + interface AttributeBooleanRoot { + "toggleState": () => Promise; + } + interface AttributeComplex { + /** + * @default true + */ + "bool0": boolean; + "bool1"?: boolean; + "bool2"?: boolean; + "getInstance": () => Promise; + /** + * @default 1 + */ + "nu0": number; + "nu1"?: number; + "nu2"?: SomeTypes.Number; + "obj": string; + /** + * @default 'hello' + */ + "str0": string; + "str1"?: string; + "str2"?: SomeTypes.String; + } + interface AttributeHost { + } + interface AttributeHtmlRoot { + "anyAttr"?: any; + "nuAttr"?: number; + "strAttr"?: string; + } + interface BadSharedJsx { + } + interface BuildData { + } + interface ChildReflectNanAttribute { + "val": number; + } + interface ChildWithReflection { + "val": number | any; + } interface CmpA { } + interface CmpAvatar { + } interface CmpB { } interface CmpC { @@ -24,147 +103,3454 @@ export namespace Components { */ "uniqueId": string; } + interface CmpLabel { + } + interface CmpLabelWithSlotSibling { + } + interface CmpLevel1 { + } + interface CmpLevel2 { + } + interface CmpLevel3 { + } interface CmpScopedA { } interface CmpScopedB { } + interface CmpSlottedParentnode { + } interface CmpTextBlue { } interface CmpTextGreen { } - interface TestSvg { + interface ComplexProperties { + /** + * map objects + */ + "baz": Map; + /** + * basic object + */ + "foo": { bar: string; loo: number[]; qux: { quux: symbol } }; + /** + * infinity + */ + "grault": typeof Infinity; + /** + * basic array + */ + "kidsNames": string[]; + /** + * set objects + */ + "quux": Set; + /** + * null + */ + "waldo": null; } -} -declare global { - interface HTMLAppRootElement extends Components.AppRoot, HTMLStencilElement { + interface ComputedPropertiesPropDecorator { + /** + * @default 'no' + */ + "first": string; + /** + * @default 'content' + */ + "last": string; + /** + * @default '' + */ + "middle": string; } - var HTMLAppRootElement: { - prototype: HTMLAppRootElement; - new (): HTMLAppRootElement; - }; - interface HTMLCmpAElement extends Components.CmpA, HTMLStencilElement { + interface ComputedPropertiesPropDecoratorReflect { + /** + * @default 'no' + */ + "first": string; + /** + * @default 'content' + */ + "last": string; + /** + * @default '' + */ + "middle": string; } - var HTMLCmpAElement: { - prototype: HTMLCmpAElement; - new (): HTMLCmpAElement; - }; - interface HTMLCmpBElement extends Components.CmpB, HTMLStencilElement { + interface ComputedPropertiesStateDecorator { + "changeStates": () => Promise; } - var HTMLCmpBElement: { - prototype: HTMLCmpBElement; - new (): HTMLCmpBElement; - }; - interface HTMLCmpCElement extends Components.CmpC, HTMLStencilElement { + interface ComputedPropertiesWatchDecorator { + /** + * @default 'no' + */ + "first": string; + /** + * @default 'content' + */ + "last": string; } - var HTMLCmpCElement: { - prototype: HTMLCmpCElement; - new (): HTMLCmpCElement; - }; - interface HTMLCmpClientScopedElement extends Components.CmpClientScoped, HTMLStencilElement { + interface ConditionalBasic { } - var HTMLCmpClientScopedElement: { - prototype: HTMLCmpClientScopedElement; - new (): HTMLCmpClientScopedElement; - }; - interface HTMLCmpClientShadowElement extends Components.CmpClientShadow, HTMLStencilElement { + interface ConditionalRerender { } - var HTMLCmpClientShadowElement: { - prototype: HTMLCmpClientShadowElement; - new (): HTMLCmpClientShadowElement; - }; - interface HTMLCmpDElement extends Components.CmpD, HTMLStencilElement { + interface ConditionalRerenderRoot { } - var HTMLCmpDElement: { - prototype: HTMLCmpDElement; - new (): HTMLCmpDElement; - }; - interface HTMLCmpScopedAElement extends Components.CmpScopedA, HTMLStencilElement { + interface CssCmp { } - var HTMLCmpScopedAElement: { - prototype: HTMLCmpScopedAElement; - new (): HTMLCmpScopedAElement; - }; - interface HTMLCmpScopedBElement extends Components.CmpScopedB, HTMLStencilElement { + interface CssVariablesNoEncapsulation { } - var HTMLCmpScopedBElement: { - prototype: HTMLCmpScopedBElement; - new (): HTMLCmpScopedBElement; - }; - interface HTMLCmpTextBlueElement extends Components.CmpTextBlue, HTMLStencilElement { + interface CssVariablesShadowDom { } - var HTMLCmpTextBlueElement: { - prototype: HTMLCmpTextBlueElement; - new (): HTMLCmpTextBlueElement; - }; - interface HTMLCmpTextGreenElement extends Components.CmpTextGreen, HTMLStencilElement { + interface CustomElementChild { } - var HTMLCmpTextGreenElement: { - prototype: HTMLCmpTextGreenElement; - new (): HTMLCmpTextGreenElement; - }; - interface HTMLTestSvgElement extends Components.TestSvg, HTMLStencilElement { + interface CustomElementChildDifferentNameThanClass { } - var HTMLTestSvgElement: { - prototype: HTMLTestSvgElement; - new (): HTMLTestSvgElement; - }; - interface HTMLElementTagNameMap { - "app-root": HTMLAppRootElement; - "cmp-a": HTMLCmpAElement; - "cmp-b": HTMLCmpBElement; - "cmp-c": HTMLCmpCElement; - "cmp-client-scoped": HTMLCmpClientScopedElement; - "cmp-client-shadow": HTMLCmpClientShadowElement; - "cmp-d": HTMLCmpDElement; - "cmp-scoped-a": HTMLCmpScopedAElement; - "cmp-scoped-b": HTMLCmpScopedBElement; - "cmp-text-blue": HTMLCmpTextBlueElement; - "cmp-text-green": HTMLCmpTextGreenElement; - "test-svg": HTMLTestSvgElement; + interface CustomElementNestedChild { } -} -declare namespace LocalJSX { - interface AppRoot { + interface CustomElementRoot { } - interface CmpA { + interface CustomElementRootDifferentNameThanClass { } - interface CmpB { + interface CustomElementsDelegatesFocus { } - interface CmpC { + interface CustomElementsHierarchyLifecycleChild { } - interface CmpClientScoped { + interface CustomElementsHierarchyLifecycleParent { } - interface CmpClientShadow { + interface CustomElementsNoDelegatesFocus { } - interface CmpD { + interface CustomEventRoot { + } + interface CustomSvgElement { + } + interface DelegatesFocus { + } + interface DomReattach { + /** + * @default 0 + */ + "didLoad": number; + /** + * @default 0 + */ + "didUnload": number; + /** + * @default 0 + */ + "willLoad": number; + } + interface DomReattachClone { + } + interface DomReattachCloneDeepSlot { + } + interface DomReattachCloneHost { + } + interface DsdCmp { + } + interface DynamicCssVariable { + } + interface DynamicImport { + "update": () => Promise; + } + interface Es5AddclassSvg { + } + interface EsmImport { + /** + * @default 0 + */ + "propVal": number; + "someMethod": () => Promise; + } + interface EventBasic { + } + interface EventCustomType { + } + interface EventListenerCapture { + } + interface EventReRegister { + } + interface ExtendedCmp { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'ExtendedCmp text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface ExtendsCmpCmp { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'default text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface ExtendsExternal { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'default text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface ExtendsMixin { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'default text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } + interface ExternalImportA { + } + interface ExternalImportB { + } + interface ExternalImportC { + } + interface FactoryJsx { + } + interface FormAssociated { + } + interface FormAssociatedPropCheck { + "disabled": boolean; + } + interface GlobalStyles { + } + interface HostAttrOverride { + } + interface ImageImport { + } + interface ImportAliasing { + "myMethod": () => Promise; + "user": string; + } + interface InitCssRoot { + } + interface InputBasicRoot { + "value"?: string; + } + interface IonChild { + } + interface IonHost { + } + interface IonParent { + } + interface IonRadio { + /** + * The name of the control, which is submitted with the form data. + * @default this.inputId + */ + "name": string; + "setButtonTabindex": (value: number) => Promise; + "setFocus": (ev?: globalThis.Event) => Promise; + /** + * the value of the radio. + */ + "value"?: any | null; + } + interface IonRadioGroup { + /** + * If `true`, the radios can be deselected. + * @default false + */ + "allowEmptySelection": boolean; + /** + * This property allows developers to specify a custom function or property name for comparing objects when determining the selected option in the ion-radio-group. When not specified, the default behavior will use strict equality (===) for comparison. + */ + "compareWith"?: string | RadioGroupCompareFn | null; + /** + * The error text to display at the top of the radio group. + */ + "errorText"?: string; + /** + * The helper text to display at the top of the radio group. + */ + "helperText"?: string; + /** + * The name of the control, which is submitted with the form data. + * @default this.inputId + */ + "name": string; + /** + * the value of the radio group. + */ + "value"?: any | null; + } + interface JsonBasic { + } + interface KeyReorder { + } + interface LifecycleAsyncA { + } + interface LifecycleAsyncB { /** * @default '' */ - "uniqueId"?: string; + "value": string; } - interface CmpScopedA { + interface LifecycleAsyncC { + /** + * @default '' + */ + "value": string; } - interface CmpScopedB { + interface LifecycleBasicA { } - interface CmpTextBlue { + interface LifecycleBasicB { + /** + * @default '' + */ + "value": string; } - interface CmpTextGreen { + interface LifecycleBasicC { + /** + * @default '' + */ + "value": string; } - interface TestSvg { + interface LifecycleNestedA { + } + interface LifecycleNestedB { + } + interface LifecycleNestedC { + } + interface LifecycleUnloadA { + } + interface LifecycleUnloadB { + } + interface LifecycleUnloadRoot { + } + interface LifecycleUpdateA { + } + interface LifecycleUpdateB { + /** + * @default 0 + */ + "value": number; + } + interface LifecycleUpdateC { + /** + * @default 0 + */ + "value": number; + } + interface ListenJsx { + } + interface ListenJsxRoot { + } + interface ListenReattach { + } + interface ListenWindow { + } + interface MultipleStylesCmp { + } + interface MyComponent { + } + interface NoDelegatesFocus { + } + interface NodeResolution { + } + interface PageList { + /** + * @default null + */ + "lastPage": number | null; + } + interface PageListItem { + /** + * Set the number to be displayed. + * @default false + */ + "active": boolean; + /** + * Set the number to be displayed. + */ + "label": number; + } + interface ParentReflectNanAttribute { + } + interface ParentWithReflectChild { + } + interface PartSsrShadowCmp { + "selected": boolean; + } + interface PartWrapSsrShadowCmp { + "selected": boolean; + } + interface RadioGroupBlurTest { + } + interface RefAttrOrder { + } + interface ReflectNanAttribute { + "val": number; + } + interface ReflectNanAttributeHyphen { + "valNum": number; + } + interface ReflectToAttr { + /** + * @default false + */ + "bool": boolean; + /** + * @default false + */ + "disabled": boolean; + "dynamicNu"?: number; + "dynamicStr"?: string; + /** + * @default 2 + */ + "nu": number; + /** + * @default null + */ + "null": string | null; + /** + * @default true + */ + "otherBool": boolean; + /** + * @default 'single' + */ + "str": string; + "undef"?: string; + } + interface RemoveChildPatch { + } + interface ReparentStyleNoVars { + } + interface ReparentStyleWithVars { + } + interface SassCmp { + } + interface ScopedAddRemoveClasses { + "items": Item[]; + "selectedItems": number[]; + } + interface ScopedBasic { + } + interface ScopedBasicRoot { + } + interface ScopedConditional { + /** + * @default false + */ + "renderHello": boolean; + } + interface ScopedSlotAppendAndPrepend { + } + interface ScopedSlotAssignedMethods { + "getSlotAssignedElements": (opts?: { flatten: boolean; }, getPlainSlot?: boolean) => Promise; + "getSlotAssignedNodes": (opts?: { flatten: boolean; }, getPlainSlot?: boolean) => Promise; + } + interface ScopedSlotChildInsertAdjacent { + } + interface ScopedSlotChildren { + } + interface ScopedSlotInsertbefore { + } + interface ScopedSlotInsertionOrderAfterInteraction { + } + interface ScopedSlotSlotchange { + /** + * @default [] + */ + "slotEventCatch": { event: Event; assignedNodes: Node[] }[]; + } + interface ScopedSlotSlotchangeWrap { + /** + * @default false + */ + "swapSlotContent": boolean; + } + interface ScopedSsrChildCmp { + } + interface ScopedSsrParentCmp { + } + interface ShadowDomArray { + /** + * @default [] + */ + "values": number[]; + } + interface ShadowDomArrayRoot { + } + interface ShadowDomBasic { + } + interface ShadowDomBasicRoot { + } + interface ShadowDomMode { + /** + * The mode determines which platform styles to use. + */ + "colormode"?: string; + } + interface ShadowDomSlotNested { + "i"?: number; + } + interface ShadowDomSlotNestedRoot { + } + interface ShadowSsrChildCmp { + } + interface ShadowSsrParentCmp { + } + interface SlotArrayBasic { + } + interface SlotArrayComplex { + } + interface SlotArrayComplexRoot { + } + interface SlotArrayTop { + } + interface SlotBasic { + } + interface SlotBasicOrder { + } + interface SlotBasicOrderRoot { + } + interface SlotBasicRoot { + } + interface SlotChildrenRoot { + } + interface SlotConditionalRendering { + } + interface SlotDynamicNameChangeScoped { + /** + * @default 'greeting' + */ + "slotName": string; + } + interface SlotDynamicNameChangeShadow { + /** + * @default 'greeting' + */ + "slotName": string; + } + interface SlotDynamicScopedList { + /** + * @default [] + */ + "items": Array; + } + interface SlotDynamicShadowList { + /** + * @default [] + */ + "items": Array; + } + interface SlotDynamicWrapper { + /** + * @default 'section' + */ + "tag": string; + } + interface SlotDynamicWrapperRoot { + } + interface SlotFallback { + /** + * @default 0 + */ + "inc": number; + } + interface SlotFallbackRoot { + } + interface SlotForwardChildFallback { + "label": string; + } + interface SlotForwardRoot { + "label": string; + } + interface SlotHideContentOpen { + /** + * @default false + */ + "enabled": boolean; + } + interface SlotHideContentScoped { + /** + * @default false + */ + "enabled": boolean; + } + interface SlotHtml { + /** + * @default 0 + */ + "inc": number; + } + interface SlotLightDomContent { + } + interface SlotLightDomRoot { + } + interface SlotLightList { + } + interface SlotLightScopedList { + } + interface SlotListLightRoot { + /** + * @default [] + */ + "items": string[]; + } + interface SlotListLightScopedRoot { + /** + * @default [] + */ + "items": string[]; + } + interface SlotMapOrder { + } + interface SlotMapOrderRoot { + } + interface SlotNestedDefaultOrderChild { + "state": boolean; + } + interface SlotNestedDefaultOrderParent { + } + interface SlotNestedDynamicChild { + } + interface SlotNestedDynamicParent { + } + interface SlotNestedDynamicWrapper { + } + interface SlotNestedOrderChild { + } + interface SlotNestedOrderParent { + } + interface SlotNgIf { + } + interface SlotNoDefault { + } + interface SlotParentTagChange { + /** + * @default 'p' + */ + "element": string; + } + interface SlotParentTagChangeRoot { + /** + * @default 'p' + */ + "element": string; + } + interface SlotReorder { + /** + * @default false + */ + "reordered": boolean; + } + interface SlotReorderRoot { + } + interface SlotReplaceWrapper { + "href"?: string; + } + interface SlotReplaceWrapperRoot { + } + interface SlottedCss { + } + interface SlowSsrProp { + /** + * @default [] + */ + "anArray": never[]; + } + interface SsrOrderCmp { + } + interface SsrOrderWrapCmp { + } + interface SsrShadowCmp { + "selected": boolean; + } + interface StaticDecoratedMembers { + } + interface StaticMembers { + } + interface StaticMembersSeparateExport { + } + interface StaticMembersSeparateInitializer { + } + interface StaticStyles { + } + interface StencilSibling { + } + interface SvgAttr { + } + interface SvgClass { + } + interface Tag3dComponent { + } + interface Tag88 { + } + interface TestSvg { + } + interface TextContentPatchScoped { + } + interface TextContentPatchScopedWithSlot { + } + interface TsTargetProps { + /** + * @default 'basicProp' + */ + "basicProp": string; + "decoratedGetterSetterProp": number; + /** + * @default -10 + */ + "decoratedProp": number; + "dynamicLifecycle": string[]; + } + interface WatchNativeAttributes { + } + interface WatchNativeAttributesNoMembers { + } + interface WrapSsrShadowCmp { + "selected": boolean; + } +} +export interface EsmImportCustomEvent extends CustomEvent { + detail: T; + target: HTMLEsmImportElement; +} +export interface EventBasicCustomEvent extends CustomEvent { + detail: T; + target: HTMLEventBasicElement; +} +export interface EventCustomTypeCustomEvent extends CustomEvent { + detail: T; + target: HTMLEventCustomTypeElement; +} +export interface ImportAliasingCustomEvent extends CustomEvent { + detail: T; + target: HTMLImportAliasingElement; +} +export interface IonRadioCustomEvent extends CustomEvent { + detail: T; + target: HTMLIonRadioElement; +} +export interface IonRadioGroupCustomEvent extends CustomEvent { + detail: T; + target: HTMLIonRadioGroupElement; +} +export interface LifecycleAsyncBCustomEvent extends CustomEvent { + detail: T; + target: HTMLLifecycleAsyncBElement; +} +export interface LifecycleAsyncCCustomEvent extends CustomEvent { + detail: T; + target: HTMLLifecycleAsyncCElement; +} +export interface LifecycleBasicBCustomEvent extends CustomEvent { + detail: T; + target: HTMLLifecycleBasicBElement; +} +export interface LifecycleBasicCCustomEvent extends CustomEvent { + detail: T; + target: HTMLLifecycleBasicCElement; +} +declare global { + interface HTMLAppRootElement extends Components.AppRoot, HTMLStencilElement { + } + var HTMLAppRootElement: { + prototype: HTMLAppRootElement; + new (): HTMLAppRootElement; + }; + interface HTMLAsyncRerenderElement extends Components.AsyncRerender, HTMLStencilElement { + } + var HTMLAsyncRerenderElement: { + prototype: HTMLAsyncRerenderElement; + new (): HTMLAsyncRerenderElement; + }; + interface HTMLAttributeBasicElement extends Components.AttributeBasic, HTMLStencilElement { + } + var HTMLAttributeBasicElement: { + prototype: HTMLAttributeBasicElement; + new (): HTMLAttributeBasicElement; + }; + interface HTMLAttributeBasicRootElement extends Components.AttributeBasicRoot, HTMLStencilElement { + } + var HTMLAttributeBasicRootElement: { + prototype: HTMLAttributeBasicRootElement; + new (): HTMLAttributeBasicRootElement; + }; + interface HTMLAttributeBooleanElement extends Components.AttributeBoolean, HTMLStencilElement { + } + var HTMLAttributeBooleanElement: { + prototype: HTMLAttributeBooleanElement; + new (): HTMLAttributeBooleanElement; + }; + interface HTMLAttributeBooleanRootElement extends Components.AttributeBooleanRoot, HTMLStencilElement { + } + var HTMLAttributeBooleanRootElement: { + prototype: HTMLAttributeBooleanRootElement; + new (): HTMLAttributeBooleanRootElement; + }; + interface HTMLAttributeComplexElement extends Components.AttributeComplex, HTMLStencilElement { + } + var HTMLAttributeComplexElement: { + prototype: HTMLAttributeComplexElement; + new (): HTMLAttributeComplexElement; + }; + interface HTMLAttributeHostElement extends Components.AttributeHost, HTMLStencilElement { + } + var HTMLAttributeHostElement: { + prototype: HTMLAttributeHostElement; + new (): HTMLAttributeHostElement; + }; + interface HTMLAttributeHtmlRootElement extends Components.AttributeHtmlRoot, HTMLStencilElement { + } + var HTMLAttributeHtmlRootElement: { + prototype: HTMLAttributeHtmlRootElement; + new (): HTMLAttributeHtmlRootElement; + }; + interface HTMLBadSharedJsxElement extends Components.BadSharedJsx, HTMLStencilElement { + } + var HTMLBadSharedJsxElement: { + prototype: HTMLBadSharedJsxElement; + new (): HTMLBadSharedJsxElement; + }; + interface HTMLBuildDataElement extends Components.BuildData, HTMLStencilElement { + } + var HTMLBuildDataElement: { + prototype: HTMLBuildDataElement; + new (): HTMLBuildDataElement; + }; + interface HTMLChildReflectNanAttributeElement extends Components.ChildReflectNanAttribute, HTMLStencilElement { + } + var HTMLChildReflectNanAttributeElement: { + prototype: HTMLChildReflectNanAttributeElement; + new (): HTMLChildReflectNanAttributeElement; + }; + interface HTMLChildWithReflectionElement extends Components.ChildWithReflection, HTMLStencilElement { + } + var HTMLChildWithReflectionElement: { + prototype: HTMLChildWithReflectionElement; + new (): HTMLChildWithReflectionElement; + }; + interface HTMLCmpAElement extends Components.CmpA, HTMLStencilElement { + } + var HTMLCmpAElement: { + prototype: HTMLCmpAElement; + new (): HTMLCmpAElement; + }; + interface HTMLCmpAvatarElement extends Components.CmpAvatar, HTMLStencilElement { + } + var HTMLCmpAvatarElement: { + prototype: HTMLCmpAvatarElement; + new (): HTMLCmpAvatarElement; + }; + interface HTMLCmpBElement extends Components.CmpB, HTMLStencilElement { + } + var HTMLCmpBElement: { + prototype: HTMLCmpBElement; + new (): HTMLCmpBElement; + }; + interface HTMLCmpCElement extends Components.CmpC, HTMLStencilElement { + } + var HTMLCmpCElement: { + prototype: HTMLCmpCElement; + new (): HTMLCmpCElement; + }; + interface HTMLCmpClientScopedElement extends Components.CmpClientScoped, HTMLStencilElement { + } + var HTMLCmpClientScopedElement: { + prototype: HTMLCmpClientScopedElement; + new (): HTMLCmpClientScopedElement; + }; + interface HTMLCmpClientShadowElement extends Components.CmpClientShadow, HTMLStencilElement { + } + var HTMLCmpClientShadowElement: { + prototype: HTMLCmpClientShadowElement; + new (): HTMLCmpClientShadowElement; + }; + interface HTMLCmpDElement extends Components.CmpD, HTMLStencilElement { + } + var HTMLCmpDElement: { + prototype: HTMLCmpDElement; + new (): HTMLCmpDElement; + }; + interface HTMLCmpLabelElement extends Components.CmpLabel, HTMLStencilElement { + } + var HTMLCmpLabelElement: { + prototype: HTMLCmpLabelElement; + new (): HTMLCmpLabelElement; + }; + interface HTMLCmpLabelWithSlotSiblingElement extends Components.CmpLabelWithSlotSibling, HTMLStencilElement { + } + var HTMLCmpLabelWithSlotSiblingElement: { + prototype: HTMLCmpLabelWithSlotSiblingElement; + new (): HTMLCmpLabelWithSlotSiblingElement; + }; + interface HTMLCmpLevel1Element extends Components.CmpLevel1, HTMLStencilElement { + } + var HTMLCmpLevel1Element: { + prototype: HTMLCmpLevel1Element; + new (): HTMLCmpLevel1Element; + }; + interface HTMLCmpLevel2Element extends Components.CmpLevel2, HTMLStencilElement { + } + var HTMLCmpLevel2Element: { + prototype: HTMLCmpLevel2Element; + new (): HTMLCmpLevel2Element; + }; + interface HTMLCmpLevel3Element extends Components.CmpLevel3, HTMLStencilElement { + } + var HTMLCmpLevel3Element: { + prototype: HTMLCmpLevel3Element; + new (): HTMLCmpLevel3Element; + }; + interface HTMLCmpScopedAElement extends Components.CmpScopedA, HTMLStencilElement { + } + var HTMLCmpScopedAElement: { + prototype: HTMLCmpScopedAElement; + new (): HTMLCmpScopedAElement; + }; + interface HTMLCmpScopedBElement extends Components.CmpScopedB, HTMLStencilElement { + } + var HTMLCmpScopedBElement: { + prototype: HTMLCmpScopedBElement; + new (): HTMLCmpScopedBElement; + }; + interface HTMLCmpSlottedParentnodeElement extends Components.CmpSlottedParentnode, HTMLStencilElement { + } + var HTMLCmpSlottedParentnodeElement: { + prototype: HTMLCmpSlottedParentnodeElement; + new (): HTMLCmpSlottedParentnodeElement; + }; + interface HTMLCmpTextBlueElement extends Components.CmpTextBlue, HTMLStencilElement { + } + var HTMLCmpTextBlueElement: { + prototype: HTMLCmpTextBlueElement; + new (): HTMLCmpTextBlueElement; + }; + interface HTMLCmpTextGreenElement extends Components.CmpTextGreen, HTMLStencilElement { + } + var HTMLCmpTextGreenElement: { + prototype: HTMLCmpTextGreenElement; + new (): HTMLCmpTextGreenElement; + }; + interface HTMLComplexPropertiesElement extends Components.ComplexProperties, HTMLStencilElement { + } + var HTMLComplexPropertiesElement: { + prototype: HTMLComplexPropertiesElement; + new (): HTMLComplexPropertiesElement; + }; + interface HTMLComputedPropertiesPropDecoratorElement extends Components.ComputedPropertiesPropDecorator, HTMLStencilElement { + } + var HTMLComputedPropertiesPropDecoratorElement: { + prototype: HTMLComputedPropertiesPropDecoratorElement; + new (): HTMLComputedPropertiesPropDecoratorElement; + }; + interface HTMLComputedPropertiesPropDecoratorReflectElement extends Components.ComputedPropertiesPropDecoratorReflect, HTMLStencilElement { + } + var HTMLComputedPropertiesPropDecoratorReflectElement: { + prototype: HTMLComputedPropertiesPropDecoratorReflectElement; + new (): HTMLComputedPropertiesPropDecoratorReflectElement; + }; + interface HTMLComputedPropertiesStateDecoratorElement extends Components.ComputedPropertiesStateDecorator, HTMLStencilElement { + } + var HTMLComputedPropertiesStateDecoratorElement: { + prototype: HTMLComputedPropertiesStateDecoratorElement; + new (): HTMLComputedPropertiesStateDecoratorElement; + }; + interface HTMLComputedPropertiesWatchDecoratorElement extends Components.ComputedPropertiesWatchDecorator, HTMLStencilElement { + } + var HTMLComputedPropertiesWatchDecoratorElement: { + prototype: HTMLComputedPropertiesWatchDecoratorElement; + new (): HTMLComputedPropertiesWatchDecoratorElement; + }; + interface HTMLConditionalBasicElement extends Components.ConditionalBasic, HTMLStencilElement { + } + var HTMLConditionalBasicElement: { + prototype: HTMLConditionalBasicElement; + new (): HTMLConditionalBasicElement; + }; + interface HTMLConditionalRerenderElement extends Components.ConditionalRerender, HTMLStencilElement { + } + var HTMLConditionalRerenderElement: { + prototype: HTMLConditionalRerenderElement; + new (): HTMLConditionalRerenderElement; + }; + interface HTMLConditionalRerenderRootElement extends Components.ConditionalRerenderRoot, HTMLStencilElement { + } + var HTMLConditionalRerenderRootElement: { + prototype: HTMLConditionalRerenderRootElement; + new (): HTMLConditionalRerenderRootElement; + }; + interface HTMLCssCmpElement extends Components.CssCmp, HTMLStencilElement { + } + var HTMLCssCmpElement: { + prototype: HTMLCssCmpElement; + new (): HTMLCssCmpElement; + }; + interface HTMLCssVariablesNoEncapsulationElement extends Components.CssVariablesNoEncapsulation, HTMLStencilElement { + } + var HTMLCssVariablesNoEncapsulationElement: { + prototype: HTMLCssVariablesNoEncapsulationElement; + new (): HTMLCssVariablesNoEncapsulationElement; + }; + interface HTMLCssVariablesShadowDomElement extends Components.CssVariablesShadowDom, HTMLStencilElement { + } + var HTMLCssVariablesShadowDomElement: { + prototype: HTMLCssVariablesShadowDomElement; + new (): HTMLCssVariablesShadowDomElement; + }; + interface HTMLCustomElementChildElement extends Components.CustomElementChild, HTMLStencilElement { + } + var HTMLCustomElementChildElement: { + prototype: HTMLCustomElementChildElement; + new (): HTMLCustomElementChildElement; + }; + interface HTMLCustomElementChildDifferentNameThanClassElement extends Components.CustomElementChildDifferentNameThanClass, HTMLStencilElement { + } + var HTMLCustomElementChildDifferentNameThanClassElement: { + prototype: HTMLCustomElementChildDifferentNameThanClassElement; + new (): HTMLCustomElementChildDifferentNameThanClassElement; + }; + interface HTMLCustomElementNestedChildElement extends Components.CustomElementNestedChild, HTMLStencilElement { + } + var HTMLCustomElementNestedChildElement: { + prototype: HTMLCustomElementNestedChildElement; + new (): HTMLCustomElementNestedChildElement; + }; + interface HTMLCustomElementRootElement extends Components.CustomElementRoot, HTMLStencilElement { + } + var HTMLCustomElementRootElement: { + prototype: HTMLCustomElementRootElement; + new (): HTMLCustomElementRootElement; + }; + interface HTMLCustomElementRootDifferentNameThanClassElement extends Components.CustomElementRootDifferentNameThanClass, HTMLStencilElement { + } + var HTMLCustomElementRootDifferentNameThanClassElement: { + prototype: HTMLCustomElementRootDifferentNameThanClassElement; + new (): HTMLCustomElementRootDifferentNameThanClassElement; + }; + interface HTMLCustomElementsDelegatesFocusElement extends Components.CustomElementsDelegatesFocus, HTMLStencilElement { + } + var HTMLCustomElementsDelegatesFocusElement: { + prototype: HTMLCustomElementsDelegatesFocusElement; + new (): HTMLCustomElementsDelegatesFocusElement; + }; + interface HTMLCustomElementsHierarchyLifecycleChildElement extends Components.CustomElementsHierarchyLifecycleChild, HTMLStencilElement { + } + var HTMLCustomElementsHierarchyLifecycleChildElement: { + prototype: HTMLCustomElementsHierarchyLifecycleChildElement; + new (): HTMLCustomElementsHierarchyLifecycleChildElement; + }; + interface HTMLCustomElementsHierarchyLifecycleParentElement extends Components.CustomElementsHierarchyLifecycleParent, HTMLStencilElement { + } + var HTMLCustomElementsHierarchyLifecycleParentElement: { + prototype: HTMLCustomElementsHierarchyLifecycleParentElement; + new (): HTMLCustomElementsHierarchyLifecycleParentElement; + }; + interface HTMLCustomElementsNoDelegatesFocusElement extends Components.CustomElementsNoDelegatesFocus, HTMLStencilElement { + } + var HTMLCustomElementsNoDelegatesFocusElement: { + prototype: HTMLCustomElementsNoDelegatesFocusElement; + new (): HTMLCustomElementsNoDelegatesFocusElement; + }; + interface HTMLCustomEventRootElement extends Components.CustomEventRoot, HTMLStencilElement { + } + var HTMLCustomEventRootElement: { + prototype: HTMLCustomEventRootElement; + new (): HTMLCustomEventRootElement; + }; + interface HTMLCustomSvgElementElement extends Components.CustomSvgElement, HTMLStencilElement { + } + var HTMLCustomSvgElementElement: { + prototype: HTMLCustomSvgElementElement; + new (): HTMLCustomSvgElementElement; + }; + interface HTMLDelegatesFocusElement extends Components.DelegatesFocus, HTMLStencilElement { + } + var HTMLDelegatesFocusElement: { + prototype: HTMLDelegatesFocusElement; + new (): HTMLDelegatesFocusElement; + }; + interface HTMLDomReattachElement extends Components.DomReattach, HTMLStencilElement { + } + var HTMLDomReattachElement: { + prototype: HTMLDomReattachElement; + new (): HTMLDomReattachElement; + }; + interface HTMLDomReattachCloneElement extends Components.DomReattachClone, HTMLStencilElement { + } + var HTMLDomReattachCloneElement: { + prototype: HTMLDomReattachCloneElement; + new (): HTMLDomReattachCloneElement; + }; + interface HTMLDomReattachCloneDeepSlotElement extends Components.DomReattachCloneDeepSlot, HTMLStencilElement { + } + var HTMLDomReattachCloneDeepSlotElement: { + prototype: HTMLDomReattachCloneDeepSlotElement; + new (): HTMLDomReattachCloneDeepSlotElement; + }; + interface HTMLDomReattachCloneHostElement extends Components.DomReattachCloneHost, HTMLStencilElement { + } + var HTMLDomReattachCloneHostElement: { + prototype: HTMLDomReattachCloneHostElement; + new (): HTMLDomReattachCloneHostElement; + }; + interface HTMLDsdCmpElement extends Components.DsdCmp, HTMLStencilElement { + } + var HTMLDsdCmpElement: { + prototype: HTMLDsdCmpElement; + new (): HTMLDsdCmpElement; + }; + interface HTMLDynamicCssVariableElement extends Components.DynamicCssVariable, HTMLStencilElement { + } + var HTMLDynamicCssVariableElement: { + prototype: HTMLDynamicCssVariableElement; + new (): HTMLDynamicCssVariableElement; + }; + interface HTMLDynamicImportElement extends Components.DynamicImport, HTMLStencilElement { + } + var HTMLDynamicImportElement: { + prototype: HTMLDynamicImportElement; + new (): HTMLDynamicImportElement; + }; + interface HTMLEs5AddclassSvgElement extends Components.Es5AddclassSvg, HTMLStencilElement { + } + var HTMLEs5AddclassSvgElement: { + prototype: HTMLEs5AddclassSvgElement; + new (): HTMLEs5AddclassSvgElement; + }; + interface HTMLEsmImportElementEventMap { + "someEvent": any; + } + interface HTMLEsmImportElement extends Components.EsmImport, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLEsmImportElement, ev: EsmImportCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLEsmImportElement, ev: EsmImportCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLEsmImportElement: { + prototype: HTMLEsmImportElement; + new (): HTMLEsmImportElement; + }; + interface HTMLEventBasicElementEventMap { + "testEvent": any; + } + interface HTMLEventBasicElement extends Components.EventBasic, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLEventBasicElement, ev: EventBasicCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLEventBasicElement, ev: EventBasicCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLEventBasicElement: { + prototype: HTMLEventBasicElement; + new (): HTMLEventBasicElement; + }; + interface HTMLEventCustomTypeElementEventMap { + "testEvent": TestEventDetail; + } + interface HTMLEventCustomTypeElement extends Components.EventCustomType, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLEventCustomTypeElement, ev: EventCustomTypeCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLEventCustomTypeElement, ev: EventCustomTypeCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLEventCustomTypeElement: { + prototype: HTMLEventCustomTypeElement; + new (): HTMLEventCustomTypeElement; + }; + interface HTMLEventListenerCaptureElement extends Components.EventListenerCapture, HTMLStencilElement { + } + var HTMLEventListenerCaptureElement: { + prototype: HTMLEventListenerCaptureElement; + new (): HTMLEventListenerCaptureElement; + }; + interface HTMLEventReRegisterElement extends Components.EventReRegister, HTMLStencilElement { + } + var HTMLEventReRegisterElement: { + prototype: HTMLEventReRegisterElement; + new (): HTMLEventReRegisterElement; + }; + interface HTMLExtendedCmpElement extends Components.ExtendedCmp, HTMLStencilElement { + } + var HTMLExtendedCmpElement: { + prototype: HTMLExtendedCmpElement; + new (): HTMLExtendedCmpElement; + }; + interface HTMLExtendsCmpCmpElement extends Components.ExtendsCmpCmp, HTMLStencilElement { + } + var HTMLExtendsCmpCmpElement: { + prototype: HTMLExtendsCmpCmpElement; + new (): HTMLExtendsCmpCmpElement; + }; + interface HTMLExtendsExternalElement extends Components.ExtendsExternal, HTMLStencilElement { + } + var HTMLExtendsExternalElement: { + prototype: HTMLExtendsExternalElement; + new (): HTMLExtendsExternalElement; + }; + interface HTMLExtendsMixinElement extends Components.ExtendsMixin, HTMLStencilElement { + } + var HTMLExtendsMixinElement: { + prototype: HTMLExtendsMixinElement; + new (): HTMLExtendsMixinElement; + }; + interface HTMLExternalImportAElement extends Components.ExternalImportA, HTMLStencilElement { + } + var HTMLExternalImportAElement: { + prototype: HTMLExternalImportAElement; + new (): HTMLExternalImportAElement; + }; + interface HTMLExternalImportBElement extends Components.ExternalImportB, HTMLStencilElement { + } + var HTMLExternalImportBElement: { + prototype: HTMLExternalImportBElement; + new (): HTMLExternalImportBElement; + }; + interface HTMLExternalImportCElement extends Components.ExternalImportC, HTMLStencilElement { + } + var HTMLExternalImportCElement: { + prototype: HTMLExternalImportCElement; + new (): HTMLExternalImportCElement; + }; + interface HTMLFactoryJsxElement extends Components.FactoryJsx, HTMLStencilElement { + } + var HTMLFactoryJsxElement: { + prototype: HTMLFactoryJsxElement; + new (): HTMLFactoryJsxElement; + }; + interface HTMLFormAssociatedElement extends Components.FormAssociated, HTMLStencilElement { + } + var HTMLFormAssociatedElement: { + prototype: HTMLFormAssociatedElement; + new (): HTMLFormAssociatedElement; + }; + interface HTMLFormAssociatedPropCheckElement extends Components.FormAssociatedPropCheck, HTMLStencilElement { + } + var HTMLFormAssociatedPropCheckElement: { + prototype: HTMLFormAssociatedPropCheckElement; + new (): HTMLFormAssociatedPropCheckElement; + }; + interface HTMLGlobalStylesElement extends Components.GlobalStyles, HTMLStencilElement { + } + var HTMLGlobalStylesElement: { + prototype: HTMLGlobalStylesElement; + new (): HTMLGlobalStylesElement; + }; + interface HTMLHostAttrOverrideElement extends Components.HostAttrOverride, HTMLStencilElement { + } + var HTMLHostAttrOverrideElement: { + prototype: HTMLHostAttrOverrideElement; + new (): HTMLHostAttrOverrideElement; + }; + interface HTMLImageImportElement extends Components.ImageImport, HTMLStencilElement { + } + var HTMLImageImportElement: { + prototype: HTMLImageImportElement; + new (): HTMLImageImportElement; + }; + interface HTMLImportAliasingElementEventMap { + "myEvent": void; + } + interface HTMLImportAliasingElement extends Components.ImportAliasing, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLImportAliasingElement, ev: ImportAliasingCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLImportAliasingElement, ev: ImportAliasingCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLImportAliasingElement: { + prototype: HTMLImportAliasingElement; + new (): HTMLImportAliasingElement; + }; + interface HTMLInitCssRootElement extends Components.InitCssRoot, HTMLStencilElement { + } + var HTMLInitCssRootElement: { + prototype: HTMLInitCssRootElement; + new (): HTMLInitCssRootElement; + }; + interface HTMLInputBasicRootElement extends Components.InputBasicRoot, HTMLStencilElement { + } + var HTMLInputBasicRootElement: { + prototype: HTMLInputBasicRootElement; + new (): HTMLInputBasicRootElement; + }; + interface HTMLIonChildElement extends Components.IonChild, HTMLStencilElement { + } + var HTMLIonChildElement: { + prototype: HTMLIonChildElement; + new (): HTMLIonChildElement; + }; + interface HTMLIonHostElement extends Components.IonHost, HTMLStencilElement { + } + var HTMLIonHostElement: { + prototype: HTMLIonHostElement; + new (): HTMLIonHostElement; + }; + interface HTMLIonParentElement extends Components.IonParent, HTMLStencilElement { + } + var HTMLIonParentElement: { + prototype: HTMLIonParentElement; + new (): HTMLIonParentElement; + }; + interface HTMLIonRadioElementEventMap { + "ionFocus": void; + "ionBlur": void; + } + interface HTMLIonRadioElement extends Components.IonRadio, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLIonRadioElement, ev: IonRadioCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLIonRadioElement, ev: IonRadioCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLIonRadioElement: { + prototype: HTMLIonRadioElement; + new (): HTMLIonRadioElement; + }; + interface HTMLIonRadioGroupElementEventMap { + "ionChange": any; + "ionValueChange": any; + } + interface HTMLIonRadioGroupElement extends Components.IonRadioGroup, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLIonRadioGroupElement, ev: IonRadioGroupCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLIonRadioGroupElement, ev: IonRadioGroupCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLIonRadioGroupElement: { + prototype: HTMLIonRadioGroupElement; + new (): HTMLIonRadioGroupElement; + }; + interface HTMLJsonBasicElement extends Components.JsonBasic, HTMLStencilElement { + } + var HTMLJsonBasicElement: { + prototype: HTMLJsonBasicElement; + new (): HTMLJsonBasicElement; + }; + interface HTMLKeyReorderElement extends Components.KeyReorder, HTMLStencilElement { + } + var HTMLKeyReorderElement: { + prototype: HTMLKeyReorderElement; + new (): HTMLKeyReorderElement; + }; + interface HTMLLifecycleAsyncAElement extends Components.LifecycleAsyncA, HTMLStencilElement { + } + var HTMLLifecycleAsyncAElement: { + prototype: HTMLLifecycleAsyncAElement; + new (): HTMLLifecycleAsyncAElement; + }; + interface HTMLLifecycleAsyncBElementEventMap { + "lifecycleLoad": any; + "lifecycleUpdate": any; + } + interface HTMLLifecycleAsyncBElement extends Components.LifecycleAsyncB, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLLifecycleAsyncBElement, ev: LifecycleAsyncBCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLLifecycleAsyncBElement, ev: LifecycleAsyncBCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLLifecycleAsyncBElement: { + prototype: HTMLLifecycleAsyncBElement; + new (): HTMLLifecycleAsyncBElement; + }; + interface HTMLLifecycleAsyncCElementEventMap { + "lifecycleLoad": any; + "lifecycleUpdate": any; + } + interface HTMLLifecycleAsyncCElement extends Components.LifecycleAsyncC, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLLifecycleAsyncCElement, ev: LifecycleAsyncCCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLLifecycleAsyncCElement, ev: LifecycleAsyncCCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLLifecycleAsyncCElement: { + prototype: HTMLLifecycleAsyncCElement; + new (): HTMLLifecycleAsyncCElement; + }; + interface HTMLLifecycleBasicAElement extends Components.LifecycleBasicA, HTMLStencilElement { + } + var HTMLLifecycleBasicAElement: { + prototype: HTMLLifecycleBasicAElement; + new (): HTMLLifecycleBasicAElement; + }; + interface HTMLLifecycleBasicBElementEventMap { + "lifecycleLoad": any; + "lifecycleUpdate": any; + } + interface HTMLLifecycleBasicBElement extends Components.LifecycleBasicB, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLLifecycleBasicBElement, ev: LifecycleBasicBCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLLifecycleBasicBElement, ev: LifecycleBasicBCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLLifecycleBasicBElement: { + prototype: HTMLLifecycleBasicBElement; + new (): HTMLLifecycleBasicBElement; + }; + interface HTMLLifecycleBasicCElementEventMap { + "lifecycleLoad": any; + "lifecycleUpdate": any; + } + interface HTMLLifecycleBasicCElement extends Components.LifecycleBasicC, HTMLStencilElement { + addEventListener(type: K, listener: (this: HTMLLifecycleBasicCElement, ev: LifecycleBasicCCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLLifecycleBasicCElement, ev: LifecycleBasicCCustomEvent) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; + } + var HTMLLifecycleBasicCElement: { + prototype: HTMLLifecycleBasicCElement; + new (): HTMLLifecycleBasicCElement; + }; + interface HTMLLifecycleNestedAElement extends Components.LifecycleNestedA, HTMLStencilElement { + } + var HTMLLifecycleNestedAElement: { + prototype: HTMLLifecycleNestedAElement; + new (): HTMLLifecycleNestedAElement; + }; + interface HTMLLifecycleNestedBElement extends Components.LifecycleNestedB, HTMLStencilElement { + } + var HTMLLifecycleNestedBElement: { + prototype: HTMLLifecycleNestedBElement; + new (): HTMLLifecycleNestedBElement; + }; + interface HTMLLifecycleNestedCElement extends Components.LifecycleNestedC, HTMLStencilElement { + } + var HTMLLifecycleNestedCElement: { + prototype: HTMLLifecycleNestedCElement; + new (): HTMLLifecycleNestedCElement; + }; + interface HTMLLifecycleUnloadAElement extends Components.LifecycleUnloadA, HTMLStencilElement { + } + var HTMLLifecycleUnloadAElement: { + prototype: HTMLLifecycleUnloadAElement; + new (): HTMLLifecycleUnloadAElement; + }; + interface HTMLLifecycleUnloadBElement extends Components.LifecycleUnloadB, HTMLStencilElement { + } + var HTMLLifecycleUnloadBElement: { + prototype: HTMLLifecycleUnloadBElement; + new (): HTMLLifecycleUnloadBElement; + }; + interface HTMLLifecycleUnloadRootElement extends Components.LifecycleUnloadRoot, HTMLStencilElement { + } + var HTMLLifecycleUnloadRootElement: { + prototype: HTMLLifecycleUnloadRootElement; + new (): HTMLLifecycleUnloadRootElement; + }; + interface HTMLLifecycleUpdateAElement extends Components.LifecycleUpdateA, HTMLStencilElement { + } + var HTMLLifecycleUpdateAElement: { + prototype: HTMLLifecycleUpdateAElement; + new (): HTMLLifecycleUpdateAElement; + }; + interface HTMLLifecycleUpdateBElement extends Components.LifecycleUpdateB, HTMLStencilElement { + } + var HTMLLifecycleUpdateBElement: { + prototype: HTMLLifecycleUpdateBElement; + new (): HTMLLifecycleUpdateBElement; + }; + interface HTMLLifecycleUpdateCElement extends Components.LifecycleUpdateC, HTMLStencilElement { + } + var HTMLLifecycleUpdateCElement: { + prototype: HTMLLifecycleUpdateCElement; + new (): HTMLLifecycleUpdateCElement; + }; + interface HTMLListenJsxElement extends Components.ListenJsx, HTMLStencilElement { + } + var HTMLListenJsxElement: { + prototype: HTMLListenJsxElement; + new (): HTMLListenJsxElement; + }; + interface HTMLListenJsxRootElement extends Components.ListenJsxRoot, HTMLStencilElement { + } + var HTMLListenJsxRootElement: { + prototype: HTMLListenJsxRootElement; + new (): HTMLListenJsxRootElement; + }; + interface HTMLListenReattachElement extends Components.ListenReattach, HTMLStencilElement { + } + var HTMLListenReattachElement: { + prototype: HTMLListenReattachElement; + new (): HTMLListenReattachElement; + }; + interface HTMLListenWindowElement extends Components.ListenWindow, HTMLStencilElement { + } + var HTMLListenWindowElement: { + prototype: HTMLListenWindowElement; + new (): HTMLListenWindowElement; + }; + interface HTMLMultipleStylesCmpElement extends Components.MultipleStylesCmp, HTMLStencilElement { + } + var HTMLMultipleStylesCmpElement: { + prototype: HTMLMultipleStylesCmpElement; + new (): HTMLMultipleStylesCmpElement; + }; + interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement { + } + var HTMLMyComponentElement: { + prototype: HTMLMyComponentElement; + new (): HTMLMyComponentElement; + }; + interface HTMLNoDelegatesFocusElement extends Components.NoDelegatesFocus, HTMLStencilElement { + } + var HTMLNoDelegatesFocusElement: { + prototype: HTMLNoDelegatesFocusElement; + new (): HTMLNoDelegatesFocusElement; + }; + interface HTMLNodeResolutionElement extends Components.NodeResolution, HTMLStencilElement { + } + var HTMLNodeResolutionElement: { + prototype: HTMLNodeResolutionElement; + new (): HTMLNodeResolutionElement; + }; + interface HTMLPageListElement extends Components.PageList, HTMLStencilElement { + } + var HTMLPageListElement: { + prototype: HTMLPageListElement; + new (): HTMLPageListElement; + }; + interface HTMLPageListItemElement extends Components.PageListItem, HTMLStencilElement { + } + var HTMLPageListItemElement: { + prototype: HTMLPageListItemElement; + new (): HTMLPageListItemElement; + }; + interface HTMLParentReflectNanAttributeElement extends Components.ParentReflectNanAttribute, HTMLStencilElement { + } + var HTMLParentReflectNanAttributeElement: { + prototype: HTMLParentReflectNanAttributeElement; + new (): HTMLParentReflectNanAttributeElement; + }; + interface HTMLParentWithReflectChildElement extends Components.ParentWithReflectChild, HTMLStencilElement { + } + var HTMLParentWithReflectChildElement: { + prototype: HTMLParentWithReflectChildElement; + new (): HTMLParentWithReflectChildElement; + }; + interface HTMLPartSsrShadowCmpElement extends Components.PartSsrShadowCmp, HTMLStencilElement { + } + var HTMLPartSsrShadowCmpElement: { + prototype: HTMLPartSsrShadowCmpElement; + new (): HTMLPartSsrShadowCmpElement; + }; + interface HTMLPartWrapSsrShadowCmpElement extends Components.PartWrapSsrShadowCmp, HTMLStencilElement { + } + var HTMLPartWrapSsrShadowCmpElement: { + prototype: HTMLPartWrapSsrShadowCmpElement; + new (): HTMLPartWrapSsrShadowCmpElement; + }; + interface HTMLRadioGroupBlurTestElement extends Components.RadioGroupBlurTest, HTMLStencilElement { + } + var HTMLRadioGroupBlurTestElement: { + prototype: HTMLRadioGroupBlurTestElement; + new (): HTMLRadioGroupBlurTestElement; + }; + interface HTMLRefAttrOrderElement extends Components.RefAttrOrder, HTMLStencilElement { + } + var HTMLRefAttrOrderElement: { + prototype: HTMLRefAttrOrderElement; + new (): HTMLRefAttrOrderElement; + }; + interface HTMLReflectNanAttributeElement extends Components.ReflectNanAttribute, HTMLStencilElement { + } + var HTMLReflectNanAttributeElement: { + prototype: HTMLReflectNanAttributeElement; + new (): HTMLReflectNanAttributeElement; + }; + interface HTMLReflectNanAttributeHyphenElement extends Components.ReflectNanAttributeHyphen, HTMLStencilElement { + } + var HTMLReflectNanAttributeHyphenElement: { + prototype: HTMLReflectNanAttributeHyphenElement; + new (): HTMLReflectNanAttributeHyphenElement; + }; + interface HTMLReflectToAttrElement extends Components.ReflectToAttr, HTMLStencilElement { + } + var HTMLReflectToAttrElement: { + prototype: HTMLReflectToAttrElement; + new (): HTMLReflectToAttrElement; + }; + interface HTMLRemoveChildPatchElement extends Components.RemoveChildPatch, HTMLStencilElement { + } + var HTMLRemoveChildPatchElement: { + prototype: HTMLRemoveChildPatchElement; + new (): HTMLRemoveChildPatchElement; + }; + interface HTMLReparentStyleNoVarsElement extends Components.ReparentStyleNoVars, HTMLStencilElement { + } + var HTMLReparentStyleNoVarsElement: { + prototype: HTMLReparentStyleNoVarsElement; + new (): HTMLReparentStyleNoVarsElement; + }; + interface HTMLReparentStyleWithVarsElement extends Components.ReparentStyleWithVars, HTMLStencilElement { + } + var HTMLReparentStyleWithVarsElement: { + prototype: HTMLReparentStyleWithVarsElement; + new (): HTMLReparentStyleWithVarsElement; + }; + interface HTMLSassCmpElement extends Components.SassCmp, HTMLStencilElement { + } + var HTMLSassCmpElement: { + prototype: HTMLSassCmpElement; + new (): HTMLSassCmpElement; + }; + interface HTMLScopedAddRemoveClassesElement extends Components.ScopedAddRemoveClasses, HTMLStencilElement { + } + var HTMLScopedAddRemoveClassesElement: { + prototype: HTMLScopedAddRemoveClassesElement; + new (): HTMLScopedAddRemoveClassesElement; + }; + interface HTMLScopedBasicElement extends Components.ScopedBasic, HTMLStencilElement { + } + var HTMLScopedBasicElement: { + prototype: HTMLScopedBasicElement; + new (): HTMLScopedBasicElement; + }; + interface HTMLScopedBasicRootElement extends Components.ScopedBasicRoot, HTMLStencilElement { + } + var HTMLScopedBasicRootElement: { + prototype: HTMLScopedBasicRootElement; + new (): HTMLScopedBasicRootElement; + }; + interface HTMLScopedConditionalElement extends Components.ScopedConditional, HTMLStencilElement { + } + var HTMLScopedConditionalElement: { + prototype: HTMLScopedConditionalElement; + new (): HTMLScopedConditionalElement; + }; + interface HTMLScopedSlotAppendAndPrependElement extends Components.ScopedSlotAppendAndPrepend, HTMLStencilElement { + } + var HTMLScopedSlotAppendAndPrependElement: { + prototype: HTMLScopedSlotAppendAndPrependElement; + new (): HTMLScopedSlotAppendAndPrependElement; + }; + interface HTMLScopedSlotAssignedMethodsElement extends Components.ScopedSlotAssignedMethods, HTMLStencilElement { + } + var HTMLScopedSlotAssignedMethodsElement: { + prototype: HTMLScopedSlotAssignedMethodsElement; + new (): HTMLScopedSlotAssignedMethodsElement; + }; + interface HTMLScopedSlotChildInsertAdjacentElement extends Components.ScopedSlotChildInsertAdjacent, HTMLStencilElement { + } + var HTMLScopedSlotChildInsertAdjacentElement: { + prototype: HTMLScopedSlotChildInsertAdjacentElement; + new (): HTMLScopedSlotChildInsertAdjacentElement; + }; + interface HTMLScopedSlotChildrenElement extends Components.ScopedSlotChildren, HTMLStencilElement { + } + var HTMLScopedSlotChildrenElement: { + prototype: HTMLScopedSlotChildrenElement; + new (): HTMLScopedSlotChildrenElement; + }; + interface HTMLScopedSlotInsertbeforeElement extends Components.ScopedSlotInsertbefore, HTMLStencilElement { + } + var HTMLScopedSlotInsertbeforeElement: { + prototype: HTMLScopedSlotInsertbeforeElement; + new (): HTMLScopedSlotInsertbeforeElement; + }; + interface HTMLScopedSlotInsertionOrderAfterInteractionElement extends Components.ScopedSlotInsertionOrderAfterInteraction, HTMLStencilElement { + } + var HTMLScopedSlotInsertionOrderAfterInteractionElement: { + prototype: HTMLScopedSlotInsertionOrderAfterInteractionElement; + new (): HTMLScopedSlotInsertionOrderAfterInteractionElement; + }; + interface HTMLScopedSlotSlotchangeElement extends Components.ScopedSlotSlotchange, HTMLStencilElement { + } + var HTMLScopedSlotSlotchangeElement: { + prototype: HTMLScopedSlotSlotchangeElement; + new (): HTMLScopedSlotSlotchangeElement; + }; + interface HTMLScopedSlotSlotchangeWrapElement extends Components.ScopedSlotSlotchangeWrap, HTMLStencilElement { + } + var HTMLScopedSlotSlotchangeWrapElement: { + prototype: HTMLScopedSlotSlotchangeWrapElement; + new (): HTMLScopedSlotSlotchangeWrapElement; + }; + interface HTMLScopedSsrChildCmpElement extends Components.ScopedSsrChildCmp, HTMLStencilElement { + } + var HTMLScopedSsrChildCmpElement: { + prototype: HTMLScopedSsrChildCmpElement; + new (): HTMLScopedSsrChildCmpElement; + }; + interface HTMLScopedSsrParentCmpElement extends Components.ScopedSsrParentCmp, HTMLStencilElement { + } + var HTMLScopedSsrParentCmpElement: { + prototype: HTMLScopedSsrParentCmpElement; + new (): HTMLScopedSsrParentCmpElement; + }; + interface HTMLShadowDomArrayElement extends Components.ShadowDomArray, HTMLStencilElement { + } + var HTMLShadowDomArrayElement: { + prototype: HTMLShadowDomArrayElement; + new (): HTMLShadowDomArrayElement; + }; + interface HTMLShadowDomArrayRootElement extends Components.ShadowDomArrayRoot, HTMLStencilElement { + } + var HTMLShadowDomArrayRootElement: { + prototype: HTMLShadowDomArrayRootElement; + new (): HTMLShadowDomArrayRootElement; + }; + interface HTMLShadowDomBasicElement extends Components.ShadowDomBasic, HTMLStencilElement { + } + var HTMLShadowDomBasicElement: { + prototype: HTMLShadowDomBasicElement; + new (): HTMLShadowDomBasicElement; + }; + interface HTMLShadowDomBasicRootElement extends Components.ShadowDomBasicRoot, HTMLStencilElement { + } + var HTMLShadowDomBasicRootElement: { + prototype: HTMLShadowDomBasicRootElement; + new (): HTMLShadowDomBasicRootElement; + }; + interface HTMLShadowDomModeElement extends Components.ShadowDomMode, HTMLStencilElement { + } + var HTMLShadowDomModeElement: { + prototype: HTMLShadowDomModeElement; + new (): HTMLShadowDomModeElement; + }; + interface HTMLShadowDomSlotNestedElement extends Components.ShadowDomSlotNested, HTMLStencilElement { + } + var HTMLShadowDomSlotNestedElement: { + prototype: HTMLShadowDomSlotNestedElement; + new (): HTMLShadowDomSlotNestedElement; + }; + interface HTMLShadowDomSlotNestedRootElement extends Components.ShadowDomSlotNestedRoot, HTMLStencilElement { + } + var HTMLShadowDomSlotNestedRootElement: { + prototype: HTMLShadowDomSlotNestedRootElement; + new (): HTMLShadowDomSlotNestedRootElement; + }; + interface HTMLShadowSsrChildCmpElement extends Components.ShadowSsrChildCmp, HTMLStencilElement { + } + var HTMLShadowSsrChildCmpElement: { + prototype: HTMLShadowSsrChildCmpElement; + new (): HTMLShadowSsrChildCmpElement; + }; + interface HTMLShadowSsrParentCmpElement extends Components.ShadowSsrParentCmp, HTMLStencilElement { + } + var HTMLShadowSsrParentCmpElement: { + prototype: HTMLShadowSsrParentCmpElement; + new (): HTMLShadowSsrParentCmpElement; + }; + interface HTMLSlotArrayBasicElement extends Components.SlotArrayBasic, HTMLStencilElement { + } + var HTMLSlotArrayBasicElement: { + prototype: HTMLSlotArrayBasicElement; + new (): HTMLSlotArrayBasicElement; + }; + interface HTMLSlotArrayComplexElement extends Components.SlotArrayComplex, HTMLStencilElement { + } + var HTMLSlotArrayComplexElement: { + prototype: HTMLSlotArrayComplexElement; + new (): HTMLSlotArrayComplexElement; + }; + interface HTMLSlotArrayComplexRootElement extends Components.SlotArrayComplexRoot, HTMLStencilElement { + } + var HTMLSlotArrayComplexRootElement: { + prototype: HTMLSlotArrayComplexRootElement; + new (): HTMLSlotArrayComplexRootElement; + }; + interface HTMLSlotArrayTopElement extends Components.SlotArrayTop, HTMLStencilElement { + } + var HTMLSlotArrayTopElement: { + prototype: HTMLSlotArrayTopElement; + new (): HTMLSlotArrayTopElement; + }; + interface HTMLSlotBasicElement extends Components.SlotBasic, HTMLStencilElement { + } + var HTMLSlotBasicElement: { + prototype: HTMLSlotBasicElement; + new (): HTMLSlotBasicElement; + }; + interface HTMLSlotBasicOrderElement extends Components.SlotBasicOrder, HTMLStencilElement { + } + var HTMLSlotBasicOrderElement: { + prototype: HTMLSlotBasicOrderElement; + new (): HTMLSlotBasicOrderElement; + }; + interface HTMLSlotBasicOrderRootElement extends Components.SlotBasicOrderRoot, HTMLStencilElement { + } + var HTMLSlotBasicOrderRootElement: { + prototype: HTMLSlotBasicOrderRootElement; + new (): HTMLSlotBasicOrderRootElement; + }; + interface HTMLSlotBasicRootElement extends Components.SlotBasicRoot, HTMLStencilElement { + } + var HTMLSlotBasicRootElement: { + prototype: HTMLSlotBasicRootElement; + new (): HTMLSlotBasicRootElement; + }; + interface HTMLSlotChildrenRootElement extends Components.SlotChildrenRoot, HTMLStencilElement { + } + var HTMLSlotChildrenRootElement: { + prototype: HTMLSlotChildrenRootElement; + new (): HTMLSlotChildrenRootElement; + }; + interface HTMLSlotConditionalRenderingElement extends Components.SlotConditionalRendering, HTMLStencilElement { + } + var HTMLSlotConditionalRenderingElement: { + prototype: HTMLSlotConditionalRenderingElement; + new (): HTMLSlotConditionalRenderingElement; + }; + interface HTMLSlotDynamicNameChangeScopedElement extends Components.SlotDynamicNameChangeScoped, HTMLStencilElement { + } + var HTMLSlotDynamicNameChangeScopedElement: { + prototype: HTMLSlotDynamicNameChangeScopedElement; + new (): HTMLSlotDynamicNameChangeScopedElement; + }; + interface HTMLSlotDynamicNameChangeShadowElement extends Components.SlotDynamicNameChangeShadow, HTMLStencilElement { + } + var HTMLSlotDynamicNameChangeShadowElement: { + prototype: HTMLSlotDynamicNameChangeShadowElement; + new (): HTMLSlotDynamicNameChangeShadowElement; + }; + interface HTMLSlotDynamicScopedListElement extends Components.SlotDynamicScopedList, HTMLStencilElement { + } + var HTMLSlotDynamicScopedListElement: { + prototype: HTMLSlotDynamicScopedListElement; + new (): HTMLSlotDynamicScopedListElement; + }; + interface HTMLSlotDynamicShadowListElement extends Components.SlotDynamicShadowList, HTMLStencilElement { + } + var HTMLSlotDynamicShadowListElement: { + prototype: HTMLSlotDynamicShadowListElement; + new (): HTMLSlotDynamicShadowListElement; + }; + interface HTMLSlotDynamicWrapperElement extends Components.SlotDynamicWrapper, HTMLStencilElement { + } + var HTMLSlotDynamicWrapperElement: { + prototype: HTMLSlotDynamicWrapperElement; + new (): HTMLSlotDynamicWrapperElement; + }; + interface HTMLSlotDynamicWrapperRootElement extends Components.SlotDynamicWrapperRoot, HTMLStencilElement { + } + var HTMLSlotDynamicWrapperRootElement: { + prototype: HTMLSlotDynamicWrapperRootElement; + new (): HTMLSlotDynamicWrapperRootElement; + }; + interface HTMLSlotFallbackElement extends Components.SlotFallback, HTMLStencilElement { + } + var HTMLSlotFallbackElement: { + prototype: HTMLSlotFallbackElement; + new (): HTMLSlotFallbackElement; + }; + interface HTMLSlotFallbackRootElement extends Components.SlotFallbackRoot, HTMLStencilElement { + } + var HTMLSlotFallbackRootElement: { + prototype: HTMLSlotFallbackRootElement; + new (): HTMLSlotFallbackRootElement; + }; + interface HTMLSlotForwardChildFallbackElement extends Components.SlotForwardChildFallback, HTMLStencilElement { + } + var HTMLSlotForwardChildFallbackElement: { + prototype: HTMLSlotForwardChildFallbackElement; + new (): HTMLSlotForwardChildFallbackElement; + }; + interface HTMLSlotForwardRootElement extends Components.SlotForwardRoot, HTMLStencilElement { + } + var HTMLSlotForwardRootElement: { + prototype: HTMLSlotForwardRootElement; + new (): HTMLSlotForwardRootElement; + }; + interface HTMLSlotHideContentOpenElement extends Components.SlotHideContentOpen, HTMLStencilElement { + } + var HTMLSlotHideContentOpenElement: { + prototype: HTMLSlotHideContentOpenElement; + new (): HTMLSlotHideContentOpenElement; + }; + interface HTMLSlotHideContentScopedElement extends Components.SlotHideContentScoped, HTMLStencilElement { + } + var HTMLSlotHideContentScopedElement: { + prototype: HTMLSlotHideContentScopedElement; + new (): HTMLSlotHideContentScopedElement; + }; + interface HTMLSlotHtmlElement extends Components.SlotHtml, HTMLStencilElement { + } + var HTMLSlotHtmlElement: { + prototype: HTMLSlotHtmlElement; + new (): HTMLSlotHtmlElement; + }; + interface HTMLSlotLightDomContentElement extends Components.SlotLightDomContent, HTMLStencilElement { + } + var HTMLSlotLightDomContentElement: { + prototype: HTMLSlotLightDomContentElement; + new (): HTMLSlotLightDomContentElement; + }; + interface HTMLSlotLightDomRootElement extends Components.SlotLightDomRoot, HTMLStencilElement { + } + var HTMLSlotLightDomRootElement: { + prototype: HTMLSlotLightDomRootElement; + new (): HTMLSlotLightDomRootElement; + }; + interface HTMLSlotLightListElement extends Components.SlotLightList, HTMLStencilElement { + } + var HTMLSlotLightListElement: { + prototype: HTMLSlotLightListElement; + new (): HTMLSlotLightListElement; + }; + interface HTMLSlotLightScopedListElement extends Components.SlotLightScopedList, HTMLStencilElement { + } + var HTMLSlotLightScopedListElement: { + prototype: HTMLSlotLightScopedListElement; + new (): HTMLSlotLightScopedListElement; + }; + interface HTMLSlotListLightRootElement extends Components.SlotListLightRoot, HTMLStencilElement { + } + var HTMLSlotListLightRootElement: { + prototype: HTMLSlotListLightRootElement; + new (): HTMLSlotListLightRootElement; + }; + interface HTMLSlotListLightScopedRootElement extends Components.SlotListLightScopedRoot, HTMLStencilElement { + } + var HTMLSlotListLightScopedRootElement: { + prototype: HTMLSlotListLightScopedRootElement; + new (): HTMLSlotListLightScopedRootElement; + }; + interface HTMLSlotMapOrderElement extends Components.SlotMapOrder, HTMLStencilElement { + } + var HTMLSlotMapOrderElement: { + prototype: HTMLSlotMapOrderElement; + new (): HTMLSlotMapOrderElement; + }; + interface HTMLSlotMapOrderRootElement extends Components.SlotMapOrderRoot, HTMLStencilElement { + } + var HTMLSlotMapOrderRootElement: { + prototype: HTMLSlotMapOrderRootElement; + new (): HTMLSlotMapOrderRootElement; + }; + interface HTMLSlotNestedDefaultOrderChildElement extends Components.SlotNestedDefaultOrderChild, HTMLStencilElement { + } + var HTMLSlotNestedDefaultOrderChildElement: { + prototype: HTMLSlotNestedDefaultOrderChildElement; + new (): HTMLSlotNestedDefaultOrderChildElement; + }; + interface HTMLSlotNestedDefaultOrderParentElement extends Components.SlotNestedDefaultOrderParent, HTMLStencilElement { + } + var HTMLSlotNestedDefaultOrderParentElement: { + prototype: HTMLSlotNestedDefaultOrderParentElement; + new (): HTMLSlotNestedDefaultOrderParentElement; + }; + interface HTMLSlotNestedDynamicChildElement extends Components.SlotNestedDynamicChild, HTMLStencilElement { + } + var HTMLSlotNestedDynamicChildElement: { + prototype: HTMLSlotNestedDynamicChildElement; + new (): HTMLSlotNestedDynamicChildElement; + }; + interface HTMLSlotNestedDynamicParentElement extends Components.SlotNestedDynamicParent, HTMLStencilElement { + } + var HTMLSlotNestedDynamicParentElement: { + prototype: HTMLSlotNestedDynamicParentElement; + new (): HTMLSlotNestedDynamicParentElement; + }; + interface HTMLSlotNestedDynamicWrapperElement extends Components.SlotNestedDynamicWrapper, HTMLStencilElement { + } + var HTMLSlotNestedDynamicWrapperElement: { + prototype: HTMLSlotNestedDynamicWrapperElement; + new (): HTMLSlotNestedDynamicWrapperElement; + }; + interface HTMLSlotNestedOrderChildElement extends Components.SlotNestedOrderChild, HTMLStencilElement { + } + var HTMLSlotNestedOrderChildElement: { + prototype: HTMLSlotNestedOrderChildElement; + new (): HTMLSlotNestedOrderChildElement; + }; + interface HTMLSlotNestedOrderParentElement extends Components.SlotNestedOrderParent, HTMLStencilElement { + } + var HTMLSlotNestedOrderParentElement: { + prototype: HTMLSlotNestedOrderParentElement; + new (): HTMLSlotNestedOrderParentElement; + }; + interface HTMLSlotNgIfElement extends Components.SlotNgIf, HTMLStencilElement { + } + var HTMLSlotNgIfElement: { + prototype: HTMLSlotNgIfElement; + new (): HTMLSlotNgIfElement; + }; + interface HTMLSlotNoDefaultElement extends Components.SlotNoDefault, HTMLStencilElement { + } + var HTMLSlotNoDefaultElement: { + prototype: HTMLSlotNoDefaultElement; + new (): HTMLSlotNoDefaultElement; + }; + interface HTMLSlotParentTagChangeElement extends Components.SlotParentTagChange, HTMLStencilElement { + } + var HTMLSlotParentTagChangeElement: { + prototype: HTMLSlotParentTagChangeElement; + new (): HTMLSlotParentTagChangeElement; + }; + interface HTMLSlotParentTagChangeRootElement extends Components.SlotParentTagChangeRoot, HTMLStencilElement { + } + var HTMLSlotParentTagChangeRootElement: { + prototype: HTMLSlotParentTagChangeRootElement; + new (): HTMLSlotParentTagChangeRootElement; + }; + interface HTMLSlotReorderElement extends Components.SlotReorder, HTMLStencilElement { + } + var HTMLSlotReorderElement: { + prototype: HTMLSlotReorderElement; + new (): HTMLSlotReorderElement; + }; + interface HTMLSlotReorderRootElement extends Components.SlotReorderRoot, HTMLStencilElement { + } + var HTMLSlotReorderRootElement: { + prototype: HTMLSlotReorderRootElement; + new (): HTMLSlotReorderRootElement; + }; + interface HTMLSlotReplaceWrapperElement extends Components.SlotReplaceWrapper, HTMLStencilElement { + } + var HTMLSlotReplaceWrapperElement: { + prototype: HTMLSlotReplaceWrapperElement; + new (): HTMLSlotReplaceWrapperElement; + }; + interface HTMLSlotReplaceWrapperRootElement extends Components.SlotReplaceWrapperRoot, HTMLStencilElement { + } + var HTMLSlotReplaceWrapperRootElement: { + prototype: HTMLSlotReplaceWrapperRootElement; + new (): HTMLSlotReplaceWrapperRootElement; + }; + interface HTMLSlottedCssElement extends Components.SlottedCss, HTMLStencilElement { + } + var HTMLSlottedCssElement: { + prototype: HTMLSlottedCssElement; + new (): HTMLSlottedCssElement; + }; + interface HTMLSlowSsrPropElement extends Components.SlowSsrProp, HTMLStencilElement { + } + var HTMLSlowSsrPropElement: { + prototype: HTMLSlowSsrPropElement; + new (): HTMLSlowSsrPropElement; + }; + interface HTMLSsrOrderCmpElement extends Components.SsrOrderCmp, HTMLStencilElement { + } + var HTMLSsrOrderCmpElement: { + prototype: HTMLSsrOrderCmpElement; + new (): HTMLSsrOrderCmpElement; + }; + interface HTMLSsrOrderWrapCmpElement extends Components.SsrOrderWrapCmp, HTMLStencilElement { + } + var HTMLSsrOrderWrapCmpElement: { + prototype: HTMLSsrOrderWrapCmpElement; + new (): HTMLSsrOrderWrapCmpElement; + }; + interface HTMLSsrShadowCmpElement extends Components.SsrShadowCmp, HTMLStencilElement { + } + var HTMLSsrShadowCmpElement: { + prototype: HTMLSsrShadowCmpElement; + new (): HTMLSsrShadowCmpElement; + }; + interface HTMLStaticDecoratedMembersElement extends Components.StaticDecoratedMembers, HTMLStencilElement { + } + var HTMLStaticDecoratedMembersElement: { + prototype: HTMLStaticDecoratedMembersElement; + new (): HTMLStaticDecoratedMembersElement; + }; + interface HTMLStaticMembersElement extends Components.StaticMembers, HTMLStencilElement { + } + var HTMLStaticMembersElement: { + prototype: HTMLStaticMembersElement; + new (): HTMLStaticMembersElement; + }; + interface HTMLStaticMembersSeparateExportElement extends Components.StaticMembersSeparateExport, HTMLStencilElement { + } + var HTMLStaticMembersSeparateExportElement: { + prototype: HTMLStaticMembersSeparateExportElement; + new (): HTMLStaticMembersSeparateExportElement; + }; + interface HTMLStaticMembersSeparateInitializerElement extends Components.StaticMembersSeparateInitializer, HTMLStencilElement { + } + var HTMLStaticMembersSeparateInitializerElement: { + prototype: HTMLStaticMembersSeparateInitializerElement; + new (): HTMLStaticMembersSeparateInitializerElement; + }; + interface HTMLStaticStylesElement extends Components.StaticStyles, HTMLStencilElement { + } + var HTMLStaticStylesElement: { + prototype: HTMLStaticStylesElement; + new (): HTMLStaticStylesElement; + }; + interface HTMLStencilSiblingElement extends Components.StencilSibling, HTMLStencilElement { + } + var HTMLStencilSiblingElement: { + prototype: HTMLStencilSiblingElement; + new (): HTMLStencilSiblingElement; + }; + interface HTMLSvgAttrElement extends Components.SvgAttr, HTMLStencilElement { + } + var HTMLSvgAttrElement: { + prototype: HTMLSvgAttrElement; + new (): HTMLSvgAttrElement; + }; + interface HTMLSvgClassElement extends Components.SvgClass, HTMLStencilElement { + } + var HTMLSvgClassElement: { + prototype: HTMLSvgClassElement; + new (): HTMLSvgClassElement; + }; + interface HTMLTag3dComponentElement extends Components.Tag3dComponent, HTMLStencilElement { + } + var HTMLTag3dComponentElement: { + prototype: HTMLTag3dComponentElement; + new (): HTMLTag3dComponentElement; + }; + interface HTMLTag88Element extends Components.Tag88, HTMLStencilElement { + } + var HTMLTag88Element: { + prototype: HTMLTag88Element; + new (): HTMLTag88Element; + }; + interface HTMLTestSvgElement extends Components.TestSvg, HTMLStencilElement { + } + var HTMLTestSvgElement: { + prototype: HTMLTestSvgElement; + new (): HTMLTestSvgElement; + }; + interface HTMLTextContentPatchScopedElement extends Components.TextContentPatchScoped, HTMLStencilElement { + } + var HTMLTextContentPatchScopedElement: { + prototype: HTMLTextContentPatchScopedElement; + new (): HTMLTextContentPatchScopedElement; + }; + interface HTMLTextContentPatchScopedWithSlotElement extends Components.TextContentPatchScopedWithSlot, HTMLStencilElement { + } + var HTMLTextContentPatchScopedWithSlotElement: { + prototype: HTMLTextContentPatchScopedWithSlotElement; + new (): HTMLTextContentPatchScopedWithSlotElement; + }; + interface HTMLTsTargetPropsElement extends Components.TsTargetProps, HTMLStencilElement { + } + var HTMLTsTargetPropsElement: { + prototype: HTMLTsTargetPropsElement; + new (): HTMLTsTargetPropsElement; + }; + interface HTMLWatchNativeAttributesElement extends Components.WatchNativeAttributes, HTMLStencilElement { + } + var HTMLWatchNativeAttributesElement: { + prototype: HTMLWatchNativeAttributesElement; + new (): HTMLWatchNativeAttributesElement; + }; + interface HTMLWatchNativeAttributesNoMembersElement extends Components.WatchNativeAttributesNoMembers, HTMLStencilElement { + } + var HTMLWatchNativeAttributesNoMembersElement: { + prototype: HTMLWatchNativeAttributesNoMembersElement; + new (): HTMLWatchNativeAttributesNoMembersElement; + }; + interface HTMLWrapSsrShadowCmpElement extends Components.WrapSsrShadowCmp, HTMLStencilElement { + } + var HTMLWrapSsrShadowCmpElement: { + prototype: HTMLWrapSsrShadowCmpElement; + new (): HTMLWrapSsrShadowCmpElement; + }; + interface HTMLElementTagNameMap { + "app-root": HTMLAppRootElement; + "async-rerender": HTMLAsyncRerenderElement; + "attribute-basic": HTMLAttributeBasicElement; + "attribute-basic-root": HTMLAttributeBasicRootElement; + "attribute-boolean": HTMLAttributeBooleanElement; + "attribute-boolean-root": HTMLAttributeBooleanRootElement; + "attribute-complex": HTMLAttributeComplexElement; + "attribute-host": HTMLAttributeHostElement; + "attribute-html-root": HTMLAttributeHtmlRootElement; + "bad-shared-jsx": HTMLBadSharedJsxElement; + "build-data": HTMLBuildDataElement; + "child-reflect-nan-attribute": HTMLChildReflectNanAttributeElement; + "child-with-reflection": HTMLChildWithReflectionElement; + "cmp-a": HTMLCmpAElement; + "cmp-avatar": HTMLCmpAvatarElement; + "cmp-b": HTMLCmpBElement; + "cmp-c": HTMLCmpCElement; + "cmp-client-scoped": HTMLCmpClientScopedElement; + "cmp-client-shadow": HTMLCmpClientShadowElement; + "cmp-d": HTMLCmpDElement; + "cmp-label": HTMLCmpLabelElement; + "cmp-label-with-slot-sibling": HTMLCmpLabelWithSlotSiblingElement; + "cmp-level-1": HTMLCmpLevel1Element; + "cmp-level-2": HTMLCmpLevel2Element; + "cmp-level-3": HTMLCmpLevel3Element; + "cmp-scoped-a": HTMLCmpScopedAElement; + "cmp-scoped-b": HTMLCmpScopedBElement; + "cmp-slotted-parentnode": HTMLCmpSlottedParentnodeElement; + "cmp-text-blue": HTMLCmpTextBlueElement; + "cmp-text-green": HTMLCmpTextGreenElement; + "complex-properties": HTMLComplexPropertiesElement; + "computed-properties-prop-decorator": HTMLComputedPropertiesPropDecoratorElement; + "computed-properties-prop-decorator-reflect": HTMLComputedPropertiesPropDecoratorReflectElement; + "computed-properties-state-decorator": HTMLComputedPropertiesStateDecoratorElement; + "computed-properties-watch-decorator": HTMLComputedPropertiesWatchDecoratorElement; + "conditional-basic": HTMLConditionalBasicElement; + "conditional-rerender": HTMLConditionalRerenderElement; + "conditional-rerender-root": HTMLConditionalRerenderRootElement; + "css-cmp": HTMLCssCmpElement; + "css-variables-no-encapsulation": HTMLCssVariablesNoEncapsulationElement; + "css-variables-shadow-dom": HTMLCssVariablesShadowDomElement; + "custom-element-child": HTMLCustomElementChildElement; + "custom-element-child-different-name-than-class": HTMLCustomElementChildDifferentNameThanClassElement; + "custom-element-nested-child": HTMLCustomElementNestedChildElement; + "custom-element-root": HTMLCustomElementRootElement; + "custom-element-root-different-name-than-class": HTMLCustomElementRootDifferentNameThanClassElement; + "custom-elements-delegates-focus": HTMLCustomElementsDelegatesFocusElement; + "custom-elements-hierarchy-lifecycle-child": HTMLCustomElementsHierarchyLifecycleChildElement; + "custom-elements-hierarchy-lifecycle-parent": HTMLCustomElementsHierarchyLifecycleParentElement; + "custom-elements-no-delegates-focus": HTMLCustomElementsNoDelegatesFocusElement; + "custom-event-root": HTMLCustomEventRootElement; + "custom-svg-element": HTMLCustomSvgElementElement; + "delegates-focus": HTMLDelegatesFocusElement; + "dom-reattach": HTMLDomReattachElement; + "dom-reattach-clone": HTMLDomReattachCloneElement; + "dom-reattach-clone-deep-slot": HTMLDomReattachCloneDeepSlotElement; + "dom-reattach-clone-host": HTMLDomReattachCloneHostElement; + "dsd-cmp": HTMLDsdCmpElement; + "dynamic-css-variable": HTMLDynamicCssVariableElement; + "dynamic-import": HTMLDynamicImportElement; + "es5-addclass-svg": HTMLEs5AddclassSvgElement; + "esm-import": HTMLEsmImportElement; + "event-basic": HTMLEventBasicElement; + "event-custom-type": HTMLEventCustomTypeElement; + "event-listener-capture": HTMLEventListenerCaptureElement; + "event-re-register": HTMLEventReRegisterElement; + "extended-cmp": HTMLExtendedCmpElement; + "extends-cmp-cmp": HTMLExtendsCmpCmpElement; + "extends-external": HTMLExtendsExternalElement; + "extends-mixin": HTMLExtendsMixinElement; + "external-import-a": HTMLExternalImportAElement; + "external-import-b": HTMLExternalImportBElement; + "external-import-c": HTMLExternalImportCElement; + "factory-jsx": HTMLFactoryJsxElement; + "form-associated": HTMLFormAssociatedElement; + "form-associated-prop-check": HTMLFormAssociatedPropCheckElement; + "global-styles": HTMLGlobalStylesElement; + "host-attr-override": HTMLHostAttrOverrideElement; + "image-import": HTMLImageImportElement; + "import-aliasing": HTMLImportAliasingElement; + "init-css-root": HTMLInitCssRootElement; + "input-basic-root": HTMLInputBasicRootElement; + "ion-child": HTMLIonChildElement; + "ion-host": HTMLIonHostElement; + "ion-parent": HTMLIonParentElement; + "ion-radio": HTMLIonRadioElement; + "ion-radio-group": HTMLIonRadioGroupElement; + "json-basic": HTMLJsonBasicElement; + "key-reorder": HTMLKeyReorderElement; + "lifecycle-async-a": HTMLLifecycleAsyncAElement; + "lifecycle-async-b": HTMLLifecycleAsyncBElement; + "lifecycle-async-c": HTMLLifecycleAsyncCElement; + "lifecycle-basic-a": HTMLLifecycleBasicAElement; + "lifecycle-basic-b": HTMLLifecycleBasicBElement; + "lifecycle-basic-c": HTMLLifecycleBasicCElement; + "lifecycle-nested-a": HTMLLifecycleNestedAElement; + "lifecycle-nested-b": HTMLLifecycleNestedBElement; + "lifecycle-nested-c": HTMLLifecycleNestedCElement; + "lifecycle-unload-a": HTMLLifecycleUnloadAElement; + "lifecycle-unload-b": HTMLLifecycleUnloadBElement; + "lifecycle-unload-root": HTMLLifecycleUnloadRootElement; + "lifecycle-update-a": HTMLLifecycleUpdateAElement; + "lifecycle-update-b": HTMLLifecycleUpdateBElement; + "lifecycle-update-c": HTMLLifecycleUpdateCElement; + "listen-jsx": HTMLListenJsxElement; + "listen-jsx-root": HTMLListenJsxRootElement; + "listen-reattach": HTMLListenReattachElement; + "listen-window": HTMLListenWindowElement; + "multiple-styles-cmp": HTMLMultipleStylesCmpElement; + "my-component": HTMLMyComponentElement; + "no-delegates-focus": HTMLNoDelegatesFocusElement; + "node-resolution": HTMLNodeResolutionElement; + "page-list": HTMLPageListElement; + "page-list-item": HTMLPageListItemElement; + "parent-reflect-nan-attribute": HTMLParentReflectNanAttributeElement; + "parent-with-reflect-child": HTMLParentWithReflectChildElement; + "part-ssr-shadow-cmp": HTMLPartSsrShadowCmpElement; + "part-wrap-ssr-shadow-cmp": HTMLPartWrapSsrShadowCmpElement; + "radio-group-blur-test": HTMLRadioGroupBlurTestElement; + "ref-attr-order": HTMLRefAttrOrderElement; + "reflect-nan-attribute": HTMLReflectNanAttributeElement; + "reflect-nan-attribute-hyphen": HTMLReflectNanAttributeHyphenElement; + "reflect-to-attr": HTMLReflectToAttrElement; + "remove-child-patch": HTMLRemoveChildPatchElement; + "reparent-style-no-vars": HTMLReparentStyleNoVarsElement; + "reparent-style-with-vars": HTMLReparentStyleWithVarsElement; + "sass-cmp": HTMLSassCmpElement; + "scoped-add-remove-classes": HTMLScopedAddRemoveClassesElement; + "scoped-basic": HTMLScopedBasicElement; + "scoped-basic-root": HTMLScopedBasicRootElement; + "scoped-conditional": HTMLScopedConditionalElement; + "scoped-slot-append-and-prepend": HTMLScopedSlotAppendAndPrependElement; + "scoped-slot-assigned-methods": HTMLScopedSlotAssignedMethodsElement; + "scoped-slot-child-insert-adjacent": HTMLScopedSlotChildInsertAdjacentElement; + "scoped-slot-children": HTMLScopedSlotChildrenElement; + "scoped-slot-insertbefore": HTMLScopedSlotInsertbeforeElement; + "scoped-slot-insertion-order-after-interaction": HTMLScopedSlotInsertionOrderAfterInteractionElement; + "scoped-slot-slotchange": HTMLScopedSlotSlotchangeElement; + "scoped-slot-slotchange-wrap": HTMLScopedSlotSlotchangeWrapElement; + "scoped-ssr-child-cmp": HTMLScopedSsrChildCmpElement; + "scoped-ssr-parent-cmp": HTMLScopedSsrParentCmpElement; + "shadow-dom-array": HTMLShadowDomArrayElement; + "shadow-dom-array-root": HTMLShadowDomArrayRootElement; + "shadow-dom-basic": HTMLShadowDomBasicElement; + "shadow-dom-basic-root": HTMLShadowDomBasicRootElement; + "shadow-dom-mode": HTMLShadowDomModeElement; + "shadow-dom-slot-nested": HTMLShadowDomSlotNestedElement; + "shadow-dom-slot-nested-root": HTMLShadowDomSlotNestedRootElement; + "shadow-ssr-child-cmp": HTMLShadowSsrChildCmpElement; + "shadow-ssr-parent-cmp": HTMLShadowSsrParentCmpElement; + "slot-array-basic": HTMLSlotArrayBasicElement; + "slot-array-complex": HTMLSlotArrayComplexElement; + "slot-array-complex-root": HTMLSlotArrayComplexRootElement; + "slot-array-top": HTMLSlotArrayTopElement; + "slot-basic": HTMLSlotBasicElement; + "slot-basic-order": HTMLSlotBasicOrderElement; + "slot-basic-order-root": HTMLSlotBasicOrderRootElement; + "slot-basic-root": HTMLSlotBasicRootElement; + "slot-children-root": HTMLSlotChildrenRootElement; + "slot-conditional-rendering": HTMLSlotConditionalRenderingElement; + "slot-dynamic-name-change-scoped": HTMLSlotDynamicNameChangeScopedElement; + "slot-dynamic-name-change-shadow": HTMLSlotDynamicNameChangeShadowElement; + "slot-dynamic-scoped-list": HTMLSlotDynamicScopedListElement; + "slot-dynamic-shadow-list": HTMLSlotDynamicShadowListElement; + "slot-dynamic-wrapper": HTMLSlotDynamicWrapperElement; + "slot-dynamic-wrapper-root": HTMLSlotDynamicWrapperRootElement; + "slot-fallback": HTMLSlotFallbackElement; + "slot-fallback-root": HTMLSlotFallbackRootElement; + "slot-forward-child-fallback": HTMLSlotForwardChildFallbackElement; + "slot-forward-root": HTMLSlotForwardRootElement; + "slot-hide-content-open": HTMLSlotHideContentOpenElement; + "slot-hide-content-scoped": HTMLSlotHideContentScopedElement; + "slot-html": HTMLSlotHtmlElement; + "slot-light-dom-content": HTMLSlotLightDomContentElement; + "slot-light-dom-root": HTMLSlotLightDomRootElement; + "slot-light-list": HTMLSlotLightListElement; + "slot-light-scoped-list": HTMLSlotLightScopedListElement; + "slot-list-light-root": HTMLSlotListLightRootElement; + "slot-list-light-scoped-root": HTMLSlotListLightScopedRootElement; + "slot-map-order": HTMLSlotMapOrderElement; + "slot-map-order-root": HTMLSlotMapOrderRootElement; + "slot-nested-default-order-child": HTMLSlotNestedDefaultOrderChildElement; + "slot-nested-default-order-parent": HTMLSlotNestedDefaultOrderParentElement; + "slot-nested-dynamic-child": HTMLSlotNestedDynamicChildElement; + "slot-nested-dynamic-parent": HTMLSlotNestedDynamicParentElement; + "slot-nested-dynamic-wrapper": HTMLSlotNestedDynamicWrapperElement; + "slot-nested-order-child": HTMLSlotNestedOrderChildElement; + "slot-nested-order-parent": HTMLSlotNestedOrderParentElement; + "slot-ng-if": HTMLSlotNgIfElement; + "slot-no-default": HTMLSlotNoDefaultElement; + "slot-parent-tag-change": HTMLSlotParentTagChangeElement; + "slot-parent-tag-change-root": HTMLSlotParentTagChangeRootElement; + "slot-reorder": HTMLSlotReorderElement; + "slot-reorder-root": HTMLSlotReorderRootElement; + "slot-replace-wrapper": HTMLSlotReplaceWrapperElement; + "slot-replace-wrapper-root": HTMLSlotReplaceWrapperRootElement; + "slotted-css": HTMLSlottedCssElement; + "slow-ssr-prop": HTMLSlowSsrPropElement; + "ssr-order-cmp": HTMLSsrOrderCmpElement; + "ssr-order-wrap-cmp": HTMLSsrOrderWrapCmpElement; + "ssr-shadow-cmp": HTMLSsrShadowCmpElement; + "static-decorated-members": HTMLStaticDecoratedMembersElement; + "static-members": HTMLStaticMembersElement; + "static-members-separate-export": HTMLStaticMembersSeparateExportElement; + "static-members-separate-initializer": HTMLStaticMembersSeparateInitializerElement; + "static-styles": HTMLStaticStylesElement; + "stencil-sibling": HTMLStencilSiblingElement; + "svg-attr": HTMLSvgAttrElement; + "svg-class": HTMLSvgClassElement; + "tag-3d-component": HTMLTag3dComponentElement; + "tag-88": HTMLTag88Element; + "test-svg": HTMLTestSvgElement; + "text-content-patch-scoped": HTMLTextContentPatchScopedElement; + "text-content-patch-scoped-with-slot": HTMLTextContentPatchScopedWithSlotElement; + "ts-target-props": HTMLTsTargetPropsElement; + "watch-native-attributes": HTMLWatchNativeAttributesElement; + "watch-native-attributes-no-members": HTMLWatchNativeAttributesNoMembersElement; + "wrap-ssr-shadow-cmp": HTMLWrapSsrShadowCmpElement; + } +} +declare namespace LocalJSX { + interface AppRoot { + } + interface AsyncRerender { + } + interface AttributeBasic { + /** + * @default 'my-custom-attr' + */ + "customAttr"?: string; + /** + * @default 'getter' + */ + "getter"?: string; + /** + * @default 'multiWord' + */ + "multiWord"?: string; + /** + * @default 'single' + */ + "single"?: string; + } + interface AttributeBasicRoot { + } + interface AttributeBoolean { + "boolState"?: boolean; + "noreflect"?: boolean; + "strState"?: string; + } + interface AttributeBooleanRoot { + } + interface AttributeComplex { + /** + * @default true + */ + "bool0"?: boolean; + "bool1"?: boolean; + "bool2"?: boolean; + /** + * @default 1 + */ + "nu0"?: number; + "nu1"?: number; + "nu2"?: SomeTypes.Number; + "obj"?: string; + /** + * @default 'hello' + */ + "str0"?: string; + "str1"?: string; + "str2"?: SomeTypes.String; + } + interface AttributeHost { + } + interface AttributeHtmlRoot { + "anyAttr"?: any; + "nuAttr"?: number; + "strAttr"?: string; + } + interface BadSharedJsx { + } + interface BuildData { + } + interface ChildReflectNanAttribute { + "val"?: number; + } + interface ChildWithReflection { + "val"?: number | any; + } + interface CmpA { + } + interface CmpAvatar { + } + interface CmpB { + } + interface CmpC { + } + interface CmpClientScoped { + } + interface CmpClientShadow { + } + interface CmpD { + /** + * @default '' + */ + "uniqueId"?: string; + } + interface CmpLabel { + } + interface CmpLabelWithSlotSibling { + } + interface CmpLevel1 { + } + interface CmpLevel2 { + } + interface CmpLevel3 { + } + interface CmpScopedA { + } + interface CmpScopedB { + } + interface CmpSlottedParentnode { + } + interface CmpTextBlue { + } + interface CmpTextGreen { + } + interface ComplexProperties { + /** + * map objects + */ + "baz"?: Map; + /** + * basic object + */ + "foo"?: { bar: string; loo: number[]; qux: { quux: symbol } }; + /** + * infinity + */ + "grault"?: typeof Infinity; + /** + * basic array + */ + "kidsNames"?: string[]; + /** + * set objects + */ + "quux"?: Set; + /** + * null + */ + "waldo"?: null; + } + interface ComputedPropertiesPropDecorator { + /** + * @default 'no' + */ + "first"?: string; + /** + * @default 'content' + */ + "last"?: string; + /** + * @default '' + */ + "middle"?: string; + } + interface ComputedPropertiesPropDecoratorReflect { + /** + * @default 'no' + */ + "first"?: string; + /** + * @default 'content' + */ + "last"?: string; + /** + * @default '' + */ + "middle"?: string; + } + interface ComputedPropertiesStateDecorator { + } + interface ComputedPropertiesWatchDecorator { + /** + * @default 'no' + */ + "first"?: string; + /** + * @default 'content' + */ + "last"?: string; + } + interface ConditionalBasic { + } + interface ConditionalRerender { + } + interface ConditionalRerenderRoot { + } + interface CssCmp { + } + interface CssVariablesNoEncapsulation { + } + interface CssVariablesShadowDom { + } + interface CustomElementChild { + } + interface CustomElementChildDifferentNameThanClass { + } + interface CustomElementNestedChild { + } + interface CustomElementRoot { + } + interface CustomElementRootDifferentNameThanClass { + } + interface CustomElementsDelegatesFocus { + } + interface CustomElementsHierarchyLifecycleChild { + } + interface CustomElementsHierarchyLifecycleParent { + } + interface CustomElementsNoDelegatesFocus { + } + interface CustomEventRoot { + } + interface CustomSvgElement { + } + interface DelegatesFocus { + } + interface DomReattach { + /** + * @default 0 + */ + "didLoad"?: number; + /** + * @default 0 + */ + "didUnload"?: number; + /** + * @default 0 + */ + "willLoad"?: number; + } + interface DomReattachClone { + } + interface DomReattachCloneDeepSlot { + } + interface DomReattachCloneHost { + } + interface DsdCmp { + } + interface DynamicCssVariable { + } + interface DynamicImport { + } + interface Es5AddclassSvg { + } + interface EsmImport { + "onSomeEvent"?: (event: EsmImportCustomEvent) => void; + /** + * @default 0 + */ + "propVal"?: number; + } + interface EventBasic { + "onTestEvent"?: (event: EventBasicCustomEvent) => void; + } + interface EventCustomType { + "onTestEvent"?: (event: EventCustomTypeCustomEvent) => void; + } + interface EventListenerCapture { + } + interface EventReRegister { + } + interface ExtendedCmp { + /** + * @default 'ExtendedCmp text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface ExtendsCmpCmp { + /** + * @default 'default text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface ExtendsExternal { + /** + * @default 'default text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface ExtendsMixin { + /** + * @default 'default text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } + interface ExternalImportA { + } + interface ExternalImportB { + } + interface ExternalImportC { + } + interface FactoryJsx { + } + interface FormAssociated { + } + interface FormAssociatedPropCheck { + "disabled"?: boolean; + } + interface GlobalStyles { + } + interface HostAttrOverride { + } + interface ImageImport { + } + interface ImportAliasing { + "onMyEvent"?: (event: ImportAliasingCustomEvent) => void; + "user"?: string; + } + interface InitCssRoot { + } + interface InputBasicRoot { + "value"?: string; + } + interface IonChild { + } + interface IonHost { + } + interface IonParent { + } + interface IonRadio { + /** + * The name of the control, which is submitted with the form data. + * @default this.inputId + */ + "name"?: string; + /** + * Emitted when the radio button loses focus. + */ + "onIonBlur"?: (event: IonRadioCustomEvent) => void; + /** + * Emitted when the radio button has focus. + */ + "onIonFocus"?: (event: IonRadioCustomEvent) => void; + /** + * the value of the radio. + */ + "value"?: any | null; + } + interface IonRadioGroup { + /** + * If `true`, the radios can be deselected. + * @default false + */ + "allowEmptySelection"?: boolean; + /** + * This property allows developers to specify a custom function or property name for comparing objects when determining the selected option in the ion-radio-group. When not specified, the default behavior will use strict equality (===) for comparison. + */ + "compareWith"?: string | RadioGroupCompareFn | null; + /** + * The error text to display at the top of the radio group. + */ + "errorText"?: string; + /** + * The helper text to display at the top of the radio group. + */ + "helperText"?: string; + /** + * The name of the control, which is submitted with the form data. + * @default this.inputId + */ + "name"?: string; + /** + * Emitted when the value has changed. This event will not emit when programmatically setting the `value` property. + */ + "onIonChange"?: (event: IonRadioGroupCustomEvent) => void; + /** + * Emitted when the `value` property has changed. This is used to ensure that `ion-radio` can respond to any value property changes from the group. + */ + "onIonValueChange"?: (event: IonRadioGroupCustomEvent) => void; + /** + * the value of the radio group. + */ + "value"?: any | null; + } + interface JsonBasic { + } + interface KeyReorder { + } + interface LifecycleAsyncA { + } + interface LifecycleAsyncB { + "onLifecycleLoad"?: (event: LifecycleAsyncBCustomEvent) => void; + "onLifecycleUpdate"?: (event: LifecycleAsyncBCustomEvent) => void; + /** + * @default '' + */ + "value"?: string; + } + interface LifecycleAsyncC { + "onLifecycleLoad"?: (event: LifecycleAsyncCCustomEvent) => void; + "onLifecycleUpdate"?: (event: LifecycleAsyncCCustomEvent) => void; + /** + * @default '' + */ + "value"?: string; + } + interface LifecycleBasicA { + } + interface LifecycleBasicB { + "onLifecycleLoad"?: (event: LifecycleBasicBCustomEvent) => void; + "onLifecycleUpdate"?: (event: LifecycleBasicBCustomEvent) => void; + /** + * @default '' + */ + "value"?: string; + } + interface LifecycleBasicC { + "onLifecycleLoad"?: (event: LifecycleBasicCCustomEvent) => void; + "onLifecycleUpdate"?: (event: LifecycleBasicCCustomEvent) => void; + /** + * @default '' + */ + "value"?: string; + } + interface LifecycleNestedA { + } + interface LifecycleNestedB { + } + interface LifecycleNestedC { + } + interface LifecycleUnloadA { + } + interface LifecycleUnloadB { + } + interface LifecycleUnloadRoot { + } + interface LifecycleUpdateA { + } + interface LifecycleUpdateB { + /** + * @default 0 + */ + "value"?: number; + } + interface LifecycleUpdateC { + /** + * @default 0 + */ + "value"?: number; + } + interface ListenJsx { + } + interface ListenJsxRoot { + } + interface ListenReattach { + } + interface ListenWindow { + } + interface MultipleStylesCmp { + } + interface MyComponent { + } + interface NoDelegatesFocus { + } + interface NodeResolution { + } + interface PageList { + /** + * @default null + */ + "lastPage"?: number | null; + } + interface PageListItem { + /** + * Set the number to be displayed. + * @default false + */ + "active"?: boolean; + /** + * Set the number to be displayed. + */ + "label": number; + } + interface ParentReflectNanAttribute { + } + interface ParentWithReflectChild { + } + interface PartSsrShadowCmp { + "selected"?: boolean; + } + interface PartWrapSsrShadowCmp { + "selected"?: boolean; + } + interface RadioGroupBlurTest { + } + interface RefAttrOrder { + } + interface ReflectNanAttribute { + "val"?: number; + } + interface ReflectNanAttributeHyphen { + "valNum"?: number; + } + interface ReflectToAttr { + /** + * @default false + */ + "bool"?: boolean; + /** + * @default false + */ + "disabled"?: boolean; + "dynamicNu"?: number; + "dynamicStr"?: string; + /** + * @default 2 + */ + "nu"?: number; + /** + * @default null + */ + "null"?: string | null; + /** + * @default true + */ + "otherBool"?: boolean; + /** + * @default 'single' + */ + "str"?: string; + "undef"?: string; + } + interface RemoveChildPatch { + } + interface ReparentStyleNoVars { + } + interface ReparentStyleWithVars { + } + interface SassCmp { + } + interface ScopedAddRemoveClasses { + "items"?: Item[]; + "selectedItems"?: number[]; + } + interface ScopedBasic { + } + interface ScopedBasicRoot { + } + interface ScopedConditional { + /** + * @default false + */ + "renderHello"?: boolean; + } + interface ScopedSlotAppendAndPrepend { + } + interface ScopedSlotAssignedMethods { + } + interface ScopedSlotChildInsertAdjacent { + } + interface ScopedSlotChildren { + } + interface ScopedSlotInsertbefore { + } + interface ScopedSlotInsertionOrderAfterInteraction { + } + interface ScopedSlotSlotchange { + /** + * @default [] + */ + "slotEventCatch"?: { event: Event; assignedNodes: Node[] }[]; + } + interface ScopedSlotSlotchangeWrap { + /** + * @default false + */ + "swapSlotContent"?: boolean; + } + interface ScopedSsrChildCmp { + } + interface ScopedSsrParentCmp { + } + interface ShadowDomArray { + /** + * @default [] + */ + "values"?: number[]; + } + interface ShadowDomArrayRoot { + } + interface ShadowDomBasic { + } + interface ShadowDomBasicRoot { + } + interface ShadowDomMode { + /** + * The mode determines which platform styles to use. + */ + "colormode"?: string; + } + interface ShadowDomSlotNested { + "i"?: number; + } + interface ShadowDomSlotNestedRoot { + } + interface ShadowSsrChildCmp { + } + interface ShadowSsrParentCmp { + } + interface SlotArrayBasic { + } + interface SlotArrayComplex { + } + interface SlotArrayComplexRoot { + } + interface SlotArrayTop { + } + interface SlotBasic { + } + interface SlotBasicOrder { + } + interface SlotBasicOrderRoot { + } + interface SlotBasicRoot { + } + interface SlotChildrenRoot { + } + interface SlotConditionalRendering { + } + interface SlotDynamicNameChangeScoped { + /** + * @default 'greeting' + */ + "slotName"?: string; + } + interface SlotDynamicNameChangeShadow { + /** + * @default 'greeting' + */ + "slotName"?: string; + } + interface SlotDynamicScopedList { + /** + * @default [] + */ + "items"?: Array; + } + interface SlotDynamicShadowList { + /** + * @default [] + */ + "items"?: Array; + } + interface SlotDynamicWrapper { + /** + * @default 'section' + */ + "tag"?: string; + } + interface SlotDynamicWrapperRoot { + } + interface SlotFallback { + /** + * @default 0 + */ + "inc"?: number; + } + interface SlotFallbackRoot { + } + interface SlotForwardChildFallback { + "label"?: string; + } + interface SlotForwardRoot { + "label"?: string; + } + interface SlotHideContentOpen { + /** + * @default false + */ + "enabled"?: boolean; + } + interface SlotHideContentScoped { + /** + * @default false + */ + "enabled"?: boolean; + } + interface SlotHtml { + /** + * @default 0 + */ + "inc"?: number; + } + interface SlotLightDomContent { + } + interface SlotLightDomRoot { + } + interface SlotLightList { + } + interface SlotLightScopedList { + } + interface SlotListLightRoot { + /** + * @default [] + */ + "items"?: string[]; + } + interface SlotListLightScopedRoot { + /** + * @default [] + */ + "items"?: string[]; + } + interface SlotMapOrder { + } + interface SlotMapOrderRoot { + } + interface SlotNestedDefaultOrderChild { + "state"?: boolean; + } + interface SlotNestedDefaultOrderParent { + } + interface SlotNestedDynamicChild { + } + interface SlotNestedDynamicParent { + } + interface SlotNestedDynamicWrapper { + } + interface SlotNestedOrderChild { + } + interface SlotNestedOrderParent { + } + interface SlotNgIf { + } + interface SlotNoDefault { + } + interface SlotParentTagChange { + /** + * @default 'p' + */ + "element"?: string; + } + interface SlotParentTagChangeRoot { + /** + * @default 'p' + */ + "element"?: string; + } + interface SlotReorder { + /** + * @default false + */ + "reordered"?: boolean; + } + interface SlotReorderRoot { + } + interface SlotReplaceWrapper { + "href"?: string; + } + interface SlotReplaceWrapperRoot { + } + interface SlottedCss { + } + interface SlowSsrProp { + /** + * @default [] + */ + "anArray"?: never[]; + } + interface SsrOrderCmp { + } + interface SsrOrderWrapCmp { + } + interface SsrShadowCmp { + "selected"?: boolean; + } + interface StaticDecoratedMembers { + } + interface StaticMembers { + } + interface StaticMembersSeparateExport { + } + interface StaticMembersSeparateInitializer { + } + interface StaticStyles { + } + interface StencilSibling { + } + interface SvgAttr { + } + interface SvgClass { + } + interface Tag3dComponent { + } + interface Tag88 { + } + interface TestSvg { + } + interface TextContentPatchScoped { + } + interface TextContentPatchScopedWithSlot { + } + interface TsTargetProps { + /** + * @default 'basicProp' + */ + "basicProp"?: string; + "decoratedGetterSetterProp"?: number; + /** + * @default -10 + */ + "decoratedProp"?: number; + "dynamicLifecycle"?: string[]; + } + interface WatchNativeAttributes { + } + interface WatchNativeAttributesNoMembers { + } + interface WrapSsrShadowCmp { + "selected"?: boolean; } interface IntrinsicElements { "app-root": AppRoot; + "async-rerender": AsyncRerender; + "attribute-basic": AttributeBasic; + "attribute-basic-root": AttributeBasicRoot; + "attribute-boolean": AttributeBoolean; + "attribute-boolean-root": AttributeBooleanRoot; + "attribute-complex": AttributeComplex; + "attribute-host": AttributeHost; + "attribute-html-root": AttributeHtmlRoot; + "bad-shared-jsx": BadSharedJsx; + "build-data": BuildData; + "child-reflect-nan-attribute": ChildReflectNanAttribute; + "child-with-reflection": ChildWithReflection; "cmp-a": CmpA; + "cmp-avatar": CmpAvatar; "cmp-b": CmpB; "cmp-c": CmpC; "cmp-client-scoped": CmpClientScoped; "cmp-client-shadow": CmpClientShadow; "cmp-d": CmpD; + "cmp-label": CmpLabel; + "cmp-label-with-slot-sibling": CmpLabelWithSlotSibling; + "cmp-level-1": CmpLevel1; + "cmp-level-2": CmpLevel2; + "cmp-level-3": CmpLevel3; "cmp-scoped-a": CmpScopedA; "cmp-scoped-b": CmpScopedB; + "cmp-slotted-parentnode": CmpSlottedParentnode; "cmp-text-blue": CmpTextBlue; "cmp-text-green": CmpTextGreen; + "complex-properties": ComplexProperties; + "computed-properties-prop-decorator": ComputedPropertiesPropDecorator; + "computed-properties-prop-decorator-reflect": ComputedPropertiesPropDecoratorReflect; + "computed-properties-state-decorator": ComputedPropertiesStateDecorator; + "computed-properties-watch-decorator": ComputedPropertiesWatchDecorator; + "conditional-basic": ConditionalBasic; + "conditional-rerender": ConditionalRerender; + "conditional-rerender-root": ConditionalRerenderRoot; + "css-cmp": CssCmp; + "css-variables-no-encapsulation": CssVariablesNoEncapsulation; + "css-variables-shadow-dom": CssVariablesShadowDom; + "custom-element-child": CustomElementChild; + "custom-element-child-different-name-than-class": CustomElementChildDifferentNameThanClass; + "custom-element-nested-child": CustomElementNestedChild; + "custom-element-root": CustomElementRoot; + "custom-element-root-different-name-than-class": CustomElementRootDifferentNameThanClass; + "custom-elements-delegates-focus": CustomElementsDelegatesFocus; + "custom-elements-hierarchy-lifecycle-child": CustomElementsHierarchyLifecycleChild; + "custom-elements-hierarchy-lifecycle-parent": CustomElementsHierarchyLifecycleParent; + "custom-elements-no-delegates-focus": CustomElementsNoDelegatesFocus; + "custom-event-root": CustomEventRoot; + "custom-svg-element": CustomSvgElement; + "delegates-focus": DelegatesFocus; + "dom-reattach": DomReattach; + "dom-reattach-clone": DomReattachClone; + "dom-reattach-clone-deep-slot": DomReattachCloneDeepSlot; + "dom-reattach-clone-host": DomReattachCloneHost; + "dsd-cmp": DsdCmp; + "dynamic-css-variable": DynamicCssVariable; + "dynamic-import": DynamicImport; + "es5-addclass-svg": Es5AddclassSvg; + "esm-import": EsmImport; + "event-basic": EventBasic; + "event-custom-type": EventCustomType; + "event-listener-capture": EventListenerCapture; + "event-re-register": EventReRegister; + "extended-cmp": ExtendedCmp; + "extends-cmp-cmp": ExtendsCmpCmp; + "extends-external": ExtendsExternal; + "extends-mixin": ExtendsMixin; + "external-import-a": ExternalImportA; + "external-import-b": ExternalImportB; + "external-import-c": ExternalImportC; + "factory-jsx": FactoryJsx; + "form-associated": FormAssociated; + "form-associated-prop-check": FormAssociatedPropCheck; + "global-styles": GlobalStyles; + "host-attr-override": HostAttrOverride; + "image-import": ImageImport; + "import-aliasing": ImportAliasing; + "init-css-root": InitCssRoot; + "input-basic-root": InputBasicRoot; + "ion-child": IonChild; + "ion-host": IonHost; + "ion-parent": IonParent; + "ion-radio": IonRadio; + "ion-radio-group": IonRadioGroup; + "json-basic": JsonBasic; + "key-reorder": KeyReorder; + "lifecycle-async-a": LifecycleAsyncA; + "lifecycle-async-b": LifecycleAsyncB; + "lifecycle-async-c": LifecycleAsyncC; + "lifecycle-basic-a": LifecycleBasicA; + "lifecycle-basic-b": LifecycleBasicB; + "lifecycle-basic-c": LifecycleBasicC; + "lifecycle-nested-a": LifecycleNestedA; + "lifecycle-nested-b": LifecycleNestedB; + "lifecycle-nested-c": LifecycleNestedC; + "lifecycle-unload-a": LifecycleUnloadA; + "lifecycle-unload-b": LifecycleUnloadB; + "lifecycle-unload-root": LifecycleUnloadRoot; + "lifecycle-update-a": LifecycleUpdateA; + "lifecycle-update-b": LifecycleUpdateB; + "lifecycle-update-c": LifecycleUpdateC; + "listen-jsx": ListenJsx; + "listen-jsx-root": ListenJsxRoot; + "listen-reattach": ListenReattach; + "listen-window": ListenWindow; + "multiple-styles-cmp": MultipleStylesCmp; + "my-component": MyComponent; + "no-delegates-focus": NoDelegatesFocus; + "node-resolution": NodeResolution; + "page-list": PageList; + "page-list-item": PageListItem; + "parent-reflect-nan-attribute": ParentReflectNanAttribute; + "parent-with-reflect-child": ParentWithReflectChild; + "part-ssr-shadow-cmp": PartSsrShadowCmp; + "part-wrap-ssr-shadow-cmp": PartWrapSsrShadowCmp; + "radio-group-blur-test": RadioGroupBlurTest; + "ref-attr-order": RefAttrOrder; + "reflect-nan-attribute": ReflectNanAttribute; + "reflect-nan-attribute-hyphen": ReflectNanAttributeHyphen; + "reflect-to-attr": ReflectToAttr; + "remove-child-patch": RemoveChildPatch; + "reparent-style-no-vars": ReparentStyleNoVars; + "reparent-style-with-vars": ReparentStyleWithVars; + "sass-cmp": SassCmp; + "scoped-add-remove-classes": ScopedAddRemoveClasses; + "scoped-basic": ScopedBasic; + "scoped-basic-root": ScopedBasicRoot; + "scoped-conditional": ScopedConditional; + "scoped-slot-append-and-prepend": ScopedSlotAppendAndPrepend; + "scoped-slot-assigned-methods": ScopedSlotAssignedMethods; + "scoped-slot-child-insert-adjacent": ScopedSlotChildInsertAdjacent; + "scoped-slot-children": ScopedSlotChildren; + "scoped-slot-insertbefore": ScopedSlotInsertbefore; + "scoped-slot-insertion-order-after-interaction": ScopedSlotInsertionOrderAfterInteraction; + "scoped-slot-slotchange": ScopedSlotSlotchange; + "scoped-slot-slotchange-wrap": ScopedSlotSlotchangeWrap; + "scoped-ssr-child-cmp": ScopedSsrChildCmp; + "scoped-ssr-parent-cmp": ScopedSsrParentCmp; + "shadow-dom-array": ShadowDomArray; + "shadow-dom-array-root": ShadowDomArrayRoot; + "shadow-dom-basic": ShadowDomBasic; + "shadow-dom-basic-root": ShadowDomBasicRoot; + "shadow-dom-mode": ShadowDomMode; + "shadow-dom-slot-nested": ShadowDomSlotNested; + "shadow-dom-slot-nested-root": ShadowDomSlotNestedRoot; + "shadow-ssr-child-cmp": ShadowSsrChildCmp; + "shadow-ssr-parent-cmp": ShadowSsrParentCmp; + "slot-array-basic": SlotArrayBasic; + "slot-array-complex": SlotArrayComplex; + "slot-array-complex-root": SlotArrayComplexRoot; + "slot-array-top": SlotArrayTop; + "slot-basic": SlotBasic; + "slot-basic-order": SlotBasicOrder; + "slot-basic-order-root": SlotBasicOrderRoot; + "slot-basic-root": SlotBasicRoot; + "slot-children-root": SlotChildrenRoot; + "slot-conditional-rendering": SlotConditionalRendering; + "slot-dynamic-name-change-scoped": SlotDynamicNameChangeScoped; + "slot-dynamic-name-change-shadow": SlotDynamicNameChangeShadow; + "slot-dynamic-scoped-list": SlotDynamicScopedList; + "slot-dynamic-shadow-list": SlotDynamicShadowList; + "slot-dynamic-wrapper": SlotDynamicWrapper; + "slot-dynamic-wrapper-root": SlotDynamicWrapperRoot; + "slot-fallback": SlotFallback; + "slot-fallback-root": SlotFallbackRoot; + "slot-forward-child-fallback": SlotForwardChildFallback; + "slot-forward-root": SlotForwardRoot; + "slot-hide-content-open": SlotHideContentOpen; + "slot-hide-content-scoped": SlotHideContentScoped; + "slot-html": SlotHtml; + "slot-light-dom-content": SlotLightDomContent; + "slot-light-dom-root": SlotLightDomRoot; + "slot-light-list": SlotLightList; + "slot-light-scoped-list": SlotLightScopedList; + "slot-list-light-root": SlotListLightRoot; + "slot-list-light-scoped-root": SlotListLightScopedRoot; + "slot-map-order": SlotMapOrder; + "slot-map-order-root": SlotMapOrderRoot; + "slot-nested-default-order-child": SlotNestedDefaultOrderChild; + "slot-nested-default-order-parent": SlotNestedDefaultOrderParent; + "slot-nested-dynamic-child": SlotNestedDynamicChild; + "slot-nested-dynamic-parent": SlotNestedDynamicParent; + "slot-nested-dynamic-wrapper": SlotNestedDynamicWrapper; + "slot-nested-order-child": SlotNestedOrderChild; + "slot-nested-order-parent": SlotNestedOrderParent; + "slot-ng-if": SlotNgIf; + "slot-no-default": SlotNoDefault; + "slot-parent-tag-change": SlotParentTagChange; + "slot-parent-tag-change-root": SlotParentTagChangeRoot; + "slot-reorder": SlotReorder; + "slot-reorder-root": SlotReorderRoot; + "slot-replace-wrapper": SlotReplaceWrapper; + "slot-replace-wrapper-root": SlotReplaceWrapperRoot; + "slotted-css": SlottedCss; + "slow-ssr-prop": SlowSsrProp; + "ssr-order-cmp": SsrOrderCmp; + "ssr-order-wrap-cmp": SsrOrderWrapCmp; + "ssr-shadow-cmp": SsrShadowCmp; + "static-decorated-members": StaticDecoratedMembers; + "static-members": StaticMembers; + "static-members-separate-export": StaticMembersSeparateExport; + "static-members-separate-initializer": StaticMembersSeparateInitializer; + "static-styles": StaticStyles; + "stencil-sibling": StencilSibling; + "svg-attr": SvgAttr; + "svg-class": SvgClass; + "tag-3d-component": Tag3dComponent; + "tag-88": Tag88; "test-svg": TestSvg; + "text-content-patch-scoped": TextContentPatchScoped; + "text-content-patch-scoped-with-slot": TextContentPatchScopedWithSlot; + "ts-target-props": TsTargetProps; + "watch-native-attributes": WatchNativeAttributes; + "watch-native-attributes-no-members": WatchNativeAttributesNoMembers; + "wrap-ssr-shadow-cmp": WrapSsrShadowCmp; } } export { LocalJSX as JSX }; @@ -172,17 +3558,223 @@ declare module "@stencil/core" { export namespace JSX { interface IntrinsicElements { "app-root": LocalJSX.AppRoot & JSXBase.HTMLAttributes; + "async-rerender": LocalJSX.AsyncRerender & JSXBase.HTMLAttributes; + "attribute-basic": LocalJSX.AttributeBasic & JSXBase.HTMLAttributes; + "attribute-basic-root": LocalJSX.AttributeBasicRoot & JSXBase.HTMLAttributes; + "attribute-boolean": LocalJSX.AttributeBoolean & JSXBase.HTMLAttributes; + "attribute-boolean-root": LocalJSX.AttributeBooleanRoot & JSXBase.HTMLAttributes; + "attribute-complex": LocalJSX.AttributeComplex & JSXBase.HTMLAttributes; + "attribute-host": LocalJSX.AttributeHost & JSXBase.HTMLAttributes; + "attribute-html-root": LocalJSX.AttributeHtmlRoot & JSXBase.HTMLAttributes; + "bad-shared-jsx": LocalJSX.BadSharedJsx & JSXBase.HTMLAttributes; + "build-data": LocalJSX.BuildData & JSXBase.HTMLAttributes; + "child-reflect-nan-attribute": LocalJSX.ChildReflectNanAttribute & JSXBase.HTMLAttributes; + "child-with-reflection": LocalJSX.ChildWithReflection & JSXBase.HTMLAttributes; "cmp-a": LocalJSX.CmpA & JSXBase.HTMLAttributes; + "cmp-avatar": LocalJSX.CmpAvatar & JSXBase.HTMLAttributes; "cmp-b": LocalJSX.CmpB & JSXBase.HTMLAttributes; "cmp-c": LocalJSX.CmpC & JSXBase.HTMLAttributes; "cmp-client-scoped": LocalJSX.CmpClientScoped & JSXBase.HTMLAttributes; "cmp-client-shadow": LocalJSX.CmpClientShadow & JSXBase.HTMLAttributes; "cmp-d": LocalJSX.CmpD & JSXBase.HTMLAttributes; + "cmp-label": LocalJSX.CmpLabel & JSXBase.HTMLAttributes; + "cmp-label-with-slot-sibling": LocalJSX.CmpLabelWithSlotSibling & JSXBase.HTMLAttributes; + "cmp-level-1": LocalJSX.CmpLevel1 & JSXBase.HTMLAttributes; + "cmp-level-2": LocalJSX.CmpLevel2 & JSXBase.HTMLAttributes; + "cmp-level-3": LocalJSX.CmpLevel3 & JSXBase.HTMLAttributes; "cmp-scoped-a": LocalJSX.CmpScopedA & JSXBase.HTMLAttributes; "cmp-scoped-b": LocalJSX.CmpScopedB & JSXBase.HTMLAttributes; + "cmp-slotted-parentnode": LocalJSX.CmpSlottedParentnode & JSXBase.HTMLAttributes; "cmp-text-blue": LocalJSX.CmpTextBlue & JSXBase.HTMLAttributes; "cmp-text-green": LocalJSX.CmpTextGreen & JSXBase.HTMLAttributes; + "complex-properties": LocalJSX.ComplexProperties & JSXBase.HTMLAttributes; + "computed-properties-prop-decorator": LocalJSX.ComputedPropertiesPropDecorator & JSXBase.HTMLAttributes; + "computed-properties-prop-decorator-reflect": LocalJSX.ComputedPropertiesPropDecoratorReflect & JSXBase.HTMLAttributes; + "computed-properties-state-decorator": LocalJSX.ComputedPropertiesStateDecorator & JSXBase.HTMLAttributes; + "computed-properties-watch-decorator": LocalJSX.ComputedPropertiesWatchDecorator & JSXBase.HTMLAttributes; + "conditional-basic": LocalJSX.ConditionalBasic & JSXBase.HTMLAttributes; + "conditional-rerender": LocalJSX.ConditionalRerender & JSXBase.HTMLAttributes; + "conditional-rerender-root": LocalJSX.ConditionalRerenderRoot & JSXBase.HTMLAttributes; + "css-cmp": LocalJSX.CssCmp & JSXBase.HTMLAttributes; + "css-variables-no-encapsulation": LocalJSX.CssVariablesNoEncapsulation & JSXBase.HTMLAttributes; + "css-variables-shadow-dom": LocalJSX.CssVariablesShadowDom & JSXBase.HTMLAttributes; + "custom-element-child": LocalJSX.CustomElementChild & JSXBase.HTMLAttributes; + "custom-element-child-different-name-than-class": LocalJSX.CustomElementChildDifferentNameThanClass & JSXBase.HTMLAttributes; + "custom-element-nested-child": LocalJSX.CustomElementNestedChild & JSXBase.HTMLAttributes; + "custom-element-root": LocalJSX.CustomElementRoot & JSXBase.HTMLAttributes; + "custom-element-root-different-name-than-class": LocalJSX.CustomElementRootDifferentNameThanClass & JSXBase.HTMLAttributes; + "custom-elements-delegates-focus": LocalJSX.CustomElementsDelegatesFocus & JSXBase.HTMLAttributes; + "custom-elements-hierarchy-lifecycle-child": LocalJSX.CustomElementsHierarchyLifecycleChild & JSXBase.HTMLAttributes; + "custom-elements-hierarchy-lifecycle-parent": LocalJSX.CustomElementsHierarchyLifecycleParent & JSXBase.HTMLAttributes; + "custom-elements-no-delegates-focus": LocalJSX.CustomElementsNoDelegatesFocus & JSXBase.HTMLAttributes; + "custom-event-root": LocalJSX.CustomEventRoot & JSXBase.HTMLAttributes; + "custom-svg-element": LocalJSX.CustomSvgElement & JSXBase.HTMLAttributes; + "delegates-focus": LocalJSX.DelegatesFocus & JSXBase.HTMLAttributes; + "dom-reattach": LocalJSX.DomReattach & JSXBase.HTMLAttributes; + "dom-reattach-clone": LocalJSX.DomReattachClone & JSXBase.HTMLAttributes; + "dom-reattach-clone-deep-slot": LocalJSX.DomReattachCloneDeepSlot & JSXBase.HTMLAttributes; + "dom-reattach-clone-host": LocalJSX.DomReattachCloneHost & JSXBase.HTMLAttributes; + "dsd-cmp": LocalJSX.DsdCmp & JSXBase.HTMLAttributes; + "dynamic-css-variable": LocalJSX.DynamicCssVariable & JSXBase.HTMLAttributes; + "dynamic-import": LocalJSX.DynamicImport & JSXBase.HTMLAttributes; + "es5-addclass-svg": LocalJSX.Es5AddclassSvg & JSXBase.HTMLAttributes; + "esm-import": LocalJSX.EsmImport & JSXBase.HTMLAttributes; + "event-basic": LocalJSX.EventBasic & JSXBase.HTMLAttributes; + "event-custom-type": LocalJSX.EventCustomType & JSXBase.HTMLAttributes; + "event-listener-capture": LocalJSX.EventListenerCapture & JSXBase.HTMLAttributes; + "event-re-register": LocalJSX.EventReRegister & JSXBase.HTMLAttributes; + "extended-cmp": LocalJSX.ExtendedCmp & JSXBase.HTMLAttributes; + "extends-cmp-cmp": LocalJSX.ExtendsCmpCmp & JSXBase.HTMLAttributes; + "extends-external": LocalJSX.ExtendsExternal & JSXBase.HTMLAttributes; + "extends-mixin": LocalJSX.ExtendsMixin & JSXBase.HTMLAttributes; + "external-import-a": LocalJSX.ExternalImportA & JSXBase.HTMLAttributes; + "external-import-b": LocalJSX.ExternalImportB & JSXBase.HTMLAttributes; + "external-import-c": LocalJSX.ExternalImportC & JSXBase.HTMLAttributes; + "factory-jsx": LocalJSX.FactoryJsx & JSXBase.HTMLAttributes; + "form-associated": LocalJSX.FormAssociated & JSXBase.HTMLAttributes; + "form-associated-prop-check": LocalJSX.FormAssociatedPropCheck & JSXBase.HTMLAttributes; + "global-styles": LocalJSX.GlobalStyles & JSXBase.HTMLAttributes; + "host-attr-override": LocalJSX.HostAttrOverride & JSXBase.HTMLAttributes; + "image-import": LocalJSX.ImageImport & JSXBase.HTMLAttributes; + "import-aliasing": LocalJSX.ImportAliasing & JSXBase.HTMLAttributes; + "init-css-root": LocalJSX.InitCssRoot & JSXBase.HTMLAttributes; + "input-basic-root": LocalJSX.InputBasicRoot & JSXBase.HTMLAttributes; + "ion-child": LocalJSX.IonChild & JSXBase.HTMLAttributes; + "ion-host": LocalJSX.IonHost & JSXBase.HTMLAttributes; + "ion-parent": LocalJSX.IonParent & JSXBase.HTMLAttributes; + "ion-radio": LocalJSX.IonRadio & JSXBase.HTMLAttributes; + "ion-radio-group": LocalJSX.IonRadioGroup & JSXBase.HTMLAttributes; + "json-basic": LocalJSX.JsonBasic & JSXBase.HTMLAttributes; + "key-reorder": LocalJSX.KeyReorder & JSXBase.HTMLAttributes; + "lifecycle-async-a": LocalJSX.LifecycleAsyncA & JSXBase.HTMLAttributes; + "lifecycle-async-b": LocalJSX.LifecycleAsyncB & JSXBase.HTMLAttributes; + "lifecycle-async-c": LocalJSX.LifecycleAsyncC & JSXBase.HTMLAttributes; + "lifecycle-basic-a": LocalJSX.LifecycleBasicA & JSXBase.HTMLAttributes; + "lifecycle-basic-b": LocalJSX.LifecycleBasicB & JSXBase.HTMLAttributes; + "lifecycle-basic-c": LocalJSX.LifecycleBasicC & JSXBase.HTMLAttributes; + "lifecycle-nested-a": LocalJSX.LifecycleNestedA & JSXBase.HTMLAttributes; + "lifecycle-nested-b": LocalJSX.LifecycleNestedB & JSXBase.HTMLAttributes; + "lifecycle-nested-c": LocalJSX.LifecycleNestedC & JSXBase.HTMLAttributes; + "lifecycle-unload-a": LocalJSX.LifecycleUnloadA & JSXBase.HTMLAttributes; + "lifecycle-unload-b": LocalJSX.LifecycleUnloadB & JSXBase.HTMLAttributes; + "lifecycle-unload-root": LocalJSX.LifecycleUnloadRoot & JSXBase.HTMLAttributes; + "lifecycle-update-a": LocalJSX.LifecycleUpdateA & JSXBase.HTMLAttributes; + "lifecycle-update-b": LocalJSX.LifecycleUpdateB & JSXBase.HTMLAttributes; + "lifecycle-update-c": LocalJSX.LifecycleUpdateC & JSXBase.HTMLAttributes; + "listen-jsx": LocalJSX.ListenJsx & JSXBase.HTMLAttributes; + "listen-jsx-root": LocalJSX.ListenJsxRoot & JSXBase.HTMLAttributes; + "listen-reattach": LocalJSX.ListenReattach & JSXBase.HTMLAttributes; + "listen-window": LocalJSX.ListenWindow & JSXBase.HTMLAttributes; + "multiple-styles-cmp": LocalJSX.MultipleStylesCmp & JSXBase.HTMLAttributes; + "my-component": LocalJSX.MyComponent & JSXBase.HTMLAttributes; + "no-delegates-focus": LocalJSX.NoDelegatesFocus & JSXBase.HTMLAttributes; + "node-resolution": LocalJSX.NodeResolution & JSXBase.HTMLAttributes; + "page-list": LocalJSX.PageList & JSXBase.HTMLAttributes; + "page-list-item": LocalJSX.PageListItem & JSXBase.HTMLAttributes; + "parent-reflect-nan-attribute": LocalJSX.ParentReflectNanAttribute & JSXBase.HTMLAttributes; + "parent-with-reflect-child": LocalJSX.ParentWithReflectChild & JSXBase.HTMLAttributes; + "part-ssr-shadow-cmp": LocalJSX.PartSsrShadowCmp & JSXBase.HTMLAttributes; + "part-wrap-ssr-shadow-cmp": LocalJSX.PartWrapSsrShadowCmp & JSXBase.HTMLAttributes; + "radio-group-blur-test": LocalJSX.RadioGroupBlurTest & JSXBase.HTMLAttributes; + "ref-attr-order": LocalJSX.RefAttrOrder & JSXBase.HTMLAttributes; + "reflect-nan-attribute": LocalJSX.ReflectNanAttribute & JSXBase.HTMLAttributes; + "reflect-nan-attribute-hyphen": LocalJSX.ReflectNanAttributeHyphen & JSXBase.HTMLAttributes; + "reflect-to-attr": LocalJSX.ReflectToAttr & JSXBase.HTMLAttributes; + "remove-child-patch": LocalJSX.RemoveChildPatch & JSXBase.HTMLAttributes; + "reparent-style-no-vars": LocalJSX.ReparentStyleNoVars & JSXBase.HTMLAttributes; + "reparent-style-with-vars": LocalJSX.ReparentStyleWithVars & JSXBase.HTMLAttributes; + "sass-cmp": LocalJSX.SassCmp & JSXBase.HTMLAttributes; + "scoped-add-remove-classes": LocalJSX.ScopedAddRemoveClasses & JSXBase.HTMLAttributes; + "scoped-basic": LocalJSX.ScopedBasic & JSXBase.HTMLAttributes; + "scoped-basic-root": LocalJSX.ScopedBasicRoot & JSXBase.HTMLAttributes; + "scoped-conditional": LocalJSX.ScopedConditional & JSXBase.HTMLAttributes; + "scoped-slot-append-and-prepend": LocalJSX.ScopedSlotAppendAndPrepend & JSXBase.HTMLAttributes; + "scoped-slot-assigned-methods": LocalJSX.ScopedSlotAssignedMethods & JSXBase.HTMLAttributes; + "scoped-slot-child-insert-adjacent": LocalJSX.ScopedSlotChildInsertAdjacent & JSXBase.HTMLAttributes; + "scoped-slot-children": LocalJSX.ScopedSlotChildren & JSXBase.HTMLAttributes; + "scoped-slot-insertbefore": LocalJSX.ScopedSlotInsertbefore & JSXBase.HTMLAttributes; + "scoped-slot-insertion-order-after-interaction": LocalJSX.ScopedSlotInsertionOrderAfterInteraction & JSXBase.HTMLAttributes; + "scoped-slot-slotchange": LocalJSX.ScopedSlotSlotchange & JSXBase.HTMLAttributes; + "scoped-slot-slotchange-wrap": LocalJSX.ScopedSlotSlotchangeWrap & JSXBase.HTMLAttributes; + "scoped-ssr-child-cmp": LocalJSX.ScopedSsrChildCmp & JSXBase.HTMLAttributes; + "scoped-ssr-parent-cmp": LocalJSX.ScopedSsrParentCmp & JSXBase.HTMLAttributes; + "shadow-dom-array": LocalJSX.ShadowDomArray & JSXBase.HTMLAttributes; + "shadow-dom-array-root": LocalJSX.ShadowDomArrayRoot & JSXBase.HTMLAttributes; + "shadow-dom-basic": LocalJSX.ShadowDomBasic & JSXBase.HTMLAttributes; + "shadow-dom-basic-root": LocalJSX.ShadowDomBasicRoot & JSXBase.HTMLAttributes; + "shadow-dom-mode": LocalJSX.ShadowDomMode & JSXBase.HTMLAttributes; + "shadow-dom-slot-nested": LocalJSX.ShadowDomSlotNested & JSXBase.HTMLAttributes; + "shadow-dom-slot-nested-root": LocalJSX.ShadowDomSlotNestedRoot & JSXBase.HTMLAttributes; + "shadow-ssr-child-cmp": LocalJSX.ShadowSsrChildCmp & JSXBase.HTMLAttributes; + "shadow-ssr-parent-cmp": LocalJSX.ShadowSsrParentCmp & JSXBase.HTMLAttributes; + "slot-array-basic": LocalJSX.SlotArrayBasic & JSXBase.HTMLAttributes; + "slot-array-complex": LocalJSX.SlotArrayComplex & JSXBase.HTMLAttributes; + "slot-array-complex-root": LocalJSX.SlotArrayComplexRoot & JSXBase.HTMLAttributes; + "slot-array-top": LocalJSX.SlotArrayTop & JSXBase.HTMLAttributes; + "slot-basic": LocalJSX.SlotBasic & JSXBase.HTMLAttributes; + "slot-basic-order": LocalJSX.SlotBasicOrder & JSXBase.HTMLAttributes; + "slot-basic-order-root": LocalJSX.SlotBasicOrderRoot & JSXBase.HTMLAttributes; + "slot-basic-root": LocalJSX.SlotBasicRoot & JSXBase.HTMLAttributes; + "slot-children-root": LocalJSX.SlotChildrenRoot & JSXBase.HTMLAttributes; + "slot-conditional-rendering": LocalJSX.SlotConditionalRendering & JSXBase.HTMLAttributes; + "slot-dynamic-name-change-scoped": LocalJSX.SlotDynamicNameChangeScoped & JSXBase.HTMLAttributes; + "slot-dynamic-name-change-shadow": LocalJSX.SlotDynamicNameChangeShadow & JSXBase.HTMLAttributes; + "slot-dynamic-scoped-list": LocalJSX.SlotDynamicScopedList & JSXBase.HTMLAttributes; + "slot-dynamic-shadow-list": LocalJSX.SlotDynamicShadowList & JSXBase.HTMLAttributes; + "slot-dynamic-wrapper": LocalJSX.SlotDynamicWrapper & JSXBase.HTMLAttributes; + "slot-dynamic-wrapper-root": LocalJSX.SlotDynamicWrapperRoot & JSXBase.HTMLAttributes; + "slot-fallback": LocalJSX.SlotFallback & JSXBase.HTMLAttributes; + "slot-fallback-root": LocalJSX.SlotFallbackRoot & JSXBase.HTMLAttributes; + "slot-forward-child-fallback": LocalJSX.SlotForwardChildFallback & JSXBase.HTMLAttributes; + "slot-forward-root": LocalJSX.SlotForwardRoot & JSXBase.HTMLAttributes; + "slot-hide-content-open": LocalJSX.SlotHideContentOpen & JSXBase.HTMLAttributes; + "slot-hide-content-scoped": LocalJSX.SlotHideContentScoped & JSXBase.HTMLAttributes; + "slot-html": LocalJSX.SlotHtml & JSXBase.HTMLAttributes; + "slot-light-dom-content": LocalJSX.SlotLightDomContent & JSXBase.HTMLAttributes; + "slot-light-dom-root": LocalJSX.SlotLightDomRoot & JSXBase.HTMLAttributes; + "slot-light-list": LocalJSX.SlotLightList & JSXBase.HTMLAttributes; + "slot-light-scoped-list": LocalJSX.SlotLightScopedList & JSXBase.HTMLAttributes; + "slot-list-light-root": LocalJSX.SlotListLightRoot & JSXBase.HTMLAttributes; + "slot-list-light-scoped-root": LocalJSX.SlotListLightScopedRoot & JSXBase.HTMLAttributes; + "slot-map-order": LocalJSX.SlotMapOrder & JSXBase.HTMLAttributes; + "slot-map-order-root": LocalJSX.SlotMapOrderRoot & JSXBase.HTMLAttributes; + "slot-nested-default-order-child": LocalJSX.SlotNestedDefaultOrderChild & JSXBase.HTMLAttributes; + "slot-nested-default-order-parent": LocalJSX.SlotNestedDefaultOrderParent & JSXBase.HTMLAttributes; + "slot-nested-dynamic-child": LocalJSX.SlotNestedDynamicChild & JSXBase.HTMLAttributes; + "slot-nested-dynamic-parent": LocalJSX.SlotNestedDynamicParent & JSXBase.HTMLAttributes; + "slot-nested-dynamic-wrapper": LocalJSX.SlotNestedDynamicWrapper & JSXBase.HTMLAttributes; + "slot-nested-order-child": LocalJSX.SlotNestedOrderChild & JSXBase.HTMLAttributes; + "slot-nested-order-parent": LocalJSX.SlotNestedOrderParent & JSXBase.HTMLAttributes; + "slot-ng-if": LocalJSX.SlotNgIf & JSXBase.HTMLAttributes; + "slot-no-default": LocalJSX.SlotNoDefault & JSXBase.HTMLAttributes; + "slot-parent-tag-change": LocalJSX.SlotParentTagChange & JSXBase.HTMLAttributes; + "slot-parent-tag-change-root": LocalJSX.SlotParentTagChangeRoot & JSXBase.HTMLAttributes; + "slot-reorder": LocalJSX.SlotReorder & JSXBase.HTMLAttributes; + "slot-reorder-root": LocalJSX.SlotReorderRoot & JSXBase.HTMLAttributes; + "slot-replace-wrapper": LocalJSX.SlotReplaceWrapper & JSXBase.HTMLAttributes; + "slot-replace-wrapper-root": LocalJSX.SlotReplaceWrapperRoot & JSXBase.HTMLAttributes; + "slotted-css": LocalJSX.SlottedCss & JSXBase.HTMLAttributes; + "slow-ssr-prop": LocalJSX.SlowSsrProp & JSXBase.HTMLAttributes; + "ssr-order-cmp": LocalJSX.SsrOrderCmp & JSXBase.HTMLAttributes; + "ssr-order-wrap-cmp": LocalJSX.SsrOrderWrapCmp & JSXBase.HTMLAttributes; + "ssr-shadow-cmp": LocalJSX.SsrShadowCmp & JSXBase.HTMLAttributes; + "static-decorated-members": LocalJSX.StaticDecoratedMembers & JSXBase.HTMLAttributes; + "static-members": LocalJSX.StaticMembers & JSXBase.HTMLAttributes; + "static-members-separate-export": LocalJSX.StaticMembersSeparateExport & JSXBase.HTMLAttributes; + "static-members-separate-initializer": LocalJSX.StaticMembersSeparateInitializer & JSXBase.HTMLAttributes; + "static-styles": LocalJSX.StaticStyles & JSXBase.HTMLAttributes; + "stencil-sibling": LocalJSX.StencilSibling & JSXBase.HTMLAttributes; + "svg-attr": LocalJSX.SvgAttr & JSXBase.HTMLAttributes; + "svg-class": LocalJSX.SvgClass & JSXBase.HTMLAttributes; + "tag-3d-component": LocalJSX.Tag3dComponent & JSXBase.HTMLAttributes; + "tag-88": LocalJSX.Tag88 & JSXBase.HTMLAttributes; "test-svg": LocalJSX.TestSvg & JSXBase.HTMLAttributes; + "text-content-patch-scoped": LocalJSX.TextContentPatchScoped & JSXBase.HTMLAttributes; + "text-content-patch-scoped-with-slot": LocalJSX.TextContentPatchScopedWithSlot & JSXBase.HTMLAttributes; + "ts-target-props": LocalJSX.TsTargetProps & JSXBase.HTMLAttributes; + "watch-native-attributes": LocalJSX.WatchNativeAttributes & JSXBase.HTMLAttributes; + "watch-native-attributes-no-members": LocalJSX.WatchNativeAttributesNoMembers & JSXBase.HTMLAttributes; + "wrap-ssr-shadow-cmp": LocalJSX.WrapSsrShadowCmp & JSXBase.HTMLAttributes; } } } diff --git a/test/wdio/test-sibling/package.json b/test/wdio/test-sibling/package.json index d13aef3eda1..a65c8fafb9b 100644 --- a/test/wdio/test-sibling/package.json +++ b/test/wdio/test-sibling/package.json @@ -5,7 +5,7 @@ "collection": "dist/collection/collection-manifest.json", "types": "dist/types/components.d.ts", "exports": { - "./dist/collection/sibling-extended/sibling-extended.js": { + "./dist/collection/sibling-extended/sibling-extended": { "import": "./dist/collection/sibling-extended/sibling-extended.js", "types": "./dist/types/sibling-extended/sibling-extended.d.ts" } diff --git a/test/wdio/ts-target/extends-external/cmp.tsx b/test/wdio/ts-target/extends-external/cmp.tsx index 6a5279469d1..4608fd8c942 100644 --- a/test/wdio/ts-target/extends-external/cmp.tsx +++ b/test/wdio/ts-target/extends-external/cmp.tsx @@ -1,5 +1,5 @@ import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; -import { SiblingExtended } from 'test-sibling/dist/collection/sibling-extended/sibling-extended.js'; +import { SiblingExtended } from 'test-sibling/dist/collection/sibling-extended/sibling-extended'; @Component({ tag: 'extends-external', diff --git a/test/wdio/tsconfig-es2022.json b/test/wdio/tsconfig-es2022.json index b84f282a580..6e8e2387abb 100644 --- a/test/wdio/tsconfig-es2022.json +++ b/test/wdio/tsconfig-es2022.json @@ -1,7 +1,8 @@ { "extends": "./tsconfig-stencil.json", "compilerOptions": { - "target": "es2022" + "target": "es2022", + "useDefineForClassFields": true }, "include": ["ts-target"], "exclude": ["ts-target/**/*.test.tsx", "ts-target/**/*.test.ts"] diff --git a/test/wdio/wdio.conf.ts b/test/wdio/wdio.conf.ts index 76e4ecb3f3b..60e342ba835 100644 --- a/test/wdio/wdio.conf.ts +++ b/test/wdio/wdio.conf.ts @@ -69,9 +69,7 @@ export const config: WebdriverIO.Config = { // specs: [['./**/*.test.tsx', './**/*.test.ts']], // Patterns to exclude. - exclude: [ - // 'path/to/excluded/files' - ], + exclude: ['./node_modules/**'], // // ============ // Capabilities From b2ea3529d2f99060626223b77413fd2230fd0801 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Fri, 29 Aug 2025 16:49:23 +0100 Subject: [PATCH 13/16] chore: fix tests? --- package.json | 2 +- test/wdio/global.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 290ba984287..35e9a0e09df 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,7 @@ "test.dist": "npm run ts scripts/index.ts -- --validate-build", "test.end-to-end": "cd test/end-to-end && npm ci && npm test && npm run test.dist", "test.jest": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js", - "test.type-tests": "cd ./test/wdio && npm install && npm run build.main && cd ../../ && tsc -p test/type-tests/tsconfig.json", + "test.type-tests": "cd ./test/wdio && npm install && npm run build.test-sibling && npm run build.main && cd ../../ && tsc -p test/type-tests/tsconfig.json", "test.wdio": "cd test/wdio && npm ci && npm run test", "test.wdio.testOnly": "cd test/wdio && npm ci && npm run wdio", "test.prod": "npm run test.dist && npm run test.end-to-end && npm run test.jest && npm run test.wdio && npm run test.testing && npm run test.analysis", diff --git a/test/wdio/global.ts b/test/wdio/global.ts index 5a173dd23b9..70ede1da5e5 100644 --- a/test/wdio/global.ts +++ b/test/wdio/global.ts @@ -4,7 +4,7 @@ import 'test-sibling'; import { setMode } from '@stencil/core'; // @ts-expect-error - tests that rollup warnings don't break the build -import { setAssetPath } from '@stencil/core/internal/client/index'; +import { setAssetPath } from '@stencil/core/internal/client/index/something'; const globalScript = () => { setMode((elm) => { From 1aac7f6aa2651327f35e0f679ed6933ab71ea3e5 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Fri, 29 Aug 2025 17:01:27 +0100 Subject: [PATCH 14/16] chore: try this --- test/wdio/global.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/wdio/global.ts b/test/wdio/global.ts index 70ede1da5e5..9c7b244f21e 100644 --- a/test/wdio/global.ts +++ b/test/wdio/global.ts @@ -3,8 +3,8 @@ // `stencil-sibling` test suite import 'test-sibling'; import { setMode } from '@stencil/core'; -// @ts-expect-error - tests that rollup warnings don't break the build -import { setAssetPath } from '@stencil/core/internal/client/index/something'; +// @ts-ignore +import { setAssetPath } from '@stencil/core/internal/client/index'; const globalScript = () => { setMode((elm) => { From 79f3abbe27d904a7223508e9fd95c9116ada144a Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Fri, 29 Aug 2025 17:08:30 +0100 Subject: [PATCH 15/16] chore: silly me --- test/wdio/src/components.d.ts | 3772 +-------------------------------- 1 file changed, 90 insertions(+), 3682 deletions(-) diff --git a/test/wdio/src/components.d.ts b/test/wdio/src/components.d.ts index 360870c90c6..ef4d1b33a89 100644 --- a/test/wdio/src/components.d.ts +++ b/test/wdio/src/components.d.ts @@ -5,90 +5,11 @@ * It contains typing information for all components that exist in this project. */ import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; -import { SomeTypes } from "../util.js"; -import { TestEventDetail } from "../event-custom-type/cmp"; -import { RadioGroupCompareFn } from "../radio-group-blur/test-radio-group"; -import { Item } from "../scoped-add-remove-classes/cmp"; -export { SomeTypes } from "../util.js"; -export { TestEventDetail } from "../event-custom-type/cmp"; -export { RadioGroupCompareFn } from "../radio-group-blur/test-radio-group"; -export { Item } from "../scoped-add-remove-classes/cmp"; export namespace Components { interface AppRoot { } - interface AsyncRerender { - } - interface AttributeBasic { - /** - * @default 'my-custom-attr' - */ - "customAttr": string; - /** - * @default 'getter' - */ - "getter": string; - /** - * @default 'multiWord' - */ - "multiWord": string; - /** - * @default 'single' - */ - "single": string; - } - interface AttributeBasicRoot { - } - interface AttributeBoolean { - "boolState"?: boolean; - "noreflect"?: boolean; - "strState"?: string; - } - interface AttributeBooleanRoot { - "toggleState": () => Promise; - } - interface AttributeComplex { - /** - * @default true - */ - "bool0": boolean; - "bool1"?: boolean; - "bool2"?: boolean; - "getInstance": () => Promise; - /** - * @default 1 - */ - "nu0": number; - "nu1"?: number; - "nu2"?: SomeTypes.Number; - "obj": string; - /** - * @default 'hello' - */ - "str0": string; - "str1"?: string; - "str2"?: SomeTypes.String; - } - interface AttributeHost { - } - interface AttributeHtmlRoot { - "anyAttr"?: any; - "nuAttr"?: number; - "strAttr"?: string; - } - interface BadSharedJsx { - } - interface BuildData { - } - interface ChildReflectNanAttribute { - "val": number; - } - interface ChildWithReflection { - "val": number | any; - } interface CmpA { } - interface CmpAvatar { - } interface CmpB { } interface CmpC { @@ -103,3454 +24,147 @@ export namespace Components { */ "uniqueId": string; } - interface CmpLabel { - } - interface CmpLabelWithSlotSibling { - } - interface CmpLevel1 { - } - interface CmpLevel2 { - } - interface CmpLevel3 { - } interface CmpScopedA { } interface CmpScopedB { } - interface CmpSlottedParentnode { - } interface CmpTextBlue { } interface CmpTextGreen { } - interface ComplexProperties { - /** - * map objects - */ - "baz": Map; - /** - * basic object - */ - "foo": { bar: string; loo: number[]; qux: { quux: symbol } }; - /** - * infinity - */ - "grault": typeof Infinity; - /** - * basic array - */ - "kidsNames": string[]; - /** - * set objects - */ - "quux": Set; - /** - * null - */ - "waldo": null; - } - interface ComputedPropertiesPropDecorator { - /** - * @default 'no' - */ - "first": string; - /** - * @default 'content' - */ - "last": string; - /** - * @default '' - */ - "middle": string; - } - interface ComputedPropertiesPropDecoratorReflect { - /** - * @default 'no' - */ - "first": string; - /** - * @default 'content' - */ - "last": string; - /** - * @default '' - */ - "middle": string; - } - interface ComputedPropertiesStateDecorator { - "changeStates": () => Promise; - } - interface ComputedPropertiesWatchDecorator { - /** - * @default 'no' - */ - "first": string; - /** - * @default 'content' - */ - "last": string; - } - interface ConditionalBasic { - } - interface ConditionalRerender { - } - interface ConditionalRerenderRoot { - } - interface CssCmp { - } - interface CssVariablesNoEncapsulation { - } - interface CssVariablesShadowDom { - } - interface CustomElementChild { - } - interface CustomElementChildDifferentNameThanClass { - } - interface CustomElementNestedChild { - } - interface CustomElementRoot { - } - interface CustomElementRootDifferentNameThanClass { - } - interface CustomElementsDelegatesFocus { - } - interface CustomElementsHierarchyLifecycleChild { - } - interface CustomElementsHierarchyLifecycleParent { - } - interface CustomElementsNoDelegatesFocus { - } - interface CustomEventRoot { - } - interface CustomSvgElement { - } - interface DelegatesFocus { - } - interface DomReattach { - /** - * @default 0 - */ - "didLoad": number; - /** - * @default 0 - */ - "didUnload": number; - /** - * @default 0 - */ - "willLoad": number; - } - interface DomReattachClone { - } - interface DomReattachCloneDeepSlot { - } - interface DomReattachCloneHost { - } - interface DsdCmp { - } - interface DynamicCssVariable { - } - interface DynamicImport { - "update": () => Promise; - } - interface Es5AddclassSvg { - } - interface EsmImport { - /** - * @default 0 - */ - "propVal": number; - "someMethod": () => Promise; - } - interface EventBasic { - } - interface EventCustomType { - } - interface EventListenerCapture { - } - interface EventReRegister { - } - interface ExtendedCmp { - "method1": () => Promise; - "method2": () => Promise; - /** - * @default 'ExtendedCmp text' - */ - "prop1": string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2": string; - } - interface ExtendsCmpCmp { - "method1": () => Promise; - "method2": () => Promise; - /** - * @default 'default text' - */ - "prop1": string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2": string; - } - interface ExtendsExternal { - "method1": () => Promise; - "method2": () => Promise; - /** - * @default 'default text' - */ - "prop1": string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2": string; - } - interface ExtendsMixin { - "method1": () => Promise; - "method2": () => Promise; - /** - * @default 'default text' - */ - "prop1": string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2": string; - } - interface ExternalImportA { - } - interface ExternalImportB { - } - interface ExternalImportC { - } - interface FactoryJsx { - } - interface FormAssociated { + interface TestSvg { } - interface FormAssociatedPropCheck { - "disabled": boolean; +} +declare global { + interface HTMLAppRootElement extends Components.AppRoot, HTMLStencilElement { } - interface GlobalStyles { + var HTMLAppRootElement: { + prototype: HTMLAppRootElement; + new (): HTMLAppRootElement; + }; + interface HTMLCmpAElement extends Components.CmpA, HTMLStencilElement { } - interface HostAttrOverride { + var HTMLCmpAElement: { + prototype: HTMLCmpAElement; + new (): HTMLCmpAElement; + }; + interface HTMLCmpBElement extends Components.CmpB, HTMLStencilElement { } - interface ImageImport { + var HTMLCmpBElement: { + prototype: HTMLCmpBElement; + new (): HTMLCmpBElement; + }; + interface HTMLCmpCElement extends Components.CmpC, HTMLStencilElement { } - interface ImportAliasing { - "myMethod": () => Promise; - "user": string; + var HTMLCmpCElement: { + prototype: HTMLCmpCElement; + new (): HTMLCmpCElement; + }; + interface HTMLCmpClientScopedElement extends Components.CmpClientScoped, HTMLStencilElement { } - interface InitCssRoot { + var HTMLCmpClientScopedElement: { + prototype: HTMLCmpClientScopedElement; + new (): HTMLCmpClientScopedElement; + }; + interface HTMLCmpClientShadowElement extends Components.CmpClientShadow, HTMLStencilElement { } - interface InputBasicRoot { - "value"?: string; + var HTMLCmpClientShadowElement: { + prototype: HTMLCmpClientShadowElement; + new (): HTMLCmpClientShadowElement; + }; + interface HTMLCmpDElement extends Components.CmpD, HTMLStencilElement { } - interface IonChild { + var HTMLCmpDElement: { + prototype: HTMLCmpDElement; + new (): HTMLCmpDElement; + }; + interface HTMLCmpScopedAElement extends Components.CmpScopedA, HTMLStencilElement { } - interface IonHost { + var HTMLCmpScopedAElement: { + prototype: HTMLCmpScopedAElement; + new (): HTMLCmpScopedAElement; + }; + interface HTMLCmpScopedBElement extends Components.CmpScopedB, HTMLStencilElement { } - interface IonParent { + var HTMLCmpScopedBElement: { + prototype: HTMLCmpScopedBElement; + new (): HTMLCmpScopedBElement; + }; + interface HTMLCmpTextBlueElement extends Components.CmpTextBlue, HTMLStencilElement { } - interface IonRadio { - /** - * The name of the control, which is submitted with the form data. - * @default this.inputId - */ - "name": string; - "setButtonTabindex": (value: number) => Promise; - "setFocus": (ev?: globalThis.Event) => Promise; - /** - * the value of the radio. - */ - "value"?: any | null; + var HTMLCmpTextBlueElement: { + prototype: HTMLCmpTextBlueElement; + new (): HTMLCmpTextBlueElement; + }; + interface HTMLCmpTextGreenElement extends Components.CmpTextGreen, HTMLStencilElement { } - interface IonRadioGroup { - /** - * If `true`, the radios can be deselected. - * @default false - */ - "allowEmptySelection": boolean; - /** - * This property allows developers to specify a custom function or property name for comparing objects when determining the selected option in the ion-radio-group. When not specified, the default behavior will use strict equality (===) for comparison. - */ - "compareWith"?: string | RadioGroupCompareFn | null; - /** - * The error text to display at the top of the radio group. - */ - "errorText"?: string; - /** - * The helper text to display at the top of the radio group. - */ - "helperText"?: string; - /** - * The name of the control, which is submitted with the form data. - * @default this.inputId - */ - "name": string; - /** - * the value of the radio group. - */ - "value"?: any | null; + var HTMLCmpTextGreenElement: { + prototype: HTMLCmpTextGreenElement; + new (): HTMLCmpTextGreenElement; + }; + interface HTMLTestSvgElement extends Components.TestSvg, HTMLStencilElement { } - interface JsonBasic { + var HTMLTestSvgElement: { + prototype: HTMLTestSvgElement; + new (): HTMLTestSvgElement; + }; + interface HTMLElementTagNameMap { + "app-root": HTMLAppRootElement; + "cmp-a": HTMLCmpAElement; + "cmp-b": HTMLCmpBElement; + "cmp-c": HTMLCmpCElement; + "cmp-client-scoped": HTMLCmpClientScopedElement; + "cmp-client-shadow": HTMLCmpClientShadowElement; + "cmp-d": HTMLCmpDElement; + "cmp-scoped-a": HTMLCmpScopedAElement; + "cmp-scoped-b": HTMLCmpScopedBElement; + "cmp-text-blue": HTMLCmpTextBlueElement; + "cmp-text-green": HTMLCmpTextGreenElement; + "test-svg": HTMLTestSvgElement; } - interface KeyReorder { +} +declare namespace LocalJSX { + interface AppRoot { } - interface LifecycleAsyncA { + interface CmpA { } - interface LifecycleAsyncB { - /** - * @default '' - */ - "value": string; + interface CmpB { } - interface LifecycleAsyncC { - /** - * @default '' - */ - "value": string; + interface CmpC { } - interface LifecycleBasicA { + interface CmpClientScoped { } - interface LifecycleBasicB { - /** - * @default '' - */ - "value": string; + interface CmpClientShadow { } - interface LifecycleBasicC { + interface CmpD { /** * @default '' */ - "value": string; - } - interface LifecycleNestedA { - } - interface LifecycleNestedB { - } - interface LifecycleNestedC { - } - interface LifecycleUnloadA { - } - interface LifecycleUnloadB { - } - interface LifecycleUnloadRoot { + "uniqueId"?: string; } - interface LifecycleUpdateA { + interface CmpScopedA { } - interface LifecycleUpdateB { - /** - * @default 0 - */ - "value": number; + interface CmpScopedB { } - interface LifecycleUpdateC { - /** - * @default 0 - */ - "value": number; + interface CmpTextBlue { } - interface ListenJsx { - } - interface ListenJsxRoot { - } - interface ListenReattach { - } - interface ListenWindow { - } - interface MultipleStylesCmp { - } - interface MyComponent { - } - interface NoDelegatesFocus { - } - interface NodeResolution { - } - interface PageList { - /** - * @default null - */ - "lastPage": number | null; - } - interface PageListItem { - /** - * Set the number to be displayed. - * @default false - */ - "active": boolean; - /** - * Set the number to be displayed. - */ - "label": number; - } - interface ParentReflectNanAttribute { - } - interface ParentWithReflectChild { - } - interface PartSsrShadowCmp { - "selected": boolean; - } - interface PartWrapSsrShadowCmp { - "selected": boolean; - } - interface RadioGroupBlurTest { - } - interface RefAttrOrder { - } - interface ReflectNanAttribute { - "val": number; - } - interface ReflectNanAttributeHyphen { - "valNum": number; - } - interface ReflectToAttr { - /** - * @default false - */ - "bool": boolean; - /** - * @default false - */ - "disabled": boolean; - "dynamicNu"?: number; - "dynamicStr"?: string; - /** - * @default 2 - */ - "nu": number; - /** - * @default null - */ - "null": string | null; - /** - * @default true - */ - "otherBool": boolean; - /** - * @default 'single' - */ - "str": string; - "undef"?: string; - } - interface RemoveChildPatch { - } - interface ReparentStyleNoVars { - } - interface ReparentStyleWithVars { - } - interface SassCmp { - } - interface ScopedAddRemoveClasses { - "items": Item[]; - "selectedItems": number[]; - } - interface ScopedBasic { - } - interface ScopedBasicRoot { - } - interface ScopedConditional { - /** - * @default false - */ - "renderHello": boolean; - } - interface ScopedSlotAppendAndPrepend { - } - interface ScopedSlotAssignedMethods { - "getSlotAssignedElements": (opts?: { flatten: boolean; }, getPlainSlot?: boolean) => Promise; - "getSlotAssignedNodes": (opts?: { flatten: boolean; }, getPlainSlot?: boolean) => Promise; - } - interface ScopedSlotChildInsertAdjacent { - } - interface ScopedSlotChildren { - } - interface ScopedSlotInsertbefore { - } - interface ScopedSlotInsertionOrderAfterInteraction { - } - interface ScopedSlotSlotchange { - /** - * @default [] - */ - "slotEventCatch": { event: Event; assignedNodes: Node[] }[]; - } - interface ScopedSlotSlotchangeWrap { - /** - * @default false - */ - "swapSlotContent": boolean; - } - interface ScopedSsrChildCmp { - } - interface ScopedSsrParentCmp { - } - interface ShadowDomArray { - /** - * @default [] - */ - "values": number[]; - } - interface ShadowDomArrayRoot { - } - interface ShadowDomBasic { - } - interface ShadowDomBasicRoot { - } - interface ShadowDomMode { - /** - * The mode determines which platform styles to use. - */ - "colormode"?: string; - } - interface ShadowDomSlotNested { - "i"?: number; - } - interface ShadowDomSlotNestedRoot { - } - interface ShadowSsrChildCmp { - } - interface ShadowSsrParentCmp { - } - interface SlotArrayBasic { - } - interface SlotArrayComplex { - } - interface SlotArrayComplexRoot { - } - interface SlotArrayTop { - } - interface SlotBasic { - } - interface SlotBasicOrder { - } - interface SlotBasicOrderRoot { - } - interface SlotBasicRoot { - } - interface SlotChildrenRoot { - } - interface SlotConditionalRendering { - } - interface SlotDynamicNameChangeScoped { - /** - * @default 'greeting' - */ - "slotName": string; - } - interface SlotDynamicNameChangeShadow { - /** - * @default 'greeting' - */ - "slotName": string; - } - interface SlotDynamicScopedList { - /** - * @default [] - */ - "items": Array; - } - interface SlotDynamicShadowList { - /** - * @default [] - */ - "items": Array; - } - interface SlotDynamicWrapper { - /** - * @default 'section' - */ - "tag": string; - } - interface SlotDynamicWrapperRoot { - } - interface SlotFallback { - /** - * @default 0 - */ - "inc": number; - } - interface SlotFallbackRoot { - } - interface SlotForwardChildFallback { - "label": string; - } - interface SlotForwardRoot { - "label": string; - } - interface SlotHideContentOpen { - /** - * @default false - */ - "enabled": boolean; - } - interface SlotHideContentScoped { - /** - * @default false - */ - "enabled": boolean; - } - interface SlotHtml { - /** - * @default 0 - */ - "inc": number; - } - interface SlotLightDomContent { - } - interface SlotLightDomRoot { - } - interface SlotLightList { - } - interface SlotLightScopedList { - } - interface SlotListLightRoot { - /** - * @default [] - */ - "items": string[]; - } - interface SlotListLightScopedRoot { - /** - * @default [] - */ - "items": string[]; - } - interface SlotMapOrder { - } - interface SlotMapOrderRoot { - } - interface SlotNestedDefaultOrderChild { - "state": boolean; - } - interface SlotNestedDefaultOrderParent { - } - interface SlotNestedDynamicChild { - } - interface SlotNestedDynamicParent { - } - interface SlotNestedDynamicWrapper { - } - interface SlotNestedOrderChild { - } - interface SlotNestedOrderParent { - } - interface SlotNgIf { - } - interface SlotNoDefault { - } - interface SlotParentTagChange { - /** - * @default 'p' - */ - "element": string; - } - interface SlotParentTagChangeRoot { - /** - * @default 'p' - */ - "element": string; - } - interface SlotReorder { - /** - * @default false - */ - "reordered": boolean; - } - interface SlotReorderRoot { - } - interface SlotReplaceWrapper { - "href"?: string; - } - interface SlotReplaceWrapperRoot { - } - interface SlottedCss { - } - interface SlowSsrProp { - /** - * @default [] - */ - "anArray": never[]; - } - interface SsrOrderCmp { - } - interface SsrOrderWrapCmp { - } - interface SsrShadowCmp { - "selected": boolean; - } - interface StaticDecoratedMembers { - } - interface StaticMembers { - } - interface StaticMembersSeparateExport { - } - interface StaticMembersSeparateInitializer { - } - interface StaticStyles { - } - interface StencilSibling { - } - interface SvgAttr { - } - interface SvgClass { - } - interface Tag3dComponent { - } - interface Tag88 { - } - interface TestSvg { - } - interface TextContentPatchScoped { - } - interface TextContentPatchScopedWithSlot { - } - interface TsTargetProps { - /** - * @default 'basicProp' - */ - "basicProp": string; - "decoratedGetterSetterProp": number; - /** - * @default -10 - */ - "decoratedProp": number; - "dynamicLifecycle": string[]; - } - interface WatchNativeAttributes { - } - interface WatchNativeAttributesNoMembers { - } - interface WrapSsrShadowCmp { - "selected": boolean; - } -} -export interface EsmImportCustomEvent extends CustomEvent { - detail: T; - target: HTMLEsmImportElement; -} -export interface EventBasicCustomEvent extends CustomEvent { - detail: T; - target: HTMLEventBasicElement; -} -export interface EventCustomTypeCustomEvent extends CustomEvent { - detail: T; - target: HTMLEventCustomTypeElement; -} -export interface ImportAliasingCustomEvent extends CustomEvent { - detail: T; - target: HTMLImportAliasingElement; -} -export interface IonRadioCustomEvent extends CustomEvent { - detail: T; - target: HTMLIonRadioElement; -} -export interface IonRadioGroupCustomEvent extends CustomEvent { - detail: T; - target: HTMLIonRadioGroupElement; -} -export interface LifecycleAsyncBCustomEvent extends CustomEvent { - detail: T; - target: HTMLLifecycleAsyncBElement; -} -export interface LifecycleAsyncCCustomEvent extends CustomEvent { - detail: T; - target: HTMLLifecycleAsyncCElement; -} -export interface LifecycleBasicBCustomEvent extends CustomEvent { - detail: T; - target: HTMLLifecycleBasicBElement; -} -export interface LifecycleBasicCCustomEvent extends CustomEvent { - detail: T; - target: HTMLLifecycleBasicCElement; -} -declare global { - interface HTMLAppRootElement extends Components.AppRoot, HTMLStencilElement { - } - var HTMLAppRootElement: { - prototype: HTMLAppRootElement; - new (): HTMLAppRootElement; - }; - interface HTMLAsyncRerenderElement extends Components.AsyncRerender, HTMLStencilElement { - } - var HTMLAsyncRerenderElement: { - prototype: HTMLAsyncRerenderElement; - new (): HTMLAsyncRerenderElement; - }; - interface HTMLAttributeBasicElement extends Components.AttributeBasic, HTMLStencilElement { - } - var HTMLAttributeBasicElement: { - prototype: HTMLAttributeBasicElement; - new (): HTMLAttributeBasicElement; - }; - interface HTMLAttributeBasicRootElement extends Components.AttributeBasicRoot, HTMLStencilElement { - } - var HTMLAttributeBasicRootElement: { - prototype: HTMLAttributeBasicRootElement; - new (): HTMLAttributeBasicRootElement; - }; - interface HTMLAttributeBooleanElement extends Components.AttributeBoolean, HTMLStencilElement { - } - var HTMLAttributeBooleanElement: { - prototype: HTMLAttributeBooleanElement; - new (): HTMLAttributeBooleanElement; - }; - interface HTMLAttributeBooleanRootElement extends Components.AttributeBooleanRoot, HTMLStencilElement { - } - var HTMLAttributeBooleanRootElement: { - prototype: HTMLAttributeBooleanRootElement; - new (): HTMLAttributeBooleanRootElement; - }; - interface HTMLAttributeComplexElement extends Components.AttributeComplex, HTMLStencilElement { - } - var HTMLAttributeComplexElement: { - prototype: HTMLAttributeComplexElement; - new (): HTMLAttributeComplexElement; - }; - interface HTMLAttributeHostElement extends Components.AttributeHost, HTMLStencilElement { - } - var HTMLAttributeHostElement: { - prototype: HTMLAttributeHostElement; - new (): HTMLAttributeHostElement; - }; - interface HTMLAttributeHtmlRootElement extends Components.AttributeHtmlRoot, HTMLStencilElement { - } - var HTMLAttributeHtmlRootElement: { - prototype: HTMLAttributeHtmlRootElement; - new (): HTMLAttributeHtmlRootElement; - }; - interface HTMLBadSharedJsxElement extends Components.BadSharedJsx, HTMLStencilElement { - } - var HTMLBadSharedJsxElement: { - prototype: HTMLBadSharedJsxElement; - new (): HTMLBadSharedJsxElement; - }; - interface HTMLBuildDataElement extends Components.BuildData, HTMLStencilElement { - } - var HTMLBuildDataElement: { - prototype: HTMLBuildDataElement; - new (): HTMLBuildDataElement; - }; - interface HTMLChildReflectNanAttributeElement extends Components.ChildReflectNanAttribute, HTMLStencilElement { - } - var HTMLChildReflectNanAttributeElement: { - prototype: HTMLChildReflectNanAttributeElement; - new (): HTMLChildReflectNanAttributeElement; - }; - interface HTMLChildWithReflectionElement extends Components.ChildWithReflection, HTMLStencilElement { - } - var HTMLChildWithReflectionElement: { - prototype: HTMLChildWithReflectionElement; - new (): HTMLChildWithReflectionElement; - }; - interface HTMLCmpAElement extends Components.CmpA, HTMLStencilElement { - } - var HTMLCmpAElement: { - prototype: HTMLCmpAElement; - new (): HTMLCmpAElement; - }; - interface HTMLCmpAvatarElement extends Components.CmpAvatar, HTMLStencilElement { - } - var HTMLCmpAvatarElement: { - prototype: HTMLCmpAvatarElement; - new (): HTMLCmpAvatarElement; - }; - interface HTMLCmpBElement extends Components.CmpB, HTMLStencilElement { - } - var HTMLCmpBElement: { - prototype: HTMLCmpBElement; - new (): HTMLCmpBElement; - }; - interface HTMLCmpCElement extends Components.CmpC, HTMLStencilElement { - } - var HTMLCmpCElement: { - prototype: HTMLCmpCElement; - new (): HTMLCmpCElement; - }; - interface HTMLCmpClientScopedElement extends Components.CmpClientScoped, HTMLStencilElement { - } - var HTMLCmpClientScopedElement: { - prototype: HTMLCmpClientScopedElement; - new (): HTMLCmpClientScopedElement; - }; - interface HTMLCmpClientShadowElement extends Components.CmpClientShadow, HTMLStencilElement { - } - var HTMLCmpClientShadowElement: { - prototype: HTMLCmpClientShadowElement; - new (): HTMLCmpClientShadowElement; - }; - interface HTMLCmpDElement extends Components.CmpD, HTMLStencilElement { - } - var HTMLCmpDElement: { - prototype: HTMLCmpDElement; - new (): HTMLCmpDElement; - }; - interface HTMLCmpLabelElement extends Components.CmpLabel, HTMLStencilElement { - } - var HTMLCmpLabelElement: { - prototype: HTMLCmpLabelElement; - new (): HTMLCmpLabelElement; - }; - interface HTMLCmpLabelWithSlotSiblingElement extends Components.CmpLabelWithSlotSibling, HTMLStencilElement { - } - var HTMLCmpLabelWithSlotSiblingElement: { - prototype: HTMLCmpLabelWithSlotSiblingElement; - new (): HTMLCmpLabelWithSlotSiblingElement; - }; - interface HTMLCmpLevel1Element extends Components.CmpLevel1, HTMLStencilElement { - } - var HTMLCmpLevel1Element: { - prototype: HTMLCmpLevel1Element; - new (): HTMLCmpLevel1Element; - }; - interface HTMLCmpLevel2Element extends Components.CmpLevel2, HTMLStencilElement { - } - var HTMLCmpLevel2Element: { - prototype: HTMLCmpLevel2Element; - new (): HTMLCmpLevel2Element; - }; - interface HTMLCmpLevel3Element extends Components.CmpLevel3, HTMLStencilElement { - } - var HTMLCmpLevel3Element: { - prototype: HTMLCmpLevel3Element; - new (): HTMLCmpLevel3Element; - }; - interface HTMLCmpScopedAElement extends Components.CmpScopedA, HTMLStencilElement { - } - var HTMLCmpScopedAElement: { - prototype: HTMLCmpScopedAElement; - new (): HTMLCmpScopedAElement; - }; - interface HTMLCmpScopedBElement extends Components.CmpScopedB, HTMLStencilElement { - } - var HTMLCmpScopedBElement: { - prototype: HTMLCmpScopedBElement; - new (): HTMLCmpScopedBElement; - }; - interface HTMLCmpSlottedParentnodeElement extends Components.CmpSlottedParentnode, HTMLStencilElement { - } - var HTMLCmpSlottedParentnodeElement: { - prototype: HTMLCmpSlottedParentnodeElement; - new (): HTMLCmpSlottedParentnodeElement; - }; - interface HTMLCmpTextBlueElement extends Components.CmpTextBlue, HTMLStencilElement { - } - var HTMLCmpTextBlueElement: { - prototype: HTMLCmpTextBlueElement; - new (): HTMLCmpTextBlueElement; - }; - interface HTMLCmpTextGreenElement extends Components.CmpTextGreen, HTMLStencilElement { - } - var HTMLCmpTextGreenElement: { - prototype: HTMLCmpTextGreenElement; - new (): HTMLCmpTextGreenElement; - }; - interface HTMLComplexPropertiesElement extends Components.ComplexProperties, HTMLStencilElement { - } - var HTMLComplexPropertiesElement: { - prototype: HTMLComplexPropertiesElement; - new (): HTMLComplexPropertiesElement; - }; - interface HTMLComputedPropertiesPropDecoratorElement extends Components.ComputedPropertiesPropDecorator, HTMLStencilElement { - } - var HTMLComputedPropertiesPropDecoratorElement: { - prototype: HTMLComputedPropertiesPropDecoratorElement; - new (): HTMLComputedPropertiesPropDecoratorElement; - }; - interface HTMLComputedPropertiesPropDecoratorReflectElement extends Components.ComputedPropertiesPropDecoratorReflect, HTMLStencilElement { - } - var HTMLComputedPropertiesPropDecoratorReflectElement: { - prototype: HTMLComputedPropertiesPropDecoratorReflectElement; - new (): HTMLComputedPropertiesPropDecoratorReflectElement; - }; - interface HTMLComputedPropertiesStateDecoratorElement extends Components.ComputedPropertiesStateDecorator, HTMLStencilElement { - } - var HTMLComputedPropertiesStateDecoratorElement: { - prototype: HTMLComputedPropertiesStateDecoratorElement; - new (): HTMLComputedPropertiesStateDecoratorElement; - }; - interface HTMLComputedPropertiesWatchDecoratorElement extends Components.ComputedPropertiesWatchDecorator, HTMLStencilElement { - } - var HTMLComputedPropertiesWatchDecoratorElement: { - prototype: HTMLComputedPropertiesWatchDecoratorElement; - new (): HTMLComputedPropertiesWatchDecoratorElement; - }; - interface HTMLConditionalBasicElement extends Components.ConditionalBasic, HTMLStencilElement { - } - var HTMLConditionalBasicElement: { - prototype: HTMLConditionalBasicElement; - new (): HTMLConditionalBasicElement; - }; - interface HTMLConditionalRerenderElement extends Components.ConditionalRerender, HTMLStencilElement { - } - var HTMLConditionalRerenderElement: { - prototype: HTMLConditionalRerenderElement; - new (): HTMLConditionalRerenderElement; - }; - interface HTMLConditionalRerenderRootElement extends Components.ConditionalRerenderRoot, HTMLStencilElement { - } - var HTMLConditionalRerenderRootElement: { - prototype: HTMLConditionalRerenderRootElement; - new (): HTMLConditionalRerenderRootElement; - }; - interface HTMLCssCmpElement extends Components.CssCmp, HTMLStencilElement { - } - var HTMLCssCmpElement: { - prototype: HTMLCssCmpElement; - new (): HTMLCssCmpElement; - }; - interface HTMLCssVariablesNoEncapsulationElement extends Components.CssVariablesNoEncapsulation, HTMLStencilElement { - } - var HTMLCssVariablesNoEncapsulationElement: { - prototype: HTMLCssVariablesNoEncapsulationElement; - new (): HTMLCssVariablesNoEncapsulationElement; - }; - interface HTMLCssVariablesShadowDomElement extends Components.CssVariablesShadowDom, HTMLStencilElement { - } - var HTMLCssVariablesShadowDomElement: { - prototype: HTMLCssVariablesShadowDomElement; - new (): HTMLCssVariablesShadowDomElement; - }; - interface HTMLCustomElementChildElement extends Components.CustomElementChild, HTMLStencilElement { - } - var HTMLCustomElementChildElement: { - prototype: HTMLCustomElementChildElement; - new (): HTMLCustomElementChildElement; - }; - interface HTMLCustomElementChildDifferentNameThanClassElement extends Components.CustomElementChildDifferentNameThanClass, HTMLStencilElement { - } - var HTMLCustomElementChildDifferentNameThanClassElement: { - prototype: HTMLCustomElementChildDifferentNameThanClassElement; - new (): HTMLCustomElementChildDifferentNameThanClassElement; - }; - interface HTMLCustomElementNestedChildElement extends Components.CustomElementNestedChild, HTMLStencilElement { - } - var HTMLCustomElementNestedChildElement: { - prototype: HTMLCustomElementNestedChildElement; - new (): HTMLCustomElementNestedChildElement; - }; - interface HTMLCustomElementRootElement extends Components.CustomElementRoot, HTMLStencilElement { - } - var HTMLCustomElementRootElement: { - prototype: HTMLCustomElementRootElement; - new (): HTMLCustomElementRootElement; - }; - interface HTMLCustomElementRootDifferentNameThanClassElement extends Components.CustomElementRootDifferentNameThanClass, HTMLStencilElement { - } - var HTMLCustomElementRootDifferentNameThanClassElement: { - prototype: HTMLCustomElementRootDifferentNameThanClassElement; - new (): HTMLCustomElementRootDifferentNameThanClassElement; - }; - interface HTMLCustomElementsDelegatesFocusElement extends Components.CustomElementsDelegatesFocus, HTMLStencilElement { - } - var HTMLCustomElementsDelegatesFocusElement: { - prototype: HTMLCustomElementsDelegatesFocusElement; - new (): HTMLCustomElementsDelegatesFocusElement; - }; - interface HTMLCustomElementsHierarchyLifecycleChildElement extends Components.CustomElementsHierarchyLifecycleChild, HTMLStencilElement { - } - var HTMLCustomElementsHierarchyLifecycleChildElement: { - prototype: HTMLCustomElementsHierarchyLifecycleChildElement; - new (): HTMLCustomElementsHierarchyLifecycleChildElement; - }; - interface HTMLCustomElementsHierarchyLifecycleParentElement extends Components.CustomElementsHierarchyLifecycleParent, HTMLStencilElement { - } - var HTMLCustomElementsHierarchyLifecycleParentElement: { - prototype: HTMLCustomElementsHierarchyLifecycleParentElement; - new (): HTMLCustomElementsHierarchyLifecycleParentElement; - }; - interface HTMLCustomElementsNoDelegatesFocusElement extends Components.CustomElementsNoDelegatesFocus, HTMLStencilElement { - } - var HTMLCustomElementsNoDelegatesFocusElement: { - prototype: HTMLCustomElementsNoDelegatesFocusElement; - new (): HTMLCustomElementsNoDelegatesFocusElement; - }; - interface HTMLCustomEventRootElement extends Components.CustomEventRoot, HTMLStencilElement { - } - var HTMLCustomEventRootElement: { - prototype: HTMLCustomEventRootElement; - new (): HTMLCustomEventRootElement; - }; - interface HTMLCustomSvgElementElement extends Components.CustomSvgElement, HTMLStencilElement { - } - var HTMLCustomSvgElementElement: { - prototype: HTMLCustomSvgElementElement; - new (): HTMLCustomSvgElementElement; - }; - interface HTMLDelegatesFocusElement extends Components.DelegatesFocus, HTMLStencilElement { - } - var HTMLDelegatesFocusElement: { - prototype: HTMLDelegatesFocusElement; - new (): HTMLDelegatesFocusElement; - }; - interface HTMLDomReattachElement extends Components.DomReattach, HTMLStencilElement { - } - var HTMLDomReattachElement: { - prototype: HTMLDomReattachElement; - new (): HTMLDomReattachElement; - }; - interface HTMLDomReattachCloneElement extends Components.DomReattachClone, HTMLStencilElement { - } - var HTMLDomReattachCloneElement: { - prototype: HTMLDomReattachCloneElement; - new (): HTMLDomReattachCloneElement; - }; - interface HTMLDomReattachCloneDeepSlotElement extends Components.DomReattachCloneDeepSlot, HTMLStencilElement { - } - var HTMLDomReattachCloneDeepSlotElement: { - prototype: HTMLDomReattachCloneDeepSlotElement; - new (): HTMLDomReattachCloneDeepSlotElement; - }; - interface HTMLDomReattachCloneHostElement extends Components.DomReattachCloneHost, HTMLStencilElement { - } - var HTMLDomReattachCloneHostElement: { - prototype: HTMLDomReattachCloneHostElement; - new (): HTMLDomReattachCloneHostElement; - }; - interface HTMLDsdCmpElement extends Components.DsdCmp, HTMLStencilElement { - } - var HTMLDsdCmpElement: { - prototype: HTMLDsdCmpElement; - new (): HTMLDsdCmpElement; - }; - interface HTMLDynamicCssVariableElement extends Components.DynamicCssVariable, HTMLStencilElement { - } - var HTMLDynamicCssVariableElement: { - prototype: HTMLDynamicCssVariableElement; - new (): HTMLDynamicCssVariableElement; - }; - interface HTMLDynamicImportElement extends Components.DynamicImport, HTMLStencilElement { - } - var HTMLDynamicImportElement: { - prototype: HTMLDynamicImportElement; - new (): HTMLDynamicImportElement; - }; - interface HTMLEs5AddclassSvgElement extends Components.Es5AddclassSvg, HTMLStencilElement { - } - var HTMLEs5AddclassSvgElement: { - prototype: HTMLEs5AddclassSvgElement; - new (): HTMLEs5AddclassSvgElement; - }; - interface HTMLEsmImportElementEventMap { - "someEvent": any; - } - interface HTMLEsmImportElement extends Components.EsmImport, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLEsmImportElement, ev: EsmImportCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLEsmImportElement, ev: EsmImportCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLEsmImportElement: { - prototype: HTMLEsmImportElement; - new (): HTMLEsmImportElement; - }; - interface HTMLEventBasicElementEventMap { - "testEvent": any; - } - interface HTMLEventBasicElement extends Components.EventBasic, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLEventBasicElement, ev: EventBasicCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLEventBasicElement, ev: EventBasicCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLEventBasicElement: { - prototype: HTMLEventBasicElement; - new (): HTMLEventBasicElement; - }; - interface HTMLEventCustomTypeElementEventMap { - "testEvent": TestEventDetail; - } - interface HTMLEventCustomTypeElement extends Components.EventCustomType, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLEventCustomTypeElement, ev: EventCustomTypeCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLEventCustomTypeElement, ev: EventCustomTypeCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLEventCustomTypeElement: { - prototype: HTMLEventCustomTypeElement; - new (): HTMLEventCustomTypeElement; - }; - interface HTMLEventListenerCaptureElement extends Components.EventListenerCapture, HTMLStencilElement { - } - var HTMLEventListenerCaptureElement: { - prototype: HTMLEventListenerCaptureElement; - new (): HTMLEventListenerCaptureElement; - }; - interface HTMLEventReRegisterElement extends Components.EventReRegister, HTMLStencilElement { - } - var HTMLEventReRegisterElement: { - prototype: HTMLEventReRegisterElement; - new (): HTMLEventReRegisterElement; - }; - interface HTMLExtendedCmpElement extends Components.ExtendedCmp, HTMLStencilElement { - } - var HTMLExtendedCmpElement: { - prototype: HTMLExtendedCmpElement; - new (): HTMLExtendedCmpElement; - }; - interface HTMLExtendsCmpCmpElement extends Components.ExtendsCmpCmp, HTMLStencilElement { - } - var HTMLExtendsCmpCmpElement: { - prototype: HTMLExtendsCmpCmpElement; - new (): HTMLExtendsCmpCmpElement; - }; - interface HTMLExtendsExternalElement extends Components.ExtendsExternal, HTMLStencilElement { - } - var HTMLExtendsExternalElement: { - prototype: HTMLExtendsExternalElement; - new (): HTMLExtendsExternalElement; - }; - interface HTMLExtendsMixinElement extends Components.ExtendsMixin, HTMLStencilElement { - } - var HTMLExtendsMixinElement: { - prototype: HTMLExtendsMixinElement; - new (): HTMLExtendsMixinElement; - }; - interface HTMLExternalImportAElement extends Components.ExternalImportA, HTMLStencilElement { - } - var HTMLExternalImportAElement: { - prototype: HTMLExternalImportAElement; - new (): HTMLExternalImportAElement; - }; - interface HTMLExternalImportBElement extends Components.ExternalImportB, HTMLStencilElement { - } - var HTMLExternalImportBElement: { - prototype: HTMLExternalImportBElement; - new (): HTMLExternalImportBElement; - }; - interface HTMLExternalImportCElement extends Components.ExternalImportC, HTMLStencilElement { - } - var HTMLExternalImportCElement: { - prototype: HTMLExternalImportCElement; - new (): HTMLExternalImportCElement; - }; - interface HTMLFactoryJsxElement extends Components.FactoryJsx, HTMLStencilElement { - } - var HTMLFactoryJsxElement: { - prototype: HTMLFactoryJsxElement; - new (): HTMLFactoryJsxElement; - }; - interface HTMLFormAssociatedElement extends Components.FormAssociated, HTMLStencilElement { - } - var HTMLFormAssociatedElement: { - prototype: HTMLFormAssociatedElement; - new (): HTMLFormAssociatedElement; - }; - interface HTMLFormAssociatedPropCheckElement extends Components.FormAssociatedPropCheck, HTMLStencilElement { - } - var HTMLFormAssociatedPropCheckElement: { - prototype: HTMLFormAssociatedPropCheckElement; - new (): HTMLFormAssociatedPropCheckElement; - }; - interface HTMLGlobalStylesElement extends Components.GlobalStyles, HTMLStencilElement { - } - var HTMLGlobalStylesElement: { - prototype: HTMLGlobalStylesElement; - new (): HTMLGlobalStylesElement; - }; - interface HTMLHostAttrOverrideElement extends Components.HostAttrOverride, HTMLStencilElement { - } - var HTMLHostAttrOverrideElement: { - prototype: HTMLHostAttrOverrideElement; - new (): HTMLHostAttrOverrideElement; - }; - interface HTMLImageImportElement extends Components.ImageImport, HTMLStencilElement { - } - var HTMLImageImportElement: { - prototype: HTMLImageImportElement; - new (): HTMLImageImportElement; - }; - interface HTMLImportAliasingElementEventMap { - "myEvent": void; - } - interface HTMLImportAliasingElement extends Components.ImportAliasing, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLImportAliasingElement, ev: ImportAliasingCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLImportAliasingElement, ev: ImportAliasingCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLImportAliasingElement: { - prototype: HTMLImportAliasingElement; - new (): HTMLImportAliasingElement; - }; - interface HTMLInitCssRootElement extends Components.InitCssRoot, HTMLStencilElement { - } - var HTMLInitCssRootElement: { - prototype: HTMLInitCssRootElement; - new (): HTMLInitCssRootElement; - }; - interface HTMLInputBasicRootElement extends Components.InputBasicRoot, HTMLStencilElement { - } - var HTMLInputBasicRootElement: { - prototype: HTMLInputBasicRootElement; - new (): HTMLInputBasicRootElement; - }; - interface HTMLIonChildElement extends Components.IonChild, HTMLStencilElement { - } - var HTMLIonChildElement: { - prototype: HTMLIonChildElement; - new (): HTMLIonChildElement; - }; - interface HTMLIonHostElement extends Components.IonHost, HTMLStencilElement { - } - var HTMLIonHostElement: { - prototype: HTMLIonHostElement; - new (): HTMLIonHostElement; - }; - interface HTMLIonParentElement extends Components.IonParent, HTMLStencilElement { - } - var HTMLIonParentElement: { - prototype: HTMLIonParentElement; - new (): HTMLIonParentElement; - }; - interface HTMLIonRadioElementEventMap { - "ionFocus": void; - "ionBlur": void; - } - interface HTMLIonRadioElement extends Components.IonRadio, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLIonRadioElement, ev: IonRadioCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLIonRadioElement, ev: IonRadioCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLIonRadioElement: { - prototype: HTMLIonRadioElement; - new (): HTMLIonRadioElement; - }; - interface HTMLIonRadioGroupElementEventMap { - "ionChange": any; - "ionValueChange": any; - } - interface HTMLIonRadioGroupElement extends Components.IonRadioGroup, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLIonRadioGroupElement, ev: IonRadioGroupCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLIonRadioGroupElement, ev: IonRadioGroupCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLIonRadioGroupElement: { - prototype: HTMLIonRadioGroupElement; - new (): HTMLIonRadioGroupElement; - }; - interface HTMLJsonBasicElement extends Components.JsonBasic, HTMLStencilElement { - } - var HTMLJsonBasicElement: { - prototype: HTMLJsonBasicElement; - new (): HTMLJsonBasicElement; - }; - interface HTMLKeyReorderElement extends Components.KeyReorder, HTMLStencilElement { - } - var HTMLKeyReorderElement: { - prototype: HTMLKeyReorderElement; - new (): HTMLKeyReorderElement; - }; - interface HTMLLifecycleAsyncAElement extends Components.LifecycleAsyncA, HTMLStencilElement { - } - var HTMLLifecycleAsyncAElement: { - prototype: HTMLLifecycleAsyncAElement; - new (): HTMLLifecycleAsyncAElement; - }; - interface HTMLLifecycleAsyncBElementEventMap { - "lifecycleLoad": any; - "lifecycleUpdate": any; - } - interface HTMLLifecycleAsyncBElement extends Components.LifecycleAsyncB, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLLifecycleAsyncBElement, ev: LifecycleAsyncBCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLLifecycleAsyncBElement, ev: LifecycleAsyncBCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLLifecycleAsyncBElement: { - prototype: HTMLLifecycleAsyncBElement; - new (): HTMLLifecycleAsyncBElement; - }; - interface HTMLLifecycleAsyncCElementEventMap { - "lifecycleLoad": any; - "lifecycleUpdate": any; - } - interface HTMLLifecycleAsyncCElement extends Components.LifecycleAsyncC, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLLifecycleAsyncCElement, ev: LifecycleAsyncCCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLLifecycleAsyncCElement, ev: LifecycleAsyncCCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLLifecycleAsyncCElement: { - prototype: HTMLLifecycleAsyncCElement; - new (): HTMLLifecycleAsyncCElement; - }; - interface HTMLLifecycleBasicAElement extends Components.LifecycleBasicA, HTMLStencilElement { - } - var HTMLLifecycleBasicAElement: { - prototype: HTMLLifecycleBasicAElement; - new (): HTMLLifecycleBasicAElement; - }; - interface HTMLLifecycleBasicBElementEventMap { - "lifecycleLoad": any; - "lifecycleUpdate": any; - } - interface HTMLLifecycleBasicBElement extends Components.LifecycleBasicB, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLLifecycleBasicBElement, ev: LifecycleBasicBCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLLifecycleBasicBElement, ev: LifecycleBasicBCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLLifecycleBasicBElement: { - prototype: HTMLLifecycleBasicBElement; - new (): HTMLLifecycleBasicBElement; - }; - interface HTMLLifecycleBasicCElementEventMap { - "lifecycleLoad": any; - "lifecycleUpdate": any; - } - interface HTMLLifecycleBasicCElement extends Components.LifecycleBasicC, HTMLStencilElement { - addEventListener(type: K, listener: (this: HTMLLifecycleBasicCElement, ev: LifecycleBasicCCustomEvent) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; - addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLLifecycleBasicCElement, ev: LifecycleBasicCCustomEvent) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void; - removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; - } - var HTMLLifecycleBasicCElement: { - prototype: HTMLLifecycleBasicCElement; - new (): HTMLLifecycleBasicCElement; - }; - interface HTMLLifecycleNestedAElement extends Components.LifecycleNestedA, HTMLStencilElement { - } - var HTMLLifecycleNestedAElement: { - prototype: HTMLLifecycleNestedAElement; - new (): HTMLLifecycleNestedAElement; - }; - interface HTMLLifecycleNestedBElement extends Components.LifecycleNestedB, HTMLStencilElement { - } - var HTMLLifecycleNestedBElement: { - prototype: HTMLLifecycleNestedBElement; - new (): HTMLLifecycleNestedBElement; - }; - interface HTMLLifecycleNestedCElement extends Components.LifecycleNestedC, HTMLStencilElement { - } - var HTMLLifecycleNestedCElement: { - prototype: HTMLLifecycleNestedCElement; - new (): HTMLLifecycleNestedCElement; - }; - interface HTMLLifecycleUnloadAElement extends Components.LifecycleUnloadA, HTMLStencilElement { - } - var HTMLLifecycleUnloadAElement: { - prototype: HTMLLifecycleUnloadAElement; - new (): HTMLLifecycleUnloadAElement; - }; - interface HTMLLifecycleUnloadBElement extends Components.LifecycleUnloadB, HTMLStencilElement { - } - var HTMLLifecycleUnloadBElement: { - prototype: HTMLLifecycleUnloadBElement; - new (): HTMLLifecycleUnloadBElement; - }; - interface HTMLLifecycleUnloadRootElement extends Components.LifecycleUnloadRoot, HTMLStencilElement { - } - var HTMLLifecycleUnloadRootElement: { - prototype: HTMLLifecycleUnloadRootElement; - new (): HTMLLifecycleUnloadRootElement; - }; - interface HTMLLifecycleUpdateAElement extends Components.LifecycleUpdateA, HTMLStencilElement { - } - var HTMLLifecycleUpdateAElement: { - prototype: HTMLLifecycleUpdateAElement; - new (): HTMLLifecycleUpdateAElement; - }; - interface HTMLLifecycleUpdateBElement extends Components.LifecycleUpdateB, HTMLStencilElement { - } - var HTMLLifecycleUpdateBElement: { - prototype: HTMLLifecycleUpdateBElement; - new (): HTMLLifecycleUpdateBElement; - }; - interface HTMLLifecycleUpdateCElement extends Components.LifecycleUpdateC, HTMLStencilElement { - } - var HTMLLifecycleUpdateCElement: { - prototype: HTMLLifecycleUpdateCElement; - new (): HTMLLifecycleUpdateCElement; - }; - interface HTMLListenJsxElement extends Components.ListenJsx, HTMLStencilElement { - } - var HTMLListenJsxElement: { - prototype: HTMLListenJsxElement; - new (): HTMLListenJsxElement; - }; - interface HTMLListenJsxRootElement extends Components.ListenJsxRoot, HTMLStencilElement { - } - var HTMLListenJsxRootElement: { - prototype: HTMLListenJsxRootElement; - new (): HTMLListenJsxRootElement; - }; - interface HTMLListenReattachElement extends Components.ListenReattach, HTMLStencilElement { - } - var HTMLListenReattachElement: { - prototype: HTMLListenReattachElement; - new (): HTMLListenReattachElement; - }; - interface HTMLListenWindowElement extends Components.ListenWindow, HTMLStencilElement { - } - var HTMLListenWindowElement: { - prototype: HTMLListenWindowElement; - new (): HTMLListenWindowElement; - }; - interface HTMLMultipleStylesCmpElement extends Components.MultipleStylesCmp, HTMLStencilElement { - } - var HTMLMultipleStylesCmpElement: { - prototype: HTMLMultipleStylesCmpElement; - new (): HTMLMultipleStylesCmpElement; - }; - interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement { - } - var HTMLMyComponentElement: { - prototype: HTMLMyComponentElement; - new (): HTMLMyComponentElement; - }; - interface HTMLNoDelegatesFocusElement extends Components.NoDelegatesFocus, HTMLStencilElement { - } - var HTMLNoDelegatesFocusElement: { - prototype: HTMLNoDelegatesFocusElement; - new (): HTMLNoDelegatesFocusElement; - }; - interface HTMLNodeResolutionElement extends Components.NodeResolution, HTMLStencilElement { - } - var HTMLNodeResolutionElement: { - prototype: HTMLNodeResolutionElement; - new (): HTMLNodeResolutionElement; - }; - interface HTMLPageListElement extends Components.PageList, HTMLStencilElement { - } - var HTMLPageListElement: { - prototype: HTMLPageListElement; - new (): HTMLPageListElement; - }; - interface HTMLPageListItemElement extends Components.PageListItem, HTMLStencilElement { - } - var HTMLPageListItemElement: { - prototype: HTMLPageListItemElement; - new (): HTMLPageListItemElement; - }; - interface HTMLParentReflectNanAttributeElement extends Components.ParentReflectNanAttribute, HTMLStencilElement { - } - var HTMLParentReflectNanAttributeElement: { - prototype: HTMLParentReflectNanAttributeElement; - new (): HTMLParentReflectNanAttributeElement; - }; - interface HTMLParentWithReflectChildElement extends Components.ParentWithReflectChild, HTMLStencilElement { - } - var HTMLParentWithReflectChildElement: { - prototype: HTMLParentWithReflectChildElement; - new (): HTMLParentWithReflectChildElement; - }; - interface HTMLPartSsrShadowCmpElement extends Components.PartSsrShadowCmp, HTMLStencilElement { - } - var HTMLPartSsrShadowCmpElement: { - prototype: HTMLPartSsrShadowCmpElement; - new (): HTMLPartSsrShadowCmpElement; - }; - interface HTMLPartWrapSsrShadowCmpElement extends Components.PartWrapSsrShadowCmp, HTMLStencilElement { - } - var HTMLPartWrapSsrShadowCmpElement: { - prototype: HTMLPartWrapSsrShadowCmpElement; - new (): HTMLPartWrapSsrShadowCmpElement; - }; - interface HTMLRadioGroupBlurTestElement extends Components.RadioGroupBlurTest, HTMLStencilElement { - } - var HTMLRadioGroupBlurTestElement: { - prototype: HTMLRadioGroupBlurTestElement; - new (): HTMLRadioGroupBlurTestElement; - }; - interface HTMLRefAttrOrderElement extends Components.RefAttrOrder, HTMLStencilElement { - } - var HTMLRefAttrOrderElement: { - prototype: HTMLRefAttrOrderElement; - new (): HTMLRefAttrOrderElement; - }; - interface HTMLReflectNanAttributeElement extends Components.ReflectNanAttribute, HTMLStencilElement { - } - var HTMLReflectNanAttributeElement: { - prototype: HTMLReflectNanAttributeElement; - new (): HTMLReflectNanAttributeElement; - }; - interface HTMLReflectNanAttributeHyphenElement extends Components.ReflectNanAttributeHyphen, HTMLStencilElement { - } - var HTMLReflectNanAttributeHyphenElement: { - prototype: HTMLReflectNanAttributeHyphenElement; - new (): HTMLReflectNanAttributeHyphenElement; - }; - interface HTMLReflectToAttrElement extends Components.ReflectToAttr, HTMLStencilElement { - } - var HTMLReflectToAttrElement: { - prototype: HTMLReflectToAttrElement; - new (): HTMLReflectToAttrElement; - }; - interface HTMLRemoveChildPatchElement extends Components.RemoveChildPatch, HTMLStencilElement { - } - var HTMLRemoveChildPatchElement: { - prototype: HTMLRemoveChildPatchElement; - new (): HTMLRemoveChildPatchElement; - }; - interface HTMLReparentStyleNoVarsElement extends Components.ReparentStyleNoVars, HTMLStencilElement { - } - var HTMLReparentStyleNoVarsElement: { - prototype: HTMLReparentStyleNoVarsElement; - new (): HTMLReparentStyleNoVarsElement; - }; - interface HTMLReparentStyleWithVarsElement extends Components.ReparentStyleWithVars, HTMLStencilElement { - } - var HTMLReparentStyleWithVarsElement: { - prototype: HTMLReparentStyleWithVarsElement; - new (): HTMLReparentStyleWithVarsElement; - }; - interface HTMLSassCmpElement extends Components.SassCmp, HTMLStencilElement { - } - var HTMLSassCmpElement: { - prototype: HTMLSassCmpElement; - new (): HTMLSassCmpElement; - }; - interface HTMLScopedAddRemoveClassesElement extends Components.ScopedAddRemoveClasses, HTMLStencilElement { - } - var HTMLScopedAddRemoveClassesElement: { - prototype: HTMLScopedAddRemoveClassesElement; - new (): HTMLScopedAddRemoveClassesElement; - }; - interface HTMLScopedBasicElement extends Components.ScopedBasic, HTMLStencilElement { - } - var HTMLScopedBasicElement: { - prototype: HTMLScopedBasicElement; - new (): HTMLScopedBasicElement; - }; - interface HTMLScopedBasicRootElement extends Components.ScopedBasicRoot, HTMLStencilElement { - } - var HTMLScopedBasicRootElement: { - prototype: HTMLScopedBasicRootElement; - new (): HTMLScopedBasicRootElement; - }; - interface HTMLScopedConditionalElement extends Components.ScopedConditional, HTMLStencilElement { - } - var HTMLScopedConditionalElement: { - prototype: HTMLScopedConditionalElement; - new (): HTMLScopedConditionalElement; - }; - interface HTMLScopedSlotAppendAndPrependElement extends Components.ScopedSlotAppendAndPrepend, HTMLStencilElement { - } - var HTMLScopedSlotAppendAndPrependElement: { - prototype: HTMLScopedSlotAppendAndPrependElement; - new (): HTMLScopedSlotAppendAndPrependElement; - }; - interface HTMLScopedSlotAssignedMethodsElement extends Components.ScopedSlotAssignedMethods, HTMLStencilElement { - } - var HTMLScopedSlotAssignedMethodsElement: { - prototype: HTMLScopedSlotAssignedMethodsElement; - new (): HTMLScopedSlotAssignedMethodsElement; - }; - interface HTMLScopedSlotChildInsertAdjacentElement extends Components.ScopedSlotChildInsertAdjacent, HTMLStencilElement { - } - var HTMLScopedSlotChildInsertAdjacentElement: { - prototype: HTMLScopedSlotChildInsertAdjacentElement; - new (): HTMLScopedSlotChildInsertAdjacentElement; - }; - interface HTMLScopedSlotChildrenElement extends Components.ScopedSlotChildren, HTMLStencilElement { - } - var HTMLScopedSlotChildrenElement: { - prototype: HTMLScopedSlotChildrenElement; - new (): HTMLScopedSlotChildrenElement; - }; - interface HTMLScopedSlotInsertbeforeElement extends Components.ScopedSlotInsertbefore, HTMLStencilElement { - } - var HTMLScopedSlotInsertbeforeElement: { - prototype: HTMLScopedSlotInsertbeforeElement; - new (): HTMLScopedSlotInsertbeforeElement; - }; - interface HTMLScopedSlotInsertionOrderAfterInteractionElement extends Components.ScopedSlotInsertionOrderAfterInteraction, HTMLStencilElement { - } - var HTMLScopedSlotInsertionOrderAfterInteractionElement: { - prototype: HTMLScopedSlotInsertionOrderAfterInteractionElement; - new (): HTMLScopedSlotInsertionOrderAfterInteractionElement; - }; - interface HTMLScopedSlotSlotchangeElement extends Components.ScopedSlotSlotchange, HTMLStencilElement { - } - var HTMLScopedSlotSlotchangeElement: { - prototype: HTMLScopedSlotSlotchangeElement; - new (): HTMLScopedSlotSlotchangeElement; - }; - interface HTMLScopedSlotSlotchangeWrapElement extends Components.ScopedSlotSlotchangeWrap, HTMLStencilElement { - } - var HTMLScopedSlotSlotchangeWrapElement: { - prototype: HTMLScopedSlotSlotchangeWrapElement; - new (): HTMLScopedSlotSlotchangeWrapElement; - }; - interface HTMLScopedSsrChildCmpElement extends Components.ScopedSsrChildCmp, HTMLStencilElement { - } - var HTMLScopedSsrChildCmpElement: { - prototype: HTMLScopedSsrChildCmpElement; - new (): HTMLScopedSsrChildCmpElement; - }; - interface HTMLScopedSsrParentCmpElement extends Components.ScopedSsrParentCmp, HTMLStencilElement { - } - var HTMLScopedSsrParentCmpElement: { - prototype: HTMLScopedSsrParentCmpElement; - new (): HTMLScopedSsrParentCmpElement; - }; - interface HTMLShadowDomArrayElement extends Components.ShadowDomArray, HTMLStencilElement { - } - var HTMLShadowDomArrayElement: { - prototype: HTMLShadowDomArrayElement; - new (): HTMLShadowDomArrayElement; - }; - interface HTMLShadowDomArrayRootElement extends Components.ShadowDomArrayRoot, HTMLStencilElement { - } - var HTMLShadowDomArrayRootElement: { - prototype: HTMLShadowDomArrayRootElement; - new (): HTMLShadowDomArrayRootElement; - }; - interface HTMLShadowDomBasicElement extends Components.ShadowDomBasic, HTMLStencilElement { - } - var HTMLShadowDomBasicElement: { - prototype: HTMLShadowDomBasicElement; - new (): HTMLShadowDomBasicElement; - }; - interface HTMLShadowDomBasicRootElement extends Components.ShadowDomBasicRoot, HTMLStencilElement { - } - var HTMLShadowDomBasicRootElement: { - prototype: HTMLShadowDomBasicRootElement; - new (): HTMLShadowDomBasicRootElement; - }; - interface HTMLShadowDomModeElement extends Components.ShadowDomMode, HTMLStencilElement { - } - var HTMLShadowDomModeElement: { - prototype: HTMLShadowDomModeElement; - new (): HTMLShadowDomModeElement; - }; - interface HTMLShadowDomSlotNestedElement extends Components.ShadowDomSlotNested, HTMLStencilElement { - } - var HTMLShadowDomSlotNestedElement: { - prototype: HTMLShadowDomSlotNestedElement; - new (): HTMLShadowDomSlotNestedElement; - }; - interface HTMLShadowDomSlotNestedRootElement extends Components.ShadowDomSlotNestedRoot, HTMLStencilElement { - } - var HTMLShadowDomSlotNestedRootElement: { - prototype: HTMLShadowDomSlotNestedRootElement; - new (): HTMLShadowDomSlotNestedRootElement; - }; - interface HTMLShadowSsrChildCmpElement extends Components.ShadowSsrChildCmp, HTMLStencilElement { - } - var HTMLShadowSsrChildCmpElement: { - prototype: HTMLShadowSsrChildCmpElement; - new (): HTMLShadowSsrChildCmpElement; - }; - interface HTMLShadowSsrParentCmpElement extends Components.ShadowSsrParentCmp, HTMLStencilElement { - } - var HTMLShadowSsrParentCmpElement: { - prototype: HTMLShadowSsrParentCmpElement; - new (): HTMLShadowSsrParentCmpElement; - }; - interface HTMLSlotArrayBasicElement extends Components.SlotArrayBasic, HTMLStencilElement { - } - var HTMLSlotArrayBasicElement: { - prototype: HTMLSlotArrayBasicElement; - new (): HTMLSlotArrayBasicElement; - }; - interface HTMLSlotArrayComplexElement extends Components.SlotArrayComplex, HTMLStencilElement { - } - var HTMLSlotArrayComplexElement: { - prototype: HTMLSlotArrayComplexElement; - new (): HTMLSlotArrayComplexElement; - }; - interface HTMLSlotArrayComplexRootElement extends Components.SlotArrayComplexRoot, HTMLStencilElement { - } - var HTMLSlotArrayComplexRootElement: { - prototype: HTMLSlotArrayComplexRootElement; - new (): HTMLSlotArrayComplexRootElement; - }; - interface HTMLSlotArrayTopElement extends Components.SlotArrayTop, HTMLStencilElement { - } - var HTMLSlotArrayTopElement: { - prototype: HTMLSlotArrayTopElement; - new (): HTMLSlotArrayTopElement; - }; - interface HTMLSlotBasicElement extends Components.SlotBasic, HTMLStencilElement { - } - var HTMLSlotBasicElement: { - prototype: HTMLSlotBasicElement; - new (): HTMLSlotBasicElement; - }; - interface HTMLSlotBasicOrderElement extends Components.SlotBasicOrder, HTMLStencilElement { - } - var HTMLSlotBasicOrderElement: { - prototype: HTMLSlotBasicOrderElement; - new (): HTMLSlotBasicOrderElement; - }; - interface HTMLSlotBasicOrderRootElement extends Components.SlotBasicOrderRoot, HTMLStencilElement { - } - var HTMLSlotBasicOrderRootElement: { - prototype: HTMLSlotBasicOrderRootElement; - new (): HTMLSlotBasicOrderRootElement; - }; - interface HTMLSlotBasicRootElement extends Components.SlotBasicRoot, HTMLStencilElement { - } - var HTMLSlotBasicRootElement: { - prototype: HTMLSlotBasicRootElement; - new (): HTMLSlotBasicRootElement; - }; - interface HTMLSlotChildrenRootElement extends Components.SlotChildrenRoot, HTMLStencilElement { - } - var HTMLSlotChildrenRootElement: { - prototype: HTMLSlotChildrenRootElement; - new (): HTMLSlotChildrenRootElement; - }; - interface HTMLSlotConditionalRenderingElement extends Components.SlotConditionalRendering, HTMLStencilElement { - } - var HTMLSlotConditionalRenderingElement: { - prototype: HTMLSlotConditionalRenderingElement; - new (): HTMLSlotConditionalRenderingElement; - }; - interface HTMLSlotDynamicNameChangeScopedElement extends Components.SlotDynamicNameChangeScoped, HTMLStencilElement { - } - var HTMLSlotDynamicNameChangeScopedElement: { - prototype: HTMLSlotDynamicNameChangeScopedElement; - new (): HTMLSlotDynamicNameChangeScopedElement; - }; - interface HTMLSlotDynamicNameChangeShadowElement extends Components.SlotDynamicNameChangeShadow, HTMLStencilElement { - } - var HTMLSlotDynamicNameChangeShadowElement: { - prototype: HTMLSlotDynamicNameChangeShadowElement; - new (): HTMLSlotDynamicNameChangeShadowElement; - }; - interface HTMLSlotDynamicScopedListElement extends Components.SlotDynamicScopedList, HTMLStencilElement { - } - var HTMLSlotDynamicScopedListElement: { - prototype: HTMLSlotDynamicScopedListElement; - new (): HTMLSlotDynamicScopedListElement; - }; - interface HTMLSlotDynamicShadowListElement extends Components.SlotDynamicShadowList, HTMLStencilElement { - } - var HTMLSlotDynamicShadowListElement: { - prototype: HTMLSlotDynamicShadowListElement; - new (): HTMLSlotDynamicShadowListElement; - }; - interface HTMLSlotDynamicWrapperElement extends Components.SlotDynamicWrapper, HTMLStencilElement { - } - var HTMLSlotDynamicWrapperElement: { - prototype: HTMLSlotDynamicWrapperElement; - new (): HTMLSlotDynamicWrapperElement; - }; - interface HTMLSlotDynamicWrapperRootElement extends Components.SlotDynamicWrapperRoot, HTMLStencilElement { - } - var HTMLSlotDynamicWrapperRootElement: { - prototype: HTMLSlotDynamicWrapperRootElement; - new (): HTMLSlotDynamicWrapperRootElement; - }; - interface HTMLSlotFallbackElement extends Components.SlotFallback, HTMLStencilElement { - } - var HTMLSlotFallbackElement: { - prototype: HTMLSlotFallbackElement; - new (): HTMLSlotFallbackElement; - }; - interface HTMLSlotFallbackRootElement extends Components.SlotFallbackRoot, HTMLStencilElement { - } - var HTMLSlotFallbackRootElement: { - prototype: HTMLSlotFallbackRootElement; - new (): HTMLSlotFallbackRootElement; - }; - interface HTMLSlotForwardChildFallbackElement extends Components.SlotForwardChildFallback, HTMLStencilElement { - } - var HTMLSlotForwardChildFallbackElement: { - prototype: HTMLSlotForwardChildFallbackElement; - new (): HTMLSlotForwardChildFallbackElement; - }; - interface HTMLSlotForwardRootElement extends Components.SlotForwardRoot, HTMLStencilElement { - } - var HTMLSlotForwardRootElement: { - prototype: HTMLSlotForwardRootElement; - new (): HTMLSlotForwardRootElement; - }; - interface HTMLSlotHideContentOpenElement extends Components.SlotHideContentOpen, HTMLStencilElement { - } - var HTMLSlotHideContentOpenElement: { - prototype: HTMLSlotHideContentOpenElement; - new (): HTMLSlotHideContentOpenElement; - }; - interface HTMLSlotHideContentScopedElement extends Components.SlotHideContentScoped, HTMLStencilElement { - } - var HTMLSlotHideContentScopedElement: { - prototype: HTMLSlotHideContentScopedElement; - new (): HTMLSlotHideContentScopedElement; - }; - interface HTMLSlotHtmlElement extends Components.SlotHtml, HTMLStencilElement { - } - var HTMLSlotHtmlElement: { - prototype: HTMLSlotHtmlElement; - new (): HTMLSlotHtmlElement; - }; - interface HTMLSlotLightDomContentElement extends Components.SlotLightDomContent, HTMLStencilElement { - } - var HTMLSlotLightDomContentElement: { - prototype: HTMLSlotLightDomContentElement; - new (): HTMLSlotLightDomContentElement; - }; - interface HTMLSlotLightDomRootElement extends Components.SlotLightDomRoot, HTMLStencilElement { - } - var HTMLSlotLightDomRootElement: { - prototype: HTMLSlotLightDomRootElement; - new (): HTMLSlotLightDomRootElement; - }; - interface HTMLSlotLightListElement extends Components.SlotLightList, HTMLStencilElement { - } - var HTMLSlotLightListElement: { - prototype: HTMLSlotLightListElement; - new (): HTMLSlotLightListElement; - }; - interface HTMLSlotLightScopedListElement extends Components.SlotLightScopedList, HTMLStencilElement { - } - var HTMLSlotLightScopedListElement: { - prototype: HTMLSlotLightScopedListElement; - new (): HTMLSlotLightScopedListElement; - }; - interface HTMLSlotListLightRootElement extends Components.SlotListLightRoot, HTMLStencilElement { - } - var HTMLSlotListLightRootElement: { - prototype: HTMLSlotListLightRootElement; - new (): HTMLSlotListLightRootElement; - }; - interface HTMLSlotListLightScopedRootElement extends Components.SlotListLightScopedRoot, HTMLStencilElement { - } - var HTMLSlotListLightScopedRootElement: { - prototype: HTMLSlotListLightScopedRootElement; - new (): HTMLSlotListLightScopedRootElement; - }; - interface HTMLSlotMapOrderElement extends Components.SlotMapOrder, HTMLStencilElement { - } - var HTMLSlotMapOrderElement: { - prototype: HTMLSlotMapOrderElement; - new (): HTMLSlotMapOrderElement; - }; - interface HTMLSlotMapOrderRootElement extends Components.SlotMapOrderRoot, HTMLStencilElement { - } - var HTMLSlotMapOrderRootElement: { - prototype: HTMLSlotMapOrderRootElement; - new (): HTMLSlotMapOrderRootElement; - }; - interface HTMLSlotNestedDefaultOrderChildElement extends Components.SlotNestedDefaultOrderChild, HTMLStencilElement { - } - var HTMLSlotNestedDefaultOrderChildElement: { - prototype: HTMLSlotNestedDefaultOrderChildElement; - new (): HTMLSlotNestedDefaultOrderChildElement; - }; - interface HTMLSlotNestedDefaultOrderParentElement extends Components.SlotNestedDefaultOrderParent, HTMLStencilElement { - } - var HTMLSlotNestedDefaultOrderParentElement: { - prototype: HTMLSlotNestedDefaultOrderParentElement; - new (): HTMLSlotNestedDefaultOrderParentElement; - }; - interface HTMLSlotNestedDynamicChildElement extends Components.SlotNestedDynamicChild, HTMLStencilElement { - } - var HTMLSlotNestedDynamicChildElement: { - prototype: HTMLSlotNestedDynamicChildElement; - new (): HTMLSlotNestedDynamicChildElement; - }; - interface HTMLSlotNestedDynamicParentElement extends Components.SlotNestedDynamicParent, HTMLStencilElement { - } - var HTMLSlotNestedDynamicParentElement: { - prototype: HTMLSlotNestedDynamicParentElement; - new (): HTMLSlotNestedDynamicParentElement; - }; - interface HTMLSlotNestedDynamicWrapperElement extends Components.SlotNestedDynamicWrapper, HTMLStencilElement { - } - var HTMLSlotNestedDynamicWrapperElement: { - prototype: HTMLSlotNestedDynamicWrapperElement; - new (): HTMLSlotNestedDynamicWrapperElement; - }; - interface HTMLSlotNestedOrderChildElement extends Components.SlotNestedOrderChild, HTMLStencilElement { - } - var HTMLSlotNestedOrderChildElement: { - prototype: HTMLSlotNestedOrderChildElement; - new (): HTMLSlotNestedOrderChildElement; - }; - interface HTMLSlotNestedOrderParentElement extends Components.SlotNestedOrderParent, HTMLStencilElement { - } - var HTMLSlotNestedOrderParentElement: { - prototype: HTMLSlotNestedOrderParentElement; - new (): HTMLSlotNestedOrderParentElement; - }; - interface HTMLSlotNgIfElement extends Components.SlotNgIf, HTMLStencilElement { - } - var HTMLSlotNgIfElement: { - prototype: HTMLSlotNgIfElement; - new (): HTMLSlotNgIfElement; - }; - interface HTMLSlotNoDefaultElement extends Components.SlotNoDefault, HTMLStencilElement { - } - var HTMLSlotNoDefaultElement: { - prototype: HTMLSlotNoDefaultElement; - new (): HTMLSlotNoDefaultElement; - }; - interface HTMLSlotParentTagChangeElement extends Components.SlotParentTagChange, HTMLStencilElement { - } - var HTMLSlotParentTagChangeElement: { - prototype: HTMLSlotParentTagChangeElement; - new (): HTMLSlotParentTagChangeElement; - }; - interface HTMLSlotParentTagChangeRootElement extends Components.SlotParentTagChangeRoot, HTMLStencilElement { - } - var HTMLSlotParentTagChangeRootElement: { - prototype: HTMLSlotParentTagChangeRootElement; - new (): HTMLSlotParentTagChangeRootElement; - }; - interface HTMLSlotReorderElement extends Components.SlotReorder, HTMLStencilElement { - } - var HTMLSlotReorderElement: { - prototype: HTMLSlotReorderElement; - new (): HTMLSlotReorderElement; - }; - interface HTMLSlotReorderRootElement extends Components.SlotReorderRoot, HTMLStencilElement { - } - var HTMLSlotReorderRootElement: { - prototype: HTMLSlotReorderRootElement; - new (): HTMLSlotReorderRootElement; - }; - interface HTMLSlotReplaceWrapperElement extends Components.SlotReplaceWrapper, HTMLStencilElement { - } - var HTMLSlotReplaceWrapperElement: { - prototype: HTMLSlotReplaceWrapperElement; - new (): HTMLSlotReplaceWrapperElement; - }; - interface HTMLSlotReplaceWrapperRootElement extends Components.SlotReplaceWrapperRoot, HTMLStencilElement { - } - var HTMLSlotReplaceWrapperRootElement: { - prototype: HTMLSlotReplaceWrapperRootElement; - new (): HTMLSlotReplaceWrapperRootElement; - }; - interface HTMLSlottedCssElement extends Components.SlottedCss, HTMLStencilElement { - } - var HTMLSlottedCssElement: { - prototype: HTMLSlottedCssElement; - new (): HTMLSlottedCssElement; - }; - interface HTMLSlowSsrPropElement extends Components.SlowSsrProp, HTMLStencilElement { - } - var HTMLSlowSsrPropElement: { - prototype: HTMLSlowSsrPropElement; - new (): HTMLSlowSsrPropElement; - }; - interface HTMLSsrOrderCmpElement extends Components.SsrOrderCmp, HTMLStencilElement { - } - var HTMLSsrOrderCmpElement: { - prototype: HTMLSsrOrderCmpElement; - new (): HTMLSsrOrderCmpElement; - }; - interface HTMLSsrOrderWrapCmpElement extends Components.SsrOrderWrapCmp, HTMLStencilElement { - } - var HTMLSsrOrderWrapCmpElement: { - prototype: HTMLSsrOrderWrapCmpElement; - new (): HTMLSsrOrderWrapCmpElement; - }; - interface HTMLSsrShadowCmpElement extends Components.SsrShadowCmp, HTMLStencilElement { - } - var HTMLSsrShadowCmpElement: { - prototype: HTMLSsrShadowCmpElement; - new (): HTMLSsrShadowCmpElement; - }; - interface HTMLStaticDecoratedMembersElement extends Components.StaticDecoratedMembers, HTMLStencilElement { - } - var HTMLStaticDecoratedMembersElement: { - prototype: HTMLStaticDecoratedMembersElement; - new (): HTMLStaticDecoratedMembersElement; - }; - interface HTMLStaticMembersElement extends Components.StaticMembers, HTMLStencilElement { - } - var HTMLStaticMembersElement: { - prototype: HTMLStaticMembersElement; - new (): HTMLStaticMembersElement; - }; - interface HTMLStaticMembersSeparateExportElement extends Components.StaticMembersSeparateExport, HTMLStencilElement { - } - var HTMLStaticMembersSeparateExportElement: { - prototype: HTMLStaticMembersSeparateExportElement; - new (): HTMLStaticMembersSeparateExportElement; - }; - interface HTMLStaticMembersSeparateInitializerElement extends Components.StaticMembersSeparateInitializer, HTMLStencilElement { - } - var HTMLStaticMembersSeparateInitializerElement: { - prototype: HTMLStaticMembersSeparateInitializerElement; - new (): HTMLStaticMembersSeparateInitializerElement; - }; - interface HTMLStaticStylesElement extends Components.StaticStyles, HTMLStencilElement { - } - var HTMLStaticStylesElement: { - prototype: HTMLStaticStylesElement; - new (): HTMLStaticStylesElement; - }; - interface HTMLStencilSiblingElement extends Components.StencilSibling, HTMLStencilElement { - } - var HTMLStencilSiblingElement: { - prototype: HTMLStencilSiblingElement; - new (): HTMLStencilSiblingElement; - }; - interface HTMLSvgAttrElement extends Components.SvgAttr, HTMLStencilElement { - } - var HTMLSvgAttrElement: { - prototype: HTMLSvgAttrElement; - new (): HTMLSvgAttrElement; - }; - interface HTMLSvgClassElement extends Components.SvgClass, HTMLStencilElement { - } - var HTMLSvgClassElement: { - prototype: HTMLSvgClassElement; - new (): HTMLSvgClassElement; - }; - interface HTMLTag3dComponentElement extends Components.Tag3dComponent, HTMLStencilElement { - } - var HTMLTag3dComponentElement: { - prototype: HTMLTag3dComponentElement; - new (): HTMLTag3dComponentElement; - }; - interface HTMLTag88Element extends Components.Tag88, HTMLStencilElement { - } - var HTMLTag88Element: { - prototype: HTMLTag88Element; - new (): HTMLTag88Element; - }; - interface HTMLTestSvgElement extends Components.TestSvg, HTMLStencilElement { - } - var HTMLTestSvgElement: { - prototype: HTMLTestSvgElement; - new (): HTMLTestSvgElement; - }; - interface HTMLTextContentPatchScopedElement extends Components.TextContentPatchScoped, HTMLStencilElement { - } - var HTMLTextContentPatchScopedElement: { - prototype: HTMLTextContentPatchScopedElement; - new (): HTMLTextContentPatchScopedElement; - }; - interface HTMLTextContentPatchScopedWithSlotElement extends Components.TextContentPatchScopedWithSlot, HTMLStencilElement { - } - var HTMLTextContentPatchScopedWithSlotElement: { - prototype: HTMLTextContentPatchScopedWithSlotElement; - new (): HTMLTextContentPatchScopedWithSlotElement; - }; - interface HTMLTsTargetPropsElement extends Components.TsTargetProps, HTMLStencilElement { - } - var HTMLTsTargetPropsElement: { - prototype: HTMLTsTargetPropsElement; - new (): HTMLTsTargetPropsElement; - }; - interface HTMLWatchNativeAttributesElement extends Components.WatchNativeAttributes, HTMLStencilElement { - } - var HTMLWatchNativeAttributesElement: { - prototype: HTMLWatchNativeAttributesElement; - new (): HTMLWatchNativeAttributesElement; - }; - interface HTMLWatchNativeAttributesNoMembersElement extends Components.WatchNativeAttributesNoMembers, HTMLStencilElement { - } - var HTMLWatchNativeAttributesNoMembersElement: { - prototype: HTMLWatchNativeAttributesNoMembersElement; - new (): HTMLWatchNativeAttributesNoMembersElement; - }; - interface HTMLWrapSsrShadowCmpElement extends Components.WrapSsrShadowCmp, HTMLStencilElement { - } - var HTMLWrapSsrShadowCmpElement: { - prototype: HTMLWrapSsrShadowCmpElement; - new (): HTMLWrapSsrShadowCmpElement; - }; - interface HTMLElementTagNameMap { - "app-root": HTMLAppRootElement; - "async-rerender": HTMLAsyncRerenderElement; - "attribute-basic": HTMLAttributeBasicElement; - "attribute-basic-root": HTMLAttributeBasicRootElement; - "attribute-boolean": HTMLAttributeBooleanElement; - "attribute-boolean-root": HTMLAttributeBooleanRootElement; - "attribute-complex": HTMLAttributeComplexElement; - "attribute-host": HTMLAttributeHostElement; - "attribute-html-root": HTMLAttributeHtmlRootElement; - "bad-shared-jsx": HTMLBadSharedJsxElement; - "build-data": HTMLBuildDataElement; - "child-reflect-nan-attribute": HTMLChildReflectNanAttributeElement; - "child-with-reflection": HTMLChildWithReflectionElement; - "cmp-a": HTMLCmpAElement; - "cmp-avatar": HTMLCmpAvatarElement; - "cmp-b": HTMLCmpBElement; - "cmp-c": HTMLCmpCElement; - "cmp-client-scoped": HTMLCmpClientScopedElement; - "cmp-client-shadow": HTMLCmpClientShadowElement; - "cmp-d": HTMLCmpDElement; - "cmp-label": HTMLCmpLabelElement; - "cmp-label-with-slot-sibling": HTMLCmpLabelWithSlotSiblingElement; - "cmp-level-1": HTMLCmpLevel1Element; - "cmp-level-2": HTMLCmpLevel2Element; - "cmp-level-3": HTMLCmpLevel3Element; - "cmp-scoped-a": HTMLCmpScopedAElement; - "cmp-scoped-b": HTMLCmpScopedBElement; - "cmp-slotted-parentnode": HTMLCmpSlottedParentnodeElement; - "cmp-text-blue": HTMLCmpTextBlueElement; - "cmp-text-green": HTMLCmpTextGreenElement; - "complex-properties": HTMLComplexPropertiesElement; - "computed-properties-prop-decorator": HTMLComputedPropertiesPropDecoratorElement; - "computed-properties-prop-decorator-reflect": HTMLComputedPropertiesPropDecoratorReflectElement; - "computed-properties-state-decorator": HTMLComputedPropertiesStateDecoratorElement; - "computed-properties-watch-decorator": HTMLComputedPropertiesWatchDecoratorElement; - "conditional-basic": HTMLConditionalBasicElement; - "conditional-rerender": HTMLConditionalRerenderElement; - "conditional-rerender-root": HTMLConditionalRerenderRootElement; - "css-cmp": HTMLCssCmpElement; - "css-variables-no-encapsulation": HTMLCssVariablesNoEncapsulationElement; - "css-variables-shadow-dom": HTMLCssVariablesShadowDomElement; - "custom-element-child": HTMLCustomElementChildElement; - "custom-element-child-different-name-than-class": HTMLCustomElementChildDifferentNameThanClassElement; - "custom-element-nested-child": HTMLCustomElementNestedChildElement; - "custom-element-root": HTMLCustomElementRootElement; - "custom-element-root-different-name-than-class": HTMLCustomElementRootDifferentNameThanClassElement; - "custom-elements-delegates-focus": HTMLCustomElementsDelegatesFocusElement; - "custom-elements-hierarchy-lifecycle-child": HTMLCustomElementsHierarchyLifecycleChildElement; - "custom-elements-hierarchy-lifecycle-parent": HTMLCustomElementsHierarchyLifecycleParentElement; - "custom-elements-no-delegates-focus": HTMLCustomElementsNoDelegatesFocusElement; - "custom-event-root": HTMLCustomEventRootElement; - "custom-svg-element": HTMLCustomSvgElementElement; - "delegates-focus": HTMLDelegatesFocusElement; - "dom-reattach": HTMLDomReattachElement; - "dom-reattach-clone": HTMLDomReattachCloneElement; - "dom-reattach-clone-deep-slot": HTMLDomReattachCloneDeepSlotElement; - "dom-reattach-clone-host": HTMLDomReattachCloneHostElement; - "dsd-cmp": HTMLDsdCmpElement; - "dynamic-css-variable": HTMLDynamicCssVariableElement; - "dynamic-import": HTMLDynamicImportElement; - "es5-addclass-svg": HTMLEs5AddclassSvgElement; - "esm-import": HTMLEsmImportElement; - "event-basic": HTMLEventBasicElement; - "event-custom-type": HTMLEventCustomTypeElement; - "event-listener-capture": HTMLEventListenerCaptureElement; - "event-re-register": HTMLEventReRegisterElement; - "extended-cmp": HTMLExtendedCmpElement; - "extends-cmp-cmp": HTMLExtendsCmpCmpElement; - "extends-external": HTMLExtendsExternalElement; - "extends-mixin": HTMLExtendsMixinElement; - "external-import-a": HTMLExternalImportAElement; - "external-import-b": HTMLExternalImportBElement; - "external-import-c": HTMLExternalImportCElement; - "factory-jsx": HTMLFactoryJsxElement; - "form-associated": HTMLFormAssociatedElement; - "form-associated-prop-check": HTMLFormAssociatedPropCheckElement; - "global-styles": HTMLGlobalStylesElement; - "host-attr-override": HTMLHostAttrOverrideElement; - "image-import": HTMLImageImportElement; - "import-aliasing": HTMLImportAliasingElement; - "init-css-root": HTMLInitCssRootElement; - "input-basic-root": HTMLInputBasicRootElement; - "ion-child": HTMLIonChildElement; - "ion-host": HTMLIonHostElement; - "ion-parent": HTMLIonParentElement; - "ion-radio": HTMLIonRadioElement; - "ion-radio-group": HTMLIonRadioGroupElement; - "json-basic": HTMLJsonBasicElement; - "key-reorder": HTMLKeyReorderElement; - "lifecycle-async-a": HTMLLifecycleAsyncAElement; - "lifecycle-async-b": HTMLLifecycleAsyncBElement; - "lifecycle-async-c": HTMLLifecycleAsyncCElement; - "lifecycle-basic-a": HTMLLifecycleBasicAElement; - "lifecycle-basic-b": HTMLLifecycleBasicBElement; - "lifecycle-basic-c": HTMLLifecycleBasicCElement; - "lifecycle-nested-a": HTMLLifecycleNestedAElement; - "lifecycle-nested-b": HTMLLifecycleNestedBElement; - "lifecycle-nested-c": HTMLLifecycleNestedCElement; - "lifecycle-unload-a": HTMLLifecycleUnloadAElement; - "lifecycle-unload-b": HTMLLifecycleUnloadBElement; - "lifecycle-unload-root": HTMLLifecycleUnloadRootElement; - "lifecycle-update-a": HTMLLifecycleUpdateAElement; - "lifecycle-update-b": HTMLLifecycleUpdateBElement; - "lifecycle-update-c": HTMLLifecycleUpdateCElement; - "listen-jsx": HTMLListenJsxElement; - "listen-jsx-root": HTMLListenJsxRootElement; - "listen-reattach": HTMLListenReattachElement; - "listen-window": HTMLListenWindowElement; - "multiple-styles-cmp": HTMLMultipleStylesCmpElement; - "my-component": HTMLMyComponentElement; - "no-delegates-focus": HTMLNoDelegatesFocusElement; - "node-resolution": HTMLNodeResolutionElement; - "page-list": HTMLPageListElement; - "page-list-item": HTMLPageListItemElement; - "parent-reflect-nan-attribute": HTMLParentReflectNanAttributeElement; - "parent-with-reflect-child": HTMLParentWithReflectChildElement; - "part-ssr-shadow-cmp": HTMLPartSsrShadowCmpElement; - "part-wrap-ssr-shadow-cmp": HTMLPartWrapSsrShadowCmpElement; - "radio-group-blur-test": HTMLRadioGroupBlurTestElement; - "ref-attr-order": HTMLRefAttrOrderElement; - "reflect-nan-attribute": HTMLReflectNanAttributeElement; - "reflect-nan-attribute-hyphen": HTMLReflectNanAttributeHyphenElement; - "reflect-to-attr": HTMLReflectToAttrElement; - "remove-child-patch": HTMLRemoveChildPatchElement; - "reparent-style-no-vars": HTMLReparentStyleNoVarsElement; - "reparent-style-with-vars": HTMLReparentStyleWithVarsElement; - "sass-cmp": HTMLSassCmpElement; - "scoped-add-remove-classes": HTMLScopedAddRemoveClassesElement; - "scoped-basic": HTMLScopedBasicElement; - "scoped-basic-root": HTMLScopedBasicRootElement; - "scoped-conditional": HTMLScopedConditionalElement; - "scoped-slot-append-and-prepend": HTMLScopedSlotAppendAndPrependElement; - "scoped-slot-assigned-methods": HTMLScopedSlotAssignedMethodsElement; - "scoped-slot-child-insert-adjacent": HTMLScopedSlotChildInsertAdjacentElement; - "scoped-slot-children": HTMLScopedSlotChildrenElement; - "scoped-slot-insertbefore": HTMLScopedSlotInsertbeforeElement; - "scoped-slot-insertion-order-after-interaction": HTMLScopedSlotInsertionOrderAfterInteractionElement; - "scoped-slot-slotchange": HTMLScopedSlotSlotchangeElement; - "scoped-slot-slotchange-wrap": HTMLScopedSlotSlotchangeWrapElement; - "scoped-ssr-child-cmp": HTMLScopedSsrChildCmpElement; - "scoped-ssr-parent-cmp": HTMLScopedSsrParentCmpElement; - "shadow-dom-array": HTMLShadowDomArrayElement; - "shadow-dom-array-root": HTMLShadowDomArrayRootElement; - "shadow-dom-basic": HTMLShadowDomBasicElement; - "shadow-dom-basic-root": HTMLShadowDomBasicRootElement; - "shadow-dom-mode": HTMLShadowDomModeElement; - "shadow-dom-slot-nested": HTMLShadowDomSlotNestedElement; - "shadow-dom-slot-nested-root": HTMLShadowDomSlotNestedRootElement; - "shadow-ssr-child-cmp": HTMLShadowSsrChildCmpElement; - "shadow-ssr-parent-cmp": HTMLShadowSsrParentCmpElement; - "slot-array-basic": HTMLSlotArrayBasicElement; - "slot-array-complex": HTMLSlotArrayComplexElement; - "slot-array-complex-root": HTMLSlotArrayComplexRootElement; - "slot-array-top": HTMLSlotArrayTopElement; - "slot-basic": HTMLSlotBasicElement; - "slot-basic-order": HTMLSlotBasicOrderElement; - "slot-basic-order-root": HTMLSlotBasicOrderRootElement; - "slot-basic-root": HTMLSlotBasicRootElement; - "slot-children-root": HTMLSlotChildrenRootElement; - "slot-conditional-rendering": HTMLSlotConditionalRenderingElement; - "slot-dynamic-name-change-scoped": HTMLSlotDynamicNameChangeScopedElement; - "slot-dynamic-name-change-shadow": HTMLSlotDynamicNameChangeShadowElement; - "slot-dynamic-scoped-list": HTMLSlotDynamicScopedListElement; - "slot-dynamic-shadow-list": HTMLSlotDynamicShadowListElement; - "slot-dynamic-wrapper": HTMLSlotDynamicWrapperElement; - "slot-dynamic-wrapper-root": HTMLSlotDynamicWrapperRootElement; - "slot-fallback": HTMLSlotFallbackElement; - "slot-fallback-root": HTMLSlotFallbackRootElement; - "slot-forward-child-fallback": HTMLSlotForwardChildFallbackElement; - "slot-forward-root": HTMLSlotForwardRootElement; - "slot-hide-content-open": HTMLSlotHideContentOpenElement; - "slot-hide-content-scoped": HTMLSlotHideContentScopedElement; - "slot-html": HTMLSlotHtmlElement; - "slot-light-dom-content": HTMLSlotLightDomContentElement; - "slot-light-dom-root": HTMLSlotLightDomRootElement; - "slot-light-list": HTMLSlotLightListElement; - "slot-light-scoped-list": HTMLSlotLightScopedListElement; - "slot-list-light-root": HTMLSlotListLightRootElement; - "slot-list-light-scoped-root": HTMLSlotListLightScopedRootElement; - "slot-map-order": HTMLSlotMapOrderElement; - "slot-map-order-root": HTMLSlotMapOrderRootElement; - "slot-nested-default-order-child": HTMLSlotNestedDefaultOrderChildElement; - "slot-nested-default-order-parent": HTMLSlotNestedDefaultOrderParentElement; - "slot-nested-dynamic-child": HTMLSlotNestedDynamicChildElement; - "slot-nested-dynamic-parent": HTMLSlotNestedDynamicParentElement; - "slot-nested-dynamic-wrapper": HTMLSlotNestedDynamicWrapperElement; - "slot-nested-order-child": HTMLSlotNestedOrderChildElement; - "slot-nested-order-parent": HTMLSlotNestedOrderParentElement; - "slot-ng-if": HTMLSlotNgIfElement; - "slot-no-default": HTMLSlotNoDefaultElement; - "slot-parent-tag-change": HTMLSlotParentTagChangeElement; - "slot-parent-tag-change-root": HTMLSlotParentTagChangeRootElement; - "slot-reorder": HTMLSlotReorderElement; - "slot-reorder-root": HTMLSlotReorderRootElement; - "slot-replace-wrapper": HTMLSlotReplaceWrapperElement; - "slot-replace-wrapper-root": HTMLSlotReplaceWrapperRootElement; - "slotted-css": HTMLSlottedCssElement; - "slow-ssr-prop": HTMLSlowSsrPropElement; - "ssr-order-cmp": HTMLSsrOrderCmpElement; - "ssr-order-wrap-cmp": HTMLSsrOrderWrapCmpElement; - "ssr-shadow-cmp": HTMLSsrShadowCmpElement; - "static-decorated-members": HTMLStaticDecoratedMembersElement; - "static-members": HTMLStaticMembersElement; - "static-members-separate-export": HTMLStaticMembersSeparateExportElement; - "static-members-separate-initializer": HTMLStaticMembersSeparateInitializerElement; - "static-styles": HTMLStaticStylesElement; - "stencil-sibling": HTMLStencilSiblingElement; - "svg-attr": HTMLSvgAttrElement; - "svg-class": HTMLSvgClassElement; - "tag-3d-component": HTMLTag3dComponentElement; - "tag-88": HTMLTag88Element; - "test-svg": HTMLTestSvgElement; - "text-content-patch-scoped": HTMLTextContentPatchScopedElement; - "text-content-patch-scoped-with-slot": HTMLTextContentPatchScopedWithSlotElement; - "ts-target-props": HTMLTsTargetPropsElement; - "watch-native-attributes": HTMLWatchNativeAttributesElement; - "watch-native-attributes-no-members": HTMLWatchNativeAttributesNoMembersElement; - "wrap-ssr-shadow-cmp": HTMLWrapSsrShadowCmpElement; - } -} -declare namespace LocalJSX { - interface AppRoot { - } - interface AsyncRerender { - } - interface AttributeBasic { - /** - * @default 'my-custom-attr' - */ - "customAttr"?: string; - /** - * @default 'getter' - */ - "getter"?: string; - /** - * @default 'multiWord' - */ - "multiWord"?: string; - /** - * @default 'single' - */ - "single"?: string; - } - interface AttributeBasicRoot { - } - interface AttributeBoolean { - "boolState"?: boolean; - "noreflect"?: boolean; - "strState"?: string; - } - interface AttributeBooleanRoot { - } - interface AttributeComplex { - /** - * @default true - */ - "bool0"?: boolean; - "bool1"?: boolean; - "bool2"?: boolean; - /** - * @default 1 - */ - "nu0"?: number; - "nu1"?: number; - "nu2"?: SomeTypes.Number; - "obj"?: string; - /** - * @default 'hello' - */ - "str0"?: string; - "str1"?: string; - "str2"?: SomeTypes.String; - } - interface AttributeHost { - } - interface AttributeHtmlRoot { - "anyAttr"?: any; - "nuAttr"?: number; - "strAttr"?: string; - } - interface BadSharedJsx { - } - interface BuildData { - } - interface ChildReflectNanAttribute { - "val"?: number; - } - interface ChildWithReflection { - "val"?: number | any; - } - interface CmpA { - } - interface CmpAvatar { - } - interface CmpB { - } - interface CmpC { - } - interface CmpClientScoped { - } - interface CmpClientShadow { - } - interface CmpD { - /** - * @default '' - */ - "uniqueId"?: string; - } - interface CmpLabel { - } - interface CmpLabelWithSlotSibling { - } - interface CmpLevel1 { - } - interface CmpLevel2 { - } - interface CmpLevel3 { - } - interface CmpScopedA { - } - interface CmpScopedB { - } - interface CmpSlottedParentnode { - } - interface CmpTextBlue { - } - interface CmpTextGreen { - } - interface ComplexProperties { - /** - * map objects - */ - "baz"?: Map; - /** - * basic object - */ - "foo"?: { bar: string; loo: number[]; qux: { quux: symbol } }; - /** - * infinity - */ - "grault"?: typeof Infinity; - /** - * basic array - */ - "kidsNames"?: string[]; - /** - * set objects - */ - "quux"?: Set; - /** - * null - */ - "waldo"?: null; - } - interface ComputedPropertiesPropDecorator { - /** - * @default 'no' - */ - "first"?: string; - /** - * @default 'content' - */ - "last"?: string; - /** - * @default '' - */ - "middle"?: string; - } - interface ComputedPropertiesPropDecoratorReflect { - /** - * @default 'no' - */ - "first"?: string; - /** - * @default 'content' - */ - "last"?: string; - /** - * @default '' - */ - "middle"?: string; - } - interface ComputedPropertiesStateDecorator { - } - interface ComputedPropertiesWatchDecorator { - /** - * @default 'no' - */ - "first"?: string; - /** - * @default 'content' - */ - "last"?: string; - } - interface ConditionalBasic { - } - interface ConditionalRerender { - } - interface ConditionalRerenderRoot { - } - interface CssCmp { - } - interface CssVariablesNoEncapsulation { - } - interface CssVariablesShadowDom { - } - interface CustomElementChild { - } - interface CustomElementChildDifferentNameThanClass { - } - interface CustomElementNestedChild { - } - interface CustomElementRoot { - } - interface CustomElementRootDifferentNameThanClass { - } - interface CustomElementsDelegatesFocus { - } - interface CustomElementsHierarchyLifecycleChild { - } - interface CustomElementsHierarchyLifecycleParent { - } - interface CustomElementsNoDelegatesFocus { - } - interface CustomEventRoot { - } - interface CustomSvgElement { - } - interface DelegatesFocus { - } - interface DomReattach { - /** - * @default 0 - */ - "didLoad"?: number; - /** - * @default 0 - */ - "didUnload"?: number; - /** - * @default 0 - */ - "willLoad"?: number; - } - interface DomReattachClone { - } - interface DomReattachCloneDeepSlot { - } - interface DomReattachCloneHost { - } - interface DsdCmp { - } - interface DynamicCssVariable { - } - interface DynamicImport { - } - interface Es5AddclassSvg { - } - interface EsmImport { - "onSomeEvent"?: (event: EsmImportCustomEvent) => void; - /** - * @default 0 - */ - "propVal"?: number; - } - interface EventBasic { - "onTestEvent"?: (event: EventBasicCustomEvent) => void; - } - interface EventCustomType { - "onTestEvent"?: (event: EventCustomTypeCustomEvent) => void; - } - interface EventListenerCapture { - } - interface EventReRegister { - } - interface ExtendedCmp { - /** - * @default 'ExtendedCmp text' - */ - "prop1"?: string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2"?: string; - } - interface ExtendsCmpCmp { - /** - * @default 'default text' - */ - "prop1"?: string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2"?: string; - } - interface ExtendsExternal { - /** - * @default 'default text' - */ - "prop1"?: string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2"?: string; - } - interface ExtendsMixin { - /** - * @default 'default text' - */ - "prop1"?: string; - /** - * @default 'ExtendedCmp prop2 text' - */ - "prop2"?: string; - } - interface ExternalImportA { - } - interface ExternalImportB { - } - interface ExternalImportC { - } - interface FactoryJsx { - } - interface FormAssociated { - } - interface FormAssociatedPropCheck { - "disabled"?: boolean; - } - interface GlobalStyles { - } - interface HostAttrOverride { - } - interface ImageImport { - } - interface ImportAliasing { - "onMyEvent"?: (event: ImportAliasingCustomEvent) => void; - "user"?: string; - } - interface InitCssRoot { - } - interface InputBasicRoot { - "value"?: string; - } - interface IonChild { - } - interface IonHost { - } - interface IonParent { - } - interface IonRadio { - /** - * The name of the control, which is submitted with the form data. - * @default this.inputId - */ - "name"?: string; - /** - * Emitted when the radio button loses focus. - */ - "onIonBlur"?: (event: IonRadioCustomEvent) => void; - /** - * Emitted when the radio button has focus. - */ - "onIonFocus"?: (event: IonRadioCustomEvent) => void; - /** - * the value of the radio. - */ - "value"?: any | null; - } - interface IonRadioGroup { - /** - * If `true`, the radios can be deselected. - * @default false - */ - "allowEmptySelection"?: boolean; - /** - * This property allows developers to specify a custom function or property name for comparing objects when determining the selected option in the ion-radio-group. When not specified, the default behavior will use strict equality (===) for comparison. - */ - "compareWith"?: string | RadioGroupCompareFn | null; - /** - * The error text to display at the top of the radio group. - */ - "errorText"?: string; - /** - * The helper text to display at the top of the radio group. - */ - "helperText"?: string; - /** - * The name of the control, which is submitted with the form data. - * @default this.inputId - */ - "name"?: string; - /** - * Emitted when the value has changed. This event will not emit when programmatically setting the `value` property. - */ - "onIonChange"?: (event: IonRadioGroupCustomEvent) => void; - /** - * Emitted when the `value` property has changed. This is used to ensure that `ion-radio` can respond to any value property changes from the group. - */ - "onIonValueChange"?: (event: IonRadioGroupCustomEvent) => void; - /** - * the value of the radio group. - */ - "value"?: any | null; - } - interface JsonBasic { - } - interface KeyReorder { - } - interface LifecycleAsyncA { - } - interface LifecycleAsyncB { - "onLifecycleLoad"?: (event: LifecycleAsyncBCustomEvent) => void; - "onLifecycleUpdate"?: (event: LifecycleAsyncBCustomEvent) => void; - /** - * @default '' - */ - "value"?: string; - } - interface LifecycleAsyncC { - "onLifecycleLoad"?: (event: LifecycleAsyncCCustomEvent) => void; - "onLifecycleUpdate"?: (event: LifecycleAsyncCCustomEvent) => void; - /** - * @default '' - */ - "value"?: string; - } - interface LifecycleBasicA { - } - interface LifecycleBasicB { - "onLifecycleLoad"?: (event: LifecycleBasicBCustomEvent) => void; - "onLifecycleUpdate"?: (event: LifecycleBasicBCustomEvent) => void; - /** - * @default '' - */ - "value"?: string; - } - interface LifecycleBasicC { - "onLifecycleLoad"?: (event: LifecycleBasicCCustomEvent) => void; - "onLifecycleUpdate"?: (event: LifecycleBasicCCustomEvent) => void; - /** - * @default '' - */ - "value"?: string; - } - interface LifecycleNestedA { - } - interface LifecycleNestedB { - } - interface LifecycleNestedC { - } - interface LifecycleUnloadA { - } - interface LifecycleUnloadB { - } - interface LifecycleUnloadRoot { - } - interface LifecycleUpdateA { - } - interface LifecycleUpdateB { - /** - * @default 0 - */ - "value"?: number; - } - interface LifecycleUpdateC { - /** - * @default 0 - */ - "value"?: number; - } - interface ListenJsx { - } - interface ListenJsxRoot { - } - interface ListenReattach { - } - interface ListenWindow { - } - interface MultipleStylesCmp { - } - interface MyComponent { - } - interface NoDelegatesFocus { - } - interface NodeResolution { - } - interface PageList { - /** - * @default null - */ - "lastPage"?: number | null; - } - interface PageListItem { - /** - * Set the number to be displayed. - * @default false - */ - "active"?: boolean; - /** - * Set the number to be displayed. - */ - "label": number; - } - interface ParentReflectNanAttribute { - } - interface ParentWithReflectChild { - } - interface PartSsrShadowCmp { - "selected"?: boolean; - } - interface PartWrapSsrShadowCmp { - "selected"?: boolean; - } - interface RadioGroupBlurTest { - } - interface RefAttrOrder { - } - interface ReflectNanAttribute { - "val"?: number; - } - interface ReflectNanAttributeHyphen { - "valNum"?: number; - } - interface ReflectToAttr { - /** - * @default false - */ - "bool"?: boolean; - /** - * @default false - */ - "disabled"?: boolean; - "dynamicNu"?: number; - "dynamicStr"?: string; - /** - * @default 2 - */ - "nu"?: number; - /** - * @default null - */ - "null"?: string | null; - /** - * @default true - */ - "otherBool"?: boolean; - /** - * @default 'single' - */ - "str"?: string; - "undef"?: string; - } - interface RemoveChildPatch { - } - interface ReparentStyleNoVars { - } - interface ReparentStyleWithVars { - } - interface SassCmp { - } - interface ScopedAddRemoveClasses { - "items"?: Item[]; - "selectedItems"?: number[]; - } - interface ScopedBasic { - } - interface ScopedBasicRoot { - } - interface ScopedConditional { - /** - * @default false - */ - "renderHello"?: boolean; - } - interface ScopedSlotAppendAndPrepend { - } - interface ScopedSlotAssignedMethods { - } - interface ScopedSlotChildInsertAdjacent { - } - interface ScopedSlotChildren { - } - interface ScopedSlotInsertbefore { - } - interface ScopedSlotInsertionOrderAfterInteraction { - } - interface ScopedSlotSlotchange { - /** - * @default [] - */ - "slotEventCatch"?: { event: Event; assignedNodes: Node[] }[]; - } - interface ScopedSlotSlotchangeWrap { - /** - * @default false - */ - "swapSlotContent"?: boolean; - } - interface ScopedSsrChildCmp { - } - interface ScopedSsrParentCmp { - } - interface ShadowDomArray { - /** - * @default [] - */ - "values"?: number[]; - } - interface ShadowDomArrayRoot { - } - interface ShadowDomBasic { - } - interface ShadowDomBasicRoot { - } - interface ShadowDomMode { - /** - * The mode determines which platform styles to use. - */ - "colormode"?: string; - } - interface ShadowDomSlotNested { - "i"?: number; - } - interface ShadowDomSlotNestedRoot { - } - interface ShadowSsrChildCmp { - } - interface ShadowSsrParentCmp { - } - interface SlotArrayBasic { - } - interface SlotArrayComplex { - } - interface SlotArrayComplexRoot { - } - interface SlotArrayTop { - } - interface SlotBasic { - } - interface SlotBasicOrder { - } - interface SlotBasicOrderRoot { - } - interface SlotBasicRoot { - } - interface SlotChildrenRoot { - } - interface SlotConditionalRendering { - } - interface SlotDynamicNameChangeScoped { - /** - * @default 'greeting' - */ - "slotName"?: string; - } - interface SlotDynamicNameChangeShadow { - /** - * @default 'greeting' - */ - "slotName"?: string; - } - interface SlotDynamicScopedList { - /** - * @default [] - */ - "items"?: Array; - } - interface SlotDynamicShadowList { - /** - * @default [] - */ - "items"?: Array; - } - interface SlotDynamicWrapper { - /** - * @default 'section' - */ - "tag"?: string; - } - interface SlotDynamicWrapperRoot { - } - interface SlotFallback { - /** - * @default 0 - */ - "inc"?: number; - } - interface SlotFallbackRoot { - } - interface SlotForwardChildFallback { - "label"?: string; - } - interface SlotForwardRoot { - "label"?: string; - } - interface SlotHideContentOpen { - /** - * @default false - */ - "enabled"?: boolean; - } - interface SlotHideContentScoped { - /** - * @default false - */ - "enabled"?: boolean; - } - interface SlotHtml { - /** - * @default 0 - */ - "inc"?: number; - } - interface SlotLightDomContent { - } - interface SlotLightDomRoot { - } - interface SlotLightList { - } - interface SlotLightScopedList { - } - interface SlotListLightRoot { - /** - * @default [] - */ - "items"?: string[]; - } - interface SlotListLightScopedRoot { - /** - * @default [] - */ - "items"?: string[]; - } - interface SlotMapOrder { - } - interface SlotMapOrderRoot { - } - interface SlotNestedDefaultOrderChild { - "state"?: boolean; - } - interface SlotNestedDefaultOrderParent { - } - interface SlotNestedDynamicChild { - } - interface SlotNestedDynamicParent { - } - interface SlotNestedDynamicWrapper { - } - interface SlotNestedOrderChild { - } - interface SlotNestedOrderParent { - } - interface SlotNgIf { - } - interface SlotNoDefault { - } - interface SlotParentTagChange { - /** - * @default 'p' - */ - "element"?: string; - } - interface SlotParentTagChangeRoot { - /** - * @default 'p' - */ - "element"?: string; - } - interface SlotReorder { - /** - * @default false - */ - "reordered"?: boolean; - } - interface SlotReorderRoot { - } - interface SlotReplaceWrapper { - "href"?: string; - } - interface SlotReplaceWrapperRoot { - } - interface SlottedCss { - } - interface SlowSsrProp { - /** - * @default [] - */ - "anArray"?: never[]; - } - interface SsrOrderCmp { - } - interface SsrOrderWrapCmp { - } - interface SsrShadowCmp { - "selected"?: boolean; - } - interface StaticDecoratedMembers { - } - interface StaticMembers { - } - interface StaticMembersSeparateExport { - } - interface StaticMembersSeparateInitializer { - } - interface StaticStyles { - } - interface StencilSibling { - } - interface SvgAttr { - } - interface SvgClass { - } - interface Tag3dComponent { - } - interface Tag88 { + interface CmpTextGreen { } interface TestSvg { } - interface TextContentPatchScoped { - } - interface TextContentPatchScopedWithSlot { - } - interface TsTargetProps { - /** - * @default 'basicProp' - */ - "basicProp"?: string; - "decoratedGetterSetterProp"?: number; - /** - * @default -10 - */ - "decoratedProp"?: number; - "dynamicLifecycle"?: string[]; - } - interface WatchNativeAttributes { - } - interface WatchNativeAttributesNoMembers { - } - interface WrapSsrShadowCmp { - "selected"?: boolean; - } interface IntrinsicElements { "app-root": AppRoot; - "async-rerender": AsyncRerender; - "attribute-basic": AttributeBasic; - "attribute-basic-root": AttributeBasicRoot; - "attribute-boolean": AttributeBoolean; - "attribute-boolean-root": AttributeBooleanRoot; - "attribute-complex": AttributeComplex; - "attribute-host": AttributeHost; - "attribute-html-root": AttributeHtmlRoot; - "bad-shared-jsx": BadSharedJsx; - "build-data": BuildData; - "child-reflect-nan-attribute": ChildReflectNanAttribute; - "child-with-reflection": ChildWithReflection; "cmp-a": CmpA; - "cmp-avatar": CmpAvatar; "cmp-b": CmpB; "cmp-c": CmpC; "cmp-client-scoped": CmpClientScoped; "cmp-client-shadow": CmpClientShadow; "cmp-d": CmpD; - "cmp-label": CmpLabel; - "cmp-label-with-slot-sibling": CmpLabelWithSlotSibling; - "cmp-level-1": CmpLevel1; - "cmp-level-2": CmpLevel2; - "cmp-level-3": CmpLevel3; "cmp-scoped-a": CmpScopedA; "cmp-scoped-b": CmpScopedB; - "cmp-slotted-parentnode": CmpSlottedParentnode; "cmp-text-blue": CmpTextBlue; "cmp-text-green": CmpTextGreen; - "complex-properties": ComplexProperties; - "computed-properties-prop-decorator": ComputedPropertiesPropDecorator; - "computed-properties-prop-decorator-reflect": ComputedPropertiesPropDecoratorReflect; - "computed-properties-state-decorator": ComputedPropertiesStateDecorator; - "computed-properties-watch-decorator": ComputedPropertiesWatchDecorator; - "conditional-basic": ConditionalBasic; - "conditional-rerender": ConditionalRerender; - "conditional-rerender-root": ConditionalRerenderRoot; - "css-cmp": CssCmp; - "css-variables-no-encapsulation": CssVariablesNoEncapsulation; - "css-variables-shadow-dom": CssVariablesShadowDom; - "custom-element-child": CustomElementChild; - "custom-element-child-different-name-than-class": CustomElementChildDifferentNameThanClass; - "custom-element-nested-child": CustomElementNestedChild; - "custom-element-root": CustomElementRoot; - "custom-element-root-different-name-than-class": CustomElementRootDifferentNameThanClass; - "custom-elements-delegates-focus": CustomElementsDelegatesFocus; - "custom-elements-hierarchy-lifecycle-child": CustomElementsHierarchyLifecycleChild; - "custom-elements-hierarchy-lifecycle-parent": CustomElementsHierarchyLifecycleParent; - "custom-elements-no-delegates-focus": CustomElementsNoDelegatesFocus; - "custom-event-root": CustomEventRoot; - "custom-svg-element": CustomSvgElement; - "delegates-focus": DelegatesFocus; - "dom-reattach": DomReattach; - "dom-reattach-clone": DomReattachClone; - "dom-reattach-clone-deep-slot": DomReattachCloneDeepSlot; - "dom-reattach-clone-host": DomReattachCloneHost; - "dsd-cmp": DsdCmp; - "dynamic-css-variable": DynamicCssVariable; - "dynamic-import": DynamicImport; - "es5-addclass-svg": Es5AddclassSvg; - "esm-import": EsmImport; - "event-basic": EventBasic; - "event-custom-type": EventCustomType; - "event-listener-capture": EventListenerCapture; - "event-re-register": EventReRegister; - "extended-cmp": ExtendedCmp; - "extends-cmp-cmp": ExtendsCmpCmp; - "extends-external": ExtendsExternal; - "extends-mixin": ExtendsMixin; - "external-import-a": ExternalImportA; - "external-import-b": ExternalImportB; - "external-import-c": ExternalImportC; - "factory-jsx": FactoryJsx; - "form-associated": FormAssociated; - "form-associated-prop-check": FormAssociatedPropCheck; - "global-styles": GlobalStyles; - "host-attr-override": HostAttrOverride; - "image-import": ImageImport; - "import-aliasing": ImportAliasing; - "init-css-root": InitCssRoot; - "input-basic-root": InputBasicRoot; - "ion-child": IonChild; - "ion-host": IonHost; - "ion-parent": IonParent; - "ion-radio": IonRadio; - "ion-radio-group": IonRadioGroup; - "json-basic": JsonBasic; - "key-reorder": KeyReorder; - "lifecycle-async-a": LifecycleAsyncA; - "lifecycle-async-b": LifecycleAsyncB; - "lifecycle-async-c": LifecycleAsyncC; - "lifecycle-basic-a": LifecycleBasicA; - "lifecycle-basic-b": LifecycleBasicB; - "lifecycle-basic-c": LifecycleBasicC; - "lifecycle-nested-a": LifecycleNestedA; - "lifecycle-nested-b": LifecycleNestedB; - "lifecycle-nested-c": LifecycleNestedC; - "lifecycle-unload-a": LifecycleUnloadA; - "lifecycle-unload-b": LifecycleUnloadB; - "lifecycle-unload-root": LifecycleUnloadRoot; - "lifecycle-update-a": LifecycleUpdateA; - "lifecycle-update-b": LifecycleUpdateB; - "lifecycle-update-c": LifecycleUpdateC; - "listen-jsx": ListenJsx; - "listen-jsx-root": ListenJsxRoot; - "listen-reattach": ListenReattach; - "listen-window": ListenWindow; - "multiple-styles-cmp": MultipleStylesCmp; - "my-component": MyComponent; - "no-delegates-focus": NoDelegatesFocus; - "node-resolution": NodeResolution; - "page-list": PageList; - "page-list-item": PageListItem; - "parent-reflect-nan-attribute": ParentReflectNanAttribute; - "parent-with-reflect-child": ParentWithReflectChild; - "part-ssr-shadow-cmp": PartSsrShadowCmp; - "part-wrap-ssr-shadow-cmp": PartWrapSsrShadowCmp; - "radio-group-blur-test": RadioGroupBlurTest; - "ref-attr-order": RefAttrOrder; - "reflect-nan-attribute": ReflectNanAttribute; - "reflect-nan-attribute-hyphen": ReflectNanAttributeHyphen; - "reflect-to-attr": ReflectToAttr; - "remove-child-patch": RemoveChildPatch; - "reparent-style-no-vars": ReparentStyleNoVars; - "reparent-style-with-vars": ReparentStyleWithVars; - "sass-cmp": SassCmp; - "scoped-add-remove-classes": ScopedAddRemoveClasses; - "scoped-basic": ScopedBasic; - "scoped-basic-root": ScopedBasicRoot; - "scoped-conditional": ScopedConditional; - "scoped-slot-append-and-prepend": ScopedSlotAppendAndPrepend; - "scoped-slot-assigned-methods": ScopedSlotAssignedMethods; - "scoped-slot-child-insert-adjacent": ScopedSlotChildInsertAdjacent; - "scoped-slot-children": ScopedSlotChildren; - "scoped-slot-insertbefore": ScopedSlotInsertbefore; - "scoped-slot-insertion-order-after-interaction": ScopedSlotInsertionOrderAfterInteraction; - "scoped-slot-slotchange": ScopedSlotSlotchange; - "scoped-slot-slotchange-wrap": ScopedSlotSlotchangeWrap; - "scoped-ssr-child-cmp": ScopedSsrChildCmp; - "scoped-ssr-parent-cmp": ScopedSsrParentCmp; - "shadow-dom-array": ShadowDomArray; - "shadow-dom-array-root": ShadowDomArrayRoot; - "shadow-dom-basic": ShadowDomBasic; - "shadow-dom-basic-root": ShadowDomBasicRoot; - "shadow-dom-mode": ShadowDomMode; - "shadow-dom-slot-nested": ShadowDomSlotNested; - "shadow-dom-slot-nested-root": ShadowDomSlotNestedRoot; - "shadow-ssr-child-cmp": ShadowSsrChildCmp; - "shadow-ssr-parent-cmp": ShadowSsrParentCmp; - "slot-array-basic": SlotArrayBasic; - "slot-array-complex": SlotArrayComplex; - "slot-array-complex-root": SlotArrayComplexRoot; - "slot-array-top": SlotArrayTop; - "slot-basic": SlotBasic; - "slot-basic-order": SlotBasicOrder; - "slot-basic-order-root": SlotBasicOrderRoot; - "slot-basic-root": SlotBasicRoot; - "slot-children-root": SlotChildrenRoot; - "slot-conditional-rendering": SlotConditionalRendering; - "slot-dynamic-name-change-scoped": SlotDynamicNameChangeScoped; - "slot-dynamic-name-change-shadow": SlotDynamicNameChangeShadow; - "slot-dynamic-scoped-list": SlotDynamicScopedList; - "slot-dynamic-shadow-list": SlotDynamicShadowList; - "slot-dynamic-wrapper": SlotDynamicWrapper; - "slot-dynamic-wrapper-root": SlotDynamicWrapperRoot; - "slot-fallback": SlotFallback; - "slot-fallback-root": SlotFallbackRoot; - "slot-forward-child-fallback": SlotForwardChildFallback; - "slot-forward-root": SlotForwardRoot; - "slot-hide-content-open": SlotHideContentOpen; - "slot-hide-content-scoped": SlotHideContentScoped; - "slot-html": SlotHtml; - "slot-light-dom-content": SlotLightDomContent; - "slot-light-dom-root": SlotLightDomRoot; - "slot-light-list": SlotLightList; - "slot-light-scoped-list": SlotLightScopedList; - "slot-list-light-root": SlotListLightRoot; - "slot-list-light-scoped-root": SlotListLightScopedRoot; - "slot-map-order": SlotMapOrder; - "slot-map-order-root": SlotMapOrderRoot; - "slot-nested-default-order-child": SlotNestedDefaultOrderChild; - "slot-nested-default-order-parent": SlotNestedDefaultOrderParent; - "slot-nested-dynamic-child": SlotNestedDynamicChild; - "slot-nested-dynamic-parent": SlotNestedDynamicParent; - "slot-nested-dynamic-wrapper": SlotNestedDynamicWrapper; - "slot-nested-order-child": SlotNestedOrderChild; - "slot-nested-order-parent": SlotNestedOrderParent; - "slot-ng-if": SlotNgIf; - "slot-no-default": SlotNoDefault; - "slot-parent-tag-change": SlotParentTagChange; - "slot-parent-tag-change-root": SlotParentTagChangeRoot; - "slot-reorder": SlotReorder; - "slot-reorder-root": SlotReorderRoot; - "slot-replace-wrapper": SlotReplaceWrapper; - "slot-replace-wrapper-root": SlotReplaceWrapperRoot; - "slotted-css": SlottedCss; - "slow-ssr-prop": SlowSsrProp; - "ssr-order-cmp": SsrOrderCmp; - "ssr-order-wrap-cmp": SsrOrderWrapCmp; - "ssr-shadow-cmp": SsrShadowCmp; - "static-decorated-members": StaticDecoratedMembers; - "static-members": StaticMembers; - "static-members-separate-export": StaticMembersSeparateExport; - "static-members-separate-initializer": StaticMembersSeparateInitializer; - "static-styles": StaticStyles; - "stencil-sibling": StencilSibling; - "svg-attr": SvgAttr; - "svg-class": SvgClass; - "tag-3d-component": Tag3dComponent; - "tag-88": Tag88; "test-svg": TestSvg; - "text-content-patch-scoped": TextContentPatchScoped; - "text-content-patch-scoped-with-slot": TextContentPatchScopedWithSlot; - "ts-target-props": TsTargetProps; - "watch-native-attributes": WatchNativeAttributes; - "watch-native-attributes-no-members": WatchNativeAttributesNoMembers; - "wrap-ssr-shadow-cmp": WrapSsrShadowCmp; } } export { LocalJSX as JSX }; @@ -3558,223 +172,17 @@ declare module "@stencil/core" { export namespace JSX { interface IntrinsicElements { "app-root": LocalJSX.AppRoot & JSXBase.HTMLAttributes; - "async-rerender": LocalJSX.AsyncRerender & JSXBase.HTMLAttributes; - "attribute-basic": LocalJSX.AttributeBasic & JSXBase.HTMLAttributes; - "attribute-basic-root": LocalJSX.AttributeBasicRoot & JSXBase.HTMLAttributes; - "attribute-boolean": LocalJSX.AttributeBoolean & JSXBase.HTMLAttributes; - "attribute-boolean-root": LocalJSX.AttributeBooleanRoot & JSXBase.HTMLAttributes; - "attribute-complex": LocalJSX.AttributeComplex & JSXBase.HTMLAttributes; - "attribute-host": LocalJSX.AttributeHost & JSXBase.HTMLAttributes; - "attribute-html-root": LocalJSX.AttributeHtmlRoot & JSXBase.HTMLAttributes; - "bad-shared-jsx": LocalJSX.BadSharedJsx & JSXBase.HTMLAttributes; - "build-data": LocalJSX.BuildData & JSXBase.HTMLAttributes; - "child-reflect-nan-attribute": LocalJSX.ChildReflectNanAttribute & JSXBase.HTMLAttributes; - "child-with-reflection": LocalJSX.ChildWithReflection & JSXBase.HTMLAttributes; "cmp-a": LocalJSX.CmpA & JSXBase.HTMLAttributes; - "cmp-avatar": LocalJSX.CmpAvatar & JSXBase.HTMLAttributes; "cmp-b": LocalJSX.CmpB & JSXBase.HTMLAttributes; "cmp-c": LocalJSX.CmpC & JSXBase.HTMLAttributes; "cmp-client-scoped": LocalJSX.CmpClientScoped & JSXBase.HTMLAttributes; "cmp-client-shadow": LocalJSX.CmpClientShadow & JSXBase.HTMLAttributes; "cmp-d": LocalJSX.CmpD & JSXBase.HTMLAttributes; - "cmp-label": LocalJSX.CmpLabel & JSXBase.HTMLAttributes; - "cmp-label-with-slot-sibling": LocalJSX.CmpLabelWithSlotSibling & JSXBase.HTMLAttributes; - "cmp-level-1": LocalJSX.CmpLevel1 & JSXBase.HTMLAttributes; - "cmp-level-2": LocalJSX.CmpLevel2 & JSXBase.HTMLAttributes; - "cmp-level-3": LocalJSX.CmpLevel3 & JSXBase.HTMLAttributes; "cmp-scoped-a": LocalJSX.CmpScopedA & JSXBase.HTMLAttributes; "cmp-scoped-b": LocalJSX.CmpScopedB & JSXBase.HTMLAttributes; - "cmp-slotted-parentnode": LocalJSX.CmpSlottedParentnode & JSXBase.HTMLAttributes; "cmp-text-blue": LocalJSX.CmpTextBlue & JSXBase.HTMLAttributes; "cmp-text-green": LocalJSX.CmpTextGreen & JSXBase.HTMLAttributes; - "complex-properties": LocalJSX.ComplexProperties & JSXBase.HTMLAttributes; - "computed-properties-prop-decorator": LocalJSX.ComputedPropertiesPropDecorator & JSXBase.HTMLAttributes; - "computed-properties-prop-decorator-reflect": LocalJSX.ComputedPropertiesPropDecoratorReflect & JSXBase.HTMLAttributes; - "computed-properties-state-decorator": LocalJSX.ComputedPropertiesStateDecorator & JSXBase.HTMLAttributes; - "computed-properties-watch-decorator": LocalJSX.ComputedPropertiesWatchDecorator & JSXBase.HTMLAttributes; - "conditional-basic": LocalJSX.ConditionalBasic & JSXBase.HTMLAttributes; - "conditional-rerender": LocalJSX.ConditionalRerender & JSXBase.HTMLAttributes; - "conditional-rerender-root": LocalJSX.ConditionalRerenderRoot & JSXBase.HTMLAttributes; - "css-cmp": LocalJSX.CssCmp & JSXBase.HTMLAttributes; - "css-variables-no-encapsulation": LocalJSX.CssVariablesNoEncapsulation & JSXBase.HTMLAttributes; - "css-variables-shadow-dom": LocalJSX.CssVariablesShadowDom & JSXBase.HTMLAttributes; - "custom-element-child": LocalJSX.CustomElementChild & JSXBase.HTMLAttributes; - "custom-element-child-different-name-than-class": LocalJSX.CustomElementChildDifferentNameThanClass & JSXBase.HTMLAttributes; - "custom-element-nested-child": LocalJSX.CustomElementNestedChild & JSXBase.HTMLAttributes; - "custom-element-root": LocalJSX.CustomElementRoot & JSXBase.HTMLAttributes; - "custom-element-root-different-name-than-class": LocalJSX.CustomElementRootDifferentNameThanClass & JSXBase.HTMLAttributes; - "custom-elements-delegates-focus": LocalJSX.CustomElementsDelegatesFocus & JSXBase.HTMLAttributes; - "custom-elements-hierarchy-lifecycle-child": LocalJSX.CustomElementsHierarchyLifecycleChild & JSXBase.HTMLAttributes; - "custom-elements-hierarchy-lifecycle-parent": LocalJSX.CustomElementsHierarchyLifecycleParent & JSXBase.HTMLAttributes; - "custom-elements-no-delegates-focus": LocalJSX.CustomElementsNoDelegatesFocus & JSXBase.HTMLAttributes; - "custom-event-root": LocalJSX.CustomEventRoot & JSXBase.HTMLAttributes; - "custom-svg-element": LocalJSX.CustomSvgElement & JSXBase.HTMLAttributes; - "delegates-focus": LocalJSX.DelegatesFocus & JSXBase.HTMLAttributes; - "dom-reattach": LocalJSX.DomReattach & JSXBase.HTMLAttributes; - "dom-reattach-clone": LocalJSX.DomReattachClone & JSXBase.HTMLAttributes; - "dom-reattach-clone-deep-slot": LocalJSX.DomReattachCloneDeepSlot & JSXBase.HTMLAttributes; - "dom-reattach-clone-host": LocalJSX.DomReattachCloneHost & JSXBase.HTMLAttributes; - "dsd-cmp": LocalJSX.DsdCmp & JSXBase.HTMLAttributes; - "dynamic-css-variable": LocalJSX.DynamicCssVariable & JSXBase.HTMLAttributes; - "dynamic-import": LocalJSX.DynamicImport & JSXBase.HTMLAttributes; - "es5-addclass-svg": LocalJSX.Es5AddclassSvg & JSXBase.HTMLAttributes; - "esm-import": LocalJSX.EsmImport & JSXBase.HTMLAttributes; - "event-basic": LocalJSX.EventBasic & JSXBase.HTMLAttributes; - "event-custom-type": LocalJSX.EventCustomType & JSXBase.HTMLAttributes; - "event-listener-capture": LocalJSX.EventListenerCapture & JSXBase.HTMLAttributes; - "event-re-register": LocalJSX.EventReRegister & JSXBase.HTMLAttributes; - "extended-cmp": LocalJSX.ExtendedCmp & JSXBase.HTMLAttributes; - "extends-cmp-cmp": LocalJSX.ExtendsCmpCmp & JSXBase.HTMLAttributes; - "extends-external": LocalJSX.ExtendsExternal & JSXBase.HTMLAttributes; - "extends-mixin": LocalJSX.ExtendsMixin & JSXBase.HTMLAttributes; - "external-import-a": LocalJSX.ExternalImportA & JSXBase.HTMLAttributes; - "external-import-b": LocalJSX.ExternalImportB & JSXBase.HTMLAttributes; - "external-import-c": LocalJSX.ExternalImportC & JSXBase.HTMLAttributes; - "factory-jsx": LocalJSX.FactoryJsx & JSXBase.HTMLAttributes; - "form-associated": LocalJSX.FormAssociated & JSXBase.HTMLAttributes; - "form-associated-prop-check": LocalJSX.FormAssociatedPropCheck & JSXBase.HTMLAttributes; - "global-styles": LocalJSX.GlobalStyles & JSXBase.HTMLAttributes; - "host-attr-override": LocalJSX.HostAttrOverride & JSXBase.HTMLAttributes; - "image-import": LocalJSX.ImageImport & JSXBase.HTMLAttributes; - "import-aliasing": LocalJSX.ImportAliasing & JSXBase.HTMLAttributes; - "init-css-root": LocalJSX.InitCssRoot & JSXBase.HTMLAttributes; - "input-basic-root": LocalJSX.InputBasicRoot & JSXBase.HTMLAttributes; - "ion-child": LocalJSX.IonChild & JSXBase.HTMLAttributes; - "ion-host": LocalJSX.IonHost & JSXBase.HTMLAttributes; - "ion-parent": LocalJSX.IonParent & JSXBase.HTMLAttributes; - "ion-radio": LocalJSX.IonRadio & JSXBase.HTMLAttributes; - "ion-radio-group": LocalJSX.IonRadioGroup & JSXBase.HTMLAttributes; - "json-basic": LocalJSX.JsonBasic & JSXBase.HTMLAttributes; - "key-reorder": LocalJSX.KeyReorder & JSXBase.HTMLAttributes; - "lifecycle-async-a": LocalJSX.LifecycleAsyncA & JSXBase.HTMLAttributes; - "lifecycle-async-b": LocalJSX.LifecycleAsyncB & JSXBase.HTMLAttributes; - "lifecycle-async-c": LocalJSX.LifecycleAsyncC & JSXBase.HTMLAttributes; - "lifecycle-basic-a": LocalJSX.LifecycleBasicA & JSXBase.HTMLAttributes; - "lifecycle-basic-b": LocalJSX.LifecycleBasicB & JSXBase.HTMLAttributes; - "lifecycle-basic-c": LocalJSX.LifecycleBasicC & JSXBase.HTMLAttributes; - "lifecycle-nested-a": LocalJSX.LifecycleNestedA & JSXBase.HTMLAttributes; - "lifecycle-nested-b": LocalJSX.LifecycleNestedB & JSXBase.HTMLAttributes; - "lifecycle-nested-c": LocalJSX.LifecycleNestedC & JSXBase.HTMLAttributes; - "lifecycle-unload-a": LocalJSX.LifecycleUnloadA & JSXBase.HTMLAttributes; - "lifecycle-unload-b": LocalJSX.LifecycleUnloadB & JSXBase.HTMLAttributes; - "lifecycle-unload-root": LocalJSX.LifecycleUnloadRoot & JSXBase.HTMLAttributes; - "lifecycle-update-a": LocalJSX.LifecycleUpdateA & JSXBase.HTMLAttributes; - "lifecycle-update-b": LocalJSX.LifecycleUpdateB & JSXBase.HTMLAttributes; - "lifecycle-update-c": LocalJSX.LifecycleUpdateC & JSXBase.HTMLAttributes; - "listen-jsx": LocalJSX.ListenJsx & JSXBase.HTMLAttributes; - "listen-jsx-root": LocalJSX.ListenJsxRoot & JSXBase.HTMLAttributes; - "listen-reattach": LocalJSX.ListenReattach & JSXBase.HTMLAttributes; - "listen-window": LocalJSX.ListenWindow & JSXBase.HTMLAttributes; - "multiple-styles-cmp": LocalJSX.MultipleStylesCmp & JSXBase.HTMLAttributes; - "my-component": LocalJSX.MyComponent & JSXBase.HTMLAttributes; - "no-delegates-focus": LocalJSX.NoDelegatesFocus & JSXBase.HTMLAttributes; - "node-resolution": LocalJSX.NodeResolution & JSXBase.HTMLAttributes; - "page-list": LocalJSX.PageList & JSXBase.HTMLAttributes; - "page-list-item": LocalJSX.PageListItem & JSXBase.HTMLAttributes; - "parent-reflect-nan-attribute": LocalJSX.ParentReflectNanAttribute & JSXBase.HTMLAttributes; - "parent-with-reflect-child": LocalJSX.ParentWithReflectChild & JSXBase.HTMLAttributes; - "part-ssr-shadow-cmp": LocalJSX.PartSsrShadowCmp & JSXBase.HTMLAttributes; - "part-wrap-ssr-shadow-cmp": LocalJSX.PartWrapSsrShadowCmp & JSXBase.HTMLAttributes; - "radio-group-blur-test": LocalJSX.RadioGroupBlurTest & JSXBase.HTMLAttributes; - "ref-attr-order": LocalJSX.RefAttrOrder & JSXBase.HTMLAttributes; - "reflect-nan-attribute": LocalJSX.ReflectNanAttribute & JSXBase.HTMLAttributes; - "reflect-nan-attribute-hyphen": LocalJSX.ReflectNanAttributeHyphen & JSXBase.HTMLAttributes; - "reflect-to-attr": LocalJSX.ReflectToAttr & JSXBase.HTMLAttributes; - "remove-child-patch": LocalJSX.RemoveChildPatch & JSXBase.HTMLAttributes; - "reparent-style-no-vars": LocalJSX.ReparentStyleNoVars & JSXBase.HTMLAttributes; - "reparent-style-with-vars": LocalJSX.ReparentStyleWithVars & JSXBase.HTMLAttributes; - "sass-cmp": LocalJSX.SassCmp & JSXBase.HTMLAttributes; - "scoped-add-remove-classes": LocalJSX.ScopedAddRemoveClasses & JSXBase.HTMLAttributes; - "scoped-basic": LocalJSX.ScopedBasic & JSXBase.HTMLAttributes; - "scoped-basic-root": LocalJSX.ScopedBasicRoot & JSXBase.HTMLAttributes; - "scoped-conditional": LocalJSX.ScopedConditional & JSXBase.HTMLAttributes; - "scoped-slot-append-and-prepend": LocalJSX.ScopedSlotAppendAndPrepend & JSXBase.HTMLAttributes; - "scoped-slot-assigned-methods": LocalJSX.ScopedSlotAssignedMethods & JSXBase.HTMLAttributes; - "scoped-slot-child-insert-adjacent": LocalJSX.ScopedSlotChildInsertAdjacent & JSXBase.HTMLAttributes; - "scoped-slot-children": LocalJSX.ScopedSlotChildren & JSXBase.HTMLAttributes; - "scoped-slot-insertbefore": LocalJSX.ScopedSlotInsertbefore & JSXBase.HTMLAttributes; - "scoped-slot-insertion-order-after-interaction": LocalJSX.ScopedSlotInsertionOrderAfterInteraction & JSXBase.HTMLAttributes; - "scoped-slot-slotchange": LocalJSX.ScopedSlotSlotchange & JSXBase.HTMLAttributes; - "scoped-slot-slotchange-wrap": LocalJSX.ScopedSlotSlotchangeWrap & JSXBase.HTMLAttributes; - "scoped-ssr-child-cmp": LocalJSX.ScopedSsrChildCmp & JSXBase.HTMLAttributes; - "scoped-ssr-parent-cmp": LocalJSX.ScopedSsrParentCmp & JSXBase.HTMLAttributes; - "shadow-dom-array": LocalJSX.ShadowDomArray & JSXBase.HTMLAttributes; - "shadow-dom-array-root": LocalJSX.ShadowDomArrayRoot & JSXBase.HTMLAttributes; - "shadow-dom-basic": LocalJSX.ShadowDomBasic & JSXBase.HTMLAttributes; - "shadow-dom-basic-root": LocalJSX.ShadowDomBasicRoot & JSXBase.HTMLAttributes; - "shadow-dom-mode": LocalJSX.ShadowDomMode & JSXBase.HTMLAttributes; - "shadow-dom-slot-nested": LocalJSX.ShadowDomSlotNested & JSXBase.HTMLAttributes; - "shadow-dom-slot-nested-root": LocalJSX.ShadowDomSlotNestedRoot & JSXBase.HTMLAttributes; - "shadow-ssr-child-cmp": LocalJSX.ShadowSsrChildCmp & JSXBase.HTMLAttributes; - "shadow-ssr-parent-cmp": LocalJSX.ShadowSsrParentCmp & JSXBase.HTMLAttributes; - "slot-array-basic": LocalJSX.SlotArrayBasic & JSXBase.HTMLAttributes; - "slot-array-complex": LocalJSX.SlotArrayComplex & JSXBase.HTMLAttributes; - "slot-array-complex-root": LocalJSX.SlotArrayComplexRoot & JSXBase.HTMLAttributes; - "slot-array-top": LocalJSX.SlotArrayTop & JSXBase.HTMLAttributes; - "slot-basic": LocalJSX.SlotBasic & JSXBase.HTMLAttributes; - "slot-basic-order": LocalJSX.SlotBasicOrder & JSXBase.HTMLAttributes; - "slot-basic-order-root": LocalJSX.SlotBasicOrderRoot & JSXBase.HTMLAttributes; - "slot-basic-root": LocalJSX.SlotBasicRoot & JSXBase.HTMLAttributes; - "slot-children-root": LocalJSX.SlotChildrenRoot & JSXBase.HTMLAttributes; - "slot-conditional-rendering": LocalJSX.SlotConditionalRendering & JSXBase.HTMLAttributes; - "slot-dynamic-name-change-scoped": LocalJSX.SlotDynamicNameChangeScoped & JSXBase.HTMLAttributes; - "slot-dynamic-name-change-shadow": LocalJSX.SlotDynamicNameChangeShadow & JSXBase.HTMLAttributes; - "slot-dynamic-scoped-list": LocalJSX.SlotDynamicScopedList & JSXBase.HTMLAttributes; - "slot-dynamic-shadow-list": LocalJSX.SlotDynamicShadowList & JSXBase.HTMLAttributes; - "slot-dynamic-wrapper": LocalJSX.SlotDynamicWrapper & JSXBase.HTMLAttributes; - "slot-dynamic-wrapper-root": LocalJSX.SlotDynamicWrapperRoot & JSXBase.HTMLAttributes; - "slot-fallback": LocalJSX.SlotFallback & JSXBase.HTMLAttributes; - "slot-fallback-root": LocalJSX.SlotFallbackRoot & JSXBase.HTMLAttributes; - "slot-forward-child-fallback": LocalJSX.SlotForwardChildFallback & JSXBase.HTMLAttributes; - "slot-forward-root": LocalJSX.SlotForwardRoot & JSXBase.HTMLAttributes; - "slot-hide-content-open": LocalJSX.SlotHideContentOpen & JSXBase.HTMLAttributes; - "slot-hide-content-scoped": LocalJSX.SlotHideContentScoped & JSXBase.HTMLAttributes; - "slot-html": LocalJSX.SlotHtml & JSXBase.HTMLAttributes; - "slot-light-dom-content": LocalJSX.SlotLightDomContent & JSXBase.HTMLAttributes; - "slot-light-dom-root": LocalJSX.SlotLightDomRoot & JSXBase.HTMLAttributes; - "slot-light-list": LocalJSX.SlotLightList & JSXBase.HTMLAttributes; - "slot-light-scoped-list": LocalJSX.SlotLightScopedList & JSXBase.HTMLAttributes; - "slot-list-light-root": LocalJSX.SlotListLightRoot & JSXBase.HTMLAttributes; - "slot-list-light-scoped-root": LocalJSX.SlotListLightScopedRoot & JSXBase.HTMLAttributes; - "slot-map-order": LocalJSX.SlotMapOrder & JSXBase.HTMLAttributes; - "slot-map-order-root": LocalJSX.SlotMapOrderRoot & JSXBase.HTMLAttributes; - "slot-nested-default-order-child": LocalJSX.SlotNestedDefaultOrderChild & JSXBase.HTMLAttributes; - "slot-nested-default-order-parent": LocalJSX.SlotNestedDefaultOrderParent & JSXBase.HTMLAttributes; - "slot-nested-dynamic-child": LocalJSX.SlotNestedDynamicChild & JSXBase.HTMLAttributes; - "slot-nested-dynamic-parent": LocalJSX.SlotNestedDynamicParent & JSXBase.HTMLAttributes; - "slot-nested-dynamic-wrapper": LocalJSX.SlotNestedDynamicWrapper & JSXBase.HTMLAttributes; - "slot-nested-order-child": LocalJSX.SlotNestedOrderChild & JSXBase.HTMLAttributes; - "slot-nested-order-parent": LocalJSX.SlotNestedOrderParent & JSXBase.HTMLAttributes; - "slot-ng-if": LocalJSX.SlotNgIf & JSXBase.HTMLAttributes; - "slot-no-default": LocalJSX.SlotNoDefault & JSXBase.HTMLAttributes; - "slot-parent-tag-change": LocalJSX.SlotParentTagChange & JSXBase.HTMLAttributes; - "slot-parent-tag-change-root": LocalJSX.SlotParentTagChangeRoot & JSXBase.HTMLAttributes; - "slot-reorder": LocalJSX.SlotReorder & JSXBase.HTMLAttributes; - "slot-reorder-root": LocalJSX.SlotReorderRoot & JSXBase.HTMLAttributes; - "slot-replace-wrapper": LocalJSX.SlotReplaceWrapper & JSXBase.HTMLAttributes; - "slot-replace-wrapper-root": LocalJSX.SlotReplaceWrapperRoot & JSXBase.HTMLAttributes; - "slotted-css": LocalJSX.SlottedCss & JSXBase.HTMLAttributes; - "slow-ssr-prop": LocalJSX.SlowSsrProp & JSXBase.HTMLAttributes; - "ssr-order-cmp": LocalJSX.SsrOrderCmp & JSXBase.HTMLAttributes; - "ssr-order-wrap-cmp": LocalJSX.SsrOrderWrapCmp & JSXBase.HTMLAttributes; - "ssr-shadow-cmp": LocalJSX.SsrShadowCmp & JSXBase.HTMLAttributes; - "static-decorated-members": LocalJSX.StaticDecoratedMembers & JSXBase.HTMLAttributes; - "static-members": LocalJSX.StaticMembers & JSXBase.HTMLAttributes; - "static-members-separate-export": LocalJSX.StaticMembersSeparateExport & JSXBase.HTMLAttributes; - "static-members-separate-initializer": LocalJSX.StaticMembersSeparateInitializer & JSXBase.HTMLAttributes; - "static-styles": LocalJSX.StaticStyles & JSXBase.HTMLAttributes; - "stencil-sibling": LocalJSX.StencilSibling & JSXBase.HTMLAttributes; - "svg-attr": LocalJSX.SvgAttr & JSXBase.HTMLAttributes; - "svg-class": LocalJSX.SvgClass & JSXBase.HTMLAttributes; - "tag-3d-component": LocalJSX.Tag3dComponent & JSXBase.HTMLAttributes; - "tag-88": LocalJSX.Tag88 & JSXBase.HTMLAttributes; "test-svg": LocalJSX.TestSvg & JSXBase.HTMLAttributes; - "text-content-patch-scoped": LocalJSX.TextContentPatchScoped & JSXBase.HTMLAttributes; - "text-content-patch-scoped-with-slot": LocalJSX.TextContentPatchScopedWithSlot & JSXBase.HTMLAttributes; - "ts-target-props": LocalJSX.TsTargetProps & JSXBase.HTMLAttributes; - "watch-native-attributes": LocalJSX.WatchNativeAttributes & JSXBase.HTMLAttributes; - "watch-native-attributes-no-members": LocalJSX.WatchNativeAttributesNoMembers & JSXBase.HTMLAttributes; - "wrap-ssr-shadow-cmp": LocalJSX.WrapSsrShadowCmp & JSXBase.HTMLAttributes; } } } From eda7cd0b6624d1790178c90a3c4adda4e99574d2 Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Fri, 29 Aug 2025 17:47:01 +0100 Subject: [PATCH 16/16] chore: test 2 layer extends --- test/wdio/ts-target/components.d.ts | 31 ++++++++++++ .../extends-cmp/extended-cmp-cmp.tsx | 49 +++++++++++++++++++ .../ts-target/extends-cmp/extended-cmp.tsx | 37 ++------------ .../ts-target/extends-mixin/mixin-class.ts | 31 ++---------- .../extends-mixin/mxin-class-parent.ts | 35 +++++++++++++ 5 files changed, 121 insertions(+), 62 deletions(-) create mode 100644 test/wdio/ts-target/extends-cmp/extended-cmp-cmp.tsx create mode 100644 test/wdio/ts-target/extends-mixin/mxin-class-parent.ts diff --git a/test/wdio/ts-target/components.d.ts b/test/wdio/ts-target/components.d.ts index eeab498ef92..b3834b829ad 100644 --- a/test/wdio/ts-target/components.d.ts +++ b/test/wdio/ts-target/components.d.ts @@ -18,6 +18,18 @@ export namespace Components { */ "prop2": string; } + interface ExtendedCmpCmp { + "method1": () => Promise; + "method2": () => Promise; + /** + * @default 'ExtendedCmp text' + */ + "prop1": string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2": string; + } interface ExtendsCmpCmp { "method1": () => Promise; "method2": () => Promise; @@ -74,6 +86,12 @@ declare global { prototype: HTMLExtendedCmpElement; new (): HTMLExtendedCmpElement; }; + interface HTMLExtendedCmpCmpElement extends Components.ExtendedCmpCmp, HTMLStencilElement { + } + var HTMLExtendedCmpCmpElement: { + prototype: HTMLExtendedCmpCmpElement; + new (): HTMLExtendedCmpCmpElement; + }; interface HTMLExtendsCmpCmpElement extends Components.ExtendsCmpCmp, HTMLStencilElement { } var HTMLExtendsCmpCmpElement: { @@ -100,6 +118,7 @@ declare global { }; interface HTMLElementTagNameMap { "extended-cmp": HTMLExtendedCmpElement; + "extended-cmp-cmp": HTMLExtendedCmpCmpElement; "extends-cmp-cmp": HTMLExtendsCmpCmpElement; "extends-external": HTMLExtendsExternalElement; "extends-mixin": HTMLExtendsMixinElement; @@ -117,6 +136,16 @@ declare namespace LocalJSX { */ "prop2"?: string; } + interface ExtendedCmpCmp { + /** + * @default 'ExtendedCmp text' + */ + "prop1"?: string; + /** + * @default 'ExtendedCmp prop2 text' + */ + "prop2"?: string; + } interface ExtendsCmpCmp { /** * @default 'default text' @@ -161,6 +190,7 @@ declare namespace LocalJSX { } interface IntrinsicElements { "extended-cmp": ExtendedCmp; + "extended-cmp-cmp": ExtendedCmpCmp; "extends-cmp-cmp": ExtendsCmpCmp; "extends-external": ExtendsExternal; "extends-mixin": ExtendsMixin; @@ -172,6 +202,7 @@ declare module "@stencil/core" { export namespace JSX { interface IntrinsicElements { "extended-cmp": LocalJSX.ExtendedCmp & JSXBase.HTMLAttributes; + "extended-cmp-cmp": LocalJSX.ExtendedCmpCmp & JSXBase.HTMLAttributes; "extends-cmp-cmp": LocalJSX.ExtendsCmpCmp & JSXBase.HTMLAttributes; "extends-external": LocalJSX.ExtendsExternal & JSXBase.HTMLAttributes; "extends-mixin": LocalJSX.ExtendsMixin & JSXBase.HTMLAttributes; diff --git a/test/wdio/ts-target/extends-cmp/extended-cmp-cmp.tsx b/test/wdio/ts-target/extends-cmp/extended-cmp-cmp.tsx new file mode 100644 index 00000000000..ad1c78804e3 --- /dev/null +++ b/test/wdio/ts-target/extends-cmp/extended-cmp-cmp.tsx @@ -0,0 +1,49 @@ +import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; + +@Component({ + tag: 'extended-cmp-cmp', +}) +export class ExtendedCmpCmp { + @Prop() prop1: string = 'ExtendedCmp text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('extended class handler prop1:', newValue); + } + @Prop() prop2: string = 'ExtendedCmp prop2 text'; + @Watch('prop2') + prop2Changed(newValue: string) { + console.info('extended class handler prop2:', newValue); + } + + @State() state1: string = 'ExtendedCmp state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('extended class handler state1:', newValue); + } + @State() state2: string = 'ExtendedCmp state2 text'; + @Watch('state2') + state2Changed(newValue: string) { + console.info('extended class handler state2:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'ExtendedCmp method1 called'; + } + + @Method() + async method2() { + this.prop1 = 'ExtendedCmp method2 called'; + } + + render() { + return ( +
+

Extended class prop 1: {this.prop1}

+

Extended class prop 2: {this.prop2}

+

Extended class state 1: {this.state1}

+

Extended class state 2: {this.state2}

+
+ ); + } +} diff --git a/test/wdio/ts-target/extends-cmp/extended-cmp.tsx b/test/wdio/ts-target/extends-cmp/extended-cmp.tsx index 7ccd3646c9a..b5153a67aee 100644 --- a/test/wdio/ts-target/extends-cmp/extended-cmp.tsx +++ b/test/wdio/ts-target/extends-cmp/extended-cmp.tsx @@ -1,41 +1,10 @@ -import { Component, h, Prop, State, Method, Watch } from '@stencil/core'; +import { Component, h } from '@stencil/core'; +import { ExtendedCmpCmp } from './extended-cmp-cmp.js'; @Component({ tag: 'extended-cmp', }) -export class ExtendedCmp { - @Prop() prop1: string = 'ExtendedCmp text'; - @Watch('prop1') - prop1Changed(newValue: string) { - console.info('extended class handler prop1:', newValue); - } - @Prop() prop2: string = 'ExtendedCmp prop2 text'; - @Watch('prop2') - prop2Changed(newValue: string) { - console.info('extended class handler prop2:', newValue); - } - - @State() state1: string = 'ExtendedCmp state text'; - @Watch('state1') - state1Changed(newValue: string) { - console.info('extended class handler state1:', newValue); - } - @State() state2: string = 'ExtendedCmp state2 text'; - @Watch('state2') - state2Changed(newValue: string) { - console.info('extended class handler state2:', newValue); - } - - @Method() - async method1() { - this.prop1 = 'ExtendedCmp method1 called'; - } - - @Method() - async method2() { - this.prop1 = 'ExtendedCmp method2 called'; - } - +export class ExtendedCmp extends ExtendedCmpCmp { render() { return (
diff --git a/test/wdio/ts-target/extends-mixin/mixin-class.ts b/test/wdio/ts-target/extends-mixin/mixin-class.ts index 72571ec90f6..9ed93e38520 100644 --- a/test/wdio/ts-target/extends-mixin/mixin-class.ts +++ b/test/wdio/ts-target/extends-mixin/mixin-class.ts @@ -1,35 +1,10 @@ -import { Prop, State, Method, Watch } from '@stencil/core'; +import { Prop, Watch } from '@stencil/core'; +import { MixinParent } from './mxin-class-parent.js'; -export class Mixin { +export class Mixin extends MixinParent { @Prop() prop1: string = 'ExtendedCmp text'; @Watch('prop1') prop1Changed(newValue: string) { console.info('extended class handler prop1:', newValue); } - @Prop() prop2: string = 'ExtendedCmp prop2 text'; - @Watch('prop2') - prop2Changed(newValue: string) { - console.info('extended class handler prop2:', newValue); - } - - @State() state1: string = 'ExtendedCmp state text'; - @Watch('state1') - state1Changed(newValue: string) { - console.info('extended class handler state1:', newValue); - } - @State() state2: string = 'ExtendedCmp state2 text'; - @Watch('state2') - state2Changed(newValue: string) { - console.info('extended class handler state2:', newValue); - } - - @Method() - async method1() { - this.prop1 = 'ExtendedCmp method1 called'; - } - - @Method() - async method2() { - this.prop1 = 'ExtendedCmp method2 called'; - } } diff --git a/test/wdio/ts-target/extends-mixin/mxin-class-parent.ts b/test/wdio/ts-target/extends-mixin/mxin-class-parent.ts new file mode 100644 index 00000000000..96bf3ae3f5b --- /dev/null +++ b/test/wdio/ts-target/extends-mixin/mxin-class-parent.ts @@ -0,0 +1,35 @@ +import { Prop, State, Method, Watch } from '@stencil/core'; + +export class MixinParent { + @Prop() prop1: string = 'ExtendedCmp text'; + @Watch('prop1') + prop1Changed(newValue: string) { + console.info('extended class handler prop1:', newValue); + } + @Prop() prop2: string = 'ExtendedCmp prop2 text'; + @Watch('prop2') + prop2Changed(newValue: string) { + console.info('extended class handler prop2:', newValue); + } + + @State() state1: string = 'ExtendedCmp state text'; + @Watch('state1') + state1Changed(newValue: string) { + console.info('extended class handler state1:', newValue); + } + @State() state2: string = 'ExtendedCmp state2 text'; + @Watch('state2') + state2Changed(newValue: string) { + console.info('extended class handler state2:', newValue); + } + + @Method() + async method1() { + this.prop1 = 'ExtendedCmp method1 called'; + } + + @Method() + async method2() { + this.prop1 = 'ExtendedCmp method2 called'; + } +}