@dooboostore/dom-parser 1.0.3 → 1.0.5

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 (521) hide show
  1. package/README.MD +369 -6
  2. package/dist/cjs/DomParser.js +1 -0
  3. package/dist/cjs/DomParser.js.map +2 -2
  4. package/dist/cjs/bundle-entry.js +36 -0
  5. package/dist/cjs/bundle-entry.js.map +7 -0
  6. package/dist/cjs/factory/ElementFactory.js +12 -9
  7. package/dist/cjs/factory/ElementFactory.js.map +2 -2
  8. package/dist/cjs/index.js +22 -0
  9. package/dist/cjs/index.js.map +2 -2
  10. package/dist/cjs/node/elements/HTMLAnchorElement.js +2 -2
  11. package/dist/cjs/node/elements/HTMLAnchorElement.js.map +2 -2
  12. package/dist/cjs/node/elements/HTMLAreaElement.js +2 -2
  13. package/dist/cjs/node/elements/HTMLAreaElement.js.map +2 -2
  14. package/dist/cjs/node/elements/HTMLAudioElement.js +2 -2
  15. package/dist/cjs/node/elements/HTMLAudioElement.js.map +2 -2
  16. package/dist/cjs/node/elements/HTMLBaseElement.js +2 -2
  17. package/dist/cjs/node/elements/HTMLBaseElement.js.map +2 -2
  18. package/dist/cjs/node/elements/HTMLBodyElement.js +2 -2
  19. package/dist/cjs/node/elements/HTMLBodyElement.js.map +2 -2
  20. package/dist/cjs/node/elements/HTMLButtonElement.js +2 -2
  21. package/dist/cjs/node/elements/HTMLButtonElement.js.map +2 -2
  22. package/dist/cjs/node/elements/HTMLCanvasElement.js +2 -2
  23. package/dist/cjs/node/elements/HTMLCanvasElement.js.map +2 -2
  24. package/dist/cjs/node/elements/HTMLCaptionElement.js +2 -2
  25. package/dist/cjs/node/elements/HTMLCaptionElement.js.map +2 -2
  26. package/dist/cjs/node/elements/HTMLDListElement.js +2 -2
  27. package/dist/cjs/node/elements/HTMLDListElement.js.map +2 -2
  28. package/dist/cjs/node/elements/HTMLDataElement.js +2 -2
  29. package/dist/cjs/node/elements/HTMLDataElement.js.map +2 -2
  30. package/dist/cjs/node/elements/HTMLDataListElement.js +2 -2
  31. package/dist/cjs/node/elements/HTMLDataListElement.js.map +2 -2
  32. package/dist/cjs/node/elements/HTMLDetailsElement.js +2 -2
  33. package/dist/cjs/node/elements/HTMLDetailsElement.js.map +2 -2
  34. package/dist/cjs/node/elements/HTMLDialogElement.js +2 -2
  35. package/dist/cjs/node/elements/HTMLDialogElement.js.map +2 -2
  36. package/dist/cjs/node/elements/HTMLDivElement.js +2 -2
  37. package/dist/cjs/node/elements/HTMLDivElement.js.map +2 -2
  38. package/dist/cjs/node/elements/HTMLElement.js +3 -0
  39. package/dist/cjs/node/elements/HTMLElement.js.map +2 -2
  40. package/dist/cjs/node/elements/HTMLElementBase.js +3 -1
  41. package/dist/cjs/node/elements/HTMLElementBase.js.map +2 -2
  42. package/dist/cjs/node/elements/HTMLEmbedElement.js +2 -2
  43. package/dist/cjs/node/elements/HTMLEmbedElement.js.map +2 -2
  44. package/dist/cjs/node/elements/HTMLFieldSetElement.js +2 -2
  45. package/dist/cjs/node/elements/HTMLFieldSetElement.js.map +2 -2
  46. package/dist/cjs/node/elements/HTMLFormElement.js +2 -2
  47. package/dist/cjs/node/elements/HTMLFormElement.js.map +2 -2
  48. package/dist/cjs/node/elements/HTMLH1Element.js +2 -2
  49. package/dist/cjs/node/elements/HTMLH1Element.js.map +2 -2
  50. package/dist/cjs/node/elements/HTMLHRElement.js +2 -2
  51. package/dist/cjs/node/elements/HTMLHRElement.js.map +2 -2
  52. package/dist/cjs/node/elements/HTMLHeadElement.js +2 -2
  53. package/dist/cjs/node/elements/HTMLHeadElement.js.map +2 -2
  54. package/dist/cjs/node/elements/HTMLHtmlElement.js +2 -2
  55. package/dist/cjs/node/elements/HTMLHtmlElement.js.map +2 -2
  56. package/dist/cjs/node/elements/HTMLIFrameElement.js +2 -2
  57. package/dist/cjs/node/elements/HTMLIFrameElement.js.map +2 -2
  58. package/dist/cjs/node/elements/HTMLImgElement.js +2 -2
  59. package/dist/cjs/node/elements/HTMLImgElement.js.map +2 -2
  60. package/dist/cjs/node/elements/HTMLInputElement.js +2 -2
  61. package/dist/cjs/node/elements/HTMLInputElement.js.map +2 -2
  62. package/dist/cjs/node/elements/HTMLLIElement.js +2 -2
  63. package/dist/cjs/node/elements/HTMLLIElement.js.map +2 -2
  64. package/dist/cjs/node/elements/HTMLLabelElement.js +2 -2
  65. package/dist/cjs/node/elements/HTMLLabelElement.js.map +2 -2
  66. package/dist/cjs/node/elements/HTMLLegendElement.js +2 -2
  67. package/dist/cjs/node/elements/HTMLLegendElement.js.map +2 -2
  68. package/dist/cjs/node/elements/HTMLLinkElement.js +2 -2
  69. package/dist/cjs/node/elements/HTMLLinkElement.js.map +2 -2
  70. package/dist/cjs/node/elements/HTMLMapElement.js +2 -2
  71. package/dist/cjs/node/elements/HTMLMapElement.js.map +2 -2
  72. package/dist/cjs/node/elements/HTMLMetaElement.js +2 -2
  73. package/dist/cjs/node/elements/HTMLMetaElement.js.map +2 -2
  74. package/dist/cjs/node/elements/HTMLMeterElement.js +2 -2
  75. package/dist/cjs/node/elements/HTMLMeterElement.js.map +2 -2
  76. package/dist/cjs/node/elements/HTMLModElement.js +2 -2
  77. package/dist/cjs/node/elements/HTMLModElement.js.map +2 -2
  78. package/dist/cjs/node/elements/HTMLOListElement.js +2 -2
  79. package/dist/cjs/node/elements/HTMLOListElement.js.map +2 -2
  80. package/dist/cjs/node/elements/HTMLObjectElement.js +2 -2
  81. package/dist/cjs/node/elements/HTMLObjectElement.js.map +2 -2
  82. package/dist/cjs/node/elements/HTMLOptGroupElement.js +2 -2
  83. package/dist/cjs/node/elements/HTMLOptGroupElement.js.map +2 -2
  84. package/dist/cjs/node/elements/HTMLOptionElement.js +2 -2
  85. package/dist/cjs/node/elements/HTMLOptionElement.js.map +2 -2
  86. package/dist/cjs/node/elements/HTMLOutputElement.js +2 -2
  87. package/dist/cjs/node/elements/HTMLOutputElement.js.map +2 -2
  88. package/dist/cjs/node/elements/HTMLPElement.js +2 -2
  89. package/dist/cjs/node/elements/HTMLPElement.js.map +2 -2
  90. package/dist/cjs/node/elements/HTMLParamElement.js +2 -2
  91. package/dist/cjs/node/elements/HTMLParamElement.js.map +2 -2
  92. package/dist/cjs/node/elements/HTMLPictureElement.js +2 -2
  93. package/dist/cjs/node/elements/HTMLPictureElement.js.map +2 -2
  94. package/dist/cjs/node/elements/HTMLPreElement.js +2 -2
  95. package/dist/cjs/node/elements/HTMLPreElement.js.map +2 -2
  96. package/dist/cjs/node/elements/HTMLProgressElement.js +2 -2
  97. package/dist/cjs/node/elements/HTMLProgressElement.js.map +2 -2
  98. package/dist/cjs/node/elements/HTMLQuoteElement.js +2 -2
  99. package/dist/cjs/node/elements/HTMLQuoteElement.js.map +2 -2
  100. package/dist/cjs/node/elements/HTMLScriptElement.js +2 -2
  101. package/dist/cjs/node/elements/HTMLScriptElement.js.map +2 -2
  102. package/dist/cjs/node/elements/HTMLSelectElement.js +2 -2
  103. package/dist/cjs/node/elements/HTMLSelectElement.js.map +2 -2
  104. package/dist/cjs/node/elements/HTMLSlotElement.js +2 -2
  105. package/dist/cjs/node/elements/HTMLSlotElement.js.map +2 -2
  106. package/dist/cjs/node/elements/HTMLSourceElement.js +2 -2
  107. package/dist/cjs/node/elements/HTMLSourceElement.js.map +2 -2
  108. package/dist/cjs/node/elements/HTMLSpanElement.js +2 -2
  109. package/dist/cjs/node/elements/HTMLSpanElement.js.map +2 -2
  110. package/dist/cjs/node/elements/HTMLStyleElement.js +2 -2
  111. package/dist/cjs/node/elements/HTMLStyleElement.js.map +2 -2
  112. package/dist/cjs/node/elements/HTMLTableElement.js +2 -2
  113. package/dist/cjs/node/elements/HTMLTableElement.js.map +2 -2
  114. package/dist/cjs/node/elements/HTMLTbodyElement.js +2 -2
  115. package/dist/cjs/node/elements/HTMLTbodyElement.js.map +2 -2
  116. package/dist/cjs/node/elements/HTMLTdElement.js +2 -2
  117. package/dist/cjs/node/elements/HTMLTdElement.js.map +2 -2
  118. package/dist/cjs/node/elements/HTMLTemplateElement.js +2 -2
  119. package/dist/cjs/node/elements/HTMLTemplateElement.js.map +2 -2
  120. package/dist/cjs/node/elements/HTMLTextAreaElement.js +2 -2
  121. package/dist/cjs/node/elements/HTMLTextAreaElement.js.map +2 -2
  122. package/dist/cjs/node/elements/HTMLTfootElement.js +2 -2
  123. package/dist/cjs/node/elements/HTMLTfootElement.js.map +2 -2
  124. package/dist/cjs/node/elements/HTMLThElement.js +2 -2
  125. package/dist/cjs/node/elements/HTMLThElement.js.map +2 -2
  126. package/dist/cjs/node/elements/HTMLTheadElement.js +2 -2
  127. package/dist/cjs/node/elements/HTMLTheadElement.js.map +2 -2
  128. package/dist/cjs/node/elements/HTMLTimeElement.js +2 -2
  129. package/dist/cjs/node/elements/HTMLTimeElement.js.map +2 -2
  130. package/dist/cjs/node/elements/HTMLTitleElement.js +2 -2
  131. package/dist/cjs/node/elements/HTMLTitleElement.js.map +2 -2
  132. package/dist/cjs/node/elements/HTMLTrElement.js +2 -2
  133. package/dist/cjs/node/elements/HTMLTrElement.js.map +2 -2
  134. package/dist/cjs/node/elements/HTMLTrackElement.js +2 -2
  135. package/dist/cjs/node/elements/HTMLTrackElement.js.map +2 -2
  136. package/dist/cjs/node/elements/HTMLUListElement.js +2 -2
  137. package/dist/cjs/node/elements/HTMLUListElement.js.map +2 -2
  138. package/dist/cjs/node/elements/HTMLVideoElement.js +2 -2
  139. package/dist/cjs/node/elements/HTMLVideoElement.js.map +2 -2
  140. package/dist/cjs/node/elements/MathMLElement.js +2 -2
  141. package/dist/cjs/node/elements/MathMLElement.js.map +2 -2
  142. package/dist/cjs/node/elements/SVGElement.js +2 -2
  143. package/dist/cjs/node/elements/SVGElement.js.map +2 -2
  144. package/dist/cjs/node/elements/index.js +1 -3
  145. package/dist/cjs/node/elements/index.js.map +2 -2
  146. package/dist/cjs/window/CustomElementRegistryImp.js +8 -0
  147. package/dist/cjs/window/CustomElementRegistryImp.js.map +2 -2
  148. package/dist/esm/DomParser.js +1 -0
  149. package/dist/esm/DomParser.js.map +2 -2
  150. package/dist/esm/bundle-entry.js +6 -0
  151. package/dist/esm/bundle-entry.js.map +7 -0
  152. package/dist/esm/factory/ElementFactory.js +13 -10
  153. package/dist/esm/factory/ElementFactory.js.map +2 -2
  154. package/dist/esm/index.js +22 -0
  155. package/dist/esm/index.js.map +2 -2
  156. package/dist/esm/node/elements/HTMLAnchorElement.js +2 -2
  157. package/dist/esm/node/elements/HTMLAnchorElement.js.map +2 -2
  158. package/dist/esm/node/elements/HTMLAreaElement.js +2 -2
  159. package/dist/esm/node/elements/HTMLAreaElement.js.map +2 -2
  160. package/dist/esm/node/elements/HTMLAudioElement.js +2 -2
  161. package/dist/esm/node/elements/HTMLAudioElement.js.map +2 -2
  162. package/dist/esm/node/elements/HTMLBaseElement.js +2 -2
  163. package/dist/esm/node/elements/HTMLBaseElement.js.map +2 -2
  164. package/dist/esm/node/elements/HTMLBodyElement.js +2 -2
  165. package/dist/esm/node/elements/HTMLBodyElement.js.map +2 -2
  166. package/dist/esm/node/elements/HTMLButtonElement.js +2 -2
  167. package/dist/esm/node/elements/HTMLButtonElement.js.map +2 -2
  168. package/dist/esm/node/elements/HTMLCanvasElement.js +2 -2
  169. package/dist/esm/node/elements/HTMLCanvasElement.js.map +2 -2
  170. package/dist/esm/node/elements/HTMLCaptionElement.js +2 -2
  171. package/dist/esm/node/elements/HTMLCaptionElement.js.map +2 -2
  172. package/dist/esm/node/elements/HTMLDListElement.js +2 -2
  173. package/dist/esm/node/elements/HTMLDListElement.js.map +2 -2
  174. package/dist/esm/node/elements/HTMLDataElement.js +2 -2
  175. package/dist/esm/node/elements/HTMLDataElement.js.map +2 -2
  176. package/dist/esm/node/elements/HTMLDataListElement.js +2 -2
  177. package/dist/esm/node/elements/HTMLDataListElement.js.map +2 -2
  178. package/dist/esm/node/elements/HTMLDetailsElement.js +2 -2
  179. package/dist/esm/node/elements/HTMLDetailsElement.js.map +2 -2
  180. package/dist/esm/node/elements/HTMLDialogElement.js +2 -2
  181. package/dist/esm/node/elements/HTMLDialogElement.js.map +2 -2
  182. package/dist/esm/node/elements/HTMLDivElement.js +2 -2
  183. package/dist/esm/node/elements/HTMLDivElement.js.map +2 -2
  184. package/dist/esm/node/elements/HTMLElement.js +3 -0
  185. package/dist/esm/node/elements/HTMLElement.js.map +2 -2
  186. package/dist/esm/node/elements/HTMLElementBase.js +3 -1
  187. package/dist/esm/node/elements/HTMLElementBase.js.map +2 -2
  188. package/dist/esm/node/elements/HTMLEmbedElement.js +2 -2
  189. package/dist/esm/node/elements/HTMLEmbedElement.js.map +2 -2
  190. package/dist/esm/node/elements/HTMLFieldSetElement.js +2 -2
  191. package/dist/esm/node/elements/HTMLFieldSetElement.js.map +2 -2
  192. package/dist/esm/node/elements/HTMLFormElement.js +2 -2
  193. package/dist/esm/node/elements/HTMLFormElement.js.map +2 -2
  194. package/dist/esm/node/elements/HTMLH1Element.js +2 -2
  195. package/dist/esm/node/elements/HTMLH1Element.js.map +2 -2
  196. package/dist/esm/node/elements/HTMLHRElement.js +2 -2
  197. package/dist/esm/node/elements/HTMLHRElement.js.map +2 -2
  198. package/dist/esm/node/elements/HTMLHeadElement.js +2 -2
  199. package/dist/esm/node/elements/HTMLHeadElement.js.map +2 -2
  200. package/dist/esm/node/elements/HTMLHtmlElement.js +2 -2
  201. package/dist/esm/node/elements/HTMLHtmlElement.js.map +2 -2
  202. package/dist/esm/node/elements/HTMLIFrameElement.js +2 -2
  203. package/dist/esm/node/elements/HTMLIFrameElement.js.map +2 -2
  204. package/dist/esm/node/elements/HTMLImgElement.js +2 -2
  205. package/dist/esm/node/elements/HTMLImgElement.js.map +2 -2
  206. package/dist/esm/node/elements/HTMLInputElement.js +2 -2
  207. package/dist/esm/node/elements/HTMLInputElement.js.map +2 -2
  208. package/dist/esm/node/elements/HTMLLIElement.js +2 -2
  209. package/dist/esm/node/elements/HTMLLIElement.js.map +2 -2
  210. package/dist/esm/node/elements/HTMLLabelElement.js +2 -2
  211. package/dist/esm/node/elements/HTMLLabelElement.js.map +2 -2
  212. package/dist/esm/node/elements/HTMLLegendElement.js +2 -2
  213. package/dist/esm/node/elements/HTMLLegendElement.js.map +2 -2
  214. package/dist/esm/node/elements/HTMLLinkElement.js +2 -2
  215. package/dist/esm/node/elements/HTMLLinkElement.js.map +2 -2
  216. package/dist/esm/node/elements/HTMLMapElement.js +2 -2
  217. package/dist/esm/node/elements/HTMLMapElement.js.map +2 -2
  218. package/dist/esm/node/elements/HTMLMetaElement.js +2 -2
  219. package/dist/esm/node/elements/HTMLMetaElement.js.map +2 -2
  220. package/dist/esm/node/elements/HTMLMeterElement.js +2 -2
  221. package/dist/esm/node/elements/HTMLMeterElement.js.map +2 -2
  222. package/dist/esm/node/elements/HTMLModElement.js +2 -2
  223. package/dist/esm/node/elements/HTMLModElement.js.map +2 -2
  224. package/dist/esm/node/elements/HTMLOListElement.js +2 -2
  225. package/dist/esm/node/elements/HTMLOListElement.js.map +2 -2
  226. package/dist/esm/node/elements/HTMLObjectElement.js +2 -2
  227. package/dist/esm/node/elements/HTMLObjectElement.js.map +2 -2
  228. package/dist/esm/node/elements/HTMLOptGroupElement.js +2 -2
  229. package/dist/esm/node/elements/HTMLOptGroupElement.js.map +2 -2
  230. package/dist/esm/node/elements/HTMLOptionElement.js +2 -2
  231. package/dist/esm/node/elements/HTMLOptionElement.js.map +2 -2
  232. package/dist/esm/node/elements/HTMLOutputElement.js +2 -2
  233. package/dist/esm/node/elements/HTMLOutputElement.js.map +2 -2
  234. package/dist/esm/node/elements/HTMLPElement.js +2 -2
  235. package/dist/esm/node/elements/HTMLPElement.js.map +2 -2
  236. package/dist/esm/node/elements/HTMLParamElement.js +2 -2
  237. package/dist/esm/node/elements/HTMLParamElement.js.map +2 -2
  238. package/dist/esm/node/elements/HTMLPictureElement.js +2 -2
  239. package/dist/esm/node/elements/HTMLPictureElement.js.map +2 -2
  240. package/dist/esm/node/elements/HTMLPreElement.js +2 -2
  241. package/dist/esm/node/elements/HTMLPreElement.js.map +2 -2
  242. package/dist/esm/node/elements/HTMLProgressElement.js +2 -2
  243. package/dist/esm/node/elements/HTMLProgressElement.js.map +2 -2
  244. package/dist/esm/node/elements/HTMLQuoteElement.js +2 -2
  245. package/dist/esm/node/elements/HTMLQuoteElement.js.map +2 -2
  246. package/dist/esm/node/elements/HTMLScriptElement.js +2 -2
  247. package/dist/esm/node/elements/HTMLScriptElement.js.map +2 -2
  248. package/dist/esm/node/elements/HTMLSelectElement.js +2 -2
  249. package/dist/esm/node/elements/HTMLSelectElement.js.map +2 -2
  250. package/dist/esm/node/elements/HTMLSlotElement.js +2 -2
  251. package/dist/esm/node/elements/HTMLSlotElement.js.map +2 -2
  252. package/dist/esm/node/elements/HTMLSourceElement.js +2 -2
  253. package/dist/esm/node/elements/HTMLSourceElement.js.map +2 -2
  254. package/dist/esm/node/elements/HTMLSpanElement.js +2 -2
  255. package/dist/esm/node/elements/HTMLSpanElement.js.map +2 -2
  256. package/dist/esm/node/elements/HTMLStyleElement.js +2 -2
  257. package/dist/esm/node/elements/HTMLStyleElement.js.map +2 -2
  258. package/dist/esm/node/elements/HTMLTableElement.js +2 -2
  259. package/dist/esm/node/elements/HTMLTableElement.js.map +2 -2
  260. package/dist/esm/node/elements/HTMLTbodyElement.js +2 -2
  261. package/dist/esm/node/elements/HTMLTbodyElement.js.map +2 -2
  262. package/dist/esm/node/elements/HTMLTdElement.js +2 -2
  263. package/dist/esm/node/elements/HTMLTdElement.js.map +2 -2
  264. package/dist/esm/node/elements/HTMLTemplateElement.js +2 -2
  265. package/dist/esm/node/elements/HTMLTemplateElement.js.map +2 -2
  266. package/dist/esm/node/elements/HTMLTextAreaElement.js +2 -2
  267. package/dist/esm/node/elements/HTMLTextAreaElement.js.map +2 -2
  268. package/dist/esm/node/elements/HTMLTfootElement.js +2 -2
  269. package/dist/esm/node/elements/HTMLTfootElement.js.map +2 -2
  270. package/dist/esm/node/elements/HTMLThElement.js +2 -2
  271. package/dist/esm/node/elements/HTMLThElement.js.map +2 -2
  272. package/dist/esm/node/elements/HTMLTheadElement.js +2 -2
  273. package/dist/esm/node/elements/HTMLTheadElement.js.map +2 -2
  274. package/dist/esm/node/elements/HTMLTimeElement.js +2 -2
  275. package/dist/esm/node/elements/HTMLTimeElement.js.map +2 -2
  276. package/dist/esm/node/elements/HTMLTitleElement.js +2 -2
  277. package/dist/esm/node/elements/HTMLTitleElement.js.map +2 -2
  278. package/dist/esm/node/elements/HTMLTrElement.js +2 -2
  279. package/dist/esm/node/elements/HTMLTrElement.js.map +2 -2
  280. package/dist/esm/node/elements/HTMLTrackElement.js +2 -2
  281. package/dist/esm/node/elements/HTMLTrackElement.js.map +2 -2
  282. package/dist/esm/node/elements/HTMLUListElement.js +2 -2
  283. package/dist/esm/node/elements/HTMLUListElement.js.map +2 -2
  284. package/dist/esm/node/elements/HTMLVideoElement.js +2 -2
  285. package/dist/esm/node/elements/HTMLVideoElement.js.map +2 -2
  286. package/dist/esm/node/elements/MathMLElement.js +2 -2
  287. package/dist/esm/node/elements/MathMLElement.js.map +2 -2
  288. package/dist/esm/node/elements/SVGElement.js +2 -2
  289. package/dist/esm/node/elements/SVGElement.js.map +2 -2
  290. package/dist/esm/node/elements/index.js +1 -3
  291. package/dist/esm/node/elements/index.js.map +2 -2
  292. package/dist/esm/window/CustomElementRegistryImp.js +8 -0
  293. package/dist/esm/window/CustomElementRegistryImp.js.map +2 -2
  294. package/dist/esm-bundle/dooboostore-dom-parser.esm.js +109 -88
  295. package/dist/esm-bundle/dooboostore-dom-parser.esm.js.map +3 -3
  296. package/dist/types/DomParser.d.ts.map +1 -1
  297. package/dist/types/bundle-entry.d.ts +3 -0
  298. package/dist/types/bundle-entry.d.ts.map +1 -0
  299. package/dist/types/factory/ElementFactory.d.ts.map +1 -1
  300. package/dist/types/index.d.ts +11 -0
  301. package/dist/types/index.d.ts.map +1 -1
  302. package/dist/types/node/elements/HTMLAnchorElement.d.ts +2 -2
  303. package/dist/types/node/elements/HTMLAnchorElement.d.ts.map +1 -1
  304. package/dist/types/node/elements/HTMLAreaElement.d.ts +2 -2
  305. package/dist/types/node/elements/HTMLAreaElement.d.ts.map +1 -1
  306. package/dist/types/node/elements/HTMLAudioElement.d.ts +2 -2
  307. package/dist/types/node/elements/HTMLAudioElement.d.ts.map +1 -1
  308. package/dist/types/node/elements/HTMLBaseElement.d.ts +2 -2
  309. package/dist/types/node/elements/HTMLBaseElement.d.ts.map +1 -1
  310. package/dist/types/node/elements/HTMLBodyElement.d.ts +2 -2
  311. package/dist/types/node/elements/HTMLBodyElement.d.ts.map +1 -1
  312. package/dist/types/node/elements/HTMLButtonElement.d.ts +2 -2
  313. package/dist/types/node/elements/HTMLButtonElement.d.ts.map +1 -1
  314. package/dist/types/node/elements/HTMLCanvasElement.d.ts +2 -2
  315. package/dist/types/node/elements/HTMLCanvasElement.d.ts.map +1 -1
  316. package/dist/types/node/elements/HTMLCaptionElement.d.ts +2 -2
  317. package/dist/types/node/elements/HTMLCaptionElement.d.ts.map +1 -1
  318. package/dist/types/node/elements/HTMLDListElement.d.ts +2 -2
  319. package/dist/types/node/elements/HTMLDListElement.d.ts.map +1 -1
  320. package/dist/types/node/elements/HTMLDataElement.d.ts +2 -2
  321. package/dist/types/node/elements/HTMLDataElement.d.ts.map +1 -1
  322. package/dist/types/node/elements/HTMLDataListElement.d.ts +2 -2
  323. package/dist/types/node/elements/HTMLDataListElement.d.ts.map +1 -1
  324. package/dist/types/node/elements/HTMLDetailsElement.d.ts +2 -2
  325. package/dist/types/node/elements/HTMLDetailsElement.d.ts.map +1 -1
  326. package/dist/types/node/elements/HTMLDialogElement.d.ts +2 -2
  327. package/dist/types/node/elements/HTMLDialogElement.d.ts.map +1 -1
  328. package/dist/types/node/elements/HTMLDivElement.d.ts +2 -2
  329. package/dist/types/node/elements/HTMLDivElement.d.ts.map +1 -1
  330. package/dist/types/node/elements/HTMLElement.d.ts +1 -0
  331. package/dist/types/node/elements/HTMLElement.d.ts.map +1 -1
  332. package/dist/types/node/elements/HTMLElementBase.d.ts.map +1 -1
  333. package/dist/types/node/elements/HTMLEmbedElement.d.ts +2 -2
  334. package/dist/types/node/elements/HTMLEmbedElement.d.ts.map +1 -1
  335. package/dist/types/node/elements/HTMLFieldSetElement.d.ts +2 -2
  336. package/dist/types/node/elements/HTMLFieldSetElement.d.ts.map +1 -1
  337. package/dist/types/node/elements/HTMLFormElement.d.ts +2 -2
  338. package/dist/types/node/elements/HTMLFormElement.d.ts.map +1 -1
  339. package/dist/types/node/elements/HTMLH1Element.d.ts +2 -2
  340. package/dist/types/node/elements/HTMLH1Element.d.ts.map +1 -1
  341. package/dist/types/node/elements/HTMLHRElement.d.ts +2 -2
  342. package/dist/types/node/elements/HTMLHRElement.d.ts.map +1 -1
  343. package/dist/types/node/elements/HTMLHeadElement.d.ts +2 -2
  344. package/dist/types/node/elements/HTMLHeadElement.d.ts.map +1 -1
  345. package/dist/types/node/elements/HTMLHtmlElement.d.ts +2 -2
  346. package/dist/types/node/elements/HTMLHtmlElement.d.ts.map +1 -1
  347. package/dist/types/node/elements/HTMLIFrameElement.d.ts +2 -2
  348. package/dist/types/node/elements/HTMLIFrameElement.d.ts.map +1 -1
  349. package/dist/types/node/elements/HTMLImgElement.d.ts +2 -2
  350. package/dist/types/node/elements/HTMLImgElement.d.ts.map +1 -1
  351. package/dist/types/node/elements/HTMLInputElement.d.ts +2 -2
  352. package/dist/types/node/elements/HTMLInputElement.d.ts.map +1 -1
  353. package/dist/types/node/elements/HTMLLIElement.d.ts +2 -2
  354. package/dist/types/node/elements/HTMLLIElement.d.ts.map +1 -1
  355. package/dist/types/node/elements/HTMLLabelElement.d.ts +2 -2
  356. package/dist/types/node/elements/HTMLLabelElement.d.ts.map +1 -1
  357. package/dist/types/node/elements/HTMLLegendElement.d.ts +2 -2
  358. package/dist/types/node/elements/HTMLLegendElement.d.ts.map +1 -1
  359. package/dist/types/node/elements/HTMLLinkElement.d.ts +2 -2
  360. package/dist/types/node/elements/HTMLLinkElement.d.ts.map +1 -1
  361. package/dist/types/node/elements/HTMLMapElement.d.ts +2 -2
  362. package/dist/types/node/elements/HTMLMapElement.d.ts.map +1 -1
  363. package/dist/types/node/elements/HTMLMetaElement.d.ts +2 -2
  364. package/dist/types/node/elements/HTMLMetaElement.d.ts.map +1 -1
  365. package/dist/types/node/elements/HTMLMeterElement.d.ts +2 -2
  366. package/dist/types/node/elements/HTMLMeterElement.d.ts.map +1 -1
  367. package/dist/types/node/elements/HTMLModElement.d.ts +2 -2
  368. package/dist/types/node/elements/HTMLModElement.d.ts.map +1 -1
  369. package/dist/types/node/elements/HTMLOListElement.d.ts +2 -2
  370. package/dist/types/node/elements/HTMLOListElement.d.ts.map +1 -1
  371. package/dist/types/node/elements/HTMLObjectElement.d.ts +2 -2
  372. package/dist/types/node/elements/HTMLObjectElement.d.ts.map +1 -1
  373. package/dist/types/node/elements/HTMLOptGroupElement.d.ts +2 -2
  374. package/dist/types/node/elements/HTMLOptGroupElement.d.ts.map +1 -1
  375. package/dist/types/node/elements/HTMLOptionElement.d.ts +2 -2
  376. package/dist/types/node/elements/HTMLOptionElement.d.ts.map +1 -1
  377. package/dist/types/node/elements/HTMLOutputElement.d.ts +2 -2
  378. package/dist/types/node/elements/HTMLOutputElement.d.ts.map +1 -1
  379. package/dist/types/node/elements/HTMLPElement.d.ts +2 -2
  380. package/dist/types/node/elements/HTMLPElement.d.ts.map +1 -1
  381. package/dist/types/node/elements/HTMLParamElement.d.ts +2 -2
  382. package/dist/types/node/elements/HTMLParamElement.d.ts.map +1 -1
  383. package/dist/types/node/elements/HTMLPictureElement.d.ts +2 -2
  384. package/dist/types/node/elements/HTMLPictureElement.d.ts.map +1 -1
  385. package/dist/types/node/elements/HTMLPreElement.d.ts +2 -2
  386. package/dist/types/node/elements/HTMLPreElement.d.ts.map +1 -1
  387. package/dist/types/node/elements/HTMLProgressElement.d.ts +2 -2
  388. package/dist/types/node/elements/HTMLProgressElement.d.ts.map +1 -1
  389. package/dist/types/node/elements/HTMLQuoteElement.d.ts +2 -2
  390. package/dist/types/node/elements/HTMLQuoteElement.d.ts.map +1 -1
  391. package/dist/types/node/elements/HTMLScriptElement.d.ts +2 -2
  392. package/dist/types/node/elements/HTMLScriptElement.d.ts.map +1 -1
  393. package/dist/types/node/elements/HTMLSelectElement.d.ts +2 -2
  394. package/dist/types/node/elements/HTMLSelectElement.d.ts.map +1 -1
  395. package/dist/types/node/elements/HTMLSlotElement.d.ts +2 -2
  396. package/dist/types/node/elements/HTMLSlotElement.d.ts.map +1 -1
  397. package/dist/types/node/elements/HTMLSourceElement.d.ts +2 -2
  398. package/dist/types/node/elements/HTMLSourceElement.d.ts.map +1 -1
  399. package/dist/types/node/elements/HTMLSpanElement.d.ts +2 -2
  400. package/dist/types/node/elements/HTMLSpanElement.d.ts.map +1 -1
  401. package/dist/types/node/elements/HTMLStyleElement.d.ts +2 -2
  402. package/dist/types/node/elements/HTMLStyleElement.d.ts.map +1 -1
  403. package/dist/types/node/elements/HTMLTableElement.d.ts +2 -2
  404. package/dist/types/node/elements/HTMLTableElement.d.ts.map +1 -1
  405. package/dist/types/node/elements/HTMLTbodyElement.d.ts +2 -2
  406. package/dist/types/node/elements/HTMLTbodyElement.d.ts.map +1 -1
  407. package/dist/types/node/elements/HTMLTdElement.d.ts +2 -2
  408. package/dist/types/node/elements/HTMLTdElement.d.ts.map +1 -1
  409. package/dist/types/node/elements/HTMLTemplateElement.d.ts +2 -2
  410. package/dist/types/node/elements/HTMLTemplateElement.d.ts.map +1 -1
  411. package/dist/types/node/elements/HTMLTextAreaElement.d.ts +2 -2
  412. package/dist/types/node/elements/HTMLTextAreaElement.d.ts.map +1 -1
  413. package/dist/types/node/elements/HTMLTfootElement.d.ts +2 -2
  414. package/dist/types/node/elements/HTMLTfootElement.d.ts.map +1 -1
  415. package/dist/types/node/elements/HTMLThElement.d.ts +2 -2
  416. package/dist/types/node/elements/HTMLThElement.d.ts.map +1 -1
  417. package/dist/types/node/elements/HTMLTheadElement.d.ts +2 -2
  418. package/dist/types/node/elements/HTMLTheadElement.d.ts.map +1 -1
  419. package/dist/types/node/elements/HTMLTimeElement.d.ts +2 -2
  420. package/dist/types/node/elements/HTMLTimeElement.d.ts.map +1 -1
  421. package/dist/types/node/elements/HTMLTitleElement.d.ts +2 -2
  422. package/dist/types/node/elements/HTMLTitleElement.d.ts.map +1 -1
  423. package/dist/types/node/elements/HTMLTrElement.d.ts +2 -2
  424. package/dist/types/node/elements/HTMLTrElement.d.ts.map +1 -1
  425. package/dist/types/node/elements/HTMLTrackElement.d.ts +2 -2
  426. package/dist/types/node/elements/HTMLTrackElement.d.ts.map +1 -1
  427. package/dist/types/node/elements/HTMLUListElement.d.ts +2 -2
  428. package/dist/types/node/elements/HTMLUListElement.d.ts.map +1 -1
  429. package/dist/types/node/elements/HTMLVideoElement.d.ts +2 -2
  430. package/dist/types/node/elements/HTMLVideoElement.d.ts.map +1 -1
  431. package/dist/types/node/elements/MathMLElement.d.ts +2 -2
  432. package/dist/types/node/elements/MathMLElement.d.ts.map +1 -1
  433. package/dist/types/node/elements/SVGElement.d.ts +2 -2
  434. package/dist/types/node/elements/SVGElement.d.ts.map +1 -1
  435. package/dist/types/node/elements/index.d.ts +3 -4
  436. package/dist/types/node/elements/index.d.ts.map +1 -1
  437. package/dist/types/window/CustomElementRegistryImp.d.ts +1 -0
  438. package/dist/types/window/CustomElementRegistryImp.d.ts.map +1 -1
  439. package/dist/umd-bundle/dooboostore-dom-parser.umd.js +109 -88
  440. package/dist/umd-bundle/dooboostore-dom-parser.umd.js.map +3 -3
  441. package/package.json +6 -1
  442. package/src/DomParser.ts +1 -0
  443. package/src/bundle-entry.ts +2 -0
  444. package/src/factory/ElementFactory.ts +18 -11
  445. package/src/index.ts +11 -0
  446. package/src/node/elements/HTMLAnchorElement.ts +2 -1
  447. package/src/node/elements/HTMLAreaElement.ts +2 -1
  448. package/src/node/elements/HTMLAudioElement.ts +2 -1
  449. package/src/node/elements/HTMLBaseElement.ts +2 -1
  450. package/src/node/elements/HTMLBodyElement.ts +2 -1
  451. package/src/node/elements/HTMLButtonElement.ts +2 -1
  452. package/src/node/elements/HTMLCanvasElement.ts +2 -1
  453. package/src/node/elements/HTMLCaptionElement.ts +2 -1
  454. package/src/node/elements/HTMLDListElement.ts +8 -2
  455. package/src/node/elements/HTMLDataElement.ts +2 -1
  456. package/src/node/elements/HTMLDataListElement.ts +8 -2
  457. package/src/node/elements/HTMLDetailsElement.ts +8 -2
  458. package/src/node/elements/HTMLDialogElement.ts +8 -2
  459. package/src/node/elements/HTMLDivElement.ts +2 -1
  460. package/src/node/elements/HTMLElement.ts +4 -0
  461. package/src/node/elements/HTMLElementBase.ts +8 -2
  462. package/src/node/elements/HTMLEmbedElement.ts +2 -1
  463. package/src/node/elements/HTMLFieldSetElement.ts +8 -2
  464. package/src/node/elements/HTMLFormElement.ts +2 -1
  465. package/src/node/elements/HTMLH1Element.ts +2 -1
  466. package/src/node/elements/HTMLHRElement.ts +8 -2
  467. package/src/node/elements/HTMLHeadElement.ts +2 -1
  468. package/src/node/elements/HTMLHtmlElement.ts +2 -1
  469. package/src/node/elements/HTMLIFrameElement.ts +8 -2
  470. package/src/node/elements/HTMLImgElement.ts +2 -1
  471. package/src/node/elements/HTMLInputElement.ts +2 -1
  472. package/src/node/elements/HTMLLIElement.ts +2 -1
  473. package/src/node/elements/HTMLLabelElement.ts +2 -1
  474. package/src/node/elements/HTMLLegendElement.ts +2 -1
  475. package/src/node/elements/HTMLLinkElement.ts +2 -1
  476. package/src/node/elements/HTMLMapElement.ts +2 -1
  477. package/src/node/elements/HTMLMetaElement.ts +2 -1
  478. package/src/node/elements/HTMLMeterElement.ts +2 -1
  479. package/src/node/elements/HTMLModElement.ts +2 -1
  480. package/src/node/elements/HTMLOListElement.ts +2 -1
  481. package/src/node/elements/HTMLObjectElement.ts +2 -1
  482. package/src/node/elements/HTMLOptGroupElement.ts +2 -1
  483. package/src/node/elements/HTMLOptionElement.ts +2 -1
  484. package/src/node/elements/HTMLOutputElement.ts +2 -1
  485. package/src/node/elements/HTMLPElement.ts +2 -1
  486. package/src/node/elements/HTMLParamElement.ts +2 -1
  487. package/src/node/elements/HTMLPictureElement.ts +2 -1
  488. package/src/node/elements/HTMLPreElement.ts +2 -1
  489. package/src/node/elements/HTMLProgressElement.ts +2 -1
  490. package/src/node/elements/HTMLQuoteElement.ts +2 -1
  491. package/src/node/elements/HTMLScriptElement.ts +2 -1
  492. package/src/node/elements/HTMLSelectElement.ts +2 -1
  493. package/src/node/elements/HTMLSlotElement.ts +2 -1
  494. package/src/node/elements/HTMLSourceElement.ts +2 -1
  495. package/src/node/elements/HTMLSpanElement.ts +2 -1
  496. package/src/node/elements/HTMLStyleElement.ts +2 -1
  497. package/src/node/elements/HTMLTableElement.ts +6 -1
  498. package/src/node/elements/HTMLTbodyElement.ts +3 -2
  499. package/src/node/elements/HTMLTdElement.ts +2 -1
  500. package/src/node/elements/HTMLTemplateElement.ts +2 -1
  501. package/src/node/elements/HTMLTextAreaElement.ts +2 -1
  502. package/src/node/elements/HTMLTfootElement.ts +3 -1
  503. package/src/node/elements/HTMLThElement.ts +2 -1
  504. package/src/node/elements/HTMLTheadElement.ts +3 -2
  505. package/src/node/elements/HTMLTimeElement.ts +2 -1
  506. package/src/node/elements/HTMLTitleElement.ts +2 -1
  507. package/src/node/elements/HTMLTrElement.ts +4 -1
  508. package/src/node/elements/HTMLTrackElement.ts +2 -1
  509. package/src/node/elements/HTMLUListElement.ts +2 -1
  510. package/src/node/elements/HTMLVideoElement.ts +2 -1
  511. package/src/node/elements/MathMLElement.ts +2 -1
  512. package/src/node/elements/SVGElement.ts +2 -1
  513. package/src/node/elements/index.ts +5 -4
  514. package/src/window/CustomElementRegistryImp.ts +18 -0
  515. package/dist/cjs/node/elements/HTMLGenericElement.js +0 -32
  516. package/dist/cjs/node/elements/HTMLGenericElement.js.map +0 -7
  517. package/dist/esm/node/elements/HTMLGenericElement.js +0 -13
  518. package/dist/esm/node/elements/HTMLGenericElement.js.map +0 -7
  519. package/dist/types/node/elements/HTMLGenericElement.d.ts +0 -6
  520. package/dist/types/node/elements/HTMLGenericElement.d.ts.map +0 -1
  521. package/src/node/elements/HTMLGenericElement.ts +0 -13
