happy-dom 15.11.7 → 16.0.0

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 (476) hide show
  1. package/cjs/PropertySymbol.cjs +12 -9
  2. package/cjs/PropertySymbol.cjs.map +1 -1
  3. package/cjs/PropertySymbol.d.ts +4 -1
  4. package/cjs/PropertySymbol.d.ts.map +1 -1
  5. package/cjs/config/HTMLElementConfig.cjs +42 -16
  6. package/cjs/config/HTMLElementConfig.cjs.map +1 -1
  7. package/cjs/config/HTMLElementConfig.d.ts +7 -0
  8. package/cjs/config/HTMLElementConfig.d.ts.map +1 -1
  9. package/cjs/config/HTMLElementConfigContentModelEnum.cjs +3 -0
  10. package/cjs/config/HTMLElementConfigContentModelEnum.cjs.map +1 -1
  11. package/cjs/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
  12. package/cjs/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
  13. package/cjs/config/NamespaceURI.cjs +2 -0
  14. package/cjs/config/NamespaceURI.cjs.map +1 -1
  15. package/cjs/config/NamespaceURI.d.ts +2 -0
  16. package/cjs/config/NamespaceURI.d.ts.map +1 -1
  17. package/cjs/css/declaration/CSSStyleDeclaration.cjs +1 -1
  18. package/cjs/css/declaration/CSSStyleDeclaration.cjs.map +1 -1
  19. package/cjs/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
  20. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs +2 -2
  21. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.cjs.map +1 -1
  22. package/cjs/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
  23. package/cjs/custom-element/CustomElementReactionStack.cjs +100 -0
  24. package/cjs/custom-element/CustomElementReactionStack.cjs.map +1 -0
  25. package/cjs/custom-element/CustomElementReactionStack.d.ts +27 -0
  26. package/cjs/custom-element/CustomElementReactionStack.d.ts.map +1 -0
  27. package/cjs/custom-element/CustomElementRegistry.cjs +32 -45
  28. package/cjs/custom-element/CustomElementRegistry.cjs.map +1 -1
  29. package/cjs/custom-element/CustomElementRegistry.d.ts +2 -6
  30. package/cjs/custom-element/CustomElementRegistry.d.ts.map +1 -1
  31. package/cjs/custom-element/CustomElementUtility.cjs +35 -0
  32. package/cjs/custom-element/CustomElementUtility.cjs.map +1 -0
  33. package/cjs/custom-element/CustomElementUtility.d.ts +14 -0
  34. package/cjs/custom-element/CustomElementUtility.d.ts.map +1 -0
  35. package/cjs/custom-element/ICustomElementDefinition.cjs +3 -0
  36. package/cjs/custom-element/ICustomElementDefinition.cjs.map +1 -0
  37. package/cjs/custom-element/ICustomElementDefinition.d.ts +12 -0
  38. package/cjs/custom-element/ICustomElementDefinition.d.ts.map +1 -0
  39. package/cjs/dom/DOMStringMap.cjs +8 -8
  40. package/cjs/dom/DOMStringMap.cjs.map +1 -1
  41. package/cjs/dom/DOMStringMap.d.ts.map +1 -1
  42. package/cjs/dom/DOMTokenList.cjs +1 -1
  43. package/cjs/dom/DOMTokenList.cjs.map +1 -1
  44. package/cjs/dom-parser/DOMParser.cjs +5 -67
  45. package/cjs/dom-parser/DOMParser.cjs.map +1 -1
  46. package/cjs/dom-parser/DOMParser.d.ts +0 -1
  47. package/cjs/dom-parser/DOMParser.d.ts.map +1 -1
  48. package/cjs/exception/DOMExceptionNameEnum.cjs +1 -0
  49. package/cjs/exception/DOMExceptionNameEnum.cjs.map +1 -1
  50. package/cjs/exception/DOMExceptionNameEnum.d.ts +2 -1
  51. package/cjs/exception/DOMExceptionNameEnum.d.ts.map +1 -1
  52. package/cjs/history/History.cjs +6 -6
  53. package/cjs/history/History.cjs.map +1 -1
  54. package/cjs/html-parser/HTMLParser.cjs +726 -0
  55. package/cjs/html-parser/HTMLParser.cjs.map +1 -0
  56. package/cjs/html-parser/HTMLParser.d.ts +91 -0
  57. package/cjs/html-parser/HTMLParser.d.ts.map +1 -0
  58. package/cjs/html-serializer/HTMLSerializer.cjs +152 -0
  59. package/cjs/html-serializer/HTMLSerializer.cjs.map +1 -0
  60. package/cjs/html-serializer/HTMLSerializer.d.ts +36 -0
  61. package/cjs/html-serializer/HTMLSerializer.d.ts.map +1 -0
  62. package/cjs/nodes/document/Document.cjs +105 -121
  63. package/cjs/nodes/document/Document.cjs.map +1 -1
  64. package/cjs/nodes/document/Document.d.ts +8 -0
  65. package/cjs/nodes/document/Document.d.ts.map +1 -1
  66. package/cjs/nodes/element/Element.cjs +35 -53
  67. package/cjs/nodes/element/Element.cjs.map +1 -1
  68. package/cjs/nodes/element/Element.d.ts +2 -12
  69. package/cjs/nodes/element/Element.d.ts.map +1 -1
  70. package/cjs/nodes/element/HTMLCollection.cjs +5 -9
  71. package/cjs/nodes/element/HTMLCollection.cjs.map +1 -1
  72. package/cjs/nodes/element/HTMLCollection.d.ts.map +1 -1
  73. package/cjs/nodes/element/NamedNodeMap.cjs +39 -52
  74. package/cjs/nodes/element/NamedNodeMap.cjs.map +1 -1
  75. package/cjs/nodes/element/NamedNodeMap.d.ts +1 -16
  76. package/cjs/nodes/element/NamedNodeMap.d.ts.map +1 -1
  77. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs +12 -14
  78. package/cjs/nodes/element/NamedNodeMapProxyFactory.cjs.map +1 -1
  79. package/cjs/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  80. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs +1 -1
  81. package/cjs/nodes/html-button-element/HTMLButtonElement.cjs.map +1 -1
  82. package/cjs/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  83. package/cjs/nodes/html-document/HTMLDocument.cjs +33 -2
  84. package/cjs/nodes/html-document/HTMLDocument.cjs.map +1 -1
  85. package/cjs/nodes/html-document/HTMLDocument.d.ts +10 -0
  86. package/cjs/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  87. package/cjs/nodes/html-element/HTMLElement.cjs +52 -22
  88. package/cjs/nodes/html-element/HTMLElement.cjs.map +1 -1
  89. package/cjs/nodes/html-element/HTMLElement.d.ts +34 -0
  90. package/cjs/nodes/html-element/HTMLElement.d.ts.map +1 -1
  91. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs +1 -1
  92. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.cjs.map +1 -1
  93. package/cjs/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  94. package/cjs/nodes/html-form-element/HTMLFormElement.cjs +5 -8
  95. package/cjs/nodes/html-form-element/HTMLFormElement.cjs.map +1 -1
  96. package/cjs/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  97. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs +1 -1
  98. package/cjs/nodes/html-iframe-element/HTMLIFrameElement.cjs.map +1 -1
  99. package/cjs/nodes/html-input-element/HTMLInputElement.cjs +1 -1
  100. package/cjs/nodes/html-input-element/HTMLInputElement.cjs.map +1 -1
  101. package/cjs/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  102. package/cjs/nodes/html-media-element/TextTrackList.cjs +1 -1
  103. package/cjs/nodes/html-media-element/TextTrackList.cjs.map +1 -1
  104. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs +1 -1
  105. package/cjs/nodes/html-object-element/HTMLObjectElement.cjs.map +1 -1
  106. package/cjs/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  107. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs +1 -1
  108. package/cjs/nodes/html-output-element/HTMLOutputElement.cjs.map +1 -1
  109. package/cjs/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  110. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs +3 -1
  111. package/cjs/nodes/html-script-element/HTMLScriptElement.cjs.map +1 -1
  112. package/cjs/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  113. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs +2 -2
  114. package/cjs/nodes/html-select-element/HTMLSelectElement.cjs.map +1 -1
  115. package/cjs/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  116. package/cjs/nodes/html-table-element/HTMLTableElement.cjs +9 -1
  117. package/cjs/nodes/html-table-element/HTMLTableElement.cjs.map +1 -1
  118. package/cjs/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  119. package/cjs/nodes/html-table-row-element/HTMLTableRowElement.cjs +1 -1
  120. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs +15 -17
  121. package/cjs/nodes/html-template-element/HTMLTemplateElement.cjs.map +1 -1
  122. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  123. package/cjs/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  124. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs +1 -1
  125. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.cjs.map +1 -1
  126. package/cjs/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  127. package/cjs/nodes/node/Node.cjs +44 -48
  128. package/cjs/nodes/node/Node.cjs.map +1 -1
  129. package/cjs/nodes/node/Node.d.ts +2 -10
  130. package/cjs/nodes/node/Node.d.ts.map +1 -1
  131. package/cjs/nodes/node/NodeList.cjs +1 -1
  132. package/cjs/nodes/node/NodeList.cjs.map +1 -1
  133. package/cjs/nodes/node/NodeUtility.cjs +4 -3
  134. package/cjs/nodes/node/NodeUtility.cjs.map +1 -1
  135. package/cjs/nodes/node/NodeUtility.d.ts.map +1 -1
  136. package/cjs/nodes/parent-node/ParentNodeUtility.cjs +5 -2
  137. package/cjs/nodes/parent-node/ParentNodeUtility.cjs.map +1 -1
  138. package/cjs/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  139. package/cjs/nodes/shadow-root/ShadowRoot.cjs +8 -8
  140. package/cjs/nodes/shadow-root/ShadowRoot.cjs.map +1 -1
  141. package/cjs/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  142. package/cjs/nodes/xml-document/XMLDocument.cjs +26 -0
  143. package/cjs/nodes/xml-document/XMLDocument.cjs.map +1 -1
  144. package/cjs/nodes/xml-document/XMLDocument.d.ts +2 -0
  145. package/cjs/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  146. package/cjs/query-selector/SelectorItem.cjs +1 -2
  147. package/cjs/query-selector/SelectorItem.cjs.map +1 -1
  148. package/cjs/query-selector/SelectorItem.d.ts.map +1 -1
  149. package/cjs/range/Range.cjs +3 -3
  150. package/cjs/range/Range.cjs.map +1 -1
  151. package/cjs/range/Range.d.ts.map +1 -1
  152. package/cjs/storage/Storage.cjs +1 -1
  153. package/cjs/storage/Storage.cjs.map +1 -1
  154. package/cjs/svg/SVGLengthList.cjs +1 -1
  155. package/cjs/svg/SVGLengthList.cjs.map +1 -1
  156. package/cjs/svg/SVGNumberList.cjs +1 -1
  157. package/cjs/svg/SVGNumberList.cjs.map +1 -1
  158. package/cjs/svg/SVGPointList.cjs +1 -1
  159. package/cjs/svg/SVGPointList.cjs.map +1 -1
  160. package/cjs/svg/SVGStringList.cjs +1 -1
  161. package/cjs/svg/SVGStringList.cjs.map +1 -1
  162. package/cjs/svg/SVGTransformList.cjs +1 -1
  163. package/cjs/svg/SVGTransformList.cjs.map +1 -1
  164. package/cjs/tree-walker/NodeIterator.cjs +63 -6
  165. package/cjs/tree-walker/NodeIterator.cjs.map +1 -1
  166. package/cjs/tree-walker/NodeIterator.d.ts +18 -3
  167. package/cjs/tree-walker/NodeIterator.d.ts.map +1 -1
  168. package/cjs/tree-walker/TreeWalker.cjs +6 -6
  169. package/cjs/tree-walker/TreeWalker.cjs.map +1 -1
  170. package/cjs/tree-walker/TreeWalker.d.ts +2 -1
  171. package/cjs/tree-walker/TreeWalker.d.ts.map +1 -1
  172. package/cjs/utilities/ClassMethodBinder.cjs.map +1 -0
  173. package/cjs/utilities/ClassMethodBinder.d.ts.map +1 -0
  174. package/cjs/utilities/StringUtility.cjs.map +1 -0
  175. package/cjs/utilities/StringUtility.d.ts.map +1 -0
  176. package/cjs/utilities/XMLEncodeUtility.cjs +119 -0
  177. package/cjs/utilities/XMLEncodeUtility.cjs.map +1 -0
  178. package/cjs/utilities/XMLEncodeUtility.d.ts +48 -0
  179. package/cjs/utilities/XMLEncodeUtility.d.ts.map +1 -0
  180. package/cjs/window/BrowserWindow.cjs +9 -3
  181. package/cjs/window/BrowserWindow.cjs.map +1 -1
  182. package/cjs/window/BrowserWindow.d.ts +2 -0
  183. package/cjs/window/BrowserWindow.d.ts.map +1 -1
  184. package/cjs/window/WindowErrorUtility.cjs +1 -1
  185. package/cjs/window/WindowErrorUtility.cjs.map +1 -1
  186. package/cjs/xml-http-request/XMLHttpRequest.cjs +2 -1
  187. package/cjs/xml-http-request/XMLHttpRequest.cjs.map +1 -1
  188. package/cjs/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  189. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs +1 -1
  190. package/cjs/xml-http-request/XMLHttpRequestResponseDataParser.cjs.map +1 -1
  191. package/cjs/xml-parser/XMLParser.cjs +531 -242
  192. package/cjs/xml-parser/XMLParser.cjs.map +1 -1
  193. package/cjs/xml-parser/XMLParser.d.ts +89 -19
  194. package/cjs/xml-parser/XMLParser.d.ts.map +1 -1
  195. package/cjs/xml-serializer/XMLSerializer.cjs +136 -40
  196. package/cjs/xml-serializer/XMLSerializer.cjs.map +1 -1
  197. package/cjs/xml-serializer/XMLSerializer.d.ts +6 -17
  198. package/cjs/xml-serializer/XMLSerializer.d.ts.map +1 -1
  199. package/lib/PropertySymbol.d.ts +4 -1
  200. package/lib/PropertySymbol.d.ts.map +1 -1
  201. package/lib/PropertySymbol.js +4 -1
  202. package/lib/PropertySymbol.js.map +1 -1
  203. package/lib/config/HTMLElementConfig.d.ts +7 -0
  204. package/lib/config/HTMLElementConfig.d.ts.map +1 -1
  205. package/lib/config/HTMLElementConfig.js +42 -16
  206. package/lib/config/HTMLElementConfig.js.map +1 -1
  207. package/lib/config/HTMLElementConfigContentModelEnum.d.ts +3 -0
  208. package/lib/config/HTMLElementConfigContentModelEnum.d.ts.map +1 -1
  209. package/lib/config/HTMLElementConfigContentModelEnum.js +3 -0
  210. package/lib/config/HTMLElementConfigContentModelEnum.js.map +1 -1
  211. package/lib/config/NamespaceURI.d.ts +2 -0
  212. package/lib/config/NamespaceURI.d.ts.map +1 -1
  213. package/lib/config/NamespaceURI.js +2 -0
  214. package/lib/config/NamespaceURI.js.map +1 -1
  215. package/lib/css/declaration/CSSStyleDeclaration.d.ts.map +1 -1
  216. package/lib/css/declaration/CSSStyleDeclaration.js +1 -1
  217. package/lib/css/declaration/CSSStyleDeclaration.js.map +1 -1
  218. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.d.ts.map +1 -1
  219. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js +2 -2
  220. package/lib/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.js.map +1 -1
  221. package/lib/custom-element/CustomElementReactionStack.d.ts +27 -0
  222. package/lib/custom-element/CustomElementReactionStack.d.ts.map +1 -0
  223. package/lib/custom-element/CustomElementReactionStack.js +71 -0
  224. package/lib/custom-element/CustomElementReactionStack.js.map +1 -0
  225. package/lib/custom-element/CustomElementRegistry.d.ts +2 -6
  226. package/lib/custom-element/CustomElementRegistry.d.ts.map +1 -1
  227. package/lib/custom-element/CustomElementRegistry.js +32 -45
  228. package/lib/custom-element/CustomElementRegistry.js.map +1 -1
  229. package/lib/custom-element/CustomElementUtility.d.ts +14 -0
  230. package/lib/custom-element/CustomElementUtility.d.ts.map +1 -0
  231. package/lib/custom-element/CustomElementUtility.js +32 -0
  232. package/lib/custom-element/CustomElementUtility.js.map +1 -0
  233. package/lib/custom-element/ICustomElementDefinition.d.ts +12 -0
  234. package/lib/custom-element/ICustomElementDefinition.d.ts.map +1 -0
  235. package/lib/custom-element/ICustomElementDefinition.js +2 -0
  236. package/lib/custom-element/ICustomElementDefinition.js.map +1 -0
  237. package/lib/dom/DOMStringMap.d.ts.map +1 -1
  238. package/lib/dom/DOMStringMap.js +8 -8
  239. package/lib/dom/DOMStringMap.js.map +1 -1
  240. package/lib/dom/DOMTokenList.js +1 -1
  241. package/lib/dom/DOMTokenList.js.map +1 -1
  242. package/lib/dom-parser/DOMParser.d.ts +0 -1
  243. package/lib/dom-parser/DOMParser.d.ts.map +1 -1
  244. package/lib/dom-parser/DOMParser.js +5 -67
  245. package/lib/dom-parser/DOMParser.js.map +1 -1
  246. package/lib/exception/DOMExceptionNameEnum.d.ts +2 -1
  247. package/lib/exception/DOMExceptionNameEnum.d.ts.map +1 -1
  248. package/lib/exception/DOMExceptionNameEnum.js +1 -0
  249. package/lib/exception/DOMExceptionNameEnum.js.map +1 -1
  250. package/lib/history/History.js +6 -6
  251. package/lib/history/History.js.map +1 -1
  252. package/lib/html-parser/HTMLParser.d.ts +91 -0
  253. package/lib/html-parser/HTMLParser.d.ts.map +1 -0
  254. package/lib/html-parser/HTMLParser.js +697 -0
  255. package/lib/html-parser/HTMLParser.js.map +1 -0
  256. package/lib/html-serializer/HTMLSerializer.d.ts +36 -0
  257. package/lib/html-serializer/HTMLSerializer.d.ts.map +1 -0
  258. package/lib/html-serializer/HTMLSerializer.js +123 -0
  259. package/lib/html-serializer/HTMLSerializer.js.map +1 -0
  260. package/lib/nodes/document/Document.d.ts +8 -0
  261. package/lib/nodes/document/Document.d.ts.map +1 -1
  262. package/lib/nodes/document/Document.js +106 -122
  263. package/lib/nodes/document/Document.js.map +1 -1
  264. package/lib/nodes/element/Element.d.ts +2 -12
  265. package/lib/nodes/element/Element.d.ts.map +1 -1
  266. package/lib/nodes/element/Element.js +35 -53
  267. package/lib/nodes/element/Element.js.map +1 -1
  268. package/lib/nodes/element/HTMLCollection.d.ts.map +1 -1
  269. package/lib/nodes/element/HTMLCollection.js +5 -9
  270. package/lib/nodes/element/HTMLCollection.js.map +1 -1
  271. package/lib/nodes/element/NamedNodeMap.d.ts +1 -16
  272. package/lib/nodes/element/NamedNodeMap.d.ts.map +1 -1
  273. package/lib/nodes/element/NamedNodeMap.js +39 -52
  274. package/lib/nodes/element/NamedNodeMap.js.map +1 -1
  275. package/lib/nodes/element/NamedNodeMapProxyFactory.d.ts.map +1 -1
  276. package/lib/nodes/element/NamedNodeMapProxyFactory.js +12 -14
  277. package/lib/nodes/element/NamedNodeMapProxyFactory.js.map +1 -1
  278. package/lib/nodes/html-button-element/HTMLButtonElement.d.ts.map +1 -1
  279. package/lib/nodes/html-button-element/HTMLButtonElement.js +1 -1
  280. package/lib/nodes/html-button-element/HTMLButtonElement.js.map +1 -1
  281. package/lib/nodes/html-document/HTMLDocument.d.ts +10 -0
  282. package/lib/nodes/html-document/HTMLDocument.d.ts.map +1 -1
  283. package/lib/nodes/html-document/HTMLDocument.js +33 -2
  284. package/lib/nodes/html-document/HTMLDocument.js.map +1 -1
  285. package/lib/nodes/html-element/HTMLElement.d.ts +34 -0
  286. package/lib/nodes/html-element/HTMLElement.d.ts.map +1 -1
  287. package/lib/nodes/html-element/HTMLElement.js +52 -22
  288. package/lib/nodes/html-element/HTMLElement.js.map +1 -1
  289. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.d.ts.map +1 -1
  290. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js +1 -1
  291. package/lib/nodes/html-field-set-element/HTMLFieldSetElement.js.map +1 -1
  292. package/lib/nodes/html-form-element/HTMLFormElement.d.ts.map +1 -1
  293. package/lib/nodes/html-form-element/HTMLFormElement.js +5 -8
  294. package/lib/nodes/html-form-element/HTMLFormElement.js.map +1 -1
  295. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js +1 -1
  296. package/lib/nodes/html-iframe-element/HTMLIFrameElement.js.map +1 -1
  297. package/lib/nodes/html-input-element/HTMLInputElement.d.ts.map +1 -1
  298. package/lib/nodes/html-input-element/HTMLInputElement.js +1 -1
  299. package/lib/nodes/html-input-element/HTMLInputElement.js.map +1 -1
  300. package/lib/nodes/html-media-element/TextTrackList.js +1 -1
  301. package/lib/nodes/html-media-element/TextTrackList.js.map +1 -1
  302. package/lib/nodes/html-object-element/HTMLObjectElement.d.ts.map +1 -1
  303. package/lib/nodes/html-object-element/HTMLObjectElement.js +1 -1
  304. package/lib/nodes/html-object-element/HTMLObjectElement.js.map +1 -1
  305. package/lib/nodes/html-output-element/HTMLOutputElement.d.ts.map +1 -1
  306. package/lib/nodes/html-output-element/HTMLOutputElement.js +1 -1
  307. package/lib/nodes/html-output-element/HTMLOutputElement.js.map +1 -1
  308. package/lib/nodes/html-script-element/HTMLScriptElement.d.ts.map +1 -1
  309. package/lib/nodes/html-script-element/HTMLScriptElement.js +3 -1
  310. package/lib/nodes/html-script-element/HTMLScriptElement.js.map +1 -1
  311. package/lib/nodes/html-select-element/HTMLSelectElement.d.ts.map +1 -1
  312. package/lib/nodes/html-select-element/HTMLSelectElement.js +2 -2
  313. package/lib/nodes/html-select-element/HTMLSelectElement.js.map +1 -1
  314. package/lib/nodes/html-table-element/HTMLTableElement.d.ts.map +1 -1
  315. package/lib/nodes/html-table-element/HTMLTableElement.js +9 -1
  316. package/lib/nodes/html-table-element/HTMLTableElement.js.map +1 -1
  317. package/lib/nodes/html-table-row-element/HTMLTableRowElement.js +1 -1
  318. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts +2 -2
  319. package/lib/nodes/html-template-element/HTMLTemplateElement.d.ts.map +1 -1
  320. package/lib/nodes/html-template-element/HTMLTemplateElement.js +15 -17
  321. package/lib/nodes/html-template-element/HTMLTemplateElement.js.map +1 -1
  322. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.d.ts.map +1 -1
  323. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js +1 -1
  324. package/lib/nodes/html-text-area-element/HTMLTextAreaElement.js.map +1 -1
  325. package/lib/nodes/node/Node.d.ts +2 -10
  326. package/lib/nodes/node/Node.d.ts.map +1 -1
  327. package/lib/nodes/node/Node.js +44 -48
  328. package/lib/nodes/node/Node.js.map +1 -1
  329. package/lib/nodes/node/NodeList.js +1 -1
  330. package/lib/nodes/node/NodeList.js.map +1 -1
  331. package/lib/nodes/node/NodeUtility.d.ts.map +1 -1
  332. package/lib/nodes/node/NodeUtility.js +4 -3
  333. package/lib/nodes/node/NodeUtility.js.map +1 -1
  334. package/lib/nodes/parent-node/ParentNodeUtility.d.ts.map +1 -1
  335. package/lib/nodes/parent-node/ParentNodeUtility.js +5 -2
  336. package/lib/nodes/parent-node/ParentNodeUtility.js.map +1 -1
  337. package/lib/nodes/shadow-root/ShadowRoot.d.ts.map +1 -1
  338. package/lib/nodes/shadow-root/ShadowRoot.js +8 -8
  339. package/lib/nodes/shadow-root/ShadowRoot.js.map +1 -1
  340. package/lib/nodes/xml-document/XMLDocument.d.ts +2 -0
  341. package/lib/nodes/xml-document/XMLDocument.d.ts.map +1 -1
  342. package/lib/nodes/xml-document/XMLDocument.js +3 -0
  343. package/lib/nodes/xml-document/XMLDocument.js.map +1 -1
  344. package/lib/query-selector/SelectorItem.d.ts.map +1 -1
  345. package/lib/query-selector/SelectorItem.js +1 -2
  346. package/lib/query-selector/SelectorItem.js.map +1 -1
  347. package/lib/range/Range.d.ts.map +1 -1
  348. package/lib/range/Range.js +3 -3
  349. package/lib/range/Range.js.map +1 -1
  350. package/lib/storage/Storage.js +1 -1
  351. package/lib/storage/Storage.js.map +1 -1
  352. package/lib/svg/SVGLengthList.js +1 -1
  353. package/lib/svg/SVGLengthList.js.map +1 -1
  354. package/lib/svg/SVGNumberList.js +1 -1
  355. package/lib/svg/SVGNumberList.js.map +1 -1
  356. package/lib/svg/SVGPointList.js +1 -1
  357. package/lib/svg/SVGPointList.js.map +1 -1
  358. package/lib/svg/SVGStringList.js +1 -1
  359. package/lib/svg/SVGStringList.js.map +1 -1
  360. package/lib/svg/SVGTransformList.js +1 -1
  361. package/lib/svg/SVGTransformList.js.map +1 -1
  362. package/lib/tree-walker/NodeIterator.d.ts +18 -3
  363. package/lib/tree-walker/NodeIterator.d.ts.map +1 -1
  364. package/lib/tree-walker/NodeIterator.js +40 -6
  365. package/lib/tree-walker/NodeIterator.js.map +1 -1
  366. package/lib/tree-walker/TreeWalker.d.ts +2 -1
  367. package/lib/tree-walker/TreeWalker.d.ts.map +1 -1
  368. package/lib/tree-walker/TreeWalker.js +6 -6
  369. package/lib/tree-walker/TreeWalker.js.map +1 -1
  370. package/lib/utilities/ClassMethodBinder.d.ts.map +1 -0
  371. package/lib/utilities/ClassMethodBinder.js.map +1 -0
  372. package/lib/utilities/StringUtility.d.ts.map +1 -0
  373. package/lib/utilities/StringUtility.js.map +1 -0
  374. package/lib/utilities/XMLEncodeUtility.d.ts +48 -0
  375. package/lib/utilities/XMLEncodeUtility.d.ts.map +1 -0
  376. package/lib/utilities/XMLEncodeUtility.js +116 -0
  377. package/lib/utilities/XMLEncodeUtility.js.map +1 -0
  378. package/lib/window/BrowserWindow.d.ts +2 -0
  379. package/lib/window/BrowserWindow.d.ts.map +1 -1
  380. package/lib/window/BrowserWindow.js +9 -3
  381. package/lib/window/BrowserWindow.js.map +1 -1
  382. package/lib/window/WindowErrorUtility.js +1 -1
  383. package/lib/window/WindowErrorUtility.js.map +1 -1
  384. package/lib/xml-http-request/XMLHttpRequest.d.ts.map +1 -1
  385. package/lib/xml-http-request/XMLHttpRequest.js +2 -1
  386. package/lib/xml-http-request/XMLHttpRequest.js.map +1 -1
  387. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js +1 -1
  388. package/lib/xml-http-request/XMLHttpRequestResponseDataParser.js.map +1 -1
  389. package/lib/xml-parser/XMLParser.d.ts +89 -19
  390. package/lib/xml-parser/XMLParser.d.ts.map +1 -1
  391. package/lib/xml-parser/XMLParser.js +531 -242
  392. package/lib/xml-parser/XMLParser.js.map +1 -1
  393. package/lib/xml-serializer/XMLSerializer.d.ts +6 -17
  394. package/lib/xml-serializer/XMLSerializer.d.ts.map +1 -1
  395. package/lib/xml-serializer/XMLSerializer.js +136 -40
  396. package/lib/xml-serializer/XMLSerializer.js.map +1 -1
  397. package/package.json +1 -2
  398. package/src/PropertySymbol.ts +4 -1
  399. package/src/config/HTMLElementConfig.ts +53 -17
  400. package/src/config/HTMLElementConfigContentModelEnum.ts +3 -0
  401. package/src/config/NamespaceURI.ts +2 -0
  402. package/src/css/declaration/CSSStyleDeclaration.ts +1 -4
  403. package/src/css/declaration/computed-style/CSSStyleDeclarationComputedStyle.ts +2 -4
  404. package/src/custom-element/CustomElementReactionStack.ts +81 -0
  405. package/src/custom-element/CustomElementRegistry.ts +35 -54
  406. package/src/custom-element/CustomElementUtility.ts +34 -0
  407. package/src/custom-element/ICustomElementDefinition.ts +16 -0
  408. package/src/dom/DOMStringMap.ts +12 -10
  409. package/src/dom/DOMTokenList.ts +1 -1
  410. package/src/dom-parser/DOMParser.ts +5 -75
  411. package/src/exception/DOMExceptionNameEnum.ts +2 -1
  412. package/src/history/History.ts +6 -6
  413. package/src/html-parser/HTMLParser.ts +864 -0
  414. package/src/html-serializer/HTMLSerializer.ts +162 -0
  415. package/src/nodes/document/Document.ts +118 -137
  416. package/src/nodes/element/Element.ts +48 -95
  417. package/src/nodes/element/HTMLCollection.ts +5 -30
  418. package/src/nodes/element/NamedNodeMap.ts +58 -72
  419. package/src/nodes/element/NamedNodeMapProxyFactory.ts +12 -15
  420. package/src/nodes/html-button-element/HTMLButtonElement.ts +1 -4
  421. package/src/nodes/html-document/HTMLDocument.ts +58 -2
  422. package/src/nodes/html-element/HTMLElement.ts +107 -25
  423. package/src/nodes/html-field-set-element/HTMLFieldSetElement.ts +1 -4
  424. package/src/nodes/html-form-element/HTMLFormElement.ts +5 -27
  425. package/src/nodes/html-iframe-element/HTMLIFrameElement.ts +1 -1
  426. package/src/nodes/html-input-element/HTMLInputElement.ts +1 -4
  427. package/src/nodes/html-media-element/TextTrackList.ts +1 -1
  428. package/src/nodes/html-object-element/HTMLObjectElement.ts +1 -4
  429. package/src/nodes/html-output-element/HTMLOutputElement.ts +1 -4
  430. package/src/nodes/html-script-element/HTMLScriptElement.ts +4 -1
  431. package/src/nodes/html-select-element/HTMLSelectElement.ts +2 -5
  432. package/src/nodes/html-table-element/HTMLTableElement.ts +8 -1
  433. package/src/nodes/html-table-row-element/HTMLTableRowElement.ts +1 -1
  434. package/src/nodes/html-template-element/HTMLTemplateElement.ts +23 -17
  435. package/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +1 -4
  436. package/src/nodes/node/Node.ts +57 -70
  437. package/src/nodes/node/NodeList.ts +1 -1
  438. package/src/nodes/node/NodeUtility.ts +4 -3
  439. package/src/nodes/parent-node/ParentNodeUtility.ts +6 -6
  440. package/src/nodes/shadow-root/ShadowRoot.ts +8 -8
  441. package/src/nodes/xml-document/XMLDocument.ts +5 -1
  442. package/src/query-selector/SelectorItem.ts +1 -2
  443. package/src/range/Range.ts +3 -3
  444. package/src/storage/Storage.ts +1 -1
  445. package/src/svg/SVGLengthList.ts +1 -1
  446. package/src/svg/SVGNumberList.ts +1 -1
  447. package/src/svg/SVGPointList.ts +1 -1
  448. package/src/svg/SVGStringList.ts +1 -1
  449. package/src/svg/SVGTransformList.ts +1 -1
  450. package/src/tree-walker/NodeIterator.ts +44 -8
  451. package/src/tree-walker/TreeWalker.ts +6 -6
  452. package/src/utilities/XMLEncodeUtility.ts +127 -0
  453. package/src/window/BrowserWindow.ts +18 -5
  454. package/src/window/WindowErrorUtility.ts +1 -1
  455. package/src/xml-http-request/XMLHttpRequest.ts +3 -1
  456. package/src/xml-http-request/XMLHttpRequestResponseDataParser.ts +1 -1
  457. package/src/xml-parser/XMLParser.ts +627 -313
  458. package/src/xml-serializer/XMLSerializer.ts +204 -58
  459. package/cjs/ClassMethodBinder.cjs.map +0 -1
  460. package/cjs/ClassMethodBinder.d.ts.map +0 -1
  461. package/cjs/StringUtility.cjs.map +0 -1
  462. package/cjs/StringUtility.d.ts.map +0 -1
  463. package/lib/ClassMethodBinder.d.ts.map +0 -1
  464. package/lib/ClassMethodBinder.js.map +0 -1
  465. package/lib/StringUtility.d.ts.map +0 -1
  466. package/lib/StringUtility.js.map +0 -1
  467. /package/cjs/{ClassMethodBinder.cjs → utilities/ClassMethodBinder.cjs} +0 -0
  468. /package/cjs/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  469. /package/cjs/{StringUtility.cjs → utilities/StringUtility.cjs} +0 -0
  470. /package/cjs/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  471. /package/lib/{ClassMethodBinder.d.ts → utilities/ClassMethodBinder.d.ts} +0 -0
  472. /package/lib/{ClassMethodBinder.js → utilities/ClassMethodBinder.js} +0 -0
  473. /package/lib/{StringUtility.d.ts → utilities/StringUtility.d.ts} +0 -0
  474. /package/lib/{StringUtility.js → utilities/StringUtility.js} +0 -0
  475. /package/src/{ClassMethodBinder.ts → utilities/ClassMethodBinder.ts} +0 -0
  476. /package/src/{StringUtility.ts → utilities/StringUtility.ts} +0 -0
