@remote-dom/polyfill 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +45 -0
  3. package/build/cjs/Attr.cjs +54 -0
  4. package/build/cjs/CharacterData.cjs +29 -0
  5. package/build/cjs/ChildNode.cjs +45 -0
  6. package/build/cjs/Comment.cjs +11 -0
  7. package/build/cjs/CustomElementRegistry.cjs +35 -0
  8. package/build/cjs/CustomEvent.cjs +28 -0
  9. package/build/cjs/Document.cjs +94 -0
  10. package/build/cjs/DocumentFragment.cjs +12 -0
  11. package/build/cjs/Element.cjs +81 -0
  12. package/build/cjs/Event.cjs +113 -0
  13. package/build/cjs/EventTarget.cjs +101 -0
  14. package/build/cjs/HTMLElement.cjs +7 -0
  15. package/build/cjs/HTMLTemplateElement.cjs +26 -0
  16. package/build/cjs/MutationObserver.cjs +7 -0
  17. package/build/cjs/NamedNodeMap.cjs +115 -0
  18. package/build/cjs/Node.cjs +102 -0
  19. package/build/cjs/NodeList.cjs +9 -0
  20. package/build/cjs/ParentNode.cjs +130 -0
  21. package/build/cjs/SVGElement.cjs +19 -0
  22. package/build/cjs/Text.cjs +11 -0
  23. package/build/cjs/Window.cjs +69 -0
  24. package/build/cjs/constants.cjs +57 -0
  25. package/build/cjs/hooks.cjs +5 -0
  26. package/build/cjs/index.cjs +10 -0
  27. package/build/cjs/selectors.cjs +203 -0
  28. package/build/cjs/serialization.cjs +96 -0
  29. package/build/cjs/shared.cjs +63 -0
  30. package/build/esm/Attr.mjs +52 -0
  31. package/build/esm/CharacterData.mjs +27 -0
  32. package/build/esm/ChildNode.mjs +42 -0
  33. package/build/esm/Comment.mjs +9 -0
  34. package/build/esm/CustomElementRegistry.mjs +33 -0
  35. package/build/esm/CustomEvent.mjs +26 -0
  36. package/build/esm/Document.mjs +89 -0
  37. package/build/esm/DocumentFragment.mjs +10 -0
  38. package/build/esm/Element.mjs +95 -0
  39. package/build/esm/Event.mjs +108 -0
  40. package/build/esm/EventTarget.mjs +99 -0
  41. package/build/esm/HTMLElement.mjs +5 -0
  42. package/build/esm/HTMLTemplateElement.mjs +24 -0
  43. package/build/esm/MutationObserver.mjs +5 -0
  44. package/build/esm/NamedNodeMap.mjs +121 -0
  45. package/build/esm/Node.mjs +100 -0
  46. package/build/esm/NodeList.mjs +7 -0
  47. package/build/esm/ParentNode.mjs +128 -0
  48. package/build/esm/SVGElement.mjs +17 -0
  49. package/build/esm/Text.mjs +9 -0
  50. package/build/esm/Window.mjs +66 -0
  51. package/build/esm/constants.mjs +39 -0
  52. package/build/esm/hooks.mjs +3 -0
  53. package/build/esm/index.mjs +2 -0
  54. package/build/esm/selectors.mjs +197 -0
  55. package/build/esm/serialization.mjs +92 -0
  56. package/build/esm/shared.mjs +55 -0
  57. package/build/esnext/Attr.esnext +57 -0
  58. package/build/esnext/CharacterData.esnext +27 -0
  59. package/build/esnext/ChildNode.esnext +47 -0
  60. package/build/esnext/Comment.esnext +9 -0
  61. package/build/esnext/CustomElementRegistry.esnext +34 -0
  62. package/build/esnext/CustomEvent.esnext +25 -0
  63. package/build/esnext/Document.esnext +86 -0
  64. package/build/esnext/DocumentFragment.esnext +10 -0
  65. package/build/esnext/Element.esnext +99 -0
  66. package/build/esnext/Event.esnext +109 -0
  67. package/build/esnext/EventTarget.esnext +99 -0
  68. package/build/esnext/HTMLElement.esnext +6 -0
  69. package/build/esnext/HTMLTemplateElement.esnext +26 -0
  70. package/build/esnext/MutationObserver.esnext +5 -0
  71. package/build/esnext/NamedNodeMap.esnext +131 -0
  72. package/build/esnext/Node.esnext +116 -0
  73. package/build/esnext/NodeList.esnext +7 -0
  74. package/build/esnext/ParentNode.esnext +138 -0
  75. package/build/esnext/SVGElement.esnext +17 -0
  76. package/build/esnext/Text.esnext +9 -0
  77. package/build/esnext/Window.esnext +59 -0
  78. package/build/esnext/constants.esnext +37 -0
  79. package/build/esnext/hooks.esnext +3 -0
  80. package/build/esnext/index.esnext +2 -0
  81. package/build/esnext/selectors.esnext +169 -0
  82. package/build/esnext/serialization.esnext +76 -0
  83. package/build/esnext/shared.esnext +59 -0
  84. package/build/tsconfig.tsbuildinfo +1 -0
  85. package/build/typescript/Attr.d.ts +24 -0
  86. package/build/typescript/Attr.d.ts.map +1 -0
  87. package/build/typescript/CharacterData.d.ts +10 -0
  88. package/build/typescript/CharacterData.d.ts.map +1 -0
  89. package/build/typescript/ChildNode.d.ts +10 -0
  90. package/build/typescript/ChildNode.d.ts.map +1 -0
  91. package/build/typescript/Comment.d.ts +7 -0
  92. package/build/typescript/Comment.d.ts.map +1 -0
  93. package/build/typescript/CustomElementRegistry.d.ts +9 -0
  94. package/build/typescript/CustomElementRegistry.d.ts.map +1 -0
  95. package/build/typescript/CustomEvent.d.ts +17 -0
  96. package/build/typescript/CustomEvent.d.ts.map +1 -0
  97. package/build/typescript/Document.d.ts +27 -0
  98. package/build/typescript/Document.d.ts.map +1 -0
  99. package/build/typescript/DocumentFragment.d.ts +8 -0
  100. package/build/typescript/DocumentFragment.d.ts.map +1 -0
  101. package/build/typescript/Element.d.ts +32 -0
  102. package/build/typescript/Element.d.ts.map +1 -0
  103. package/build/typescript/Event.d.ts +47 -0
  104. package/build/typescript/Event.d.ts.map +1 -0
  105. package/build/typescript/EventTarget.d.ts +12 -0
  106. package/build/typescript/EventTarget.d.ts.map +1 -0
  107. package/build/typescript/HTMLElement.d.ts +4 -0
  108. package/build/typescript/HTMLElement.d.ts.map +1 -0
  109. package/build/typescript/HTMLTemplateElement.d.ts +11 -0
  110. package/build/typescript/HTMLTemplateElement.d.ts.map +1 -0
  111. package/build/typescript/MutationObserver.d.ts +3 -0
  112. package/build/typescript/MutationObserver.d.ts.map +1 -0
  113. package/build/typescript/NamedNodeMap.d.ts +18 -0
  114. package/build/typescript/NamedNodeMap.d.ts.map +1 -0
  115. package/build/typescript/Node.d.ts +37 -0
  116. package/build/typescript/Node.d.ts.map +1 -0
  117. package/build/typescript/NodeList.d.ts +4 -0
  118. package/build/typescript/NodeList.d.ts.map +1 -0
  119. package/build/typescript/ParentNode.d.ts +18 -0
  120. package/build/typescript/ParentNode.d.ts.map +1 -0
  121. package/build/typescript/SVGElement.d.ts +7 -0
  122. package/build/typescript/SVGElement.d.ts.map +1 -0
  123. package/build/typescript/Text.d.ts +7 -0
  124. package/build/typescript/Text.d.ts.map +1 -0
  125. package/build/typescript/Window.d.ts +45 -0
  126. package/build/typescript/Window.d.ts.map +1 -0
  127. package/build/typescript/constants.d.ts +35 -0
  128. package/build/typescript/constants.d.ts.map +1 -0
  129. package/build/typescript/hooks.d.ts +13 -0
  130. package/build/typescript/hooks.d.ts.map +1 -0
  131. package/build/typescript/index.d.ts +3 -0
  132. package/build/typescript/index.d.ts.map +1 -0
  133. package/build/typescript/selectors.d.ts +32 -0
  134. package/build/typescript/selectors.d.ts.map +1 -0
  135. package/build/typescript/serialization.d.ts +6 -0
  136. package/build/typescript/serialization.d.ts.map +1 -0
  137. package/build/typescript/shared.d.ts +16 -0
  138. package/build/typescript/shared.d.ts.map +1 -0
  139. package/package.json +35 -0
  140. package/rollup.config.js +3 -0
  141. package/source/Attr.ts +70 -0
  142. package/source/CharacterData.ts +29 -0
  143. package/source/ChildNode.ts +45 -0
  144. package/source/Comment.ts +7 -0
  145. package/source/CustomElementRegistry.ts +52 -0
  146. package/source/CustomEvent.ts +30 -0
  147. package/source/Document.ts +112 -0
  148. package/source/DocumentFragment.ts +8 -0
  149. package/source/Element.ts +119 -0
  150. package/source/Event.ts +142 -0
  151. package/source/EventTarget.ts +139 -0
  152. package/source/HTMLElement.ts +3 -0
  153. package/source/HTMLTemplateElement.ts +28 -0
  154. package/source/MutationObserver.ts +3 -0
  155. package/source/NamedNodeMap.ts +156 -0
  156. package/source/Node.ts +139 -0
  157. package/source/NodeList.ts +5 -0
  158. package/source/ParentNode.ts +158 -0
  159. package/source/SVGElement.ts +16 -0
  160. package/source/Text.ts +7 -0
  161. package/source/Window.ts +64 -0
  162. package/source/constants.ts +37 -0
  163. package/source/hooks.ts +28 -0
  164. package/source/index.ts +2 -0
  165. package/source/selectors.ts +230 -0
  166. package/source/serialization.ts +110 -0
  167. package/source/shared.ts +80 -0
  168. package/tsconfig.json +10 -0
