import {render} from "lit" import {eve, EveSpec} from "./eve.js" import {attrs} from "../attrs/attrs.js" import {Content} from "../../view/types.js" import {Attrs, Queryable, Renderable} from "../types.js" import {queryAll, queryMaybe, queryRequire} from "./queries.js" export class Dom { #attrs?: Attrs constructor(public element: C) {} in(selectorOrElement: string | E) { return new Dom( (typeof selectorOrElement === "string") ? queryRequire(selectorOrElement, this.element) as E : selectorOrElement ) } require(selector: string) { return queryRequire(selector, this.element) } maybe(selector: string) { return queryMaybe(selector, this.element) } all(selector: string) { return queryAll(selector, this.element) } render(...content: Content[]) { return render(content, this.element as Renderable) } get attrs(): Attrs { return this.#attrs ??= attrs(this.element as HTMLElement) } events(spec: EveSpec) { return eve(this.element, spec) } }