@@ -4,8 +4,6 @@ import ShadowRoot from '../shadow-root/ShadowRoot.js';
4
4
  import DOMRect from '../../dom/DOMRect.js';
5
5
  import DOMTokenList from '../../dom/DOMTokenList.js';
6
6
  import QuerySelector from '../../query-selector/QuerySelector.js';
7
- import XMLParser from '../../xml-parser/XMLParser.js';
8
- import XMLSerializer from '../../xml-serializer/XMLSerializer.js';
9
7
  import ChildNodeUtility from '../child-node/ChildNodeUtility.js';
10
8
  import ParentNodeUtility from '../parent-node/ParentNodeUtility.js';
11
9
  import NonDocumentChildNodeUtility from '../child-node/NonDocumentChildNodeUtility.js';
@@ -16,7 +14,6 @@ import Attr from '../attr/Attr.js';
16
14
  import NamedNodeMap from './NamedNodeMap.js';
17
15
  import Event from '../../event/Event.js';
18
16
  import EventPhaseEnum from '../../event/EventPhaseEnum.js';
19
- import DocumentFragment from '../document-fragment/DocumentFragment.js';
20
17
  import WindowErrorUtility from '../../window/WindowErrorUtility.js';
21
18
  import WindowBrowserContext from '../../window/WindowBrowserContext.js';
