render,
renderSlot,
useHost,
+ useHostInternals,
useShadowRoot,
} from '../src'
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 = `<my-el-use-host-internals>`
+ const el = container.childNodes[0] as VueElement
+ expect(el._internals?.ariaLive).toBe('polite')
+ })
})
describe('expose', () => {
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
+}