@@ -43,6 +43,14 @@ class CustomElementRegistryImp {
43
43
  this.upgrade(this._window.document);
44
44
  }
45
45
  }
46
+ getName(constructor) {
47
+ for (const [name, registration] of this._definitions) {
48
+ if (registration.constructor === constructor) {
49
+ return name;
50
+ }
51
+ }
52
+ return void 0;
53
+ }
46
54
  get(name) {
47
55
  return this._definitions.get(name)?.constructor;
48
56
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/window/CustomElementRegistryImp.ts"],
4
- "sourcesContent": ["export interface CustomElementRegistration {\n constructor: any;\n options?: ElementDefinitionOptions;\n}\n\nexport class CustomElementRegistryImp implements CustomElementRegistration {\n private _definitions = new Map<string, CustomElementRegistration>();\n private _whenDefinedPromises = new Map<string, { promise: Promise<void>; resolve: () => void }>();\n private _window: any;\n\n setWindow(window: any): void {\n this._window = window;\n }\n\n define(name: string, constructor: any, options?: ElementDefinitionOptions): void {\n if (this._definitions.has(name)) {\n throw new Error(`Registration failed for '${name}': a device with this name has already been registered.`);\n }\n\n // Basic validation of custom element name (must contain a hyphen)\n if (!name.includes('-')) {\n throw new Error(`Registration failed for '${name}': the name is not a valid custom element name.`);\n }\n\n this._definitions.set(name, { constructor, options });\n\n // Resolve any pending whenDefined promises\n if (this._whenDefinedPromises.has(name)) {\n this._whenDefinedPromises.get(name)!.resolve();\n }\n\n // Automatically upgrade existing elements in the document\n if (this._window && this._window.document) {\n // console.log(` [CustomElementRegistry] Upgrading document for: ${name}`);\n this.upgrade(this._window.document);\n }\n }\n\n get(name: string): any | undefined {\n return this._definitions.get(name)?.constructor;\n }\n\n upgrade(root: any): void {\n if (!root) return;\n\n const nodesToUpgrade: any[] = [];\n const walk = (node: any) => {\n if (node.nodeType === 1) {\n const tagName = node.tagName.toLowerCase();\n const isAttr = node.getAttribute('is');\n const registration = isAttr ? this._definitions.get(isAttr) : this._definitions.get(tagName);\n\n if (registration) {\n const isInstance = node instanceof registration.constructor;\n if (!isInstance) {\n // console.log(` [CustomElementRegistry] Found node to upgrade: <${tagName}${isAttr ? ' is=\"' + isAttr + '\"' : ''}>`);\n nodesToUpgrade.push({ node, registration });\n }\n }\n }\n\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n\n walk(root);\n\n // Perform upgrades after walking to avoid traversal issues\n for (const { node, registration } of nodesToUpgrade) {\n const newInstance = new registration.constructor();\n // Ensure the tag name is preserved if it's an autonomous custom element\n // or set correctly if it's a customized built-in\n newInstance._tagName = node.tagName;\n newInstance.nodeName = node.tagName;\n\n // Copy attributes\n if (node.attributes) {\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes.item(i);\n if (attr) {\n newInstance.setAttribute(attr.name, attr.value);\n }\n }\n }\n\n // Move children\n while (node.firstChild) {\n newInstance.appendChild(node.firstChild);\n }\n\n // Replace in parent\n if (node.parentNode) {\n node.parentNode.replaceChild(newInstance, node);\n }\n }\n }\n\n whenDefined(name: string): Promise<void> {\n if (this._definitions.has(name)) {\n return Promise.resolve();\n }\n\n if (!this._whenDefinedPromises.has(name)) {\n let resolve!: () => void;\n const promise = new Promise<void>(r => {\n resolve = r;\n });\n this._whenDefinedPromises.set(name, { promise, resolve });\n }\n\n return this._whenDefinedPromises.get(name)!.promise;\n }\n}\n\nexport interface ElementDefinitionOptions {\n extends?: string;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,MAAM,yBAA8D;AAAA,EAApE;AACL,SAAQ,eAAe,oBAAI,IAAuC;AAClE,SAAQ,uBAAuB,oBAAI,IAA6D;AAAA;AAAA,EAGhG,UAAU,QAAmB;AAC3B,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO,MAAc,aAAkB,SAA0C;AAC/E,QAAI,KAAK,aAAa,IAAI,IAAI,GAAG;AAC/B,YAAM,IAAI,MAAM,4BAA4B,IAAI,yDAAyD;AAAA,IAC3G;AAGA,QAAI,CAAC,KAAK,SAAS,GAAG,GAAG;AACvB,YAAM,IAAI,MAAM,4BAA4B,IAAI,iDAAiD;AAAA,IACnG;AAEA,SAAK,aAAa,IAAI,MAAM,EAAE,aAAa,QAAQ,CAAC;AAGpD,QAAI,KAAK,qBAAqB,IAAI,IAAI,GAAG;AACvC,WAAK,qBAAqB,IAAI,IAAI,EAAG,QAAQ;AAAA,IAC/C;AAGA,QAAI,KAAK,WAAW,KAAK,QAAQ,UAAU;AAEzC,WAAK,QAAQ,KAAK,QAAQ,QAAQ;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,IAAI,MAA+B;AACjC,WAAO,KAAK,aAAa,IAAI,IAAI,GAAG;AAAA,EACtC;AAAA,EAEA,QAAQ,MAAiB;AACvB,QAAI,CAAC,KAAM;AAEX,UAAM,iBAAwB,CAAC;AAC/B,UAAM,OAAO,CAAC,SAAc;AAC1B,UAAI,KAAK,aAAa,GAAG;AACvB,cAAM,UAAU,KAAK,QAAQ,YAAY;AACzC,cAAM,SAAS,KAAK,aAAa,IAAI;AACrC,cAAM,eAAe,SAAS,KAAK,aAAa,IAAI,MAAM,IAAI,KAAK,aAAa,IAAI,OAAO;AAE3F,YAAI,cAAc;AAChB,gBAAM,aAAa,gBAAgB,aAAa;AAChD,cAAI,CAAC,YAAY;AAEf,2BAAe,KAAK,EAAE,MAAM,aAAa,CAAC;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAEA,UAAI,QAAQ,KAAK;AACjB,aAAO,OAAO;AACZ,aAAK,KAAK;AACV,gBAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AAEA,SAAK,IAAI;AAGT,eAAW,EAAE,MAAM,aAAa,KAAK,gBAAgB;AACnD,YAAM,cAAc,IAAI,aAAa,YAAY;AAGjD,kBAAY,WAAW,KAAK;AAC5B,kBAAY,WAAW,KAAK;AAG5B,UAAI,KAAK,YAAY;AACnB,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;AAC/C,gBAAM,OAAO,KAAK,WAAW,KAAK,CAAC;AACnC,cAAI,MAAM;AACR,wBAAY,aAAa,KAAK,MAAM,KAAK,KAAK;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAGA,aAAO,KAAK,YAAY;AACtB,oBAAY,YAAY,KAAK,UAAU;AAAA,MACzC;AAGA,UAAI,KAAK,YAAY;AACnB,aAAK,WAAW,aAAa,aAAa,IAAI;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,YAAY,MAA6B;AACvC,QAAI,KAAK,aAAa,IAAI,IAAI,GAAG;AAC/B,aAAO,QAAQ,QAAQ;AAAA,IACzB;AAEA,QAAI,CAAC,KAAK,qBAAqB,IAAI,IAAI,GAAG;AACxC,UAAI;AACJ,YAAM,UAAU,IAAI,QAAc,OAAK;AACrC,kBAAU;AAAA,MACZ,CAAC;AACD,WAAK,qBAAqB,IAAI,MAAM,EAAE,SAAS,QAAQ,CAAC;AAAA,IAC1D;AAEA,WAAO,KAAK,qBAAqB,IAAI,IAAI,EAAG;AAAA,EAC9C;AACF;",
4
+ "sourcesContent": ["export interface CustomElementRegistration {\n constructor: any;\n options?: ElementDefinitionOptions;\n}\n\nexport class CustomElementRegistryImp implements CustomElementRegistration {\n private _definitions = new Map<string, CustomElementRegistration>();\n private _whenDefinedPromises = new Map<string, { promise: Promise<void>; resolve: () => void }>();\n private _window: any;\n\n setWindow(window: any): void {\n this._window = window;\n }\n\n define(name: string, constructor: any, options?: ElementDefinitionOptions): void {\n if (this._definitions.has(name)) {\n throw new Error(`Registration failed for '${name}': a device with this name has already been registered.`);\n }\n\n // Basic validation of custom element name (must contain a hyphen)\n if (!name.includes('-')) {\n throw new Error(`Registration failed for '${name}': the name is not a valid custom element name.`);\n }\n\n // Keep registration metadata on constructor so direct `new` calls can infer the proper tag name.\n // const ctor = constructor as any;\n // ctor.__domParserTagName = name;\n // if (options?.extends) {\n // ctor.__domParserExtendsTagName = options.extends;\n // }\n\n this._definitions.set(name, { constructor, options });\n\n // Resolve any pending whenDefined promises\n if (this._whenDefinedPromises.has(name)) {\n this._whenDefinedPromises.get(name)!.resolve();\n }\n\n // Automatically upgrade existing elements in the document\n if (this._window && this._window.document) {\n // console.log(` [CustomElementRegistry] Upgrading document for: ${name}`);\n this.upgrade(this._window.document);\n }\n }\n\n\n getName(constructor: any): string | undefined {\n for (const [name, registration] of this._definitions) {\n if (registration.constructor === constructor) {\n return name;\n }\n }\n return undefined;\n }\n\n\n get(name: string): any | undefined {\n return this._definitions.get(name)?.constructor;\n }\n\n upgrade(root: any): void {\n if (!root) return;\n\n const nodesToUpgrade: any[] = [];\n const walk = (node: any) => {\n if (node.nodeType === 1) {\n const tagName = node.tagName.toLowerCase();\n const isAttr = node.getAttribute('is');\n const registration = isAttr ? this._definitions.get(isAttr) : this._definitions.get(tagName);\n\n if (registration) {\n const isInstance = node instanceof registration.constructor;\n if (!isInstance) {\n // console.log(` [CustomElementRegistry] Found node to upgrade: <${tagName}${isAttr ? ' is=\"' + isAttr + '\"' : ''}>`);\n nodesToUpgrade.push({ node, registration });\n }\n }\n }\n\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n\n walk(root);\n\n // Perform upgrades after walking to avoid traversal issues\n for (const { node, registration } of nodesToUpgrade) {\n const newInstance = new registration.constructor();\n // Ensure the tag name is preserved if it's an autonomous custom element\n // or set correctly if it's a customized built-in\n newInstance._tagName = node.tagName;\n newInstance.nodeName = node.tagName;\n\n // Copy attributes\n if (node.attributes) {\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes.item(i);\n if (attr) {\n newInstance.setAttribute(attr.name, attr.value);\n }\n }\n }\n\n // Move children\n while (node.firstChild) {\n newInstance.appendChild(node.firstChild);\n }\n\n // Replace in parent\n if (node.parentNode) {\n node.parentNode.replaceChild(newInstance, node);\n }\n }\n }\n\n whenDefined(name: string): Promise<void> {\n if (this._definitions.has(name)) {\n return Promise.resolve();\n }\n\n if (!this._whenDefinedPromises.has(name)) {\n let resolve!: () => void;\n const promise = new Promise<void>(r => {\n resolve = r;\n });\n this._whenDefinedPromises.set(name, { promise, resolve });\n }\n\n return this._whenDefinedPromises.get(name)!.promise;\n }\n}\n\nexport interface ElementDefinitionOptions {\n extends?: string;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -10,6 +10,7 @@ ElementBase.dependencies = {
10
10
  };
11
11
  class DomParser {
12
12
  constructor(html, option) {
13
+ console.log("create DomParser==", html);
13
14
  const windowBase = new WindowBase({ initialUrl: option?.href });
14
15
  this._window = windowBase;
15
16
  this._document = windowBase.document;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/DomParser.ts"],
4
- "sourcesContent": ["import { DocumentBase } from './node/DocumentBase';\nimport { TextBase } from './node/TextBase';\nimport { Comment } from './node/Comment';\nimport { WindowBase } from './window/WindowBase';\nimport { ElementBase } from './node/elements/ElementBase';\nimport { ElementFactory } from './factory/ElementFactory';\n\n// Inject dependencies into ElementBase to break circular references\n// without using 'require' or 'global' injection magic.\nElementBase.dependencies = {\n ElementFactory,\n TextBase,\n Comment\n};\n\nexport interface DomParserOptions {\n href?: string;\n}\n\nexport class DomParser {\n private _window: Window | null;\n private _document: Document | null;\n\n constructor(html: string, option?: DomParserOptions) {\n // Create WindowBase instance with the document\n const windowBase = new WindowBase({ initialUrl: option?.href });\n this._window = windowBase as unknown as Window;\n this._document = windowBase.document as any;\n\n // Parse the provided HTML string\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n\n // Simulate document loading process\n if (this._document && (this._document as any).simulateLoading) {\n (this._document as any).simulateLoading();\n }\n }\n\n get window(): Window {\n if (!this._window) {\n throw new Error('DomParser has been destroyed');\n }\n return this._window;\n }\n\n get document(): Document {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n return this._document;\n }\n\n /**\n * Destroy the DomParser instance and free memory\n */\n destroy(): void {\n if (this._window) {\n this._window.close();\n this._window = null;\n }\n\n this._document = null;\n }\n\n /**\n * Load new HTML content and replace the current document\n */\n loadHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Clear current document content\n this.clearDocument();\n\n // Parse new HTML\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n }\n\n private clearDocument(): void {\n if (!this._document) return;\n\n // Clear document body and head content while preserving structure\n if (this._document.head) {\n while (this._document.head.firstChild) {\n this._document.head.removeChild(this._document.head.firstChild);\n }\n }\n\n if (this._document.body) {\n while (this._document.body.firstChild) {\n this._document.body.removeChild(this._document.body.firstChild);\n }\n }\n }\n\n parseHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Ensure basic HTML structure if input is empty or lacks it\n if (!html.trim()) {\n html = '<html><head></head><body></body></html>';\n } else if (!/<html/i.test(html)) {\n // If it's just a fragment, we still need html/head/body for a full document\n // but only if it's not explicitly intended to be a fragment?\n // Actually, standard DOMParser.parseFromString always creates them.\n html = `<html><head></head><body>${html}</body></html>`;\n }\n\n // Basic HTML parsing - this is a simplified version\n this.parseHTMLString(html, this.document);\n }\n\n private parseHTMLString(html: string, parent: any): void {\n // Remove DOCTYPE if present\n html = html.replace(/<!DOCTYPE[^>]*>/i, '').trim();\n\n if (!html) return;\n\n // Handle template tags specially\n const templateRegex = /<template([^>]*)>(.*?)<\\/template>/gs;\n html = html.replace(templateRegex, (match, attributes, content) => {\n const element = this.document.createElement('template');\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Parse content directly into the template's content fragment\n if (content.trim()) {\n // Use internal method to avoid appendChild side effects\n this.parseHTMLString(content.trim(), element.content);\n }\n\n parent.appendChild(element);\n return ''; // Remove from HTML string\n });\n\n // Improved HTML parsing with proper nesting support\n this.parseHTMLRecursive(html, parent);\n }\n\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n // Find next tag or comment\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n // No more tags, add remaining text if any\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = new TextBase(remainingText, this.document);\n parent.appendChild(textNode);\n }\n break;\n }\n\n // Add text before tag if any\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = new TextBase(textContent, this.document);\n parent.appendChild(textNode);\n }\n }\n\n // Check if this is a comment\n if (html.substring(tagStart, tagStart + 4) === '<!--') {\n const commentEnd = html.indexOf('-->', tagStart + 4);\n if (commentEnd !== -1) {\n const commentContent = html.substring(tagStart + 4, commentEnd);\n const commentNode = new Comment(commentContent, this.document);\n parent.appendChild(commentNode);\n position = commentEnd + 3;\n continue;\n } else {\n // Malformed comment, treat as text\n const textNode = new TextBase(html.substring(tagStart, tagStart + 4), this.document);\n parent.appendChild(textNode);\n position = tagStart + 4;\n continue;\n }\n }\n\n // Find tag end\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n // Check if it's a closing tag\n if (tagContent.startsWith('/')) {\n // This is a closing tag, we should return to parent\n position = tagEnd + 1;\n break;\n }\n\n // Check if it's a self-closing tag\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n\n // Parse tag name and attributes\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n let attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1);\n\n // Only remove trailing slash for self-closing tags (not from attribute values)\n if (attributes.endsWith('/')) {\n attributes = attributes.slice(0, -1).trim();\n }\n\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n parent.appendChild(element);\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\n // Find matching closing tag and parse content\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);\n\n if (closingTagIndex !== -1) {\n const innerContent = html.substring(tagEnd + 1, closingTagIndex);\n if (innerContent.trim()) {\n this.parseHTMLRecursive(innerContent, element);\n }\n position = closingTagIndex + closingTag.length;\n } else {\n // No matching closing tag found, treat as self-closing\n position = tagEnd + 1;\n }\n }\n }\n }\n\n private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let pos = startPos;\n\n while (pos < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, pos);\n const nextClose = html.indexOf(closeTag, pos);\n\n if (nextClose === -1) {\n // No more closing tags\n return -1;\n }\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n // Found another opening tag before the closing tag\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n // Found a closing tag\n depth--;\n if (depth === 0) {\n return nextClose;\n }\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Improved attribute parsing that handles complex JavaScript expressions\n let position = 0;\n const length = attributeString.length;\n\n while (position < length) {\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position >= length) break;\n\n // Find attribute name\n const nameStart = position;\n while (position < length && /[\\w:-]/.test(attributeString[position])) {\n position++;\n }\n\n if (position === nameStart) {\n // Invalid character, skip it\n position++;\n continue;\n }\n\n const name = attributeString.substring(nameStart, position);\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n let value = '';\n\n // Check if there's an equals sign\n if (position < length && attributeString[position] === '=') {\n position++; // Skip '='\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position < length) {\n const quote = attributeString[position];\n\n if (quote === '\"' || quote === \"'\") {\n // Quoted value - find matching closing quote\n position++; // Skip opening quote\n const valueStart = position;\n\n while (position < length && attributeString[position] !== quote) {\n position++;\n }\n\n value = attributeString.substring(valueStart, position);\n\n if (position < length && attributeString[position] === quote) {\n position++; // Skip closing quote\n }\n } else {\n // Unquoted value - read until whitespace or end\n const valueStart = position;\n while (position < length && !/\\s/.test(attributeString[position])) {\n position++;\n }\n value = attributeString.substring(valueStart, position);\n }\n }\n }\n\n // Decode HTML entities in attribute values\n value = this.decodeHTMLEntities(value);\n\n element.setAttribute(name, value);\n }\n }\n\n /**\n * Decode HTML entities in a string\n */\n private decodeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#34;': '\"',\n '&apos;': \"'\",\n '&copy;': '\u00A9',\n '&reg;': '\u00AE',\n '&trade;': '\u2122',\n '&nbsp;': ' ',\n '&hellip;': '\u2026',\n '&mdash;': '\u2014',\n '&ndash;': '\u2013',\n '&lsquo;': '\\u2018',\n '&rsquo;': '\\u2019',\n '&ldquo;': '\"',\n '&rdquo;': '\"'\n };\n\n return str.replace(/&[a-zA-Z0-9#]+;/g, entity => {\n // Handle named entities\n if (entityMap[entity]) {\n return entityMap[entity];\n }\n\n // Handle numeric entities like &#39; &#34;\n if (entity.startsWith('&#') && entity.endsWith(';')) {\n const numStr = entity.slice(2, -1);\n const num = parseInt(numStr, 10);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Handle hex entities like &#x27;\n if (entity.startsWith('&#x') && entity.endsWith(';')) {\n const hexStr = entity.slice(3, -1);\n const num = parseInt(hexStr, 16);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Return original if not recognized\n return entity;\n });\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n return selfClosingTags.includes(tagName.toLowerCase());\n }\n\n /**\n * Set up document references after HTML parsing\n */\n private setupDocumentReferences(): void {\n // Find HTML, HEAD, and BODY elements\n const allHtmlElements = this.document.querySelectorAll('html');\n const allHeadElements = this.document.querySelectorAll('head');\n const allBodyElements = this.document.querySelectorAll('body');\n\n // Choose the HTML element with content, then attributes, then first one\n let htmlElement = null;\n // First priority: HTML with attributes (lang, data-theme \uB4F1)\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.attributes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n // Second priority: HTML with child nodes (content)\n if (!htmlElement) {\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.childNodes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n }\n // Last resort: first HTML\n if (!htmlElement && allHtmlElements.length > 0) {\n htmlElement = allHtmlElements[0];\n }\n\n // Choose the HEAD element with content, then attributes, then first one\n let headElement = null;\n // First priority: HEAD with child nodes (content)\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.childNodes.length > 0) {\n headElement = head;\n break;\n }\n }\n // Second priority: HEAD with attributes\n if (!headElement) {\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.attributes.length > 0) {\n headElement = head;\n break;\n }\n }\n }\n // Last resort: first HEAD\n if (!headElement && allHeadElements.length > 0) {\n headElement = allHeadElements[0];\n }\n\n // Choose the BODY element with content, then attributes, then first one\n let bodyElement = null;\n\n // First priority: BODY with child nodes (content)\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.childNodes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n\n // Second priority: BODY with attributes\n if (!bodyElement) {\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.attributes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n }\n\n // Last resort: first BODY\n if (!bodyElement && allBodyElements.length > 0) {\n bodyElement = allBodyElements[0];\n }\n\n // Set document references\n if (htmlElement) {\n (this.document as any).documentElement = htmlElement;\n }\n if (headElement) {\n (this.document as any).head = headElement;\n }\n if (bodyElement) {\n (this.document as any).body = bodyElement;\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { DocumentBase } from './node/DocumentBase';\nimport { TextBase } from './node/TextBase';\nimport { Comment } from './node/Comment';\nimport { WindowBase } from './window/WindowBase';\nimport { ElementBase } from './node/elements/ElementBase';\nimport { ElementFactory } from './factory/ElementFactory';\n\n// Inject dependencies into ElementBase to break circular references\n// without using 'require' or 'global' injection magic.\nElementBase.dependencies = {\n ElementFactory,\n TextBase,\n Comment\n};\n\nexport interface DomParserOptions {\n href?: string;\n}\n\nexport class DomParser {\n private _window: Window | null;\n private _document: Document | null;\n\n constructor(html: string, option?: DomParserOptions) {\n console.log('create DomParser==',html)\n // Create WindowBase instance with the document\n const windowBase = new WindowBase({ initialUrl: option?.href });\n this._window = windowBase as unknown as Window;\n this._document = windowBase.document as any;\n\n // Parse the provided HTML string\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n\n // Simulate document loading process\n if (this._document && (this._document as any).simulateLoading) {\n (this._document as any).simulateLoading();\n }\n }\n\n get window(): Window {\n if (!this._window) {\n throw new Error('DomParser has been destroyed');\n }\n return this._window;\n }\n\n get document(): Document {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n return this._document;\n }\n\n /**\n * Destroy the DomParser instance and free memory\n */\n destroy(): void {\n if (this._window) {\n this._window.close();\n this._window = null;\n }\n\n this._document = null;\n }\n\n /**\n * Load new HTML content and replace the current document\n */\n loadHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Clear current document content\n this.clearDocument();\n\n // Parse new HTML\n this.parseHTML(html);\n\n // Set up document references after parsing\n this.setupDocumentReferences();\n }\n\n private clearDocument(): void {\n if (!this._document) return;\n\n // Clear document body and head content while preserving structure\n if (this._document.head) {\n while (this._document.head.firstChild) {\n this._document.head.removeChild(this._document.head.firstChild);\n }\n }\n\n if (this._document.body) {\n while (this._document.body.firstChild) {\n this._document.body.removeChild(this._document.body.firstChild);\n }\n }\n }\n\n parseHTML(html: string): void {\n if (!this._document) {\n throw new Error('DomParser has been destroyed');\n }\n\n // Ensure basic HTML structure if input is empty or lacks it\n if (!html.trim()) {\n html = '<html><head></head><body></body></html>';\n } else if (!/<html/i.test(html)) {\n // If it's just a fragment, we still need html/head/body for a full document\n // but only if it's not explicitly intended to be a fragment?\n // Actually, standard DOMParser.parseFromString always creates them.\n html = `<html><head></head><body>${html}</body></html>`;\n }\n\n // Basic HTML parsing - this is a simplified version\n this.parseHTMLString(html, this.document);\n }\n\n private parseHTMLString(html: string, parent: any): void {\n // Remove DOCTYPE if present\n html = html.replace(/<!DOCTYPE[^>]*>/i, '').trim();\n\n if (!html) return;\n\n // Handle template tags specially\n const templateRegex = /<template([^>]*)>(.*?)<\\/template>/gs;\n html = html.replace(templateRegex, (match, attributes, content) => {\n const element = this.document.createElement('template');\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n // Parse content directly into the template's content fragment\n if (content.trim()) {\n // Use internal method to avoid appendChild side effects\n this.parseHTMLString(content.trim(), element.content);\n }\n\n parent.appendChild(element);\n return ''; // Remove from HTML string\n });\n\n // Improved HTML parsing with proper nesting support\n this.parseHTMLRecursive(html, parent);\n }\n\n private parseHTMLRecursive(html: string, parent: any): void {\n let position = 0;\n\n while (position < html.length) {\n // Find next tag or comment\n const tagStart = html.indexOf('<', position);\n\n if (tagStart === -1) {\n // No more tags, add remaining text if any\n const remainingText = html.substring(position).trim();\n if (remainingText) {\n const textNode = new TextBase(remainingText, this.document);\n parent.appendChild(textNode);\n }\n break;\n }\n\n // Add text before tag if any\n if (tagStart > position) {\n const textContent = html.substring(position, tagStart).trim();\n if (textContent) {\n const textNode = new TextBase(textContent, this.document);\n parent.appendChild(textNode);\n }\n }\n\n // Check if this is a comment\n if (html.substring(tagStart, tagStart + 4) === '<!--') {\n const commentEnd = html.indexOf('-->', tagStart + 4);\n if (commentEnd !== -1) {\n const commentContent = html.substring(tagStart + 4, commentEnd);\n const commentNode = new Comment(commentContent, this.document);\n parent.appendChild(commentNode);\n position = commentEnd + 3;\n continue;\n } else {\n // Malformed comment, treat as text\n const textNode = new TextBase(html.substring(tagStart, tagStart + 4), this.document);\n parent.appendChild(textNode);\n position = tagStart + 4;\n continue;\n }\n }\n\n // Find tag end\n const tagEnd = html.indexOf('>', tagStart);\n if (tagEnd === -1) break;\n\n const tagContent = html.substring(tagStart + 1, tagEnd);\n\n // Check if it's a closing tag\n if (tagContent.startsWith('/')) {\n // This is a closing tag, we should return to parent\n position = tagEnd + 1;\n break;\n }\n\n // Check if it's a self-closing tag\n const isSelfClosing = tagContent.endsWith('/') || this.isSelfClosingTag(tagContent.split(/\\s+/)[0]);\n\n // Parse tag name and attributes\n const spaceIndex = tagContent.indexOf(' ');\n const tagName = spaceIndex === -1 ? tagContent.replace('/', '') : tagContent.substring(0, spaceIndex);\n let attributes = spaceIndex === -1 ? '' : tagContent.substring(spaceIndex + 1);\n\n // Only remove trailing slash for self-closing tags (not from attribute values)\n if (attributes.endsWith('/')) {\n attributes = attributes.slice(0, -1).trim();\n }\n\n // Create element\n const element = this.document.createElement(tagName.toLowerCase());\n\n // Parse attributes\n if (attributes.trim()) {\n this.parseAttributes(attributes, element);\n }\n\n parent.appendChild(element);\n\n if (isSelfClosing) {\n position = tagEnd + 1;\n } else {\n // Find matching closing tag and parse content\n const closingTag = `</${tagName}>`;\n const closingTagIndex = this.findMatchingClosingTag(html, tagEnd + 1, tagName);\n\n if (closingTagIndex !== -1) {\n const innerContent = html.substring(tagEnd + 1, closingTagIndex);\n if (innerContent.trim()) {\n this.parseHTMLRecursive(innerContent, element);\n }\n position = closingTagIndex + closingTag.length;\n } else {\n // No matching closing tag found, treat as self-closing\n position = tagEnd + 1;\n }\n }\n }\n }\n\n private findMatchingClosingTag(html: string, startPos: number, tagName: string): number {\n const openTag = `<${tagName}`;\n const closeTag = `</${tagName}>`;\n let depth = 1;\n let pos = startPos;\n\n while (pos < html.length && depth > 0) {\n const nextOpen = html.indexOf(openTag, pos);\n const nextClose = html.indexOf(closeTag, pos);\n\n if (nextClose === -1) {\n // No more closing tags\n return -1;\n }\n\n if (nextOpen !== -1 && nextOpen < nextClose) {\n // Found another opening tag before the closing tag\n depth++;\n pos = nextOpen + openTag.length;\n } else {\n // Found a closing tag\n depth--;\n if (depth === 0) {\n return nextClose;\n }\n pos = nextClose + closeTag.length;\n }\n }\n\n return -1;\n }\n\n private parseAttributes(attributeString: string, element: any): void {\n // Improved attribute parsing that handles complex JavaScript expressions\n let position = 0;\n const length = attributeString.length;\n\n while (position < length) {\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position >= length) break;\n\n // Find attribute name\n const nameStart = position;\n while (position < length && /[\\w:-]/.test(attributeString[position])) {\n position++;\n }\n\n if (position === nameStart) {\n // Invalid character, skip it\n position++;\n continue;\n }\n\n const name = attributeString.substring(nameStart, position);\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n let value = '';\n\n // Check if there's an equals sign\n if (position < length && attributeString[position] === '=') {\n position++; // Skip '='\n\n // Skip whitespace\n while (position < length && /\\s/.test(attributeString[position])) {\n position++;\n }\n\n if (position < length) {\n const quote = attributeString[position];\n\n if (quote === '\"' || quote === \"'\") {\n // Quoted value - find matching closing quote\n position++; // Skip opening quote\n const valueStart = position;\n\n while (position < length && attributeString[position] !== quote) {\n position++;\n }\n\n value = attributeString.substring(valueStart, position);\n\n if (position < length && attributeString[position] === quote) {\n position++; // Skip closing quote\n }\n } else {\n // Unquoted value - read until whitespace or end\n const valueStart = position;\n while (position < length && !/\\s/.test(attributeString[position])) {\n position++;\n }\n value = attributeString.substring(valueStart, position);\n }\n }\n }\n\n // Decode HTML entities in attribute values\n value = this.decodeHTMLEntities(value);\n\n element.setAttribute(name, value);\n }\n }\n\n /**\n * Decode HTML entities in a string\n */\n private decodeHTMLEntities(str: string): string {\n const entityMap: { [key: string]: string } = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\",\n '&#34;': '\"',\n '&apos;': \"'\",\n '&copy;': '\u00A9',\n '&reg;': '\u00AE',\n '&trade;': '\u2122',\n '&nbsp;': ' ',\n '&hellip;': '\u2026',\n '&mdash;': '\u2014',\n '&ndash;': '\u2013',\n '&lsquo;': '\\u2018',\n '&rsquo;': '\\u2019',\n '&ldquo;': '\"',\n '&rdquo;': '\"'\n };\n\n return str.replace(/&[a-zA-Z0-9#]+;/g, entity => {\n // Handle named entities\n if (entityMap[entity]) {\n return entityMap[entity];\n }\n\n // Handle numeric entities like &#39; &#34;\n if (entity.startsWith('&#') && entity.endsWith(';')) {\n const numStr = entity.slice(2, -1);\n const num = parseInt(numStr, 10);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Handle hex entities like &#x27;\n if (entity.startsWith('&#x') && entity.endsWith(';')) {\n const hexStr = entity.slice(3, -1);\n const num = parseInt(hexStr, 16);\n if (!isNaN(num)) {\n return String.fromCharCode(num);\n }\n }\n\n // Return original if not recognized\n return entity;\n });\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n return selfClosingTags.includes(tagName.toLowerCase());\n }\n\n /**\n * Set up document references after HTML parsing\n */\n private setupDocumentReferences(): void {\n // Find HTML, HEAD, and BODY elements\n const allHtmlElements = this.document.querySelectorAll('html');\n const allHeadElements = this.document.querySelectorAll('head');\n const allBodyElements = this.document.querySelectorAll('body');\n\n // Choose the HTML element with content, then attributes, then first one\n let htmlElement = null;\n // First priority: HTML with attributes (lang, data-theme \uB4F1)\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.attributes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n // Second priority: HTML with child nodes (content)\n if (!htmlElement) {\n for (let i = 0; i < allHtmlElements.length; i++) {\n const html = allHtmlElements[i];\n if (html.childNodes.length > 0) {\n htmlElement = html;\n break;\n }\n }\n }\n // Last resort: first HTML\n if (!htmlElement && allHtmlElements.length > 0) {\n htmlElement = allHtmlElements[0];\n }\n\n // Choose the HEAD element with content, then attributes, then first one\n let headElement = null;\n // First priority: HEAD with child nodes (content)\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.childNodes.length > 0) {\n headElement = head;\n break;\n }\n }\n // Second priority: HEAD with attributes\n if (!headElement) {\n for (let i = 0; i < allHeadElements.length; i++) {\n const head = allHeadElements[i];\n if (head.attributes.length > 0) {\n headElement = head;\n break;\n }\n }\n }\n // Last resort: first HEAD\n if (!headElement && allHeadElements.length > 0) {\n headElement = allHeadElements[0];\n }\n\n // Choose the BODY element with content, then attributes, then first one\n let bodyElement = null;\n\n // First priority: BODY with child nodes (content)\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.childNodes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n\n // Second priority: BODY with attributes\n if (!bodyElement) {\n for (let i = 0; i < allBodyElements.length; i++) {\n const body = allBodyElements[i];\n if (body.attributes.length > 0) {\n bodyElement = body;\n break;\n }\n }\n }\n\n // Last resort: first BODY\n if (!bodyElement && allBodyElements.length > 0) {\n bodyElement = allBodyElements[0];\n }\n\n // Set document references\n if (htmlElement) {\n (this.document as any).documentElement = htmlElement;\n }\n if (headElement) {\n (this.document as any).head = headElement;\n }\n if (bodyElement) {\n (this.document as any).body = bodyElement;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,6 @@
1
+ export * from "./index.js";
2
+ import * as DomParserModule from "./index.js";
3
+ export {
4
+ DomParserModule
5
+ };
6
+ //# sourceMappingURL=bundle-entry.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/bundle-entry.ts"],
4
+ "sourcesContent": ["export * from './index';\nexport * as DomParserModule from './index';\n"],
5
+ "mappings": "AAAA,cAAc;AACd,YAAY,qBAAqB;",
6
+ "names": []
7
+ }
@@ -1,4 +1,4 @@
1
- import { HTMLGenericElement, htmlElements, svgElements, mathmlElements } from "../node/elements/index.js";
1
+ import { htmlElements, svgElements, mathmlElements, HTMLElement } from "../node/elements/index.js";
2
2
  class ElementFactory {
3
3
  /**
4
4
  * Creates an HTML element based on the tag name
@@ -20,15 +20,18 @@ class ElementFactory {
20
20
  return element;
21
21
  }
22
22
  }
23
- if (normalizedTagName.includes("-") && customElements && typeof customElements.get === "function") {
24
- const CustomElementClass = customElements.get(normalizedTagName);
25
- if (CustomElementClass) {
26
- const element = new CustomElementClass();
27
- element._tagName = tagName.toUpperCase();
28
- element.nodeName = tagName.toUpperCase();
29
- element._ownerDocument = ownerDocument;
30
- return element;
23
+ if (normalizedTagName.includes("-")) {
24
+ if (customElements && typeof customElements.get === "function") {
25
+ const CustomElementClass = customElements.get(normalizedTagName);
26
+ if (CustomElementClass) {
27
+ const element = new CustomElementClass();
28
+ element._tagName = tagName.toUpperCase();
29
+ element.nodeName = tagName.toUpperCase();
30
+ element._ownerDocument = ownerDocument;
31
+ return element;
32
+ }
31
33
  }
34
+ return new HTMLElement(tagName.toUpperCase(), ownerDocument);
32
35
  }
33
36
  for (const [tag, ElementClass] of Object.entries(htmlElements)) {
34
37
  if (tag === normalizedTagName) {
@@ -45,7 +48,7 @@ class ElementFactory {
45
48
  return new ElementClass(tagName.toUpperCase(), ownerDocument);
46
49
  }
47
50
  }
48
- return new HTMLGenericElement(tagName.toUpperCase(), ownerDocument);
51
+ return new HTMLElement(tagName.toUpperCase(), ownerDocument);
49
52
  }
50
53
  /**
51
54
  * Get all supported HTML tag names
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/factory/ElementFactory.ts"],
4
- "sourcesContent": ["import { HTMLElementBase, HTMLGenericElement, htmlElements, svgElements, mathmlElements } from '../node/elements';\n\n/**\n * Factory for creating HTML elements based on tag names\n */\nexport class ElementFactory {\n /**\n * Creates an HTML element based on the tag name\n */\n static createElement(tagName: string, ownerDocument?: any, options?: any): HTMLElementBase {\n const normalizedTagName = tagName.toLowerCase();\n const customElements = (ownerDocument as any)?.defaultView?.customElements;\n\n // 1. Check for Customized Built-in Elements (is=\"\")\n const isAttribute = typeof options === 'string' ? options : options?.is;\n if (isAttribute && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(isAttribute);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n if (element.setAttribute) {\n element.setAttribute('is', isAttribute);\n }\n return element;\n }\n }\n\n // 2. Check for Autonomous Custom Elements\n if (normalizedTagName.includes('-') && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(normalizedTagName);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n return element;\n }\n }\n\n // 3. Check HTML elements\n\n for (const [tag, ElementClass] of Object.entries(htmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check SVG elements\n for (const [tag, ElementClass] of Object.entries(svgElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check MathML elements\n for (const [tag, ElementClass] of Object.entries(mathmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // For unknown elements, create a generic HTMLElement\n return new HTMLGenericElement(tagName.toUpperCase(), ownerDocument);\n }\n\n /**\n * Get all supported HTML tag names\n */\n static getSupportedHTMLTagNames(): string[] {\n return Object.keys(htmlElements);\n }\n\n /**\n * Get all supported SVG tag names\n */\n static getSupportedSVGTagNames(): string[] {\n return Object.keys(svgElements);\n }\n\n /**\n * Get all supported MathML tag names\n */\n static getSupportedMathMLTagNames(): string[] {\n return Object.keys(mathmlElements);\n }\n\n /**\n * Get all supported tag names\n */\n static getSupportedTagNames(): string[] {\n return [...ElementFactory.getSupportedHTMLTagNames(), ...ElementFactory.getSupportedSVGTagNames(), ...ElementFactory.getSupportedMathMLTagNames()];\n }\n}\n"],
5
- "mappings": "AAAA,SAA0B,oBAAoB,cAAc,aAAa,sBAAsB;AAKxF,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,cAAc,SAAiB,eAAqB,SAAgC;AACzF,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,iBAAkB,eAAuB,aAAa;AAG5D,UAAM,cAAc,OAAO,YAAY,WAAW,UAAU,SAAS;AACrE,QAAI,eAAe,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC7E,YAAM,qBAAqB,eAAe,IAAI,WAAW;AACzD,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,YAAI,QAAQ,cAAc;AACxB,kBAAQ,aAAa,MAAM,WAAW;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,QAAI,kBAAkB,SAAS,GAAG,KAAK,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AACjG,YAAM,qBAAqB,eAAe,IAAI,iBAAiB;AAC/D,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,eAAO;AAAA,MACT;AAAA,IACF;AAIA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC9D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC7D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,cAAc,GAAG;AAChE,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,WAAO,IAAI,mBAAmB,QAAQ,YAAY,GAAG,aAAa;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAAqC;AAC1C,WAAO,OAAO,KAAK,YAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAoC;AACzC,WAAO,OAAO,KAAK,WAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BAAuC;AAC5C,WAAO,OAAO,KAAK,cAAc;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAiC;AACtC,WAAO,CAAC,GAAG,eAAe,yBAAyB,GAAG,GAAG,eAAe,wBAAwB,GAAG,GAAG,eAAe,2BAA2B,CAAC;AAAA,EACnJ;AACF;",
4
+ "sourcesContent": ["import {HTMLElementBase, htmlElements, svgElements, mathmlElements, HTMLElement} from '../node/elements';\n\n/**\n * Factory for creating HTML elements based on tag names\n */\nexport class ElementFactory {\n /**\n * Creates an HTML element based on the tag name\n */\n static createElement(tagName: string, ownerDocument?: any, options?: any): HTMLElementBase {\n const normalizedTagName = tagName.toLowerCase();\n const customElements = (ownerDocument as any)?.defaultView?.customElements;\n\n // 1. Check for Customized Built-in Elements (is=\"\")\n const isAttribute = typeof options === 'string' ? options : options?.is;\n if (isAttribute && customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(isAttribute);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n if (element.setAttribute) {\n element.setAttribute('is', isAttribute);\n }\n return element;\n }\n }\n\n // 2. Check for Autonomous Custom Elements (or preserve unknown custom tags)\n // console.log('vvv2222222vvvvvvvvv222222vvvvv', tagName, normalizedTagName)\n if (normalizedTagName.includes('-')) {\n // console.log('vvvvvvvvvvvvvvvvv')\n if (customElements && typeof customElements.get === 'function') {\n const CustomElementClass = customElements.get(normalizedTagName);\n if (CustomElementClass) {\n const element = new CustomElementClass() as any;\n element._tagName = tagName.toUpperCase();\n element.nodeName = tagName.toUpperCase();\n element._ownerDocument = ownerDocument;\n return element;\n }\n }\n\n // No registered custom element yet \u2013 keep the tag name intact.\n return new HTMLElement(tagName.toUpperCase(), ownerDocument);\n }\n\n // 3. Check HTML elements\n\n for (const [tag, ElementClass] of Object.entries(htmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check SVG elements\n for (const [tag, ElementClass] of Object.entries(svgElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // Check MathML elements\n for (const [tag, ElementClass] of Object.entries(mathmlElements)) {\n if (tag === normalizedTagName) {\n return new ElementClass(tagName.toUpperCase(), ownerDocument) as HTMLElementBase;\n }\n }\n\n // For unknown elements, create a generic HTMLElement\n return new HTMLElement(tagName.toUpperCase(), ownerDocument);\n }\n\n /**\n * Get all supported HTML tag names\n */\n static getSupportedHTMLTagNames(): string[] {\n return Object.keys(htmlElements);\n }\n\n /**\n * Get all supported SVG tag names\n */\n static getSupportedSVGTagNames(): string[] {\n return Object.keys(svgElements);\n }\n\n /**\n * Get all supported MathML tag names\n */\n static getSupportedMathMLTagNames(): string[] {\n return Object.keys(mathmlElements);\n }\n\n /**\n * Get all supported tag names\n */\n static getSupportedTagNames(): string[] {\n return [...ElementFactory.getSupportedHTMLTagNames(), ...ElementFactory.getSupportedSVGTagNames(), ...ElementFactory.getSupportedMathMLTagNames()];\n }\n}\n"],
5
+ "mappings": "AAAA,SAAyB,cAAc,aAAa,gBAAgB,mBAAkB;AAK/E,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA,EAI1B,OAAO,cAAc,SAAiB,eAAqB,SAAgC;AACzF,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,iBAAkB,eAAuB,aAAa;AAG5D,UAAM,cAAc,OAAO,YAAY,WAAW,UAAU,SAAS;AACrE,QAAI,eAAe,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC7E,YAAM,qBAAqB,eAAe,IAAI,WAAW;AACzD,UAAI,oBAAoB;AACtB,cAAM,UAAU,IAAI,mBAAmB;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,WAAW,QAAQ,YAAY;AACvC,gBAAQ,iBAAiB;AACzB,YAAI,QAAQ,cAAc;AACxB,kBAAQ,aAAa,MAAM,WAAW;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAIA,QAAI,kBAAkB,SAAS,GAAG,GAAG;AAEnC,UAAI,kBAAkB,OAAO,eAAe,QAAQ,YAAY;AAC9D,cAAM,qBAAqB,eAAe,IAAI,iBAAiB;AAC/D,YAAI,oBAAoB;AACtB,gBAAM,UAAU,IAAI,mBAAmB;AACvC,kBAAQ,WAAW,QAAQ,YAAY;AACvC,kBAAQ,WAAW,QAAQ,YAAY;AACvC,kBAAQ,iBAAiB;AACzB,iBAAO;AAAA,QACT;AAAA,MACF;AAGA,aAAO,IAAI,YAAY,QAAQ,YAAY,GAAG,aAAa;AAAA,IAC7D;AAIA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,YAAY,GAAG;AAC9D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC7D,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,eAAW,CAAC,KAAK,YAAY,KAAK,OAAO,QAAQ,cAAc,GAAG;AAChE,UAAI,QAAQ,mBAAmB;AAC7B,eAAO,IAAI,aAAa,QAAQ,YAAY,GAAG,aAAa;AAAA,MAC9D;AAAA,IACF;AAGA,WAAO,IAAI,YAAY,QAAQ,YAAY,GAAG,aAAa;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,2BAAqC;AAC1C,WAAO,OAAO,KAAK,YAAY;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,0BAAoC;AACzC,WAAO,OAAO,KAAK,WAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,6BAAuC;AAC5C,WAAO,OAAO,KAAK,cAAc;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,uBAAiC;AACtC,WAAO,CAAC,GAAG,eAAe,yBAAyB,GAAG,GAAG,eAAe,wBAAwB,GAAG,GAAG,eAAe,2BAA2B,CAAC;AAAA,EACnJ;AACF;",
6
6
  "names": []
7
7
  }
package/dist/esm/index.js CHANGED
@@ -1,6 +1,17 @@
1
1
  import { DomParser } from "./DomParser.js";
2
2
  import { NodeIterator } from "./node/NodeIterator.js";
3
3
  import { NodeFilter } from "./node/NodeFilter.js";
4
+ import { HTMLElementBase } from "./node/elements/HTMLElementBase.js";
5
+ import { ElementBase } from "./node/elements/ElementBase.js";
6
+ import { HTMLElement } from "./node/elements/HTMLElement.js";
7
+ import { NodeBase } from "./node/NodeBase.js";
8
+ import { ParentNodeBase } from "./node/ParentNodeBase.js";
9
+ import { ChildNodeBase } from "./node/ChildNodeBase.js";
10
+ import { DocumentBase } from "./node/DocumentBase.js";
11
+ import { DocumentFragmentBase } from "./node/DocumentFragmentBase.js";
12
+ import { ShadowRootBase } from "./node/ShadowRootBase.js";
13
+ import { WindowBase } from "./window/WindowBase.js";
14
+ import { ElementFactory } from "./factory/ElementFactory.js";
4
15
  const parseHTML = (html, option) => {
5
16
  const parser = new DomParser(html, option);
6
17
  return parser.window;
@@ -10,9 +21,20 @@ var src_default = {
10
21
  parseHTML
11
22
  };
12
23
  export {
24
+ ChildNodeBase,
25
+ DocumentBase,
26
+ DocumentFragmentBase,
13
27
  DomParser,
28
+ ElementBase,
29
+ ElementFactory,
30
+ HTMLElement,
31
+ HTMLElementBase,
32
+ NodeBase,
14
33
  NodeFilter,
15
34
  NodeIterator,
35
+ ParentNodeBase,
36
+ ShadowRootBase,
37
+ WindowBase,
16
38
  src_default as default,
17
39
  parseHTML
18
40
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["import {DomParser, DomParserOptions} from './DomParser';\n\n// Main exports - what users actually need\nexport {DomParser};\nexport {NodeIterator} from './node/NodeIterator';\nexport {NodeFilter} from './node/NodeFilter'\n// Utility function to parse HTML and return window object\nexport const parseHTML = (html: string, option?: DomParserOptions) => {\n const parser = new DomParser(html, option);\n return parser.window;\n};\n\n// Default export\nexport default {\n DomParser,\n parseHTML\n};\n\n// Internal exports (commented out - users don't need these)\n// export { WindowBase } from './window/WindowBase';\n// export { Window } from './window/Window';\n// export { Document } from \"./node/Document\";\n// export { NodeIterator, NodeFilter } from \"./node/NodeIterator\";\n// export * from \"./factory\";\n// export * from \"./node/elements\";\n// export { DocumentBase } from \"./node/DocumentBase\";\n// export * from \"./node/DocumentFragment\";\n// export { DocumentFragmentBase } from \"./node/DocumentFragmentBase\";\n// export * from \"./node/Node\";\n"],
5
- "mappings": "AAAA,SAAQ,iBAAkC;AAI1C,SAAQ,oBAAmB;AAC3B,SAAQ,kBAAiB;AAElB,MAAM,YAAY,CAAC,MAAc,WAA8B;AACpE,QAAM,SAAS,IAAI,UAAU,MAAM,MAAM;AACzC,SAAO,OAAO;AAChB;AAGA,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AACF;",
4
+ "sourcesContent": ["import {DomParser, DomParserOptions} from './DomParser';\n\n// Main exports - what users actually need\nexport {DomParser};\nexport {NodeIterator} from './node/NodeIterator';\nexport {NodeFilter} from './node/NodeFilter'\nexport { HTMLElementBase } from './node/elements/HTMLElementBase';\nexport { ElementBase } from './node/elements/ElementBase';\nexport { HTMLElement } from './node/elements/HTMLElement';\nexport { NodeBase } from './node/NodeBase';\nexport { ParentNodeBase } from './node/ParentNodeBase';\nexport { ChildNodeBase } from './node/ChildNodeBase';\nexport { DocumentBase } from './node/DocumentBase';\nexport { DocumentFragmentBase } from './node/DocumentFragmentBase';\nexport { ShadowRootBase } from './node/ShadowRootBase';\nexport { WindowBase } from './window/WindowBase';\nexport { ElementFactory } from './factory/ElementFactory';\n// Utility function to parse HTML and return window object\nexport const parseHTML = (html: string, option?: DomParserOptions) => {\n const parser = new DomParser(html, option);\n return parser.window;\n};\n\n// Default export\nexport default {\n DomParser,\n parseHTML\n};\n\n// Internal exports (commented out - users don't need these)\n// export { WindowBase } from './window/WindowBase';\n// export { Window } from './window/Window';\n// export { Document } from \"./node/Document\";\n// export { NodeIterator, NodeFilter } from \"./node/NodeIterator\";\n// export * from \"./factory\";\n// export * from \"./node/elements\";\n// export { DocumentBase } from \"./node/DocumentBase\";\n// export * from \"./node/DocumentFragment\";\n// export { DocumentFragmentBase } from \"./node/DocumentFragmentBase\";\n// export * from \"./node/Node\";\n"],
5
+ "mappings": "AAAA,SAAQ,iBAAkC;AAI1C,SAAQ,oBAAmB;AAC3B,SAAQ,kBAAiB;AACzB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAAS,sBAAsB;AAC/B,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAExB,MAAM,YAAY,CAAC,MAAc,WAA8B;AACpE,QAAM,SAAS,IAAI,UAAU,MAAM,MAAM;AACzC,SAAO,OAAO;AAChB;AAGA,IAAO,cAAQ;AAAA,EACb;AAAA,EACA;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLAnchorElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLAnchorElement extends HTMLElement {
3
3
  constructor(tagName, ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  this._href = "";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLAnchorElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLAElement`** class represents an HTML `<a>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement)\n */\nexport class HTMLAnchorElement extends HTMLElementBase {\n private _href: string = '';\n private _target: string = '';\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get href(): string {\n return this._href;\n }\n\n set href(value: string) {\n this._href = value;\n this.setAttribute('href', value);\n }\n\n get target(): string {\n return this._target;\n }\n\n set target(value: string) {\n this._target = value;\n this.setAttribute('target', value);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = value;\n break;\n case 'target':\n this._target = value;\n break;\n }\n }\n\n // Override removeAttribute to sync with properties\n removeAttribute(qualifiedName: string): void {\n super.removeAttribute(qualifiedName);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = '';\n break;\n case 'target':\n this._target = '';\n break;\n }\n }\n}"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAOzB,MAAM,0BAA0B,gBAAiB;AAAA,EAIpD,YAAY,SAAiB,eAAqB;AAC9C,UAAM,SAAS,aAAa;AAJhC,SAAQ,QAAgB;AACxB,SAAQ,UAAkB;AAAA,EAI1B;AAAA,EAEA,IAAI,OAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,KAAK,OAAe;AACpB,SAAK,QAAQ;AACb,SAAK,aAAa,QAAQ,KAAK;AAAA,EACnC;AAAA,EAEA,IAAI,SAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAO,OAAe;AACtB,SAAK,UAAU;AACf,SAAK,aAAa,UAAU,KAAK;AAAA,EACrC;AAAA;AAAA,EAGA,aAAa,eAAuB,OAAqB;AACrD,UAAM,aAAa,eAAe,KAAK;AAEvC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AAAA;AAAA,EAGA,gBAAgB,eAA6B;AACzC,UAAM,gBAAgB,aAAa;AAEnC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AACJ;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLAElement`** class represents an HTML `<a>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAnchorElement)\n */\nexport class HTMLAnchorElement extends HTMLElement {\n private _href: string = '';\n private _target: string = '';\n\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get href(): string {\n return this._href;\n }\n\n set href(value: string) {\n this._href = value;\n this.setAttribute('href', value);\n }\n\n get target(): string {\n return this._target;\n }\n\n set target(value: string) {\n this._target = value;\n this.setAttribute('target', value);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = value;\n break;\n case 'target':\n this._target = value;\n break;\n }\n }\n\n // Override removeAttribute to sync with properties\n removeAttribute(qualifiedName: string): void {\n super.removeAttribute(qualifiedName);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = '';\n break;\n case 'target':\n this._target = '';\n break;\n }\n }\n}"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAOnB,MAAM,0BAA0B,YAAa;AAAA,EAIhD,YAAY,SAAiB,eAAqB;AAC9C,UAAM,SAAS,aAAa;AAJhC,SAAQ,QAAgB;AACxB,SAAQ,UAAkB;AAAA,EAI1B;AAAA,EAEA,IAAI,OAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,KAAK,OAAe;AACpB,SAAK,QAAQ;AACb,SAAK,aAAa,QAAQ,KAAK;AAAA,EACnC;AAAA,EAEA,IAAI,SAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAO,OAAe;AACtB,SAAK,UAAU;AACf,SAAK,aAAa,UAAU,KAAK;AAAA,EACrC;AAAA;AAAA,EAGA,aAAa,eAAuB,OAAqB;AACrD,UAAM,aAAa,eAAe,KAAK;AAEvC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AAAA;AAAA,EAGA,gBAAgB,eAA6B;AACzC,UAAM,gBAAgB,aAAa;AAEnC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AACJ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLAreaElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLAreaElement extends HTMLElement {
3
3
  constructor(ownerDocument) {
4
4
  super("area", ownerDocument);
5
5
  /**
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLAreaElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLAreaElement`** interface provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of `<area>` elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement)\n */\nexport class HTMLAreaElement extends HTMLElementBase {\n /**\n * A string containing the alternative text for the element.\n */\n alt: string = '';\n\n /**\n * A string containing the coordinates of the hot-spot region.\n */\n coords: string = '';\n\n /**\n * A string indicating the shape of the hot-spot.\n */\n shape: string = '';\n\n /**\n * A string containing the URL that the hyperlink points to.\n */\n href: string = '';\n\n /**\n * A string indicating where to display the linked resource.\n */\n target: string = '';\n\n /**\n * A string containing the relationship of the linked resource to the current document.\n */\n rel: string = '';\n\n /**\n * A string containing the MIME type of the linked resource.\n */\n type: string = '';\n\n /**\n * A string containing the language of the linked resource.\n */\n hreflang: string = '';\n\n /**\n * A string containing the media for which the linked resource was designed.\n */\n media: string = '';\n\n /**\n * A string containing the download attribute, indicating that the linked resource is intended to be downloaded.\n */\n download: string = '';\n\n /**\n * A string containing the ping attribute, containing a space-separated list of URLs.\n */\n ping: string = '';\n\n /**\n * A string containing the referrerpolicy attribute.\n */\n referrerPolicy: string = '';\n\n constructor(ownerDocument: Document) {\n super('area', ownerDocument);\n }\n}"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAOzB,MAAM,wBAAwB,gBAAgB;AAAA,EA6DjD,YAAY,eAAyB;AACjC,UAAM,QAAQ,aAAa;AA1D/B;AAAA;AAAA;AAAA,eAAc;AAKd;AAAA;AAAA;AAAA,kBAAiB;AAKjB;AAAA;AAAA;AAAA,iBAAgB;AAKhB;AAAA;AAAA;AAAA,gBAAe;AAKf;AAAA;AAAA;AAAA,kBAAiB;AAKjB;AAAA;AAAA;AAAA,eAAc;AAKd;AAAA;AAAA;AAAA,gBAAe;AAKf;AAAA;AAAA;AAAA,oBAAmB;AAKnB;AAAA;AAAA;AAAA,iBAAgB;AAKhB;AAAA;AAAA;AAAA,oBAAmB;AAKnB;AAAA;AAAA;AAAA,gBAAe;AAKf;AAAA;AAAA;AAAA,0BAAyB;AAAA,EAIzB;AACJ;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLAreaElement`** interface provides special properties and methods (beyond those of the regular object HTMLElement interface it also has available to it by inheritance) for manipulating the layout and presentation of `<area>` elements.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLAreaElement)\n */\nexport class HTMLAreaElement extends HTMLElement {\n /**\n * A string containing the alternative text for the element.\n */\n alt: string = '';\n\n /**\n * A string containing the coordinates of the hot-spot region.\n */\n coords: string = '';\n\n /**\n * A string indicating the shape of the hot-spot.\n */\n shape: string = '';\n\n /**\n * A string containing the URL that the hyperlink points to.\n */\n href: string = '';\n\n /**\n * A string indicating where to display the linked resource.\n */\n target: string = '';\n\n /**\n * A string containing the relationship of the linked resource to the current document.\n */\n rel: string = '';\n\n /**\n * A string containing the MIME type of the linked resource.\n */\n type: string = '';\n\n /**\n * A string containing the language of the linked resource.\n */\n hreflang: string = '';\n\n /**\n * A string containing the media for which the linked resource was designed.\n */\n media: string = '';\n\n /**\n * A string containing the download attribute, indicating that the linked resource is intended to be downloaded.\n */\n download: string = '';\n\n /**\n * A string containing the ping attribute, containing a space-separated list of URLs.\n */\n ping: string = '';\n\n /**\n * A string containing the referrerpolicy attribute.\n */\n referrerPolicy: string = '';\n\n constructor(ownerDocument: Document) {\n super('area', ownerDocument);\n }\n}"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAOnB,MAAM,wBAAwB,YAAY;AAAA,EA6D7C,YAAY,eAAyB;AACjC,UAAM,QAAQ,aAAa;AA1D/B;AAAA;AAAA;AAAA,eAAc;AAKd;AAAA;AAAA;AAAA,kBAAiB;AAKjB;AAAA;AAAA;AAAA,iBAAgB;AAKhB;AAAA;AAAA;AAAA,gBAAe;AAKf;AAAA;AAAA;AAAA,kBAAiB;AAKjB;AAAA;AAAA;AAAA,eAAc;AAKd;AAAA;AAAA;AAAA,gBAAe;AAKf;AAAA;AAAA;AAAA,oBAAmB;AAKnB;AAAA;AAAA;AAAA,iBAAgB;AAKhB;AAAA;AAAA;AAAA,oBAAmB;AAKnB;AAAA;AAAA;AAAA,gBAAe;AAKf;AAAA;AAAA;AAAA,0BAAyB;AAAA,EAIzB;AACJ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLAudioElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLAudioElement extends HTMLElement {
3
3
  constructor(tagName = "AUDIO", ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLAudioElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLAudioElement`** interface provides access to the properties of `<audio>` elements, as well as methods to manipulate them.\n */\nexport class HTMLAudioElement extends HTMLElementBase {\n constructor(tagName: string = 'AUDIO', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}\n"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAKzB,MAAM,yBAAyB,gBAAgB;AAAA,EACpD,YAAY,UAAkB,SAAS,eAAqB;AAC1D,UAAM,SAAS,aAAa;AAAA,EAC9B;AACF;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLAudioElement`** interface provides access to the properties of `<audio>` elements, as well as methods to manipulate them.\n */\nexport class HTMLAudioElement extends HTMLElement {\n constructor(tagName: string = 'AUDIO', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}\n"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAKnB,MAAM,yBAAyB,YAAY;AAAA,EAChD,YAAY,UAAkB,SAAS,eAAqB;AAC1D,UAAM,SAAS,aAAa;AAAA,EAC9B;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLBaseElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLBaseElement extends HTMLElement {
3
3
  constructor(tagName, ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  this._href = "";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLBaseElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLBaseElement`** class represents an HTML `<base>` element.\n * The base element specifies the base URL to use for all relative URLs in a document.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBaseElement)\n */\nexport class HTMLBaseElement extends HTMLElementBase {\n private _href: string = '';\n private _target: string = '';\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n /**\n * Gets or sets the base URL for relative URLs in the document.\n */\n get href(): string {\n return this._href;\n }\n\n set href(value: string) {\n this._href = value;\n this.setAttribute('href', value);\n }\n\n /**\n * Gets or sets the default target for links and forms in the document.\n */\n get target(): string {\n return this._target;\n }\n\n set target(value: string) {\n this._target = value;\n this.setAttribute('target', value);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = value;\n break;\n case 'target':\n this._target = value;\n break;\n }\n }\n\n // Override removeAttribute to sync with properties\n removeAttribute(qualifiedName: string): void {\n super.removeAttribute(qualifiedName);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = '';\n break;\n case 'target':\n this._target = '';\n break;\n }\n }\n}"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAQzB,MAAM,wBAAwB,gBAAgB;AAAA,EAIjD,YAAY,SAAiB,eAAqB;AAC9C,UAAM,SAAS,aAAa;AAJhC,SAAQ,QAAgB;AACxB,SAAQ,UAAkB;AAAA,EAI1B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,KAAK,OAAe;AACpB,SAAK,QAAQ;AACb,SAAK,aAAa,QAAQ,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAO,OAAe;AACtB,SAAK,UAAU;AACf,SAAK,aAAa,UAAU,KAAK;AAAA,EACrC;AAAA;AAAA,EAGA,aAAa,eAAuB,OAAqB;AACrD,UAAM,aAAa,eAAe,KAAK;AAEvC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AAAA;AAAA,EAGA,gBAAgB,eAA6B;AACzC,UAAM,gBAAgB,aAAa;AAEnC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AACJ;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLBaseElement`** class represents an HTML `<base>` element.\n * The base element specifies the base URL to use for all relative URLs in a document.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBaseElement)\n */\nexport class HTMLBaseElement extends HTMLElement {\n private _href: string = '';\n private _target: string = '';\n \n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n /**\n * Gets or sets the base URL for relative URLs in the document.\n */\n get href(): string {\n return this._href;\n }\n\n set href(value: string) {\n this._href = value;\n this.setAttribute('href', value);\n }\n\n /**\n * Gets or sets the default target for links and forms in the document.\n */\n get target(): string {\n return this._target;\n }\n\n set target(value: string) {\n this._target = value;\n this.setAttribute('target', value);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = value;\n break;\n case 'target':\n this._target = value;\n break;\n }\n }\n\n // Override removeAttribute to sync with properties\n removeAttribute(qualifiedName: string): void {\n super.removeAttribute(qualifiedName);\n \n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'href':\n this._href = '';\n break;\n case 'target':\n this._target = '';\n break;\n }\n }\n}"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAQnB,MAAM,wBAAwB,YAAY;AAAA,EAI7C,YAAY,SAAiB,eAAqB;AAC9C,UAAM,SAAS,aAAa;AAJhC,SAAQ,QAAgB;AACxB,SAAQ,UAAkB;AAAA,EAI1B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,KAAK,OAAe;AACpB,SAAK,QAAQ;AACb,SAAK,aAAa,QAAQ,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAiB;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAO,OAAe;AACtB,SAAK,UAAU;AACf,SAAK,aAAa,UAAU,KAAK;AAAA,EACrC;AAAA;AAAA,EAGA,aAAa,eAAuB,OAAqB;AACrD,UAAM,aAAa,eAAe,KAAK;AAEvC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AAAA;AAAA,EAGA,gBAAgB,eAA6B;AACzC,UAAM,gBAAgB,aAAa;AAEnC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,aAAK,QAAQ;AACb;AAAA,MACJ,KAAK;AACD,aAAK,UAAU;AACf;AAAA,IACR;AAAA,EACJ;AACJ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLBodyElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLBodyElement extends HTMLElement {
3
3
  constructor(tagName, ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLBodyElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLBodyElement`** class represents an HTML `<body>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement)\n */\nexport class HTMLBodyElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAOzB,MAAM,wBAAwB,gBAAgB;AAAA,EACjD,YAAY,SAAiB,eAAqB;AAC9C,UAAM,SAAS,aAAa;AAAA,EAChC;AACJ;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLBodyElement`** class represents an HTML `<body>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLBodyElement)\n */\nexport class HTMLBodyElement extends HTMLElement {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n}"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAOnB,MAAM,wBAAwB,YAAY;AAAA,EAC7C,YAAY,SAAiB,eAAqB;AAC9C,UAAM,SAAS,aAAa;AAAA,EAChC;AACJ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLButtonElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLButtonElement extends HTMLElement {
3
3
  constructor(tagName = "BUTTON", ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  this._type = "submit";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLButtonElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLButtonElement`** class represents an HTML `<button>` element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement)\n */\nexport class HTMLButtonElement extends HTMLElementBase {\n private _type: string = 'submit';\n private _disabled: boolean = false;\n private _value: string = '';\n\n constructor(tagName: string = 'BUTTON', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get type(): string {\n return this._type;\n }\n\n set type(value: string) {\n this._type = value;\n this.setAttribute('type', value);\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n get value(): string {\n return this._value;\n }\n\n set value(value: string) {\n this._value = value;\n this.setAttribute('value', value);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n\n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'type':\n this._type = value;\n break;\n case 'disabled':\n this._disabled = true;\n break;\n case 'value':\n this._value = value;\n break;\n }\n }\n\n // Override removeAttribute to sync with properties\n removeAttribute(qualifiedName: string): void {\n super.removeAttribute(qualifiedName);\n\n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'type':\n this._type = 'submit';\n break;\n case 'disabled':\n this._disabled = false;\n break;\n case 'value':\n this._value = '';\n break;\n }\n }\n}\n"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAOzB,MAAM,0BAA0B,gBAAgB;AAAA,EAKrD,YAAY,UAAkB,UAAU,eAAqB;AAC3D,UAAM,SAAS,aAAa;AAL9B,SAAQ,QAAgB;AACxB,SAAQ,YAAqB;AAC7B,SAAQ,SAAiB;AAAA,EAIzB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,OAAe;AACtB,SAAK,QAAQ;AACb,SAAK,aAAa,QAAQ,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,OAAgB;AAC3B,SAAK,YAAY;AACjB,QAAI,OAAO;AACT,WAAK,aAAa,YAAY,EAAE;AAAA,IAClC,OAAO;AACL,WAAK,gBAAgB,UAAU;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,OAAe;AACvB,SAAK,SAAS;AACd,SAAK,aAAa,SAAS,KAAK;AAAA,EAClC;AAAA;AAAA,EAGA,aAAa,eAAuB,OAAqB;AACvD,UAAM,aAAa,eAAe,KAAK;AAEvC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,aAAK,QAAQ;AACb;AAAA,MACF,KAAK;AACH,aAAK,YAAY;AACjB;AAAA,MACF,KAAK;AACH,aAAK,SAAS;AACd;AAAA,IACJ;AAAA,EACF;AAAA;AAAA,EAGA,gBAAgB,eAA6B;AAC3C,UAAM,gBAAgB,aAAa;AAEnC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,aAAK,QAAQ;AACb;AAAA,MACF,KAAK;AACH,aAAK,YAAY;AACjB;AAAA,MACF,KAAK;AACH,aAAK,SAAS;AACd;AAAA,IACJ;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLButtonElement`** class represents an HTML `<button>` element.\n *\n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLButtonElement)\n */\nexport class HTMLButtonElement extends HTMLElement {\n private _type: string = 'submit';\n private _disabled: boolean = false;\n private _value: string = '';\n\n constructor(tagName: string = 'BUTTON', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get type(): string {\n return this._type;\n }\n\n set type(value: string) {\n this._type = value;\n this.setAttribute('type', value);\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = value;\n if (value) {\n this.setAttribute('disabled', '');\n } else {\n this.removeAttribute('disabled');\n }\n }\n\n get value(): string {\n return this._value;\n }\n\n set value(value: string) {\n this._value = value;\n this.setAttribute('value', value);\n }\n\n // Override setAttribute to sync with properties\n setAttribute(qualifiedName: string, value: string): void {\n super.setAttribute(qualifiedName, value);\n\n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'type':\n this._type = value;\n break;\n case 'disabled':\n this._disabled = true;\n break;\n case 'value':\n this._value = value;\n break;\n }\n }\n\n // Override removeAttribute to sync with properties\n removeAttribute(qualifiedName: string): void {\n super.removeAttribute(qualifiedName);\n\n const name = qualifiedName.toLowerCase();\n switch (name) {\n case 'type':\n this._type = 'submit';\n break;\n case 'disabled':\n this._disabled = false;\n break;\n case 'value':\n this._value = '';\n break;\n }\n }\n}\n"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAOnB,MAAM,0BAA0B,YAAY;AAAA,EAKjD,YAAY,UAAkB,UAAU,eAAqB;AAC3D,UAAM,SAAS,aAAa;AAL9B,SAAQ,QAAgB;AACxB,SAAQ,YAAqB;AAC7B,SAAQ,SAAiB;AAAA,EAIzB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,KAAK,OAAe;AACtB,SAAK,QAAQ;AACb,SAAK,aAAa,QAAQ,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,WAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAS,OAAgB;AAC3B,SAAK,YAAY;AACjB,QAAI,OAAO;AACT,WAAK,aAAa,YAAY,EAAE;AAAA,IAClC,OAAO;AACL,WAAK,gBAAgB,UAAU;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,OAAe;AACvB,SAAK,SAAS;AACd,SAAK,aAAa,SAAS,KAAK;AAAA,EAClC;AAAA;AAAA,EAGA,aAAa,eAAuB,OAAqB;AACvD,UAAM,aAAa,eAAe,KAAK;AAEvC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,aAAK,QAAQ;AACb;AAAA,MACF,KAAK;AACH,aAAK,YAAY;AACjB;AAAA,MACF,KAAK;AACH,aAAK,SAAS;AACd;AAAA,IACJ;AAAA,EACF;AAAA;AAAA,EAGA,gBAAgB,eAA6B;AAC3C,UAAM,gBAAgB,aAAa;AAEnC,UAAM,OAAO,cAAc,YAAY;AACvC,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,aAAK,QAAQ;AACb;AAAA,MACF,KAAK;AACH,aAAK,YAAY;AACjB;AAAA,MACF,KAAK;AACH,aAAK,SAAS;AACd;AAAA,IACJ;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLCanvasElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLCanvasElement extends HTMLElement {
3
3
  constructor(tagName = "canvas", ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  this._width = 300;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLCanvasElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\nexport class HTMLCanvasElement extends HTMLElementBase {\n private _width: number = 300;\n private _height: number = 150;\n\n constructor(tagName: string = 'canvas', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get width(): number {\n const widthAttr = this.getAttribute('width');\n if (widthAttr !== null) {\n const parsed = parseInt(widthAttr, 10);\n return isNaN(parsed) ? 300 : parsed;\n }\n return this._width;\n }\n\n set width(value: number) {\n this._width = value;\n this.setAttribute('width', value.toString());\n }\n\n get height(): number {\n const heightAttr = this.getAttribute('height');\n if (heightAttr !== null) {\n const parsed = parseInt(heightAttr, 10);\n return isNaN(parsed) ? 150 : parsed;\n }\n return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n this.setAttribute('height', value.toString());\n }\n\n // Canvas context methods - return null for server-side rendering\n getContext(contextId: string, options?: any): any {\n // In server-side environment, we can't provide real canvas context\n // Return null to indicate context is not available\n return null;\n }\n\n toDataURL(type?: string, quality?: any): string {\n // Return empty data URL for server-side rendering\n return 'data:,';\n }\n\n toBlob(callback: (blob: Blob | null) => void, type?: string, quality?: any): void {\n // Call callback with null blob for server-side rendering\n setTimeout(() => callback(null), 0);\n }\n\n // Canvas size methods\n getBoundingClientRect(): DOMRect {\n // Return a basic DOMRect for server-side rendering\n return {\n x: 0,\n y: 0,\n width: this.width,\n height: this.height,\n top: 0,\n right: this.width,\n bottom: this.height,\n left: 0,\n toJSON: () => ({})\n } as DOMRect;\n }\n}"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAEzB,MAAM,0BAA0B,gBAAgB;AAAA,EAInD,YAAY,UAAkB,UAAU,eAAqB;AACzD,UAAM,SAAS,aAAa;AAJhC,SAAQ,SAAiB;AACzB,SAAQ,UAAkB;AAAA,EAI1B;AAAA,EAEA,IAAI,QAAgB;AAChB,UAAM,YAAY,KAAK,aAAa,OAAO;AAC3C,QAAI,cAAc,MAAM;AACpB,YAAM,SAAS,SAAS,WAAW,EAAE;AACrC,aAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IACjC;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,MAAM,OAAe;AACrB,SAAK,SAAS;AACd,SAAK,aAAa,SAAS,MAAM,SAAS,CAAC;AAAA,EAC/C;AAAA,EAEA,IAAI,SAAiB;AACjB,UAAM,aAAa,KAAK,aAAa,QAAQ;AAC7C,QAAI,eAAe,MAAM;AACrB,YAAM,SAAS,SAAS,YAAY,EAAE;AACtC,aAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IACjC;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAO,OAAe;AACtB,SAAK,UAAU;AACf,SAAK,aAAa,UAAU,MAAM,SAAS,CAAC;AAAA,EAChD;AAAA;AAAA,EAGA,WAAW,WAAmB,SAAoB;AAG9C,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,MAAe,SAAuB;AAE5C,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,UAAuC,MAAe,SAAqB;AAE9E,eAAW,MAAM,SAAS,IAAI,GAAG,CAAC;AAAA,EACtC;AAAA;AAAA,EAGA,wBAAiC;AAE7B,WAAO;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,KAAK;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM;AAAA,MACN,QAAQ,OAAO,CAAC;AAAA,IACpB;AAAA,EACJ;AACJ;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\nexport class HTMLCanvasElement extends HTMLElement {\n private _width: number = 300;\n private _height: number = 150;\n\n constructor(tagName: string = 'canvas', ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n get width(): number {\n const widthAttr = this.getAttribute('width');\n if (widthAttr !== null) {\n const parsed = parseInt(widthAttr, 10);\n return isNaN(parsed) ? 300 : parsed;\n }\n return this._width;\n }\n\n set width(value: number) {\n this._width = value;\n this.setAttribute('width', value.toString());\n }\n\n get height(): number {\n const heightAttr = this.getAttribute('height');\n if (heightAttr !== null) {\n const parsed = parseInt(heightAttr, 10);\n return isNaN(parsed) ? 150 : parsed;\n }\n return this._height;\n }\n\n set height(value: number) {\n this._height = value;\n this.setAttribute('height', value.toString());\n }\n\n // Canvas context methods - return null for server-side rendering\n getContext(contextId: string, options?: any): any {\n // In server-side environment, we can't provide real canvas context\n // Return null to indicate context is not available\n return null;\n }\n\n toDataURL(type?: string, quality?: any): string {\n // Return empty data URL for server-side rendering\n return 'data:,';\n }\n\n toBlob(callback: (blob: Blob | null) => void, type?: string, quality?: any): void {\n // Call callback with null blob for server-side rendering\n setTimeout(() => callback(null), 0);\n }\n\n // Canvas size methods\n getBoundingClientRect(): DOMRect {\n // Return a basic DOMRect for server-side rendering\n return {\n x: 0,\n y: 0,\n width: this.width,\n height: this.height,\n top: 0,\n right: this.width,\n bottom: this.height,\n left: 0,\n toJSON: () => ({})\n } as DOMRect;\n }\n}"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAEnB,MAAM,0BAA0B,YAAY;AAAA,EAI/C,YAAY,UAAkB,UAAU,eAAqB;AACzD,UAAM,SAAS,aAAa;AAJhC,SAAQ,SAAiB;AACzB,SAAQ,UAAkB;AAAA,EAI1B;AAAA,EAEA,IAAI,QAAgB;AAChB,UAAM,YAAY,KAAK,aAAa,OAAO;AAC3C,QAAI,cAAc,MAAM;AACpB,YAAM,SAAS,SAAS,WAAW,EAAE;AACrC,aAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IACjC;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,MAAM,OAAe;AACrB,SAAK,SAAS;AACd,SAAK,aAAa,SAAS,MAAM,SAAS,CAAC;AAAA,EAC/C;AAAA,EAEA,IAAI,SAAiB;AACjB,UAAM,aAAa,KAAK,aAAa,QAAQ;AAC7C,QAAI,eAAe,MAAM;AACrB,YAAM,SAAS,SAAS,YAAY,EAAE;AACtC,aAAO,MAAM,MAAM,IAAI,MAAM;AAAA,IACjC;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAO,OAAe;AACtB,SAAK,UAAU;AACf,SAAK,aAAa,UAAU,MAAM,SAAS,CAAC;AAAA,EAChD;AAAA;AAAA,EAGA,WAAW,WAAmB,SAAoB;AAG9C,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,MAAe,SAAuB;AAE5C,WAAO;AAAA,EACX;AAAA,EAEA,OAAO,UAAuC,MAAe,SAAqB;AAE9E,eAAW,MAAM,SAAS,IAAI,GAAG,CAAC;AAAA,EACtC;AAAA;AAAA,EAGA,wBAAiC;AAE7B,WAAO;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,KAAK;AAAA,MACL,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,MAAM;AAAA,MACN,QAAQ,OAAO,CAAC;AAAA,IACpB;AAAA,EACJ;AACJ;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLCaptionElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLCaptionElement extends HTMLElement {
3
3
  constructor(tagName, ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/elements/HTMLCaptionElement.ts"],
4
- "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\n\n/**\n * The **`HTMLCaptionElement`** class represents an HTML `<caption>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCaptionElement)\n */\nexport class HTMLCaptionElement extends HTMLElementBase {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n /**\n * @deprecated The align property is deprecated. Use CSS text-align instead.\n */\n get align(): string {\n return this.getAttribute('align') || '';\n }\n\n /**\n * @deprecated The align property is deprecated. Use CSS text-align instead.\n */\n set align(value: string) {\n this.setAttribute('align', value);\n }\n}"],
5
- "mappings": "AAAA,SAAS,uBAAuB;AAO1B,MAAO,2BAA2B,gBAAe;EACnD,YAAY,SAAiB,eAAmB;AAC5C,UAAM,SAAS,aAAa;EAChC;;;;EAKA,IAAI,QAAK;AACL,WAAO,KAAK,aAAa,OAAO,KAAK;EACzC;;;;EAKA,IAAI,MAAM,OAAa;AACnB,SAAK,aAAa,SAAS,KAAK;EACpC;;",
4
+ "sourcesContent": ["import { HTMLElementBase } from './HTMLElementBase';\nimport {HTMLElement} from \"./HTMLElement\";\n\n/**\n * The **`HTMLCaptionElement`** class represents an HTML `<caption>` element.\n * \n * [MDN Reference](https://developer.mozilla.org/docs/Web/API/HTMLTableCaptionElement)\n */\nexport class HTMLCaptionElement extends HTMLElement {\n constructor(tagName: string, ownerDocument?: any) {\n super(tagName, ownerDocument);\n }\n\n /**\n * @deprecated The align property is deprecated. Use CSS text-align instead.\n */\n get align(): string {\n return this.getAttribute('align') || '';\n }\n\n /**\n * @deprecated The align property is deprecated. Use CSS text-align instead.\n */\n set align(value: string) {\n this.setAttribute('align', value);\n }\n}"],
5
+ "mappings": "AACA,SAAQ,mBAAkB;AAOpB,MAAO,2BAA2B,YAAW;EAC/C,YAAY,SAAiB,eAAmB;AAC5C,UAAM,SAAS,aAAa;EAChC;;;;EAKA,IAAI,QAAK;AACL,WAAO,KAAK,aAAa,OAAO,KAAK;EACzC;;;;EAKA,IAAI,MAAM,OAAa;AACnB,SAAK,aAAa,SAAS,KAAK;EACpC;;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
- import { HTMLElementBase } from "./HTMLElementBase.js";
2
- class HTMLDListElement extends HTMLElementBase {
1
+ import { HTMLElement } from "./HTMLElement.js";
2
+ class HTMLDListElement extends HTMLElement {
3
3
  constructor(tagName = "DL", ownerDocument) {
4
4
  super(tagName, ownerDocument);
5
5
  }