22
19
  import BrowserErrorCaptureEnum from '../../browser/enums/BrowserErrorCaptureEnum.js';
@@ -33,6 +30,8 @@ import NodeList from '../node/NodeList.js';
33
30
  import CSSStyleDeclaration from '../../css/declaration/CSSStyleDeclaration.js';
34
31
  import NamedNodeMapProxyFactory from './NamedNodeMapProxyFactory.js';
35
32
  import NodeFactory from '../NodeFactory.js';
33
+ import HTMLSerializer from '../../html-serializer/HTMLSerializer.js';
34
+ import HTMLParser from '../../html-parser/HTMLParser.js';
36
35
 
37
36
  type InsertAdjacentPosition = 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend';
38
37
 
@@ -43,13 +42,9 @@ export default class Element
43
42
  extends Node
44
43
  implements IChildNode, INonDocumentTypeChildNode, IParentNode
45
44
  {
46
- // ObservedAttributes should only be called once by CustomElementRegistry (see #117)
47
- // CustomElementRegistry will therefore populate "[PropertySymbol.observedAttributes]" when CustomElementRegistry.define() is called
48
- public static [PropertySymbol.observedAttributes]: string[];
49
45
  public static [PropertySymbol.tagName]: string | null = null;
50
46
  public static [PropertySymbol.localName]: string | null = null;
51
47
  public static [PropertySymbol.namespaceURI]: string | null = null;
52
- public static observedAttributes: string[];
53
48
  public declare cloneNode: (deep?: boolean) => Element;
54
49
 
55
50
  // Events
@@ -407,7 +402,7 @@ export default class Element
407
402
  this.removeChild(childNodes[0]);
408
403
  }
