diff --git a/src/runtime/internal/Component.ts b/src/runtime/internal/Component.ts index 3e4801054757..c7695ebf4ca2 100644 --- a/src/runtime/internal/Component.ts +++ b/src/runtime/internal/Component.ts @@ -104,8 +104,24 @@ function make_dirty(component, i) { component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31)); } +function is_svelte_element(component) { + while (component) { + if (component.constructor === SvelteElement) + return true; + component = Object.getPrototypeOf(component); + } + return false; +} + +function find_containing_component(component) { + while (component && !is_svelte_element(component)) { + component = component.parentNode; + } + return component; +} + export function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) { - const parent_component = current_component; + const parent_component = options.customElement ? find_containing_component(component.parentNode) : current_component; set_current_component(component); const $$: T$$ = component.$$ = {