feat(custom-element): support passing custom-element-specific options via 2nd argument of defineCustomElement

This commit is contained in:
Evan You 2024-08-06 15:37:28 +08:00
parent 56c76a8b05
commit 60a88a2b12
No known key found for this signature in database
GPG Key ID: 00E9AB7A6704CE0A
3 changed files with 17 additions and 9 deletions

View File

@ -898,16 +898,20 @@ describe('defineCustomElement', () => {
})
const toggle = ref(true)
const ES = defineCustomElement({
shadowRoot: false,
render() {
return [
renderSlot(this.$slots, 'default'),
toggle.value ? renderSlot(this.$slots, 'named') : null,
renderSlot(this.$slots, 'omitted', {}, () => [h('div', 'fallback')]),
]
const ES = defineCustomElement(
{
render() {
return [
renderSlot(this.$slots, 'default'),
toggle.value ? renderSlot(this.$slots, 'named') : null,
renderSlot(this.$slots, 'omitted', {}, () => [
h('div', 'fallback'),
]),
]
},
},
})
{ shadowRoot: false },
)
customElements.define('my-el-shadowroot-false-slots', ES)
test('should render slots', async () => {

View File

@ -141,6 +141,7 @@ export function defineCustomElement<
Exposed
>
>,
extraOptions?: CustomElementOptions,
): VueElementConstructor<ResolvedProps>
// overload 3: defining a custom element from the returned value of
@ -149,6 +150,7 @@ export function defineCustomElement<
T extends DefineComponent<any, any, any, any>,
>(
options: T,
extraOptions?: CustomElementOptions,
): VueElementConstructor<
T extends DefineComponent<infer P, any, any, any>
? ExtractPropTypes<P>
@ -165,6 +167,7 @@ export function defineCustomElement(
hydrate?: RootHydrateFunction,
): VueElementConstructor {
const Comp = defineComponent(options, extraOptions) as any
if (isPlainObject(Comp)) extend(Comp, extraOptions)
class VueCustomElement extends VueElement {
static def = Comp
constructor(initialProps?: Record<string, any>) {

View File

@ -245,6 +245,7 @@ export {
useShadowRoot,
VueElement,
type VueElementConstructor,
type CustomElementOptions,
} from './apiCustomElement'
// SFC CSS utilities