409
404
 
410
- XMLParser.parse(this[PropertySymbol.ownerDocument], html, { rootNode: this });
405
+ new HTMLParser(this[PropertySymbol.window]).parse(html, this);
411
406
  }
412
407
 
413
408
  /**
@@ -416,7 +411,7 @@ export default class Element
416
411
  * @returns HTML.
417
412
  */
418
413
  public get outerHTML(): string {
419
- return new XMLSerializer().serializeToString(this);
414
+ return new HTMLSerializer().serializeToString(this);
420
415
  }
421
416
 
422
417
  /**
@@ -425,9 +420,9 @@ export default class Element
425
420
  * @param html HTML.
426
421
  */
427
422
  public set outerHTML(html: string) {
428
- const childNodes = (<DocumentFragment>(
429
- XMLParser.parse(this[PropertySymbol.ownerDocument], html)
430
- ))[PropertySymbol.nodeArray];
423
+ const childNodes = new HTMLParser(this[PropertySymbol.window]).parse(html)[
424
+ PropertySymbol.nodeArray
425
+ ];
431
426
  this.replaceWith(...childNodes);
432
427
  }
433
428
 
@@ -477,15 +472,6 @@ export default class Element
477
472
  this.setAttribute('slot', title);
478
473
  }
479
474
 
