From: daiwei Date: Thu, 17 Oct 2024 03:28:42 +0000 (+0800) Subject: chore: add useHostInternals X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77922fbb25c44a602cd43d741e10276bc26a93d1;p=thirdparty%2Fvuejs%2Fcore.git chore: add useHostInternals --- diff --git a/packages/runtime-dom/__tests__/customElement.spec.ts b/packages/runtime-dom/__tests__/customElement.spec.ts index b1b740d712..cdfcd60215 100644 --- a/packages/runtime-dom/__tests__/customElement.spec.ts +++ b/packages/runtime-dom/__tests__/customElement.spec.ts @@ -17,6 +17,7 @@ import { render, renderSlot, useHost, + useHostInternals, useShadowRoot, } from '../src' @@ -1132,6 +1133,21 @@ describe('defineCustomElement', () => { const style = el.shadowRoot?.querySelector('style')! expect(style.textContent).toBe(`div { color: red; }`) }) + + // wait for jsdom to fix https://github.com/jsdom/jsdom/issues/3732 + test.todo('useHostInternals', async () => { + const Foo = defineCustomElement({ + setup() { + const internals = useHostInternals()! + internals.ariaLive = 'polite' + return () => h('div', 'hello') + }, + }) + customElements.define('my-el-use-host-internals', Foo) + container.innerHTML = `` + const el = container.childNodes[0] as VueElement + expect(el._internals?.ariaLive).toBe('polite') + }) }) describe('expose', () => { diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index bbabda955f..2424257305 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -713,3 +713,12 @@ export function useShadowRoot(): ShadowRoot | null { const el = __DEV__ ? useHost('useShadowRoot') : useHost() return el && el.shadowRoot } + +/** + * Retrieve the ElementInternals of the current custom element. Only usable in setup() + * of a `defineCustomElement` component. + */ +export function useHostInternals(): ElementInternals | null { + const el = __DEV__ ? useHost('useHostInternals') : useHost() + return el && el._internals +} diff --git a/packages/runtime-dom/src/index.ts b/packages/runtime-dom/src/index.ts index ca9a307dd9..b388eac11e 100644 --- a/packages/runtime-dom/src/index.ts +++ b/packages/runtime-dom/src/index.ts @@ -256,6 +256,7 @@ export { defineSSRCustomElement, useShadowRoot, useHost, + useHostInternals, VueElement, type VueElementConstructor, type CustomElementOptions,