UNPKG

@benev/slate

Version:
50 lines (40 loc) 1.28 kB
import {Context} from "../context.js" import {Shell} from "../parts/shell.js" import {LightElement} from "../../element/silver.js" import {LightComponentRenderer} from "../parts/types.js" import {usekey} from "../parts/use/parts/utils/usekey.js" import {UseLightComponent} from "../parts/use/tailored.js" import {Reactivity, setup_reactivity} from "../parts/setup_reactivity.js" export const prepare_light_component = ( <C extends Context>(shell: Shell<C>) => (renderer: LightComponentRenderer<C>) => ( class extends LightElement { #use = new UseLightComponent( this as LightElement, () => void this.requestUpdate(), shell.context, ) #rend = this.#use[usekey].wrap(() => renderer(this.#use)) #reactivity?: Reactivity<[]> render() { this.updateComplete.then(() => this.#use[usekey].afterRender()) return this.#reactivity?.render() } connectedCallback() { super.connectedCallback() this.#reactivity = setup_reactivity<[]>( this.#rend, () => void this.requestUpdate(), ) this.#use[usekey].reconnect() } disconnectedCallback() { super.disconnectedCallback() if (this.#reactivity) { this.#reactivity.stop() this.#reactivity = undefined } this.#use[usekey].disconnect() } } as typeof LightElement ))