import { END, UPGRADE } from "../shared/symbols.js";
import { Classes, customElements } from "../interface/custom-element-registry.js";
import { booleanAttribute, stringAttribute } from "../shared/attributes.js";
import { GlobalEvent } from "../interface/event.js";
import { Element } from "../interface/element.js";
//#region node_modules/linkedom/esm/html/element.js
var Level0 = /* @__PURE__ */ new WeakMap();
var level0 = {
	get(element, name) {
		return Level0.has(element) && Level0.get(element)[name] || null;
	},
	set(element, name, value) {
		if (!Level0.has(element)) Level0.set(element, {});
		const handlers = Level0.get(element);
		const type = name.slice(2);
		if (handlers[name]) element.removeEventListener(type, handlers[name], false);
		if (handlers[name] = value) element.addEventListener(type, value, false);
	}
};
/**
* @implements globalThis.HTMLElement
*/
var HTMLElement = class extends Element {
	static get observedAttributes() {
		return [];
	}
	constructor(ownerDocument = null, localName = "") {
		super(ownerDocument, localName);
		const ownerLess = !ownerDocument;
		let options;
		if (ownerLess) {
			const { constructor: Class } = this;
			if (!Classes.has(Class)) throw new Error("unable to initialize this Custom Element");
			({ownerDocument, localName, options} = Classes.get(Class));
		}
		if (ownerDocument[UPGRADE]) {
			const { element, values } = ownerDocument[UPGRADE];
			ownerDocument[UPGRADE] = null;
			for (const [key, value] of values) element[key] = value;
			return element;
		}
		if (ownerLess) {
			this.ownerDocument = this[END].ownerDocument = ownerDocument;
			this.localName = localName;
			customElements.set(this, { connected: false });
			if (options.is) this.setAttribute("is", options.is);
		}
	}
	/* c8 ignore start */
	blur() {
		this.dispatchEvent(new GlobalEvent("blur"));
	}
	click() {
		const clickEvent = new GlobalEvent("click", {
			bubbles: true,
			cancelable: true
		});
		clickEvent.button = 0;
		this.dispatchEvent(clickEvent);
	}
	get accessKeyLabel() {
		const { accessKey } = this;
		return accessKey && `Alt+Shift+${accessKey}`;
	}
	get isContentEditable() {
		return this.hasAttribute("contenteditable");
	}
	get contentEditable() {
		return booleanAttribute.get(this, "contenteditable");
	}
	set contentEditable(value) {
		booleanAttribute.set(this, "contenteditable", value);
	}
	get draggable() {
		return booleanAttribute.get(this, "draggable");
	}
	set draggable(value) {
		booleanAttribute.set(this, "draggable", value);
	}
	get hidden() {
		return booleanAttribute.get(this, "hidden");
	}
	set hidden(value) {
		booleanAttribute.set(this, "hidden", value);
	}
	get spellcheck() {
		return booleanAttribute.get(this, "spellcheck");
	}
	set spellcheck(value) {
		booleanAttribute.set(this, "spellcheck", value);
	}
	get accessKey() {
		return stringAttribute.get(this, "accesskey");
	}
	set accessKey(value) {
		stringAttribute.set(this, "accesskey", value);
	}
	get dir() {
		return stringAttribute.get(this, "dir");
	}
	set dir(value) {
		stringAttribute.set(this, "dir", value);
	}
	get lang() {
		return stringAttribute.get(this, "lang");
	}
	set lang(value) {
		stringAttribute.set(this, "lang", value);
	}
	get title() {
		return stringAttribute.get(this, "title");
	}
	set title(value) {
		stringAttribute.set(this, "title", value);
	}
	get onabort() {
		return level0.get(this, "onabort");
	}
	set onabort(value) {
		level0.set(this, "onabort", value);
	}
	get onblur() {
		return level0.get(this, "onblur");
	}
	set onblur(value) {
		level0.set(this, "onblur", value);
	}
	get oncancel() {
		return level0.get(this, "oncancel");
	}
	set oncancel(value) {
		level0.set(this, "oncancel", value);
	}
	get oncanplay() {
		return level0.get(this, "oncanplay");
	}
	set oncanplay(value) {
		level0.set(this, "oncanplay", value);
	}
	get oncanplaythrough() {
		return level0.get(this, "oncanplaythrough");
	}
	set oncanplaythrough(value) {
		level0.set(this, "oncanplaythrough", value);
	}
	get onchange() {
		return level0.get(this, "onchange");
	}
	set onchange(value) {
		level0.set(this, "onchange", value);
	}
	get onclick() {
		return level0.get(this, "onclick");
	}
	set onclick(value) {
		level0.set(this, "onclick", value);
	}
	get onclose() {
		return level0.get(this, "onclose");
	}
	set onclose(value) {
		level0.set(this, "onclose", value);
	}
	get oncontextmenu() {
		return level0.get(this, "oncontextmenu");
	}
	set oncontextmenu(value) {
		level0.set(this, "oncontextmenu", value);
	}
	get oncuechange() {
		return level0.get(this, "oncuechange");
	}
	set oncuechange(value) {
		level0.set(this, "oncuechange", value);
	}
	get ondblclick() {
		return level0.get(this, "ondblclick");
	}
	set ondblclick(value) {
		level0.set(this, "ondblclick", value);
	}
	get ondrag() {
		return level0.get(this, "ondrag");
	}
	set ondrag(value) {
		level0.set(this, "ondrag", value);
	}
	get ondragend() {
		return level0.get(this, "ondragend");
	}
	set ondragend(value) {
		level0.set(this, "ondragend", value);
	}
	get ondragenter() {
		return level0.get(this, "ondragenter");
	}
	set ondragenter(value) {
		level0.set(this, "ondragenter", value);
	}
	get ondragleave() {
		return level0.get(this, "ondragleave");
	}
	set ondragleave(value) {
		level0.set(this, "ondragleave", value);
	}
	get ondragover() {
		return level0.get(this, "ondragover");
	}
	set ondragover(value) {
		level0.set(this, "ondragover", value);
	}
	get ondragstart() {
		return level0.get(this, "ondragstart");
	}
	set ondragstart(value) {
		level0.set(this, "ondragstart", value);
	}
	get ondrop() {
		return level0.get(this, "ondrop");
	}
	set ondrop(value) {
		level0.set(this, "ondrop", value);
	}
	get ondurationchange() {
		return level0.get(this, "ondurationchange");
	}
	set ondurationchange(value) {
		level0.set(this, "ondurationchange", value);
	}
	get onemptied() {
		return level0.get(this, "onemptied");
	}
	set onemptied(value) {
		level0.set(this, "onemptied", value);
	}
	get onended() {
		return level0.get(this, "onended");
	}
	set onended(value) {
		level0.set(this, "onended", value);
	}
	get onerror() {
		return level0.get(this, "onerror");
	}
	set onerror(value) {
		level0.set(this, "onerror", value);
	}
	get onfocus() {
		return level0.get(this, "onfocus");
	}
	set onfocus(value) {
		level0.set(this, "onfocus", value);
	}
	get oninput() {
		return level0.get(this, "oninput");
	}
	set oninput(value) {
		level0.set(this, "oninput", value);
	}
	get oninvalid() {
		return level0.get(this, "oninvalid");
	}
	set oninvalid(value) {
		level0.set(this, "oninvalid", value);
	}
	get onkeydown() {
		return level0.get(this, "onkeydown");
	}
	set onkeydown(value) {
		level0.set(this, "onkeydown", value);
	}
	get onkeypress() {
		return level0.get(this, "onkeypress");
	}
	set onkeypress(value) {
		level0.set(this, "onkeypress", value);
	}
	get onkeyup() {
		return level0.get(this, "onkeyup");
	}
	set onkeyup(value) {
		level0.set(this, "onkeyup", value);
	}
	get onload() {
		return level0.get(this, "onload");
	}
	set onload(value) {
		level0.set(this, "onload", value);
	}
	get onloadeddata() {
		return level0.get(this, "onloadeddata");
	}
	set onloadeddata(value) {
		level0.set(this, "onloadeddata", value);
	}
	get onloadedmetadata() {
		return level0.get(this, "onloadedmetadata");
	}
	set onloadedmetadata(value) {
		level0.set(this, "onloadedmetadata", value);
	}
	get onloadstart() {
		return level0.get(this, "onloadstart");
	}
	set onloadstart(value) {
		level0.set(this, "onloadstart", value);
	}
	get onmousedown() {
		return level0.get(this, "onmousedown");
	}
	set onmousedown(value) {
		level0.set(this, "onmousedown", value);
	}
	get onmouseenter() {
		return level0.get(this, "onmouseenter");
	}
	set onmouseenter(value) {
		level0.set(this, "onmouseenter", value);
	}
	get onmouseleave() {
		return level0.get(this, "onmouseleave");
	}
	set onmouseleave(value) {
		level0.set(this, "onmouseleave", value);
	}
	get onmousemove() {
		return level0.get(this, "onmousemove");
	}
	set onmousemove(value) {
		level0.set(this, "onmousemove", value);
	}
	get onmouseout() {
		return level0.get(this, "onmouseout");
	}
	set onmouseout(value) {
		level0.set(this, "onmouseout", value);
	}
	get onmouseover() {
		return level0.get(this, "onmouseover");
	}
	set onmouseover(value) {
		level0.set(this, "onmouseover", value);
	}
	get onmouseup() {
		return level0.get(this, "onmouseup");
	}
	set onmouseup(value) {
		level0.set(this, "onmouseup", value);
	}
	get onmousewheel() {
		return level0.get(this, "onmousewheel");
	}
	set onmousewheel(value) {
		level0.set(this, "onmousewheel", value);
	}
	get onpause() {
		return level0.get(this, "onpause");
	}
	set onpause(value) {
		level0.set(this, "onpause", value);
	}
	get onplay() {
		return level0.get(this, "onplay");
	}
	set onplay(value) {
		level0.set(this, "onplay", value);
	}
	get onplaying() {
		return level0.get(this, "onplaying");
	}
	set onplaying(value) {
		level0.set(this, "onplaying", value);
	}
	get onprogress() {
		return level0.get(this, "onprogress");
	}
	set onprogress(value) {
		level0.set(this, "onprogress", value);
	}
	get onratechange() {
		return level0.get(this, "onratechange");
	}
	set onratechange(value) {
		level0.set(this, "onratechange", value);
	}
	get onreset() {
		return level0.get(this, "onreset");
	}
	set onreset(value) {
		level0.set(this, "onreset", value);
	}
	get onresize() {
		return level0.get(this, "onresize");
	}
	set onresize(value) {
		level0.set(this, "onresize", value);
	}
	get onscroll() {
		return level0.get(this, "onscroll");
	}
	set onscroll(value) {
		level0.set(this, "onscroll", value);
	}
	get onseeked() {
		return level0.get(this, "onseeked");
	}
	set onseeked(value) {
		level0.set(this, "onseeked", value);
	}
	get onseeking() {
		return level0.get(this, "onseeking");
	}
	set onseeking(value) {
		level0.set(this, "onseeking", value);
	}
	get onselect() {
		return level0.get(this, "onselect");
	}
	set onselect(value) {
		level0.set(this, "onselect", value);
	}
	get onshow() {
		return level0.get(this, "onshow");
	}
	set onshow(value) {
		level0.set(this, "onshow", value);
	}
	get onstalled() {
		return level0.get(this, "onstalled");
	}
	set onstalled(value) {
		level0.set(this, "onstalled", value);
	}
	get onsubmit() {
		return level0.get(this, "onsubmit");
	}
	set onsubmit(value) {
		level0.set(this, "onsubmit", value);
	}
	get onsuspend() {
		return level0.get(this, "onsuspend");
	}
	set onsuspend(value) {
		level0.set(this, "onsuspend", value);
	}
	get ontimeupdate() {
		return level0.get(this, "ontimeupdate");
	}
	set ontimeupdate(value) {
		level0.set(this, "ontimeupdate", value);
	}
	get ontoggle() {
		return level0.get(this, "ontoggle");
	}
	set ontoggle(value) {
		level0.set(this, "ontoggle", value);
	}
	get onvolumechange() {
		return level0.get(this, "onvolumechange");
	}
	set onvolumechange(value) {
		level0.set(this, "onvolumechange", value);
	}
	get onwaiting() {
		return level0.get(this, "onwaiting");
	}
	set onwaiting(value) {
		level0.set(this, "onwaiting", value);
	}
	get onauxclick() {
		return level0.get(this, "onauxclick");
	}
	set onauxclick(value) {
		level0.set(this, "onauxclick", value);
	}
	get ongotpointercapture() {
		return level0.get(this, "ongotpointercapture");
	}
	set ongotpointercapture(value) {
		level0.set(this, "ongotpointercapture", value);
	}
	get onlostpointercapture() {
		return level0.get(this, "onlostpointercapture");
	}
	set onlostpointercapture(value) {
		level0.set(this, "onlostpointercapture", value);
	}
	get onpointercancel() {
		return level0.get(this, "onpointercancel");
	}
	set onpointercancel(value) {
		level0.set(this, "onpointercancel", value);
	}
	get onpointerdown() {
		return level0.get(this, "onpointerdown");
	}
	set onpointerdown(value) {
		level0.set(this, "onpointerdown", value);
	}
	get onpointerenter() {
		return level0.get(this, "onpointerenter");
	}
	set onpointerenter(value) {
		level0.set(this, "onpointerenter", value);
	}
	get onpointerleave() {
		return level0.get(this, "onpointerleave");
	}
	set onpointerleave(value) {
		level0.set(this, "onpointerleave", value);
	}
	get onpointermove() {
		return level0.get(this, "onpointermove");
	}
	set onpointermove(value) {
		level0.set(this, "onpointermove", value);
	}
	get onpointerout() {
		return level0.get(this, "onpointerout");
	}
	set onpointerout(value) {
		level0.set(this, "onpointerout", value);
	}
	get onpointerover() {
		return level0.get(this, "onpointerover");
	}
	set onpointerover(value) {
		level0.set(this, "onpointerover", value);
	}
	get onpointerup() {
		return level0.get(this, "onpointerup");
	}
	set onpointerup(value) {
		level0.set(this, "onpointerup", value);
	}
};
//#endregion
export { HTMLElement };