480
- /**
481
- * Attribute changed callback.
482
- *
483
- * @param name Name.
484
- * @param oldValue Old value.
485
- * @param newValue New value.
486
- */
487
- public attributeChangedCallback?(name: string, oldValue: string, newValue: string): void;
488
-
489
475
  /**
490
476
  * Returns inner HTML and optionally the content of shadow roots.
491
477
  *
@@ -495,19 +481,17 @@ export default class Element
495
481
  * @returns HTML.
496
482
  */
497
483
  public getInnerHTML(options?: { includeShadowRoots?: boolean }): string {
498
- const xmlSerializer = new XMLSerializer();
499
-
500
- if (options?.includeShadowRoots) {
501
- xmlSerializer[PropertySymbol.options].allShadowRoots = true;
502
- }
484
+ const serializer = new HTMLSerializer({
485
+ allShadowRoots: !!options?.includeShadowRoots
486
+ });
503
487
 
504
- let xml = '';
488
+ let html = '';
505
489
 
506
490
  for (const node of this[PropertySymbol.nodeArray]) {
507
- xml += xmlSerializer.serializeToString(node);
491
+ html += serializer.serializeToString(node);
508
492
  }
509
493
 
510
- return xml;
494
+ return html;
511
495
  }
512
496
 
513
497
  /**
@@ -522,25 +506,18 @@ export default class Element
522
506
  serializableShadowRoots?: boolean;
523
507
  shadowRoots?: ShadowRoot[];
524
508
  }): string {
525
- const xmlSerializer = new XMLSerializer();
509
+ const serializer = new HTMLSerializer({
510
+ serializableShadowRoots: !!options?.serializableShadowRoots,
511
+ shadowRoots: options?.shadowRoots ?? null
512
+ });
526
513
 
527
- if (options) {
528
- if (options.serializableShadowRoots) {
529
- xmlSerializer[PropertySymbol.options].serializableShadowRoots =
530
- options.serializableShadowRoots;
531
- }
532
- if (options.shadowRoots) {
533
- xmlSerializer[PropertySymbol.options].shadowRoots = options.shadowRoots;
534
- }
535
- }
536
-
537
- let xml = '';
514
+ let html = '';
538
515
 
539
516
  for (const node of this[PropertySymbol.nodeArray]) {
540
- xml += xmlSerializer.serializeToString(node);
517
+ html += serializer.serializeToString(node);
541
518
  }
542
519
 
543
- return xml;
520
+ return html;
544
521
  }
545
522
 
546
523
  /**
@@ -662,9 +639,9 @@ export default class Element
662
639
  * @param text HTML string to insert.
663
640
  */