@@ -0,0 +1,86 @@
1
+ import { OWNER_DOCUMENT, NodeType, NAME, NamespaceURI, NS } from './constants.esnext';
2
+ import { Event } from './Event.esnext';
3
+ import { ParentNode } from './ParentNode.esnext';
4
+ import { Element } from './Element.esnext';
5
+ import { SVGElement } from './SVGElement.esnext';
6
+ import { Text } from './Text.esnext';
7
+ import { Comment } from './Comment.esnext';
8
+ import { DocumentFragment } from './DocumentFragment.esnext';
9
+ import { HTMLTemplateElement } from './HTMLTemplateElement.esnext';
10
+ import { cloneNode, isParentNode } from './shared.esnext';
11
+
12
+ class Document extends ParentNode {
13
+ constructor(defaultView) {
14
+ super();
15
+ this.defaultView = defaultView;
16
+ this[OWNER_DOCUMENT] = this;
17
+ }
18
+ nodeType = NodeType.DOCUMENT_NODE;
19
+ [NAME] = "#document";
20
+ createElement(localName) {
21
+ const lowerName = String(localName).toLowerCase();
22
+ if (lowerName === "template") {
23
+ return createElement(new HTMLTemplateElement(), this, "template");
24
+ }
25
+ const CustomElement = this.defaultView.customElements.get(localName);
26
+ if (CustomElement) {
27
+ return createElement(new CustomElement(), this, localName);
28
+ } else {
29
+ return createElement(new Element(), this, localName);
30
+ }
31
+ }
32
+ createElementNS(localName, namespaceURI) {
33
+ if (namespaceURI === NamespaceURI.SVG) {
34
+ return createElement(new SVGElement(), this, localName);
35
+ }
36
+ return createElement(new Element(), this, localName, namespaceURI);
37
+ }
38
+ createTextNode(data) {
39
+ return createNode(new Text(data), this);
40
+ }
41
+ createComment(data) {
42
+ return createNode(new Comment(data), this);
43
+ }
44
+ createDocumentFragment() {
45
+ return createNode(new DocumentFragment(), this);
46
+ }
47
+ createEvent() {
48
+ return new Event("");
49
+ }
50
+ importNode(node, deep) {
51
+ return cloneNode(node, deep, this);
52
+ }
53
+ adoptNode(node) {
54
+ if (node[OWNER_DOCUMENT] === this)
55
+ return node;
56
+ node.parentNode?.removeChild(node);
57
+ adoptNode(node, this);
58
+ return node;
59
+ }
60
+ }
61
+ function createNode(node, ownerDocument) {
62
+ Object.defineProperty(node, OWNER_DOCUMENT, {
63
+ value: ownerDocument,
64
+ writable: true,
65
+ enumerable: false
66
+ });
67
+ return node;
68
+ }
69
+ function createElement(element, ownerDocument, name, namespace) {
70
+ createNode(element, ownerDocument);
71
+ Object.defineProperty(element, NAME, { value: name });
72
+ if (namespace) {
73
+ Object.defineProperty(element, NS, { value: namespace });
74
+ }
75
+ return element;
76
+ }
77
+ function adoptNode(node, document) {
78
+ node[OWNER_DOCUMENT] = document;
79
+ if (isParentNode(node)) {
80
+ for (const child of node.childNodes) {
81
+ adoptNode(child, document);
82
+ }
83
+ }
84
+ }
85
+
86
+ export { Document, adoptNode, createElement, createNode };
@@ -0,0 +1,10 @@
1
+ import { NodeType, NAME, OWNER_DOCUMENT } from './constants.esnext';
2
+ import { ParentNode } from './ParentNode.esnext';
3
+
4
+ class DocumentFragment extends ParentNode {
5
+ nodeType = NodeType.DOCUMENT_FRAGMENT_NODE;
6
+ [NAME] = "#document-fragment";
7
+ [OWNER_DOCUMENT] = window.document;
8
+ }
9
+
10
+ export { DocumentFragment };
@@ -0,0 +1,99 @@
1
+ import { NodeType, NS, NamespaceURI, SLOT, ATTRIBUTES } from './constants.esnext';
2
+ import { ParentNode } from './ParentNode.esnext';
3
+ import { NamedNodeMap } from './NamedNodeMap.esnext';
4
+ import { Attr } from './Attr.esnext';
5
+ import { serializeNode, serializeChildren, parseHtml } from './serialization.esnext';
6
+
7
+ class Element extends ParentNode {
8
+ static observedAttributes;
9
+ nodeType = NodeType.ELEMENT_NODE;
10
+ [NS] = NamespaceURI.XHTML;
11
+ [SLOT] = "";
12
+ get namespaceURI() {
13
+ return this[NS];
14
+ }
15
+ get tagName() {
16
+ return this.nodeName;
17
+ }
18
+ [ATTRIBUTES];
19
+ get slot() {
20
+ return this[SLOT];
21
+ }
22
+ set slot(slot) {
23
+ const finalSlot = String(slot);
24
+ this[SLOT] = finalSlot;
25
+ if (this.getAttribute("slot") !== finalSlot) {
26
+ this.attributes.setNamedItem(new Attr("slot", finalSlot));
27
+ }
28
+ }
29
+ get attributes() {
30
+ let attributes = this[ATTRIBUTES];
31
+ if (!attributes) {
32
+ attributes = new NamedNodeMap(this);
33
+ this[ATTRIBUTES] = attributes;
34
+ }
35
+ return attributes;
36
+ }
37
+ get firstElementChild() {
38
+ return this.children[0] ?? null;
39
+ }
40
+ get lastElementChild() {
41
+ return this.children[this.children.length - 1] ?? null;
42
+ }
43
+ get nextElementSibling() {
44
+ let sib = this.nextSibling;
45
+ while (sib && sib.nodeType !== 1)
46
+ sib = sib.nextSibling;
47
+ return sib;
48
+ }
49
+ get previewElementSibling() {
50
+ let sib = this.previousSibling;
51
+ while (sib && sib.nodeType !== 1)
52
+ sib = sib.previousSibling;
53
+ return sib;
54
+ }
55
+ setAttribute(name, value) {
56
+ this.attributes.setNamedItem(new Attr(name, String(value)));
57
+ }
58
+ setAttributeNS(namespace, name, value) {
59
+ this.attributes.setNamedItemNS(new Attr(name, String(value), namespace));
60
+ }
61
+ getAttribute(name) {
62
+ const attr = this.attributes.getNamedItem(name);
63
+ return attr && attr.value;
64
+ }
65
+ getAttributeNS(namespace, name) {
66
+ const attr = this.attributes.getNamedItemNS(namespace, name);
67
+ return attr && attr.value;
68
+ }
69
+ hasAttribute(name) {
70
+ const attr = this.attributes.getNamedItem(name);
71
+ return attr != null;
72
+ }
73
+ hasAttributeNS(namespace, name) {
74
+ const attr = this.attributes.getNamedItemNS(namespace, name);
75
+ return attr != null;
76
+ }
77
+ removeAttribute(name) {
78
+ this.attributes.removeNamedItem(name);
79
+ }
80
+ removeAttributeNS(namespace, name) {
81
+ this.attributes.removeNamedItemNS(namespace, name);
82
+ }
83
+ get outerHTML() {
84
+ return serializeNode(this);
85
+ }
86
+ get innerHTML() {
87
+ return serializeChildren(this);
88
+ }
89
+ set innerHTML(html) {
90
+ if (html == null || html === "") {
91
+ this.replaceChildren();
92
+ } else {
93
+ const fragment = parseHtml(String(html), this);
94
+ this.replaceChildren(fragment);
95
+ }
96
+ }
97
+ }
98
+
99
+ export { Element };
@@ -0,0 +1,109 @@
1
+ import { IS_TRUSTED, LISTENERS } from './constants.esnext';
2
+
3
+ var EventPhase = /* @__PURE__ */ ((EventPhase2) => {
4
+ EventPhase2[EventPhase2["NONE"] = 0] = "NONE";
5
+ EventPhase2[EventPhase2["CAPTURING_PHASE"] = 1] = "CAPTURING_PHASE";
6
+ EventPhase2[EventPhase2["AT_TARGET"] = 2] = "AT_TARGET";
7
+ EventPhase2[EventPhase2["BUBBLING_PHASE"] = 3] = "BUBBLING_PHASE";
8
+ return EventPhase2;
9
+ })(EventPhase || {});
10
+ const CAPTURE_MARKER = "@";
11
+ const now = typeof performance === "undefined" ? Date.now : performance.now.bind(performance);
12
+ class Event {
13
+ constructor(type, options) {
14
+ this.type = type;
15
+ Object.defineProperty(this, IS_TRUSTED, { writable: true, value: false });
16
+ if (options) {
17
+ if (options.bubbles)
18
+ this.bubbles = options.bubbles;
19
+ if (options.cancelable)
20
+ this.cancelable = options.cancelable;
21
+ if (options.composed)
22
+ this.composed = options.composed;
23
+ }
24
+ }
25
+ static NONE = 0 /* NONE */;
26
+ static CAPTURING_PHASE = 1 /* CAPTURING_PHASE */;
27
+ static AT_TARGET = 2 /* AT_TARGET */;
28
+ static BUBBLING_PHASE = 3 /* BUBBLING_PHASE */;
29
+ // NONE = EventPhase.NONE;
30
+ // CAPTURING_PHASE = EventPhase.CAPTURING_PHASE;
31
+ // AT_TARGET = EventPhase.AT_TARGET;
32
+ // BUBBLING_PHASE = EventPhase.BUBBLING_PHASE;
33
+ timeStamp = now();
34
+ target = null;
35
+ currentTarget = null;
36
+ srcElement = null;
37
+ bubbles = false;
38
+ cancelable = false;
39
+ composed = false;
40
+ defaultPrevented = false;
41
+ cancelBubble = false;
42
+ immediatePropagationStopped = false;
43
+ eventPhase = 0;
44
+ path = [];
45
+ // private inPassiveListener = false;
46
+ data;
47
+ [IS_TRUSTED];
48
+ get composedPath() {
49
+ return this.path;
50
+ }
51
+ get isTrusted() {
52
+ return this[IS_TRUSTED];
53
+ }
54
+ stopPropagation() {
55
+ this.cancelBubble = true;
56
+ }
57
+ stopImmediatePropagation() {
58
+ this.immediatePropagationStopped = true;
59
+ }
60
+ preventDefault() {
61
+ this.defaultPrevented = true;
62
+ }
63
+ set returnValue(value) {
64
+ this.defaultPrevented = value;
65
+ }
66
+ get returnValue() {
67
+ return this.defaultPrevented;
68
+ }
69
+ /** @deprecated */
70
+ initEvent(type, bubbles, cancelable) {
71
+ this.type = type;
72
+ this.bubbles = Boolean(bubbles);
73
+ this.cancelable = Boolean(cancelable);
74
+ }
75
+ }
76
+ function fireEvent(event, target, phase) {
77
+ const listeners = target[LISTENERS];
78
+ const list = listeners?.get(
79
+ `${event.type}${phase === 1 /* CAPTURING_PHASE */ ? CAPTURE_MARKER : ""}`
80
+ );
81
+ if (!list)
82
+ return false;
83
+ let defaultPrevented = false;
84
+ for (const listener of list) {
85
+ event.eventPhase = phase;
86
+ event.currentTarget = target;
87
+ try {
88
+ if (typeof listener === "object") {
89
+ listener.handleEvent(event);
90
+ } else {
91
+ listener.call(target, event);
92
+ }
93
+ } catch (err) {
94
+ setTimeout(thrower, 0, err);
95
+ }
96
+ if (event.defaultPrevented === true) {
97
+ defaultPrevented = true;
98
+ }
99
+ if (event.immediatePropagationStopped) {
100
+ break;
101
+ }
102
+ }
103
+ return defaultPrevented;
104
+ }
105
+ function thrower(error) {
106
+ throw error;
107
+ }
108
+
109
+ export { CAPTURE_MARKER, Event, EventPhase, fireEvent };
@@ -0,0 +1,99 @@
1
+ import { hooks } from './hooks.esnext';
2
+ import { LISTENERS } from './constants.esnext';
3
+ import { fireEvent, EventPhase, CAPTURE_MARKER } from './Event.esnext';
4
+
5
+ const ONCE_LISTENERS = Symbol("onceListeners");
6
+ class EventTarget {
7
+ [LISTENERS];
8
+ [ONCE_LISTENERS];
9
+ addEventListener(type, listener, options) {
10
+ if (listener == null)
11
+ return;
12
+ const capture = options === true || options && options.capture === true;
13
+ const once = typeof options === "object" && options.once === true;
14
+ const signal = typeof options === "object" ? options.signal : void 0;
15
+ const key = `${type}${capture ? CAPTURE_MARKER : ""}`;
16
+ let normalizedListener = listener;
17
+ if (once) {
18
+ normalizedListener = function normalizedListener2(...args) {
19
+ this.removeEventListener(type, listener, options);
20
+ return typeof listener === "object" ? listener.handleEvent(...args) : listener.call(this, ...args);
21
+ };
22
+ let onceListeners = this[ONCE_LISTENERS];
23
+ if (!onceListeners) {
24
+ onceListeners = /* @__PURE__ */ new WeakMap();
25
+ this[ONCE_LISTENERS] = onceListeners;
26
+ }
27
+ onceListeners.set(listener, normalizedListener);
28
+ }
29
+ let listeners = this[LISTENERS];
30
+ if (!listeners) {
31
+ listeners = /* @__PURE__ */ new Map();
32
+ this[LISTENERS] = listeners;
33
+ }
34
+ let list = listeners.get(key);
35
+ if (!list) {
36
+ list = /* @__PURE__ */ new Set();
37
+ listeners.set(key, list);
38
+ }
39
+ list.add(normalizedListener);
40
+ signal?.addEventListener(
41
+ "abort",
42
+ () => {
43
+ removeEventListener.call(this, type, listener, options);
44
+ },
45
+ { once: true }
46
+ );
47
+ hooks.addEventListener?.(this, type, listener, options);
48
+ }
49
+ removeEventListener(type, listener, options) {
50
+ return removeEventListener.call(this, type, listener, options);
51
+ }
52
+ // function isChildNode(node: EventTarget): node is ChildNode {
53
+ // return PARENT in node;
54
+ // }
55
+ dispatchEvent(event) {
56
+ const path = [];
57
+ let target = this;
58
+ while (target != null) {
59
+ path.push(target);
60
+ target = target.parentNode;
61
+ }
62
+ event.target = this;
63
+ event.srcElement = this;
64
+ event.path = path;
65
+ let defaultPrevented = false;
66
+ for (let i = path.length; --i; ) {
67
+ if (fireEvent(event, path[i], EventPhase.CAPTURING_PHASE)) {
68
+ defaultPrevented = true;
69
+ }
70
+ }
71
+ if (fireEvent(event, this, EventPhase.AT_TARGET)) {
72
+ defaultPrevented = true;
73
+ }
74
+ for (let i = 1; i < path.length; i++) {
75
+ if (fireEvent(event, path[i], EventPhase.BUBBLING_PHASE)) {
76
+ defaultPrevented = true;
77
+ }
78
+ }
79
+ return !defaultPrevented;
80
+ }
81
+ }
82
+ function removeEventListener(type, listener, options) {
83
+ if (listener == null)
84
+ return;
85
+ const onceListeners = this[ONCE_LISTENERS];
86
+ const normalizedListener = onceListeners?.get(listener) ?? listener;
87
+ onceListeners?.delete(listener);
88
+ const capture = options === true || options && options.capture === true;
89
+ const key = `${type}${capture ? CAPTURE_MARKER : ""}`;
90
+ const list = this[LISTENERS]?.get(key);
91
+ if (list) {
92
+ const deleted = list.delete(normalizedListener);
93
+ if (deleted) {
94
+ hooks.removeEventListener?.(this, type, listener, options);
95
+ }
96
+ }
97
+ }
98
+
99
+ export { EventTarget };
@@ -0,0 +1,6 @@
1
+ import { Element } from './Element.esnext';
2
+
3
+ class HTMLElement extends Element {
4
+ }
5
+
6
+ export { HTMLElement };
@@ -0,0 +1,26 @@
1
+ import { CONTENT } from './constants.esnext';
2
+ import { Element } from './Element.esnext';
3
+ import { parseHtml, serializeChildren } from './serialization.esnext';
4
+
5
+ class HTMLTemplateElement extends Element {
6
+ [CONTENT];
7
+ get content() {
8
+ let content = this[CONTENT];
9
+ if (!content) {
10
+ content = this.ownerDocument.createDocumentFragment();
11
+ this[CONTENT] = content;
12
+ }
13
+ return content;
14
+ }
15
+ set content(_) {
16
+ }
17
+ set innerHTML(html) {
18
+ this.content.replaceChildren(parseHtml(String(html), this));
19
+ }
20
+ get innerHTML() {
21
+ const content = this[CONTENT];
22
+ return content ? serializeChildren(content) : "";
23
+ }
24
+ }
25
+
26
+ export { HTMLTemplateElement };
@@ -0,0 +1,5 @@
1
+ class MutationObserver {
2
+ // stub implementation
3
+ }
4
+
5
+ export { MutationObserver };
@@ -0,0 +1,131 @@
1
+ import { hooks } from './hooks.esnext';
2
+ import { CHILD, OWNER_ELEMENT, NS, NEXT } from './constants.esnext';
3
+
4
+ class NamedNodeMap {
5
+ [CHILD] = null;
6
+ [OWNER_ELEMENT];
7
+ constructor(ownerElement) {
8
+ this[OWNER_ELEMENT] = ownerElement;
9
+ }
10
+ getNamedItem(name) {
11
+ return this.getNamedItemNS(null, name);
12
+ }
13
+ getNamedItemNS(namespaceURI, name) {
14
+ let attr = this[CHILD];
15
+ while (attr) {
16
+ if (attr.name === name && attr[NS] == namespaceURI) {
17
+ return attr;
18
+ }
19
+ attr = attr[NEXT];
20
+ }
21
+ return null;
22
+ }
23
+ item(index) {
24
+ let attr = this[CHILD];
25
+ let i = 0;
26
+ while (attr) {
27
+ if (i++ === index)
28
+ return attr;
29
+ attr = attr[NEXT];
30
+ }
31
+ return null;
32
+ }
33
+ get length() {
34
+ let index = 0;
35
+ let attr = this[CHILD];
36
+ while (attr) {
37
+ index++;
38
+ attr = attr[NEXT];
39
+ }
40
+ return index;
41
+ }
42
+ removeNamedItem(name) {
43
+ return this.removeNamedItemNS(null, name);
44
+ }
45
+ removeNamedItemNS(namespaceURI, name) {
46
+ const ownerElement = this[OWNER_ELEMENT];
47
+ let attr = this[CHILD];
48
+ let prev = null;
49
+ while (attr != null) {
50
+ if (attr.name === name && attr[NS] == namespaceURI) {
51
+ if (prev)
52
+ prev[NEXT] = attr[NEXT];
53
+ if (this[CHILD] === attr)
54
+ this[CHILD] = attr[NEXT];
55
+ updateElementAttribute(ownerElement, attr.name, attr.value, null);
56
+ hooks.removeAttribute?.(ownerElement, name, namespaceURI);
57
+ return attr;
58
+ }
59
+ prev = attr;
60
+ attr = attr[NEXT];
61
+ }
62
+ return null;
63
+ }
64
+ setNamedItem(attr) {
65
+ const ownerElement = this[OWNER_ELEMENT];
66
+ let old = null;
67
+ let child = this[CHILD];
68
+ attr[OWNER_ELEMENT] = ownerElement;
69
+ if (child == null) {
70
+ this[CHILD] = attr;
71
+ } else {
72
+ let prev;
73
+ while (child) {
74
+ if (child.name === attr.name && child[NS] == attr[NS]) {
75
+ if (prev)
76
+ prev[NEXT] = attr;
77
+ else
78
+ this[CHILD] = attr;
79
+ attr[NEXT] = child[NEXT];
80
+ child[NEXT] = null;
81
+ old = child;
82
+ break;
83
+ }
84
+ prev = child;
85
+ child = child[NEXT];
86
+ }
87
+ if (prev)
88
+ prev[NEXT] = attr;
89
+ else
90
+ this[CHILD] = attr;
91
+ }
92
+ if (!old || old.value !== attr.value) {
93
+ updateElementAttribute(
94
+ ownerElement,
95
+ attr.name,
96
+ old?.value ?? null,
97
+ attr.value
98
+ );
99
+ hooks.setAttribute?.(
100
+ ownerElement,
101
+ attr.name,
102
+ attr.value,
103
+ attr[NS]
104
+ );
105
+ }
106
+ return old;
107
+ }
108
+ setNamedItemNS(attr) {
109
+ return this.setNamedItem(attr);
110
+ }
111
+ *[Symbol.iterator]() {
112
+ let attr = this[CHILD];
113
+ while (attr) {
114
+ yield attr;
115
+ attr = attr[NEXT];
116
+ }
117
+ }
118
+ }
119
+ function updateElementAttribute(element, name, oldValue, newValue) {
120
+ const { observedAttributes } = element.constructor;
121
+ const { attributeChangedCallback } = element;
122
+ if (name === "slot" && element.slot !== newValue) {
123
+ element.slot = newValue ?? "";
124
+ }
125
+ if (attributeChangedCallback == null || observedAttributes == null || !observedAttributes.includes(name)) {
126
+ return;
127
+ }
128
+ return attributeChangedCallback.call(element, name, oldValue, newValue);
129
+ }
130
+
131
+ export { NamedNodeMap };
@@ -0,0 +1,116 @@
1
+ import { NodeType, OWNER_DOCUMENT, NAME, PARENT, CHILD, PREV, NEXT, NamespaceURI } from './constants.esnext';
2
+ import { EventTarget } from './EventTarget.esnext';
3
+ import { isCharacterData, isParentNode, cloneNode, isTextNode } from './shared.esnext';
4
+
5
+ class Node extends EventTarget {
6
+ nodeType = NodeType.NODE;
7
+ [OWNER_DOCUMENT];
8
+ [NAME] = "";
9
+ [PARENT] = null;
10
+ [CHILD] = null;
11
+ [PREV] = null;
12
+ [NEXT] = null;
13
+ get localName() {
14
+ return this[NAME];
15
+ }
16
+ get nodeName() {
17
+ return this[NAME].toUpperCase();
18
+ }
19
+ get ownerDocument() {
20
+ return this[OWNER_DOCUMENT];
21
+ }
22
+ isDefaultNamespace(namespace) {
23
+ return namespace === NamespaceURI.XHTML;
24
+ }
25
+ get parentNode() {
26
+ return this[PARENT];
27
+ }
28
+ set parentNode(_readonly) {
29
+ }
30
+ get previousSibling() {
31
+ return this[PREV];
32
+ }
33
+ set previousSibling(_readonly) {
34
+ }
35
+ get nextSibling() {
36
+ return this[NEXT];
37
+ }
38
+ set nextSibling(_readonly) {
39
+ }
40
+ get previousElementSibling() {
41
+ let sib = this[PREV];
42
+ while (sib && sib.nodeType !== 1)
43
+ sib = sib[PREV];
44
+ return sib;
45
+ }
46
+ set previousElementSibling(_readonly) {
47
+ }
48
+ get nextElementSibling() {
49
+ let sib = this[NEXT];
50
+ while (sib && sib.nodeType !== 1)
51
+ sib = sib[NEXT];
52
+ return sib;
53
+ }
54
+ set nextElementSibling(_readonly) {
55
+ }
56
+ get firstChild() {
57
+ return this[CHILD];
58
+ }
59
+ set firstChild(_readonly) {
60
+ }
61
+ get lastChild() {
62
+ let child = this[CHILD];
63
+ while (child) {
64
+ const next = child[NEXT];
65
+ if (next == null)
66
+ break;
67
+ child = next;
68
+ }
69
+ return child;
70
+ }
71
+ set lastChild(_readonly) {
72
+ }
73
+ get nodeValue() {
74
+ if (isCharacterData(this))
75
+ return this.data;
76
+ return null;
77
+ }
78
+ set nodeValue(data) {
79
+ if (isCharacterData(this))
80
+ this.data = data;
81
+ }
82
+ get textContent() {
83
+ if (isCharacterData(this))
84
+ return this.data;
85
+ let text = "";
86
+ function walk(node) {
87
+ if (isTextNode(node)) {
88
+ text += node.data;
89
+ }
90
+ const child = node[CHILD];
91
+ if (child)
92
+ walk(child);
93
+ const sibling = node[NEXT];
94
+ if (sibling)
95
+ walk(sibling);
96
+ }
97
+ walk(this);
98
+ return text;
99
+ }
100
+ set textContent(data) {
101
+ if (isCharacterData(this)) {
102
+ this.data = data;
103
+ } else if (isParentNode(this)) {
104
+ let child;
105
+ while (child = this[CHILD]) {
106
+ this.removeChild(child);
107
+ }
108
+ this.append(data);
109
+ }
110
+ }
111
+ cloneNode(deep) {
112
+ return cloneNode(this, deep);
113
+ }
114
+ }
115
+
116
+ export { Node };
@@ -0,0 +1,7 @@
1
+ class NodeList extends Array {
2
+ item(index) {
3
+ return this[index];
4
+ }
5
+ }
6
+
7
+ export { NodeList };