diff --git a/.changeset/fix-element-owner-markers.md b/.changeset/fix-element-owner-markers.md new file mode 100644 index 000000000..506c65079 --- /dev/null +++ b/.changeset/fix-element-owner-markers.md @@ -0,0 +1,5 @@ +--- +"solid-element": patch +--- + +Fix owner marker lookup so nested custom elements can inherit context from ancestor host markers as well as assigned slot markers. diff --git a/packages/solid-element/src/index.ts b/packages/solid-element/src/index.ts index 0246f6c49..93bf4159d 100644 --- a/packages/solid-element/src/index.ts +++ b/packages/solid-element/src/index.ts @@ -29,15 +29,13 @@ function createProps(raw: T) { function lookupContext(el: ICustomElement & { _$owner?: any }) { if (el.assignedSlot && el.assignedSlot._$owner) return el.assignedSlot._$owner; let next: Element & { _$owner?: any } = el.parentNode; - while ( - next && - !next._$owner && - !(next.assignedSlot && (next.assignedSlot as Element & { _$owner?: any })._$owner) - ) + while (next) { + if (next._$owner) return next._$owner; + if (next.assignedSlot && (next.assignedSlot as Element & { _$owner?: any })._$owner) + return (next.assignedSlot as Element & { _$owner?: any })._$owner; next = next.parentNode as Element; - return next && next.assignedSlot - ? (next.assignedSlot as Element & { _$owner?: any })._$owner - : el._$owner; + } + return el._$owner; } function withSolid(ComponentType: ComponentType): ComponentType {