From: edison Date: Thu, 22 Jan 2026 08:47:21 +0000 (+0800) Subject: refactor(runtime-core): replace VueElement import with ComponentCustomElementInterfac... X-Git-Tag: v3.6.0-beta.4~1^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1ccd9fde8f57fe7bd40fdf1345692ab3e6a1fa0;p=thirdparty%2Fvuejs%2Fcore.git refactor(runtime-core): replace VueElement import with ComponentCustomElementInterface (#14348) --- diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 4e1aa5e4d3..050429a66f 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -1257,6 +1257,10 @@ export function isClassComponent(value: unknown): value is ClassComponent { } export interface ComponentCustomElementInterface { + /** + * @internal + */ + _isVueCE: boolean /** * @internal */ @@ -1286,4 +1290,8 @@ export interface ComponentCustomElementInterface { * @internal attached by the nested Teleport when shadowRoot is false. */ _teleportTargets?: Set + /** + * @internal check if shadow root is enabled + */ + _hasShadowRoot(): boolean } diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index d20bb2e817..be7cfccd3d 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -86,7 +86,7 @@ import { isAsyncWrapper } from './apiAsyncComponent' import { isCompatEnabled } from './compat/compatConfig' import { DeprecationTypes } from './compat/compatConfig' import { type TransitionHooks, leaveCbKey } from './components/BaseTransition' -import type { VueElement } from '@vue/runtime-dom' +import type { ComponentCustomElementInterface } from './component' export interface Renderer { render: RootRenderFunction @@ -641,9 +641,10 @@ function baseCreateRenderer( optimized, ) } else { - const customElement = !!(n1.el && (n1.el as VueElement)._isVueCE) - ? (n1.el as VueElement) - : null + const customElement = + n1.el && (n1.el as ComponentCustomElementInterface)._isVueCE + ? (n1.el as ComponentCustomElementInterface) + : null try { if (customElement) { customElement._beginPatch() @@ -1385,11 +1386,7 @@ function baseCreateRenderer( } } else { // custom element style injection - if ( - root.ce && - // @ts-expect-error _def is private - (root.ce as VueElement)._def.shadowRoot !== false - ) { + if (root.ce && root.ce._hasShadowRoot()) { root.ce._injectChildStyle(type) } diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 3487922e2f..9d18e7b221 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -725,6 +725,13 @@ export class VueElement } } + /** + * @internal + */ + _hasShadowRoot(): boolean { + return this._def.shadowRoot !== false + } + /** * @internal */