664
641
  public insertAdjacentHTML(position: InsertAdjacentPosition, text: string): void {
665
- const childNodes = (<DocumentFragment>(
666
- XMLParser.parse(this[PropertySymbol.ownerDocument], text)
667
- ))[PropertySymbol.nodeArray];
642
+ const childNodes = new HTMLParser(this[PropertySymbol.window]).parse(text)[
643
+ PropertySymbol.nodeArray
644
+ ];
668
645
  while (childNodes.length) {
669
646
  this.insertAdjacentElement(position, childNodes[0]);
670
647
  }
@@ -694,9 +671,10 @@ export default class Element
694
671
  const namespaceURI = this[PropertySymbol.namespaceURI];
695
672
  // TODO: Is it correct to check for namespaceURI === NamespaceURI.svg?
696
673
  const attribute =
697
- namespaceURI === NamespaceURI.svg
698
- ? this[PropertySymbol.ownerDocument].createAttributeNS(null, name)
699
- : this[PropertySymbol.ownerDocument].createAttribute(name);
674
+ namespaceURI === NamespaceURI.html &&
675
+ this[PropertySymbol.ownerDocument][PropertySymbol.contentType] === 'text/html'
676
+ ? this[PropertySymbol.ownerDocument].createAttribute(name)
677
+ : this[PropertySymbol.ownerDocument].createAttributeNS(null, name);
700
678
  attribute[PropertySymbol.value] = String(value);
701
679
  this[PropertySymbol.attributes].setNamedItem(attribute);
702
680
  }
@@ -721,7 +699,7 @@ export default class Element
721
699
  */
722
700
  public getAttributeNames(): string[] {
723
701
  const names = [];
724
- for (const item of this[PropertySymbol.attributes][PropertySymbol.namedItems].values()) {
702
+ for (const item of this[PropertySymbol.attributes][PropertySymbol.namespaceItems].values()) {
725
703
  names.push(item[PropertySymbol.name]);
726
704
  }
727
705
  return names;
@@ -1282,8 +1260,8 @@ export default class Element
1282
1260
  /**
1283
1261
  * @override
1284
1262
  */
1285
- public override [PropertySymbol.appendChild](node: Node, isDuringParsing = false): Node {
1286
- const returnValue = super[PropertySymbol.appendChild](node, isDuringParsing);
1263
+ public override [PropertySymbol.appendChild](node: Node, disableValidations = false): Node {
1264
+ const returnValue = super[PropertySymbol.appendChild](node, disableValidations);
1287
1265
  this.#onSlotChange(node);
1288
1266
  return returnValue;
1289
1267
  }
@@ -1300,8 +1278,16 @@ export default class Element
1300
1278
  /**
1301
1279
  * @override
1302
1280
  */
1303
- public override [PropertySymbol.insertBefore](newNode: Node, referenceNode: Node | null): Node {
1304
- const returnValue = super[PropertySymbol.insertBefore](newNode, referenceNode);
1281
+ public override [PropertySymbol.insertBefore](
1282
+ newNode: Node,
1283
+ referenceNode: Node | null,
1284
+ disableValidations = false
1285
+ ): Node {
1286
+ const returnValue = super[PropertySymbol.insertBefore](
1287
+ newNode,
1288
+ referenceNode,
1289
+ disableValidations
1290
+ );
1305
1291
  this.#onSlotChange(newNode);
1306
1292
  return returnValue;
1307
1293
  }
@@ -1357,20 +1343,6 @@ export default class Element
1357
1343
  this.#addIdentifierToWindow(attribute[PropertySymbol.value]);
1358
1344
  }
1359
1345
 
1360
- if (
1361
- this.attributeChangedCallback &&
1362
- (<typeof Element>this.constructor)[PropertySymbol.observedAttributes] &&
1363
- (<typeof Element>this.constructor)[PropertySymbol.observedAttributes].includes(
1364
- attribute[PropertySymbol.name].toLowerCase()
1365
- )
1366
- ) {
1367
- this.attributeChangedCallback(
1368
- attribute[PropertySymbol.name],
1369
- oldValue,
1370
- attribute[PropertySymbol.value]
1371
- );
1372
- }
1373
-
1374
1346
  this[PropertySymbol.reportMutation](
1375
1347
  new MutationRecord({
1376
1348
  target: this,
@@ -1409,20 +1381,6 @@ export default class Element
1409
1381
  this.#removeIdentifierFromWindow(removedAttribute[PropertySymbol.value]);
1410
1382
  }
1411
1383
 
1412
- if (
1413
- this.attributeChangedCallback &&
1414
- (<typeof Element>this.constructor)[PropertySymbol.observedAttributes] &&
1415
- (<typeof Element>this.constructor)[PropertySymbol.observedAttributes].includes(
1416
- removedAttribute[PropertySymbol.name].toLowerCase()
1417
- )
1418
- ) {
1419
- this.attributeChangedCallback(
1420
- removedAttribute[PropertySymbol.name],
1421
- removedAttribute[PropertySymbol.value],
1422
- null
1423
- );
1424
- }
1425
-
1426
1384
  this[PropertySymbol.reportMutation](
1427
1385
  new MutationRecord({
1428
1386
  type: MutationTypeEnum.attributes,
@@ -1437,13 +1395,12 @@ export default class Element
1437
1395
  * @override
1438
1396
  */
1439
1397
  public override [PropertySymbol.connectedToDocument](): void {
1440
- super[PropertySymbol.connectedToDocument]();
1441
-
1442
- const id =
1443
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[PropertySymbol.value];
1398
+ const id = this.getAttribute('id');
1444
1399
  if (id) {
1445
1400
  this.#addIdentifierToWindow(id);
1446
1401
  }
1402
+
1403
+ super[PropertySymbol.connectedToDocument]();
1447
1404
  }
1448
1405
 
1449
1406
  /**
@@ -1452,12 +1409,9 @@ export default class Element
1452
1409
  public override [PropertySymbol.disconnectedFromDocument](): void {
1453
1410
  super[PropertySymbol.disconnectedFromDocument]();
1454
1411
 
1455
- const id =
1456
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[PropertySymbol.value];
1412
+ const id = this.getAttribute('id');
1457
1413
  if (id) {
1458
- this.#removeIdentifierFromWindow(
1459
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[PropertySymbol.value]
1460
- );
1414
+ this.#removeIdentifierFromWindow(id);
1461
1415
  }
1462
1416
  }
1463
1417
 
@@ -1565,10 +1519,9 @@ export default class Element
1565
1519
  return;
1566
1520
  }
1567
1521
 
1568
- const slotName =
1569
- addedOrRemovedNode[PropertySymbol.attributes]?.[PropertySymbol.namedItems].get('slot')?.[
1570
- PropertySymbol.value
1571
- ];
1522
+ const slotName = addedOrRemovedNode['getAttribute']
1523
+ ? (<Element>addedOrRemovedNode).getAttribute('slot')
1524
+ : null;
1572
1525
  if (slotName) {
1573
1526
  const slot = shadowRoot.querySelector(`slot[name="${slotName}"]`);
1574
1527
  if (slot) {
@@ -1,4 +1,4 @@
1
- import ClassMethodBinder from '../../ClassMethodBinder.js';
1
+ import ClassMethodBinder from '../../utilities/ClassMethodBinder.js';
2
2
  import * as PropertySymbol from '../../PropertySymbol.js';
3
3
  import Element from './Element.js';
4
4
 
@@ -75,13 +75,7 @@ export default class HTMLCollection<T extends Element, NamedItem = T> {
75
75
  const items = query();
76
76
  for (let i = 0; i < items.length; i++) {
77
77
  const item = items[i];
78
- const name =
79
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
80
- PropertySymbol.value
81
- ] ||
82
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('name')?.[
83
- PropertySymbol.value
84
- ];
78
+ const name = item.getAttribute('id') || item.getAttribute('name');
85
79
  keys.push(String(i));
86
80
 
87
81
  if (name) {
@@ -106,13 +100,7 @@ export default class HTMLCollection<T extends Element, NamedItem = T> {
106
100
 
107
101
  for (let i = 0; i < items.length; i++) {
108
102
  const item = items[i];
109
- const name =
110
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
111
- PropertySymbol.value
112
- ] ||
113
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('name')?.[
114
- PropertySymbol.value
115
- ];
103
+ const name = item.getAttribute('id') || item.getAttribute('name');
116
104
 
117
105
  if (name && name === property) {
118
106
  return true;
@@ -150,13 +138,7 @@ export default class HTMLCollection<T extends Element, NamedItem = T> {
150
138
 
151
139
  for (let i = 0; i < items.length; i++) {
152
140
  const item = items[i];
153
- const name =
154
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
155
- PropertySymbol.value
156
- ] ||
157
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('name')?.[
158
- PropertySymbol.value
159
- ];
141
+ const name = item.getAttribute('id') || item.getAttribute('name');
160
142
 
161
143
  if (name && name === property) {
162
144
  return {
@@ -237,14 +219,7 @@ export default class HTMLCollection<T extends Element, NamedItem = T> {
237
219
  const items = this[PropertySymbol.query]();
238
220
  name = String(name);
239
221
  for (const item of items) {
240
- if (
241
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('id')?.[
242
- PropertySymbol.value
243
- ] === name ||
244
- item[PropertySymbol.attributes][PropertySymbol.namedItems].get('name')?.[
245
- PropertySymbol.value
246
- ] === name
247
- ) {
222
+ if (item.getAttribute('id') === name || item.getAttribute('name') === name) {
248
223
  return <NamedItem>(<unknown>item);
249
224
  }
250
225
  }
@@ -4,6 +4,7 @@ import DOMException from '../../exception/DOMException.js';
4
4
  import DOMExceptionNameEnum from '../../exception/DOMExceptionNameEnum.js';
5
5
  import Element from './Element.js';
6
6
  import NamespaceURI from '../../config/NamespaceURI.js';
7
+ import StringUtility from '../../utilities/StringUtility.js';
7
8
 
8
9
  /**
9
10
  * Named Node Map.
@@ -17,7 +18,7 @@ export default class NamedNodeMap {
17
18
  public [PropertySymbol.namespaceItems]: Map<string, Attr> = new Map();
18
19
 
19
20
  // Items without namespaceURI as prefix, where the HTML namespace is the default namespace
20
- public [PropertySymbol.namedItems]: Map<string, Attr> = new Map();
21
+ public [PropertySymbol.namedItems]: Map<string, Attr[]> = new Map();
21
22
 
22
23
  public declare [PropertySymbol.ownerElement]: Element;
23
24
 
@@ -83,14 +84,15 @@ export default class NamedNodeMap {
83
84
  * @returns Item.
84
85
  */
85
86
  public getNamedItem(name: string): Attr | null {
86
- return (
87
- this[PropertySymbol.namedItems].get(
88
- this[PropertySymbol.getNamedItemKey](
89
- this[PropertySymbol.ownerElement][PropertySymbol.namespaceURI],
90
- name
91
- )
92
- ) || null
93
- );
87
+ if (
88
+ this[PropertySymbol.ownerElement][PropertySymbol.namespaceURI] === NamespaceURI.html &&
89
+ this[PropertySymbol.ownerElement][PropertySymbol.ownerDocument][
90
+ PropertySymbol.contentType
91
+ ] === 'text/html'
92
+ ) {
93
+ return this[PropertySymbol.namedItems].get(StringUtility.asciiLowerCase(name))?.[0] || null;
94
+ }
95
+ return this[PropertySymbol.namedItems].get(name)?.[0] || null;
94
96
  }
95
97
 
96
98
  /**
@@ -101,15 +103,11 @@ export default class NamedNodeMap {
101
103
  * @returns Item.
102
104
  */
103
105
  public getNamedItemNS(namespace: string, localName: string): Attr | null {
104
- for (const item of this[PropertySymbol.namespaceItems].values()) {
105
- if (
106
- item[PropertySymbol.namespaceURI] === namespace &&
107
- item[PropertySymbol.localName] === localName
108
- ) {
109
- return item;
110
- }
106
+ if (namespace === '') {
107
+ namespace = null;
111
108
  }
112
- return null;
109
+
110
+ return this[PropertySymbol.namespaceItems].get(`${namespace || ''}:${localName}`) || null;
113
111
  }
114
112
 
115
113
  /**
@@ -185,32 +183,41 @@ export default class NamedNodeMap {
185
183
  * @returns Replaced item.
186
184
  */
187
185
  public [PropertySymbol.setNamedItem](item: Attr, ignoreListeners = false): Attr {
188
- if (!item[PropertySymbol.name]) {
189
- return null;
186
+ if (
187
+ item[PropertySymbol.ownerElement] !== null &&
188
+ item[PropertySymbol.ownerElement] !== this[PropertySymbol.ownerElement]
189
+ ) {
190
+ throw new this[PropertySymbol.ownerElement][PropertySymbol.window].DOMException(
191
+ 'The attribute is in use.',
192
+ DOMExceptionNameEnum.inUseAttributeError
193
+ );
190
194
  }
191
195
 
192
196
  item[PropertySymbol.ownerElement] = this[PropertySymbol.ownerElement];
193
197
 
194
- const namespaceItemKey = this[PropertySymbol.getNamespaceItemKey](item);
195
- const replacedItem = this[PropertySymbol.namespaceItems].get(namespaceItemKey) || null;
196
- const replacedNamedItem =
197
- this[PropertySymbol.namedItems].get(item[PropertySymbol.name]) || null;
198
+ const replacedItem =
199
+ this.getNamedItemNS(item[PropertySymbol.namespaceURI], item[PropertySymbol.localName]) ||
200
+ null;
198
201
 
199
- this[PropertySymbol.namespaceItems].set(namespaceItemKey, item);
202
+ const namedItems = this[PropertySymbol.namedItems].get(item[PropertySymbol.name]);
200
203
 
201
- // The HTML namespace should be prioritized over other namespaces in the namedItems map
202
- // The HTML namespace is the default namespace
203
- if (
204
- (!replacedNamedItem ||
205
- (replacedNamedItem[PropertySymbol.namespaceURI] &&
206
- replacedNamedItem[PropertySymbol.namespaceURI] !== NamespaceURI.html) ||
207
- !item[PropertySymbol.namespaceURI] ||
208
- item[PropertySymbol.namespaceURI] === NamespaceURI.html) &&
209
- // Only lower case names should be stored in the namedItems map
210
- (this[PropertySymbol.ownerElement][PropertySymbol.namespaceURI] !== NamespaceURI.html ||
211
- item[PropertySymbol.name].toLowerCase() === item[PropertySymbol.name])
212
- ) {
213
- this[PropertySymbol.namedItems].set(item[PropertySymbol.name], item);
204
+ if (replacedItem === item) {
205
+ return item;
206
+ }
207
+
208
+ this[PropertySymbol.namespaceItems].set(
209
+ `${item[PropertySymbol.namespaceURI] || ''}:${item[PropertySymbol.localName]}`,
210
+ item
211
+ );
212
+
213
+ if (!namedItems?.length) {
214
+ this[PropertySymbol.namedItems].set(item[PropertySymbol.name], [item]);
215
+ } else {
216
+ const index = namedItems.indexOf(replacedItem);
217
+ if (index !== -1) {
218
+ namedItems.splice(index, 1);
219
+ }
220
+ namedItems.push(item);
214
221
  }
215
222
 
216
223
  if (!ignoreListeners) {
@@ -228,46 +235,25 @@ export default class NamedNodeMap {
228
235
  */
229
236
  public [PropertySymbol.removeNamedItem](item: Attr, ignoreListeners = false): void {
230
237
  item[PropertySymbol.ownerElement] = null;
231
- this[PropertySymbol.namespaceItems].delete(this[PropertySymbol.getNamespaceItemKey](item));
232
- this[PropertySymbol.namedItems].delete(
233
- this[PropertySymbol.getNamedItemKey](
234
- this[PropertySymbol.ownerElement][PropertySymbol.namespaceURI],
235
- item[PropertySymbol.name]
236
- )
238
+
239
+ this[PropertySymbol.namespaceItems].delete(
240
+ `${item[PropertySymbol.namespaceURI] || ''}:${item[PropertySymbol.localName]}`
237
241
  );
238
242
 
239
- if (!ignoreListeners) {
240
- this[PropertySymbol.ownerElement][PropertySymbol.onRemoveAttribute](item);
241
- }
242
- }
243
+ const namedItems = this[PropertySymbol.namedItems].get(item[PropertySymbol.name]);
243
244
 
244
- /**
245
- * Returns item name based on namespace.
246
- *
247
- * @param namespaceURI Namespace.
248
- * @param name Name.
249
- * @returns Item name based on namespace.
250
- */
251
- private [PropertySymbol.getNamedItemKey](namespaceURI: string, name: string): string {
252
- if (!namespaceURI || namespaceURI === NamespaceURI.html) {
253
- return name.toLowerCase();
245
+ if (namedItems?.length) {
246
+ const index = namedItems.indexOf(item);
247
+ if (index !== -1) {
248
+ namedItems.splice(index, 1);
249
+ }
250
+ if (!namedItems.length) {
251
+ this[PropertySymbol.namedItems].delete(item[PropertySymbol.name]);
252
+ }
254
253
  }
255
- return name;
256
- }
257
254
 
258
- /**
259
- * Returns item key.
260
- *
261
- * @param item Item.
262
- * @returns Key.
263
- */
264
- private [PropertySymbol.getNamespaceItemKey](item: Attr): string {
265
- if (
266
- !item[PropertySymbol.namespaceURI] ||
267
- item[PropertySymbol.namespaceURI] === NamespaceURI.html
268
- ) {
269
- return item[PropertySymbol.name].toLowerCase();
255
+ if (!ignoreListeners) {
256
+ this[PropertySymbol.ownerElement][PropertySymbol.onRemoveAttribute](item);
270
257
  }
271
- return `${item[PropertySymbol.namespaceURI] || ''}:${item[PropertySymbol.name]}`;
272
258
  }
273
259
  }
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable filenames/match-exported */
2
2
 
3
- import ClassMethodBinder from '../../ClassMethodBinder.js';
3
+ import ClassMethodBinder from '../../utilities/ClassMethodBinder.js';
4
4
  import * as PropertySymbol from '../../PropertySymbol.js';
5
5
  import NamedNodeMap from './NamedNodeMap.js';
6
6
 
@@ -16,15 +16,12 @@ export default class NamedNodeMapProxyFactory {
16
16
  * @param namedNodeMap
17
17
  */
18
18
  public static createProxy(namedNodeMap: NamedNodeMap): NamedNodeMap {
19
- const namedItems = namedNodeMap[PropertySymbol.namedItems];
20
- const namespaceItems = namedNodeMap[PropertySymbol.namespaceItems];
21
-
22
19
  const methodBinder = new ClassMethodBinder(this, [NamedNodeMap]);
23
20
 
24
21
  return new Proxy<NamedNodeMap>(namedNodeMap, {
25
22
  get: (target, property) => {
26
23
  if (property === 'length') {
27
- return namespaceItems.size;
24
+ return namedNodeMap[PropertySymbol.namedItems].size;
28
25
  }
29
26
  if (property in target || typeof property === 'symbol') {
30
27
  methodBinder.bind(property);
@@ -32,7 +29,7 @@ export default class NamedNodeMapProxyFactory {
32
29
  }
33
30
  const index = Number(property);
34
31
  if (!isNaN(index)) {
35
- return Array.from(namespaceItems.values())[index];
32
+ return Array.from(namedNodeMap[PropertySymbol.namedItems].values())[index]?.[0];
36
33
  }
37
34
  return target.getNamedItem(<string>property) || undefined;
38
35
  },
@@ -60,8 +57,8 @@ export default class NamedNodeMapProxyFactory {
60
57
  return true;
61
58
  },
62
59
  ownKeys(): string[] {
63
- const keys = Array.from(namedItems.keys());
64
- for (let i = 0, max = namespaceItems.size; i < max; i++) {
60
+ const keys = Array.from(namedNodeMap[PropertySymbol.namedItems].keys());
61
+ for (let i = 0, max = namedNodeMap[PropertySymbol.namedItems].size; i < max; i++) {
65
62
  keys.push(String(i));
66
63
  }
67
64
  return keys;
@@ -71,13 +68,13 @@ export default class NamedNodeMapProxyFactory {
71
68
  return false;
72
69
  }
73
70
 
74
- if (property in target || namedItems.has(property)) {
71
+ if (property in target || namedNodeMap[PropertySymbol.namedItems].has(property)) {
75
72
  return true;
76
73
  }
77
74
 
78
75
  const index = Number(property);
79
76
 
80
- if (!isNaN(index) && index >= 0 && index < namespaceItems.size) {
77
+ if (!isNaN(index) && index >= 0 && index < namedNodeMap[PropertySymbol.namedItems].size) {
81
78
  return true;
82
79
  }
83
80
 
@@ -100,20 +97,20 @@ export default class NamedNodeMapProxyFactory {
100
97
 
101
98
  const index = Number(property);
102
99
 
103
- if (!isNaN(index) && index >= 0 && index < namespaceItems.size) {
100
+ if (!isNaN(index) && index >= 0 && index < namedNodeMap[PropertySymbol.namedItems].size) {
104
101
  return {
105
- value: Array.from(namespaceItems.values())[index],
102
+ value: Array.from(namedNodeMap[PropertySymbol.namedItems].values())[index][0],
106
103
  writable: false,
107
104
  enumerable: true,
108
105
  configurable: true
109
106
  };
110
107
  }
111
108
 
112
- const namedItem = target.getNamedItem(<string>property);
109
+ const namedItems = namedNodeMap[PropertySymbol.namedItems].get(<string>property);
113
110
 
114
- if (namedItem) {
111
+ if (namedItems) {
115
112
  return {
116
- value: namedItem,
113
+ value: namedItems[0],
117
114
  writable: false,
118
115
  enumerable: true,
119
116
  configurable: true
@@ -236,10 +236,7 @@ export default class HTMLButtonElement extends HTMLElement {
236
236
  if (this[PropertySymbol.formNode]) {
237
237
  return this[PropertySymbol.formNode];
238
238
  }
239
- const id =
240
- this[PropertySymbol.attributes][PropertySymbol.namedItems].get('form')?.[
241
- PropertySymbol.value
242
- ];
239
+ const id = this.getAttribute('form');
243
240
  if (!id || !this[PropertySymbol.isConnected]) {
244
241
  return null;
245
242
  }